home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / phpMyAdmin / libraries / plugin_interface.lib.php < prev    next >
Encoding:
PHP Script  |  2008-06-23  |  14.1 KB  |  371 lines

  1. <?php
  2. /* vim: set expandtab sw=4 ts=4 sts=4: */
  3. /**
  4.  * Generic plugin interface.
  5.  *
  6.  * @version $Id: plugin_interface.lib.php 10241 2007-04-01 11:13:46Z cybot_tm $
  7.  */
  8.  
  9. /**
  10.  * array PMA_getPlugins(string $plugins_dir, mixed $plugin_param)
  11.  *
  12.  * Reads all plugin information from directory $plugins_dir.
  13.  *
  14.  * @uses    ksort()
  15.  * @uses    opendir()
  16.  * @uses    readdir()
  17.  * @uses    is_file()
  18.  * @uses    eregi()
  19.  * @param   string  $plugins_dir    directrory with plugins
  20.  * @param   mixed   $plugin_param   parameter to plugin by which they can decide whether they can work
  21.  * @return  array                   list of plugins
  22.  */
  23. function PMA_getPlugins($plugins_dir, $plugin_param)
  24. {
  25.     /* Scan for plugins */
  26.     $plugin_list = array();
  27.     if ($handle = @opendir($plugins_dir)) {
  28.         $is_first = 0;
  29.         while ($file = @readdir($handle)) {
  30.             if (is_file($plugins_dir . $file) && eregi('\.php$', $file)) {
  31.                 include $plugins_dir . $file;
  32.             }
  33.         }
  34.     }
  35.     ksort($plugin_list);
  36.     return $plugin_list;
  37. }
  38.  
  39. /**
  40.  * string PMA_getString(string $name)
  41.  *
  42.  * returns locale string for $name or $name if no locale is found
  43.  *
  44.  * @uses    $GLOBALS
  45.  * @param   string  $name   for local string
  46.  * @return  string          locale string for $name
  47.  */
  48. function PMA_getString($name)
  49. {
  50.     return isset($GLOBALS[$name]) ? $GLOBALS[$name] : $name;
  51. }
  52.  
  53. /**
  54.  * string PMA_pluginCheckboxCheck(string $section, string $opt)
  55.  *
  56.  * returns html input tag option 'checked' if plugin $opt should be set by config or request
  57.  *
  58.  * @uses    $_REQUEST
  59.  * @uses    $GLOBALS['cfg']
  60.  * @uses    $GLOBALS['timeout_passed']
  61.  * @param   string  $section    name of config section in
  62.  *                              $GLOBALS['cfg'][$section] for plugin
  63.  * @param   string  $opt        name of option
  64.  * @return  string              hmtl input tag option 'checked'
  65.  */
  66. function PMA_pluginCheckboxCheck($section, $opt)
  67. {
  68.     if ((isset($GLOBALS['timeout_passed']) && $GLOBALS['timeout_passed'] && isset($_REQUEST[$opt])) ||
  69.         (isset($GLOBALS['cfg'][$section][$opt]) && $GLOBALS['cfg'][$section][$opt])) {
  70.         return ' checked="checked"';
  71.     }
  72.     return '';
  73. }
  74.  
  75. /**
  76.  * string PMA_pluginGetDefault(string $section, string $opt)
  77.  *
  78.  * returns default value for option $opt
  79.  *
  80.  * @uses    htmlspecialchars()
  81.  * @uses    $_REQUEST
  82.  * @uses    $GLOBALS['cfg']
  83.  * @uses    $GLOBALS['timeout_passed']
  84.  * @param   string  $section    name of config section in
  85.  *                              $GLOBALS['cfg'][$section] for plugin
  86.  * @param   string  $opt        name of option
  87.  * @return  string              default value for option $opt
  88.  */
  89. function PMA_pluginGetDefault($section, $opt)
  90. {
  91.     if (isset($GLOBALS['timeout_passed']) && $GLOBALS['timeout_passed'] && isset($_REQUEST[$opt])) {
  92.         return htmlspecialchars($_REQUEST[$opt]);
  93.     } elseif (isset($GLOBALS['cfg'][$section][$opt])) {
  94.         $matches = array();
  95.         /* Possibly replace localised texts */
  96.         if (preg_match_all('/(str[A-Z][A-Za-z0-9]*)/', $GLOBALS['cfg'][$section][$opt], $matches)) {
  97.             $val = $GLOBALS['cfg'][$section][$opt];
  98.             foreach($matches[0] as $match) {
  99.                 if (isset($GLOBALS[$match])) {
  100.                     $val = str_replace($match, $GLOBALS[$match], $val);
  101.                 }
  102.             }
  103.             return htmlspecialchars($val);
  104.         } else {
  105.             return htmlspecialchars($GLOBALS['cfg'][$section][$opt]);
  106.         }
  107.     }
  108.     return '';
  109. }
  110.  
  111. /**
  112.  * string PMA_pluginIsActive(string $section, string $opt, string $val)
  113.  *
  114.  * returns html input tag option 'checked' if option $opt should be set by config or request
  115.  *
  116.  * @uses    $_REQUEST
  117.  * @uses    $GLOBALS['cfg']
  118.  * @uses    $GLOBALS['timeout_passed']
  119.  * @param   string  $section    name of config section in
  120.  *                              $GLOBALS['cfg'][$section] for plugin
  121.  * @param   string  $opt        name of option
  122.  * @param   string  $val        value of option to check against
  123.  * @return  string              html input tag option 'checked'
  124.  */
  125. function PMA_pluginIsActive($section, $opt, $val)
  126. {
  127.     if (! empty($GLOBALS['timeout_passed']) && isset($_REQUEST[$opt])) {
  128.         if ($_REQUEST[$opt] == $val) {
  129.             return ' checked="checked"';
  130.         }
  131.     } elseif (isset($GLOBALS['cfg'][$section][$opt]) &&  $GLOBALS['cfg'][$section][$opt] == $val) {
  132.         return ' checked="checked"';
  133.     }
  134.     return '';
  135. }
  136.  
  137. /**
  138.  * string PMA_pluginGetChoice(string $section, string $name, array &$list, string $cfgname)
  139.  *
  140.  * returns html radio form element for plugin choice
  141.  *
  142.  * @uses    PMA_pluginIsActive()
  143.  * @uses    PMA_getString()
  144.  * @param   string  $section    name of config section in
  145.  *                              $GLOBALS['cfg'][$section] for plugin
  146.  * @param   string  $name       name of radio element
  147.  * @param   array   &$list      array with plugin configuration defined in plugin file
  148.  * @param   string  $cfgname    name of config value, if none same as $name
  149.  * @return  string              html input radio tag
  150.  */
  151. function PMA_pluginGetChoice($section, $name, &$list, $cfgname = NULL)
  152. {
  153.     if (!isset($cfgname)) {
  154.         $cfgname = $name;
  155.     }
  156.     $ret = '';
  157.     foreach ($list as $plugin_name => $val) {
  158.         $ret .= '<!-- ' . $plugin_name . ' -->' . "\n";
  159.         $ret .= '<input type="radio" name="' . $name . '" value="' . $plugin_name . '"'
  160.             . ' id="radio_plugin_' . $plugin_name . '"'
  161.             . ' onclick="if(this.checked) { hide_them_all();';
  162.         if (isset($val['force_file'])) {
  163.             $ret .= 'document.getElementById(\'checkbox_dump_asfile\').checked = true;';
  164.         }
  165.         $ret .= ' document.getElementById(\'' . $plugin_name . '_options\').style.display = \'block\'; };'
  166.                 .' return true"'
  167.             . PMA_pluginIsActive($section, $cfgname, $plugin_name) . '/>' . "\n";
  168.         $ret .= '<label for="radio_plugin_' . $plugin_name . '">'
  169.             . PMA_getString($val['text']) . '</label>' . "\n";
  170.         $ret .= '<br /><br />' . "\n";
  171.     }
  172.     return $ret;
  173. }
  174.  
  175. /**
  176.  * string PMA_pluginGetOneOption(string $section, string $plugin_name, string $id, array &$opt)
  177.  *
  178.  * returns single option in a table row
  179.  *
  180.  * @uses    PMA_getString()
  181.  * @uses    PMA_pluginCheckboxCheck()
  182.  * @uses    PMA_pluginGetDefault()
  183.  * @param   string  $section        name of config section in
  184.  *                                  $GLOBALS['cfg'][$section] for plugin
  185.  * @param   string  $plugin_name    unique plugin name
  186.  * @param   string  $id             option id
  187.  * @param   array   &$opt           plugin option details
  188.  * @return  string                  table row with option
  189.  */
  190. function PMA_pluginGetOneOption($section, $plugin_name, $id, &$opt)
  191. {
  192.     $ret = "\n";
  193.     if ($opt['type'] == 'bool') {
  194.         $ret .= '<div class="formelementrow">' . "\n";
  195.         $ret .= '<input type="checkbox" name="' . $plugin_name . '_' . $opt['name'] . '"'
  196.             . ' value="something" id="checkbox_' . $plugin_name . '_' . $opt['name'] . '"'
  197.             . ' ' . PMA_pluginCheckboxCheck($section, $plugin_name . '_' . $opt['name']);
  198.         if (isset($opt['force'])) {
  199.             /* Same code is also few lines lower, update both if needed */
  200.             $ret .= ' onclick="if (!this.checked && '
  201.                 . '(!document.getElementById(\'checkbox_' . $plugin_name . '_' .$opt['force'] . '\') '
  202.                 . '|| !document.getElementById(\'checkbox_' . $plugin_name . '_' .$opt['force'] . '\').checked)) '
  203.                 . 'return false; else return true;"';
  204.         }
  205.         $ret .= ' />';
  206.         $ret .= '<label for="checkbox_' . $plugin_name . '_' . $opt['name'] . '">'
  207.             . PMA_getString($opt['text']) . '</label>';
  208.         $ret .= '</div>' . "\n";
  209.     } elseif ($opt['type'] == 'text') {
  210.         $ret .= '<div class="formelementrow">' . "\n";
  211.         $ret .= '<label for="text_' . $plugin_name . '_' . $opt['name'] . '" class="desc">'
  212.             . PMA_getString($opt['text']) . '</label>';
  213.         $ret .= '<input type="text" name="' . $plugin_name . '_' . $opt['name'] . '"'
  214.             . ' value="' . PMA_pluginGetDefault($section, $plugin_name . '_' . $opt['name']) . '"'
  215.             . ' id="text_' . $plugin_name . '_' . $opt['name'] . '"'
  216.             . (isset($opt['size']) ? ' size="' . $opt['size'] . '"' : '')
  217.             . (isset($opt['len']) ? ' maxlength="' . $opt['len'] . '"' : '') . ' />';
  218.         $ret .= '</div>' . "\n";
  219.     } elseif ($opt['type'] == 'message_only') {
  220.         $ret .= '<div class="formelementrow">' . "\n";
  221.         $ret .= '<label for="text_' . $plugin_name . '_' . $opt['name'] . '" class="desc">'
  222.             . PMA_getString($opt['text']) . '</label>';
  223.         $ret .= '</div>' . "\n";
  224.     } elseif ($opt['type'] == 'select') {
  225.         $ret .= '<div class="formelementrow">' . "\n";
  226.         $ret .= '<label for="select_' . $plugin_name . '_' . $opt['name'] . '" class="desc">'
  227.             . PMA_getString($opt['text']) . '</label>';
  228.         $ret .= '<select name="' . $plugin_name . '_' . $opt['name'] . '"'
  229.             . ' id="select_' . $plugin_name . '_' . $opt['name'] . '">';
  230.         $default = PMA_pluginGetDefault($section, $plugin_name . '_' . $opt['name']);
  231.         foreach($opt['values'] as $key => $val) {
  232.             $ret .= '<option name="' . $key . '"';
  233.             if ($key == $default) {
  234.                 $ret .= ' selected="selected"';
  235.             }
  236.             $ret .= '>' . PMA_getString($val) . '</option>';
  237.         }
  238.         $ret .= '</select>';
  239.         $ret .= '</div>' . "\n";
  240.     } elseif ($opt['type'] == 'hidden') {
  241.         $ret .= '<input type="hidden" name="' . $plugin_name . '_' . $opt['name'] . '"'
  242.             . ' value="' . PMA_pluginGetDefault($section, $plugin_name . '_' . $opt['name']) . '"' . ' />';
  243.     } elseif ($opt['type'] == 'bgroup') {
  244.         $ret .= '<fieldset><legend>';
  245.         /* No checkbox without name */
  246.         if (!empty($opt['name'])) {
  247.             $ret .= '<input type="checkbox" name="' . $plugin_name . '_' . $opt['name'] . '"'
  248.                 . ' value="something" id="checkbox_' . $plugin_name . '_' . $opt['name'] . '"'
  249.                 . ' ' . PMA_pluginCheckboxCheck($section, $plugin_name . '_' . $opt['name']);
  250.             if (isset($opt['force'])) {
  251.                 /* Same code is also few lines higher, update both if needed */
  252.                 $ret .= ' onclick="if (!this.checked && '
  253.                     . '(!document.getElementById(\'checkbox_' . $plugin_name . '_' .$opt['force'] . '\') '
  254.                     . '|| !document.getElementById(\'checkbox_' . $plugin_name . '_' .$opt['force'] . '\').checked)) '
  255.                     . 'return false; else return true;"';
  256.             }
  257.             $ret .= ' />';
  258.             $ret .= '<label for="checkbox_' . $plugin_name . '_' . $opt['name'] . '">'
  259.                 . PMA_getString($opt['text']) . '</label>';
  260.         } else {
  261.             $ret .= PMA_getString($opt['text']);
  262.         }
  263.         $ret .= '</legend>';
  264.     } elseif ($opt['type'] == 'egroup') {
  265.         $ret .= '</fieldset>';
  266.     } else {
  267.         /* This should be seen only by plugin writers, so I do not thing this
  268.          * needs translation. */
  269.         $ret .= 'UNKNOWN OPTION ' . $opt['type'] . ' IN IMPORT PLUGIN ' . $plugin_name . '!';
  270.     }
  271.     if (isset($opt['doc'])) {
  272.         $ret .= PMA_showMySQLDocu($opt['doc'][0], $opt['doc'][1]);
  273.     }
  274.     $ret .= "\n";
  275.     return $ret;
  276. }
  277.  
  278. /**
  279.  * string PMA_pluginGetOptions(string $section, array &$list)
  280.  *
  281.  * return html fieldset with editable options for plugin
  282.  *
  283.  * @uses    PMA_getString()
  284.  * @uses    PMA_pluginGetOneOption()
  285.  * @param   string  $section    name of config section in $GLOBALS['cfg'][$section]
  286.  * @param   array   &$list      array with plugin configuration defined in plugin file
  287.  * @return  string              html fieldset with plugin options
  288.  */
  289. function PMA_pluginGetOptions($section, &$list)
  290. {
  291.     $ret = '';
  292.     // Options for plugins that support them
  293.     foreach ($list as $plugin_name => $val) {
  294.         $ret .= '<fieldset id="' . $plugin_name . '_options" class="options">';
  295.         $ret .= '<legend>' . PMA_getString($val['options_text']) . '</legend>';
  296.         $count = 0;
  297.         if (isset($val['options']) && count($val['options']) > 0) {
  298.             foreach ($val['options'] as $id => $opt) {
  299.                 if ($opt['type'] != 'hidden') $count++;
  300.                 $ret .= PMA_pluginGetOneOption($section, $plugin_name, $id, $opt);
  301.             }
  302.         }
  303.         if ($count == 0) {
  304.             $ret .= $GLOBALS['strNoOptions'];
  305.         }
  306.         $ret .= '</fieldset>';
  307.     }
  308.     return $ret;
  309. }
  310.  
  311. /**
  312.  * string PMA_pluginGetJavascript(array &$list)
  313.  *
  314.  * return html/javascript code which is needed for handling plugin stuff
  315.  *
  316.  * @param   array   &$list      array with plugin configuration defined in plugin file
  317.  * @return  string              html fieldset with plugin options
  318.  */
  319. function PMA_pluginGetJavascript(&$list) {
  320.     $ret = '
  321.     <script type="text/javascript">
  322.     //<![CDATA[
  323.     function hide_them_all() {
  324.         ';
  325.     foreach ($list as $plugin_name => $val) {
  326.         $ret .= 'document.getElementById("' . $plugin_name . '_options").style.display = "none";' . "\n";
  327.     }
  328.     $ret .= '
  329.     }
  330.  
  331.     function init_options() {
  332.         hide_them_all();
  333.         ';
  334.     foreach ($list as $plugin_name => $val) {
  335.         $ret .= 'if (document.getElementById("radio_plugin_' . $plugin_name . '").checked) {' . "\n";
  336.         if (isset($val['force_file'])) {
  337.             $ret .= 'document.getElementById(\'checkbox_dump_asfile\').checked = true;' . "\n";
  338.         }
  339.         $ret .= 'document.getElementById("' . $plugin_name . '_options").style.display = "block";' . "\n";
  340.         $ret .= ' } else ' . "\n";
  341.     }
  342.     $ret .= '
  343.         {
  344.             ;
  345.         }
  346.     }
  347.  
  348.     function match_file(fname) {
  349.         farr = fname.toLowerCase().split(".");
  350.         if (farr.length != 0) {
  351.             len = farr.length
  352.             if (farr[len - 1] == "gz" || farr[len - 1] == "bz2" || farr[len -1] == "zip") len--;
  353.             switch (farr[len - 1]) {
  354.                 ';
  355.     foreach ($list as $plugin_name => $val) {
  356.         $ret .= 'case "' . $val['extension'] . '" :';
  357.         $ret .= 'document.getElementById("radio_plugin_' . $plugin_name . '").checked = true;';
  358.         $ret .= 'init_options();';
  359.         $ret .= 'break;' . "\n";
  360.     }
  361.     $ret .='
  362.             }
  363.         }
  364.     }
  365.     //]]>
  366.     </script>
  367.     ';
  368.     return $ret;
  369. }
  370. ?>
  371.