response->addScriptFiles(['triggers.js', 'sql.js']); if (! $request->isAjax()) { if (Current::$database === '') { return $this->response->missingParameterError('db'); } /** * Displays the header and tabs */ if (Current::$table !== '' && in_array(Current::$table, $this->dbi->getTables(Current::$database), true)) { UrlParams::$params = ['db' => Current::$database, 'table' => Current::$table]; $databaseName = DatabaseName::tryFrom($request->getParam('db')); if ($databaseName === null || ! $this->dbTableExists->selectDatabase($databaseName)) { return $this->response->redirectToRoute( '/', ['reload' => true, 'message' => __('No database selected.')], ); } $tableName = TableName::tryFrom($request->getParam('table')); if ($tableName === null || ! $this->dbTableExists->hasTable($databaseName, $tableName)) { return $this->response->redirectToRoute( '/', ['reload' => true, 'message' => __('No table selected.')], ); } } else { Current::$table = ''; $databaseName = DatabaseName::tryFrom($request->getParam('db')); if ($databaseName === null || ! $this->dbTableExists->selectDatabase($databaseName)) { return $this->response->redirectToRoute( '/', ['reload' => true, 'message' => __('No database selected.')], ); } } } elseif (Current::$database !== '') { $this->dbi->selectDb(Current::$database); } if (! empty($_POST['editor_process_add']) || ! empty($_POST['editor_process_edit'])) { $output = $this->triggers->handleEditor(); if ($request->isAjax()) { if (Current::$message instanceof Message && Current::$message->isSuccess()) { $trigger = $this->triggers->getTriggerByName( Current::$database, Current::$table, $_POST['item_name'], ); $insert = false; if ( Current::$table === '' || ($trigger !== null && Current::$table === $trigger->table->getName()) ) { $insert = true; $hasTriggerPrivilege = Util::currentUserHasPrivilege( $this->dbi, 'TRIGGER', Current::$database, Current::$table, ); $this->response->addJSON( 'new_row', $this->template->render('triggers/row', [ 'db' => Current::$database, 'table' => Current::$table, 'trigger' => $trigger, 'has_drop_privilege' => $hasTriggerPrivilege, 'has_edit_privilege' => $hasTriggerPrivilege, 'row_class' => '', ]), ); $this->response->addJSON( 'name', htmlspecialchars( mb_strtoupper( $_POST['item_name'], ), ), ); } $this->response->addJSON('insert', $insert); $this->response->addJSON('message', $output); } else { $this->response->addJSON('message', Current::$message); $this->response->setRequestStatus(false); } $this->response->addJSON('tableType', 'triggers'); return $this->response->response(); } } /** * Display a form used to add/edit a trigger, if necessary */ if ( $this->triggers->getErrorCount() > 0 || empty($_POST['editor_process_add']) && empty($_POST['editor_process_edit']) && (! empty($_REQUEST['add_item']) || ! empty($_REQUEST['edit_item'])) // FIXME: must be simpler than that ) { $mode = ''; $item = null; $title = ''; // Get the data for the form (if any) if (! empty($_REQUEST['add_item'])) { $title = __('Add trigger'); $item = $this->getDataFromRequest($request); $mode = 'add'; } elseif (! empty($_REQUEST['edit_item'])) { $title = __('Edit trigger'); if (! empty($_REQUEST['item_name']) && empty($_POST['editor_process_edit'])) { $item = $this->getDataFromTrigger( $this->triggers->getTriggerByName( Current::$database, Current::$table, $_REQUEST['item_name'], ), ); } else { $item = $this->getDataFromRequest($request); } $mode = 'edit'; } if ($item !== null) { $tables = $this->triggers->getTables(Current::$database); $editor = $this->template->render('triggers/editor_form', [ 'db' => Current::$database, 'table' => Current::$table, 'is_edit' => $mode === 'edit', 'item' => $item, 'tables' => $tables, 'time' => ['BEFORE', 'AFTER'], 'events' => ['INSERT', 'UPDATE', 'DELETE'], 'is_ajax' => $request->isAjax(), ]); if ($request->isAjax()) { $this->response->addJSON('message', $editor); $this->response->addJSON('title', $title); return $this->response->response(); } $this->response->addHTML("\n\n