FormProcessing.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. /**
  3. * Formset processing library
  4. */
  5. declare(strict_types=1);
  6. namespace PhpMyAdmin\Setup;
  7. use PhpMyAdmin\Config\FormDisplay;
  8. use PhpMyAdmin\Core;
  9. use PhpMyAdmin\Response;
  10. use PhpMyAdmin\Template;
  11. use PhpMyAdmin\Url;
  12. /**
  13. * PhpMyAdmin\Setup\FormProcessing class
  14. */
  15. class FormProcessing
  16. {
  17. /**
  18. * Processes forms registered in $form_display, handles error correction
  19. *
  20. * @param FormDisplay $form_display Form to display
  21. *
  22. * @return void
  23. */
  24. public static function process(FormDisplay $form_display)
  25. {
  26. if (isset($_GET['mode']) && $_GET['mode'] === 'revert') {
  27. // revert erroneous fields to their default values
  28. $form_display->fixErrors();
  29. $response = Response::getInstance();
  30. $response->disable();
  31. $response->generateHeader303('index.php' . Url::getCommonRaw());
  32. }
  33. if (! $form_display->process(false)) {
  34. // handle form view and failed POST
  35. echo $form_display->getDisplay(true, true);
  36. return;
  37. }
  38. // check for form errors
  39. if (! $form_display->hasErrors()) {
  40. $response = Response::getInstance();
  41. $response->disable();
  42. $response->generateHeader303('index.php' . Url::getCommonRaw());
  43. return;
  44. }
  45. // form has errors, show warning
  46. $page = $_GET['page'] ?? '';
  47. $formset = $_GET['formset'] ?? '';
  48. $formId = Core::isValid($_GET['id'], 'numeric') ? $_GET['id'] : '';
  49. if ($formId === null && $page === 'servers') {
  50. // we've just added a new server, get its id
  51. $formId = $form_display->getConfigFile()->getServerCount();
  52. }
  53. $urlParams = [
  54. 'page' => $page,
  55. 'formset' => $formset,
  56. 'id' => $formId,
  57. ];
  58. $template = new Template();
  59. echo $template->render('setup/error', [
  60. 'url_params' => $urlParams,
  61. 'errors' => $form_display->displayErrors(),
  62. ]);
  63. }
  64. }