Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F2528
bug4452.patch
Public
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Authored By
•
bzimport
Nov 21 2014, 8:59 PM
2014-11-21 20:59:52 (UTC+0)
Size
2 KB
Referenced Files
None
Subscribers
None
bug4452.patch
View Options
Index: Hooks.php
===================================================================
--- Hooks.php (revision 7)
+++ Hooks.php (working copy)
@@ -128,4 +128,111 @@
return true;
}
+
+
+/**
+ * Similar to wfRunHooks(), but only calls one.
+ * @param string $event The event to call.
+ * @param string $which The hook on that event to call.
+ */
+function wfCallHook($event, $which, $args = null) {
+
+ global $wgHooks;
+ $fname = 'wfCallHook';
+
+ if (!is_array($wgHooks)) {
+ wfDebugDieBacktrace("Global hooks array is not an array!\n");
+ return false;
+ }
+
+ if (!array_key_exists($event, $wgHooks)) {
+ return true;
+ }
+
+ if (!is_array($wgHooks[$event])) {
+ wfDebugDieBacktrace("Hooks array for event '$event' is not an array!\n");
+ return false;
+ }
+
+ if (isset($wgHooks[$event][$which]) && ($hook = $wgHooks[$event][$which])) {
+
+ $object = NULL;
+ $method = NULL;
+ $func = NULL;
+ $data = NULL;
+ $have_data = false;
+
+ /* $hook can be: a function, an object, an array of $function and $data,
+ * an array of just a function, an array of object and method, or an
+ * array of object, method, and data.
+ */
+
+ if (is_array($hook)) {
+ if (count($hook) < 1) {
+ wfDebugDieBacktrace("Empty array in hooks for " . $event . "\n");
+ } else if (is_object($hook[0])) {
+ $object =& $wgHooks[$event][$index][0];
+ if (count($hook) < 2) {
+ $method = "on" . $event;
+ } else {
+ $method = $hook[1];
+ if (count($hook) > 2) {
+ $data = $hook[2];
+ $have_data = true;
+ }
+ }
+ } else if (is_string($hook[0])) {
+ $func = $hook[0];
+ if (count($hook) > 1) {
+ $data = $hook[1];
+ $have_data = true;
+ }
+ } else {
+ var_dump( $wgHooks );
+ wfDebugDieBacktrace("Unknown datatype in hooks for " . $event . "\n");
+ }
+ } else if (is_string($hook)) { # functions look like strings, too
+ $func = $hook;
+ } else if (is_object($hook)) {
+ $object =& $wgHooks[$event][$index];
+ $method = "on" . $event;
+ } else {
+ wfDebugDieBacktrace("Unknown datatype in hooks for " . $event . "\n");
+ }
+
+ /* We put the first data element on, if needed. */
+
+ if ($have_data) {
+ $hook_args = array_merge(array($data), $args);
+ } else {
+ $hook_args = $args;
+ }
+
+
+ if ( isset( $object ) ) {
+ $func = get_class( $object ) . '::' . $method;
+ }
+
+ /* Call the hook. */
+ wfProfileIn( $func );
+ if( isset( $object ) ) {
+ $retval = call_user_func_array(array(&$object, $method), $hook_args);
+ } else {
+ $retval = call_user_func_array($func, $hook_args);
+ }
+ wfProfileOut( $func );
+
+ /* String return is an error; false return means stop processing. */
+
+ if (is_string($retval)) {
+ global $wgOut;
+ $wgOut->fatalError($retval);
+ return false;
+ } else if (!$retval) {
+ return false;
+ }
+ }
+
+ return true;
+}
?>
File Metadata
Details
Attached
Mime Type
text/x-diff
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2104
Default Alt Text
bug4452.patch (2 KB)
Attached To
Mode
T6452: Adding a "handles" key to hooking code
Attached
Detach File
Event Timeline
Log In to Comment