Replace `global` keyword with `$GLOBALS`
[phpmyadmin.git] / libraries / classes / Controllers / Database / TrackingController.php
blobe4e6e6fe8c4b92be6f96cffceb8b18251b16d864
1 <?php
3 declare(strict_types=1);
5 namespace PhpMyAdmin\Controllers\Database;
7 use PhpMyAdmin\CheckUserPrivileges;
8 use PhpMyAdmin\Controllers\AbstractController;
9 use PhpMyAdmin\DatabaseInterface;
10 use PhpMyAdmin\Html\Generator;
11 use PhpMyAdmin\Message;
12 use PhpMyAdmin\ResponseRenderer;
13 use PhpMyAdmin\Template;
14 use PhpMyAdmin\Tracker;
15 use PhpMyAdmin\Tracking;
16 use PhpMyAdmin\Url;
17 use PhpMyAdmin\Util;
19 use function __;
20 use function count;
21 use function htmlspecialchars;
22 use function sprintf;
24 /**
25 * Tracking configuration for database.
27 class TrackingController extends AbstractController
29 /** @var Tracking */
30 private $tracking;
32 /** @var DatabaseInterface */
33 private $dbi;
35 public function __construct(
36 ResponseRenderer $response,
37 Template $template,
38 Tracking $tracking,
39 DatabaseInterface $dbi
40 ) {
41 parent::__construct($response, $template);
42 $this->tracking = $tracking;
43 $this->dbi = $dbi;
46 public function __invoke(): void
48 $this->addScriptFiles(['vendor/jquery/jquery.tablesorter.js', 'database/tracking.js']);
50 Util::checkParameters(['db']);
52 $GLOBALS['errorUrl'] = Util::getScriptNameForOption($GLOBALS['cfg']['DefaultTabDatabase'], 'database');
53 $GLOBALS['errorUrl'] .= Url::getCommon(['db' => $GLOBALS['db']], '&');
55 if (! $this->hasDatabase()) {
56 return;
59 $GLOBALS['urlParams']['goto'] = Url::getFromRoute('/table/tracking');
60 $GLOBALS['urlParams']['back'] = Url::getFromRoute('/database/tracking');
62 // Get the database structure
63 $GLOBALS['sub_part'] = '_structure';
66 $GLOBALS['tables'],
67 $GLOBALS['num_tables'],
68 $GLOBALS['total_num_tables'],
69 $GLOBALS['sub_part'],,
70 $isSystemSchema,
71 $GLOBALS['tooltip_truename'],
72 $GLOBALS['tooltip_aliasname'],
73 $GLOBALS['pos'],
74 ] = Util::getDbInfo($GLOBALS['db'], $GLOBALS['sub_part']);
76 if (isset($_POST['delete_tracking'], $_POST['table'])) {
77 Tracker::deleteTracking($GLOBALS['db'], $_POST['table']);
78 echo Message::success(
79 __('Tracking data deleted successfully.')
80 )->getDisplay();
81 } elseif (isset($_POST['submit_create_version'])) {
82 $this->tracking->createTrackingForMultipleTables($GLOBALS['db'], $_POST['selected']);
83 echo Message::success(
84 sprintf(
85 __(
86 'Version %1$s was created for selected tables, tracking is active for them.'
88 htmlspecialchars($_POST['version'])
90 )->getDisplay();
91 } elseif (isset($_POST['submit_mult'])) {
92 if (! empty($_POST['selected_tbl'])) {
93 if ($_POST['submit_mult'] === 'delete_tracking') {
94 foreach ($_POST['selected_tbl'] as $table) {
95 Tracker::deleteTracking($GLOBALS['db'], $table);
98 echo Message::success(
99 __('Tracking data deleted successfully.')
100 )->getDisplay();
101 } elseif ($_POST['submit_mult'] === 'track') {
102 echo $this->template->render('create_tracking_version', [
103 'route' => '/database/tracking',
104 'url_params' => $GLOBALS['urlParams'],
105 'last_version' => 0,
106 'db' => $GLOBALS['db'],
107 'selected' => $_POST['selected_tbl'],
108 'type' => 'both',
109 'default_statements' => $GLOBALS['cfg']['Server']['tracking_default_statements'],
112 return;
114 } else {
115 echo Message::notice(
116 __('No tables selected.')
117 )->getDisplay();
121 // Get tracked data about the database
122 $GLOBALS['data'] = Tracker::getTrackedData($GLOBALS['db'], '', '1');
124 // No tables present and no log exist
125 if ($GLOBALS['num_tables'] == 0 && count($GLOBALS['data']['ddlog']) === 0) {
126 echo '<p>' , __('No tables found in database.') , '</p>' , "\n";
128 if (empty($isSystemSchema)) {
129 $checkUserPrivileges = new CheckUserPrivileges($this->dbi);
130 $checkUserPrivileges->getPrivileges();
132 echo $this->template->render('database/create_table', ['db' => $GLOBALS['db']]);
135 return;
138 echo $this->tracking->getHtmlForDbTrackingTables($GLOBALS['db'], $GLOBALS['urlParams'], $GLOBALS['text_dir']);
140 // If available print out database log
141 if (count($GLOBALS['data']['ddlog']) <= 0) {
142 return;
145 $log = '';
146 foreach ($GLOBALS['data']['ddlog'] as $entry) {
147 $log .= '# ' . $entry['date'] . ' ' . $entry['username'] . "\n"
148 . $entry['statement'] . "\n";
151 echo Generator::getMessage(__('Database Log'), $log);