Seditio Source
Root |
./othercms/elxis_5.3_atlas_rev2452/components/com_cpanel/controllers/multisites.php
<?php
/**
* @version        $Id: multisites.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
multisitesCPController extends cpanelController {

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


   
/**************************/
    /* LIST / EDIT MULTISITES */
    /**************************/
   
public function listsites() {
       
$elxis = eFactory::getElxis();
       
$eDoc = eFactory::getDocument();
       
$eLang = eFactory::getLang();

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

       
$curl = $elxis->getConfig('URL');
       
$cpath = '';
       
$p1 = parse_url($curl);
        if (isset(
$p1['path'])) {
           
$fullpath = trim($p1['path'], '/');
           
$p2 = explode('/', $fullpath);
           
$n = count($p2) - 1;
           
$cpath = $p2[$n];
            unset(
$n, $p2);
        }
        unset(
$p1);

       
$rows = array();
        if (
defined('ELXIS_MULTISITE')) {
            include(
ELXIS_PATH.'/configuration.php');
            foreach (
$multisites as $id => $multisite) {
               
$row = new stdClass;
               
$row->id = $id;
               
$row->name = $multisite['name'];
               
$row->folder = $multisite['folder'];
               
$row->active = (bool)$multisite['active'];
                if (
ELXIS_MULTISITE == $id) {
                   
$row->current = true;
                   
$row->url = $curl;
                } else {
                   
$row->current = false;
                   
$row->url = '';
                }
               
$rows[] = $row;
            }

            foreach (
$rows as $i => $row) {
                if (
$row->url == '') {
                   
$rows[$i]->url = $this->calculateURL($row->folder, $cpath, $curl);
                }
            }
        }

       
$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'
       
);

       
$newid = $this->makeSiteId();

       
$importers = array();
       
$files = eFactory::getFiles()->listFiles('includes/libraries/elxis/database/importers/', 'php$');
        if (
$files) {
            foreach (
$files as $file) {
               
$n = strpos($file, '.importer.php');
                if (
$n !== false) { $importers[] = substr($file, 0, $n); }
            }
        }

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

       
$eDoc->addStyleLink($elxis->secureBase().'/components/com_cpanel/css/cp'.$eLang->getinfo('RTLSFX').'.css');
       
$eDoc->addScriptLink($elxis->secureBase().'/components/com_cpanel/js/cpanel.js');
        if (
$rows) {
           
$eDoc->addNativeDocReady('elx5DataTable(\'msitestbl\', false);');
        }

       
$this->view->listSites($rows, $dbtypes, $importers, $newid, $elxis, $eLang);
    }


   
/*****************************/
    /* CALCULATE MULTISITE'S URL */
    /*****************************/
   
private function calculateURL($folder, $cpath, $curl) {
        if (
$cpath == '') {
            return
rtrim($curl.'/'.$folder, '/');
        }
       
$url = preg_replace('#('.$cpath.')$#', $folder, $curl);
        return
rtrim($url, '/');
    }


   
/*********************/
    /* ENABLE MULTISITES */
    /*********************/
   
public function enablemultisites() {
       
$elxis = eFactory::getElxis();
       
$eLang = eFactory::getLang();
       
$eFiles = eFactory::getFiles();

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

       
$redirurl = $elxis->makeAURL('cpanel:multisites/');

        if (
defined('ELXIS_MULTISITE')) { $elxis->redirect($redirurl); }

       
$contents = @file_get_contents(ELXIS_PATH.'/configuration.php');
        if (
$contents === false) {
           
$elxis->redirect($redirurl, 'Could not read configuration file', true);
        }

       
$ok = $eFiles->createFile('config1.php', $contents);
        if (!
$ok) {
           
$elxis->redirect($redirurl, 'Could not create config1.php file', true);
        }

       
$name = $elxis->getConfig('SITENAME');
       
$name = filter_var($name, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);
       
$pat = "#([\']|[\"]|[\$]|[\#]|[\<]|[\>]|[\*]|[\%]|[\~]|[\`]|[\^]|[\|]|[\\\])#u";
       
$name = eUTF::trim(preg_replace($pat, '', $name));

       
$sites = array(
           
1 => array('folder' => '', 'name' => $name, 'active' => true)
        );

       
$multiconfig = $this->makeMultiConfig($sites);
       
$ok = $eFiles->createFile('configuration.php', $multiconfig);
        if (!
$ok) {
           
$elxis->redirect($redirurl, 'Could not update configuration.php file', true);
        }

       
$elxis->redirect($redirurl);
    }


   
