set( "module_read_more", array( "apply_to_feeds" => false, "default_text" => "" ) ); } public static function __uninstall(): void { Config::current()->remove("module_read_more"); } public function __init(): void { # Truncate in "markup_post_text" # before Markdown filtering in "markup_text". $this->setPriority("markup_post_text", 1); } public function admin_read_more_settings($admin): void { if (!Visitor::current()->group->can("change_settings")) show_403( __("Access Denied"), __("You do not have sufficient privileges to change settings.") ); if (empty($_POST)) { $admin->display("pages".DIR."read_more_settings"); return; } if (!isset($_POST['hash']) or !Session::check_token($_POST['hash'])) show_403( __("Access Denied"), __("Invalid authentication token.") ); fallback($_POST['default_text'], ""); Config::current()->set( "module_read_more", array( "apply_to_feeds" => isset($_POST['apply_to_feeds']), "default_text" => $_POST['default_text'] ) ); Flash::notice( __("Settings updated."), "read_more_settings" ); } public function settings_nav($navs): array { if (Visitor::current()->group->can("change_settings")) $navs["read_more_settings"] = array( "title" => __("Read More", "read_more") ); return $navs; } public function markup_post_text($text, $post = null): string { if (!preg_match("//i", $text, $matches)) return $text; if (!isset($post) or !$this->eligible()) return preg_replace("//i", "", $text, 1); $settings = Config::current()->module_read_more; $more = oneof( trim(fallback($matches[1], "")), $settings["default_text"], __("…more", "read_more") ); $url = (!$post->no_results) ? $post->url() : "#" ; $split = preg_split("//i", $text, 2); return $split[0]. ''. fix($more). ''; } public function title_from_excerpt($text): string { $split = preg_split('/routing = true; } public function route_done() { $this->routing = false; } private function eligible(): bool { $route = Route::current(); $settings = Config::current()->module_read_more; if (!isset($route)) return false; if (!$this->routing) return false; if (!$route->controller instanceof MainController) return false; if ($route->action == "view") return false; if ($route->controller->feed and !$settings["apply_to_feeds"]) return false; return true; } }