HomeController.php 7.9 KB

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