commiting ccan web pages
[ccan] / web / uploader.php
1 <?php
2 session_start();
3 include('logo.html');
4 include('menulist.html');
5 include('configuration');
6 include('functions.php');
7 include('searchengine.php');
8
9 if ($_FILES["uploadedfile"]["error"] > 0) {
10   echo "Error: " . $_FILES["uploadedfile"]["error"] . "<br />";
11   exit();
12 }
13
14 //list of file types supported 
15 if($_FILES["uploadedfile"]["type"] == "application/x-gzip" 
16         || $_FILES["uploadedfile"]["type"] == "application/x-tar" 
17                 || $_FILES["uploadedfile"]["type"] == "application/x-bzip"
18                         || $_FILES["uploadedfile"]["type"] == "application/zip") {
19         
20         $folder = substr($_FILES["uploadedfile"]["name"], 0, strpos($_FILES["uploadedfile"]["name"],'.'));
21         move_uploaded_file($_FILES["uploadedfile"]["tmp_name"],
22                 $tempfolder . $_FILES["uploadedfile"]["name"]);
23         
24         //extracting code
25         if($_FILES["uploadedfile"]["type"] == "application/zip") {
26                 exec('unzip '.$tempfolder.$_FILES["uploadedfile"]["name"].' -d '.$tempfolder, $op, $status);
27         }
28         else {
29                 exec('tar -xf '.$tempfolder.$_FILES["uploadedfile"]["name"].' -C '.$tempfolder, $op, $status);
30         }
31         checkerror($status[0],"Error: cannot extract(tar error).");     
32
33         //chmod
34         exec('chmod -R 0777 '. $tempfolder.$folder, $status);
35         checkerror($status[0],"Error: chmod execution error."); 
36         
37         //running ccanlint
38         exec($ccanlint.$tempfolder.$folder, $score, $status);
39         //checkerror($status,"Error: ccanlint execution error.");       
40         
41         //if user not logged in
42         if($_SESSION["slogged"] == false) {
43                 //move to temp folder 
44                 if (file_exists($temprepo . $folder))
45                         rmdirr($temprepo.$folder);
46            rename($tempfolder.$folder, $temprepo.$folder);
47                 
48                 //send mail for review to admins 
49                 $subject = "Review: code upload at temporary repository"; 
50                 $message = "Some developer has uploaded code who has not logged in.\n\nModule is stored in ".$temprepo.$folder.".\n\nOutput of ccanlint: \n";
51                 foreach($score as $disp)
52                         $message = $message.$disp."\n";
53                         
54         $toaddress = getccanadmin($db);
55         mail($toaddress, $subject, $message, "From: $frommail");
56         echo "<div align=\"center\"> Stored to temporary repository. Mail will be send to admin to get verification of the code.<//div>";
57         unlink($tempfolder.$_FILES["uploadedfile"]["name"]);
58         exit();
59         } 
60
61         //if not junk code 
62         if($status == 0) {
63                 $rename = $folder;
64                 //if module already exist 
65                 if (file_exists($repopath.$ccan_home_dir . $folder)) {
66                         // if owner is not same 
67                         if(!(getowner($repopath.$ccan_home_dir.$folder, $db) == $_SESSION['susername'])) {      
68                                 if(!file_exists($repopath . $ccan_home_dir. $folder.'-'.$_SESSION['susername']))                        
69                                 echo "<div align=\"center\">".$repopath . $ccan_home_dir. $folder . " already exists. Renaming to ". $folder."-".$_SESSION['susername']."</div>";
70                 else
71                                 echo "<div align=\"center\">".$repopath . $ccan_home_dir. $folder."-".$_SESSION['susername'] . " already exists. Overwriting ". $folder."-".$_SESSION['susername']."</div>";
72                         $rename = $folder."-".$_SESSION['susername'];
73                 }
74                 else
75                         echo "<div align=\"center\">".$repopath. $ccan_home_dir. $folder. " already exists(uploaded by you). Overwriting ". $repopath. $folder."</div>";        
76                 }
77                 //module not exist. store author to db 
78                 else {
79                         storefileowner($repopath . $ccan_home_dir. $folder, $_SESSION['susername'], $db);
80                 }
81                 rmdirr($repopath. $ccan_home_dir. $rename);
82       rename($tempfolder.$folder, $repopath. $ccan_home_dir. $rename);
83       echo "<div align=\"center\"> Stored to ".$repopath . $ccan_home_dir. $rename . "</div>";
84                 
85                 exec($infotojson . $repopath. $ccan_home_dir. $rename."/_info.c ". $repopath. $ccan_home_dir. $rename."/json_".$rename. " ". $_SESSION['susername']." ".$db, $status);
86                 checkerror($status[0],"Error: In infotojson."); 
87                 //createsearchindex($rename, $repopath.$rename, $infofile, $db, $_SESSION['susername']);
88         }
89         
90         //if junk code (no _info.c etc) 
91         else {
92                 rmdirr($junkcode.$folder.'-'.$_SESSION['susername']);
93                 rename($tempfolder.$folder, $junkcode.$folder.'-'.$_SESSION['susername']);
94                 if($score == '')
95                         $msg =  'Below is details for test.';
96                 echo "<div align=\"center\"><table><tr><td> Score for code is low. Cannot copy to repository. Moving to ". $junkcode.$folder.'-'.$_SESSION['susername']."... </br></br>". $msg ." </br></br></td></tr><tr><td>";
97                 foreach($score as $disp)
98                         echo "$disp</br>";
99                 echo "</td></tr></table></div>";
100         }
101         unlink($tempfolder.$_FILES["uploadedfile"]["name"]);
102 }
103 else {
104         echo "<div align=\"center\"> File type not supported </div>";
105         exit();
106
107
108 function checkerror($status, $msg)
109 {
110         if($status != 0) {
111                     echo "<div align=\"center\">" . $msg . "Contact ccan admin. </div>";
112                     exit();
113         }
114 }
115
116 function getowner($filename, $db)
117 {
118    //getting owner of a file stored at db 
119         $handle = sqlite3_open($db) or die("Could not open database");
120         $query = "SELECT owner FROM fileowner users where filename=\"$filename\"";
121         $result = sqlite3_query($handle, $query) or die("Error in query: ".sqlite3_error($handle));
122         $row = sqlite3_fetch_array($result);
123         return $row["owner"];
124 }
125
126 function storefileowner($filename, $owner, $db)
127 {
128    //storing owner of a file stored at db 
129         $handle = sqlite3_open($db) or die("Could not open database");
130         $query = "insert into fileowner values(\"$filename\", \"$owner\")";
131         $result = sqlite3_exec($handle, $query) or die("Error in query: ".sqlite3_error($handle));
132 }
133 ?>