/****************************/
    /* CREATE MULTISITE ENTRIES */
    /****************************/
   
private function makeMultiConfig($sites) {
       
$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)'._LEND;
       
$out .= '******************************************/'._LEND._LEND;
       
$out .= 'defined(\'_ELXIS_\') or die (\'Direct access to this location is not allowed\');'._LEND._LEND._LEND;
       
$out .= '$multisites = array('._LEND;
       
$total = count($sites);
       
$i = 1;
        foreach (
$sites as $id => $site) {
           
$acttxt = ($site['active'] === true) ? 'true' : 'false';
           
$comma = ($i == $total) ? '' : ',';
           
$out .= "\t".''.$id.' => array(\'folder\' => \''.$site['folder'].'\', \'name\' => \''.$site['name'].'\', \'active\' => '.$acttxt.')'.$comma._LEND;
           
$i++;
        }
       
$out .= ');'._LEND._LEND;
       
$out .= 'include(ELXIS_PATH.\'/includes/multiconfig.php\');'._LEND._LEND;
       
$out .= '?>';
        return
$out;
    }


   
/**********************/
    /* DISABLE MULTISITES */
    /**********************/
   
public function disablemultisites() {
       
$elxis = eFactory::getElxis();
       
$eLang = eFactory::getLang();
       
$eFiles = eFactory::getFiles();

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

       
$redirurl = $elxis->makeAURL('cpanel:multisites/');

        if (!
defined('ELXIS_MULTISITE')) { $elxis->redirect($redirurl); }

        if (
ELXIS_MULTISITE != 1) {
           
$msg = sprintf($eLang->get('MAN_MULTISITES_ONLY'), '1');
           
$elxis->redirect($url, $msg, true);
        }

        if (!
file_exists(ELXIS_PATH.'/config1.php')) {
           
$elxis->redirect($redirurl, 'Configuration file 1 does not exist!', true);
        }

       
$contents = @file_get_contents(ELXIS_PATH.'/config1.php');
        if (
$contents === false) {
           
$elxis->redirect($redirurl, 'Could not read configuration file 1', true);
        }

       
$ok = $eFiles->createFile('configuration.php', $contents);
        if (!
$ok) {
           
$elxis->redirect($redirurl, 'Could not create configuration file', true);
        }

       
$eFiles->deleteFile('config1.php');
        for (
$i=2; $i<21; $i++) {
            if (
file_exists(ELXIS_PATH.'/config'.$i.'.php')) {
               
$eFiles->deleteFile('config'.$i.'.php');
            }
        }

       
$elxis->redirect($redirurl);
    }


   
/************************************/
    /* TOGGLE MULTISITE'S ACTIVE STATUS */
    /************************************/
   
public function togglemultisite() {
       
$elxis = eFactory::getElxis();
       
$eLang = eFactory::getLang();

       
$response = array('success' => 0, 'published' => -1, 'icontitle' => '', 'reloadpage' => 0);

        if (
$elxis->acl()->check('com_cpanel', 'multisites', 'edit') < 1) {
           
$response['icontitle'] = $eLang->get('NOTALLOWACCPAGE');
           
$this->ajaxHeaders('application/json');
            echo
json_encode($response);
            exit;
        }

        if (!
defined('ELXIS_MULTISITE')) {
           
$response['icontitle'] = $eLang->get('MULTISITES_DISABLED');
           
$this->ajaxHeaders('application/json');
            echo
json_encode($response);
            exit;
        }

        if (
ELXIS_MULTISITE != 1) {
           
$response['icontitle'] = sprintf($eLang->get('MAN_MULTISITES_ONLY'), '1');
           
$this->ajaxHeaders('application/json');
            echo
json_encode($response);
            exit;
        }

       
$id = isset($_POST['elid']) ? (int)$_POST['elid'] : 0;

        if (
$id == 1) {
           
$response['icontitle'] = 'You cannot deactivate the main site!';
           
$this->ajaxHeaders('application/json');
            echo
json_encode($response);
            exit;
        }

        if (
$id < 2) {
           
$response['icontitle'] = 'No sub-site requested!';
           
$this->ajaxHeaders('application/json');
            echo
json_encode($response);
            exit;
        }

       
$active = false;
       
$found = false;
       
$newmultisites = array();
        include(
ELXIS_PATH.'/configuration.php');
        foreach (
$multisites as $mid => $multisite) {
            if (
$mid != $id) {
               
$newmultisites[$mid] = $multisite;
                continue;
            }
           
$found = true;
           
$active = ($multisite['active']) ? false : true;
           
$newmultisites[$mid] = array('folder' => $multisite['folder'], 'name' => $multisite['name'], 'active' => $active);
        }

        if (!
$found) {
           
$response['icontitle'] = 'Sub-site with id '.$id.' not found!';
           
$this->ajaxHeaders('application/json');
            echo
json_encode($response);
            exit;
        }

       
$multiconfig = $this->makeMultiConfig($newmultisites);
       
$ok = eFactory::getFiles()->createFile('configuration.php', $multiconfig);
        if (!
$ok) {
           
$response['icontitle'] = 'Could not save sub-site active status. Is file configuration.php writeable?';
        } else if (
$active) {
           
$response['success'] = 1;
           
$response['published'] = 1;
           
$response['icontitle'] = $eLang->get('ACTIVE').' - '.$eLang->get('CLICK_TOGGLE_STATUS');
        } else {
           
$response['success'] = 1;
           
$response['published'] = 0;
           
$response['icontitle'] = $eLang->get('INACTIVE').' - '.$eLang->get('CLICK_TOGGLE_STATUS');
        }

       
$this->ajaxHeaders('application/json');
        echo
json_encode($response);
        exit;
    }


   
