ImpressCMS/impresscms

View on GitHub
htdocs/install/page_configsave.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php
/*
 * You may not change or alter any portion of this comment or credits
 * of supporting developers from this source code or any supporting source code
 * which is considered copyrighted (c) material of the original comment or credit authors.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 */
/**
 * Installer mainfile creation page
 *
 * See the enclosed file license.txt for licensing information.
 * If you did not receive this file, get it at http://www.fsf.org/copyleft/gpl.html
 *
 * @copyright The XOOPS project http://www.xoops.org/
 * @license http://www.fsf.org/copyleft/gpl.html GNU General Public License (GPL)
 * @package installer
 * @since 2.3.0
 * @author Haruki Setoyama <haruki@planewave.org>
 * @author Kazumi Ono <webmaster@myweb.ne.jp>
 * @author Skalpa Keo <skalpa@xoops.org>
 * @author Taiwen Jiang <phppp@users.sourceforge.net>
 * @version $Id: page_configsave.php 12329 2013-09-19 13:53:36Z skenow $
 */

/**
 */
require_once 'common.inc.php';
if (!defined('XOOPS_INSTALL')) exit();

$wizard->setPage('configsave');
$pageHasForm = true;
$pageHasHelp = false;

$vars = &$_SESSION['settings'];

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $error = '';
    // let's try and put the db info in the trust path
    $sdata_file_name = md5($vars['ROOT_PATH'] . time()) . '.php';

    if (!copy($vars['ROOT_PATH'] . '/install/templates/sdata.dist.php', $vars['TRUST_PATH'] . '/' . $sdata_file_name)) {
        // we were not able to create the sdata file in trust path so we will use the old method
        $error = true;
    } else {
        clearstatcache();
        if (!$file = fopen($vars['TRUST_PATH'] . '/' . $sdata_file_name, "r")) {
            $error = ERR_READ_SDATA;
        } else {
            $content = fread($file, filesize($vars['TRUST_PATH'] . '/' . $sdata_file_name));
            fclose($file);

            $sdata_rewrite = array();
            $sdata_rewrite['DB_HOST'] = $vars['DB_HOST'];
            $sdata_rewrite['DB_USER'] = $vars['DB_USER'];
            $sdata_rewrite['DB_PASS'] = $vars['DB_PASS'];
            $sdata_rewrite['DB_NAME'] = $vars['DB_NAME'];
            $sdata_rewrite['DB_PREFIX'] = $vars['DB_PREFIX'];
            $sdata_rewrite['DB_SALT'] = $vars['DB_SALT'];

            foreach ($sdata_rewrite as $key => $val) {
                if (preg_match("/(define\()([\"'])(SDATA_$key)\\2,\s*([\"'])(.*?)\\4\s*\)/", $content)) {
                    $val = addcslashes($val, '\$"\'');
                    $content = preg_replace("/(define\()([\"'])(SDATA_$key)\\2,\s*([\"'])(.*?)\\4\s*\)/", "define( 'SDATA_$key', '$val' )", $content);
                } else {
                    // $this->error = true;
                    // $this->report .= _NGIMG.sprintf( ERR_WRITING_CONSTANT, "<b>$val</b>")."<br />\n";
                }
            }
            if (!$file = fopen($vars['TRUST_PATH'] . '/' . $sdata_file_name, "w")) {
                $error = ERR_WRITE_SDATA;
            } else {
                if (fwrite($file, $content) == -1) {
                    $error = ERR_WRITE_SDATA;
                }
                fclose($file);
            }
        }
    }
    if (!$error) {
        // then we were able to save the db info into the trust path
        $dbinfo_in_trust_path = true;
        $vars['DB_HOST'] = 'SDATA_DB_HOST';
        $vars['DB_USER'] = 'SDATA_DB_USER';
        $vars['DB_PASS'] = 'SDATA_DB_PASS';
        $vars['DB_NAME'] = 'SDATA_DB_NAME';
        $vars['DB_PREFIX'] = 'SDATA_DB_PREFIX';
        $vars['DB_SALT'] = 'SDATA_DB_SALT';
    } else {
        $dbinfo_in_trust_path = false;
    }

    if (!copy($vars['ROOT_PATH'] . '/install/templates/mainfile.dist.php', $vars['ROOT_PATH'] . '/mainfile.php')) {
        $error = ERR_COPY_MAINFILE;
    } else {
        clearstatcache();

        $rewrite = array('GROUP_ADMIN' => 1, 'GROUP_USERS' => 2, 'GROUP_ANONYMOUS' => 3);
        $rewrite = array_merge($rewrite, $vars);
        if (!$file = fopen($vars['ROOT_PATH'] . '/mainfile.php', "r")) {
            $error = ERR_READ_MAINFILE;
        } else {
            $content = fread($file, filesize($vars['ROOT_PATH'] . '/mainfile.php'));
            fclose($file);

            if ($dbinfo_in_trust_path) {
                // add the line in mainfile to include the sdata file
                $include_line = "include_once XOOPS_TRUST_PATH . '/" . $sdata_file_name . "' ;";
                $content = str_replace('// sdata#--#', $include_line, $content);
            } else {
                $content = str_replace('// sdata#--#', '', $content);
            }

            foreach ($rewrite as $key => $val) {
                if (is_int($val) && preg_match("/(define\()([\"'])(XOOPS_$key)\\2,\s*([0-9]+)\s*\)/", $content)) {
                    $content = preg_replace("/(define\()([\"'])(XOOPS_$key)\\2,\s*([0-9]+)\s*\)/", "define( 'XOOPS_$key', $val )", $content);
                } elseif ($dbinfo_in_trust_path && isset($sdata_rewrite[$key])) {
                    if (preg_match("/(define\()([\"'])(XOOPS_$key)\\2,\s*([\"'])(.*?)\\4\s*\)/", $content)) {
                        $val = addslashes($val);
                        $content = preg_replace("/(define\()([\"'])(XOOPS_$key)\\2,\s*([\"'])(.*?)\\4\s*\)/", "define( 'XOOPS_$key', $val )", $content);
                    }
                } elseif (preg_match("/(define\()([\"'])(XOOPS_$key)\\2,\s*([\"'])(.*?)\\4\s*\)/", $content)) {
                    $val = addslashes($val);
                    $content = preg_replace("/(define\()([\"'])(XOOPS_$key)\\2,\s*([\"'])(.*?)\\4\s*\)/", "define( 'XOOPS_$key', '$val' )", $content);
                } else {
                    // $this->error = true;
                    // $this->report .= _NGIMG.sprintf( ERR_WRITING_CONSTANT, "<b>$val</b>")."<br />\n";
                }
            }
            if (!$file = fopen($vars['ROOT_PATH'] . '/mainfile.php', "w")) {
                $error = ERR_WRITE_MAINFILE;
            } else {
                if (fwrite($file, $content) == -1) {
                    $error = ERR_WRITE_MAINFILE;
                }
                fclose($file);
            }
        }
    }

    // creating the required folders in trust_path
    if (!icms_core_Filesystem::mkdir($vars['TRUST_PATH'] . '/cache/htmlpurifier', 0777, '', array('[', '?', '"', '<', '>', '|', ' '))) {
    /**
     *
     * @todo trap error
     */
    }
    if (is_dir($vars['TRUST_PATH'] . '/cache/htmlpurifier')) {
        if (!icms_core_Filesystem::mkdir($vars['TRUST_PATH'] . '/cache/htmlpurifier/HTML', 0777, '', array('[', '?', '"', '<', '>', '|', ' ')) && !icms_core_Filesystem::mkdir($vars['TRUST_PATH'] . '/cache/htmlpurifier/CSS', 0777, '', array('[', '?', '"', '<', '>', '|', ' ')) && !icms_core_Filesystem::mkdir($vars['TRUST_PATH'] . '/cache/htmlpurifier/URI', 0777, '', array(
            '[',
            '?',
            '"',
            '<',
            '>',
            '|',
            ' ')) && !icms_core_Filesystem::mkdir($vars['TRUST_PATH'] . '/cache/htmlpurifier/Test', 0777, '', array('[', '?', '"', '<', '>', '|', ' '))) {
        /**
         *
         * @todo trap error
         */
        }
    }

    if (empty($error)) {
        $wizard->redirectToPage('+1');
        exit();
    }
    $content = '<p class="errorMsg">' . $error . '</p>';
    include 'install_tpl.php';
    exit();
}

ob_start();
?>
<p class="x2-note"><?php

echo READY_SAVE_MAINFILE;
?></p>
<dl style="height: 200px; overflow: auto; border: 1px solid #D0D0D0">
<?php

foreach ($vars as $k => $v) {
    echo "<dt>XOOPS_$k</dt><dd>$v</dd>";
}
?>
</dl>

<?php
$content = ob_get_contents();
ob_end_clean();
include 'install_tpl.php';