CentralColumnsController.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <?php
  2. /* vim: set expandtab sw=4 ts=4 sts=4: */
  3. /**
  4. * Central Columns view/edit
  5. *
  6. * @package PhpMyAdmin\Controllers
  7. */
  8. declare(strict_types=1);
  9. namespace PhpMyAdmin\Controllers\Database;
  10. use PhpMyAdmin\CentralColumns;
  11. use PhpMyAdmin\Core;
  12. use PhpMyAdmin\DatabaseInterface;
  13. use PhpMyAdmin\Message;
  14. use PhpMyAdmin\Response;
  15. use PhpMyAdmin\Template;
  16. /**
  17. * Class CentralColumnsController
  18. * @package PhpMyAdmin\Controllers\Database
  19. */
  20. class CentralColumnsController extends AbstractController
  21. {
  22. /**
  23. * @var CentralColumns
  24. */
  25. private $centralColumns;
  26. /**
  27. * CentralColumnsController constructor.
  28. *
  29. * @param Response $response Response instance
  30. * @param DatabaseInterface $dbi DatabaseInterface instance
  31. * @param Template $template Template object
  32. * @param string $db Database name
  33. * @param CentralColumns $centralColumns CentralColumns instance
  34. */
  35. public function __construct($response, $dbi, Template $template, $db, $centralColumns)
  36. {
  37. parent::__construct($response, $dbi, $template, $db);
  38. $this->centralColumns = $centralColumns;
  39. }
  40. /**
  41. * @param array $params Request parameters
  42. * @return string HTML
  43. */
  44. public function index(array $params): string
  45. {
  46. global $pmaThemeImage, $text_dir;
  47. if (! empty($params['total_rows'])
  48. && Core::isValid($params['total_rows'], 'integer')
  49. ) {
  50. $totalRows = (int) $params['total_rows'];
  51. } else {
  52. $totalRows = $this->centralColumns->getCount($this->db);
  53. }
  54. $pos = 0;
  55. if (Core::isValid($params['pos'], 'integer')) {
  56. $pos = (int) $params['pos'];
  57. }
  58. return $this->centralColumns->getHtmlForMain(
  59. $this->db,
  60. $totalRows,
  61. $pos,
  62. $pmaThemeImage,
  63. $text_dir
  64. );
  65. }
  66. /**
  67. * @param array $params Request parameters
  68. * @return array JSON
  69. */
  70. public function getColumnList(array $params): array
  71. {
  72. return $this->centralColumns->getListRaw(
  73. $this->db,
  74. $params['cur_table'] ?? ''
  75. );
  76. }
  77. /**
  78. * @param array $params Request parameters
  79. * @return string HTML
  80. */
  81. public function populateColumns(array $params): string
  82. {
  83. return $this->centralColumns->getHtmlForColumnDropdown(
  84. $this->db,
  85. $params['selectedTable']
  86. );
  87. }
  88. /**
  89. * @param array $params Request parameters
  90. * @return true|Message
  91. */
  92. public function editSave(array $params)
  93. {
  94. $columnDefault = $params['col_default'];
  95. if ($columnDefault === 'NONE' && $params['col_default_sel'] !== 'USER_DEFINED') {
  96. $columnDefault = '';
  97. }
  98. return $this->centralColumns->updateOneColumn(
  99. $this->db,
  100. $params['orig_col_name'],
  101. $params['col_name'],
  102. $params['col_type'],
  103. $params['col_attribute'],
  104. $params['col_length'],
  105. isset($params['col_isNull']) ? 1 : 0,
  106. $params['collation'],
  107. $params['col_extra'] ?? '',
  108. $columnDefault
  109. );
  110. }
  111. /**
  112. * @param array $params Request parameters
  113. * @return true|Message
  114. */
  115. public function addNewColumn(array $params)
  116. {
  117. $columnDefault = $params['col_default'];
  118. if ($columnDefault === 'NONE' && $params['col_default_sel'] !== 'USER_DEFINED') {
  119. $columnDefault = '';
  120. }
  121. return $this->centralColumns->updateOneColumn(
  122. $this->db,
  123. '',
  124. $params['col_name'],
  125. $params['col_type'],
  126. $params['col_attribute'],
  127. $params['col_length'],
  128. isset($params['col_isNull']) ? 1 : 0,
  129. $params['collation'],
  130. $params['col_extra'] ?? '',
  131. $columnDefault
  132. );
  133. }
  134. /**
  135. * @param array $params Request parameters
  136. * @return true|Message
  137. */
  138. public function addColumn(array $params)
  139. {
  140. return $this->centralColumns->syncUniqueColumns(
  141. [$params['column-select']],
  142. false,
  143. $params['table-select']
  144. );
  145. }
  146. /**
  147. * @param array $params Request parameters
  148. * @return string HTML
  149. */
  150. public function editPage(array $params): string
  151. {
  152. return $this->centralColumns->getHtmlForEditingPage(
  153. $params['selected_fld'],
  154. $params['db']
  155. );
  156. }
  157. /**
  158. * @param array $params Request parameters
  159. * @return true|Message
  160. */
  161. public function updateMultipleColumn(array $params)
  162. {
  163. return $this->centralColumns->updateMultipleColumn($params);
  164. }
  165. /**
  166. * @param array $params Request parameters
  167. * @return true|Message
  168. */
  169. public function deleteSave(array $params)
  170. {
  171. $name = [];
  172. parse_str($params['col_name'], $name);
  173. return $this->centralColumns->deleteColumnsFromList(
  174. $params['db'],
  175. $name['selected_fld'],
  176. false
  177. );
  178. }
  179. }