getLang $this->setupLocale(); } /** * Handle Sqlite instantiation here and not in the constructor * to not make sqlite mandatory everywhere */ private function initiatePageRuleManager() { if (!isset($this->pageRuleManager)) { $this->pageRuleManager = new PageRules(); } } /** * Access for managers allowed */ function forAdminOnly(): bool { return false; } /** * return sort order for position in admin menu */ function getMenuSort(): int { return 140; } /** * return prompt for admin menu * @param string $language * @return string */ function getMenuText($language): string { return ucfirst(PluginUtility::$PLUGIN_NAME) . " - " . $this->lang['PageRules']; } public function getMenuIcon() { return DirectoryLayout::getComboImagesDirectory()->resolve('page-next.svg')->toAbsoluteId(); } /** * handle user request */ function handle() { $this->initiatePageRuleManager(); /** * If one of the form submit has the add key */ if (($_POST[self::SAVE_ACTION] ?? null) && checkSecurityToken()) { $id = $_POST[PageRules::ID_NAME] ?? null; $matcher = $_POST[PageRules::MATCHER_NAME] ?? null; $target = $_POST[PageRules::TARGET_NAME] ?? null; $priority = $_POST[PageRules::PRIORITY_NAME] ?? null; if ($matcher == null) { msg('Matcher can not be null', LogUtility::LVL_MSG_ERROR); return; } if ($target == null) { msg('Target can not be null', LogUtility::LVL_MSG_ERROR); return; } if ($matcher == $target) { msg($this->lang['SameSourceAndTargetAndPage'] . ': ' . $matcher . '', LogUtility::LVL_MSG_ERROR); return; } if ($id == null) { if (!$this->pageRuleManager->patternExists($matcher)) { $this->pageRuleManager->addRule($matcher, $target, $priority); msg($this->lang['Saved'], LogUtility::LVL_MSG_INFO); } else { msg("The matcher pattern ($matcher) already exists. The page rule was not inserted.", LogUtility::LVL_MSG_ERROR); } } else { $this->pageRuleManager->updateRule($id, $matcher, $target, $priority); msg($this->lang['Saved'], LogUtility::LVL_MSG_INFO); } } if (($_POST[self::DELETE_ACTION] ?? null) && checkSecurityToken()) { $ruleId = $_POST[PageRules::ID_NAME]; $this->pageRuleManager->deleteRule($ruleId); msg($this->lang['Deleted'], LogUtility::LVL_MSG_INFO); } } /** * output appropriate html * TODO: Add variable parsing where the key is the key of the lang object ?? */ function html() { $this->initiatePageRuleManager(); ptln('

' . ucfirst(PluginUtility::$PLUGIN_NAME) . ' - ' . ucfirst($this->getPluginComponent()) . '

'); $relativePath = 'admin/' . $this->getPluginComponent() . '_intro'; echo $this->locale_xhtml($relativePath); // Forms if ($_POST['upsert'] ?? null) { $matcher = null; $target = null; $priority = 1; // Update ? $id = $_POST[PageRules::ID_NAME]; if ($id != null) { $rule = $this->pageRuleManager->getRule($id); $matcher = $rule[PageRules::MATCHER_NAME]; $target = $rule[PageRules::TARGET_NAME]; $priority = $rule[PageRules::PRIORITY_NAME]; } // Forms ptln('
'); ptln('
'); ptln('
'); ptln(''); ptln('

If the Dokuwiki ID matches the following pattern:

'); $matcherDefault = ""; if ($matcher != null) { $matcherDefault = 'value="' . $matcher . '"'; } ptln(''); ptln('

'); ptln('

Then applies this redirect settings:

'); $targetDefault = ""; if ($matcher != null) { $targetDefault = 'value="' . $target . '"'; } ptln(''); ptln('

'); ptln(''); ptln('

'); ptln(''); if ($id != null) { ptln(''); } ptln(''); ptln('

'); ptln(' ' . 'Cancel' . ' '); ptln(''); ptln('

'); ptln(''); ptln('
'); ptln('
'); } else { ptln('

' . 'Rules' . '

'); ptln('
'); ptln('
'); ptln(''); ptln(' '); ptln(' '); ptln(' '); ptln('
'); // List of redirection $rules = $this->pageRuleManager->getRules(); if (sizeof($rules) == 0) { ptln('

No Rules found

'); } else { ptln('
'); ptln(''); ptln(' '); ptln(' '); ptln(' '); ptln(' '); ptln(' '); ptln(' '); ptln(' '); ptln(' '); ptln(' '); ptln(' '); foreach ($rules as $key => $row) { $id = $row[PageRules::ID_NAME]; $matcher = $row[PageRules::MATCHER_NAME]; $target = $row[PageRules::TARGET_NAME]; $timestamp = $row[PageRules::TIMESTAMP_NAME]; $priority = $row[PageRules::PRIORITY_NAME]; ptln(' '); ptln(' '); ptln(' '); ptln(' '); ptln(' '); ptln(' '); ptln(' '); } ptln(' '); ptln('
 ' . $this->getLangOrDefault('Priority', 'Priority') . '' . $this->getLangOrDefault('Matcher', 'Matcher') . '' . $this->getLangOrDefault('Target', 'Target') . '' . $this->getLangOrDefault('NDate', 'Date') . '
'); ptln('
'); ptln(''); ptln(''); ptln(' '); ptln(' '); ptln('
'); ptln('
'); ptln(''); ptln(''); ptln(' '); ptln(' '); ptln('
'); ptln('
' . $priority . '' . $matcher . '' . $target . '' . $timestamp . '
'); ptln('
'); //End Table responsive } ptln('
'); // End level 2 } } /** * An utility function to return the plugin translation or a default value * @param $id * @param $default * @return mixed|string */ private function getLangOrDefault($id, $default) { $lang = $this->getLang($id); return $lang != '' ? $lang : $default; } static function getAdminPageName() { return PluginUtility::getAdminPageName(get_called_class()); } }