/***********************/
    /* DELETE A MULTI-SITE */
    /***********************/
   
public function deletemultisite() {
       
$elxis = eFactory::getElxis();
       
$eLang = eFactory::getLang();
       
$eFiles = eFactory::getFiles();

       
$response = array('success' => 0, 'message' => '');

        if (
$elxis->acl()->check('com_cpanel', 'multisites', 'edit') < 1) {
           
$response['message'] = $eLang->get('NOTALLOWACTION');
           
$this->ajaxHeaders('application/json');
            echo
json_encode($response);
            exit;
        }

        if (!
defined('ELXIS_MULTISITE')) {
           
$response['message'] = $eLang->get('MULTISITES_DISABLED');
           
$this->ajaxHeaders('application/json');
            echo
json_encode($response);
            exit;
        }

        if (
ELXIS_MULTISITE != 1) {
           
$response['message'] = sprintf($eLang->get('MAN_MULTISITES_ONLY'), '1');
           
$this->ajaxHeaders('application/json');
            echo
json_encode($response);
            exit;
        }

       
$id = (isset($_POST['elids'])) ? (int)$_POST['elids'] : 0;
        if (
$id == 1) {
           
$response['message'] = 'You cannot delete the main site!';
           
$this->ajaxHeaders('application/json');
            echo
json_encode($response);
            exit;
        }

        if (
$id < 2) {
           
$response['message'] = 'Invalid sub-site id!';
           
$this->ajaxHeaders('application/json');
            echo
json_encode($response);
            exit;
        }

       
$newmultisites = array();
       
$found = false;
        include(
ELXIS_PATH.'/configuration.php');
        foreach (
$multisites as $mid => $multisite) {
            if (
$mid == $id) { $found = true; continue; }
           
$newmultisites[$mid] = $multisite;
        }

        if (!
$found) {
           
$response['message'] = 'Sub-site with id '.$id.' not found!';
           
$this->ajaxHeaders('application/json');
            echo
json_encode($response);
            exit;
        }

       
$multiconfig = $this->makeMultiConfig($newmultisites);
       
$ok = $eFiles->createFile('configuration.php', $multiconfig);
        if (!
$ok) {
           
$response['message'] = 'Delete failed! Could not save settings. Is file configuration.php writeable?';
           
$this->ajaxHeaders('application/json');
            echo
json_encode($response);
            exit;
        }
       
$eFiles->deleteFile('config'.$id.'.php');

       
$response['success'] = 1;
       
$this->ajaxHeaders('application/json');
        echo
json_encode($response);
        exit;
    }


   
/******************/
    /* SAVE MULTISITE */
    /******************/
   
