phpmyadmin/libraries/classes/Controllers/Server/Databases/DestroyController.php
Maurício Meneghini Fauth 5950693fb3
Fix possible undefined globals
Related to https://github.com/phpmyadmin/phpmyadmin/pull/17427.

Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
2022-03-10 18:05:21 -03:00

107 lines
3.1 KiB
PHP

<?php
declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Server\Databases;
use PhpMyAdmin\ConfigStorage\RelationCleanup;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Message;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Transformations;
use PhpMyAdmin\Url;
use PhpMyAdmin\Util;
use function __;
use function _ngettext;
use function count;
use function is_array;
final class DestroyController extends AbstractController
{
/** @var DatabaseInterface */
private $dbi;
/** @var Transformations */
private $transformations;
/** @var RelationCleanup */
private $relationCleanup;
public function __construct(
ResponseRenderer $response,
Template $template,
DatabaseInterface $dbi,
Transformations $transformations,
RelationCleanup $relationCleanup
) {
parent::__construct($response, $template);
$this->dbi = $dbi;
$this->transformations = $transformations;
$this->relationCleanup = $relationCleanup;
}
public function __invoke(): void
{
$GLOBALS['selected'] = $GLOBALS['selected'] ?? null;
$GLOBALS['errorUrl'] = $GLOBALS['errorUrl'] ?? null;
$GLOBALS['dblist'] = $GLOBALS['dblist'] ?? null;
$GLOBALS['reload'] = $GLOBALS['reload'] ?? null;
$selected_dbs = $_POST['selected_dbs'] ?? null;
if (
! $this->response->isAjax()
|| (! $this->dbi->isSuperUser() && ! $GLOBALS['cfg']['AllowUserDropDatabase'])
) {
$message = Message::error();
$json = ['message' => $message];
$this->response->setRequestStatus($message->isSuccess());
$this->response->addJSON($json);
return;
}
if (
! is_array($selected_dbs)
|| $selected_dbs === []
) {
$message = Message::error(__('No databases selected.'));
$json = ['message' => $message];
$this->response->setRequestStatus($message->isSuccess());
$this->response->addJSON($json);
return;
}
$GLOBALS['errorUrl'] = Url::getFromRoute('/server/databases');
$GLOBALS['selected'] = $selected_dbs;
$numberOfDatabases = count($selected_dbs);
foreach ($selected_dbs as $database) {
$this->relationCleanup->database($database);
$aQuery = 'DROP DATABASE ' . Util::backquote($database);
$GLOBALS['reload'] = true;
$this->dbi->query($aQuery);
$this->transformations->clear($database);
}
$GLOBALS['dblist']->databases->build();
$message = Message::success(
_ngettext(
'%1$d database has been dropped successfully.',
'%1$d databases have been dropped successfully.',
$numberOfDatabases
)
);
$message->addParam($numberOfDatabases);
$json = ['message' => $message];
$this->response->setRequestStatus($message->isSuccess());
$this->response->addJSON($json);
}
}