function _UI_get_conf_element($group, $name, $display_name, $type, $val, $selectionArray = null, $deletable = false, $allow_reset = false) { global $_CONF, $LANG_CONFIG; $t = new Template($GLOBALS['_CONF']['path_layout'] . 'admin/config'); $t->set_file('element', 'config_element.thtml'); $blocks = array('delete-button', 'text-element', 'passwd-element', 'placeholder-element', 'select-element', 'list-element', 'unset-param', 'keyed-add-button', 'unkeyed-add-button', 'text-area'); if (is_array($blocks)) { foreach ($blocks as $block) { $t->set_block('element', $block); } } $t->set_var('lang_restore', $LANG_CONFIG['restore']); $t->set_var('lang_enable', $LANG_CONFIG['enable']); $t->set_var('lang_add_element', $LANG_CONFIG['add_element']); $t->set_var('name', $name); $t->set_var('display_name', $display_name); if (!is_array($val)) { if (is_float($val)) { /** * @todo FIXME: for Locales where the comma is the decimal * separator, patch output to a decimal point * to prevent it being cut off by COM_applyFilter */ $t->set_var('value', str_replace(',', '.', $val)); } else { $t->set_var('value', htmlspecialchars($val)); } } if ($deletable) { $t->set_var('delete', $t->parse('output', 'delete-button')); } else { if ($allow_reset) { $t->set_var('unset_link', "(<a href='#' onclick='unset(\"{$name}\");return false;' title='" . $LANG_CONFIG['disable'] . "'>X</a>)"); } if (($a = strrchr($name, '[')) !== FALSE) { $o = str_replace(array('[', ']'), array('_', ''), $name); } else { $o = $name; } $helpUrl = $this->_get_ConfigHelp($group, $o); if (!empty($helpUrl)) { $t->set_var('doc_link', $helpUrl); } else { $t->set_var('doc_link', ''); } $docUrl = $this->_getConfigHelpDocument($group, $o); if ($docUrl != '') { $t->set_var('cfg_item', $o); } else { $t->unset_var('cfg_item'); } } if ($type == "unset") { return $t->finish($t->parse('output', 'unset-param')); } elseif ($type == "text") { return $t->finish($t->parse('output', 'text-element')); } elseif ($type == "textarea") { return $t->finish($t->parse('output', 'text-area')); } elseif ($type == "passwd") { return $t->finish($t->parse('output', 'passwd-element')); } elseif ($type == "placeholder") { return $t->finish($t->parse('output', 'placeholder-element')); } elseif ($type == 'select') { // if $name is like "blah[0]", separate name and index $n = explode('[', $name); $name = $n[0]; $index = null; if (count($n) == 2) { $i = explode(']', $n[1]); $index = $i[0]; } $type_name = $type . '_' . $name; if ($group == 'Core') { $fn = 'configmanager_' . $type_name . '_helper'; } else { $fn = 'plugin_configmanager_' . $type_name . '_' . $group; } if (function_exists($fn)) { if ($index === null) { $selectionArray = $fn(); } else { $selectionArray = $fn($index); } } else { if (is_array($selectionArray)) { // leave sorting to the function otherwise uksort($selectionArray, 'strcasecmp'); } } if (!is_array($selectionArray)) { return $t->finish($t->parse('output', 'text-element')); } $t->set_block('select-element', 'select-options', 'myoptions'); if (is_array($selectionArray)) { foreach ($selectionArray as $sName => $sVal) { if (is_bool($sVal)) { $t->set_var('opt_value', $sVal ? 'b:1' : 'b:0'); } else { $t->set_var('opt_value', $sVal); } $t->set_var('opt_name', $sName); $t->set_var('selected', $val == $sVal ? 'selected="selected"' : ''); $t->parse('myoptions', 'select-options', true); } if ($index == 'placeholder') { $t->set_var('hide_row', ' style="display:none;"'); } } return $t->parse('output', 'select-element'); } elseif (strpos($type, "@") === 0) { $result = ""; if (is_array($val)) { foreach ($val as $valkey => $valval) { $result .= config::_UI_get_conf_element($group, $name . '[' . $valkey . ']', $display_name . '[' . $valkey . ']', substr($type, 1), $valval, $selectionArray, false); } } return $result; } elseif (strpos($type, "*") === 0 || strpos($type, "%") === 0) { $t->set_var('arr_name', $name); $t->set_var('array_type', $type); $button = $t->parse('output', strpos($type, "*") === 0 ? 'keyed-add-button' : 'unkeyed-add-button'); $t->set_var('my_add_element_button', $button); $result = ""; if (is_array($val)) { if ($type == '%select') { $result .= config::_UI_get_conf_element($group, $name . '[placeholder]', 'placeholder', substr($type, 1), 'placeholder', $selectionArray, true); } foreach ($val as $valkey => $valval) { $result .= config::_UI_get_conf_element($group, $name . '[' . $valkey . ']', $valkey, substr($type, 1), $valval, $selectionArray, true); } } $t->set_var('my_elements', $result); return $t->parse('output', 'list-element'); } }
/** * Get a parsed config element based on group $group, name $name, * type $type, value to be shown $val and label $display_name to be shown * on the left based on language. * * @param string $group Configuration group. * @param string $name Configuration name on table. * @param string $display_name Configuration display name based on language. * @param string $type Configuration type such as select, text, textarea, @select, etc. * @param string $val Value of configuration * @param mixed $selectionArray Array of option of select element * @param bool $deleteable If configuration is deleteable * @param bool $allow_reset Allow set and unset of configuration * @return */ function _UI_get_conf_element($group, $name, $display_name, $type, $val, $selectionArray = null, $deletable = false, $allow_reset = false) { global $_CONF, $LANG_CONFIG; $t = COM_newTemplate($GLOBALS['_CONF']['path_layout'] . 'admin/config'); $t->set_file('element', 'config_element.thtml'); $blocks = array('delete-button', 'text-element', 'placeholder-element', 'select-element', 'list-element', 'unset-param', 'keyed-add-button', 'unkeyed-add-button', 'text-area', 'validation_error_block'); foreach ($blocks as $block) { $t->set_block('element', $block); } $t->set_var('lang_restore', $LANG_CONFIG['restore']); $t->set_var('lang_enable', $LANG_CONFIG['enable']); $t->set_var('lang_add_element', $LANG_CONFIG['add_element']); $t->set_var('name', $name); $t->set_var('id_name', str_replace(array('[', ']'), array('_', ''), $name)); $t->set_var('display_name', $display_name); // check tmp values if (isset($this->tmpValues[$group][$name])) { $val = $this->tmpValues[$group][$name]; } if (!is_array($val)) { if (is_float($val)) { /** * @todo FIXME: for Locales where the comma is the decimal * separator, patch output to a decimal point * to prevent it being cut off by COM_applyFilter */ $t->set_var('value', str_replace(',', '.', $val)); } else { $t->set_var('value', htmlspecialchars($val)); } } // if there is a error message to shown if (isset($this->validationErrors[$group][$name])) { $t->set_var('validation_error_message', $this->validationErrors[$group][$name]); $t->set_var('error_block', $t->parse('output', 'validation_error_block')); $t->set_var('error_class', ' input_error'); $t->set_var('value', $this->validationErrorValues[$group][$name]); } else { $t->set_var('error_class', ''); $t->set_var('error_block', ''); } if ($deletable) { $t->set_var('delete', $t->parse('output', 'delete-button')); } else { if ($allow_reset) { $t->set_var('unset_link', "(<a href=\"#{$name}\" class=\"unset_param\" title='" . $LANG_CONFIG['disable'] . "'>X</a>)"); } if (($a = strrchr($name, '[')) !== FALSE) { $on = substr($a, 1, -1); $o = str_replace(array('[', ']'), array('_', ''), $name); } else { $o = $name; $on = $name; } if (!is_numeric($on)) { $this->_set_ConfigHelp($t, $group, $o); } } if ($type == "unset") { return $t->finish($t->parse('output', 'unset-param')); } elseif ($type == "text") { return $t->finish($t->parse('output', 'text-element')); } elseif ($type == "textarea") { return $t->finish($t->parse('output', 'text-area')); } elseif ($type == "placeholder") { return $t->finish($t->parse('output', 'placeholder-element')); } elseif ($type == 'select') { // if $name is like "blah[0]", separate name and index $n = explode('[', $name); $name = $n[0]; $index = null; if (count($n) == 2) { $i = explode(']', $n[1]); $index = $i[0]; } $type_name = $type . '_' . $name; if ($group == 'Core') { $fn = 'configmanager_' . $type_name . '_helper'; } else { $fn = 'plugin_configmanager_' . $type_name . '_' . $group; } if (function_exists($fn)) { if ($index === null) { $selectionArray = $fn(); } else { $selectionArray = $fn($index); } } else { if (is_array($selectionArray)) { // leave sorting to the function otherwise uksort($selectionArray, 'strcasecmp'); } } if (!is_array($selectionArray)) { return $t->finish($t->parse('output', 'text-element')); } $t->set_block('select-element', 'select-options', 'myoptions'); foreach ($selectionArray as $sName => $sVal) { if (is_bool($sVal)) { $t->set_var('opt_value', $sVal ? 'b:1' : 'b:0'); } else { $t->set_var('opt_value', $sVal); } $t->set_var('opt_name', $sName); $t->set_var('selected', $val == $sVal ? 'selected="selected"' : ''); $t->parse('myoptions', 'select-options', true); } if ($index == 'placeholder') { $t->set_var('hide_row', ' style="display:none;"'); } return $t->parse('output', 'select-element'); } elseif (strpos($type, '@') === 0) { $result = ''; foreach ($val as $valkey => $valval) { $result .= config::_UI_get_conf_element($group, $name . '[' . $valkey . ']', $display_name . '[' . $valkey . ']', substr($type, 1), $valval, $selectionArray, false); } return $result; } elseif (strpos($type, "*") === 0 || strpos($type, "%") === 0) { $t->set_var('arr_name', $name); $t->set_var('array_type', $type); $button = $t->parse('output', strpos($type, "*") === 0 ? 'keyed-add-button' : 'unkeyed-add-button'); $t->set_var('my_add_element_button', $button); $result = ""; if ($type == '%select') { $result .= config::_UI_get_conf_element($group, $name . '[placeholder]', 'placeholder', substr($type, 1), 'placeholder', $selectionArray, true); } foreach ($val as $valkey => $valval) { $result .= config::_UI_get_conf_element($group, $name . '[' . $valkey . ']', $valkey, substr($type, 1), $valval, $selectionArray, true); } $t->set_var('my_elements', $result); // if the values are indexed numerically, add a class to the table // for identification. The UI code can take advantage of it if ($val === array_values($val)) { $t->set_var('arr_table_class_list', 'numerical_config_list'); } return $t->parse('output', 'list-element'); } }
function _UI_get_conf_element($group, $name, $display_name, $type, $val, $selectionArray = null, $deletable = false, $allow_reset = false) { global $_CONF, $LANG_CONFIG; $t = new Template($GLOBALS['_CONF']['path_layout'] . 'admin/config'); $t->set_file('element', 'config_element.thtml'); $blocks = array('delete-button', 'text-element', 'placeholder-element', 'select-element', 'list-element', 'unset-param', 'keyed-add-button', 'unkeyed-add-button'); foreach ($blocks as $block) { $t->set_block('element', $block); } $t->set_var('site_url', $_CONF['site_url']); $t->set_var('site_admin_url', $_CONF['site_admin_url']); $t->set_var('layout_url', $_CONF['layout_url']); $t->set_var('xhtml', XHTML); $t->set_var('lang_restore', $LANG_CONFIG['restore']); $t->set_var('lang_enable', $LANG_CONFIG['enable']); $t->set_var('lang_add_element', $LANG_CONFIG['add_element']); $t->set_var('name', $name); $t->set_var('display_name', $display_name); if (!is_array($val)) { $t->set_var('value', htmlspecialchars($val)); } if ($deletable) { $t->set_var('delete', $t->parse('output', 'delete-button')); } else { if ($allow_reset) { $t->set_var('unset_link', "(<a href='#' onClick='unset(\"{$name}\");' title='" . $LANG_CONFIG['disable'] . "'>X</a>)"); } if (($a = strrchr($name, '[')) !== FALSE) { $on = substr($a, 1, -1); $o = str_replace(array('[', ']'), array('_', ''), $name); } else { $o = $name; $on = $name; } if (!is_numeric($on)) { $descUrl = $this->_get_ConfigHelp($group, $o); if (!empty($descUrl)) { $t->set_var('doc_url', $descUrl); $t->set_var('doc_link', '(<a href="' . $descUrl . '" target="help">?</a>)'); } } } if ($type == "unset") { return $t->finish($t->parse('output', 'unset-param')); } elseif ($type == "text") { return $t->finish($t->parse('output', 'text-element')); } elseif ($type == "placeholder") { return $t->finish($t->parse('output', 'placeholder-element')); } elseif ($type == 'select') { $type_name = $type . '_' . $name; if ($group == 'Core') { $fn = 'configmanager_' . $type_name . '_helper'; } else { $fn = 'plugin_configmanager_' . $type_name . '_' . $group; } if (function_exists($fn)) { $selectionArray = $fn(); } else { if (is_array($selectionArray)) { // leave sorting to the function otherwise uksort($selectionArray, 'strcasecmp'); } } if (!is_array($selectionArray)) { return $t->finish($t->parse('output', 'text-element')); } $t->set_block('select-element', 'select-options', 'myoptions'); foreach ($selectionArray as $sName => $sVal) { if (is_bool($sVal)) { $t->set_var('opt_value', $sVal ? 'b:1' : 'b:0'); } else { $t->set_var('opt_value', $sVal); } $t->set_var('opt_name', $sName); $t->set_var('selected', $val == $sVal ? 'selected="selected"' : ''); $t->parse('myoptions', 'select-options', true); } return $t->parse('output', 'select-element'); } elseif (strpos($type, '@') === 0) { $result = ''; foreach ($val as $valkey => $valval) { $result .= config::_UI_get_conf_element($group, $name . '[' . $valkey . ']', $display_name . '[' . $valkey . ']', substr($type, 1), $valval, $selectionArray, false); } return $result; } elseif (strpos($type, "*") === 0 || strpos($type, "%") === 0) { $t->set_var('arr_name', $name); $t->set_var('array_type', $type); $button = $t->parse('output', strpos($type, "*") === 0 ? 'keyed-add-button' : 'unkeyed-add-button'); $t->set_var('my_add_element_button', $button); $result = ""; foreach ($val as $valkey => $valval) { $result .= config::_UI_get_conf_element($group, $name . '[' . $valkey . ']', $valkey, substr($type, 1), $valval, $selectionArray, true); } $t->set_var('my_elements', $result); return $t->parse('output', 'list-element'); } }