X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=actions%2Fdoc.php;h=694544dd038c0a02ce6ec47e15bcdb835546535d;hb=df46f123dd656545c80821931f0a384f7dc5d608;hp=836f039d32128d9696d5bbc07b598155fd803218;hpb=61419038e5747886357964a7eb3f814761482891;p=quix0rs-gnu-social.git diff --git a/actions/doc.php b/actions/doc.php index 836f039d32..694544dd03 100644 --- a/actions/doc.php +++ b/actions/doc.php @@ -1,5 +1,4 @@ . */ -if (!defined('STATUSNET') && !defined('LACONICA')) { - exit(1); -} +if (!defined('GNUSOCIAL')) { exit(1); } /** * Documentation class. @@ -43,83 +40,146 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 * @link http://status.net/ */ -class DocAction extends Action +class DocAction extends ManagedAction { - var $filename; - var $title; + var $output = null; + var $filename = null; + var $title = null; - /** - * Class handler. - * - * @param array $args array of arguments - * - * @return nothing - */ - function handle($args) + protected function doPreparation() { - parent::handle($args); - $this->title = $this->trimmed('title'); - $this->output = null; - - if (Event::handle('StartLoadDoc', array(&$this->title, &$this->output))) { - - $this->filename = INSTALLDIR.'/doc-src/'.$this->title; - if (!file_exists($this->filename)) { - $this->clientError(_('No such document.')); - return; - } - - $c = file_get_contents($this->filename); - $this->output = common_markup_to_html($c); - - Event::handle('EndLoadDoc', array($this->title, &$this->output)); + if (!preg_match('/^[a-zA-Z0-9_-]*$/', $this->title)) { + $this->title = 'help'; } + $this->output = null; - $this->showPage(); + $this->loadDoc(); } - // overrrided to add entry-title class - function showPageTitle() { - $this->element('h1', array('class' => 'entry-title'), $this->title()); + public function title() + { + return ucfirst($this->title); } - // overrided to add hentry, and content-inner classes - function showContentBlock() - { - $this->elementStart('div', array('id' => 'content', 'class' => 'hentry')); - $this->showPageTitle(); - $this->showPageNoticeBlock(); - $this->elementStart('div', array('id' => 'content_inner', - 'class' => 'entry-content')); - // show the actual content (forms, lists, whatever) - $this->showContent(); - $this->elementEnd('div'); - $this->elementEnd('div'); - } - /** * Display content. * - * @return nothing + * Shows the content of the document. + * + * @return void */ function showContent() { $this->raw($this->output); } + function showNoticeForm() + { + // no notice form + } + /** - * Page title. + * These pages are read-only. + * + * @param array $args unused. * - * @return page title + * @return boolean read-only flag (false) */ - function title() + function isReadOnly($args) { - return ucfirst($this->title); + return true; } - function isReadOnly($args) + function loadDoc() { - return true; + if (Event::handle('StartLoadDoc', array(&$this->title, &$this->output))) { + + $paths = DocFile::defaultPaths(); + + $docfile = DocFile::forTitle($this->title, $paths); + + if (empty($docfile)) { + // TRANS: Client exception thrown when requesting a document from the documentation that does not exist. + // TRANS: %s is the non-existing document. + throw new ClientException(sprintf(_('No such document "%s".'), $this->title), 404); + } + + $this->output = $docfile->toHTML(); + + Event::handle('EndLoadDoc', array($this->title, &$this->output)); + } + } + + function showLocalNav() + { + $menu = new DocNav($this); + $menu->show(); + } +} + +class DocNav extends Menu +{ + function show() + { + if (Event::handle('StartDocNav', array($this))) { + $stub = new HomeStubNav($this->action); + $this->submenu(_m('MENU','Home'), $stub); + + $docs = new DocListNav($this->action); + $this->submenu(_m('MENU','Docs'), $docs); + + Event::handle('EndDocNav', array($this)); + } + } +} + +class DocListNav extends Menu +{ + function getItems() + { + $items = array(); + + if (Event::handle('StartDocsMenu', array(&$items))) { + + $items = array(array('doc', + array('title' => 'help'), + _m('MENU', 'Help'), + _('Getting started'), + 'nav_doc_help'), + array('doc', + array('title' => 'about'), + _m('MENU', 'About'), + _('About this site'), + 'nav_doc_about'), + array('doc', + array('title' => 'faq'), + _m('MENU', 'FAQ'), + _('Frequently asked questions'), + 'nav_doc_faq'), + array('doc', + array('title' => 'contact'), + _m('MENU', 'Contact'), + _('Contact info'), + 'nav_doc_contact'), + array('doc', + array('title' => 'tags'), + _m('MENU', 'Tags'), + _('Using tags'), + 'nav_doc_tags'), + array('doc', + array('title' => 'groups'), + _m('MENU', 'Groups'), + _('Using groups'), + 'nav_doc_groups'), + array('doc', + array('title' => 'api'), + _m('MENU', 'API'), + _('RESTful API'), + 'nav_doc_api')); + + Event::handle('EndDocsMenu', array(&$items)); + } + return $items; } }