public function savemultisite() {
       
$elxis = eFactory::getElxis();
       
$eLang = eFactory::getLang();
       
$eFiles = eFactory::getFiles();

       
$response = array('success' => 0, 'message' => '');

        if (
$elxis->acl()->check('com_cpanel', 'multisites', 'edit') < 1) {
           
$response['message'] = $eLang->get('NOTALLOWACCPAGE');
           
$this->ajaxHeaders('application/json');
            echo
json_encode($response);
            exit;
        }

        if (!
defined('ELXIS_MULTISITE')) {
           
$response['message'] = $eLang->get('MULTISITES_DISABLED');
           
$this->ajaxHeaders('application/json');
            echo
json_encode($response);
            exit;
        }

        if (
ELXIS_MULTISITE != 1) {
           
$response['message'] = sprintf($eLang->get('MAN_MULTISITES_ONLY'), '1');
           
$this->ajaxHeaders('application/json');
            echo
json_encode($response);
            exit;
        }

       
$id = (isset($_POST['msid'])) ? (int)$_POST['msid'] : 0;
       
$pat = "#([\']|[\"]|[\$]|[\#]|[\<]|[\>]|[\*]|[\%]|[\~]|[\`]|[\^]|[\|]|[\\\])#u";
       
$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);
       
$name = eUTF::trim(preg_replace($pat, '', $name));
        if (
$name == '') {
           
$response['message'] = sprintf($eLang->get('FIELDNOEMPTY'), $eLang->get('NAME'));
           
$this->ajaxHeaders('application/json');
            echo
json_encode($response);
            exit;
        }

        if (
$id == 1) {
           
$folder = '';
        } else {
           
$folder = trim(preg_replace('/[^a-z0-9]/', '', $_POST['folder']));
            if (
$folder != $_POST['folder']) {
               
$response['message'] = sprintf($eLang->get('FIELDNOACCCHAR'), $eLang->get('URL_ID'));
               
$this->ajaxHeaders('application/json');
                echo
json_encode($response);
                exit;
            }
            if (
$folder == '') {
               
$response['message'] = sprintf($eLang->get('FIELDNOEMPTY'), $eLang->get('URL_ID'));
               
$this->ajaxHeaders('application/json');
                echo
json_encode($response);
                exit;
            }
            if (
is_dir(ELXIS_PATH.'/'.$folder.'/')) {
               
$response['message'] = 'There is a folder with the same name as the URL identifier! Please choose an other URL identifier.';
               
$this->ajaxHeaders('application/json');
                echo
json_encode($response);
                exit;
            }
            if (
is_dir(ELXIS_PATH.'/components/com_'.$folder.'/')) {
               
$response['message'] = 'There is a component with the same name as the URL identifier! Please choose an other URL identifier.';
               
$this->ajaxHeaders('application/json');
                echo
json_encode($response);
                exit;
            }
            if (
strlen($folder) < 3) {
               
$response['message'] = 'URL identifier is too short! Please choose an other URL identifier.';
               
$this->ajaxHeaders('application/json');
                echo
json_encode($response);
                exit;
            }
        }

       
$active = (intval($_POST['active']) == 1) ? true : false;
        if (
$id == ELXIS_MULTISITE) { $active = true; }

       
$newmultisites = array();
       
$unique = true;
        include(
ELXIS_PATH.'/configuration.php');
        foreach (
$multisites as $mid => $multisite) {
            if (
$mid == $id) {
               
$newmultisites[$mid] = array('folder' => $folder, 'name' => $name, 'active' => $active);
            } else {
                if (
$multisite['folder'] == $folder) { $unique = false; }
               
$newmultisites[$mid] = $multisite;
            }
        }

        if (!
$unique) {
           
$response['message'] = 'URL identifier is not unique! Please choose an other URL identifier.';
           
$this->ajaxHeaders('application/json');
            echo
json_encode($response);
            exit;
        }

        if (
$id == 0) {
           
$newid = $this->makeSiteId();
           
$newmultisites[$newid] = array('folder' => $folder, 'name' => $name, 'active' => $active);

           
$dbdata = array();
           
$strings = array('db_type', 'db_host', 'db_name', 'db_prefix', 'db_user', 'db_pass', 'db_dsn', 'db_scheme');
            foreach (
$strings as $str) {
               
$up = strtoupper($str);
               
$dbdata[$up] = trim(filter_input(INPUT_POST, $str, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH));
               
$dbdata[$up] = addslashes($dbdata[$up]);
            }
           
$dbdata['DB_PORT'] = (int)$_POST['db_port'];

           
$db_import = (int)$_POST['db_import'];

           
$siteconfig = $this->makeConfig($elxis, $folder, $name, $dbdata);
           
$configfile = 'config'.$newid.'.php';
           
$ok = $eFiles->createFile($configfile, $siteconfig);
            if (!
$ok) {
               
$response['message'] = sprintf($eLang->get('CNOT_CREATE_CFG_NEW'), $siteconfig);
               
$this->ajaxHeaders('application/json');
                echo
json_encode($response);
                exit;
            }

            if (
$db_import > 0) {
               
$result = $this->importData($dbdata, $db_import);
                if (
$result['success'] == false) {
                   
$response['message'] = $eLang->get('DATA_IMPORT_FAILED').': '.$result['message'];
                   
$this->ajaxHeaders('application/json');
                    echo
json_encode($response);
                    exit;
                }
            }
        }

       
