1 <?php
2 /**
3  * Flattr Plugin
4  *
5  * Inserts a flattr button into the current wikipage
6  *
7  * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
8  * @author  Gina Haeussge <osd@foosel.net>
9  */
10 
11 if (!defined('DOKU_INC'))
12     define('DOKU_INC', realpath(dirname(__FILE__) . '/../../') . '/');
13 if (!defined('DOKU_PLUGIN'))
14     define('DOKU_PLUGIN', DOKU_INC . 'lib/plugins/');
15 require_once (DOKU_PLUGIN . 'syntax.php');
16 require_once (DOKU_INC . 'inc/template.php');
17 require_once (DOKU_INC . 'inc/pageutils.php');
18 
19 class syntax_plugin_flattr extends DokuWiki_Syntax_Plugin {
20 
21     function getType() {
22         return 'substition';
23     }
24 
25     function getPType() {
26         return 'block';
27     }
28 
29     function getSort() {
30         return 124;
31     }
32 
33     function connectTo($mode) {
34         $this->Lexer->addSpecialPattern('<flattr>.*?</flattr>', $mode, 'plugin_flattr');
35         $this->Lexer->addSpecialPattern('<flattr\s*/>', $mode, 'plugin_flattr');
36     }
37 
38     function handle($match, $state, $pos, Doku_Handler $handler) {
39         // do not allow the syntax in comments
40         if (isset($_REQUEST['comment']))
41             return false;
42 
43         $params = array();
44         $match = trim($match);
45 
46         //~~ parse the long syntax if given
47         $helper =& plugin_load('helper', 'flattr');
48         if (substr($match, 0, 8) == '<flattr>') {
49             $lines = explode("\n", substr($match, 8, -9));
50             if (trim($lines[0]) === '')
51                 array_shift($lines);
52             if (trim($lines[-1]) === '')
53                 array_pop($lines);
54 
55             foreach ($lines as $line) {
56                 $line = trim($line);
57                 list($name, $value) = explode('=', $line, 2);
58                 $name  = trim(strtolower($name));
59                 $value = trim($value);
60                 if (in_array($name, $helper->validParameters))
61                     $params[$name] = $value;
62             }
63         }
64 
65         //~~ validation
66         $helper->validateParameters($params);
67 
68         return ($params);
69     }
70 
71     /**
72      * Renders the flattr button. Currently only XHTML output is supported.
73      *
74      * @param $mode
75      * @param $renderer
76      * @param $indata
77      * @return unknown_type
78      */
79     function render($mode, Doku_Renderer $renderer, $data) {
80         global $ID;
81 
82         $params = $indata;
83         if ($mode == 'xhtml') {
84             //~~ insert default values for empty parameters
85             $helper =& plugin_load('helper', 'flattr');
86             $helper->insertMissingParameters($params);
87 
88             //~~ render
89             $renderer->doc .= $helper->getEmbedCode($params);
90             return true;
91         }
92     }
93 }
94 
95 //Setup VIM: ex: et ts=4 enc=utf-8 :
96