Initial commit
This commit is contained in:
		
							
								
								
									
										7
									
								
								content/lib/plugins/info/plugin.info.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								content/lib/plugins/info/plugin.info.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
base info
 | 
			
		||||
author Andreas Gohr
 | 
			
		||||
email andi@splitbrain.org
 | 
			
		||||
date 2020-06-04
 | 
			
		||||
name Info Plugin
 | 
			
		||||
desc Displays information about various DokuWiki internals
 | 
			
		||||
url http://dokuwiki.org/plugin:info
 | 
			
		||||
							
								
								
									
										302
									
								
								content/lib/plugins/info/syntax.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										302
									
								
								content/lib/plugins/info/syntax.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,302 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * Info Plugin: Displays information about various DokuWiki internals
 | 
			
		||||
 *
 | 
			
		||||
 * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
 | 
			
		||||
 * @author     Andreas Gohr <andi@splitbrain.org>
 | 
			
		||||
 * @author     Esther Brunner <wikidesign@gmail.com>
 | 
			
		||||
 */
 | 
			
		||||
class syntax_plugin_info extends DokuWiki_Syntax_Plugin
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * What kind of syntax are we?
 | 
			
		||||
     */
 | 
			
		||||
    public function getType()
 | 
			
		||||
    {
 | 
			
		||||
        return 'substition';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * What about paragraphs?
 | 
			
		||||
     */
 | 
			
		||||
    public function getPType()
 | 
			
		||||
    {
 | 
			
		||||
        return 'block';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Where to sort in?
 | 
			
		||||
     */
 | 
			
		||||
    public function getSort()
 | 
			
		||||
    {
 | 
			
		||||
        return 155;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Connect pattern to lexer
 | 
			
		||||
     */
 | 
			
		||||
    public function connectTo($mode)
 | 
			
		||||
    {
 | 
			
		||||
        $this->Lexer->addSpecialPattern('~~INFO:\w+~~', $mode, 'plugin_info');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Handle the match
 | 
			
		||||
     *
 | 
			
		||||
     * @param   string       $match   The text matched by the patterns
 | 
			
		||||
     * @param   int          $state   The lexer state for the match
 | 
			
		||||
     * @param   int          $pos     The character position of the matched text
 | 
			
		||||
     * @param   Doku_Handler $handler The Doku_Handler object
 | 
			
		||||
     * @return  array Return an array with all data you want to use in render
 | 
			
		||||
     */
 | 
			
		||||
    public function handle($match, $state, $pos, Doku_Handler $handler)
 | 
			
		||||
    {
 | 
			
		||||
        $match = substr($match, 7, -2); //strip ~~INFO: from start and ~~ from end
 | 
			
		||||
        return array(strtolower($match));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create output
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $format   string     output format being rendered
 | 
			
		||||
     * @param Doku_Renderer    $renderer  the current renderer object
 | 
			
		||||
     * @param array            $data      data created by handler()
 | 
			
		||||
     * @return  boolean                 rendered correctly?
 | 
			
		||||
     */
 | 
			
		||||
    public function render($format, Doku_Renderer $renderer, $data)
 | 
			
		||||
    {
 | 
			
		||||
        if ($format == 'xhtml') {
 | 
			
		||||
            /** @var Doku_Renderer_xhtml $renderer */
 | 
			
		||||
            //handle various info stuff
 | 
			
		||||
            switch ($data[0]) {
 | 
			
		||||
                case 'syntaxmodes':
 | 
			
		||||
                    $renderer->doc .= $this->renderSyntaxModes();
 | 
			
		||||
                    break;
 | 
			
		||||
                case 'syntaxtypes':
 | 
			
		||||
                    $renderer->doc .= $this->renderSyntaxTypes();
 | 
			
		||||
                    break;
 | 
			
		||||
                case 'syntaxplugins':
 | 
			
		||||
                    $this->renderPlugins('syntax', $renderer);
 | 
			
		||||
                    break;
 | 
			
		||||
                case 'adminplugins':
 | 
			
		||||
                    $this->renderPlugins('admin', $renderer);
 | 
			
		||||
                    break;
 | 
			
		||||
                case 'actionplugins':
 | 
			
		||||
                    $this->renderPlugins('action', $renderer);
 | 
			
		||||
                    break;
 | 
			
		||||
                case 'rendererplugins':
 | 
			
		||||
                    $this->renderPlugins('renderer', $renderer);
 | 
			
		||||
                    break;
 | 
			
		||||
                case 'helperplugins':
 | 
			
		||||
                    $this->renderPlugins('helper', $renderer);
 | 
			
		||||
                    break;
 | 
			
		||||
                case 'authplugins':
 | 
			
		||||
                    $this->renderPlugins('auth', $renderer);
 | 
			
		||||
                    break;
 | 
			
		||||
                case 'remoteplugins':
 | 
			
		||||
                    $this->renderPlugins('remote', $renderer);
 | 
			
		||||
                    break;
 | 
			
		||||
                case 'helpermethods':
 | 
			
		||||
                    $this->renderHelperMethods($renderer);
 | 
			
		||||
                    break;
 | 
			
		||||
                case 'datetime':
 | 
			
		||||
                    $renderer->doc .= date('r');
 | 
			
		||||
                    break;
 | 
			
		||||
                default:
 | 
			
		||||
                    $renderer->doc .= "no info about ".htmlspecialchars($data[0]);
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * list all installed plugins
 | 
			
		||||
     *
 | 
			
		||||
     * uses some of the original renderer methods
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $type
 | 
			
		||||
     * @param Doku_Renderer_xhtml $renderer
 | 
			
		||||
     */
 | 
			
		||||
    protected function renderPlugins($type, Doku_Renderer_xhtml $renderer)
 | 
			
		||||
    {
 | 
			
		||||
        global $lang;
 | 
			
		||||
        $renderer->doc .= '<ul>';
 | 
			
		||||
 | 
			
		||||
        $plugins = plugin_list($type);
 | 
			
		||||
        $plginfo = array();
 | 
			
		||||
 | 
			
		||||
        // remove subparts
 | 
			
		||||
        foreach ($plugins as $p) {
 | 
			
		||||
            if (!$po = plugin_load($type, $p)) continue;
 | 
			
		||||
            list($name,/* $part */) = explode('_', $p, 2);
 | 
			
		||||
            $plginfo[$name] = $po->getInfo();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // list them
 | 
			
		||||
        foreach ($plginfo as $info) {
 | 
			
		||||
            $renderer->doc .= '<li><div class="li">';
 | 
			
		||||
            $renderer->externallink($info['url'], $info['name']);
 | 
			
		||||
            $renderer->doc .= ' ';
 | 
			
		||||
            $renderer->doc .= '<em>'.$info['date'].'</em>';
 | 
			
		||||
            $renderer->doc .= ' ';
 | 
			
		||||
            $renderer->doc .= $lang['by'];
 | 
			
		||||
            $renderer->doc .= ' ';
 | 
			
		||||
            $renderer->emaillink($info['email'], $info['author']);
 | 
			
		||||
            $renderer->doc .= '<br />';
 | 
			
		||||
            $renderer->doc .= strtr(hsc($info['desc']), array("\n"=>"<br />"));
 | 
			
		||||
            $renderer->doc .= '</div></li>';
 | 
			
		||||
            unset($po);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $renderer->doc .= '</ul>';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * list all installed plugins
 | 
			
		||||
     *
 | 
			
		||||
     * uses some of the original renderer methods
 | 
			
		||||
     *
 | 
			
		||||
     * @param Doku_Renderer_xhtml $renderer
 | 
			
		||||
     */
 | 
			
		||||
    protected function renderHelperMethods(Doku_Renderer_xhtml $renderer)
 | 
			
		||||
    {
 | 
			
		||||
        $plugins = plugin_list('helper');
 | 
			
		||||
        foreach ($plugins as $p) {
 | 
			
		||||
            if (!$po = plugin_load('helper', $p)) continue;
 | 
			
		||||
 | 
			
		||||
            if (!method_exists($po, 'getMethods')) continue;
 | 
			
		||||
            $methods = $po->getMethods();
 | 
			
		||||
            $info = $po->getInfo();
 | 
			
		||||
 | 
			
		||||
            $hid = $this->addToToc($info['name'], 2, $renderer);
 | 
			
		||||
            $doc = '<h2><a name="'.$hid.'" id="'.$hid.'">'.hsc($info['name']).'</a></h2>';
 | 
			
		||||
            $doc .= '<div class="level2">';
 | 
			
		||||
            $doc .= '<p>'.strtr(hsc($info['desc']), array("\n"=>"<br />")).'</p>';
 | 
			
		||||
            $doc .= '<pre class="code">$'.$p." = plugin_load('helper', '".$p."');</pre>";
 | 
			
		||||
            $doc .= '</div>';
 | 
			
		||||
            foreach ($methods as $method) {
 | 
			
		||||
                $title = '$'.$p.'->'.$method['name'].'()';
 | 
			
		||||
                $hid = $this->addToToc($title, 3, $renderer);
 | 
			
		||||
                $doc .= '<h3><a name="'.$hid.'" id="'.$hid.'">'.hsc($title).'</a></h3>';
 | 
			
		||||
                $doc .= '<div class="level3">';
 | 
			
		||||
                $doc .= '<div class="table"><table class="inline"><tbody>';
 | 
			
		||||
                $doc .= '<tr><th>Description</th><td colspan="2">'.$method['desc'].
 | 
			
		||||
                    '</td></tr>';
 | 
			
		||||
                if ($method['params']) {
 | 
			
		||||
                    $c = count($method['params']);
 | 
			
		||||
                    $doc .= '<tr><th rowspan="'.$c.'">Parameters</th><td>';
 | 
			
		||||
                    $params = array();
 | 
			
		||||
                    foreach ($method['params'] as $desc => $type) {
 | 
			
		||||
                        $params[] = hsc($desc).'</td><td>'.hsc($type);
 | 
			
		||||
                    }
 | 
			
		||||
                    $doc .= join('</td></tr><tr><td>', $params).'</td></tr>';
 | 
			
		||||
                }
 | 
			
		||||
                if ($method['return']) {
 | 
			
		||||
                    $doc .= '<tr><th>Return value</th><td>'.hsc(key($method['return'])).
 | 
			
		||||
                        '</td><td>'.hsc(current($method['return'])).'</td></tr>';
 | 
			
		||||
                }
 | 
			
		||||
                $doc .= '</tbody></table></div>';
 | 
			
		||||
                $doc .= '</div>';
 | 
			
		||||
            }
 | 
			
		||||
            unset($po);
 | 
			
		||||
 | 
			
		||||
            $renderer->doc .= $doc;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * lists all known syntax types and their registered modes
 | 
			
		||||
     *
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    protected function renderSyntaxTypes()
 | 
			
		||||
    {
 | 
			
		||||
        global $PARSER_MODES;
 | 
			
		||||
        $doc  = '';
 | 
			
		||||
 | 
			
		||||
        $doc .= '<div class="table"><table class="inline"><tbody>';
 | 
			
		||||
        foreach ($PARSER_MODES as $mode => $modes) {
 | 
			
		||||
            $doc .= '<tr>';
 | 
			
		||||
            $doc .= '<td class="leftalign">';
 | 
			
		||||
            $doc .= $mode;
 | 
			
		||||
            $doc .= '</td>';
 | 
			
		||||
            $doc .= '<td class="leftalign">';
 | 
			
		||||
            $doc .= join(', ', $modes);
 | 
			
		||||
            $doc .= '</td>';
 | 
			
		||||
            $doc .= '</tr>';
 | 
			
		||||
        }
 | 
			
		||||
        $doc .= '</tbody></table></div>';
 | 
			
		||||
        return $doc;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * lists all known syntax modes and their sorting value
 | 
			
		||||
     *
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    protected function renderSyntaxModes()
 | 
			
		||||
    {
 | 
			
		||||
        $modes = p_get_parsermodes();
 | 
			
		||||
 | 
			
		||||
        $compactmodes = array();
 | 
			
		||||
        foreach ($modes as $mode) {
 | 
			
		||||
            $compactmodes[$mode['sort']][] = $mode['mode'];
 | 
			
		||||
        }
 | 
			
		||||
        $doc  = '';
 | 
			
		||||
        $doc .= '<div class="table"><table class="inline"><tbody>';
 | 
			
		||||
 | 
			
		||||
        foreach ($compactmodes as $sort => $modes) {
 | 
			
		||||
            $rowspan = '';
 | 
			
		||||
            if (count($modes) > 1) {
 | 
			
		||||
                $rowspan = ' rowspan="'.count($modes).'"';
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            foreach ($modes as $index => $mode) {
 | 
			
		||||
                $doc .= '<tr>';
 | 
			
		||||
                $doc .= '<td class="leftalign">';
 | 
			
		||||
                $doc .= $mode;
 | 
			
		||||
                $doc .= '</td>';
 | 
			
		||||
 | 
			
		||||
                if ($index === 0) {
 | 
			
		||||
                    $doc .= '<td class="rightalign" '.$rowspan.'>';
 | 
			
		||||
                    $doc .= $sort;
 | 
			
		||||
                    $doc .= '</td>';
 | 
			
		||||
                }
 | 
			
		||||
                $doc .= '</tr>';
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $doc .= '</tbody></table></div>';
 | 
			
		||||
        return $doc;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Adds a TOC item
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $text
 | 
			
		||||
     * @param int $level
 | 
			
		||||
     * @param Doku_Renderer_xhtml $renderer
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    protected function addToToc($text, $level, Doku_Renderer_xhtml $renderer)
 | 
			
		||||
    {
 | 
			
		||||
        global $conf;
 | 
			
		||||
 | 
			
		||||
        $hid = '';
 | 
			
		||||
        if (($level >= $conf['toptoclevel']) && ($level <= $conf['maxtoclevel'])) {
 | 
			
		||||
            $hid  = $renderer->_headerToLink($text, true);
 | 
			
		||||
            $renderer->toc[] = array(
 | 
			
		||||
                'hid'   => $hid,
 | 
			
		||||
                'title' => $text,
 | 
			
		||||
                'type'  => 'ul',
 | 
			
		||||
                'level' => $level - $conf['toptoclevel'] + 1
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
        return $hid;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//Setup VIM: ex: et ts=4 :
 | 
			
		||||
		Reference in New Issue
	
	Block a user