Seditio Source
Root |
./othercms/elxis_5.3_atlas_rev2452/components/com_cpanel/controllers/main.php
<?php
/**
* @version        $Id: main.php 2432 2022-01-18 19:47:07Z IOS $
* @package        Elxis
* @subpackage    CPanel component
* @copyright    Copyright (c) 2006-2022 Elxis CMS (https://www.elxis.org). All rights reserved.
* @license        Elxis Public License ( https://www.elxis.org/elxis-public-license.html )
* @author        Elxis Team ( https://www.elxis.org )
* @description     Elxis CMS is free software. Read the license for copyright notices and details
*/

defined('_ELXIS_') or die ('Direct access to this location is not allowed');


class
mainCPController extends cpanelController {

   
/*********************/
    /* MAGIC CONSTRUCTOR */
    /*********************/
   
public function __construct($view=null, $model=null) {
       
parent::__construct($view, $model);
    }


   
/************************************/
    /* PREPARE TO MAKE CPANEL DASHBOARD */
    /************************************/
   
public function dashboard() {
       
$elxis = eFactory::getElxis();
       
$eLang = eFactory::getLang();
       
$eDoc = eFactory::getDocument();

       
$str = $this->model->componentParams('com_extmanager');
       
elxisLoader::loadFile('includes/libraries/elxis/parameters.class.php');
       
elxisLoader::loadFile('components/com_extmanager/includes/edc.class.php');
       
$params = new elxisParameters($str, '', 'component');
       
$edc = new elxisDC($params);
       
$updates = $edc->checkForUpdates();
        unset(
$edc, $str, $params);

       
$boarditems = array();
        if (
$elxis->acl()->check('com_cpanel', 'settings', 'edit') > 0) {
           
$item = new stdClass;
           
$item->link = $elxis->makeAURL('cpanel:config.html');
           
$item->title = $eLang->get('SETTINGS');
           
$item->description = $eLang->get('GENERAL_SITE_SETS');
           
$item->iconclass = 'fas fa-tools';
           
$item->mark = 0;

           
$parts = array();
            if (
$elxis->getConfig('MAIL_METHOD') == 'mail') {
               
$item->mark++;
               
$parts[] = $eLang->get('CHANGE_MAIL_TO_SMTP');
            }
           
//if ($elxis->getConfig('DEFENDER') == '') {
            //    $item->mark++;
            //    $parts[] = $eLang->get('DEFENDER_IS_DISABLED');
            //}
           
if ($elxis->getConfig('REPO_PATH') == '') {
               
$item->mark++;
               
$parts[] = $eLang->get('REPO_DEF_PATH');
            }
            if (
$elxis->getConfig('SITELANGS') != '') {
                if (
strpos($elxis->getConfig('SITELANGS'), ',') === false) {//single language
                   
if ($elxis->getConfig('MULTILINGUISM') == 1) {
                       
$item->mark++;
                       
$parts[] = $eLang->get('DISABLE_MULTILINGUISM');
                    }
                } else {
                    if (
$elxis->getConfig('MULTILINGUISM') == 0) {
                       
$item->mark++;
                       
$parts[] = $eLang->get('ENABLE_MULTILINGUISM');
                    }
                }
            } else if (
$elxis->getConfig('MULTILINGUISM') == 0) {
               
$item->mark++;
               
$parts[] = $eLang->get('ENABLE_MULTILINGUISM');
            }

            if (
$parts) { $item->description = implode(', - ', $parts); }
            unset(
$parts);
           
$boarditems[] = $item;
        }

        if (
$elxis->acl()->check('component', 'com_emedia', 'manage') > 0) {
           
$item = new stdClass;
           
$item->link = $elxis->makeAURL('emedia:/');
           
$item->title = $eLang->get('MEDIA_MANAGER');
           
$item->description = $eLang->get('MEDIA_MANAGER_INFO');
           
$item->iconclass = 'fas fa-images';
           
$item->mark = 0;
           
$boarditems[] = $item;
        }

        if (
$elxis->acl()->check('component', 'com_user', 'manage') > 0) {
           
$item = new stdClass;
           
$item->link = $elxis->makeAURL('user:users/');
           
$item->title = $eLang->get('USERS');
           
$item->description = $eLang->get('MANAGE_USERS');
           
$item->iconclass = 'fas fa-user-cog';
           
$item->mark = 0;
           
$boarditems[] = $item;

            if (
$elxis->acl()->check('com_user', 'groups', 'manage') > 0) {
               
$item = new stdClass;
               
$item->link = $elxis->makeAURL('user:groups/');
               
$item->title = $eLang->get('USER_GROUPS');
               
$item->description = $eLang->get('MANAGE_UGROUPS');
               
$item->iconclass = 'fas fa-users-cog';
               
$item->mark = 0;
               
$boarditems[] = $item;
            }

            if (
$elxis->acl()->check('com_user', 'acl', 'manage') > 0) {
               
$item = new stdClass;
               
$item->link = $elxis->makeAURL('user:acl/');
               
$item->title = $eLang->get('ACCESS_MANAGER');
               
$item->description = $eLang->get('MANAGE_ACL');
               
$item->iconclass = 'fas fa-user-lock';
               
$item->mark = 0;
               
$boarditems[] = $item;
            }
        }

        if (
$elxis->acl()->check('component', 'com_emenu', 'manage') > 0) {
           
$item = new stdClass;
           
$item->link = $elxis->makeAURL('emenu:/');
           
$item->title = $eLang->get('MENU_MANAGER');
           
$item->description = $eLang->get('MANAGE_MENUS_ITEMS');
           
$item->iconclass = 'fas fa-bars';
           
$item->mark = 0;
           
$boarditems[] = $item;
        }

        if (
$elxis->acl()->check('component', 'com_content', 'manage') > 0) {
            if (
$elxis->acl()->check('com_content', 'frontpage', 'edit') > 0) {
               
$item = new stdClass;
               
$item->link = $elxis->makeAURL('content:fpage/');
               
$item->title = $eLang->get('FRONTPAGE');
               
$item->description = $eLang->get('DESIGN_FRONTPAGE');
               
$item->iconclass = 'fas fa-home';
               
$item->mark = 0;
               
$boarditems[] = $item;
            }

           
$item = new stdClass;
           
$item->link = $elxis->makeAURL('content:categories/');
           
$item->title = $eLang->get('CATEGORIES_MANAGER');
           
$item->description = $eLang->get('MANAGE_CONT_CATS');
           
$item->iconclass = 'fas fa-folder';
           
$item->mark = 0;
           
$boarditems[] = $item;

           
$item = new stdClass;
           
$item->link = $elxis->makeAURL('content:articles/');
           
$item->title = $eLang->get('CONTENT_MANAGER');
           
$item->description = $eLang->get('MANAGE_CONT_ITEMS');
           
$item->iconclass = 'fas fa-file';
           
$item->mark = 0;
           
$boarditems[] = $item;
        }

        if (
$elxis->acl()->check('component', 'com_etranslator', 'manage') > 0) {
           
$item = new stdClass;
           
$item->link = $elxis->makeAURL('etranslator:/');
           
$item->title = $eLang->get('TRANSLATOR');
           
$item->description = $eLang->get('MANAGE_MLANG_CONTENT');
           
$item->iconclass = 'fas fa-language';
           
$item->mark = 0;
           
$boarditems[] = $item;
        }

        if (
$elxis->acl()->check('component', 'com_extmanager', 'manage') > 0) {
            if (
$elxis->acl()->check('com_extmanager', 'components', 'edit') > 0) {
               
$item = new stdClass;
               
$item->link = $elxis->makeAURL('extmanager:components/');
               
$item->title = $eLang->get('COMPONENTS');
               
$item->description = $eLang->get('COMPONENTS_MANAGE_INST');
               
$item->iconclass = 'fas fa-cube';
               
$item->mark = 0;
                if (isset(
$updates['extensions']['component'])) {
                   
$item->mark = count($updates['extensions']['component']);
                    if (
$item->mark == 1) {
                       
$item->description = sprintf($eLang->get('NEWER_VERSION_FOR'), $updates['extensions']['component'][0]['version'], $updates['extensions']['component'][0]['title']);
                       
                    } else {
                       
$parts = array();
                        foreach (
$updates['extensions']['component'] as $k => $d) { $parts[] = $d['title']; }
                       
$str = implode(', ', $parts);
                       
$item->description = sprintf($eLang->get('NEWER_VERSIONS_FOR'), $str);
                    }
                }
               
$boarditems[] = $item;
            }
            if (
$elxis->acl()->check('com_extmanager', 'modules', 'edit') > 0) {
               
$item = new stdClass;
               
$item->link = $elxis->makeAURL('extmanager:modules/');
               
$item->title = $eLang->get('MODULES');
               
$item->description = $eLang->get('MODULES_MANAGE_INST');
               
$item->iconclass = 'fas fa-puzzle-piece';
               
$item->mark = 0;
                if (isset(
$updates['extensions']['module'])) {
                   
$item->mark = count($updates['extensions']['module']);
                    if (
$item->mark == 1) {
                       
$item->description = sprintf($eLang->get('NEWER_VERSION_FOR'), $updates['extensions']['module'][0]['version'], $updates['extensions']['module'][0]['title']);
                       
                    } else {
                       
$parts = array();
                        foreach (
$updates['extensions']['module'] as $k => $d) { $parts[] = $d['title']; }
                       
$str = implode(', ', $parts);
                       
$item->description = sprintf($eLang->get('NEWER_VERSIONS_FOR'), $str);
                    }
                }
               
$boarditems[] = $item;
            }
            if (
$elxis->acl()->check('com_extmanager', 'plugins', 'edit') > 0) {
               
$item = new stdClass;
               
$item->link = $elxis->makeAURL('extmanager:plugins/');
               
$item->title = $eLang->get('CONTENT_PLUGINS');
               
$item->description = $eLang->get('PLUGINS_MANAGE_INST');
               
$item->iconclass = 'fas fa-plug';
               
$item->mark = 0;
                if (isset(
$updates['extensions']['plugin'])) {
                   
$item->mark = count($updates['extensions']['plugin']);
                    if (
$item->mark == 1) {
                       
$item->description = sprintf($eLang->get('NEWER_VERSION_FOR'), $updates['extensions']['plugin'][0]['version'], $updates['extensions']['plugin'][0]['title']);
                       
                    } else {
                       
$parts = array();
                        foreach (
$updates['extensions']['plugin'] as $k => $d) { $parts[] = $d['title']; }
                       
$str = implode(', ', $parts);
                       
$item->description = sprintf($eLang->get('NEWER_VERSIONS_FOR'), $str);
                    }
                }
               
$boarditems[] = $item;
            }
            if (
$elxis->acl()->check('com_extmanager', 'templates', 'edit') > 0) {
               
$item = new stdClass;
               
$item->link = $elxis->makeAURL('extmanager:templates/');
               
$item->title = $eLang->get('TEMPLATES');
               
$item->description = $eLang->get('TEMPLATES_MANAGE_INST');
               
$item->iconclass = 'fas fa-paint-brush';
               
$item->mark = 0;
                if (isset(
$updates['extensions']['template'])) {//atemplate ?
                   
$item->mark = count($updates['extensions']['template']);
                    if (
$item->mark == 1) {
                       
$item->description = sprintf($eLang->get('NEWER_VERSION_FOR'), $updates['extensions']['template'][0]['version'], $updates['extensions']['template'][0]['title']);
                       
                    } else {
                       
$parts = array();
                        foreach (
$updates['extensions']['template'] as $k => $d) { $parts[] = $d['title']; }
                       
$str = implode(', ', $parts);
                       
$item->description = sprintf($eLang->get('NEWER_VERSIONS_FOR'), $str);
                    }
                }
               
$boarditems[] = $item;
            }
            if (
$elxis->acl()->check('com_extmanager', 'engines', 'edit') > 0) {
               
$item = new stdClass;
               
$item->link = $elxis->makeAURL('extmanager:engines/');
               
$item->title = $eLang->get('SEARCH_ENGINES');
               
$item->description = $eLang->get('SENGINES_MANAGE_INST');
               
$item->iconclass = 'fas fa-search';
               
$item->mark = 0;
                if (isset(
$updates['extensions']['engine'])) {
                   
$item->mark = count($updates['extensions']['engine']);
                    if (
$item->mark == 1) {
                       
$item->description = sprintf($eLang->get('NEWER_VERSION_FOR'), $updates['extensions']['engine'][0]['version'], $updates['extensions']['engine'][0]['title']);
                       
                    } else {
                       
$parts = array();
                        foreach (
$updates['extensions']['engine'] as $k => $d) { $parts[] = $d['title']; }
                       
$str = implode(', ', $parts);
                       
$item->description = sprintf($eLang->get('NEWER_VERSIONS_FOR'), $str);
                    }
                }
               
$boarditems[] = $item;
            }
            if (
$elxis->acl()->check('com_extmanager', 'auth', 'edit') > 0) {
               
$item = new stdClass;
               
$item->link = $elxis->makeAURL('extmanager:auth/');
               
$item->title = $eLang->get('AUTH_METHODS');
               
$item->description = $eLang->get('MANAGE_WAY_LOGIN');
               
$item->iconclass = 'fas fa-key';
               
$item->mark = 0;
                if (isset(
$updates['extensions']['auth'])) {
                   
$item->mark = count($updates['extensions']['auth']);
                    if (
$item->mark == 1) {
                       
$item->description = sprintf($eLang->get('NEWER_VERSION_FOR'), $updates['extensions']['auth'][0]['version'], $updates['extensions']['auth'][0]['title']);
                       
                    } else {
                       
$parts = array();
                        foreach (
$updates['extensions']['auth'] as $k => $d) { $parts[] = $d['title']; }
                       
$str = implode(', ', $parts);
                       
$item->description = sprintf($eLang->get('NEWER_VERSIONS_FOR'), $str);
                    }
                }
               
$boarditems[] = $item;
            }

           
$item = new stdClass;
           
$item->link = $elxis->makeAURL('extmanager:browse/');
           
$item->title = $eLang->get('ELXISDC');
           
$item->description = $eLang->get('ELXISDC_INFO');
           
$item->iconclass = 'felxis-logo';
           
$item->mark = 0;
            if (
$updates['totalextensions'] > 0) {
               
$item->mark = $updates['totalextensions'];
               
$item->description = sprintf($eLang->get('NEWER_VERSIONS_FOR_EXTS'),  $updates['totalextensions']);
            }
           
$boarditems[] = $item;
        }

        if (
$elxis->acl()->check('com_cpanel', 'statistics', 'view') > 0) {
           
$item = new stdClass;
           
$item->link = $elxis->makeAURL('cpanel:stats/');
           
$item->title = $eLang->get('SITE_STATISTICS');
           
$item->description = $eLang->get('SITE_STATISTICS_INFO');
           
$item->iconclass = 'fas fa-chart-pie';
           
$item->mark = 0;
           
$boarditems[] = $item;
        }

        if (
$elxis->acl()->check('com_cpanel', 'backup', 'edit') > 0) {
           
$item = new stdClass;
           
$item->link = $elxis->makeAURL('cpanel:backup/');
           
$item->title = $eLang->get('BACKUP');
           
$item->description = $eLang->get('BACKUP_INFO');
           
$item->iconclass = 'fas fa-file-archive';
           
$item->mark = 0;

           
$files = eFactory::getFiles()->listFiles('backup/', '(\.zip)$', false, true, true);
            if (
$files) {
               
$now = time();
               
$ok = false;
                foreach (
$files as $file) {
                    if (
$now - filemtime($file) < 5184000) { $ok = true; break; }//2 months
               
}
                if (!
$ok) {
                   
$item->mark = 1;
                   
$item->description = $eLang->get('LONGTIME_TAKE_BACKUP');
                }
            } else {
               
$item->mark = 1;
               
$item->description = $eLang->get('NO_BACKUPS');
            }
            unset(
$files);
           
$boarditems[] = $item;
        }

        if (
$elxis->acl()->check('com_cpanel', 'cache', 'manage') > 0) {
           
$item = new stdClass;
           
$item->link = $elxis->makeAURL('cpanel:cache/');
           
$item->title = $eLang->get('CACHE');
           
$item->description = $eLang->get('CACHE_INFO');
           
$item->iconclass = 'fas fa-memory';
           
$item->mark = 0;
           
$boarditems[] = $item;
        }

        if (
$elxis->acl()->check('com_cpanel', 'multisites', 'edit') > 0) {
           
$item = new stdClass;
           
$item->link = $elxis->makeAURL('cpanel:multisites/');
           
$item->title = $eLang->get('MULTISITES');
           
$item->description = $eLang->get('MULTISITES_DESC');
           
$item->iconclass = 'fas fa-project-diagram';
           
$item->mark = 0;
           
$boarditems[] = $item;
        }

        if (
$elxis->acl()->check('com_cpanel', 'routes', 'manage') > 0) {
           
$item = new stdClass;
           
$item->link = $elxis->makeAURL('cpanel:routing/');
           
$item->title = $eLang->get('ROUTING');
           
$item->description = $eLang->get('ROUTING_INFO');
           
$item->iconclass = 'fas fa-network-wired';
           
$item->mark = 0;
           
$boarditems[] = $item;
        }

        if (
$elxis->acl()->check('com_cpanel', 'logs', 'manage') > 0) {
           
$item = new stdClass;
           
$item->link = $elxis->makeAURL('cpanel:logs/');
           
$item->title = $eLang->get('LOGS');
           
$item->description = $eLang->get('VIEW_MANAGE_LOGS');
           
$item->iconclass = 'fas fa-file-signature';
           
$item->mark = 0;
           
$logfiles = eFactory::getFiles()->listFiles('logs/', '', false, true, true);
            if (
$logfiles) {
                if (
count($logfiles) > 50) {
                   
$item->mark = 1;
                   
$item->description = $eLang->get('DELETE_OLD_LOGS');
                }
            }
            unset(
$files);
           
$boarditems[] = $item;
        }

       
$comps = $this->model->getThirdComponents();
        if (
$comps) {
            foreach (
$comps as $comp) {
                if (
$elxis->acl()->check('component', $comp['component'], 'manage') > 0) {
                    if (
strpos($comp['component'], 'shop') !== false) {
                       
$iconclass = 'fas fa-shopping-cart';
                    } else if (
$comp['component'] == 'com_sim') {
                       
$iconclass = 'fas fa-traffic-light';
                    } else if (
$comp['component'] == 'com_mikro') {
                       
$iconclass = 'fas fa-blog';
                    } else if (
strpos($comp['component'], 'sitemap') !== false) {
                       
$iconclass = 'fas fa-sitemap';
                    } else if (
strpos($comp['component'], 'reserv') !== false) {
                       
$iconclass = 'fas fa-concierge-bell';
                    } else if (
strpos($comp['component'], 'archive') !== false) {
                       
$iconclass = 'fas fa-landmark';
                    } else if (
strpos($comp['component'], 'form') !== false) {
                       
$iconclass = 'fas fa-keyboard';
                    } else if (
strpos($comp['component'], 'import') !== false) {
                       
$iconclass = 'fas fa-file-import';
                    } else if (
strpos($comp['component'], 'content') !== false) {
                       
$iconclass = 'fas fa-user-edit';
                    } else if (
strpos($comp['component'], 'map') !== false) {
                       
$iconclass = 'fas fa-map-pin';
                    } else if (
strpos($comp['component'], 'galler') !== false) {
                       
$iconclass = 'fas fa-images';
                    } else {
                       
$iconclass = 'fas fa-cube';
                    }

                   
$comproute = preg_replace('@^(com\_)@', '', $comp['component']);
                   
$item = new stdClass;
                   
$item->link = $elxis->makeAURL($comproute.':/');
                   
$item->title = $comp['name'];
                   
$item->description = $comp['name'];
                   
$item->iconclass = $iconclass;
                   
$item->mark = 0;
                   
$boarditems[] = $item;
                }
            }
        }
        unset(
$comps);

       
$eDoc->addFontAwesome();
       
$eDoc->addFontElxis();

       
$eDoc->addStyleLink($elxis->secureBase().'/components/com_cpanel/css/cp'.$eLang->getinfo('RTLSFX').'.css');
       
$eDoc->addScriptLink($elxis->secureBase().'/components/com_cpanel/js/cpanel.js');

       
$this->view->dashboardHTML($boarditems, $updates, $elxis, $eLang, $eDoc);
    }


   
/***********************************/
    /* PREPARE CONFIGURATION EDIT PAGE */
    /***********************************/
   
public function configure() {
       
$elxis = eFactory::getElxis();
       
$eDoc = eFactory::getDocument();
       
$eLang = eFactory::getLang();
       
$eFiles = eFactory::getFiles();

        if (
$elxis->acl()->check('com_cpanel', 'settings', 'edit') == 0) {
           
$url = $elxis->makeAURL('cpanel:/');
           
$elxis->redirect($url, $eLang->get('NOTALLOWACCPAGE'), true);
        }

       
$data = array();
       
$data['templates'] = array();
       
$data['atemplates'] = array();
       
$data['dbtypes'] = array(
           
'4D' => '4D',
           
'cubrid' => 'Cubrid',
           
'dblib' => 'dbLib',
           
'firebird' => 'Firebird',
           
'freetds' => 'FreeTDS',
           
'ibm' => 'IBM',
           
'informix' => 'Informix',
           
'mssql' => 'msSQL',
           
'mysql' => 'MySQL',
           
'oci' => 'OCI (Oracle)',
           
'odbc' => 'ODBC',
           
'odbc_db2' => 'ODBC db2',
           
'odbc_access' => 'ODBC MS Access',
           
'odbc_mssql' => 'ODBC msSQL',
           
'pgsql' => 'PostgreSQL',
           
'sqlite' => 'SQLite 3',
           
'sqlite2' => 'SQLite 2',
           
'sybase' => 'SyBase'
       
);

       
$items = $this->model->getTemplates();
        if (
$items) {
            foreach (
$items as $item) {
               
$k = $item['template'];
                if (
$item['section'] == 'backend') {
                   
$data['atemplates'][$k] = $item['title'];
                } else {
                   
$data['templates'][$k] = $item['title'];
                }
            }
        }

       
$data['lastcron'] = -1;
       
$data['lastcronts'] = 0;
       
$path = $eFiles->elxisPath('logs/lastcron.txt', true);
        if (
file_exists($path)) {
           
$data['lastcronts'] = filemtime($path);
            if (
$data['lastcronts'] > 1406894400) { //2014-08-01 12:00:00
               
$data['lastcron'] = time() - $data['lastcronts'];
            }
        }
        unset(
$path);

       
eFactory::getPathway()->addNode($eLang->get('SETTINGS'));
       
$eDoc->setTitle($eLang->get('SETTINGS').' - '.$eLang->get('ADMINISTRATION'));

       
$toolbar = $elxis->obj('toolbar');
       
$toolbar->add($eLang->get('SAVE'), 'save', false, '', 'elx5Submit(\'save\', \'fmconfig\', \'cfgtask\');');
       
$toolbar->add($eLang->get('APPLY'), 'saveedit', false, '', 'elx5Submit(\'apply\', \'fmconfig\', \'cfgtask\');');
       
$toolbar->add($eLang->get('CANCEL'), 'cancel', false, $elxis->makeAURL('cpanel:/'));

       
$eDoc->addStyleLink($elxis->secureBase().'/components/com_cpanel/css/cp'.$eLang->getinfo('RTLSFX').'.css');
       
$eDoc->addScriptLink($elxis->secureBase().'/components/com_cpanel/js/cpanel.js');
       
$eDoc->setMetaTag('Cache-Control', 'no-cache, no-store, must-revalidate', true);
       
$eDoc->setMetaTag('Pragma', 'no-cache', true);
       
$eDoc->setMetaTag('Expires', '-1', true);

       
$this->view->configHTML($data, $elxis, $eLang);
    }


   
/*******************************/
    /* SAVE ELXIS GENERAL SETTINGS */
    /*******************************/
   
public function saveconfig() {
       
$elxis = eFactory::getElxis();
       
$eLang = eFactory::getLang();

        if (
$elxis->acl()->check('com_cpanel', 'settings', 'edit') == 0) {
           
$url = $elxis->makeAURL('cpanel:/');
           
$elxis->redirect($url, $eLang->get('NOTALLOWACCPAGE'), true);
        }

       
$eSession = eFactory::getSession();
       
$sess_token = trim($eSession->get('token_fmconfig'));
       
$token = trim(filter_input(INPUT_POST, 'token', FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW));
        if ((
$token == '') || ($sess_token == '') || ($sess_token != $token)) {
           
exitPage::make('403', 'CCPA-0013', 'Detected session by-pass attempt!');
        }

       
$cfg = $this->catchConfigPost();
       
$cfg = $this->cfgValidatePrepare($cfg);

        if (isset(
$cfg['errormsg'])) {
           
$url = $elxis->makeAURL('cpanel:config.html');
           
$elxis->redirect($url, $cfg['errormsg'], true);
        }

       
ksort($cfg);

       
//save translations
       
$sitelangs = $eLang->getSiteLangs(false);
       
$translations = array('sitename' => array(), 'metadesc' => array(), 'metakeys' => array());
        foreach (
$sitelangs as $lng) {
            if (
$lng == $elxis->getConfig('LANG')) { continue; }
           
$idx = 'sitename_'.$lng;
           
$translations['sitename'][$lng] = isset($_POST[$idx]) ? eUTF::trim(filter_input(INPUT_POST, $idx, FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES | FILTER_FLAG_STRIP_LOW)) : '';
           
$idx = 'metadesc_'.$lng;
           
$translations['metadesc'][$lng] = isset($_POST[$idx]) ? eUTF::trim(filter_input(INPUT_POST, $idx, FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES | FILTER_FLAG_STRIP_LOW)) : '';
           
$idx = 'metakeys_'.$lng;
           
$translations['metakeys'][$lng] = isset($_POST[$idx]) ? eUTF::trim(filter_input(INPUT_POST, $idx, FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES | FILTER_FLAG_STRIP_LOW)) : '';
        }

       
$eTrans = $elxis->obj('translations');
       
$eTrans->saveElementTranslations('config', 'sitename', 1, $translations['sitename']);
       
$eTrans->saveElementTranslations('config', 'metadesc', 1, $translations['metadesc']);
       
$eTrans->saveElementTranslations('config', 'metakeys', 1, $translations['metakeys']);
        unset(
$eTrans);

       
$eSession->set('token_fmconfig');

       
$out = '<?php '._LEND;
       
$out .= '/**'._LEND;
       
$out .= 'Elxis CMS - Copyright 2006-'.date('Y').' elxis.org. All rights reserved.'._LEND;
       
$out .= 'Last saved on '.gmdate('Y-m-d H:i:s').' (UTC) by '.$elxis->user()->uname._LEND;
       
$out .= '******************************************/'._LEND._LEND;
       
$out .= 'defined(\'_ELXIS_\') or die (\'Direct access to this location is not allowed\');'._LEND._LEND._LEND;
       
$out .= 'class elxisConfig {'._LEND._LEND;
        foreach (
$cfg as $key => $val) {
            if (
is_int($val)) {
               
$out .= "\t".'private $'.strtoupper($key).' = '.$val.';'._LEND;
            } else {
               
$out .= "\t".'private $'.strtoupper($key).' = \''.$val.'\';'._LEND;
            }
        }
       
$out .= _LEND;
       
$out .= "\t".'public function __construct() {'._LEND;
       
$out .= "\t".'}'._LEND._LEND;
       
$out .= "\t".'public function get($var=\'\') {'._LEND;
       
$out .= "\t\t".'if (($var != \'\') && isset($this->$var)) { return $this->$var; }'._LEND;
       
$out .= "\t\t".'return \'\';'._LEND;
       
$out .= "\t".'}'._LEND._LEND;
       
$out .= "\t".'public function set($var, $value) {'._LEND;
       
$out .= "\t\t".'if (($var == \'\') || (!is_string($var))) { return false; }'._LEND;
       
$out .= "\t\t".'if (isset($this->$var)) {'._LEND;
       
$out .= "\t\t\t".'if (!in_array($var, array(\'SITENAME\', \'METADESC\', \'METAKEYS\'))) { return false; }'._LEND;
       
$out .= "\t\t".'}'._LEND;
       
$out .= "\t\t".'$this->$var = $value;'._LEND;
       
$out .= "\t\t".'return true;'._LEND;
       
$out .= "\t".'}'._LEND._LEND;
       
$out .= '}'._LEND._LEND;
       
$out .= '?>';

       
$eFiles = eFactory::getFiles();
       
       
$configfile = 'configuration.php';
        if (
defined('ELXIS_MULTISITE')) { $configfile = 'config'.ELXIS_MULTISITE.'.php'; }
       
$ok = $eFiles->createFile($configfile, $out);

       
$task = isset($_POST['task']) ? trim($_POST['task']) : 'save';
       
$tabopen = (isset($_POST['tabopen'])) ? (int)$_POST['tabopen'] : 0;
        if (
$task == 'apply') {
           
$rnd = rand(1000, 999999);
           
$url = $elxis->makeAURL('cpanel:config.html').'?rnd='.$rnd;
            if (
$tabopen > 0) { $url .= '&tabopen='.$tabopen; }
        } else {
           
$url = $elxis->makeAURL('cpanel:/');
        }

        if (!
$ok) {
           
$msg = $eFiles->getError();
           
$elxis->redirect($url, $msg, true);
        } else {
            if (
function_exists('opcache_get_status')) {//solve problem with config vars not immediately updated due to opcache
               
$opc = opcache_get_status();
                if (
is_array($opc)) {
                    if (
$opc['opcache_enabled'] == 1) { opcache_reset(); }
                }
            }
           
$elxis->redirect($url, $eLang->get('SETS_SAVED_SUCC'));
        }
    }


   
/*******************/
    /* CATCH HTTP POST */
    /*******************/
   
private function catchConfigPost() {
        if (!isset(
$_POST['sitename'])) { return null; }

       
$emails = array('mail_email', 'mail_from_email', 'mail_manager_email');
       
$strings = array(
           
'repo_path', 'default_route', 'template', 'atemplate', 'lang', 'timezone', 'registration_email_domain', 'registration_exclude_email_domains',
           
'mail_method', 'mail_smtp_host', 'mail_smtp_user', 'mail_smtp_pass', 'mail_smtp_secure', 'mail_auth_method', 'db_type', 'db_host', 'db_name', 'db_prefix',
           
'db_user', 'db_pass', 'db_dsn', 'db_scheme', 'ftp_host', 'ftp_user', 'ftp_pass', 'ftp_root',
           
'session_handler', 'encrypt_method', 'encrypt_key', 'xfoptions', 'seo_match', 'captcha', 'jquery', 'defender_whitelist'
       
);

       
$ustrings = array('sitename', 'offline_message', 'metadesc', 'metakeys', 'mail_name', 'mail_from_name', 'mail_manager_name');

       
$integers = array(
           
'online', 'sef', 'statistics', 'gzip', 'multilinguism', 'lang_detect', 'cache', 'cache_time', 'realname', 'registration', 'registration_activation',
           
'pass_recover', 'mail_smtp_port', 'mail_smtp_auth', 'db_port', 'db_persistent', 'ftp', 'ftp_port', 'session_lifetime', 'session_matchip',
           
'session_matchbrowser', 'session_matchreferer', 'session_encrypt', 'security_level', 'ssl', 'error_report', 'error_log', 'error_alert', 'log_rotate',
           
'debug', 'minicss', 'minijs', 'cronjobs', 'cronjobs_prob', 'defender_notify', 'defender_ipafter', 'defender_log'
       
);

       
$cfg = array();
       
$cfg['url'] = trim(filter_input(INPUT_POST, 'url', FILTER_SANITIZE_URL));
        if (
version_compare(phpversion(), '7.3.0', '>=')) {
           
$cfg['csp'] = trim(filter_input(INPUT_POST, 'csp', FILTER_SANITIZE_ADD_SLASHES, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH));
        } else {
           
$cfg['csp'] = trim(filter_input(INPUT_POST, 'csp', FILTER_SANITIZE_MAGIC_QUOTES, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH));
        }

        foreach (
$emails as $str) {
           
$cfg[$str] = trim(filter_input(INPUT_POST, $str, FILTER_SANITIZE_EMAIL));
        }

        foreach (
$strings as $str) {
           
$cfg[$str] = trim(filter_input(INPUT_POST, $str, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH));
           
$cfg[$str] = addslashes($cfg[$str]);
        }
        foreach (
$ustrings as $str) {
           
$cfg[$str] = eUTF::trim(filter_input(INPUT_POST, $str, FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES | FILTER_FLAG_STRIP_LOW));
           
$cfg[$str] = addslashes($cfg[$str]);
        }
        foreach (
$integers as $intg) {
           
$cfg[$intg] = isset($_POST[$intg]) ? (int)$_POST[$intg] : 0;
        }

       
$cfg['defender'] = array();
        if (isset(
$_POST['defender'])) {
            if (
trim($_POST['defender']) != '') {
               
$arr = explode(',', $_POST['defender']);
                foreach (
$arr as $v) {
                   
$cfg['defender'][] = trim(filter_var($v, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH));
                }
            }
        }

       
$cfg['sitelangs'] = '';
        if (isset(
$_POST['sitelangs'])) {
            if (
trim($_POST['sitelangs']) != '') {
               
$arr = explode(',', $_POST['sitelangs']);
                if (!
in_array($cfg['lang'], $arr)) { $arr[] = $cfg['lang']; }
               
$cfg['sitelangs'] = implode(',', $arr);
            }
        }

        if (
$cfg['xfoptions'] == 'ALLOW-FROM') {
            if (isset(
$_POST['xfoptionsfrom'])) {
               
$cfg['xfoptions'] .= ' '.trim(filter_input(INPUT_POST, 'xfoptionsfrom', FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES | FILTER_FLAG_STRIP_LOW));
            }
        }

        return
$cfg;
    }


   
/****************************************************/
    /* VALIDATE ELXIS CONFIGURATION AND PREPARE TO SAVE */
    /****************************************************/
   
private function cfgValidatePrepare($cfg) {
       
$eLang = eFactory::getLang();
       
$elxis = eFactory::getElxis();

        if (
$cfg['online'] < 0) {
           
$cfg['errormsg'] = $eLang->get('WEBSITE_STATUS').' '.$eLang->get('INVALID_NUMBER'); return $cfg;
        }
        if (
$cfg['sitename'] == '') {
           
$cfg['errormsg'] = sprintf($eLang->get('FIELDNOEMPTY'), $eLang->get('SITENAME')); return $cfg;
        }
        if (
$cfg['metadesc'] == '') {
           
$cfg['errormsg'] = sprintf($eLang->get('FIELDNOEMPTY'), 'META '.$eLang->get('DESCRIPTION')); return $cfg;
        }
        if (
$cfg['metakeys'] == '') {
           
$cfg['errormsg'] = sprintf($eLang->get('FIELDNOEMPTY'), 'META '.$eLang->get('KEYWORDS')); return $cfg;
        }

        if (
$cfg['template'] == '') {
           
$cfg['errormsg'] = sprintf($eLang->get('FIELDNOEMPTY'), $eLang->get('SITE_TEMPLATE')); return $cfg;
        }
        if (!
file_exists(ELXIS_PATH.'/templates/'.$cfg['template'].'/index.php')) {
           
$cfg['errormsg'] = $cfg['template'].' is not a valid Elxis template!'; return $cfg;
        }

        if (
$cfg['atemplate'] == '') {
           
$cfg['errormsg'] = sprintf($eLang->get('FIELDNOEMPTY'), $eLang->get('ADMIN_TEMPLATE')); return $cfg;
        }
        if (!
file_exists(ELXIS_PATH.'/templates/admin/'.$cfg['atemplate'].'/index.php')) {
           
$cfg['errormsg'] = $cfg['atemplate'].' is not a valid Elxis administration template!'; return $cfg;
        }

        if ((
$cfg['url'] == '') || !filter_var($cfg['url'], FILTER_VALIDATE_URL)) {
           
$cfg['errormsg'] = $eLang->get('INVALID_URL'); return $cfg;
        }
       
       
$cfg['repo_path'] = rtrim(str_replace('\\', '/', $cfg['repo_path']), '/');
        if (
$cfg['repo_path'] != '') {
            if (!
file_exists($cfg['repo_path'].'/')) { $cfg['errormsg'] = 'Repository path does not exist!'; return $cfg; }
        }

       
$cfg['ftp_root'] = '/'.trim(str_replace('\\', '/', $cfg['ftp_root']), '/');
        if (
$cfg['ftp_port'] < 1) { $cfg['ftp_port'] = 21; }
        if (
$cfg['ftp_host'] == '') { $cfg['ftp_host'] = 'localhost'; }
        if (
$cfg['ftp_pass'] == '') { $cfg['ftp_pass'] = $elxis->getConfig('FTP_PASS'); }
        if (
$cfg['ftp'] == 1) {
            if (
$cfg['ftp_user'] == '') {
               
$cfg['errormsg'] = sprintf($eLang->get('FIELDNOEMPTY'), 'FTP '.$eLang->get('USERNAME')); return $cfg;
            }
            if (
$cfg['ftp_pass'] == '') {
               
$cfg['errormsg'] = sprintf($eLang->get('FIELDNOEMPTY'), 'FTP '.$eLang->get('PASSWORD')); return $cfg;
            }
        }

        if (
$cfg['db_type'] == '') {
           
$cfg['errormsg'] = sprintf($eLang->get('FIELDNOEMPTY'), $eLang->get('DB_TYPE')); return $cfg;
        }
        if (
$cfg['db_prefix'] == '') {
           
$cfg['errormsg'] = sprintf($eLang->get('FIELDNOEMPTY'), $eLang->get('TABLES_PREFIX')); return $cfg;
        }
        if (
$cfg['db_host'] == '') { $cfg['db_host'] = 'localhost'; }
        if (
$cfg['db_port'] < 0) { $cfg['db_port'] = 0; }
        if (
$cfg['db_pass'] == '') { $cfg['db_pass'] = $elxis->getConfig('DB_PASS'); }
       
$cfg['db_scheme'] = str_replace('\\', '/', $cfg['db_scheme']);

        if (
$cfg['mail_method'] == 'gmail') { $cfg['mail_method'] = 'smtp'; }
        if ((
$cfg['mail_method'] == '') || !in_array($cfg['mail_method'], array('mail', 'smtp', 'sendmail'))) {
           
$cfg['errormsg'] = 'Invalid mail dispatch method!'; return $cfg;
        }
        if (
$cfg['mail_name'] == '') {
           
$cfg['errormsg'] = sprintf($eLang->get('FIELDNOEMPTY'), $eLang->get('RCPT_NAME')); return $cfg;
        }
        if ((
$cfg['mail_email'] == '') || !filter_var($cfg['mail_email'], FILTER_VALIDATE_EMAIL)) {
           
$cfg['errormsg'] = sprintf($eLang->get('FIELDNOEMPTY'), 'Recipient Email'); return $cfg;
        }
        if (
$cfg['mail_from_name'] == '') {
           
$cfg['errormsg'] = sprintf($eLang->get('FIELDNOEMPTY'), $eLang->get('SENDER_NAME')); return $cfg;
        }
        if ((
$cfg['mail_from_email'] == '') || !filter_var($cfg['mail_from_email'], FILTER_VALIDATE_EMAIL)) {
           
$cfg['errormsg'] = sprintf($eLang->get('FIELDNOEMPTY'), 'Sender Email'); return $cfg;
        }
        if (
$cfg['mail_manager_name'] == '') {
           
$cfg['errormsg'] = sprintf($eLang->get('FIELDNOEMPTY'), $eLang->get('TECHNICAL_MANAGER')); return $cfg;
        }
        if ((
$cfg['mail_manager_email'] == '') || !filter_var($cfg['mail_manager_email'], FILTER_VALIDATE_EMAIL)) {
           
$cfg['errormsg'] = sprintf($eLang->get('FIELDNOEMPTY'), 'Technical Manager Email'); return $cfg;
        }
        if (
$cfg['mail_smtp_port'] < 1) { $cfg['mail_smtp_port'] = 25; }
        if (
$cfg['mail_smtp_host'] == '') { $cfg['mail_smtp_host'] = 'localhost'; }
        if (!
in_array($cfg['mail_smtp_secure'], array('ssl', 'tls', 'starttls'))) { $cfg['mail_smtp_secure'] = ''; }
        if (
$cfg['mail_smtp_pass'] == '') { $cfg['mail_smtp_pass'] = $elxis->getConfig('MAIL_SMTP_PASS'); }
        if (
$cfg['mail_method'] == 'smtp') {
            if (
$cfg['mail_smtp_user'] == '') {
               
$cfg['errormsg'] = sprintf($eLang->get('FIELDNOEMPTY'), 'SMTP '.$eLang->get('USERNAME')); return $cfg;
            }
            if (
$cfg['mail_smtp_pass'] == '') {
               
$cfg['errormsg'] = sprintf($eLang->get('FIELDNOEMPTY'), 'SMTP '.$eLang->get('PASSWORD')); return $cfg;
            }
        }

        if (
$cfg['session_lifetime'] < 1) { $cfg['session_lifetime'] = 900; }
        if (!
in_array($cfg['session_handler'], array('none', 'files', 'database'))) { $cfg['session_handler'] = 'database'; }

        if (
$cfg['timezone'] == '') { $cfg['timezone'] = 'UTC'; }
        if (
$cfg['cache_time'] < 600) { $cfg['cache_time'] = 1800; }
        if (
$cfg['registration_email_domain'] != '') {
            if (!
preg_match("/^[a-z0-9][a-z0-9\-]+[a-z0-9](\.[a-z]{2,4})+$/i", $cfg['registration_email_domain'])) {
               
$cfg['errormsg'] = sprintf($eLang->get('FIELDNOACCCHAR'), $eLang->get('ALLOWED_DOMAIN')); return $cfg;
            }
        }

        if (
$cfg['registration_exclude_email_domains'] != '') {
           
$domains = explode(',',$cfg['registration_exclude_email_domains']);
           
$cfg['registration_exclude_email_domains'] = '';
            if (
$domains) {
               
$newdoms = array();
                foreach (
$domains as $domain) {
                   
$domain = trim($domain);
                    if (
$domain == '') { continue; }
                    if (!
preg_match("/^[a-z0-9][a-z0-9\-]+[a-z0-9](\.[a-z]{2,4})+$/i", $domain)) {
                       
$cfg['errormsg'] = 'Invalid excluded domain name!'; return $cfg;
                    }
                   
$newdoms[] = $domain;
                }
               
$cfg['registration_exclude_email_domains'] = implode(',',$newdoms);
                unset(
$newdoms);
            }
            unset(
$domains);
        }

       
$cfg['encrypt_method'] = $elxis->getConfig('ENCRYPT_METHOD');
       
$cfg['encrypt_key'] = $elxis->getConfig('ENCRYPT_KEY');

       
$signatures = $cfg['defender'];
       
$cfg['defender'] = '';
        if (
count($signatures) > 0) {
           
$final = array();
            foreach (
$signatures as $signature) {
               
$signature = trim($signature);
                if (
$signature == '') { continue; }
                if (!
in_array($signature, array('G', 'I', 'R', 'C', 'F'))) {
                   
$cfg['errormsg'] = 'Invalid option '.$signature.' for Elxis Defender!'; return $cfg;
                }
               
$cfg['defender'] .= $signature;
                if (
$signature == 'F') {
                   
$rp = ($cfg['repo_path'] != '') ? $cfg['repo_path'] : ELXIS_PATH.'/repository';
                    if (
file_exists($rp.'/other/elxis_hashes_'.md5($elxis->getConfig('ENCRYPT_KEY')).'.php')) {
                        @
unlink($rp.'/other/elxis_hashes_'.md5($elxis->getConfig('ENCRYPT_KEY')).'.php');
                    }
                    unset(
$rp);
                }
            }
        }
        unset(
$signatures);

        if (
$cfg['defender_whitelist'] != '') {
           
$parts = explode(',', $cfg['defender_whitelist']);
           
$ips = array();
            foreach (
$parts as $part) {
               
$ip = trim($part);
                if (
$ip == '') { continue; }
                if (
filter_var($ip, FILTER_VALIDATE_IP)) { $ips[] = $ip; }
            }
           
$cfg['defender_whitelist'] = $ips ? implode(',', $ips) : '';
        }

        if (
$cfg['lang'] == '') {
           
$cfg['errormsg'] = sprintf($eLang->get('FIELDNOEMPTY'), $eLang->get('LANGUAGE')); return $cfg;
        }
        if (!
file_exists(ELXIS_PATH.'/language/'.$cfg['lang'].'/'.$cfg['lang'].'.php')) {
           
$cfg['errormsg'] = 'Language '.$cfg['lang'].' does not exist!'; return $cfg;
        }

        if (
trim($cfg['xfoptions']) == 'ALLOW-FROM') {
           
$cfg['errormsg'] = sprintf($eLang->get('FIELDNOEMPTY'), $eLang->get('ALLOW_FROM_ORIGIN'));
            return
$cfg;
        }

        if ((
$cfg['default_route'] == '') || ($cfg['default_route'] == '/') || ($cfg['default_route'] == 'content')) { $cfg['default_route'] = 'content:/'; }
        if (
$cfg['captcha'] == '') { $cfg['captcha'] = 'NOROBOT'; }
        if (
$cfg['jquery'] == '') { $cfg['jquery'] = '3m'; }

        return
$cfg;
    }

}

?>