"Sidebar", "version" => "0.3.2", "author" => "Starbeamrainbowlabs", "description" => "Adds a sidebar to the left hand side of every page. Add '\$settings->sidebar_show = true;' to your configuration, or append '&sidebar=yes' to the url to enable. Adding to the url sets a cookie to remember your setting.", "id" => "extra-sidebar", "code" => function() { global $settings; $show_sidebar = false; // Show the sidebar if it is enabled in the settings if(isset($settings->sidebar_show) && $settings->sidebar_show === true) $show_sidebar = true; // Also show and persist the sidebar if the special GET parameter // sidebar is seet if(!$show_sidebar && isset($_GET["sidebar"])) { $show_sidebar = true; // Set a cookie to persist the display of the sidebar send_cookie("sidebar_show", "true", time() + (60 * 60 * 24 * 30)); } // Show the sidebar if the cookie is set if(!$show_sidebar && isset($_COOKIE["sidebar_show"])) $show_sidebar = true; // Delete the cookie and hide the sidebar if the special GET paramter // nosidebar is set if(isset($_GET["nosidebar"])) { $show_sidebar = false; unset($_COOKIE["sidebar_show"]); send_cookie("sidebar_show", null, time() - 3600); } page_renderer::register_part_preprocessor(function(&$parts) use ($show_sidebar) { global $settings, $pageindex, $env; // Don't render a sidebar if the user is logging in and a login is // required in order to view pages. if($settings->require_login_view && in_array($env->action, [ "login", "checklogin" ])) return false; if($show_sidebar && !isset($_GET["printable"])) { // Show the sidebar $exec_start = microtime(true); // Sort the pageindex $sorted_pageindex = get_object_vars($pageindex); $sorter = new Collator(""); uksort($sorted_pageindex, function($a, $b) use($sorter) : int { return $sorter->compare($a, $b); }); $sidebar_contents = ""; $sidebar_contents .= render_sidebar($sorted_pageindex); $parts["{body}"] = "
" . $parts["{body}"] . "
"; } }); add_help_section("50-sidebar", "Sidebar", "

$settings->sitename has an optional sidebar which displays a list of all the current pages and their respective subpages that it is currently hosting in a tree like structure. It may or may not be enabled.

If it isn't enabled, it can be enabled for your current browser only by appending sidebar=yes to the current page's query string.

If it is enabled, it can be disabled for your current browser only by appending nosidebar to the current page's query string.

"); } ]); /** * Renders the sidebar for a given pageindex. * @package extra-sidebar * @param array $pageindex The pageindex to render the sidebar for * @param string $root_pagename The pagename that should be considered the root of the rendering. You don't usually need to use this, it is used by the algorithm itself since it is recursive. * @return string A HTML rendering of the sidebar for the given pageindex. */ function render_sidebar($pageindex, $root_pagename = "", $depth = 0) { global $settings; if($depth > $settings->sidebar_maxdepth) return null; if(mb_strlen($root_pagename) > 0) $root_pagename .= "/"; $result = " $details) { // If we have a valid root pagename, and it isn't present at the // beginning of the current pagename, skip it if($root_pagename !== "" && strpos($pagename, $root_pagename) !== 0) continue; // The current page is the same as the root page, skip it if($pagename == $root_pagename) continue; // If the page already appears on the sidebar, skip it if(strpos($result, ">$pagename<\a>") !== false) continue; $pagename_relative = substr($pagename, strlen($root_pagename)); // If the part of the current pagename that comes after the root // pagename has a slash in it, skip it as it is a sub-sub page. if(strpos($pagename_relative, "/") !== false) continue; $subpage_sidebar = render_sidebar($pageindex, $pagename, $depth + 1); if($subpage_sidebar === null) { $result .= "
  • $pagename_relative
  • "; } else { $result .= "
  • $pagename_relative $subpage_sidebar
  • \n"; } $subpages_added++; } $result .= "\n"; if($subpages_added === 0) return null; return $result == "\n" ? "" : $result; } ?>