public function Update($type, $name)
{
function rrmdir($path)
{
return is_file($path) ? @unlink($path) : @array_map('rrmdir', glob($path . '/*')) == @rmdir($path);
}
function cpy($source, $dest, $ign)
{
if (is_dir($source)) {
$dir_handle = opendir($source);
while ($file = readdir($dir_handle)) {
if (!in_array($file, $ign)) {
if (is_dir($source . "/" . $file)) {
if (!file_exists($dest . "/" . $file)) {
mkdir($dest . "/" . $file);
}
cpy($source . "/" . $file, $dest . "/" . $file, $ign);
} else {
copy($source . "/" . $file, $dest . "/" . $file);
}
}
}
closedir($dir_handle);
} else {
copy($source, $dest);
}
}
if (file_exists(BASE_PATH . '/' . $type . '/' . $name . '/' . rtrim($type, "s") . '.json')) {
$data = json_decode(file_get_contents(BASE_PATH . '/' . $type . '/' . $name . '/' . rtrim($type, "s") . '.json'), true);
if (substr($data[0]['url'], -4) == '.git') {
$data[0]['url'] = substr($data[0]['url'], 0, -4);
}
$data[0]['url'] .= '/archive/master.zip';
$ign = array(".", "..");
if (isset($data[0]['exclude'])) {
foreach (explode(",", $data[0]['exclude']) as $exclude) {
array_push($ign, $exclude);
}
}
if (file_exists(BASE_PATH . '/' . $type . '/_' . session_id()) || mkdir(BASE_PATH . '/' . $type . '/_' . session_id())) {
if (file_put_contents(BASE_PATH . '/' . $type . '/_' . session_id() . '/' . $name . '.zip', fopen($data[0]['url'], 'r'))) {
$zip = new ZipArchive();
$res = $zip->open(BASE_PATH . '/' . $type . '/_' . session_id() . '/' . $name . '.zip');
// open downloaded archive
if ($res === true) {
// extract archive
if ($zip->extractTo(BASE_PATH . '/' . $type . '/_' . session_id() . '') === true) {
$zip->close();
$srcname = $name;
if (substr($srcname, -6) != "master") {
$srcname = $srcname . '-master';
}
cpy(BASE_PATH . '/' . $type . '/_' . session_id() . '/' . $srcname, BASE_PATH . '/' . $type . '/' . $name, $ign);
} else {
die(formatJSEND("error", "Unable to open " . $name . ".zip"));
}
} else {
die(formatJSEND("error", "ZIP Extension not found"));
}
rrmdir(BASE_PATH . '/' . $type . '/_' . session_id());
// Response
echo formatJSEND("success", null);
} else {
die(formatJSEND("error", "Unable to download " . $repo));
}
} else {
die(formatJSEND("error", "Unable to create temp dir "));
}
} else {
echo formatJSEND("error", "Unable to find " . $name);
}
}