-
Notifications
You must be signed in to change notification settings - Fork 3
/
Registry.class.php
74 lines (55 loc) · 2.37 KB
/
Registry.class.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
/*
* This file is part of phynx.
* phynx is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
* phynx is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* 2007 - 2015, Rainer Furtmeier - [email protected]
*/
class Registry {
public static $pointers = array();
public static function setCallback($forPlugin, $methodToCall, $selector = "general"){
$used = BPS::getProperty("R".$forPlugin."S".$selector, "callbacks", "");
$methodToCall = str_replace(":", "###DP###", $methodToCall);
if(strpos($used, $methodToCall) !== false) return;
BPS::setProperty("R".$forPlugin."S".$selector, "callbacks", ($used != "" ? $used."%%" : "").$methodToCall);
}
public static function getCallbacks($forPlugin, $selector = "general", $skip = array()){
if(is_object($forPlugin) AND $forPlugin instanceof PersistentObject)
$forPlugin = $forPlugin->getClearClass();
if(is_object($forPlugin) AND !($forPlugin instanceof PersistentObject))
$forPlugin = get_class($forPlugin);
$used = BPS::getProperty("R".$forPlugin."S".$selector, "callbacks", null);
$used = str_replace("###DP###", ":", $used);
if($used == null)
return null;
$u = explode("%%", $used);
foreach($skip AS $s)
foreach($u AS $k => $e)
if(strpos($e, $s."::") === 0)
unset($u[$k]);
return $u;
}
public static function reset($forPlugin){
self::$pointers[$forPlugin] = 0;
}
public static function callNext($forPlugin, $selector = "general", $parameters = array(), $skip = array()){
if(!isset(self::$pointers[$forPlugin]))
self::$pointers[$forPlugin] = 0;
$callBacks = self::getCallbacks($forPlugin, $selector, $skip);
if(!isset($callBacks[self::$pointers[$forPlugin]]))
return null;
$method = explode("::", $callBacks[self::$pointers[$forPlugin]]);
self::$pointers[$forPlugin]++;
return Util::invokeStaticMethod($method[0], $method[1], $parameters);
}
}
?>