]> source.dussan.org Git - nextcloud-server.git/commitdiff
added class OC_HOOK to base.php. It is in base.php because it is needed
authorJakob Sack <kde@jakobsack.de>
Tue, 29 Mar 2011 18:21:00 +0000 (20:21 +0200)
committerJakob Sack <kde@jakobsack.de>
Tue, 29 Mar 2011 18:21:00 +0000 (20:21 +0200)
very ofter and it is quite small.

lib/base.php

index 75914d61688016f6592cc426798c97ca8c86be9b..e38b76fff90ecae93c0f9f2730c40632c1193076 100644 (file)
@@ -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
  *