Market::Update PHP Method

Update() public method

public Update ( $type, $name )
    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);
        }
    }

Usage Example

Exemplo n.º 1
0
require_once '../../common.php';
require_once 'class.market.php';
//////////////////////////////////////////////////////////////////
// Verify Session or Key
//////////////////////////////////////////////////////////////////
checkSession();
$market = new Market();
//////////////////////////////////////////////////////////////////
// Install
//////////////////////////////////////////////////////////////////
if ($_GET['action'] == 'install') {
    if (checkAccess()) {
        $market->Install($_GET['type'], $_GET['name'], $_GET['repo']);
    }
}
//////////////////////////////////////////////////////////////////
// Remove
//////////////////////////////////////////////////////////////////
if ($_GET['action'] == 'remove') {
    if (checkAccess()) {
        $market->Remove($_GET['type'], $_GET['name']);
    }
}
//////////////////////////////////////////////////////////////////
// Update
//////////////////////////////////////////////////////////////////
if ($_GET['action'] == 'update') {
    if (checkAccess()) {
        $market->Update($_GET['type'], $_GET['name']);
    }
}