929 lines
30 KiB
PHP
929 lines
30 KiB
PHP
<?php
|
|
/**
|
|
* SOTESHOP/stUpdate
|
|
*
|
|
* This file is the part of stUpdate application. License: (Open License SOTE) Open License SOTE.
|
|
* Do not modify this file, system will overwrite it during upgrade.
|
|
*
|
|
* @package stUpdate
|
|
* @subpackage actions
|
|
* @copyright SOTE (www.sote.pl)
|
|
* @license http://www.sote.pl/license/open (Open License SOTE) Open License SOTE
|
|
* @version $Id: actions.class.php 17106 2012-02-14 15:49:20Z michal $
|
|
* @author Marek Jakubowicz <marek.jakubowicz@sote.pl>
|
|
*/
|
|
|
|
// define ("ST_MIN_EXECUTION_TIME",20); // minimalny czas potrzebny do wykonania aktualizacji
|
|
// define ("ST_MIN_EXECUTION_TIME_APP",0.1); // minimalny dodatkowy czas aktualizacji 1 pakietu
|
|
|
|
/**
|
|
* stInstallerWeb actions.
|
|
*
|
|
* @author Marek Jakubowicz <marek.jakubowicz@sote.pl>
|
|
*
|
|
* @package stUpdate
|
|
* @subpackage actions
|
|
*/
|
|
class stInstallerWebActions extends sfActions
|
|
{
|
|
public function preExecute()
|
|
{
|
|
$action = $this->getModuleName().'/'.$this->getActionName();
|
|
|
|
$checkRequirements = new stCheckRequirements();
|
|
|
|
$ignore = $this->getUser()->getAttribute('ignore', false, 'soteshop/stUpdate');
|
|
|
|
if (!$ignore && !in_array($action, array('stInstallerWeb/requirements', 'stInstallerWeb/tools', 'stInstallerWeb/history', 'stInstallerWeb/verifyall')) && !$this->getRequest()->isXmlHttpRequest() && !$checkRequirements->testAll())
|
|
{
|
|
return $this->redirect('stInstallerWeb/requirements');
|
|
}
|
|
|
|
if (!$this->getRequest()->isXmlHttpRequest() && !in_array($action, array('stInstallerWeb/news', 'stInstallerWeb/tools', 'stInstallerWeb/history', 'stInstallerWeb/verifyall')) && (!stCommunication::getUpgradeExpirationDate() || time() > stCommunication::getUpgradeExpirationDate() || stLicense::isOpen())) {
|
|
return $this->redirect('@installerweb?action=news');
|
|
}
|
|
}
|
|
|
|
public function executeAdditionalApplications()
|
|
{
|
|
$config = stConfig::getInstance('stUpdate');
|
|
|
|
$applications = stApplication::getAdditionalApplications();
|
|
|
|
$applicationNames = array_keys($applications);
|
|
|
|
if ($this->getRequest()->getMethod() == sfRequest::POST)
|
|
{
|
|
$active = array();
|
|
|
|
if ($this->hasRequestParameter('disable_all'))
|
|
{
|
|
$active = array();
|
|
}
|
|
elseif ($this->hasRequestParameter('enable_all'))
|
|
{
|
|
$active = $applicationNames;
|
|
}
|
|
else
|
|
{
|
|
$application = $this->getRequestParameter('application');
|
|
|
|
foreach ($applicationNames as $name)
|
|
{
|
|
if (isset($application[strtolower($name)]))
|
|
{
|
|
$active[] = $name;
|
|
}
|
|
}
|
|
}
|
|
|
|
$config->set('active_applications_' . SF_ENVIRONMENT, $active);
|
|
$config->save();
|
|
|
|
|
|
file_put_contents(sfConfig::get('sf_data_dir') . '/.disabled_applications_' . SF_ENVIRONMENT, implode("\n", array_diff($applicationNames, $active)));
|
|
|
|
$pakeweb = new stPakeWeb();
|
|
$pakeweb->run('cc');
|
|
}
|
|
|
|
$this->active = $config->get('active_applications_' . SF_ENVIRONMENT, $applicationNames);
|
|
|
|
$this->applications = $applications;
|
|
}
|
|
|
|
/**
|
|
* Executes index action
|
|
*/
|
|
public function executeIndex()
|
|
{
|
|
$server = new stNewServer();
|
|
if ($server->newServer())
|
|
{
|
|
$this->redirect('installerweb/newServer');
|
|
} else
|
|
{
|
|
$this->redirect('installerweb/news');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Execute newServer action
|
|
*/
|
|
public function executeNewServer()
|
|
{
|
|
$pakeweb = new stPakeWeb();
|
|
$pakeweb->run('cc');
|
|
$server = new stNewServer();
|
|
$server->update();
|
|
}
|
|
|
|
/**
|
|
* List of installed applications.
|
|
*/
|
|
public function executeList() {
|
|
$stRegisterSync = new stRegisterSync();
|
|
$this->content = $stRegisterSync->getSynchronizedApps();
|
|
}
|
|
|
|
/**
|
|
* List of PEAR installer applications.
|
|
*/
|
|
public function executeListpear() {
|
|
$this->content = stPear::getInstalledPackages();
|
|
}
|
|
|
|
public function executeRequirements() {
|
|
if ($this->hasRequestParameter('ignore'))
|
|
{
|
|
$this->getUser()->setAttribute('ignore', true, 'soteshop/stUpdate');
|
|
|
|
return $this->redirect('@homepage');
|
|
}
|
|
|
|
$this->tests = new stCheckRequirements();
|
|
$this->testsPassed = $this->tests->testAll();
|
|
$this->testsStatus = $this->tests->getTest();
|
|
$this->hasWarning = false;
|
|
}
|
|
|
|
public function executeSoteshop6() {
|
|
$smFolders = glob(sfConfig::get('sf_root_dir').DIRECTORY_SEPARATOR.'packages'.DIRECTORY_SEPARATOR.'sm*');
|
|
$tmp = $smFolders;
|
|
foreach($tmp as $key => $smFolder) if (preg_match('/sm[A-Za-z0-9]{0,}Theme/', $smFolder)) unset($smFolders[$key]);
|
|
|
|
$this->error = false;
|
|
if ($smFolders) $this->error = true;
|
|
}
|
|
|
|
/**
|
|
* Executes updatelist action
|
|
* If list contains stUpdate, show only stUpdate.
|
|
*/
|
|
public function executeUpgradeList() {
|
|
if ($this->getRequestParameter('ajax'))
|
|
$ajax = TRUE;
|
|
else
|
|
$ajax = FALSE;
|
|
|
|
if($ajax == FALSE && !$this->getRequest()->hasParameter('confirm')) {
|
|
$packageFile = sfConfig::get('sf_root_dir').'/packages/soteshop_base/package.yml';
|
|
if (file_exists($packageFile)) {
|
|
$package = sfYaml::load($packageFile);
|
|
if(version_compare($package['package']['version'], '6.0.0', '<'))
|
|
return $this->forward('stInstallerWeb', 'soteshop6');
|
|
} else
|
|
return $this->forward('stInstallerWeb', 'soteshop6');
|
|
}
|
|
|
|
if ($ajax == FALSE) {
|
|
$this->tests = new stCheckRequirements();
|
|
|
|
if (!stCheckBrowser::check())
|
|
$this->redirect('stInstallerWeb/checkBrowser');
|
|
|
|
if (!stCheckTheme::check())
|
|
$this->redirect('stInstallerWeb/checkTheme');
|
|
}
|
|
|
|
$this->packages = stPear::getPackagesToUpgrade();
|
|
|
|
if (is_array($this->packages) && !empty($this->packages)) {
|
|
$this->hasPackages = TRUE;
|
|
if (array_key_exists('stUpdate', $this->packages)) {
|
|
$this->hasInstaller = TRUE;
|
|
$this->installerVersion = $this->packages['stUpdate'];
|
|
$this->packages = array('stUpdate' => $this->installerVersion);
|
|
} else
|
|
$this->hasInstaller = FALSE;
|
|
} else
|
|
$this->hasPackages = FALSE;
|
|
|
|
$this->packagesCount = count($this->packages);
|
|
|
|
if($ajax) {
|
|
$this->setLayout(FALSE);
|
|
$this->setTemplate('upgradeListAjax');
|
|
}
|
|
|
|
sfLoader::loadHelpers('stArray', 'stInstallerPlugin');
|
|
$sync = st_array_diff(stRegisterSync::getSynchronizedApps(), stPear::getInstalledPackages());
|
|
|
|
if(in_array('stUpdate', $sync['all'])) {
|
|
$this->hasPackages = FALSE;
|
|
$this->packagesCount = 0;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Application list for synchronization.
|
|
*/
|
|
public function executeSyncList()
|
|
{
|
|
// check if this action is embeded
|
|
$ajax=$this->getRequestParameter('ajax');
|
|
if (! empty($ajax))
|
|
{
|
|
$this->setLayout(false);
|
|
$this->setTemplate('syncListAjax');
|
|
}
|
|
|
|
if (!$this->getRequest()->hasParameter('ajax')) {
|
|
$this->tests = new stCheckRequirements();
|
|
|
|
if (!stCheckBrowser::check()) $this->redirect('stInstallerWeb/checkBrowser');
|
|
if (!stCheckTheme::check()) $this->redirect('stInstallerWeb/checkTheme');
|
|
}
|
|
|
|
sfLoader::loadHelpers('stArray', 'stInstallerPlugin');
|
|
$apps_sync = st_array_diff(stRegisterSync::getSynchronizedApps(), stPear::getInstalledPackages());
|
|
|
|
$this->apps=$apps_sync;
|
|
$this->ajax_num=sizeof($this->apps['all']); // menu info
|
|
|
|
|
|
$this->linkToDownloadPackage = false;
|
|
if (!$this->checkPackageRegFile())
|
|
{
|
|
$this->linkToDownloadPackage = true;
|
|
$this->ajax_num=0; // menu info
|
|
}
|
|
}
|
|
|
|
public function executeAjaxCheckPackageStatus()
|
|
{
|
|
sfLoader::loadHelpers('stArray', 'stInstallerPlugin');
|
|
|
|
$packagesToUpgrade = 0;
|
|
$packagesToInstall = 0;
|
|
|
|
$applications = st_array_diff(stRegisterSync::getSynchronizedApps(), stPear::getInstalledPackages());
|
|
|
|
if ($this->checkPackageRegFile())
|
|
{
|
|
$packagesToInstall = count($applications['all']);
|
|
}
|
|
|
|
if(!in_array('stUpdate', $applications['all']))
|
|
{
|
|
$packages = stPear::getPackagesToUpgrade();
|
|
|
|
if ($packages)
|
|
{
|
|
if (array_key_exists('stUpdate', $packages))
|
|
{
|
|
$packagesToUpgrade = 1;
|
|
}
|
|
else
|
|
{
|
|
$packagesToUpgrade = count($packages);
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->getResponse()->setContentType('application/json');
|
|
|
|
return $this->renderText(json_encode(array(
|
|
'packagesToInstall' => $packagesToInstall,
|
|
'packagesToUpgrade' => $packagesToUpgrade,
|
|
)));
|
|
}
|
|
|
|
/**
|
|
* Reboot.
|
|
*
|
|
* @param bool $check true - verify number packahes for upgrade, false - do not verify
|
|
*/
|
|
public function executeReboot($check=true)
|
|
{
|
|
$this->tests = new stCheckRequirements();
|
|
|
|
if (!stCheckBrowser::check()) $this->redirect('stInstallerWeb/checkBrowser');
|
|
if (!stCheckTheme::check()) $this->redirect('stInstallerWeb/checkTheme');
|
|
|
|
// Zweryfikuj czas potrezbny do wykonania akcji
|
|
// Pobierz ilosc aplikacji do instalacji
|
|
$regsync = new stRegisterSync();
|
|
$apps_sync=$regsync->getAppsToSync();
|
|
$npkg=sizeof($apps_sync['all']);
|
|
if ((! $npkg>0) && ($check)) $this->redirect('installerweb');
|
|
|
|
// deprecated
|
|
// $time = new stServerExecutionTime();
|
|
// $time->setMax(($npkg*ST_MIN_EXECUTION_TIME_APP)+ST_MIN_EXECUTION_TIME);
|
|
// if ($time->check())
|
|
// {
|
|
// $this->time=true;
|
|
// } else {
|
|
// $this->time=false;
|
|
// $this->time_server=$time->getServerTime();
|
|
// $this->time_min=$time->getMax();
|
|
// }
|
|
$this->time=true; // added for previous versions of template
|
|
|
|
$this->linkToDownloadPackage = false;
|
|
if (!$this->checkPackageRegFile()) $this->linkToDownloadPackage = true;
|
|
}
|
|
|
|
/**
|
|
* Rescue.
|
|
*/
|
|
public function executeRescue()
|
|
{
|
|
$this->tests = new stCheckRequirements();
|
|
|
|
if (!stCheckBrowser::check()) $this->redirect('stInstallerWeb/checkBrowser');
|
|
if (!stCheckTheme::check()) $this->redirect('stInstallerWeb/checkTheme');
|
|
|
|
// force unlock downloads
|
|
stPackageDownloader::unlockPackagesList();
|
|
|
|
if (stLockUpdate::isLocked())
|
|
{
|
|
$this->executeReboot(false);
|
|
$this->setTemplate('reboot');
|
|
} else
|
|
{
|
|
$this->redirect('stInstallerWeb/news');
|
|
}
|
|
// $this->executeReboot(false);
|
|
// $this->setTemplate('reboot');
|
|
}
|
|
|
|
/**
|
|
* Rescure Reboot.
|
|
*/
|
|
public function executeRescueReboot()
|
|
{
|
|
$this->tests = new stCheckRequirements();
|
|
|
|
if (!stCheckBrowser::check()) $this->redirect('stInstallerWeb/checkBrowser');
|
|
if (!stCheckTheme::check()) $this->redirect('stInstallerWeb/checkTheme');
|
|
|
|
// if (stLockUpdate::isLocked())
|
|
// {
|
|
$this->executeReboot(false);
|
|
$this->setTemplate('reboot');
|
|
// } else
|
|
// {
|
|
// $this->redirect('stInstallerWeb/news');
|
|
// }
|
|
}
|
|
|
|
/**
|
|
* Synchronize downloaded applications.
|
|
*/
|
|
public function executeSync()
|
|
{
|
|
$regsync = new stRegisterSync();
|
|
$apps_sync=$regsync->getAppsToSync();
|
|
|
|
// application list for synchronization
|
|
$this->apps=$apps_sync;
|
|
|
|
$installer = new stInstaller('web');
|
|
$ui = new stInstallerOutputWeb();
|
|
$installer->setOutputObject($ui);
|
|
|
|
|
|
if (! empty($apps_sync['all']))
|
|
{
|
|
|
|
// synchornize
|
|
$installer->sync($apps_sync['all'],'Synchronization ('.sizeof($apps_sync['all']).')');
|
|
}
|
|
else {
|
|
// nothing to do
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Code verification.
|
|
* Find user unautorized modifications.
|
|
*/
|
|
public function executeVerify()
|
|
{
|
|
$this->tests = new stCheckRequirements();
|
|
|
|
if (!stCheckBrowser::check()) $this->redirect('stInstallerWeb/checkBrowser');
|
|
if (!stCheckTheme::check()) $this->redirect('stInstallerWeb/checkTheme');
|
|
|
|
$regsync = new stRegisterSync();
|
|
$apps_sync=$regsync->getAppsToSync();
|
|
|
|
$this->apps=array_merge($apps_sync['changed'],$apps_sync['added']);
|
|
|
|
$npkg_all=sizeof($apps_sync['all']);
|
|
$npkg_changed=sizeof($this->apps);
|
|
$npkg_del=sizeof($apps_sync['deleted']);
|
|
|
|
$this->npkg=$npkg_changed;
|
|
|
|
if (! $npkg_all>0) {
|
|
$this->redirect('installerweb');
|
|
}
|
|
|
|
$this->linkToDownloadPackage = false;
|
|
if (!$this->checkPackageRegFile()) $this->linkToDownloadPackage = true;
|
|
}
|
|
|
|
/**
|
|
* Symfony Web task execution.
|
|
*/
|
|
public function executeTask()
|
|
{
|
|
$this->task=$this->getRequestParameter('task');
|
|
$this->content='';
|
|
$this->error='';
|
|
|
|
if (! empty($this->task))
|
|
{
|
|
$pakeweb = new stPakeWeb();
|
|
$pakeweb->run($this->task);
|
|
$this->content=$pakeweb->content;
|
|
$this->error=$pakeweb->error;
|
|
|
|
if($this->task == 'pear cc')
|
|
stPearCache::removeCache();
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Symfony cc
|
|
*/
|
|
public function executeCc()
|
|
{
|
|
$pakeweb = new stPakeWeb();
|
|
$pakeweb->run('cc');
|
|
$this->content=$pakeweb->content;
|
|
$this->error=$pakeweb->error;
|
|
}
|
|
|
|
/**
|
|
* Upgrade provided Applications.
|
|
*/
|
|
public function executeUpgradeBySteps()
|
|
{
|
|
if (!$this->getRequestParameter('package') || !$this->getRequestParameter('version'))
|
|
{
|
|
$this->redirect('stInstallerWeb/upgradeList');
|
|
} else {
|
|
$package = $this->getRequestParameter('package');
|
|
$version = $this->getRequestParameter('version');
|
|
stPackageDownloader::setUpgradeType('package', $package, $version);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Upgrade all applications.
|
|
*/
|
|
public function executeUpgradeAllBySteps()
|
|
{
|
|
stPackageDownloader::setUpgradeType('all');
|
|
}
|
|
|
|
public function executeListUpgrade() {
|
|
$this->packages = stPear::getPackagesToUpgrade(TRUE);
|
|
}
|
|
|
|
public function executeUploadDev()
|
|
{
|
|
|
|
}
|
|
|
|
/**
|
|
* Package upload.
|
|
*/
|
|
public function executeUpload() {
|
|
if (stConfig::getInstance('stRegister')->get('demo'))
|
|
{
|
|
return $this->forward404();
|
|
}
|
|
|
|
stRegisterSync::fixmd5sum();
|
|
|
|
$this->error = '';
|
|
$this->notice = '';
|
|
$this->content = '';
|
|
if ($this->getRequest()->getMethod() == sfRequest::POST && $this->hasRequestParameter('upload')) {
|
|
|
|
$upload = $this->getRequestParameter('upload');
|
|
$upload['file'] = $this->getRequest()->getFileName('upload[file]');
|
|
|
|
if (!isset($upload['file']) || (isset($upload['file']) && empty($upload['file']))) {
|
|
$this->error = 'Brak pakietu do instalacji.';
|
|
return sfView::SUCCESS;
|
|
}
|
|
|
|
$fileDir = sfConfig::get('sf_root_dir').'/install/cache';
|
|
$filePath = $fileDir.'/'.$upload['file'];
|
|
|
|
$this->getRequest()->moveFile('upload[file]', $filePath);
|
|
|
|
if (isset($upload['forced']) && $upload['forced'] == 1) $forced = true; else $forced = false;
|
|
if (isset($upload['nodeps']) && $upload['nodeps'] == 1) $nodeps = true; else $nodeps = false;
|
|
|
|
if(!class_exists('Archive_Tar')) {
|
|
$pearlib = SF_ROOT_DIR.DIRECTORY_SEPARATOR.'pear'.DIRECTORY_SEPARATOR.'php';
|
|
if (is_dir($pearlib)) ini_set('include_path', '.:'.$pearlib.':'.ini_get('include_path'));
|
|
include('Archive'.DIRECTORY_SEPARATOR.'Tar.php');
|
|
}
|
|
|
|
if(file_exists($fileDir.'/package.xml'))
|
|
unlink($fileDir.'/package.xml');
|
|
|
|
$tar = new Archive_Tar($filePath, true);
|
|
$extract = $tar->extractList(array('package.xml'), $fileDir);
|
|
|
|
if (!$extract || ($extract && !file_exists($fileDir.'/package.xml'))) {
|
|
$this->error = 'Niepoprawny format pliku.';
|
|
return sfView::SUCCESS;
|
|
}
|
|
|
|
$xml = simplexml_load_file($fileDir.'/package.xml');
|
|
|
|
// Sprawdzenie czy ładowany pakiet jest w wersji beta czy stable
|
|
// Porównanie z wersją sklepu. Sklep sable przyjmuje tylkopakiety stable. Sklep beta przyjmuje i stable i beta.
|
|
// Informacja zawarta w xml
|
|
// $xml[stability] => SimpleXMLElement Object
|
|
// (
|
|
// [release] => stable
|
|
// [api] => stable
|
|
// )
|
|
$upload_file_state = $xml->stability->release;
|
|
|
|
if (($upload_file_state == "beta") && stCommunication::getVersionStability() != stCommunication::STABILITY_BETA) // pakiet beta i sklep stable
|
|
{
|
|
$this->error = 'Niepoprawna wersja pakietu'.$packageName.'.';
|
|
return sfView::SUCCESS;
|
|
}
|
|
|
|
|
|
$installed = stPear::getInstalledPackages();
|
|
|
|
if (!$nodeps)
|
|
{
|
|
foreach ($xml->dependencies->required->package as $package) {
|
|
$packageName = (string)$package->name;
|
|
$packageVersion = (string)$package->min;
|
|
if (isset($installed[$packageName])) {
|
|
if (!version_compare($installed[$packageName], $packageVersion, '>=')) {
|
|
$this->error = 'Brak zainstalowanego pakietu '.$packageName.' w wersji '.$packageVersion.'.';
|
|
return sfView::SUCCESS;
|
|
}
|
|
} else {
|
|
$this->error = 'Brak zainstalowanego pakietu '.$packageName.'.';
|
|
return sfView::SUCCESS;
|
|
}
|
|
}
|
|
}
|
|
|
|
$name = (string)$xml->name;
|
|
list($name, $versionWithExt) = explode('-', $upload['file']);
|
|
|
|
$response = stWebStore::checkPackage($name, (isset($upload['code']) ? $upload['code'] : ''));
|
|
|
|
|
|
switch ($response)
|
|
{
|
|
case 0:
|
|
if (!preg_match('/^st|sm/', $name)) {
|
|
$this->error = 'Brak połączenia z serwerem sote.pl.';
|
|
return sfView::SUCCESS;
|
|
}
|
|
case 1:
|
|
break;
|
|
case 2:
|
|
$this->error = 'Nieprawidłowy kod aktywacji.';
|
|
return sfView::SUCCESS;
|
|
case 3:
|
|
$this->error = 'Kod aktywacji został już wykorzystany.';
|
|
return sfView::SUCCESS;
|
|
case 4:
|
|
$this->error = 'Aplikacja została zakupiona dla innego sklepu.';
|
|
return sfView::SUCCESS;
|
|
}
|
|
|
|
if ($forced)
|
|
$command = 'force-install';
|
|
else
|
|
$command = 'upgrade';
|
|
|
|
$this->content = stPear::runPearCommand(array('command' => $command, 'parameters' => array($filePath), 'options' => array('forced' => $forced, 'nodeps' => $nodeps)), 'raw', true);
|
|
|
|
if (preg_match('/Invalid tgz file/', $this->content)) {
|
|
$this->error = 'Niepoprawny format pliku.';
|
|
return sfView::SUCCESS;
|
|
}
|
|
|
|
if (preg_match('/install ok/', $this->content) || preg_match('/upgrade ok/', $this->content)) {
|
|
$this->notice = 'Plik został wgrany.';
|
|
stWebStore::activatePackage($name, (isset($upload['code']) ? $upload['code'] : ''));
|
|
} else
|
|
$this->error = 'Błąd podczas wgrywania pliku.';
|
|
return sfView::SUCCESS;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Page not found message.
|
|
*/
|
|
public function executePageNotFound()
|
|
{
|
|
|
|
}
|
|
|
|
/**
|
|
* Upgrade history.
|
|
*/
|
|
public function executeHistory()
|
|
{
|
|
$history = new stInstallerHistory();
|
|
$this->history_apps = array_reverse($history->getHistory());
|
|
}
|
|
|
|
/**
|
|
* RSS upgrade.
|
|
*/
|
|
public function executeRss()
|
|
{
|
|
|
|
}
|
|
|
|
/**
|
|
* Expert tools.
|
|
*/
|
|
public function executeTools()
|
|
{
|
|
// Check if optimization can be executed
|
|
$regsync = new stRegisterSync();
|
|
$apps_sync=$regsync->getAppsToSync();
|
|
$this->optimization=true;
|
|
if (! empty($apps_sync['all'])) $this->optimization=false; // there are apps in install/src
|
|
if (stLockUpdate::isLocked()) $this->optimization=false; // install process is executed
|
|
}
|
|
|
|
/**
|
|
* Verify all code.
|
|
*/
|
|
public function executeVerifyall()
|
|
{
|
|
$peari = new stPearInfo();
|
|
$packages = $peari->getPackages();
|
|
$this->count=sizeof($packages);
|
|
}
|
|
|
|
|
|
public function executeOptimization()
|
|
{
|
|
$this->executeCc();
|
|
}
|
|
|
|
/**
|
|
* Symfony pear clear-cache
|
|
*/
|
|
public function executePearcc() {
|
|
stPear::runPearCommand('clear-cache');
|
|
}
|
|
|
|
|
|
/**
|
|
* Set preffered_state = beta
|
|
*/
|
|
public function executeSetbeta() {
|
|
stCommunication::refreshLicenseInformation();
|
|
|
|
if (!stCommunication::getIsDevel())
|
|
{
|
|
return $this->forward404();
|
|
}
|
|
|
|
$command = array("command"=>"config-set","parameters"=>array("preferred_state","beta"));
|
|
stPear::runPearCommand($command);
|
|
stCommunication::refreshLicenseInformation();
|
|
stPear::runPearCommand('clear-cache');
|
|
stPartialCache::clear('stBackend', '_updateInfo', array('app' => 'backend'));
|
|
}
|
|
|
|
/**
|
|
* Set preffered_state = stable
|
|
*/
|
|
public function executeSetstable() {
|
|
stCommunication::refreshLicenseInformation();
|
|
|
|
if (!stCommunication::getIsDevel())
|
|
{
|
|
return $this->forward404();
|
|
}
|
|
|
|
$command = array("command"=>"config-set","parameters"=>array("preferred_state","stable"));
|
|
stPear::runPearCommand($command);
|
|
stCommunication::refreshLicenseInformation();
|
|
stPear::runPearCommand('clear-cache');
|
|
stPartialCache::clear('stBackend', '_updateInfo', array('app' => 'backend'));
|
|
}
|
|
|
|
|
|
/**
|
|
* Symfony pear config-set preferred_state
|
|
*/
|
|
public function executePearstate() {
|
|
if (!stCommunication::getIsDevel())
|
|
{
|
|
return $this->redirect404();
|
|
}
|
|
|
|
$this->isStable = true;
|
|
|
|
if ($this->getRequest()->getMethod() == sfRequest::POST) {
|
|
if (in_array($state = $this->getRequest()->getParameter('pear[state]'), array('stable', 'beta'))) {
|
|
if ($state == 'beta')
|
|
$this->isStable = false;
|
|
stPear::runPearCommand(array('command' => 'config-set', 'parameters' => array('preferred_state', $state, 'user')), null, true);
|
|
}
|
|
} else {
|
|
$state = stPear::runPearCommand(array('command' => 'config-get', 'parameters' => array('preferred_state')) );
|
|
if (!preg_match('/stable/', $state))
|
|
$this->isStable = false;
|
|
}
|
|
|
|
stPear::runPearCommand($command);
|
|
stCommunication::refreshLicenseInformation();
|
|
stPear::runPearCommand('clear-cache');
|
|
stPartialCache::clear('stBackend', '_updateInfo', array('app' => 'backend'));
|
|
}
|
|
|
|
public function executeNews()
|
|
{
|
|
// News Action
|
|
$this->showNews = true;
|
|
if ($this->getUser()->getCulture() == 'en_US') $this->showNews = false;
|
|
}
|
|
|
|
/**
|
|
* Show information about changelog.
|
|
* If any application has important message or required confirmation this action show it.
|
|
*/
|
|
public function executeChangelog()
|
|
{
|
|
$changelog = new stChangelog();
|
|
if (! $changelog->isAnyActive())
|
|
{
|
|
$this->redirect('installerweb/verify');
|
|
$this->active="NOT ACTIVE"; // debug value
|
|
return;
|
|
} else
|
|
{
|
|
$this->active="ACTIVE"; // debug value
|
|
}
|
|
|
|
$this->files = $changelog->getAllFiles();
|
|
$this->apps = $changelog->getPearUpgrades();
|
|
$this->new = $changelog->getSyncUpgrades();
|
|
$this->active_contents = $changelog->getActiveContents();
|
|
|
|
if (empty($this->active_contents))
|
|
{
|
|
$this->redirect('installerweb/verify');
|
|
return;
|
|
}
|
|
|
|
$this->result = $changelog->getResult();
|
|
|
|
$this->smarty_changed = $changelog->isSmartyChanged();
|
|
$this->smarty_theme = $changelog->getSmartyTheme();
|
|
|
|
$this->confirmation=false;
|
|
foreach ($this->result as $priority=>$content)
|
|
{
|
|
if ($priority=="P1") $this->confirmation=true;
|
|
foreach ($content as $app=>$content2)
|
|
{
|
|
$ret[$priority][$app]=$changelog->getUpdateContent($app,$content2,$priority);
|
|
}
|
|
}
|
|
$this->output=$ret;
|
|
|
|
if ($this->smarty_changed)
|
|
{
|
|
$smarty_changelog = stChangelogSmarty::getInstance();
|
|
$this->backup_token = $smarty_changelog->doBackup();
|
|
$this->smarty_files = $smarty_changelog->getAllFiles();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Download backup
|
|
*/
|
|
public function executeBackup()
|
|
{
|
|
$token = $this->getRequestParameter('token');
|
|
$this->token=$token;
|
|
$this->raw_content=NULL;
|
|
if (! empty($token))
|
|
{
|
|
$backup = stUpdateBackup::getInstance();
|
|
$backup_file = $backup->getBackupFile($token);
|
|
if (! empty($backup_file))
|
|
{
|
|
$raw_content=file_get_contents(sfConfig::get('sf_root_dir').DIRECTORY_SEPARATOR.$backup_file);
|
|
|
|
$this->setLayout(false);
|
|
$response = $this->getContext()->getResponse();
|
|
$response->setContentType("application/octet-stream");
|
|
$response->setHttpHeader('Content-Disposition', 'attachment; filename="'.basename($backup_file).'"');
|
|
return $this->renderText($raw_content);
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check .packages.reg file
|
|
*/
|
|
protected function checkPackageRegFile()
|
|
{
|
|
$file = sfConfig::get('sf_root_dir').DIRECTORY_SEPARATOR."install".DIRECTORY_SEPARATOR."db".DIRECTORY_SEPARATOR.".packages.reg";
|
|
|
|
if(file_exists($file))
|
|
{
|
|
$packages = unserialize(file_get_contents($file));
|
|
|
|
if (empty($packages)) $unlink = true;
|
|
else {
|
|
$unlink = true;
|
|
foreach ($packages as $package => $status) if ($status != 'installed') $unlink = false;
|
|
}
|
|
|
|
if ($unlink) unlink($file);
|
|
|
|
return $unlink;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public function executeInstallPackage() {
|
|
if ($this->getRequest()->hasParameter('package')) {
|
|
|
|
$package = $this->getRequest()->getParameter('package');
|
|
if (stWebStore::checkPackage($package) == 1) {
|
|
|
|
stPear::runPearCommand(array('command' => 'upgrade', 'parameters' => array(stPearCurl::getChannel().'/'.$package), 'options' => array('nodeps' => true)), 'raw', true);
|
|
|
|
stWebStore::activatePackage($package);
|
|
stWebStore::increaseDownloadCount($package);
|
|
|
|
$this->setFlash('notice', 'Pakiet został pobrany.');
|
|
return $this->redirect('stWebStore/index');
|
|
} else {
|
|
return $this->redirect('@homepage');
|
|
}
|
|
} else {
|
|
return $this->redirect('@homepage');
|
|
}
|
|
}
|
|
|
|
public function executeCheckTheme() {
|
|
$this->check = stCheckTheme::check();
|
|
}
|
|
|
|
public function executeCheckBrowser() {
|
|
$this->check = stCheckBrowser::check();
|
|
}
|
|
|
|
public function executeAjaxHomepageStatus() {
|
|
$this->setLayout(FALSE);
|
|
|
|
$toDownloadApps = count(stPear::getPackagesToUpgrade());
|
|
|
|
sfLoader::loadHelpers('stArray', 'stInstallerPlugin');
|
|
$appsToSync = st_array_diff(stRegisterSync::getSynchronizedApps(), stPear::getInstalledPackages());
|
|
|
|
$toInstallApps = 0;
|
|
foreach ($appsToSync as $value)
|
|
$toInstallApps =+ count($value);
|
|
|
|
if (!$this->checkPackageRegFile()) $toInstallApps = 0;
|
|
|
|
$this->status = 'PACKAGES_FOUND';
|
|
if ($toDownloadApps == 0 && $toInstallApps == 0) $this->status = 'NOTHING_TO_UPGRADE';
|
|
|
|
$upgradeServiceTime = stCommunication::getUpgradeExpirationDate();
|
|
$this->isSeven = stCommunication::getIsSeven();
|
|
|
|
if ($upgradeServiceTime !== FALSE) {
|
|
if(time() > $upgradeServiceTime) {
|
|
$upgradeServiceTime = stCommunication::getUpgradeExpirationDate(null, 30);
|
|
|
|
if(time() > $upgradeServiceTime) {
|
|
$this->status = 'UPGRADE_SERVICE_NOT_ACTIVE';
|
|
$this->days = 14 - round((time() - $upgradeServiceTime) / 86400);
|
|
$this->upgradeServiceTime = date('d.m.Y', $upgradeServiceTime);
|
|
}
|
|
}
|
|
} else
|
|
$this->status = 'SOTE_CONNECTION_ERROR';
|
|
}
|
|
}
|