page_settings.class.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. <?php
  2. /* vim: set expandtab sw=4 ts=4 sts=4: */
  3. /**
  4. * Page-related settings
  5. *
  6. * @package PhpMyAdmin
  7. */
  8. require_once 'libraries/user_preferences.lib.php';
  9. require_once 'libraries/config/config_functions.lib.php';
  10. require_once 'libraries/config/messages.inc.php';
  11. require_once 'libraries/config/ConfigFile.class.php';
  12. require_once 'libraries/config/Form.class.php';
  13. require_once 'libraries/config/FormDisplay.class.php';
  14. require 'libraries/config/user_preferences.forms.php';
  15. require 'libraries/config/page_settings.forms.php';
  16. /**
  17. * Page-related settings
  18. *
  19. * @package PhpMyAdmin
  20. */
  21. class PMA_PageSettings
  22. {
  23. /**
  24. * Contains id of the form element
  25. * @var string
  26. */
  27. private $_elemId = 'page_settings_modal';
  28. /**
  29. * Name of the group to show
  30. * @var string
  31. */
  32. private $_groupName = '';
  33. /**
  34. * Contains HTML of errors
  35. * @var string
  36. */
  37. private $_errorHTML = '';
  38. /**
  39. * Contains HTML of settings
  40. * @var string
  41. */
  42. private $_HTML = '';
  43. /**
  44. * Constructor
  45. *
  46. * @param string $formGroupName The name of config form group to display
  47. * @param string $elemId Id of the div containing settings
  48. */
  49. public function __construct($formGroupName, $elemId = null)
  50. {
  51. global $forms;
  52. if (empty($forms[$formGroupName])) {
  53. return;
  54. }
  55. if (isset($_REQUEST['printview']) && $_REQUEST['printview'] == '1') {
  56. return;
  57. }
  58. if (!empty($elemId)) {
  59. $this->_elemId = $elemId;
  60. }
  61. $this->_groupName = $formGroupName;
  62. $cf = new ConfigFile($GLOBALS['PMA_Config']->base_settings);
  63. PMA_userprefsPageInit($cf);
  64. $form_display = new FormDisplay($cf);
  65. foreach ($forms[$formGroupName] as $form_name => $form) {
  66. // skip Developer form if no setting is available
  67. if ($form_name == 'Developer'
  68. && !$GLOBALS['cfg']['UserprefsDeveloperTab']
  69. ) {
  70. continue;
  71. }
  72. $form_display->registerForm($form_name, $form, 1);
  73. }
  74. // Process form
  75. $error = null;
  76. if (isset($_POST['submit_save'])
  77. && $_POST['submit_save'] == $formGroupName
  78. ) {
  79. $this->_processPageSettings($form_display, $cf, $error);
  80. }
  81. // Display forms
  82. $this->_HTML = $this->_getPageSettingsDisplay($form_display, $error);
  83. }
  84. /**
  85. * Process response to form
  86. *
  87. * @param FormDisplay &$form_display Form
  88. * @param ConfigFile &$cf Configuration file
  89. * @param PMA_Message|null &$error Error message
  90. *
  91. * @return void
  92. */
  93. private function _processPageSettings(&$form_display, &$cf, &$error)
  94. {
  95. if ($form_display->process(false) && !$form_display->hasErrors()) {
  96. // save settings
  97. $result = PMA_saveUserprefs($cf->getConfigArray());
  98. if ($result === true) {
  99. // reload page
  100. header('Location: ' . $_SERVER['REQUEST_URI']);
  101. exit();
  102. } else {
  103. $error = $result;
  104. }
  105. }
  106. }
  107. /**
  108. * Store errors in _errorHTML
  109. *
  110. * @param FormDisplay &$form_display Form
  111. * @param PMA_Message|null &$error Error message
  112. *
  113. * @return void
  114. */
  115. private function _storeError(&$form_display, &$error)
  116. {
  117. $retval = '';
  118. if ($error) {
  119. $retval .= $error->getDisplay();
  120. }
  121. if ($form_display->hasErrors()) {
  122. // form has errors
  123. $retval .= '<div class="error config-form">'
  124. . '<b>' . __(
  125. 'Cannot save settings, submitted configuration form contains '
  126. . 'errors!'
  127. ) . '</b>'
  128. . $form_display->displayErrors()
  129. . '</div>';
  130. }
  131. $this->_errorHTML = $retval;
  132. }
  133. /**
  134. * Display page-related settings
  135. *
  136. * @param FormDisplay &$form_display Form
  137. * @param PMA_Message &$error Error message
  138. *
  139. * @return string
  140. */
  141. private function _getPageSettingsDisplay(&$form_display, &$error)
  142. {
  143. $response = PMA_Response::getInstance();
  144. $retval = '';
  145. $this->_storeError($form_display, $error);
  146. $retval .= '<div id="' . $this->_elemId . '">';
  147. $retval .= '<div class="page_settings">';
  148. $retval .= $form_display->getDisplay(
  149. true,
  150. true,
  151. false,
  152. $response->getFooter()->getSelfUrl('unencoded'),
  153. array(
  154. 'submit_save' => $this->_groupName
  155. )
  156. );
  157. $retval .= '</div>';
  158. $retval .= '</div>';
  159. return $retval;
  160. }
  161. /**
  162. * Get HTML output
  163. *
  164. * @return string
  165. */
  166. public function getHTML()
  167. {
  168. return $this->_HTML;
  169. }
  170. /**
  171. * Get error HTML output
  172. *
  173. * @return string
  174. */
  175. public function getErrorHTML()
  176. {
  177. return $this->_errorHTML;
  178. }
  179. /**
  180. * Group to show for Page-related settings
  181. * @param string $formGroupName The name of config form group to display
  182. * @return PMA_PageSettings
  183. */
  184. public static function showGroup($formGroupName)
  185. {
  186. $object = new PMA_PageSettings($formGroupName);
  187. $response = PMA_Response::getInstance();
  188. $response->addHTML($object->getErrorHTML());
  189. $response->addHTML($object->getHTML());
  190. return $object;
  191. }
  192. /**
  193. * Get HTML for navigation settings
  194. * @return string
  195. */
  196. public static function getNaviSettings()
  197. {
  198. $object = new PMA_PageSettings('Navi_panel', 'pma_navigation_settings');
  199. $response = PMA_Response::getInstance();
  200. $response->addHTML($object->getErrorHTML());
  201. return $object->getHTML();
  202. }
  203. }