Server IP : 15.235.198.142 / Your IP : 216.73.216.190 Web Server : Apache/2.4.58 (Ubuntu) System : Linux ballsack 6.8.0-45-generic #45-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 30 12:02:04 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 8.3.6 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /usr/share/phpmyadmin/libraries/classes/Controllers/Database/Operations/ |
Upload File : |
<?php declare(strict_types=1); namespace PhpMyAdmin\Controllers\Database\Operations; use PhpMyAdmin\Controllers\Database\AbstractController; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Message; use PhpMyAdmin\Operations; use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Template; use PhpMyAdmin\Url; use PhpMyAdmin\Util; use function __; final class CollationController extends AbstractController { /** @var Operations */ private $operations; /** @var DatabaseInterface */ private $dbi; public function __construct( ResponseRenderer $response, Template $template, string $db, Operations $operations, DatabaseInterface $dbi ) { parent::__construct($response, $template, $db); $this->operations = $operations; $this->dbi = $dbi; } public function __invoke(): void { global $db, $cfg, $errorUrl; if (! $this->response->isAjax()) { return; } if (empty($_POST['db_collation'])) { $this->response->setRequestStatus(false); $this->response->addJSON('message', Message::error(__('No collation provided.'))); return; } Util::checkParameters(['db']); $errorUrl = Util::getScriptNameForOption($cfg['DefaultTabDatabase'], 'database'); $errorUrl .= Url::getCommon(['db' => $db], '&'); if (! $this->hasDatabase()) { return; } $sql_query = 'ALTER DATABASE ' . Util::backquote($db) . ' DEFAULT' . Util::getCharsetQueryPart($_POST['db_collation'] ?? ''); $this->dbi->query($sql_query); $message = Message::success(); /** * Changes tables charset if requested by the user */ if (isset($_POST['change_all_tables_collations']) && $_POST['change_all_tables_collations'] === 'on') { [$tables] = Util::getDbInfo($db, ''); foreach ($tables as $tableName => $data) { if ($this->dbi->getTable($db, $tableName)->isView()) { // Skip views, we can not change the collation of a view. // issue #15283 continue; } $sql_query = 'ALTER TABLE ' . Util::backquote($db) . '.' . Util::backquote($tableName) . ' DEFAULT ' . Util::getCharsetQueryPart($_POST['db_collation'] ?? ''); $this->dbi->query($sql_query); /** * Changes columns charset if requested by the user */ if ( ! isset($_POST['change_all_tables_columns_collations']) || $_POST['change_all_tables_columns_collations'] !== 'on' ) { continue; } $this->operations->changeAllColumnsCollation($db, $tableName, $_POST['db_collation']); } } $this->response->setRequestStatus($message->isSuccess()); $this->response->addJSON('message', $message); } }