merge
[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         else
28                 exec('tar -xf '.$tempfolder.$_FILES["uploadedfile"]["name"].' -C '.$tempfolder, $op, $status);
29         checkerror($status,"Error: cannot extract(tar error).");        
30
31         //if user not logged in
32         if($_SESSION["slogged"] == false) {
33                 //move to temp folder 
34                 if (file_exists($temprepo . $folder))
35                         rmdirr($temprepo.$folder);
36            rename($tempfolder.$folder, $temprepo.$folder);
37                 
38                 //send mail for review to admins 
39                 $subject = "Review: code upload at temporary repository"; 
40                 $message = "Some developer has uploaded code who has not logged in.\n\nModule is stored in ".
41                                                         $temprepo.$folder.".\n\nOutput of ccanlint: \n";
42                         
43         $toaddress = getccanadmin($db);
44         mail($toaddress, $subject, $message, "From: $frommail");
45         echo "<div align=\"center\"> Stored to temporary repository. 
46                                 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 . 
77                                                 " already exists. Renaming to " . $folder . "-" . $_SESSION['susername'] . "</div>";
78                 else
79                                 echo "<div align=\"center\">". $ccan_home_dir . $folder . 
80                                                 "-" . $_SESSION['susername'] . " already exists. Overwriting " . 
81                                                         $folder. "-" . $_SESSION['susername'] . "</div>";
82                         $rename = $folder."-".$_SESSION['susername'];
83                 }
84                 
85                 else
86                         echo "<div align=\"center\">".$repopath. $ccan_home_dir. $folder.
87                                          " already exists(uploaded by you). Overwriting ". $repopath. $folder."</div>";
88                                 
89                 }
90
91                 //module not exist. store author to db 
92                 else {
93                         storefileowner($ccan_home_dir . $folder, $_SESSION['susername'], $db);
94                 }
95
96                 rmdirr($exactpath . $ccan_home_dir . $rename);
97            rename($tempfolder . $folder, $exactpath . $ccan_home_dir . $rename);
98                 
99         chdir($exactpath);
100                 unset($op); exec($infotojson . $ccan_home_dir . $rename . " " . $ccan_home_dir.
101                                                  $rename."/_info.c ". $ccan_home_dir . $rename . "/json_" . $rename . " " 
102                                                         . $_SESSION['susername']. " ../../" . $db, $op, $status);
103                 checkerror($status,"Error: In infotojson.");
104                 
105                 unset($op); exec('bzr add', $op, $status);
106                 checkerror($status,"Error: bzr add error.");
107                 
108                 unset($op); exec('bzr commit --unchanged -m "commiting from ccan web ' . $rename . 
109                                                         " " . $_SESSION['susername'] . '"', $op, $status);
110                 checkerror($status,"Error: bzr commit error."); 
111                         
112                 unset($op); exec($bzr_push, $op, $status);
113                 checkerror($status,"Error: bzr push error.");
114                 
115                 unset($op); exec($create_dep_tar . " " . $ccan_home_dir. $rename . " ../../" . 
116                                                         $tar_dir . " ../../" . $db , $op, $status); 
117                 checkerror($status,"Error: bzr push error.");
118                 
119                 chdir('../..');
120                 rmdirr($exactpath);
121         echo "<div align=\"center\"> Stored to ". $ccan_home_dir . $rename . "</div>";
122         }
123         
124         //if junk code (no _info.c etc) 
125         else {
126         
127                 rmdirr($junkcode.$folder.'-'.$_SESSION['susername']);
128                 rename($tempfolder.$folder, $junkcode.$folder.'-'.$_SESSION['susername']);
129                 
130                 if($score == '')
131                         $msg =  'Below is details for test.';
132                         
133                 echo "<div align=\"center\"><table><tr><td> Score for code is low.
134                                  Cannot copy to repository. Moving to ". $junkcode.$folder.'-'.
135                                         $_SESSION['susername']."... </br></br>". $msg ." </br></br></td></tr><tr><td>";
136
137                 foreach($score as $disp)
138                         echo "$disp</br>";
139                 echo "</td></tr></table></div>";
140                 
141         }
142         unlink($tempfolder.$_FILES["uploadedfile"]["name"]);
143 }
144 else {
145         echo "<div align=\"center\"> File type not supported </div>";
146         exit();
147
148
149 function checkerror($status, $msg)
150 {
151         if($status != 0) {
152                     echo "<div align=\"center\">" . $msg . "Contact ccan admin. </div>";
153                     exit();
154         }
155 }
156
157 function getowner($filename, $db)
158 {
159    //getting owner of a file stored at db 
160         $handle = sqlite3_open($db) or die("Could not open database");
161         $query = "SELECT owner FROM fileowner users where filename=\"$filename\"";
162         $result = sqlite3_query($handle, $query) or die("Error in query: ".sqlite3_error($handle));
163         $row = sqlite3_fetch_array($result);
164         return $row["owner"];
165 }
166
167 function storefileowner($filename, $owner, $db)
168 {
169    //storing owner of a file stored at db 
170         $handle = sqlite3_open($db) or die("Could not open database");
171         $query = "insert into fileowner values(\"$filename\", \"$owner\")";
172         $result = sqlite3_exec($handle, $query) or die("Error in query: ".sqlite3_error($handle));
173 }
174 ?>