From: Jakob Sack Date: Tue, 29 Mar 2011 18:21:00 +0000 (+0200) Subject: added class OC_HOOK to base.php. It is in base.php because it is needed X-Git-Tag: v3.0~267^2~558^2~165 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=d3502315bda8e21e3daa29e5a4dbb2031e7ba522;p=nextcloud-server.git added class OC_HOOK to base.php. It is in base.php because it is needed very ofter and it is quite small. --- diff --git a/lib/base.php b/lib/base.php index 75914d61688..e38b76fff90 100644 --- a/lib/base.php +++ b/lib/base.php @@ -280,21 +280,75 @@ class OC_UTIL { die($error); } } +} - /** - * check if we need to use the layout optimized for smaller screen, currently only checks for iPhone/Android - * @return bool - */ - public static function hasSmallScreen(){ - $userAgent=strtolower($_SERVER['HTTP_USER_AGENT']); - if(strpos($userAgent,'android') or strpos($userAgent,'iphone') or strpos($userAgent,'ipod')){//todo, add support for more devices - return true; +/** + * This class manages the hooks. It basically provides two functions: adding + * slots and emitting signals. + */ +class OC_HOOK{ + static private $registered = array(); + + /** + * @brief connects a function to a hook + * @param $signalclass class name of emitter + * @param $signalname name of signal + * @param $slotclass class name of slot + * @param $slotname name of slot + * @returns true/false + * + * This function makes it very easy to connect to use hooks. + * + * TODO: write example + */ + public function connect( $signalclass, $signalname, $slotclass, $slotname ){ + // Cerate the data structure + if( !array_key_exists( $signalclass, self::$registered )){ + self::$registered[$signalclass] = array(); + } + if( !array_key_exists( $signalname, self::$registered[$signalclass] )){ + self::$registered[$signalclass][$signalname] = array(); + } + + // register hook + self::$registered[$signalclass][$signalname][] = array( + "class" => $slotclass, + "name" => $slotname ); + + // No chance for failure ;-) + return true; + } + + /** + * @brief emitts a signal + * @param $signalclass class name of emitter + * @param $signalname name of signal + * @param $params defautl: array() array with additional data + * @returns true if slots exists or false if not + * + * Emits a signal. To get data from the slot use references! + * + * TODO: write example + */ + public function emit( $signalclass, $signalname, $params = array()){ + // Return false if there are no slots + if( !array_key_exists( $signalclass, self::$registered )){ + return false; } - return false; + if( !array_key_exists( $signalname, self::$registered[$signalclass] )){ + return false; + } + + // Call all slots + foreach( $registered[$signalclass][$signalname] as $i ){ + call_user_func( array( $i["class"], $i["name"] ), $params ); + } + + // return true + return true; } } - /** * Class for database access *