$multiconfig = $this->makeMultiConfig($newmultisites);
       
$ok = $eFiles->createFile('configuration.php', $multiconfig);
        if (
$ok) {
           
$response['success'] = 1;
        } else {
           
$response['message'] = 'Could not save settings! Is file configuration.php writeable?';
        }
       
$this->ajaxHeaders('application/json');
        echo
json_encode($response);
        exit;
    }


   
/******************************************/
    /* BACKUP AND IMPORT DATA TO THE NEW SITE */
    /******************************************/
   
private function importData($upperdbdata, $db_import=0) {
       
$elxis = eFactory::getElxis();
       
$eFiles = eFactory::getFiles();
       
$eLang = eFactory::getLang();

       
$dbdata = array();
        foreach (
$upperdbdata as $key => $val) {
           
$lowkey = strtolower($key);
           
$dbdata[$lowkey] = $val;
        }

       
$result = array('success' => false, 'message' => 'Import failed!');

        if (!
file_exists(ELXIS_PATH.'/includes/libraries/elxis/database/importers/'.$dbdata['db_type'].'.importer.php')) {
           
$result['message'] = $eLang->get('NOT_SUP_DBTYPE');
            return
$result;
        }

        if (
$dbdata['db_type'] != $elxis->getConfig('DB_TYPE')) {
           
$result['message'] = $eLang->get('DBTYPES_MUST_SAME');
            return
$result;
        }

       
$repo_path = $elxis->getConfig('REPO_PATH');
        if (
$repo_path == '') { $repo_path = ELXIS_PATH.'/repository'; }

       
$prefix = $elxis->getConfig('DB_PREFIX');
       
$noinsert = array();
        if (
$db_import < 2) {
           
$noinsert[] = $prefix.'categories';
           
$noinsert[] = $prefix.'comments';
           
$noinsert[] = $prefix.'content';
           
$noinsert[] = $prefix.'menu';
           
$noinsert[] = $prefix.'translations';
        }
       
$noinsert[] = $prefix.'session';
       
$userparams = array('no_insert_tables' => $noinsert);
        unset(
$prefix, $noinsert);

         
$sql = eFactory::getDB()->backup($userparams);
         unset(
$userparams);

         if (
$sql === 0) {
             return
$result;
        } else if (
$sql === -1) {
             
$result['message'] = $eLang->get('NOT_SUP_DBTYPE');
             return
$result;
         } else if (
$sql === -2) {
             
$result['message'] = 'Invalid or insufficient backup parameters!';
             return
$result;
         } else if (
$sql === -3) {
             
$result['message'] = $elxis->getConfig('DB_TYPE').' database adapter faced an unrecoverable error!';
             return
$result;
         }

       
$rnd = rand(1000, 9999);
       
$sqlfile = $repo_path.'/backup/elxis'.$rnd.'.sql';

       
$ok = $eFiles->createFile('backup/elxis'.$rnd.'.sql', $sql, true);
        if (!
$ok) {
             
$result['message'] = 'Could not create backup of this site!';
            return
$result;
        }
        unset(
$sql, $ok);

       
$classname = 'elxis'.ucfirst($dbdata['db_type']).'Importer';
       
elxisLoader::loadFile('includes/libraries/elxis/database/importers/'.$dbdata['db_type'].'.importer.php');

       
$dbdata['db_prefix_old'] = $elxis->getConfig('DB_PREFIX');
       
$dbdata['file'] = $sqlfile;

       
$importer = new $classname($dbdata);
        if (!
$importer->import()) {
           
$result['message'] = $importer->getError();
           
$importer->disconnect();
           
$eFiles->deleteFile('backup/elxis'.$rnd.'.sql', true);
            return
$result;
        }

       
$eFiles->deleteFile('backup/elxis'.$rnd.'.sql', true);

       
$sql = 'DELETE FROM '.$dbdata['db_prefix'].'users WHERE gid <> 1';
       
$importer->query($sql);

       
$importer->disconnect();
       
$result['success'] = true;
       
$result['message'] = $eLang->get('DATA_IMPORT_SUC');

        return
$result;
    }


   
