aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJakob Sack <kde@jakobsack.de>2011-03-29 20:21:00 +0200
committerJakob Sack <kde@jakobsack.de>2011-03-29 20:21:00 +0200
commitd3502315bda8e21e3daa29e5a4dbb2031e7ba522 (patch)
treeebd361fc8bcf6ada202ea6e9a10520566fe28c07 /lib
parente83d801c712a15f4a504a90f3e378edadd1cb3e3 (diff)
downloadnextcloud-server-d3502315bda8e21e3daa29e5a4dbb2031e7ba522.tar.gz
nextcloud-server-d3502315bda8e21e3daa29e5a4dbb2031e7ba522.zip
added class OC_HOOK to base.php. It is in base.php because it is needed
very ofter and it is quite small.
Diffstat (limited to 'lib')
-rw-r--r--lib/base.php74
1 files changed, 64 insertions, 10 deletions
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
*