function form_structure_editor($id)
{
    global $cot_structure, $cot_extrafields, $db_structure, $structure, $L, $R;
    $row = $cot_structure->category($id);
    if (empty($row)) {
        return null;
    }
    $ii++;
    $structure_id = $row['structure_id'];
    $structure_code = $row['structure_code'];
    $n = $row['structure_area'];
    $dozvil = $row['structure_count'] > 0 ? false : true;
    $is_module = cot_module_active($n);
    $t = new XTemplate(cot_tplfile('cateditor.admin.edit', 'plug'));
    $t->assign(array('ADMIN_STRUCTURE_HEADER' => $row['structure_title'], 'ADMIN_STRUCTURE_DEL_URL' => $dozvil ? cot_confirm_url(cot_url('admin', 'm=other&p=cateditor&n=' . $n . '&a=delete&id=' . $row['structure_id'] . '&' . cot_xg()), 'admin') : '', 'ADMIN_STRUCTURE_UPDATE_FORM_URL' => cot_url('admin', 'm=other&p=cateditor&n=' . $n . '&id=' . $structure_id . '&a=update'), 'ADMIN_STRUCTURE_ID' => $row['structure_id'], 'ADMIN_STRUCTURE_CODE' => cot_inputbox('text', 'rstructurecode', $structure_code, 'size="10" maxlength="255"'), 'ADMIN_STRUCTURE_PATHFIELDIMG' => mb_strpos($row['structure_path'], '.') == 0 ? $R['admin_icon_join1'] : $R['admin_icon_join2'], 'ADMIN_STRUCTURE_PATH' => cot_inputbox('text', 'rstructurepath', $row['structure_path'], 'size="12" maxlength="255"'), 'ADMIN_STRUCTURE_TPL' => cot_inputbox('text', 'rstructuretpl', $row['structure_tpl'], 'size="10" maxlength="255"'), 'ADMIN_STRUCTURE_TITLE' => cot_inputbox('text', 'rstructuretitle', $row['structure_title'], 'size="32" maxlength="255"'), 'ADMIN_STRUCTURE_DESC' => cot_inputbox('text', 'rstructuredesc', $row['structure_desc'], 'size="64" maxlength="255"'), 'ADMIN_STRUCTURE_ICON' => cot_inputbox('text', 'rstructureicon', $row['structure_icon'], 'size="64" maxlength="128"'), 'ADMIN_STRUCTURE_LOCKED' => cot_checkbox($row['structure_locked'], 'rstructurelocked'), 'ADMIN_STRUCTURE_COUNT' => $row['structure_count'], 'ADMIN_STRUCTURE_PARENT' => $cot_structure->select($cot_structure->get_parent($id), 'rstructureparent', true, 'disabled="disabled"'), 'ADMIN_STRUCTURE_JUMPTO_URL' => cot_url($n, 'c=' . $structure_code), 'ADMIN_STRUCTURE_RIGHTS_URL' => $is_module ? cot_url('admin', 'm=rightsbyitem&ic=' . $n . '&io=' . $structure_code) : '', 'ADMIN_STRUCTURE_ODDEVEN' => cot_build_oddeven($ii)));
    foreach ($cot_extrafields[$db_structure] as $exfld) {
        $exfld_val = cot_build_extrafields('rstructure' . $exfld['field_name'], $exfld, $row['structure_' . $exfld['field_name']]);
        $exfld_title = isset($L['structure_' . $exfld['field_name'] . '_title']) ? $L['structure_' . $exfld['field_name'] . '_title'] : $exfld['field_description'];
        $t->assign(array('ADMIN_STRUCTURE_' . strtoupper($exfld['field_name']) => $exfld_val, 'ADMIN_STRUCTURE_' . strtoupper($exfld['field_name']) . '_TITLE' => $exfld_title, 'ADMIN_STRUCTURE_EXTRAFLD' => $exfld_val, 'ADMIN_STRUCTURE_EXTRAFLD_TITLE' => $exfld_title));
        $t->parse('MAIN.EXTRAFLD');
    }
    require_once cot_incfile('configuration');
    $optionslist = cot_config_list($is_module ? 'module' : 'plug', $n, $structure_code);
    /* === Hook - Part1 : Set === */
    $extp = cot_getextplugins('admin.config.edit.loop');
    /* ===== */
    foreach ($optionslist as $row_c) {
        list($title, $hint) = cot_config_titles($row_c['config_name'], $row_c['config_text']);
        if ($row_c['config_type'] == COT_CONFIG_TYPE_SEPARATOR) {
            $t->assign('ADMIN_CONFIG_FIELDSET_TITLE', $title);
            $t->parse('MAIN.OPTIONS.CONFIG.ADMIN_CONFIG_ROW.ADMIN_CONFIG_FIELDSET_BEGIN');
        } else {
            $t->assign(array('ADMIN_CONFIG_ROW_CONFIG' => cot_config_input($row_c['config_name'], $row_c['config_type'], $row_c['config_value'], $row_c['config_variants']), 'ADMIN_CONFIG_ROW_CONFIG_TITLE' => $title, 'ADMIN_CONFIG_ROW_CONFIG_MORE_URL' => cot_url('admin', 'm=structure&n=' . $n . '&d=' . $durl . '&id=' . $structure_id . '&al=' . $structure_code . '&a=reset&v=' . $row_c['config_name'] . '&' . cot_xg()), 'ADMIN_CONFIG_ROW_CONFIG_MORE' => $hint));
            /* === Hook - Part2 : Include === */
            foreach ($extp as $pl) {
                include $pl;
            }
            /* ===== */
            $t->parse('MAIN.CONFIG.ADMIN_CONFIG_ROW.ADMIN_CONFIG_ROW_OPTION');
        }
        $t->parse('MAIN.CONFIG.ADMIN_CONFIG_ROW');
    }
    /* === Hook  === */
    foreach (cot_getextplugins('admin.config.edit.tags') as $pl) {
        include $pl;
    }
    /* ===== */
    $t->assign('CONFIG_HIDDEN', cot_inputbox('hidden', 'editconfig', $structure_code));
    $t->parse('MAIN.CONFIG');
    $t->parse('MAIN');
    return $t->text('MAIN');
}
 $cat_selectbox = cot_selectbox($row['structure_tpl'], 'rstructuretplforced[' . $structure_id . ']', array_keys($cat_path), array_values($cat_path), false);
 $t->assign(array('ADMIN_STRUCTURE_UPDATE_DEL_URL' => cot_confirm_url(cot_url('admin', 'm=structure&n=' . $n . '&mode=' . $mode . '&a=delete&id=' . $structure_id . '&c=' . $row['structure_code'] . '&d=' . $durl . '&' . cot_xg()), 'admin'), 'ADMIN_STRUCTURE_ID' => $structure_id, 'ADMIN_STRUCTURE_CODE' => cot_inputbox('text', 'rstructurecode[' . $structure_id . ']', $structure_code, 'size="10" maxlength="255"'), 'ADMIN_STRUCTURE_SPACEIMG' => $pathspaceimg, 'ADMIN_STRUCTURE_LEVEL' => $pathfielddep > 0 ? $pathfielddep - 1 : 0, 'ADMIN_STRUCTURE_PATHFIELDIMG' => mb_strpos($row['structure_path'], '.') == 0 ? $R['admin_icon_join1'] : $R['admin_icon_join2'], 'ADMIN_STRUCTURE_PATH' => cot_inputbox('text', 'rstructurepath[' . $structure_id . ']', $row['structure_path'], 'size="12" maxlength="255"'), 'ADMIN_STRUCTURE_TPL_SYM' => $structure_tpl_sym, 'ADMIN_STRUCTURE_TPLMODE' => cot_radiobox($check_tpl, 'rstructuretplmode[' . $structure_id . ']', array('1', '2', '3'), array($L['adm_tpl_empty'], $L['adm_tpl_parent'], $L['adm_tpl_forced']), '', '<br />'), 'ADMIN_STRUCTURE_TPLQUICK' => cot_inputbox('text', 'rstructuretplquick[' . $structure_id . ']', $id > 0 && array_key_exists($row['structure_tpl'], $cat_path) ? '' : $row['structure_tpl'], 'size="10" maxlength="255"'), 'ADMIN_STRUCTURE_TITLE' => cot_inputbox('text', 'rstructuretitle[' . $structure_id . ']', $row['structure_title'], 'size="32" maxlength="255"'), 'ADMIN_STRUCTURE_DESC' => cot_inputbox('text', 'rstructuredesc[' . $structure_id . ']', $row['structure_desc'], 'size="64" maxlength="255"'), 'ADMIN_STRUCTURE_ICON' => cot_inputbox('text', 'rstructureicon[' . $structure_id . ']', $row['structure_icon'], 'size="64" maxlength="128"'), 'ADMIN_STRUCTURE_LOCKED' => cot_checkbox($row['structure_locked'], 'rstructurelocked[' . $structure_id . ']'), 'ADMIN_STRUCTURE_SELECT' => $cat_selectbox, 'ADMIN_STRUCTURE_COUNT' => $row['structure_count'], 'ADMIN_STRUCTURE_JUMPTO_URL' => cot_url($n, 'c=' . $structure_code), 'ADMIN_STRUCTURE_RIGHTS_URL' => $is_module ? cot_url('admin', 'm=rightsbyitem&ic=' . $n . '&io=' . $structure_code) : '', 'ADMIN_STRUCTURE_OPTIONS_URL' => cot_url('admin', 'm=structure&n=' . $n . '&d=' . $durl . '&id=' . $structure_id . '&' . cot_xg()), 'ADMIN_STRUCTURE_ODDEVEN' => cot_build_oddeven($ii)));
 foreach ($cot_extrafields[$db_structure] as $exfld) {
     $exfld_val = cot_build_extrafields('rstructure' . $exfld['field_name'] . '_' . $structure_id, $exfld, $row['structure_' . $exfld['field_name']]);
     $exfld_title = isset($L['structure_' . $exfld['field_name'] . '_title']) ? $L['structure_' . $exfld['field_name'] . '_title'] : $exfld['field_description'];
     $t->assign(array('ADMIN_STRUCTURE_' . strtoupper($exfld['field_name']) => $exfld_val, 'ADMIN_STRUCTURE_' . strtoupper($exfld['field_name']) . '_TITLE' => $exfld_title, 'ADMIN_STRUCTURE_EXTRAFLD' => $exfld_val, 'ADMIN_STRUCTURE_EXTRAFLD_TITLE' => $exfld_title));
     $t->parse($id || !empty($al) ? 'MAIN.OPTIONS.EXTRAFLD' : 'MAIN.DEFAULT.ROW.EXTRAFLD');
 }
 /* === Hook - Part2 : Include === */
 foreach ($extp as $pl) {
     include $pl;
 }
 /* ===== */
 if ($id || !empty($al)) {
     require_once cot_incfile('configuration');
     $optionslist = cot_config_list($is_module ? 'module' : 'plug', $n, $structure_code);
     /* === Hook - Part1 : Set === */
     $extp = cot_getextplugins('admin.config.edit.loop');
     /* ===== */
     foreach ($optionslist as $row_c) {
         list($title, $hint) = cot_config_titles($row_c['config_name'], $row_c['config_text']);
         if ($row_c['config_type'] == COT_CONFIG_TYPE_SEPARATOR) {
             $t->assign('ADMIN_CONFIG_FIELDSET_TITLE', $title);
             $t->parse('MAIN.OPTIONS.CONFIG.ADMIN_CONFIG_ROW.ADMIN_CONFIG_FIELDSET_BEGIN');
         } else {
             $t->assign(array('ADMIN_CONFIG_ROW_CONFIG' => cot_config_input($row_c['config_name'], $row_c['config_type'], $row_c['config_value'], $row_c['config_variants']), 'ADMIN_CONFIG_ROW_CONFIG_TITLE' => $title, 'ADMIN_CONFIG_ROW_CONFIG_MORE_URL' => cot_url('admin', 'm=structure&n=' . $n . '&d=' . $durl . '&id=' . $structure_id . '&al=' . $structure_code . '&a=reset&v=' . $row_c['config_name'] . '&' . cot_xg()), 'ADMIN_CONFIG_ROW_CONFIG_MORE' => $hint));
             /* === Hook - Part2 : Include === */
             foreach ($extp as $pl) {
                 include $pl;
             }
             /* ===== */
Exemple #3
0
/**
 * Updates configuration values
 *
 * Example:
 * <code>
 * $config_values = array(
 *     'disable_test' => '0',
 *     'hidden_test' => 'test45',
 * );
 *
 * cot_config_set('test', $config_values, true);
 * </code>
 *
 * @param string $name Extension name config belongs to
 * @param array $options Array of options as 'option name' => 'option value'
 * @param mixed $is_module Flag indicating if it is module or plugin config
 * @param string $category Structure category code. Only for per-category config options
 * @return int Number of entries updated
 * @global CotDB $db
 */
function cot_config_set($name, $options, $is_module = false, $category = '')
{
    global $db, $db_config;
    if (is_bool($is_module)) {
        $type = $is_module ? 'module' : 'plug';
    } else {
        $type = !in_array($is_module, array('plug', 'core')) ? 'module' : $is_module;
    }
    $upd_cnt = 0;
    $where = 'config_owner = ? AND config_cat = ? AND config_name = ?';
    if (!empty($category)) {
        $where .= ' AND config_subcat = ?';
        if ($category != '__default') {
            $default_options = cot_config_load($name, $is_module, '__default');
        }
        $structure_val = array();
    } else {
        $structure_val = cot_config_list($type, $name, '__default');
    }
    $category_tmp = $category;
    foreach ($options as $key => $val) {
        if (is_array($structure_val[$key])) {
            // roundabout way to update only structure defaults
            $where_sub = ' AND config_subcat = ?';
            $category = '__default';
        } else {
            $where_sub = '';
            $category = $category_tmp;
        }
        if (empty($category) || $category == '__default' || $val != $default_options[$key]) {
            $params = empty($category) ? array($type, $name, $key) : array($type, $name, $key, $category);
            $upd_cnt += $db->update($db_config, array('config_value' => $val), $where . $where_sub, $params);
        }
    }
    return $upd_cnt;
}
     /* === Hook  === */
     foreach (cot_getextplugins('admin.config.edit.update.done') as $pl) {
         include $pl;
     }
     /* ===== */
     $cache && $cache->clear();
     if ($updated) {
         $errors ? cot_message('adm_partially_updated', 'warning') : cot_message('Updated');
     } else {
         if (!$errors) {
             cot_message('adm_already_updated');
         }
     }
 } elseif ($a == 'reset' && !empty($v)) {
     cot_config_reset($p, $v, $o, '');
     $optionslist = cot_config_list($o, $p, '');
     /* === Hook  === */
     foreach (cot_getextplugins('admin.config.edit.reset.done') as $pl) {
         include $pl;
     }
     /* ===== */
     $cache && $cache->clear();
     cot_redirect(cot_url('admin', array('m' => 'config', 'n' => 'edit', 'o' => $o, 'p' => $p), '', true));
 }
 if ($o == 'core') {
     $adminpath[] = array(cot_url('admin', 'm=config'), $L['Configuration']);
     $adminpath[] = array(cot_url('admin', 'm=config&n=edit&o=' . $o . '&p=' . $p), $L['core_' . $p]);
 } else {
     $adminpath[] = array(cot_url('admin', 'm=extensions'), $L['Extensions']);
     $plmod = $o == 'module' ? 'mod' : 'pl';
     $ext_info = cot_get_extensionparams($p, $o == 'module');
/**
 * pagecattree Plugin for Cotonti CMF
 *
 * @version 2.0.0
 * @author esclkm, http://www.littledev.ru
 * @copyright (c) 2008-2011 esclkm, http://www.littledev.ru
 */
defined('COT_CODE') or die('Wrong URL.');
/* @var $cot_structure structure */
/* @var $db CotDB */
/* @var $cache Cache */
/* @var $t Xtemplate */
// Edit structure for a module
$editconfig = cot_import('editconfig', 'P', 'TXT');
if (!empty($editconfig)) {
    $optionslist = cot_config_list($is_module ? 'module' : 'plug', $n, $editconfig);
    foreach ($optionslist as $key => $val) {
        $data = cot_import($key, 'P', sizeof($cot_import_filters[$key]) ? $key : 'NOC');
        if ($optionslist[$key]['config_value'] != $data) {
            if (is_null($optionslist[$key]['config_subdefault'])) {
                $optionslist[$key]['config_value'] = $data;
                $optionslist[$key]['config_subcat'] = $editconfig;
                $db->insert($db_config, $optionslist[$key]);
            } else {
                $db->update($db_config, array('config_value' => $data), "config_name = ? AND config_owner = ?\n\t\t\t\t\tAND config_cat = ?  AND config_subcat = ?)", array($key, $o, $p, $editconfig));
            }
        }
    }
}
$oldrow = $db->query("SELECT * FROM {$db_structure} WHERE structure_id=" . (int) $id)->fetch();
$rstructure['structure_code'] = preg_replace('#[^\\w\\p{L}\\-]#u', '', cot_import('rstructurecode', 'P', 'TXT'));
<?php

/* ====================
[BEGIN_COT_EXT]
Hooks=admin.structure.update.first
[END_COT_EXT]
==================== */
defined('COT_CODE') or die('Wrong URL');
if (!empty($editconfig) && $n == 'usercategories') {
    $optionslist = cot_config_list('plug', $n, $editconfig);
    foreach ($optionslist as $key => $val) {
        $data = cot_import($key, 'P', sizeof($cot_import_filters[$key]) ? $key : 'NOC');
        if ($optionslist[$key]['config_value'] != $data) {
            if (is_null($optionslist[$key]['config_subdefault'])) {
                $optionslist[$key]['config_value'] = $data;
                $optionslist[$key]['config_subcat'] = $editconfig;
                $db->insert($db_config, $optionslist[$key]);
            } else {
                $db->update($db_config, array('config_value' => $data), "config_name = ? AND config_owner = ?\n\t\t\t\tAND config_cat = ?  AND config_subcat = ?)", array($key, $o, $p, $editconfig));
            }
        }
    }
}