102ac1dc0f855c9523757af966cfddaef4b53726
[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,"Error: cannot extract(tar error).");        
32
33         //if user not logged in
34         if($_SESSION["slogged"] == false) {
35                 //move to temp folder 
36                 if (file_exists($temprepo . $folder))
37                         rmdirr($temprepo.$folder);
38            rename($tempfolder.$folder, $temprepo.$folder);
39                 
40                 //send mail for review to admins 
41                 $subject = "Review: code upload at temporary repository"; 
42                 $message = "Some developer has uploaded code who has not logged in.\n\nModule is stored in ".$temprepo.$folder.".\n\nOutput of ccanlint: \n";
43                         
44         $toaddress = getccanadmin($db);
45         mail($toaddress, $subject, $message, "From: $frommail");
46         echo "<div align=\"center\"> Stored to temporary repository. Mail will be send to admin to get verification of the code.<//div>";
47         unlink($tempfolder.$_FILES["uploadedfile"]["name"]);
48         exit();
49         } 
50
51         //running ccanlint
52         exec($ccanlint.$tempfolder.$folder, $score, $status);
53                 
54         //if not junk code 
55         if($status == 0) {
56                 $rename = $folder;
57                 $exactpath = $repopath . $_SESSION['susername'] .'/';
58                 
59                 if (file_exists($exactpath)) {
60                         echo "<div align=\"center\"> Your another upload is in progress please wait...</div>";
61                         exit();
62                 }
63                 
64                 //bzr local repo for commit
65                 chdir($repopath);
66                 unset($op); exec($bzr_clone . $_SESSION['susername'], $op, $status);
67                 checkerror($status, "Error: bzr local repo.");
68                 chdir('..');
69                                 
70                 //if module already exist 
71                 if (file_exists($exactpath . $ccan_home_dir . $folder)) {
72
73                         // if owner is not same 
74                         if(!(getowner($ccan_home_dir . $folder, $db) == $_SESSION['susername'])) {      
75                                 if(!file_exists($repopath . $ccan_home_dir . $folder . '-' . $_SESSION['susername']))                           
76                                 echo "<div align=\"center\">". $ccan_home_dir . $folder . " already exists. Renaming to " . $folder . "-" . $_SESSION['susername'] . "</div>";
77                 else
78                                 echo "<div align=\"center\">". $ccan_home_dir . $folder . "-" . $_SESSION['susername'] . " already exists. Overwriting " . $folder. "-" . $_SESSION['susername'] . "</div>";
79                         $rename = $folder."-".$_SESSION['susername'];
80                 }
81                 
82                 else
83                         echo "<div align=\"center\">".$repopath. $ccan_home_dir. $folder. " already exists(uploaded by you). Overwriting ". $repopath. $folder."</div>";
84                                 
85                 }
86
87                 //module not exist. store author to db 
88                 else {
89                         storefileowner($ccan_home_dir . $folder, $_SESSION['susername'], $db);
90                 }
91
92                 rmdirr($exactpath . $ccan_home_dir . $rename);
93            rename($tempfolder . $folder, $exactpath . $ccan_home_dir . $rename);
94                 
95         chdir($exactpath);
96                 unset($op); exec($infotojson . $ccan_home_dir . $rename . " " . $ccan_home_dir. $rename."/_info.c ". $ccan_home_dir . $rename . "/json_" . $rename . " " . $_SESSION['susername']. " ../../" . $db, $op, $status);
97                 checkerror($status,"Error: In infotojson.");
98                 
99                 unset($op); exec('bzr add', $op, $status);
100                 checkerror($status,"Error: bzr add error.");
101                 
102                 unset($op); exec('bzr commit --unchanged -m "commiting from ccan web ' . $rename . " " . $_SESSION['susername'] . '"', $op, $status);
103                 checkerror($status,"Error: bzr commit error."); 
104                         
105                 unset($op); exec($bzr_push, $op, $status);
106                 checkerror($status,"Error: bzr push error.");
107                 
108                 chdir('../..');
109                 rmdirr($exactpath);
110         echo "<div align=\"center\"> Stored to ". $ccan_home_dir . $rename . "</div>";
111         }
112         
113         //if junk code (no _info.c etc) 
114         else {
115         
116                 rmdirr($junkcode.$folder.'-'.$_SESSION['susername']);
117                 rename($tempfolder.$folder, $junkcode.$folder.'-'.$_SESSION['susername']);
118                 
119                 if($score == '')
120                         $msg =  'Below is details for test.';
121                         
122                 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>";
123
124                 foreach($score as $disp)
125                         echo "$disp</br>";
126                 echo "</td></tr></table></div>";
127                 
128         }
129         unlink($tempfolder.$_FILES["uploadedfile"]["name"]);
130 }
131 else {
132         echo "<div align=\"center\"> File type not supported </div>";
133         exit();
134
135
136 function checkerror($status, $msg)
137 {
138         if($status != 0) {
139                     echo "<div align=\"center\">" . $msg . "Contact ccan admin. </div>";
140                     exit();
141         }
142 }
143
144 function getowner($filename, $db)
145 {
146    //getting owner of a file stored at db 
147         $handle = sqlite3_open($db) or die("Could not open database");
148         $query = "SELECT owner FROM fileowner users where filename=\"$filename\"";
149         $result = sqlite3_query($handle, $query) or die("Error in query: ".sqlite3_error($handle));
150         $row = sqlite3_fetch_array($result);
151         return $row["owner"];
152 }
153
154 function storefileowner($filename, $owner, $db)
155 {
156    //storing owner of a file stored at db 
157         $handle = sqlite3_open($db) or die("Could not open database");
158         $query = "insert into fileowner values(\"$filename\", \"$owner\")";
159         $result = sqlite3_exec($handle, $query) or die("Error in query: ".sqlite3_error($handle));
160 }
161 ?>