From 0933adb294c7d75523706bd6217a9e1551d47a16 Mon Sep 17 00:00:00 2001 From: Peter Rotich <peter@osticket.com> Date: Tue, 26 Jun 2012 10:52:15 -0400 Subject: [PATCH] Add upgrader support to AJAX interface --- include/ajax.upgrader.php | 65 +++++++++++++++++++++++++++++++++++++++ scp/ajax.php | 3 +- 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 include/ajax.upgrader.php diff --git a/include/ajax.upgrader.php b/include/ajax.upgrader.php new file mode 100644 index 000000000..1582b7a8c --- /dev/null +++ b/include/ajax.upgrader.php @@ -0,0 +1,65 @@ +<?php +/********************************************************************* + ajax.upgrader.php + + AJAX interface for Upgrader + + Peter Rotich <peter@osticket.com> + Copyright (c) 2006-2012 osTicket + http://www.osticket.com + + Released under the GNU General Public License WITHOUT ANY WARRANTY. + See LICENSE.TXT for details. + + vim: expandtab sw=4 ts=4 sts=4: +**********************************************************************/ + +if(!defined('INCLUDE_DIR')) die('403'); +require_once INCLUDE_DIR.'class.upgrader.php'; + +class UpgraderAjaxAPI extends AjaxController { + + function upgrade() { + global $thisstaff, $ost; + + if(!$thisstaff or !$thisstaff->isAdmin() or !$ost) + Http::response(403, 'Access Denied'); + + $upgrader = new Upgrader($ost->getDBSignature(), TABLE_PREFIX, PATCH_DIR); + + //Just report the next action on the first call. + if(!$_SESSION['ost_upgrader'] || !$_SESSION['ost_upgrader'][$upgrader->getShash()]['progress']) { + $_SESSION['ost_upgrader'][$upgrader->getShash()]['progress'] = $upgrader->getNextAction(); + Http::response(200, $upgrader->getNextAction()); + exit; + } + + if($upgrader->getNumPendingTasks()) { + if($upgrader->doTasks() && !$upgrader->getNumPendingTasks() && $ost->isUpgradePending()) { + //Just reporting done...with tasks - break in between patches! + header("HTTP/1.1 304 Not Modified"); + exit; + } + } elseif($ost->isUpgradePending() && $upgrader->isUpgradable()) { + $version = $upgrader->getNextVersion(); + if($upgrader->upgrade()) { + //We're simply reporting progress here - call back will report next action' + Http::response(200, "Upgraded to $version ... post-upgrade checks!"); + exit; + } + } elseif(!$ost->isUpgradePending()) { + $upgrader->setState('done'); + session_write_close(); + header("HTTP/1.1 304 Not Modified"); + exit; + } + + if($upgrader->isAborted() || $upgrader->getErrors()) { + Http::response(416, "We have a problem ... wait a sec."); + exit; + } + + Http::response(200, $upgrader->getNextAction()); + } +} +?> diff --git a/scp/ajax.php b/scp/ajax.php index 2310fc67a..3237da53f 100644 --- a/scp/ajax.php +++ b/scp/ajax.php @@ -66,7 +66,8 @@ $dispatcher = patterns('', url_post('^(?P<tid>\d+)/lock/(?P<id>\d+)/release', 'releaseLock'), url_get('^lookup', 'lookup'), url_get('^search', 'search') - )) + )), + url_post('^/upgrader', array('ajax.upgrader.php:UpgraderAjaxAPI', 'upgrade')) ); # Call the respective function -- GitLab