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

class actionAdminSettings extends cmsAction {

    public function 
run($do false) {

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

        
$values $this->cms_config->getAll();
        
$values['time_zone'] = $values['cfg_time_zone'];

        
$form $this->getForm('settings');

        if (
$this->request->has('submit')){

            
$values array_merge($values$form->parse($this->requesttrue));
            
$errors $form->validate($this,  $values);

            if (
$values['session_save_handler'] == 'memcache' && !class_exists('Memcache')){

                
$errors['session_save_handler'] = LANG_CP_MEMCACHE_NOT_AVAILABLE;

            } else if(
$values['session_save_handler'] == 'memcached' && !class_exists('Memcached')){

                
$errors['session_save_handler'] = LANG_CP_MEMCACHE_NOT_AVAILABLE;

            } else if(
$values['session_save_handler'] == 'files'){

                if(!
is_dir($values['session_save_path'])){
                    if(!
mkdir($values['session_save_path'], 0755true)){
                        
$errors['session_save_path'] = LANG_CP_FTP_MKDIR_FAILED;
                    }
                }

                if (!
is_writable($values['session_save_path'])) {
                    
$errors['session_save_path'] = sprintf(LANG_CP_INSTALL_NOT_WRITABLE$errors['session_save_path']);
                }

            }

            if (!
$errors){

                if (
$values['cache_method'] == 'memory'){

                    if (!
class_exists('Memcache')){

                        
cmsUser::addSessionMessage(LANG_CP_MEMCACHE_NOT_AVAILABLE'error');

                        
$values['cache_method'] = 'files';

                    } else {

                        
$memcache_tester = new Memcache();

                        
$memcache_result $memcache_tester->connect($values['cache_host'], $values['cache_port']);

                        if (!
$memcache_result){

                            
cmsUser::addSessionMessage(LANG_CP_MEMCACHE_CONNECT_ERROR'error');

                            
$values['cache_method'] = 'files';

                        }

                    }

                }

                if (
$values['cache_method'] == 'memcached'){

                    if (!
class_exists('Memcached')){

                        
cmsUser::addSessionMessage(LANG_CP_MEMCACHE_NOT_AVAILABLE'error');

                        
$values['cache_method'] = 'files';

                    } else {

                        
$memcache_tester = new Memcached();

                        
$memcache_tester->setOption(Memcached::OPT_BINARY_PROTOCOLtrue);

                        
$memcache_result $memcache_tester->addServer($values['cache_host'], $values['cache_port']);

                        if (!
$memcache_result){

                            
cmsUser::addSessionMessage(LANG_CP_MEMCACHE_CONNECT_ERROR'error');

                            
$values['cache_method'] = 'files';

                        }

                    }

                }

                if (!
$values['cache_enabled']){

                    
$cacher cmsCache::getCacher((object)$values);

                    
$cacher->start();
                        
$cacher->clean();
                    
$cacher->stop();

                }

                if(
$values['db_charset'] !== $this->cms_config->db_charset){

                    
$collations = [
                        
'utf8' => 'utf8_general_ci',
                        
'utf8mb4' => 'utf8mb4_general_ci'
                    
];

                    
$collation_name $collations[$values['db_charset']];

                    
$r $this->model->db->query("SELECT 1 FROM `information_schema`.`COLLATIONS` WHERE `COLLATION_NAME` = '{$collation_name}' AND `CHARACTER_SET_NAME` = '{$values['db_charset']}' AND `IS_COMPILED` = 'Yes'");

                    
// если кодировка поддерживается, меняем для таблиц
                    
if ($r && $this->model->db->numRows($r)) {

                        
$sql "SELECT CONCAT('ALTER TABLE `', t.`TABLE_SCHEMA`, '`.`', t.`TABLE_NAME`, '` CONVERT TO CHARACTER SET {$values['db_charset']} COLLATE {$collation_name};') as sqlcode FROM `information_schema`.`TABLES` t WHERE 1 AND t.`TABLE_SCHEMA` = '{$this->cms_config->db_base}'";

                        
$res $this->model->db->query($sqlfalsetrue);
                        if(
$res !== false){

                            while(
$item $this->model->db->fetchAssoc($res)){
                                
$this->model->db->query($item['sqlcode'], falsetrue);
                            }

                            
$this->model->db->freeResult($res);

                        }

                        
// меняем кодировку по умолчанию для базы
                        
$this->model->db->query("ALTER DATABASE {$this->cms_config->db_base} CHARACTER SET {$values['db_charset']} COLLATE {$collation_name}");

                    } else {
                        
// Не меняем, если не поддерживается
                        
$values['db_charset'] = $this->cms_config->db_charset;
                    }

                }

                
$values cmsEventsManager::hook('site_settings_before_update'$values);

                
$result $this->cms_config->save($values);

                if (!
$result){

                    
$errors = array();

                    
cmsUser::addSessionMessage(LANG_CP_SETTINGS_NOT_WRITABLE'error');

                } else {

                    
cmsEventsManager::hook('site_settings_after_update'$values);

                    
cmsUser::addSessionMessage(LANG_CP_SAVE_SUCCESS'success');

                    
$this->redirectToAction('settings');

                }

            } else {

                
cmsUser::addSessionMessage(LANG_FORM_ERRORS'error');

            }

        }

        
$templates_has_options = [];

        
$tpls cmsCore::getTemplates();
        foreach (
$tpls as $tpl) {
            
$template_path $this->cms_config->root_path cmsTemplate::TEMPLATE_BASE_PATH$tpl;
            
$manifest cmsTemplate::getTemplateManifest($template_path);
            if(
$manifest !== null){
                if (!empty(
$manifest['properties']['has_options'])) {
                    
$templates_has_options[] = $tpl;
                }
                continue;
            }
            
// Совместимость
            
if(file_exists($template_path.'/options.form.php')){
                
$templates_has_options[] = $tpl;
            }
        }

        return 
$this->cms_template->render('settings', array(
            
'templates_has_options' => $templates_has_options,
            
'do'     => 'edit',
            
'values' => $values,
            
'form'   => $form,
            
'errors' => isset($errors) ? $errors false
        
));

    }

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