]> git.mxchange.org Git - friendica.git/blob - include/plugin.php
85b51edff506c5378db13f8fd8caf939a6e33c0e
[friendica.git] / include / plugin.php
1 <?php
2
3
4 // install and uninstall plugin
5 if (! function_exists('uninstall_plugin')){
6 function uninstall_plugin($plugin){
7         logger("Addons: uninstalling " . $plugin);
8         q("DELETE FROM `addon` WHERE `name` = '%s' LIMIT 1",
9                 dbesc($plugin)
10         );
11
12         @include_once('addon/' . $plugin . '/' . $plugin . '.php');
13         if(function_exists($plugin . '_uninstall')) {
14                 $func = $plugin . '_uninstall';
15                 $func();
16         }
17 }}
18
19 if (! function_exists('install_plugin')){
20 function install_plugin($plugin){
21         logger("Addons: installing " . $plugin);
22         $t = @filemtime('addon/' . $plugin . '/' . $plugin . '.php');
23         @include_once('addon/' . $plugin . '/' . $plugin . '.php');
24         if(function_exists($plugin . '_install')) {
25                 $func = $plugin . '_install';
26                 $func();
27                 
28                 $plugin_admin = (function_exists($plugin."_plugin_admin")?1:0);
29                 
30                 $r = q("INSERT INTO `addon` (`name`, `installed`, `timestamp`, `plugin_admin`) VALUES ( '%s', 1, %d , %d ) ",
31                         dbesc($plugin),
32                         intval($t),
33                         $plugin_admin
34                 );
35         }
36         else {
37                 logger("Addons: FAILED installing " . $plugin);
38         }
39
40 }}
41
42 // reload all updated plugins
43
44 if(! function_exists('reload_plugins')) {
45 function reload_plugins() {
46         $plugins = get_config('system','addon');
47         if(strlen($plugins)) {
48
49                 $r = q("SELECT * FROM `addon` WHERE `installed` = 1");
50                 if(count($r))
51                         $installed = $r;
52                 else
53                         $installed = array();
54
55                 $parr = explode(',',$plugins);
56                 if(count($parr)) {
57                         foreach($parr as $pl) {
58                                 $pl = trim($pl);
59
60                                 $fname = 'addon/' . $pl . '/' . $pl . '.php';
61                                 
62                                 if(file_exists($fname)) {
63                                         $t = @filemtime($fname);
64                                         foreach($installed as $i) {
65                                                 if(($i['name'] == $pl) && ($i['timestamp'] != $t)) {    
66                                                         logger('Reloading plugin: ' . $i['name']);
67                                                         @include_once($fname);
68
69                                                         if(function_exists($pl . '_uninstall')) {
70                                                                 $func = $pl . '_uninstall';
71                                                                 $func();
72                                                         }
73                                                         if(function_exists($pl . '_install')) {
74                                                                 $func = $pl . '_install';
75                                                                 $func();
76                                                         }
77                                                         q("UPDATE `addon` SET `timestamp` = %d WHERE `id` = %d LIMIT 1",
78                                                                 intval($t),
79                                                                 intval($i['id'])
80                                                         );
81                                                 }
82                                         }
83                                 }
84                         }
85                 }
86         }
87 }}
88                                 
89
90
91
92
93 if(! function_exists('register_hook')) {
94 function register_hook($hook,$file,$function) {
95
96         $r = q("SELECT * FROM `hook` WHERE `hook` = '%s' AND `file` = '%s' AND `function` = '%s' LIMIT 1",
97                 dbesc($hook),
98                 dbesc($file),
99                 dbesc($function)
100         );
101         if(count($r))
102                 return true;
103
104         $r = q("INSERT INTO `hook` (`hook`, `file`, `function`) VALUES ( '%s', '%s', '%s' ) ",
105                 dbesc($hook),
106                 dbesc($file),
107                 dbesc($function)
108         );
109         return $r;
110 }}
111
112 if(! function_exists('unregister_hook')) {
113 function unregister_hook($hook,$file,$function) {
114
115         $r = q("DELETE FROM `hook` WHERE `hook` = '%s' AND `file` = '%s' AND `function` = '%s' LIMIT 1",
116                 dbesc($hook),
117                 dbesc($file),
118                 dbesc($function)
119         );
120         return $r;
121 }}
122
123
124 if(! function_exists('load_hooks')) {
125 function load_hooks() {
126         $a = get_app();
127         $a->hooks = array();
128         $r = q("SELECT * FROM `hook` WHERE 1");
129         if(count($r)) {
130                 foreach($r as $rr) {
131                         $a->hooks[] = array($rr['hook'], $rr['file'], $rr['function']);
132                 }
133         }
134 }}
135
136
137 if(! function_exists('call_hooks')) {
138 function call_hooks($name, &$data = null) {
139         $a = get_app();
140
141         if(count($a->hooks)) {
142                 foreach($a->hooks as $hook) {
143                         if($hook[HOOK_HOOK] === $name) {
144                                 @include_once($hook[HOOK_FILE]);
145                                 if(function_exists($hook[HOOK_FUNCTION])) {
146                                         $func = $hook[HOOK_FUNCTION];
147                                         $func($a,$data);
148                                 }
149                         }
150                 }
151         }
152 }}
153
154
155 /*
156  * parse plugin comment in search of plugin infos.
157  * like
158  *      
159  *       * Name: Plugin
160  *   * Description: A plugin which plugs in
161  *       * Version: 1.2.3
162  *   * Author: John <profile url>
163  *   * Author: Jane <email>
164  *   *
165  */
166
167 if (! function_exists('get_plugin_info')){
168 function get_plugin_info($plugin){
169         if (!is_file("addon/$plugin/$plugin.php")) return false;
170         
171         $f = file_get_contents("addon/$plugin/$plugin.php");
172         $r = preg_match("|/\*.*\*/|msU", $f, $m);
173         
174         $info=Array(
175                 'name' => $plugin,
176                 'description' => "",
177                 'author' => array(),
178                 'version' => ""
179         );
180         
181         if ($r){
182                 $ll = explode("\n", $m[0]);
183                 foreach( $ll as $l ) {
184                         $l = trim($l,"\t\n\r */");
185                         if ($l!=""){
186                                 list($k,$v) = array_map("trim", explode(":",$l,2));
187                                 $k= strtolower($k);
188                                 if ($k=="author"){
189                                         $r=preg_match("|([^<]+)<([^>]+)>|", $v, $m);
190                                         if ($r) {
191                                                 $info['author'][] = array('name'=>$m[1], 'link'=>$m[2]);
192                                         } else {
193                                                 $info['author'][] = array('name'=>$v);
194                                         }
195                                 } else {
196                                         if (array_key_exists($k,$info)){
197                                                 $info[$k]=$v;
198                                         }
199                                 }
200                                 
201                         }
202                 }
203                 
204         }
205         return $info;
206 }}
207