getProperties()) { $plugin_list[] = $plugin; } } } } usort($plugin_list, function($cmp_name_1, $cmp_name_2) { return strcasecmp( $cmp_name_1->getProperties()->getText(), $cmp_name_2->getProperties()->getText() ); }); return $plugin_list; } /** * Returns locale string for $name or $name if no locale is found * * @param string $name for local string * * @return string locale string for $name */ public static function getString($name) { return isset($GLOBALS[$name]) ? $GLOBALS[$name] : $name; } /** * Returns html input tag option 'checked' if plugin $opt * should be set by config or request * * @param string $section name of config section in * $GLOBALS['cfg'][$section] for plugin * @param string $opt name of option * * @return string html input tag option 'checked' */ public static function checkboxCheck($section, $opt) { // If the form is being repopulated using $_GET data, that is priority if (isset($_GET[$opt]) || ! isset($_GET['repopulate']) && ((! empty($GLOBALS['timeout_passed']) && isset($_REQUEST[$opt])) || ! empty($GLOBALS['cfg'][$section][$opt])) ) { return ' checked="checked"'; } return ''; } /** * Returns default value for option $opt * * @param string $section name of config section in * $GLOBALS['cfg'][$section] for plugin * @param string $opt name of option * * @return string default value for option $opt */ public static function getDefault($section, $opt) { if (isset($_GET[$opt])) { // If the form is being repopulated using $_GET data, that is priority return htmlspecialchars($_GET[$opt]); } if (isset($GLOBALS['timeout_passed']) && $GLOBALS['timeout_passed'] && isset($_REQUEST[$opt]) ) { return htmlspecialchars($_REQUEST[$opt]); } if (!isset($GLOBALS['cfg'][$section][$opt])) { return ''; } $matches = array(); /* Possibly replace localised texts */ if (!preg_match_all( '/(str[A-Z][A-Za-z0-9]*)/', $GLOBALS['cfg'][$section][$opt], $matches )) { return htmlspecialchars($GLOBALS['cfg'][$section][$opt]); } $val = $GLOBALS['cfg'][$section][$opt]; foreach ($matches[0] as $match) { if (isset($GLOBALS[$match])) { $val = str_replace($match, $GLOBALS[$match], $val); } } return htmlspecialchars($val); } /** * Returns html select form element for plugin choice * and hidden fields denoting whether each plugin must be exported as a file * * @param string $section name of config section in * $GLOBALS['cfg'][$section] for plugin * @param string $name name of select element * @param array &$list array with plugin instances * @param string $cfgname name of config value, if none same as $name * * @return string html select tag */ public static function getChoice($section, $name, array $list, $cfgname = null) { if (! isset($cfgname)) { $cfgname = $name; } $ret = '' . "\n"; } $ret .= '' . "\n" . $hidden; return $ret; } /** * Returns single option in a list element * * @param string $section name of config section in $GLOBALS['cfg'][$section] for plugin * @param string $plugin_name unique plugin name * @param array|\PhpMyAdmin\Properties\PropertyItem &$propertyGroup options property main group instance * @param boolean $is_subgroup if this group is a subgroup * * @return string table row with option */ public static function getOneOption( $section, $plugin_name, &$propertyGroup, $is_subgroup = false ) { $ret = "\n"; if (! $is_subgroup) { // for subgroup headers if (mb_strpos(get_class($propertyGroup), "PropertyItem")) { $properties = array($propertyGroup); } else { // for main groups $ret .= '
'; if (method_exists($propertyGroup, 'getText')) { $text = $propertyGroup->getText(); } if ($text != null) { $ret .= '

' . self::getString($text) . '

'; } $ret .= ''; } else { // end main group if (! empty($not_subgroup_header)) { $ret .= '
'; } } if (method_exists($propertyGroup, "getDoc")) { $doc = $propertyGroup->getDoc(); if ($doc != null) { if (count($doc) == 3) { $ret .= PhpMyAdmin\Util::showMySQLDocu( $doc[1], false, $doc[2] ); } elseif (count($doc) == 1) { $ret .= PhpMyAdmin\Util::showDocu('faq', $doc[0]); } else { $ret .= PhpMyAdmin\Util::showMySQLDocu( $doc[1] ); } } } // Close the list element after $doc link is displayed if (isset($property_class)) { if ($property_class == 'PhpMyAdmin\Properties\Options\Items\BoolPropertyItem' || $property_class == 'PhpMyAdmin\Properties\Options\Items\MessageOnlyPropertyItem' || $property_class == 'PhpMyAdmin\Properties\Options\Items\SelectPropertyItem' || $property_class == 'PhpMyAdmin\Properties\Options\Items\TextPropertyItem' ) { $ret .= ''; } } $ret .= "\n"; return $ret; } /** * Get HTML for properties items * * @param string $section name of config section in * $GLOBALS['cfg'][$section] for plugin * @param string $plugin_name unique plugin name * @param OptionsPropertyItem $propertyItem Property item * * @return string */ public static function getHtmlForProperty( $section, $plugin_name, $propertyItem ) { $ret = null; $property_class = get_class($propertyItem); switch ($property_class) { case 'PhpMyAdmin\Properties\Options\Items\BoolPropertyItem': $ret .= '
  • ' . "\n"; $ret .= 'getName() ); if ($propertyItem->getForce() != null) { // Same code is also few lines lower, update both if needed $ret .= ' onclick="if (!this.checked && ' . '(!document.getElementById(\'checkbox_' . $plugin_name . '_' . $propertyItem->getForce() . '\') ' . '|| !document.getElementById(\'checkbox_' . $plugin_name . '_' . $propertyItem->getForce() . '\').checked)) ' . 'return false; else return true;"'; } $ret .= ' />'; $ret .= ''; break; case 'PhpMyAdmin\Properties\Options\Items\DocPropertyItem': echo 'PhpMyAdmin\Properties\Options\Items\DocPropertyItem'; break; case 'PhpMyAdmin\Properties\Options\Items\HiddenPropertyItem': $ret .= '
  • '; break; case 'PhpMyAdmin\Properties\Options\Items\MessageOnlyPropertyItem': $ret .= '
  • ' . "\n"; $ret .= '

    ' . self::getString($propertyItem->getText()) . '

    '; break; case 'PhpMyAdmin\Properties\Options\Items\RadioPropertyItem': $default = self::getDefault( $section, $plugin_name . '_' . $propertyItem->getName() ); foreach ($propertyItem->getValues() as $key => $val) { $ret .= '
  • ' . self::getString($val) . '
  • '; } break; case 'PhpMyAdmin\Properties\Options\Items\SelectPropertyItem': $ret .= '
  • ' . "\n"; $ret .= ''; $ret .= ''; break; case 'PhpMyAdmin\Properties\Options\Items\TextPropertyItem': case 'PhpMyAdmin\Properties\Options\Items\NumberPropertyItem': $ret .= '
  • ' . "\n"; $ret .= ''; $ret .= 'getSize() != null ? ' size="' . $propertyItem->getSize() . '"' : '') . ($propertyItem->getLen() != null ? ' maxlength="' . $propertyItem->getLen() . '"' : '') . ' />'; break; default: break; } return $ret; } /** * Returns html div with editable options for plugin * * @param string $section name of config section in $GLOBALS['cfg'][$section] * @param array &$list array with plugin instances * * @return string html fieldset with plugin options */ public static function getOptions($section, array $list) { $ret = ''; // Options for plugins that support them foreach ($list as $plugin) { $properties = $plugin->getProperties(); if ($properties != null) { $text = $properties->getText(); $options = $properties->getOptions(); } $elem = explode('\\', get_class($plugin)); $plugin_name = array_pop($elem); unset($elem); $plugin_name = mb_strtolower( mb_substr( $plugin_name, mb_strlen($section) ) ); $ret .= '
    '; $ret .= '

    ' . self::getString($text) . '

    '; $no_options = true; if (! is_null($options) && count($options) > 0) { foreach ($options->getProperties() as $propertyMainGroup ) { // check for hidden properties $no_options = true; foreach ($propertyMainGroup->getProperties() as $propertyItem) { if (strcmp('PhpMyAdmin\Properties\Options\Items\HiddenPropertyItem', get_class($propertyItem))) { $no_options = false; break; } } $ret .= self::getOneOption( $section, $plugin_name, $propertyMainGroup ); } } if ($no_options) { $ret .= '

    ' . __('This format has no options') . '

    '; } $ret .= '
    '; } return $ret; } }