<?php
class Updater extends Plugin {
- private $link;
private $host;
function about() {
}
function init($host) {
- $this->link = $host->get_link();
$this->host = $host;
$host->add_hook($host::HOOK_PREFS_TAB, $this);
$this);
}
- function update_self_step($link, $step, $params, $force = false) {
+ function update_self_step($step, $params, $force = false) {
// __FILE__ is in plugins/updater so we need to go one level up
$work_dir = dirname(dirname(dirname(__FILE__)));
$parent_dir = dirname($work_dir);
+ // Set PATH to run "which"
+ putenv('PATH="$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"');
$log = array();
if (!is_array($params)) $params = array();
case 0:
array_push($log, "Work directory: $work_dir");
- if (!is_writable($work_dir) && !is_writable("$parent_dir")) {
+ if (!is_writable($work_dir) || !is_writable("$parent_dir")) {
$user = posix_getpwuid(posix_geteuid());
$user = $user["name"];
array_push($log, "Both tt-rss and parent directories should be writable as current user ($user).");
$stop = true; break;
}
+ // bah, also humbug
+ putenv("PATH=" . getenv("PATH") . PATH_SEPARATOR . "/bin" .
+ PATH_SEPARATOR . "/usr/bin");
+
+ array_push($log, "Checking for system() call...");
+
+ $disabled = explode(',', ini_get('disable_functions'));
+ foreach ($disabled as $function) {
+ if ( trim($function) == 'system' ) {
+ array_push($log, "Can not execute commands with PHP's system() function.");
+ $stop = true;
+ }
+ }
+
+ if ( $stop == true ) {
+ break;
+ }
+
array_push($log, "Checking for tar...");
$system_rc = 0;
CACHE_DIR . "/images",
CACHE_DIR . "/js",
CACHE_DIR . "/simplepie",
+ CACHE_DIR . "/upload",
ICONS_DIR,
LOCK_DIRECTORY);
return array("step" => $step, "stop" => $stop, "params" => $params, "log" => $log);
}
- function update_self_cli($link, $force = false) {
+ function update_self_cli($force = false) {
$step = 0;
$stop = false;
$params = array();
while (!$stop) {
- $rc = $this->update_self_step($link, $step, $params, $force);
+ $rc = $this->update_self_step($step, $params, $force);
$params = $rc['params'];
$stop = $rc['stop'];
}
function update_self($args) {
- _debug("Warning: self-updating is experimental. Use at your own risk.");
- _debug("Please backup your tt-rss directory before continuing. Your database will not be modified.");
+ _debug("READ THE FOLLOWING BEFORE CONTINUING!");
+ _debug("* It is suggested to backup your tt-rss directory first.");
+ _debug("* Your database will not be modified.");
+ _debug("* Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes.");
_debug("Type 'yes' to continue.");
$input = read_stdin();
if ($input != 'yes' && $input != 'force')
exit;
- $this->update_self_cli($link, $input == 'force');
+ $this->update_self_cli($input == 'force');
}
function get_prefs_js() {
print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Update Tiny Tiny RSS')."\">";
if ($_SESSION["pref_last_version_check"] + 86400 + rand(-1000, 1000) < time()) {
- $_SESSION["version_data"] = @check_for_update($this->link);
+ $_SESSION["version_data"] = @check_for_update();
$_SESSION["pref_last_version_check"] = time();
}
} else {
print_notice(__("Your Tiny Tiny RSS installation is up to date."));
+
+ print "<br/> <button dojoType=\"dijit.form.Button\" onclick=\"return updateSelf()\">".
+ __('Force update')."</button></p>";
+
}
print "</div>"; #pane
}
function updateSelf() {
+ print_warning(__("Do not close this dialog until updating is finished."));
+
print "<form style='display : block' name='self_update_form' id='self_update_form'>";
- print "<div class='error'>".__("Do not close this dialog until updating is finished. Backup your tt-rss directory before continuing.")."</div>";
+ print "<style type='text/css'>
+ li.notice { font-style : italic; color : red; }
+ </style>";
print "<ul class='selfUpdateList' id='self_update_log'>";
+ print "<li class='notice'>" .__("It is suggested to backup your tt-rss directory first.") . "</li>";
+ print "<li class='notice'>" . __("Your database will not be modified.") . "</li>";
+ print "<li class='notice'>" . __("Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes.") . "</li>";
print "<li>" . __("Ready to update.") . "</li>";
print "</ul>";
$force = (bool) $_REQUEST["force"];
if (($_SESSION["access_level"] >= 10 || SINGLE_USER_MODE) && CHECK_FOR_NEW_VERSION) {
- print json_encode($this->update_self_step($this->link, $step, $params, $force));
+ print json_encode($this->update_self_step($step, $params, $force));
}
}
+ function api_version() {
+ return 2;
+ }
+
}
?>