XoopsModules25x/apcal

View on GitHub
include/updateblock.inc.php

Summary

Maintainability
A
45 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.
 */

/**
 * @copyright   {@link http://xoops.org/ XOOPS Project}
 * @license     {@link http://www.fsf.org/copyleft/gpl.html GNU public license}
 * @package
 * @since
 * @author       XOOPS Development Team,
 * @author       GIJ=CHECKMATE (PEAK Corp. http://www.peak.ne.jp/)
 */

defined('XOOPS_ROOT_PATH') || exit('XOOPS Root Path not defined');

if (substr(XOOPS_VERSION, 6, 3) < 2.1) {

    // Keep Block option values when update (by nobunobu)
    global $xoopsDB;
    $query  = 'SELECT mid FROM ' . $GLOBALS['xoopsDB']->prefix('modules') . " WHERE dirname='" . $modversion['dirname'] . "' ";
    $result = $GLOBALS['xoopsDB']->query($query);
    $record = $GLOBALS['xoopsDB']->fetcharray($result);
    if ($record) {
        $mid   = $record['mid'];
        $count = count($modversion['blocks']);
        /* $sql = "SELECT * FROM ".$xoopsDB->prefix('newblocks')." WHERE mid=".$mid." AND block_type ='D'";
        $fresult = $xoopsDB->query($sql);
        $n_funcnum = $count;
        while ($fblock = $xoopsDB->fetchArray($fresult)) {
            $bnum = 0;
            for ($i = 1 ; $i <= $count ; ++$i) {
                if (($modversion['blocks'][$i]['file'] == $fblock['func_file']) and ($modversion['blocks'][$i]['show_func'] == $fblock['show_func'])) {
                    $bnum = $i;
                    break;
                }
            }
            if ($bnum) {
                ++$n_funcnum;
                $modversion['blocks'][$n_funcnum]['file'] = $fblock['func_file'];
                $modversion['blocks'][$n_funcnum]['name'] = $fblock['name'];
                $modversion['blocks'][$n_funcnum]['description'] = $fblock['name'];
                $modversion['blocks'][$n_funcnum]['show_func'] = $fblock['show_func'];
                $modversion['blocks'][$n_funcnum]['edit_func'] = $fblock['edit_func'];
                $modversion['blocks'][$n_funcnum]['template'] = $fblock['template'];
                if ($fblock['options']) {
                    $old_vals=explode("|",$fblock['options']);
                    $def_vals=explode("|",$modversion['blocks'][$bnum]['options']);
                    if (count($old_vals) == count($def_vals)) {
                        // the number of parameters is not changed
                        $modversion['blocks'][$n_funcnum]['options'] = $fblock['options'];
                        $local_msgs[] = "Option's values of the cloned block <b>".$fblock['name']."</b> will be kept. (value = <b>".$fblock['options']."</b>)";
                    } elseif (count($old_vals) < count($def_vals)) {
                        // the number of parameters is increased
                        for ($j=0; $j < count($old_vals); ++$j) {
                            $def_vals[$j] = $old_vals[$j];
                        }
                        $modversion['blocks'][$n_funcnum]['options'] = implode("|",$def_vals);
                        $local_msgs[] = "Option's values of the cloned block <b>".$fblock['name']."</b> will be kept and new options are added. (value = <b>".$modversion['blocks'][$fblock['func_num']]['options']."</b>)";
                    } else {
                        $modversion['blocks'][$n_funcnum]['options'] = implode("|",$def_vals);
                        $local_msgs[] = "Option's values of the cloned block <b>".$fblock['name']."</b> will be reset to the default, because of some decrease of options. (value = <b>".$modversion['blocks'][$n_funcnum]['options']."</b>)";
                    }
                }
                $sql = "UPDATE ".$xoopsDB->prefix('newblocks')." SET func_num='$n_funcnum' WHERE mid=".$mid." AND bid='".$fblock['bid']."'";
                $iret = $xoopsDB->query($sql);

            }
        } */

        $sql     = 'SELECT * FROM ' . $GLOBALS['xoopsDB']->prefix('newblocks') . ' WHERE mid=' . $mid . " AND block_type <>'D' AND func_num > $count";
        $fresult = $GLOBALS['xoopsDB']->query($sql);
        while ($fblock = $GLOBALS['xoopsDB']->fetchArray($fresult)) {
            $local_msgs[] = 'Non Defined Block <b>' . $fblock['name'] . '</b> will be deleted';
            $sql          = 'DELETE FROM ' . $GLOBALS['xoopsDB']->prefix('newblocks') . " WHERE bid='" . $fblock['bid'] . "'";
            $iret         = $GLOBALS['xoopsDB']->query($sql);
        }

        for ($i = 1; $i <= $count; ++$i) {
            $sql     = 'SELECT name,options FROM '
                       . $GLOBALS['xoopsDB']->prefix('newblocks')
                       . ' WHERE mid='
                       . $mid
                       . ' AND func_num='
                       . $i
                       . " AND show_func='"
                       . addslashes($modversion['blocks'][$i]['show_func'])
                       . "' AND func_file='"
                       . addslashes($modversion['blocks'][$i]['file'])
                       . "'";
            $fresult = $GLOBALS['xoopsDB']->query($sql);
            $fblock  = $GLOBALS['xoopsDB']->fetchArray($fresult);
            if (isset($fblock['options'])) {
                $old_vals = explode('|', $fblock['options']);
                $def_vals = explode('|', $modversion['blocks'][$i]['options']);
                if (count($old_vals) == count($def_vals)) {
                    $modversion['blocks'][$i]['options'] = $fblock['options'];
                    $local_msgs[]                        = "Option's values of the block <b>" . $fblock['name'] . '</b> will be kept. (value = <b>' . $fblock['options'] . '</b>)';
                } elseif (count($old_vals) < count($def_vals)) {
                    for ($j = 0, $jMax = count($old_vals); $j < $jMax; ++$j) {
                        $def_vals[$j] = $old_vals[$j];
                    }
                    $modversion['blocks'][$i]['options'] = implode('|', $def_vals);
                    $local_msgs[]                        = "Option's values of the block <b>"
                                                           . $fblock['name']
                                                           . '</b> will be kept and new option(s) are added. (value = <b>'
                                                           . $modversion['blocks'][$i]['options']
                                                           . '</b>)';
                } else {
                    $local_msgs[] = "Option's values of the block <b>"
                                    . $fblock['name']
                                    . '</b> will be reset to the default, because of some decrease of options. (value = <b>'
                                    . $modversion['blocks'][$i]['options']
                                    . '</b>)';
                }
            }
        }
    }

    global $msgs, $myblocksadmin_parsed_updateblock;
    if (!empty($msgs) && empty($myblocksadmin_parsed_updateblock)) {
        $msgs                             = array_merge($msgs, $local_msgs);
        $myblocksadmin_parsed_updateblock = true;
    }
}