Provides foundation for help pages that are generated from loaded extensions, starting with comprehensive search documentation. Addresses #522
		
			
				
	
	
		
			95 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			95 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"));
 | |
|     }
 | |
| 
 | |
| 
 | |
| }
 |