a18589ee0a
Provides foundation for help pages that are generated from loaded extensions, starting with comprehensive search documentation. Addresses #522
94 lines
2.2 KiB
PHP
94 lines
2.2 KiB
PHP
<?php
|
|
/**
|
|
* Name: Help Pages
|
|
* Author: Matthew Barbour <matthew@darkholme.net>
|
|
* License: MIT
|
|
* Description: Provides documentation screens
|
|
*/
|
|
|
|
class HelpPageListBuildingEvent extends Event
|
|
{
|
|
public $pages = [];
|
|
|
|
public function add_page(string $key, string $name)
|
|
{
|
|
$this->pages[$key] = $name;
|
|
}
|
|
|
|
}
|
|
|
|
class HelpPageBuildingEvent extends Event
|
|
{
|
|
public $key;
|
|
public $blocks = [];
|
|
|
|
public function __construct(string $key)
|
|
{
|
|
$this->key = $key;
|
|
}
|
|
|
|
function add_block(Block $block, int $position = 50)
|
|
{
|
|
if(!array_key_exists("$position",$this->blocks))
|
|
{
|
|
$this->blocks["$position"] = [];
|
|
}
|
|
$this->blocks["$position"][] = $block;
|
|
}
|
|
}
|
|
|
|
class HelpPages extends Extension
|
|
{
|
|
public const SEARCH = "search";
|
|
|
|
public function onPageRequest(PageRequestEvent $event)
|
|
{
|
|
global $page, $user;
|
|
|
|
if ($event->page_matches("help")) {
|
|
$e = new HelpPageListBuildingEvent();
|
|
send_event($e);
|
|
$page->set_mode(PageMode::PAGE);
|
|
|
|
if ($event->count_args() == 0) {
|
|
$this->theme->display_list_page($e->pages);
|
|
} else {
|
|
$name = $event->get_arg(0);
|
|
$title = $name;
|
|
if(array_key_exists($name, $e->pages)) {
|
|
$title = $e->pages[$name];
|
|
}
|
|
|
|
$this->theme->display_help_page($title);
|
|
|
|
$hpbe = new HelpPageBuildingEvent($name);
|
|
send_event($hpbe);
|
|
asort($hpbe->blocks);
|
|
|
|
foreach ($hpbe->blocks as $key=>$value) {
|
|
foreach($value as $block) {
|
|
$page->add_block($block);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public function onHelpPageListBuilding(HelpPageListBuildingEvent $event)
|
|
{
|
|
$event->add_page("search", "Searching");
|
|
}
|
|
|
|
public function onPageNavBuilding(PageNavBuildingEvent $event)
|
|
{
|
|
$event->add_nav_link("help", new Link('help'), "Help");
|
|
}
|
|
|
|
public function onUserBlockBuilding(UserBlockBuildingEvent $event)
|
|
{
|
|
global $user;
|
|
$event->add_link("Help", make_link("help"));
|
|
}
|
|
|
|
|
|
}
|