Вход Регистрация
Файл: concrete5.7.5.6/concrete/controllers/single_page/dashboard/system/backup/update.php
Строк: 209
<?php
namespace ConcreteControllerSinglePageDashboardSystemBackup;

use 
ConcreteControllerUpgrade;
use 
ConcreteCoreApplicationEditResponse;
use 
ConcreteCorePageControllerDashboardPageController;
use 
ConcreteCoreUpdaterApplicationUpdate;
use 
ConcreteCoreUpdaterArchive;
use 
Config;
use 
Exception;
use 
Loader;

class 
UpdateArchive extends Archive
{

    public function 
__construct()
    {
        
parent::__construct();
        
$this->targetDirectory DIR_CORE_UPDATES;
    }

    public function 
install($file$inplace true)
    {
        
parent::install($file$inplace);
    }

}

if (!
ini_get('safe_mode')) {
    @
set_time_limit(0);
    
ini_set('max_execution_time'0);
}

class 
Update extends DashboardPageController
{

    public function 
check_for_updates()
    {
        
Config::clear('concrete.misc.latest_version');
        
ConcreteCoreUpdaterUpdate::getLatestAvailableVersionNumber();
        
$this->redirect('/dashboard/system/backup/update');
    }

    public function 
on_start()
    {
        
parent::on_start();
        
$this->error Loader::helper('validation/error');
        
id(new Upgrade())->checkSecurity();
    }

    public function 
download_update()
    {
        
$p = new Permissions();
        if (!
$p->canUpgrade()) {
            return 
false;
        }

        
$vt Loader::helper('validation/token');
        if (!
$vt->validate('download_update')) {
            
$this->error->add($vt->getErrorMessage());
        }
        if (!
is_dir(DIR_CORE_UPDATES)) {
            
$this->error->add(t('The directory %s does not exist.'DIR_CORE_UPDATES));
        } else {
            if (!
is_writable(DIR_CORE_UPDATES)) {
                
$this->error->add(t('The directory %s must be writable by the web server.'DIR_CORE_UPDATES));
            }
        }

        if (!
$this->error->has()) {
            
$remote ConcreteCoreUpdaterUpdate::getApplicationUpdateInformation();
            if (
is_object($remote)) {
                
// try to download
                
$r Marketplace::downloadRemoteFile($remote->getDirectDownloadURL());
                if (empty(
$r) || $r == Package::E_PACKAGE_DOWNLOAD) {
                    
$response = array(Package::E_PACKAGE_DOWNLOAD);
                } else {
                    if (
$r == Package::E_PACKAGE_SAVE) {
                        
$response = array($r);
                    }
                }

                if (isset(
$response)) {
                    
$errors Package::mapError($response);
                    foreach (
$errors as $e) {
                        
$this->error->add($e);
                    }
                }

                if (!
$this->error->has()) {
                    
// the file exists in the right spot
                    
$ar = new UpdateArchive();
                    try {
                        
$ar->install($r);
                    } catch (
Exception $e) {
                        
$this->error->add($e->getMessage());
                    }

                }
            } else {
                
$this->error->add(t('Unable to retrieve software from update server.'));
            }
        }
        
$this->view();
    }

    function 
view()
    {
        
$p = new Permissions();
        if (
$p->canUpgrade()) {

            
$upd = new ConcreteCoreUpdaterUpdate();
            
$updates $upd->getLocalAvailableUpdates();
            
$remote $upd->getApplicationUpdateInformation();
            
$this->set('updates'$updates);
            if (
is_object($remote) && version_compare($remote->getVersion(), APP_VERSION'>')) {
                
// loop through local updates
                
$downloadableUpgradeAvailable true;
                foreach (
$updates as $upd) {
                    if (
$upd->getUpdateVersion() == $remote->getVersion()) {
                        
// we have a LOCAL version ready to install that is the same, so we abort
                        
$downloadableUpgradeAvailable false;
                        
$this->set('showDownloadBox'false);
                        break;
                    }
                }

                
$this->set('downloadableUpgradeAvailable'$downloadableUpgradeAvailable);
                
$this->set('remoteUpdate'$remote);
            } else {
                
$this->set('downloadableUpgradeAvailable'false);
            }

            if (
count($updates) == 1) {
                
$this->set('update'$updates[0]);
            }
            
$this->set('canUpgrade'true);
        }
    }

    public function 
get_update_diagnostic_information()
    {
        
$p = new Permissions();
        if (
$p->canUpgrade()) {
            
$updateVersion trim($this->post('version'));
            if (
$updateVersion) {
                
$upd ApplicationUpdate::getByVersionNumber($updateVersion);
                if (
is_object($upd)) {
                    
$diagnostic $upd->getDiagnosticObject();
                    print 
json_encode($diagnostic->getJSONObject());
                }
            }
        }
        exit;
    }

    public function 
do_update()
    {
        
$p = new Permissions();
        if (!
$p->canUpgrade()) {
            return 
false;
        }
        
$updateVersion $this->post('version');
        if (!
$updateVersion) {
            
$this->error->add(t('Invalid version'));
        } else {
            
$upd ApplicationUpdate::getByVersionNumber($updateVersion);
        }

        if (!
is_object($upd)) {
            
$this->error->add(t('Invalid version'));
        } else {
            if (
version_compare($upd->getUpdateVersion(), APP_VERSION'<=')) {
                
$this->error->add(
                    
t(
                        
'You may only apply updates with a greater version number than the version you are currently running.'));
            }
        }

        if (!
$this->error->has()) {
            
$resp $upd->apply();
            if (
$resp !== true) {
                switch (
$resp) {
                    case 
ApplicationUpdate::E_UPDATE_WRITE_CONFIG:
                        
$this->error->add(
                            
t(
                                
'Unable to write to config/site.php. You must make config/site.php writable in order to upgrade in this manner.'));
                        break;
                }
            } else {
                
$token Loader::helper("validation/token");
                
Redirect::to('/ccm/system/upgrade/submit?ccm_token=' $token->generate('ConcreteControllerUpgrade'))->send();
                exit;
            }
        }
    }

    public function 
start()
    {

        
$p = new Permissions();
        if (!
$p->canUpgrade()) {
            return 
false;
        }
        
$updateVersion $this->post('updateVersion');
        if (!
$updateVersion) {
            
$this->error->add(t('Invalid version'));
        } else {
            
$upd ApplicationUpdate::getByVersionNumber($updateVersion);
        }

        if (!
is_object($upd)) {
            
$this->error->add(t('Invalid version'));
        } else {
            if (
version_compare($upd->getUpdateVersion(), APP_VERSION'<=')) {
                
$this->error->add(
                    
t(
                        
'You may only apply updates with a greater version number than the version you are currently running.'));
            }
        }

        if (!
$this->error->has()) {
            
/*
            $resp = $upd->apply();
            if ($resp !== true) {
                switch ($resp) {
                    case ApplicationUpdate::E_UPDATE_WRITE_CONFIG:
                        $this->error->add(
                            t(
                                'Unable to write to config/site.php. You must make config/site.php writable in order to upgrade in this manner.'));
                        break;
                }
            } else {
                $token = Loader::helper("validation/token");
                Redirect::to('/ccm/system/upgrade/submit?ccm_token=' . $token->generate('ConcreteControllerUpgrade'))->send();
                exit;
            }
            */

            
$this->set('update'$upd);
        }


        
$this->view();

    }
}
Онлайн: 2
Реклама