HomeController.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. <?php
  2. /* vim: set expandtab sw=4 ts=4 sts=4: */
  3. /**
  4. * Holds the PhpMyAdmin\Controllers\Setup\HomeController
  5. *
  6. * @package PhpMyAdmin\Controllers\Setup
  7. */
  8. declare(strict_types=1);
  9. namespace PhpMyAdmin\Controllers\Setup;
  10. use PhpMyAdmin\Config\FormDisplay;
  11. use PhpMyAdmin\Config\FormDisplayTemplate;
  12. use PhpMyAdmin\Config\ServerConfigChecks;
  13. use PhpMyAdmin\Core;
  14. use PhpMyAdmin\LanguageManager;
  15. use PhpMyAdmin\Sanitize;
  16. use PhpMyAdmin\Setup\Index;
  17. /**
  18. * Class HomeController
  19. * @package PhpMyAdmin\Controllers\Setup
  20. */
  21. class HomeController extends AbstractController
  22. {
  23. /**
  24. * @param array $params Request parameters
  25. * @return string HTML
  26. */
  27. public function index(array $params): string
  28. {
  29. $pages = $this->getPages();
  30. // Handle done action info
  31. $actionDone = Core::isValid($params['action_done'], 'scalar') ? $params['action_done'] : null;
  32. $actionDone = preg_replace('/[^a-z_]/', '', $actionDone);
  33. // message handling
  34. Index::messagesBegin();
  35. // Check phpMyAdmin version
  36. if (isset($params['version_check'])) {
  37. Index::versionCheck();
  38. }
  39. // Perform various security, compatibility and consistency checks
  40. $configChecker = new ServerConfigChecks($this->config);
  41. $configChecker->performConfigChecks();
  42. $text = __(
  43. 'You are not using a secure connection; all data (including potentially '
  44. . 'sensitive information, like passwords) is transferred unencrypted!'
  45. );
  46. $text .= ' <a href="#">';
  47. $text .= __(
  48. 'If your server is also configured to accept HTTPS requests '
  49. . 'follow this link to use a secure connection.'
  50. );
  51. $text .= '</a>';
  52. Index::messagesSet('notice', 'no_https', __('Insecure connection'), $text);
  53. // Check for done action info and set notice message if present
  54. switch ($actionDone) {
  55. case 'config_saved':
  56. /* Use uniqid to display this message every time configuration is saved */
  57. Index::messagesSet(
  58. 'notice',
  59. uniqid('config_saved'),
  60. __('Configuration saved.'),
  61. Sanitize::sanitizeMessage(
  62. __(
  63. 'Configuration saved to file config/config.inc.php in phpMyAdmin '
  64. . 'top level directory, copy it to top level one and delete '
  65. . 'directory config to use it.'
  66. )
  67. )
  68. );
  69. break;
  70. case 'config_not_saved':
  71. /* Use uniqid to display this message every time configuration is saved */
  72. Index::messagesSet(
  73. 'notice',
  74. uniqid('config_not_saved'),
  75. __('Configuration not saved!'),
  76. Sanitize::sanitizeMessage(
  77. __(
  78. 'Please create web server writable folder [em]config[/em] in '
  79. . 'phpMyAdmin top level directory as described in '
  80. . '[doc@setup_script]documentation[/doc]. Otherwise you will be '
  81. . 'only able to download or display it.'
  82. )
  83. )
  84. );
  85. break;
  86. default:
  87. break;
  88. }
  89. Index::messagesEnd();
  90. $messages = Index::messagesShowHtml();
  91. $formDisplay = new FormDisplay($this->config);
  92. $defaultLanguageOptions = [
  93. 'doc' => $formDisplay->getDocLink('DefaultLang'),
  94. 'values' => [],
  95. 'values_escaped' => true,
  96. ];
  97. // prepare unfiltered language list
  98. $sortedLanguages = LanguageManager::getInstance()->sortedLanguages();
  99. $languages = [];
  100. foreach ($sortedLanguages as $language) {
  101. $languages[] = [
  102. 'code' => $language->getCode(),
  103. 'name' => $language->getName(),
  104. 'is_active' => $language->isActive(),
  105. ];
  106. $defaultLanguageOptions['values'][$language->getCode()] = $language->getName();
  107. }
  108. $serverDefaultOptions = [
  109. 'doc' => $formDisplay->getDocLink('ServerDefault'),
  110. 'values' => [],
  111. 'values_disabled' => [],
  112. ];
  113. $servers = [];
  114. if ($this->config->getServerCount() > 0) {
  115. $serverDefaultOptions['values']['0'] = __('let the user choose');
  116. $serverDefaultOptions['values']['-'] = '------------------------------';
  117. if ($this->config->getServerCount() === 1) {
  118. $serverDefaultOptions['values_disabled'][] = '0';
  119. }
  120. $serverDefaultOptions['values_disabled'][] = '-';
  121. foreach ($this->config->getServers() as $id => $server) {
  122. $servers[$id] = [
  123. 'id' => $id,
  124. 'name' => $this->config->getServerName($id),
  125. 'auth_type' => $this->config->getValue("Servers/$id/auth_type"),
  126. 'dsn' => $this->config->getServerDSN($id),
  127. 'params' => [
  128. 'token' => $_SESSION[' PMA_token '],
  129. 'edit' => [
  130. 'page' => 'servers',
  131. 'mode' => 'edit',
  132. 'id' => $id,
  133. ],
  134. 'remove' => [
  135. 'page' => 'servers',
  136. 'mode' => 'remove',
  137. 'id' => $id,
  138. ],
  139. ],
  140. ];
  141. $serverDefaultOptions['values'][(string) $id] = $this->config->getServerName($id) . " [$id]";
  142. }
  143. } else {
  144. $serverDefaultOptions['values']['1'] = __('- none -');
  145. $serverDefaultOptions['values_escaped'] = true;
  146. }
  147. $formDisplayTemplate = new FormDisplayTemplate($GLOBALS['PMA_Config']);
  148. $serversFormTopHtml = $formDisplayTemplate->displayFormTop(
  149. 'index.php',
  150. 'get',
  151. [
  152. 'page' => 'servers',
  153. 'mode' => 'add',
  154. ]
  155. );
  156. $configFormTopHtml = $formDisplayTemplate->displayFormTop('config.php');
  157. $formBottomHtml = $formDisplayTemplate->displayFormBottom();
  158. $defaultLanguageInput = $formDisplayTemplate->displayInput(
  159. 'DefaultLang',
  160. __('Default language'),
  161. 'select',
  162. $this->config->getValue('DefaultLang'),
  163. '',
  164. true,
  165. $defaultLanguageOptions
  166. );
  167. $serverDefaultInput = $formDisplayTemplate->displayInput(
  168. 'ServerDefault',
  169. __('Default server'),
  170. 'select',
  171. $this->config->getValue('ServerDefault'),
  172. '',
  173. true,
  174. $serverDefaultOptions
  175. );
  176. $eolOptions = [
  177. 'values' => [
  178. 'unix' => 'UNIX / Linux (\n)',
  179. 'win' => 'Windows (\r\n)',
  180. ],
  181. 'values_escaped' => true,
  182. ];
  183. $eol = Core::ifSetOr($_SESSION['eol'], (PMA_IS_WINDOWS ? 'win' : 'unix'));
  184. $eolInput = $formDisplayTemplate->displayInput(
  185. 'eol',
  186. __('End of line'),
  187. 'select',
  188. $eol,
  189. '',
  190. true,
  191. $eolOptions
  192. );
  193. return $this->template->render('setup/home/index', [
  194. 'formset' => $params['formset'] ?? '',
  195. 'languages' => $languages,
  196. 'messages' => $messages,
  197. 'servers_form_top_html' => $serversFormTopHtml,
  198. 'config_form_top_html' => $configFormTopHtml,
  199. 'form_bottom_html' => $formBottomHtml,
  200. 'server_count' => $this->config->getServerCount(),
  201. 'servers' => $servers,
  202. 'default_language_input' => $defaultLanguageInput,
  203. 'server_default_input' => $serverDefaultInput,
  204. 'eol_input' => $eolInput,
  205. 'pages' => $pages,
  206. ]);
  207. }
  208. }