get("upgrade_checker_version_info")); } /** * Return true if auto checking is enabled. */ static function auto_check_enabled() { return (bool)module::get_var("gallery", "upgrade_checker_auto_enabled"); } /** * Return true if it's time to auto check. */ static function should_auto_check() { if (upgrade_checker::auto_check_enabled() && random::int(1, 100) == 1) { $version_info = upgrade_checker::version_info(); return (!$version_info || (time() - $version_info->timestamp) > AUTO_CHECK_INTERVAL); } return false; } /** * Fech version info from the Gallery website. */ static function fetch_version_info() { $result = new stdClass(); try { list ($status, $headers, $body) = remote::do_request(upgrade_checker::CHECK_URL); if ($status == "HTTP/1.1 200 OK") { $result->status = "success"; foreach (explode("\n", $body) as $line) { if ($line) { list($key, $val) = explode("=", $line, 2); $result->data[$key] = $val; } } } else { $result->status = "error"; } } catch (Exception $e) { Kohana_Log::add("error", sprintf("%s in %s at line %s:\n%s", $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString())); } $result->timestamp = time(); Cache::instance()->set("upgrade_checker_version_info", serialize($result), null, 86400 * 365); } /** * Check the latest version info blob to see if it's time for an upgrade. */ static function check_for_upgrade() { $version_info = upgrade_checker::version_info(); $upgrade_available = false; if ($version_info) { if (gallery::RELEASE_CHANNEL == "release") { if (version_compare($version_info->data["release_version"], gallery::VERSION, ">")) { site_status::warning( t("A newer version of Gallery is available! Upgrade now to version %version or wait until later.", array("version" => $version_info->data["release_version"], "upgrade-url" => $version_info->data["release_upgrade_url"], "hide-url" => url::site("admin/upgrade_checker/remind_me_later?csrf=__CSRF__"))), "upgrade_checker"); $upgrade_available = true; } } else { $branch = gallery::RELEASE_BRANCH; if (isset($version_info->data["branch_{$branch}_build_number"]) && version_compare($version_info->data["branch_{$branch}_build_number"], gallery::build_number(), ">")) { site_status::warning( t("A newer version of Gallery is available! Upgrade now to version %version (build %build on branch %branch) or wait until later.", array("version" => $version_info->data["branch_{$branch}_version"], "upgrade-url" => $version_info->data["branch_{$branch}_upgrade_url"], "build" => $version_info->data["branch_{$branch}_build_number"], "branch" => $branch, "hide-url" => url::site("admin/upgrade_checker/remind_me_later?csrf=__CSRF__"))), "upgrade_checker"); $upgrade_available = true; } } } if (!$upgrade_available) { site_status::clear("upgrade_checker"); } } }