PageSettings.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. <?php
  2. /* vim: set expandtab sw=4 ts=4 sts=4: */
  3. /**
  4. * Page-related settings
  5. *
  6. * @package PhpMyAdmin
  7. */
  8. declare(strict_types=1);
  9. namespace PhpMyAdmin\Config;
  10. use PhpMyAdmin\Config\ConfigFile;
  11. use PhpMyAdmin\Config\FormDisplay;
  12. use PhpMyAdmin\Config\Forms\Page\PageFormList;
  13. use PhpMyAdmin\Core;
  14. use PhpMyAdmin\Message;
  15. use PhpMyAdmin\Response;
  16. use PhpMyAdmin\UserPreferences;
  17. /**
  18. * Page-related settings
  19. *
  20. * @package PhpMyAdmin
  21. */
  22. class PageSettings
  23. {
  24. /**
  25. * Contains id of the form element
  26. * @var string
  27. */
  28. private $_elemId = 'page_settings_modal';
  29. /**
  30. * Name of the group to show
  31. * @var string
  32. */
  33. private $_groupName = '';
  34. /**
  35. * Contains HTML of errors
  36. * @var string
  37. */
  38. private $_errorHTML = '';
  39. /**
  40. * Contains HTML of settings
  41. * @var string
  42. */
  43. private $_HTML = '';
  44. /**
  45. * @var UserPreferences
  46. */
  47. private $userPreferences;
  48. /**
  49. * Constructor
  50. *
  51. * @param string $formGroupName The name of config form group to display
  52. * @param string $elemId Id of the div containing settings
  53. */
  54. public function __construct($formGroupName, $elemId = null)
  55. {
  56. $this->userPreferences = new UserPreferences();
  57. $formClass = PageFormList::get($formGroupName);
  58. if ($formClass === null) {
  59. return;
  60. }
  61. if (isset($_REQUEST['printview']) && $_REQUEST['printview'] == '1') {
  62. return;
  63. }
  64. if (! empty($elemId)) {
  65. $this->_elemId = $elemId;
  66. }
  67. $this->_groupName = $formGroupName;
  68. $cf = new ConfigFile($GLOBALS['PMA_Config']->base_settings);
  69. $this->userPreferences->pageInit($cf);
  70. $formDisplay = new $formClass($cf);
  71. // Process form
  72. $error = null;
  73. if (isset($_POST['submit_save'])
  74. && $_POST['submit_save'] == $formGroupName
  75. ) {
  76. $this->_processPageSettings($formDisplay, $cf, $error);
  77. }
  78. // Display forms
  79. $this->_HTML = $this->_getPageSettingsDisplay($formDisplay, $error);
  80. }
  81. /**
  82. * Process response to form
  83. *
  84. * @param FormDisplay $formDisplay Form
  85. * @param ConfigFile $cf Configuration file
  86. * @param Message|null $error Error message
  87. *
  88. * @return void
  89. */
  90. private function _processPageSettings(&$formDisplay, &$cf, &$error)
  91. {
  92. if ($formDisplay->process(false) && ! $formDisplay->hasErrors()) {
  93. // save settings
  94. $result = $this->userPreferences->save($cf->getConfigArray());
  95. if ($result === true) {
  96. // reload page
  97. $response = Response::getInstance();
  98. Core::sendHeaderLocation(
  99. $response->getFooter()->getSelfUrl()
  100. );
  101. exit;
  102. } else {
  103. $error = $result;
  104. }
  105. }
  106. }
  107. /**
  108. * Store errors in _errorHTML
  109. *
  110. * @param FormDisplay $formDisplay Form
  111. * @param Message|null $error Error message
  112. *
  113. * @return void
  114. */
  115. private function _storeError(&$formDisplay, &$error)
  116. {
  117. $retval = '';
  118. if ($error) {
  119. $retval .= $error->getDisplay();
  120. }
  121. if ($formDisplay->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. . $formDisplay->displayErrors()
  129. . '</div>';
  130. }
  131. $this->_errorHTML = $retval;
  132. }
  133. /**
  134. * Display page-related settings
  135. *
  136. * @param FormDisplay $formDisplay Form
  137. * @param Message $error Error message
  138. *
  139. * @return string
  140. */
  141. private function _getPageSettingsDisplay(&$formDisplay, &$error)
  142. {
  143. $response = Response::getInstance();
  144. $retval = '';
  145. $this->_storeError($formDisplay, $error);
  146. $retval .= '<div id="' . $this->_elemId . '">';
  147. $retval .= '<div class="page_settings">';
  148. $retval .= $formDisplay->getDisplay(
  149. true,
  150. true,
  151. false,
  152. $response->getFooter()->getSelfUrl(),
  153. [
  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 PageSettings
  183. */
  184. public static function showGroup($formGroupName)
  185. {
  186. $object = new PageSettings($formGroupName);
  187. $response = 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 PageSettings('Navi', 'pma_navigation_settings');
  199. $response = Response::getInstance();
  200. $response->addHTML($object->getErrorHTML());
  201. return $object->getHTML();
  202. }
  203. }