checkUserPrivileges = $checkUserPrivileges; $this->dbi = $dbi; } public function __invoke(ServerRequest $request): void { $GLOBALS['tables'] = $GLOBALS['tables'] ?? null; $GLOBALS['num_tables'] = $GLOBALS['num_tables'] ?? null; $GLOBALS['total_num_tables'] = $GLOBALS['total_num_tables'] ?? null; $GLOBALS['sub_part'] = $GLOBALS['sub_part'] ?? null; $GLOBALS['tooltip_truename'] = $GLOBALS['tooltip_truename'] ?? null; $GLOBALS['tooltip_aliasname'] = $GLOBALS['tooltip_aliasname'] ?? null; $GLOBALS['pos'] = $GLOBALS['pos'] ?? null; $GLOBALS['errors'] = $GLOBALS['errors'] ?? null; $GLOBALS['errorUrl'] = $GLOBALS['errorUrl'] ?? null; $GLOBALS['urlParams'] = $GLOBALS['urlParams'] ?? null; $this->addScriptFiles(['database/routines.js']); $type = $_REQUEST['type'] ?? null; $this->checkUserPrivileges->getPrivileges(); if (! $this->response->isAjax()) { /** * Displays the header and tabs */ if (! empty($GLOBALS['table']) && in_array($GLOBALS['table'], $this->dbi->getTables($GLOBALS['db']))) { $this->checkParameters(['db', 'table']); $GLOBALS['urlParams'] = ['db' => $GLOBALS['db'], 'table' => $GLOBALS['table']]; $GLOBALS['errorUrl'] = Util::getScriptNameForOption($GLOBALS['cfg']['DefaultTabTable'], 'table'); $GLOBALS['errorUrl'] .= Url::getCommon($GLOBALS['urlParams'], '&'); DbTableExists::check($GLOBALS['db'], $GLOBALS['table']); } else { $GLOBALS['table'] = ''; $this->checkParameters(['db']); $GLOBALS['errorUrl'] = Util::getScriptNameForOption($GLOBALS['cfg']['DefaultTabDatabase'], 'database'); $GLOBALS['errorUrl'] .= Url::getCommon(['db' => $GLOBALS['db']], '&'); if (! $this->hasDatabase()) { return; } [ $GLOBALS['tables'], $GLOBALS['num_tables'], $GLOBALS['total_num_tables'], $GLOBALS['sub_part'],,, $GLOBALS['tooltip_truename'], $GLOBALS['tooltip_aliasname'], $GLOBALS['pos'], ] = Util::getDbInfo($GLOBALS['db'], $GLOBALS['sub_part'] ?? ''); } } elseif (strlen($GLOBALS['db']) > 0) { $this->dbi->selectDb($GLOBALS['db']); } /** * Keep a list of errors that occurred while * processing an 'Add' or 'Edit' operation. */ $GLOBALS['errors'] = []; $routines = new Routines($this->dbi, $this->template, $this->response); $routines->handleEditor(); $routines->handleExecute(); $routines->export(); if (! isset($type) || ! in_array($type, ['FUNCTION', 'PROCEDURE'])) { $type = null; } $items = $this->dbi->getRoutines($GLOBALS['db'], $type); $isAjax = $this->response->isAjax() && empty($_REQUEST['ajax_page_request']); $rows = ''; foreach ($items as $item) { $rows .= $routines->getRow($item, $isAjax ? 'ajaxInsert hide' : ''); } $this->render('database/routines/index', [ 'db' => $GLOBALS['db'], 'table' => $GLOBALS['table'], 'items' => $items, 'rows' => $rows, 'has_privilege' => Util::currentUserHasPrivilege('CREATE ROUTINE', $GLOBALS['db'], $GLOBALS['table']), ]); } }