1 <?php
2 /**
3  * DokuWiki Plugin htmlmetatags (Action Component)
4  *
5  * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
6  * @author  Heiko Heinz <heiko.heinz@soft2c.de>
7  * @author  Eric Maeker <eric@maeker.fr>
8  */
9 
10 // must be run within Dokuwiki
11 if(!defined('DOKU_INC')) die();
12 
13 class action_plugin_htmlmetatags extends DokuWiki_Action_Plugin {
14 
15     /**
16      * Registers a callback function for a given event
17      *
18      * @param Doku_Event_Handler $controller DokuWiki's event controller object
19      * @return void
20      */
21     public function register(Doku_Event_Handler $controller) {
22 
23        // $controller->register_hook('htmlmetatags', 'FIXME', $this, 'handle_htmlmetatags');
24        $controller->register_hook('TPL_METAHEADER_OUTPUT','BEFORE',$this,'handle_htmlmetatags',array());
25 
26     }
27 /*
28     public function searchname($namematch, $meta){
29     	for ($i=0;$i<sizeof($meta);$i++) {
30     		$a = $meta[$i];
31     		if($namematch == $a['name']){
32     			return $a;
33     		}
34     	}
35 
36     	return null;
37     }
38   */
39 
40     function replaceMeta(&$pageArray, $name, $value) {
41       dbg($name .' - '. $value, TRUE); // string representation
42     // Override dokuwiki default meta tags
43       $found = False;
44       foreach($pageArray['meta'] as $k => $v) {
45         if ($v["name"] == $name) {
46           $v["content"] = $value;
47           $pageArray['meta'][$k] = $v;
48           $found = True;
49         }
50       }
51       // If meta not set, add it as name or property
52       if (!$found) {
53         if (strpos($name, ':') !== false)
54           $pageArray['meta'][] = array("property" => $name, "content" => $value);
55         else
56           $pageArray['meta'][] = array("name" => $name, "content" => $value);
57       }
58     }
59 
60 
61     /**
62      * [Custom event handler which performs action]
63      * Prints keywords to the meta header
64      *
65      * @param Doku_Event $event  event object by reference
66      * @param mixed      $param  [the parameters passed as fifth argument to register_hook() when this
67      *                           handler was registered]
68      * @return void
69      */
70     public function handle_htmlmetatags(Doku_Event &$event, $param) {
71 
72       global $ID;
73       if (empty($event->data)) return; // nothing to do for us
74 
75       $metadata = p_get_metadata($ID);
76 
77       $a = $metadata["htmlmetatags"] ?? '';
78       if(empty($a)) return;
79 
80       foreach(array_keys($a) as $cur_key) {
81         $this->replaceMeta($event->data, $cur_key, $a[$cur_key]);
82       }
83     }
84 
85 }
86 
87 // vim:ts=4:sw=4:et:
88