Hooks now have a 'priority' value, default to 0.

The hooks are retrieved from the database by descending priority.

As a result they are run in the same order.
This commit is contained in:
Domovoy 2012-07-23 15:35:31 +02:00
parent 96c47a6577
commit d6c600ce11

View file

@ -111,7 +111,7 @@ function reload_plugins() {
if(! function_exists('register_hook')) { if(! function_exists('register_hook')) {
function register_hook($hook,$file,$function) { function register_hook($hook,$file,$function,$priority=0) {
$r = q("SELECT * FROM `hook` WHERE `hook` = '%s' AND `file` = '%s' AND `function` = '%s' LIMIT 1", $r = q("SELECT * FROM `hook` WHERE `hook` = '%s' AND `file` = '%s' AND `function` = '%s' LIMIT 1",
dbesc($hook), dbesc($hook),
@ -121,10 +121,11 @@ function register_hook($hook,$file,$function) {
if(count($r)) if(count($r))
return true; return true;
$r = q("INSERT INTO `hook` (`hook`, `file`, `function`) VALUES ( '%s', '%s', '%s' ) ", $r = q("INSERT INTO `hook` (`hook`, `file`, `function`, `priority`) VALUES ( '%s', '%s', '%s', '%s' ) ",
dbesc($hook), dbesc($hook),
dbesc($file), dbesc($file),
dbesc($function) dbesc($function),
dbesc($priority)
); );
return $r; return $r;
}} }}
@ -145,7 +146,7 @@ if(! function_exists('load_hooks')) {
function load_hooks() { function load_hooks() {
$a = get_app(); $a = get_app();
$a->hooks = array(); $a->hooks = array();
$r = q("SELECT * FROM `hook` WHERE 1"); $r = q("SELECT * FROM `hook` WHERE 1 ORDER BY `priority` DESC");
if(count($r)) { if(count($r)) {
foreach($r as $rr) { foreach($r as $rr) {
if(! array_key_exists($rr['hook'],$a->hooks)) if(! array_key_exists($rr['hook'],$a->hooks))
@ -161,6 +162,7 @@ function call_hooks($name, &$data = null) {
$a = get_app(); $a = get_app();
if((is_array($a->hooks)) && (array_key_exists($name,$a->hooks))) { if((is_array($a->hooks)) && (array_key_exists($name,$a->hooks))) {
logger('call_hooks ' . print_r($a->hooks[$name],true) , LOGGER_DEBUG);
foreach($a->hooks[$name] as $hook) { foreach($a->hooks[$name] as $hook) {
@include_once($hook[0]); @include_once($hook[0]);
if(function_exists($hook[1])) { if(function_exists($hook[1])) {