| 
<?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       The XUUPS Project http://sourceforge.net/projects/xuups/
 * @license         http://www.fsf.org/copyleft/gpl.html GNU public license
 * @package         Publisher
 * @since           1.0
 * @author          trabis <[email protected]>
 * @author          Kazumi Ono (AKA onokazu)
 */
 
 use Xmf\Request;
 use XoopsModules\Publisher;
 
 require_once __DIR__ . '/admin_header.php';
 
 /** @var Publisher\Helper $helper */
 $helper = Publisher\Helper::getInstance();
 
 $module  = $helper->getModule();
 $modId   = $module->mid();
 $modname = $module->name();
 $dirName = $helper->getDirname();
 
 /** @var \XoopsModuleHandler $moduleHandler */
 $moduleHandler = xoops_getHandler('module');
 $xoopsModule0  = $moduleHandler->getByDirname(basename(dirname(__DIR__)));
 global $xoopsModule;
 
 xoops_loadLanguage('admin', 'system');
 xoops_loadLanguage('admin/preferences', 'system');
 
 $op = 'showmod';
 if (isset($_POST)) {
 foreach ($_POST as $k => $v) {
 ${$k} = $v;
 }
 }
 unset($k, $v);
 
 $op = Request::getString('op', $op, 'GET');
 
 $configcat = Request::getString('configcat', '', 'GET');
 
 if ('showmod' === $op) {
 /** @var \XoopsConfigHandler $configHandler */
 $configHandler = xoops_getHandler('config');
 
 $config = $configHandler->getConfigs(new \Criteria('conf_modid', $modId));
 $count  = count($config);
 if ($count < 1) {
 redirect_header($module->getInfo('adminindex'), 1);
 }
 
 $xv_configs  = $module->getInfo('config');
 $config_cats = $module->getInfo('configcat');
 
 if (!array_key_exists('others', $config_cats)) {
 $config_cats['others'] = [
 'name'        => _MI_PUBLISHER_CONFCAT_OTHERS,
 'description' => _MI_PUBLISHER_CONFCAT_OTHERS_DSC,
 ];
 }
 $cat_others_used = false;
 
 xoops_loadLanguage('modinfo', $module->getVar('dirname'));
 
 if (1 == $module->getVar('hascomments')) {
 xoops_loadLanguage('comment');
 }
 
 if (1 == $module->getVar('hasnotification')) {
 xoops_loadLanguage('notification');
 }
 
 xoops_load('XoopsFormLoader');
 
 foreach ($config_cats as $formCat => $info) {
 $$formCat = new \XoopsThemeForm($info['name'], 'pref_form_' . $formCat, 'preferences.php', 'post', true);
 }
 unset($formCat, $info);
 
 for ($i = 0; $i < $count; ++$i) {
 foreach ($xv_configs as $xv_config) {
 if ($config[$i]->getVar('conf_name') == $xv_config['name']) {
 break;
 }
 }
 
 $formCat = @$xv_config['category'];
 $formCat = isset($xv_config['category']) ? $xv_config['category'] : '';
 unset($xv_config);
 
 if (!array_key_exists($formCat, $config_cats)) {
 $formCat         = 'others';
 $cat_others_used = true;
 }
 
 $title = (!defined($config[$i]->getVar('conf_desc'))
 || '' == constant($config[$i]->getVar('conf_desc'))) ? constant($config[$i]->getVar('conf_title')) : constant($config[$i]->getVar('conf_title')) . '<br><br><span style="font-weight:normal;">' . constant($config[$i]->getVar('conf_desc')) . '</span>';
 switch ($config[$i]->getVar('conf_formtype')) {
 case 'textarea':
 $myts = \MyTextSanitizer::getInstance();
 if ('array' === $config[$i]->getVar('conf_valuetype')) {
 // this is exceptional.. only when value type is arrayneed a smarter way for this
 $ele = ('' != $config[$i]->getVar('conf_value')) ? new \XoopsFormTextArea($title, $config[$i]->getVar('conf_name'), $myts->htmlSpecialChars(implode('|', $config[$i]->getConfValueForOutput())), 5, 50) : new \XoopsFormTextArea($title, $config[$i]->getVar('conf_name'), '', 5, 50);
 } else {
 $ele = new \XoopsFormTextArea($title, $config[$i]->getVar('conf_name'), $myts->htmlSpecialChars($config[$i]->getConfValueForOutput()), 5, 50);
 }
 break;
 case 'select':
 $ele     = new \XoopsFormSelect($title, $config[$i]->getVar('conf_name'), $config[$i]->getConfValueForOutput());
 $options = $configHandler->getConfigOptions(new \Criteria('conf_id', $config[$i]->getVar('conf_id')));
 $opcount = count($options);
 for ($j = 0; $j < $opcount; ++$j) {
 $optval = defined($options[$j]->getVar('confop_value')) ? constant($options[$j]->getVar('confop_value')) : $options[$j]->getVar('confop_value');
 $optkey = defined($options[$j]->getVar('confop_name')) ? constant($options[$j]->getVar('confop_name')) : $options[$j]->getVar('confop_name');
 $ele->addOption($optval, $optkey);
 }
 break;
 case 'select_multi':
 $ele     = new \XoopsFormSelect($title, $config[$i]->getVar('conf_name'), $config[$i]->getConfValueForOutput(), 5, true);
 $options = $configHandler->getConfigOptions(new \Criteria('conf_id', $config[$i]->getVar('conf_id')));
 $opcount = count($options);
 for ($j = 0; $j < $opcount; ++$j) {
 $optval = defined($options[$j]->getVar('confop_value')) ? constant($options[$j]->getVar('confop_value')) : $options[$j]->getVar('confop_value');
 $optkey = defined($options[$j]->getVar('confop_name')) ? constant($options[$j]->getVar('confop_name')) : $options[$j]->getVar('confop_name');
 $ele->addOption($optval, $optkey);
 }
 break;
 case 'yesno':
 $ele = new \XoopsFormRadioYN($title, $config[$i]->getVar('conf_name'), $config[$i]->getConfValueForOutput(), _YES, _NO);
 break;
 case 'group':
 require_once $GLOBALS['xoops']->path('class/xoopslists.php');
 $ele = new \XoopsFormSelectGroup($title, $config[$i]->getVar('conf_name'), false, $config[$i]->getConfValueForOutput(), 1, false);
 break;
 case 'group_multi':
 require_once $GLOBALS['xoops']->path('class/xoopslists.php');
 $ele = new \XoopsFormSelectGroup($title, $config[$i]->getVar('conf_name'), false, $config[$i]->getConfValueForOutput(), 5, true);
 break;
 case 'user':
 require_once $GLOBALS['xoops']->path('class/xoopslists.php');
 $ele = new \XoopsFormSelectUser($title, $config[$i]->getVar('conf_name'), false, $config[$i]->getConfValueForOutput(), 1, false);
 break;
 case 'user_multi':
 require_once $GLOBALS['xoops']->path('class/xoopslists.php');
 $ele = new \XoopsFormSelectUser($title, $config[$i]->getVar('conf_name'), false, $config[$i]->getConfValueForOutput(), 5, true);
 break;
 case 'password':
 $myts = \MyTextSanitizer::getInstance();
 $ele  = new \XoopsFormPassword($title, $config[$i]->getVar('conf_name'), 50, 255, $myts->htmlSpecialChars($config[$i]->getConfValueForOutput()));
 break;
 case 'color':
 $myts = \MyTextSanitizer::getInstance();
 $ele  = new \XoopsFormColorPicker($title, $config[$i]->getVar('conf_name'), $myts->htmlSpecialChars($config[$i]->getConfValueForOutput()));
 break;
 case 'hidden':
 $myts = \MyTextSanitizer::getInstance();
 $ele  = new \XoopsFormHidden($config[$i]->getVar('conf_name'), $myts->htmlSpecialChars($config[$i]->getConfValueForOutput()));
 break;
 case 'textbox':
 default:
 $myts = \MyTextSanitizer::getInstance();
 $ele  = new \XoopsFormText($title, $config[$i]->getVar('conf_name'), 50, 255, $myts->htmlSpecialChars($config[$i]->getConfValueForOutput()));
 break;
 }
 $hidden = new \XoopsFormHidden('conf_ids[]', $config[$i]->getVar('conf_id'));
 $$formCat->addElement($ele);
 $$formCat->addElement($hidden);
 unset($ele, $hidden);
 }
 
 Publisher\Utility::cpHeader();
 //publisher_adminMenu(5, _PREFERENCES);
 foreach ($config_cats as $formCat => $info) {
 if ('others' === $formCat && !$cat_others_used) {
 continue;
 }
 $$formCat->addElement(new \XoopsFormHidden('op', 'save'));
 $$formCat->addElement(new \XoopsFormButton('', 'button', _GO, 'submit'));
 Publisher\Utility::openCollapsableBar($formCat . '_table', $formCat . '_icon', $info['name'], $info['description']);
 $$formCat->display();
 Publisher\Utility::closeCollapsableBar($formCat . '_table', $formCat . '_icon');
 }
 unset($formCat, $info);
 xoops_cp_footer();
 exit();
 }
 
 if ('save' === $op) {
 if (!$GLOBALS['xoopsSecurity']->check()) {
 redirect_header($module->getInfo('adminindex'), 3, implode('<br>', $GLOBALS['xoopsSecurity']->getErrors()));
 }
 $count         = count($confIds);
 $configHandler = xoops_getHandler('config');
 if ($count > 0) {
 for ($i = 0; $i < $count; ++$i) {
 $config   = $configHandler->getConfig($confIds[$i]);
 $newValue = ${$config->getVar('conf_name')};
 if (is_array($newValue) || $newValue != $config->getVar('conf_value')) {
 $config->setConfValueForInput($newValue);
 $configHandler->insertConfig($config);
 }
 unset($newValue);
 }
 }
 redirect_header('preferences.php', 2, _AM_DBUPDATED);
 }
 
 |