Esempio n. 1
0
function osc_check_dir_writable($dir = ABS_PATH)
{
    clearstatcache();
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            if ($file != "." && $file != "..") {
                if (is_dir(str_replace("//", "/", $dir . "/" . $file))) {
                    if (str_replace("//", "/", $dir) == ABS_PATH . "oc-content/themes") {
                        if ($file == "modern" || $file == "index.php") {
                            $res = osc_check_dir_writable(str_replace("//", "/", $dir . "/" . $file));
                            if (!$res) {
                                return false;
                            }
                        }
                    } else {
                        if (str_replace("//", "/", $dir) == ABS_PATH . "oc-content/plugins") {
                            if ($file == "google_maps" || $file == "google_analytics" || $file == "index.php") {
                                $res = osc_check_dir_writable(str_replace("//", "/", $dir . "/" . $file));
                                if (!$res) {
                                    return false;
                                }
                            }
                        } else {
                            if (str_replace("//", "/", $dir) == ABS_PATH . "oc-content/languages") {
                                if ($file == "en_US" || $file == "index.php") {
                                    $res = osc_check_dir_writable(str_replace("//", "/", $dir . "/" . $file));
                                    if (!$res) {
                                        return false;
                                    }
                                }
                            } else {
                                if (str_replace("//", "/", $dir) == ABS_PATH . "oc-content/downloads") {
                                } else {
                                    if (str_replace("//", "/", $dir) == ABS_PATH . "oc-content/uploads") {
                                    } else {
                                        $res = osc_check_dir_writable(str_replace("//", "/", $dir . "/" . $file));
                                        if (!$res) {
                                            return false;
                                        }
                                    }
                                }
                            }
                        }
                    }
                } else {
                    return is_writable(str_replace("//", "/", $dir . "/" . $file));
                }
            }
        }
        closedir($dh);
    }
    return true;
}
Esempio n. 2
0
function osc_do_auto_upgrade()
{
    $data = osc_file_get_contents('http://osclass.org/latest_version_v1.php?callback=?');
    $data = preg_replace('|^\\?\\((.*?)\\);$|', '$01', $data);
    $json = json_decode($data);
    $result['error'] = 0;
    if ($json->version > osc_version() && osc_check_dir_writable()) {
        osc_set_preference('update_core_json', $data);
        if (substr($json->version, 0, 1) != substr(osc_version(), 0, 1)) {
            // NEW BRANCH
            if (strpos(osc_auto_update(), 'branch') !== false) {
                osc_run_hook('before_auto_upgrade');
                $result = osc_do_upgrade();
                osc_run_hook('after_auto_upgrade', $result);
            }
        } else {
            if (substr($json->version, 1, 1) != substr(osc_version(), 1, 1)) {
                // MAJOR RELEASE
                if (strpos(osc_auto_update(), 'branch') !== false || strpos(osc_auto_update(), 'major') !== false) {
                    osc_run_hook('before_auto_upgrade');
                    $result = osc_do_upgrade();
                    osc_run_hook('after_auto_upgrade', $result);
                }
            } else {
                if (substr($json->version, 2, 1) != substr(osc_version(), 2, 1)) {
                    // MINOR RELEASE
                    if (strpos(osc_auto_update(), 'branch') !== false || strpos(osc_auto_update(), 'major') !== false || strpos(osc_auto_update(), 'minor') !== false) {
                        osc_run_hook('before_auto_upgrade');
                        $result = osc_do_upgrade();
                        osc_run_hook('after_auto_upgrade', $result);
                    }
                }
            }
        }
    } else {
        osc_set_preference('update_core_json', '');
    }
    osc_set_preference('last_version_check', time());
    if ($result['error'] == 0 || $result['error'] == 6) {
        osc_set_preference('update_core_json', '');
        if (strpos(osc_auto_update(), 'plugins') !== false) {
            $total = osc_check_plugins_update(true);
            if ($total > 0) {
                $elements = osc_get_preference('plugins_to_update');
                foreach ($elements as $element) {
                    if (osc_is_update_compatible('plugins', $element, $json->s_name)) {
                        osc_market('plugins', $element);
                    }
                }
            }
        }
        if (strpos(osc_auto_update(), 'themes') !== false) {
            $total = osc_check_themes_update(true);
            if ($total > 0) {
                $elements = osc_get_preference('themes_to_update');
                foreach ($elements as $element) {
                    if (osc_is_update_compatible('themes', $element, $json->s_name)) {
                        osc_market('themes', $element);
                    }
                }
            }
        }
        if (strpos(osc_auto_update(), 'languages') !== false) {
            $total = osc_check_languages_update(true);
            if ($total > 0) {
                $elements = osc_get_preference('languages_to_update');
                foreach ($elements as $element) {
                    if (osc_is_update_compatible('languages', $element, $json->s_name)) {
                        osc_market('languages', $element);
                    }
                }
            }
        }
    }
}