ImpressCMS/impresscms

View on GitHub
upgrade/upd-2.0.18-to-impresscms-1.0/index.php

Summary

Maintainability
C
1 day
Test Coverage
<?php
class upgrade_impcms05 {
    var $usedFiles = array ();
    function isApplied() {
        return ($this->check_conf_config());
    }
    function apply() {
        $this->apply_alter_tables();
        $this->apply_conf_configcategory();
        $this->apply_conf_config();
        $this->apply_ml_config();
        $this->blocks_engine_upgrade();
        //$this->apply_new_blocks();
        $this->apply_templates();
        return ($this->cleaning_write_folders());
    }
    function cleaning_write_folders() {
        $dir = array();
        $dir['templates_c'] = ICMS_COMPILE_PATH . "/";
        $dir['cache'] = ICMS_CACHE_PATH . "/";

        foreach ($dir as $d)
        {
            $dd = opendir($d);
            while ($file = readdir($dd))
            {
                if (is_file($d.$file) && ($file != 'index.html' && $file != 'php.ini' && $file != '.htaccess'))
                {
                    unlink($d.$file);
                }
            }
            closedir($dd);
        }
        return true;
    }
    function apply_conf_configcategory() {
        $db = $GLOBALS['xoopsDB'];
        if (getDbValue($db,'configcategory','confcat_id',' confcat_name="_MD_AM_MULTILANGUAGE"') != 0) {return true;}
        return $this->query(" INSERT INTO " . $db->prefix("configcategory") . " (confcat_id,confcat_name) VALUES ('','_MD_AM_MULTILANGUAGE')");
    }
    function apply_new_blocks() {
        $db = $GLOBALS['xoopsDB'];
        if (getDbValue($db,'newblocks','bid',' show_func="b_system_multilanguage_show"') != 0) {return true;}
        $this->query(" INSERT INTO " . $db->prefix("newblocks") . " VALUES ('', 1, 0, '', 'Language Selection', 'Language Selection', '', 1, 0, 0, 'S', 'H', 1, 'system', 'system_blocks.php', 'b_system_multilanguage_show', '', 'system_block_multilanguage.html', 0, " . time() . ")");
        $new_block_id = $db->getInsertId();
        $this->query(" UPDATE " . $db->prefix("newblocks") . " SET func_num = " . $new_block_id . " WHERE bid=" . $new_block_id);
        $this->query(" INSERT INTO " . $db->prefix("tplfile") . " VALUES ('', " . $new_block_id . ", 'system', 'default', 'system_block_multilanguage.html', 'Displays image links to change the site language', " . time() . ", " . time() . ", 'block');");
        $new_tplfile_id = $db->getInsertId();
        $new_tpl_source = '<div align="center">\n    <{$block.ml_tag}>\n</div>';
        $this->query(" INSERT INTO " . $db->prefix("tplsource") . " VALUES (" . $new_tplfile_id . ", '" . $new_tpl_source . "');");
        $this->query(" INSERT INTO " . $db->prefix("block_module_link") . " VALUES (" . $new_block_id . ", 0);");
        $this->query(" INSERT INTO " . $db->prefix("group_permission") . " VALUES ('', 1, " . $new_block_id . ", 1, 'block_read');");
        $this->query(" INSERT INTO " . $db->prefix("group_permission") . " VALUES ('', 2, " . $new_block_id . ", 1, 'block_read');");
        $this->query(" INSERT INTO " . $db->prefix("group_permission") . " VALUES ('', 3, " . $new_block_id . ", 1, 'block_read');");
        return true;
    }
    function blocks_engine_upgrade() {
        echo '<h2>Updating blocks engine </h2>';
        if (!$this->table_exists('block_positions')) {
            $xoopsDB = $GLOBALS['xoopsDB'];
            $query = "CREATE TABLE `" . $xoopsDB->prefix('block_positions') . "` (
                  id int(11) NOT NULL auto_increment,
                  pname varchar(30) default '',
                  title varchar(90) NOT NULL default '',
                  description text,
                  block_default int(1) NOT NULL default '0',
                  block_type varchar(1) NOT NULL default 'L',
                  PRIMARY KEY  (`id`)
                  );";
            $this->query($query);
            $pos = array ();
            $pos[] = "INSERT INTO `" . $xoopsDB->prefix('block_positions') . "` VALUES (1,'canvas_left','_AM_SBLEFT',NULL,1,'L');";
            $pos[] = "INSERT INTO `" . $xoopsDB->prefix('block_positions') . "` VALUES (2,'canvas_right','_AM_SBRIGHT',NULL,1,'L');";
            $pos[] = "INSERT INTO `" . $xoopsDB->prefix('block_positions') . "` VALUES (3,'page_topleft','_AM_CBLEFT',NULL,1,'C');";
            $pos[] = "INSERT INTO `" . $xoopsDB->prefix('block_positions') . "` VALUES (4,'page_topcenter','_AM_CBCENTER',NULL,1,'C');";
            $pos[] = "INSERT INTO `" . $xoopsDB->prefix('block_positions') . "` VALUES (5,'page_topright','_AM_CBRIGHT',NULL,1,'C');";
            $pos[] = "INSERT INTO `" . $xoopsDB->prefix('block_positions') . "` VALUES (6,'page_bottomleft','_AM_CBBOTTOMLEFT',NULL,1,'C');";
            $pos[] = "INSERT INTO `" . $xoopsDB->prefix('block_positions') . "` VALUES (7,'page_bottomcenter','_AM_CBBOTTOM',NULL,1,'C');";
            $pos[] = "INSERT INTO `" . $xoopsDB->prefix('block_positions') . "` VALUES (8,'page_bottomright','_AM_CBBOTTOMRIGHT',NULL,1,'C');";
            foreach ($pos as $p) {
                $this->query($p);
            }
            $curr_block_schema = array ();
            $curr_block_schema["XOOPS_SIDEBLOCK_LEFT"] = 0;
            $curr_block_schema["XOOPS_SIDEBLOCK_RIGHT"] = 1;
            $curr_block_schema["XOOPS_SIDEBLOCK_BOTH"] = 2;
            $curr_block_schema["XOOPS_CENTERBLOCK_LEFT"] = 3;
            $curr_block_schema["XOOPS_CENTERBLOCK_RIGHT"] = 4;
            $curr_block_schema["XOOPS_CENTERBLOCK_CENTER"] = 5;
            $curr_block_schema["XOOPS_CENTERBLOCK_ALL"] = 6;
            $curr_block_schema["XOOPS_CENTERBLOCK_BOTTOMLEFT"] = 7;
            $curr_block_schema["XOOPS_CENTERBLOCK_BOTTOMRIGHT"] = 8;
            $curr_block_schema["XOOPS_CENTERBLOCK_BOTTOM"] = 9;
            $curr_block_schema_id = array ();

            foreach ($curr_block_schema as $k => $v) {
                $sql = 'SELECT bid FROM ' . $xoopsDB->prefix('newblocks') . ' WHERE side = "' . $v . '"';
                echo "<li>" . $sql . "</li>";
                $result = $xoopsDB->query($sql);
                $curr_block_schema_id[$k] = array ();
                while (list ($bid) = $xoopsDB->fetchRow($result)) {
                    $curr_block_schema_id[$k][] = $bid;
                }
            }
            echo '<h2>Relating old blocks schema with the new and updating data.</h2>';
            $err = 0;
            foreach ($curr_block_schema_id as $k => $v) {
                echo '<li>Position constant: ' . $k . '</li>';
                foreach ($v as $bid) {
                    echo '<li>bid = ' . $bid . ' - old side = ' . $curr_block_schema[$k] . ' - new side = ' . constant($k) . '</li>';
                    $sql = 'UPDATE ' . $xoopsDB->prefix('newblocks') . ' SET side = "' . constant($k) . '" WHERE bid = ' . $bid;
                    $this->query($sql);
                }
            }
        }
        return true;
    }
    /**
     * Verify that a mysql table exists
     *
     * @package News
     * @author Herv� Thouzard (www.herve-thouzard.com)
     * @copyright (c) The Xoops Project - www.xoops.org
     */
    function table_exists($tablename) {
        global $xoopsDB;
        $query = "SHOW TABLES LIKE '" . $xoopsDB->prefix($tablename) . "'";
        $result = $xoopsDB->queryF($query);
        return ($xoopsDB->getRowsNum($result) > 0);
    }
    function check_file_patch() {
        /* $path = XOOPS_ROOT_PATH . '/class/auth';
         $lines = file( "$path/auth_provisionning.php");
         foreach ( $lines as $line) {
            if (strpos( $line, "ldap_provisionning_upd" ) !== false) {
            // Patch found: do not apply again
            return true;
            }
            } */
        return true;
    }
    function check_conf_config() {
        $db = $GLOBALS['xoopsDB'];
        $value = getDbValue($db, 'config', 'conf_id', "`conf_name` = 'rank_width' AND `conf_catid` = " . XOOPS_CONF_USER);
        return (bool) ($value);
    }
    function query($sql) {
        //echo "<li>" . $sql . "</li>";
        $db = $GLOBALS['xoopsDB'];
        if (!($ret = $db->queryF($sql))) {
            echo "<li style='font-weight: bold; color: red;'>" . $db->error() . "</li>";
        }
    }
    function apply_alter_tables() {
        $db = $GLOBALS['xoopsDB'];
        $this->fields = array (
            "config" => array (
                "conf_desc" => "varchar(100)"
                ),

                );
                foreach ($this->fields as $table => $data) {
                    foreach ($data as $field => $property) {
                        $sql = "ALTER TABLE " . $db->prefix($table) . " CHANGE `$field` `$field` $property";
                        $this->query($sql);
                    }
                }
                return true;
    }
    function apply_ml_config() {
        $db = $GLOBALS['xoopsDB'];
        // Insert config values
        $table = $db->prefix('config');
        $data = array (
            'ml_enable' => "'_MD_AM_ML_ENABLE', '0', '_MD_AM_ML_ENABLEDSC', 'yesno', 'int', 0",
            'ml_tags' => "'_MD_AM_ML_TAGS', 'en,fr', '_MD_AM_ML_TAGSDSC', 'textbox', 'text', 5",
            'ml_names' => "'_MD_AM_ML_NAMES', 'english,french', '_MD_AM_ML_NAMESDSC', 'textbox', 'text', 10",
            'ml_captions' => "'_MD_AM_ML_CAPTIONS', 'English,Francais', '_MD_AM_ML_CAPTIONSDSC', 'textbox', 'text', 15",
            'ml_charset' => "'_MD_AM_ML_CHARSET', 'UTF-8,ISO-8859-15', '_MD_AM_ML_CHARSETDSC', 'textbox', 'text', 16",
        );
        reset($data);
        foreach ($data as $name => $values) {
            if (!getDbValue($db, 'config', 'conf_id', "`conf_modid`=0 AND `conf_catid`=8 AND `conf_name`='$name'")) {
                $this->query("INSERT INTO `$table` (conf_modid,conf_catid,conf_name,conf_title,conf_value,conf_desc,conf_formtype,conf_valuetype,conf_order) VALUES ( 0,8,'$name',$values)");
            }
        }
        return true;
    }
    function apply_conf_config() {
        $db = $GLOBALS['xoopsDB'];
        // Insert config values
        $table = $db->prefix('config');
        $data = array (
            'rank_width' => "'_MD_AM_RANKW', '120', '_MD_AM_RANKWDSC', 'textbox', 'int', 21",
            'rank_height' => "'_MD_AM_RANKH', '120', '_MD_AM_RANKHDSC', 'textbox', 'int', 21",
            'rank_maxsize' => "'_MD_AM_RANKMAX', '35000', '_MD_AM_RANKMAXDSC', 'textbox', 'int', 21",
            'remember_me' => "'_MD_AM_REMEMBERME', '0', '_MD_AM_REMEMBERMEDSC', 'yesno', 'int', 29",
            'priv_dpolicy' => "'_MD_AM_PRIVDPOLICY', 1, '_MD_AM_PRIVDPOLICYDSC', 'yesno', 'int', 31",
            'priv_policy' => "'_MD_AM_PRIVPOLICY', '" . addslashes(_UPGRADE_PRIVPOLICY
        ) . "', '_MD_AM_PRIVPOLICYDSC', 'textarea', 'text', 32");
        reset($data);
        foreach ($data as $name => $values) {
            if (!getDbValue($db, 'config', 'conf_id', "`conf_modid`=0 AND `conf_catid`=2 AND `conf_name`='$name'")) {
                $this->query("INSERT INTO `$table` (conf_modid,conf_catid,conf_name,conf_title,conf_value,conf_desc,conf_formtype,conf_valuetype,conf_order) VALUES ( 0,2,'$name',$values)");
            }
        }
        return true;
    }

    function apply_templates() {
        $db = $GLOBALS['xoopsDB'];
        $table = $db->prefix('tplfile');
        $table1 = $db->prefix('tplsource');
        $tpl_files = array(
            'system_error.html'=>'Template for handling HTTP errors',
            'system_privpolicy.html'=>'Template for displaying site Privacy Policy'
            );
            foreach ($tpl_files as $tpl_file=>$desc) {
                if (!getDbValue($db,'tplfile','tpl_id',' tpl_file="'.$tpl_file.'"')) {
                    if ($fp = fopen('../modules/system/templates/'.$tpl_file, 'r')) {
                        $new_tpl_source = fread($fp, filesize('../modules/system/templates/'.$tpl_file));
                        fclose($fp);
                        $this->query(" INSERT INTO " . $table . " VALUES ('', 1, 'system', 'default', '".$tpl_file."', '".$desc."', ".time().", 0, 'module')");
                        $new_tplfile_id = $db->getInsertId();
                        $this->query(" INSERT INTO " . $table1 . " VALUES (" . $new_tplfile_id . ", '" . addslashes($new_tpl_source) . "');");
                    }
                }
            }
            return true;
    }
}
$upg = new upgrade_impcms05();
return $upg;
?>