0) {
echo "Error: " . $_FILES["uploadedfile"]["error"] . "
";
exit();
}
//list of file types supported
if($_FILES["uploadedfile"]["type"] == "application/x-gzip"
|| $_FILES["uploadedfile"]["type"] == "application/x-tar"
|| $_FILES["uploadedfile"]["type"] == "application/x-bzip"
|| $_FILES["uploadedfile"]["type"] == "application/zip") {
$folder = substr($_FILES["uploadedfile"]["name"], 0, strpos($_FILES["uploadedfile"]["name"],'.'));
move_uploaded_file($_FILES["uploadedfile"]["tmp_name"],
$tempfolder . $_FILES["uploadedfile"]["name"]);
//extracting code
if($_FILES["uploadedfile"]["type"] == "application/zip")
exec('unzip '.$tempfolder.$_FILES["uploadedfile"]["name"].' -d '.$tempfolder, $op, $status);
else
exec('tar -xf '.$tempfolder.$_FILES["uploadedfile"]["name"].' -C '.$tempfolder, $op, $status);
checkerror($status,"Error: cannot extract(tar error).");
//if user not logged in
if($_SESSION["slogged"] == false) {
//move to temp folder
if (file_exists($temprepo . $folder))
rmdirr($temprepo.$folder);
rename($tempfolder.$folder, $temprepo.$folder);
//send mail for review to admins
$subject = "Review: code upload at temporary repository";
$message = "Some developer has uploaded code who has not logged in.\n\nModule is stored in ".
$temprepo.$folder.".\n\nOutput of ccanlint: \n";
$toaddress = getccanadmin($db);
mail($toaddress, $subject, $message, "From: $frommail");
echo "
Stored to temporary repository.
Mail will be send to admin to get verification of the code./div>";
unlink($tempfolder.$_FILES["uploadedfile"]["name"]);
exit();
}
//running ccanlint
exec($ccanlint.$tempfolder.$folder, $score, $status);
//if not junk code
if($status == 0) {
$rename = $folder;
$exactpath = $repopath . $_SESSION['susername'] .'/';
if (file_exists($exactpath)) {
echo "
Your another upload is in progress please wait...
";
exit();
}
//bzr local repo for commit
chdir($repopath);
unset($op); exec($bzr_clone . $_SESSION['susername'], $op, $status);
checkerror($status, "Error: bzr local repo.");
chdir('..');
//if module already exist
if (file_exists($exactpath . $ccan_home_dir . $folder)) {
// if owner is not same
if(!(getowner($ccan_home_dir . $folder, $db) == $_SESSION['susername'])) {
if(!file_exists($repopath . $ccan_home_dir . $folder . '-' . $_SESSION['susername']))
echo "
". $ccan_home_dir . $folder .
" already exists. Renaming to " . $folder . "-" . $_SESSION['susername'] . "
";
else
echo "
". $ccan_home_dir . $folder .
"-" . $_SESSION['susername'] . " already exists. Overwriting " .
$folder. "-" . $_SESSION['susername'] . "
";
$rename = $folder."-".$_SESSION['susername'];
}
else
echo "
".$repopath. $ccan_home_dir. $folder.
" already exists(uploaded by you). Overwriting ". $repopath. $folder."
";
}
//module not exist. store author to db
else {
storefileowner($ccan_home_dir . $folder, $_SESSION['susername'], $db);
}
rmdirr($exactpath . $ccan_home_dir . $rename);
rename($tempfolder . $folder, $exactpath . $ccan_home_dir . $rename);
chdir($exactpath);
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);
checkerror($status,"Error: In infotojson.");
unset($op); exec('bzr add', $op, $status);
checkerror($status,"Error: bzr add error.");
unset($op); exec('bzr commit --unchanged -m "commiting from ccan web ' . $rename .
" " . $_SESSION['susername'] . '"', $op, $status);
checkerror($status,"Error: bzr commit error.");
unset($op); exec($bzr_push, $op, $status);
checkerror($status,"Error: bzr push error.");
unset($op); exec($create_dep_tar . " " . $ccan_home_dir. $rename . " ../../" .
$tar_dir . " ../../" . $db , $op, $status);
checkerror($status,"Error: bzr push error.");
chdir('../..');
rmdirr($exactpath);
echo "
Stored to ". $ccan_home_dir . $rename . "
";
}
//if junk code (no _info.c etc)
else {
rmdirr($junkcode.$folder.'-'.$_SESSION['susername']);
rename($tempfolder.$folder, $junkcode.$folder.'-'.$_SESSION['susername']);
if($score == '')
$msg = 'Below is details for test.';
echo "
Score for code is low.
Cannot copy to repository. Moving to ". $junkcode.$folder.'-'.
$_SESSION['susername']."... ". $msg ." |
";
foreach($score as $disp)
echo "$disp";
echo " |
";
}
unlink($tempfolder.$_FILES["uploadedfile"]["name"]);
}
else {
echo "
File type not supported
";
exit();
}
function checkerror($status, $msg)
{
if($status != 0) {
echo "
" . $msg . "Contact ccan admin.
";
exit();
}
}
function getowner($filename, $db)
{
//getting owner of a file stored at db
$handle = sqlite3_open($db) or die("Could not open database");
$query = "SELECT owner FROM fileowner users where filename=\"$filename\"";
$result = sqlite3_query($handle, $query) or die("Error in query: ".sqlite3_error($handle));
$row = sqlite3_fetch_array($result);
return $row["owner"];
}
function storefileowner($filename, $owner, $db)
{
//storing owner of a file stored at db
$handle = sqlite3_open($db) or die("Could not open database");
$query = "insert into fileowner values(\"$filename\", \"$owner\")";
$result = sqlite3_exec($handle, $query) or die("Error in query: ".sqlite3_error($handle));
}
?>