xref: /plugin/struct/syntax/output.php (revision 257dd7f84a0ee31d91afee360b276b6d3552c1a5)
1*257dd7f8SAndreas Gohr<?php
2*257dd7f8SAndreas Gohr/**
3*257dd7f8SAndreas Gohr * DokuWiki Plugin struct (Syntax Component)
4*257dd7f8SAndreas Gohr *
5*257dd7f8SAndreas Gohr * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
6*257dd7f8SAndreas Gohr * @author  Andreas Gohr, Michael Große <dokuwiki@cosmocode.de>
7*257dd7f8SAndreas Gohr */
8*257dd7f8SAndreas Gohr
9*257dd7f8SAndreas Gohr// must be run within Dokuwiki
10*257dd7f8SAndreas Gohruse plugin\struct\meta\Assignments;
11*257dd7f8SAndreas Gohruse plugin\struct\meta\SchemaData;
12*257dd7f8SAndreas Gohr
13*257dd7f8SAndreas Gohrif (!defined('DOKU_INC')) die();
14*257dd7f8SAndreas Gohr
15*257dd7f8SAndreas Gohrclass syntax_plugin_struct_list extends DokuWiki_Syntax_Plugin {
16*257dd7f8SAndreas Gohr    /**
17*257dd7f8SAndreas Gohr     * @return string Syntax mode type
18*257dd7f8SAndreas Gohr     */
19*257dd7f8SAndreas Gohr    public function getType() {
20*257dd7f8SAndreas Gohr        return 'substition';
21*257dd7f8SAndreas Gohr    }
22*257dd7f8SAndreas Gohr    /**
23*257dd7f8SAndreas Gohr     * @return string Paragraph type
24*257dd7f8SAndreas Gohr     */
25*257dd7f8SAndreas Gohr    public function getPType() {
26*257dd7f8SAndreas Gohr        return 'block';
27*257dd7f8SAndreas Gohr    }
28*257dd7f8SAndreas Gohr    /**
29*257dd7f8SAndreas Gohr     * @return int Sort order - Low numbers go before high numbers
30*257dd7f8SAndreas Gohr     */
31*257dd7f8SAndreas Gohr    public function getSort() {
32*257dd7f8SAndreas Gohr        return 155;
33*257dd7f8SAndreas Gohr    }
34*257dd7f8SAndreas Gohr
35*257dd7f8SAndreas Gohr    /**
36*257dd7f8SAndreas Gohr     * Connect lookup pattern to lexer.
37*257dd7f8SAndreas Gohr     *
38*257dd7f8SAndreas Gohr     * @param string $mode Parser mode
39*257dd7f8SAndreas Gohr     */
40*257dd7f8SAndreas Gohr    public function connectTo($mode) {
41*257dd7f8SAndreas Gohr        $this->Lexer->addSpecialPattern('~~STRUCT~~',$mode,'plugin_struct_list');
42*257dd7f8SAndreas Gohr    }
43*257dd7f8SAndreas Gohr
44*257dd7f8SAndreas Gohr
45*257dd7f8SAndreas Gohr    /**
46*257dd7f8SAndreas Gohr     * Handle matches of the struct syntax
47*257dd7f8SAndreas Gohr     *
48*257dd7f8SAndreas Gohr     * @param string $match The match of the syntax
49*257dd7f8SAndreas Gohr     * @param int    $state The state of the handler
50*257dd7f8SAndreas Gohr     * @param int    $pos The position in the document
51*257dd7f8SAndreas Gohr     * @param Doku_Handler    $handler The handler
52*257dd7f8SAndreas Gohr     * @return array Data for the renderer
53*257dd7f8SAndreas Gohr     */
54*257dd7f8SAndreas Gohr    public function handle($match, $state, $pos, Doku_Handler $handler){
55*257dd7f8SAndreas Gohr        $data = array();
56*257dd7f8SAndreas Gohr
57*257dd7f8SAndreas Gohr        return $data;
58*257dd7f8SAndreas Gohr    }
59*257dd7f8SAndreas Gohr
60*257dd7f8SAndreas Gohr    /**
61*257dd7f8SAndreas Gohr     * Render xhtml output or metadata
62*257dd7f8SAndreas Gohr     *
63*257dd7f8SAndreas Gohr     * @param string         $mode      Renderer mode (supported modes: xhtml)
64*257dd7f8SAndreas Gohr     * @param Doku_Renderer  $R         The renderer
65*257dd7f8SAndreas Gohr     * @param array          $data      The data from the handler() function
66*257dd7f8SAndreas Gohr     * @return bool If rendering was successful.
67*257dd7f8SAndreas Gohr     */
68*257dd7f8SAndreas Gohr    public function render($mode, Doku_Renderer $R, $data) {
69*257dd7f8SAndreas Gohr        global $ID;
70*257dd7f8SAndreas Gohr        global $REV;
71*257dd7f8SAndreas Gohr
72*257dd7f8SAndreas Gohr        $assignments = new Assignments();
73*257dd7f8SAndreas Gohr        $tables = $assignments->getPageAssignments($ID);
74*257dd7f8SAndreas Gohr        if(!$tables) return true;
75*257dd7f8SAndreas Gohr
76*257dd7f8SAndreas Gohr        $R->table_open();
77*257dd7f8SAndreas Gohr        $R->tabletbody_open();
78*257dd7f8SAndreas Gohr        foreach($tables as $table) {
79*257dd7f8SAndreas Gohr            $schemadata = new SchemaData($table, $ID, $REV);
80*257dd7f8SAndreas Gohr            $data = $schemadata->getData();
81*257dd7f8SAndreas Gohr
82*257dd7f8SAndreas Gohr            foreach($data as $field) {
83*257dd7f8SAndreas Gohr                $R->tablerow_open();
84*257dd7f8SAndreas Gohr                $R->tableheader_open();
85*257dd7f8SAndreas Gohr                $R->cdata($field->getColumn()->getLabel());
86*257dd7f8SAndreas Gohr                $R->tableheader_close();
87*257dd7f8SAndreas Gohr                $R->tablecell_open();
88*257dd7f8SAndreas Gohr                $field->render($R, $mode);
89*257dd7f8SAndreas Gohr                $R->tablecell_close();
90*257dd7f8SAndreas Gohr                $R->tablerow_close();
91*257dd7f8SAndreas Gohr            }
92*257dd7f8SAndreas Gohr        }
93*257dd7f8SAndreas Gohr        $R->tabletbody_close();
94*257dd7f8SAndreas Gohr        $R->table_close();
95*257dd7f8SAndreas Gohr
96*257dd7f8SAndreas Gohr
97*257dd7f8SAndreas Gohr
98*257dd7f8SAndreas Gohr        if($mode != 'xhtml') return false;
99*257dd7f8SAndreas Gohr
100*257dd7f8SAndreas Gohr        return true;
101*257dd7f8SAndreas Gohr    }
102*257dd7f8SAndreas Gohr}
103*257dd7f8SAndreas Gohr
104*257dd7f8SAndreas Gohr// vim:ts=4:sw=4:et:
105