/*****************************/
    /* MAKE AN ID FOR A NEW SITE */
    /*****************************/
   
private function makeSiteId() {
        for (
$i=2; $i < 101; $i++) {
            if (!
file_exists(ELXIS_PATH.'/config'.$i.'.php')) { return $i; }
        }
        return
rand(101, 1000);
    }


   
/********************************************/
    /* CREATE CONFIGURATION FILE FOR A NEW SITE */
    /********************************************/
   
private function makeConfig($elxis, $folder, $name, $dbdata) {
       
$cfgvars = array(
           
'ATEMPLATE', 'CACHE', 'CACHE_TIME', 'CAPTCHA', 'CRONJOBS', 'CRONJOBS_PROB', 'CSP', 'DB_DSN', 'DB_HOST', 'DB_NAME',
           
'DB_PASS', 'DB_PERSISTENT', 'DB_PORT', 'DB_PREFIX', 'DB_SCHEME', 'DB_TYPE', 'DB_USER', 'DEBUG', 'DEFAULT_ROUTE', 'DEFENDER', 'DEFENDER_IPAFTER',
           
'DEFENDER_LOG', 'DEFENDER_NOTIFY', 'ENCRYPT_KEY', 'ENCRYPT_METHOD', 'ERROR_ALERT', 'ERROR_LOG', 'ERROR_REPORT', 'FTP', 'FTP_HOST',
           
'FTP_PASS', 'FTP_PORT', 'FTP_ROOT', 'FTP_USER', 'GZIP', 'JQUERY', 'LANG', 'LANG_DETECT', 'LOG_ROTATE', 'MAIL_AUTH_METHOD', 'MAIL_EMAIL',
           
'MAIL_FROM_EMAIL', 'MAIL_FROM_NAME', 'MAIL_MANAGER_EMAIL', 'MAIL_MANAGER_NAME', 'MAIL_METHOD', 'MAIL_NAME', 'MAIL_SMTP_AUTH', 'MAIL_SMTP_HOST',
           
'MAIL_SMTP_PASS', 'MAIL_SMTP_PORT', 'MAIL_SMTP_SECURE', 'MAIL_SMTP_USER', 'METADESC', 'METAKEYS', 'MINICSS', 'MINIJS', 'MULTILINGUISM',
           
'OFFLINE_MESSAGE', 'ONLINE', 'PASS_RECOVER', 'REALNAME', 'REGISTRATION', 'REGISTRATION_ACTIVATION', 'REGISTRATION_EMAIL_DOMAIN',
           
'REGISTRATION_EXCLUDE_EMAIL_DOMAINS', 'REPO_PATH', 'SECURITY_LEVEL', 'SEF', 'SEO_MATCH', 'SESSION_ENCRYPT', 'SESSION_HANDLER', 'SESSION_LIFETIME',
           
'SESSION_MATCHBROWSER', 'SESSION_MATCHIP', 'SESSION_MATCHREFERER', 'SITELANGS', 'SITENAME', 'SSL', 'STATISTICS', 'TEMPLATE', 'TIMEZONE', 'URL', 'XFOPTIONS'
       
);
       
sort($cfgvars);

       
$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 (
$cfgvars as $cfg) {
            switch (
$cfg) {
                case
'URL': $v = $elxis->getConfig('URL').'/'.$folder; break;
                case
'DB_TYPE': $v = $dbdata['DB_TYPE']; break;
                case
'DB_HOST': $v = $dbdata['DB_HOST']; break;
                case
'DB_NAME': $v = $dbdata['DB_NAME']; break;
                case
'DB_PREFIX': $v = $dbdata['DB_PREFIX']; break;
                case
'DB_USER': $v = $dbdata['DB_USER']; break;
                case
'DB_PASS': $v = $dbdata['DB_PASS']; break;
                case
'DB_DSN': $v = $dbdata['DB_DSN']; break;
                case
'DB_SCHEME': $v = $dbdata['DB_SCHEME']; break;
                case
'DB_PORT': $v = intval($dbdata['DB_PORT']); break;
                case
'SITENAME': $v = $name; break;
                case
'ONLINE': $v = 0; break;
                case
'MULTILINGUISM': $v = 0; break;
                default:
$v = $elxis->getConfig($cfg); break;
            }
            if (
is_numeric($v)) {
               
$out .= "\t".'private $'.$cfg.' = '.$v.';'._LEND;
            } else {
               
$out .= "\t".'private $'.$cfg.' = \''.addslashes($v).'\';'._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 .= '?>';

        return
$out;
    }

}

?>