Вход Регистрация
Файл: system/controllers/admin/actions/install.php
Строк: 186
<?php

class actionAdminInstall extends cmsAction {

    private 
$upload_name 'package';
    private 
$upload_exts 'zip,icp';

    public function 
run($do=false){

        
// если нужно, передаем управление другому экшену
        
if ($do){
            
$this->runAction('install_'.$doarray_slice($this->params1));
            return;
        }

        
$package_name $this->request->get('package_name'$this->uploadPackage());
        
$is_no_extract $this->request->get('is_no_extract'false);

        if (!
$is_no_extract && !$package_name){ return $this->showUploadForm(); }

        return 
$this->showPackageInfo($package_name$is_no_extract);

    }

    private function 
showPackageInfo($package_name$is_no_extract=false){

        
$config cmsConfig::getInstance();

        if (!
$is_no_extract) { $this->extractPackage($package_name); }

        
$manifest $this->parsePackageManifest();

        if (isset(
$manifest['depends'])){
            
$manifest['depends_results'] = $this->checkManifestDepends($manifest['depends']);
        }

        return 
cmsTemplate::getInstance()->render('install_package_info', array(
            
'manifest' => $manifest
        
));

    }

    private function 
showUploadForm(){

        
$errors $this->checkErrors();

        return 
cmsTemplate::getInstance()->render('install_upload', array(
            
'errors' => $errors,
        ));

    }

    private function 
checkErrors(){

        
$config cmsConfig::getInstance();

        
$errors = array();

        if (!
cmsCore::isWritable$config->upload_path $this->installer_upload_path )){
            
$errors[] = array(
                
'text' => sprintf(LANG_CP_INSTALL_NOT_WRITABLE$config->upload_root $this->installer_upload_path),
                
'hint' => LANG_CP_INSTALL_NOT_WRITABLE_HINT,
                
'fix' => LANG_CP_INSTALL_NOT_WRITABLE_FIX,
                
'workaround' => sprintf(LANG_CP_INSTALL_NOT_WRITABLE_WA$config->upload_root $this->installer_upload_path)
            );
        }

        if (!
class_exists('ZipArchive')){
            
$errors[] = array(
                
'text' => LANG_CP_INSTALL_NOT_ZIP,
                
'hint' => LANG_CP_INSTALL_NOT_ZIP_HINT,
                
'fix' => LANG_CP_INSTALL_NOT_ZIP_FIX,
                
'workaround' => sprintf(LANG_CP_INSTALL_NOT_ZIP_WA$config->upload_root $this->installer_upload_path),
            );
        }

        return 
$errors $errors false;

    }

    private function 
checkManifestDepends($depends){

        
$results = array();

        if (isset(
$depends['core'])){

            
$need = (int)str_pad(str_replace('.'''$depends['core']), 6'0');
            
$has = (int)str_pad(str_replace('.'''cmsCore::getVersion()), 6'0');

            
$results['core'] = ($need <= $has) ? true false;

        }

        return 
$results;

    }

    private function 
parsePackageManifest(){

        
$config cmsConfig::getInstance();

        
$path $config->upload_path $this->installer_upload_path;

        
$ini_file $path '/' "manifest.{$config->language}.ini";
        
$ini_file_default $path '/' "manifest.ru.ini";

        if (!
file_exists($ini_file)){ $ini_file $ini_file_default; }
        if (!
file_exists($ini_file)){ return false; }

        
$manifest parse_ini_file($ini_filetrue);

        if (
file_exists($config->upload_path $this->installer_upload_path '/' 'package')){
            
$manifest['contents'] = $this->getPackageContentsList();
        } else {
            
$manifest['contents'] = false;
        }        

        if (isset(
$manifest['info']['image'])){
            
$manifest['info']['image'] = $config->upload_host '/' .
                                            
$this->installer_upload_path '/' .
                                            
$manifest['info']['image'];
        }

        return 
$manifest;

    }

    private function 
getPackageContentsList(){

        
$config cmsConfig::getInstance();

        
$path $config->upload_path $this->installer_upload_path '/' 'package';

        if (!
is_dir($path)) { return false; }

        return 
files_tree_to_array($path);

    }

    private function 
extractPackage($package_name){

        
$config cmsConfig::getInstance();

        
$zip_dir $config->upload_path $this->installer_upload_path;
        
$zip_file =  $zip_dir '/' $package_name;

        
$zip = new ZipArchive();

        if (!
$zip->open$zip_file )){
            
cmsUser::addSessionMessage(LANG_CP_INSTALL_ZIP_ERROR'error');
            
$this->redirectBack();
        }

        
$zip->extractTo($zip_dir);
        
$zip->close();

        
unlink($zip_file);

        return 
true;

    }

    private function 
uploadPackage(){

        
$config cmsConfig::getInstance();

        
$uploader = new cmsUploader();

        if (!
$uploader->isUploaded$this->upload_name )){ return false; }

        
files_clear_directory($config->upload_path $this->installer_upload_path);

        
$result $uploader->uploadForm($this->upload_name$this->upload_exts0$this->installer_upload_path);

        if (!
$result['success']){
            
cmsUser::addSessionMessage($result['error'], 'error');
            return 
false;
        }

        return 
$result['name'];

    }

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