]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add Navigation class to server container
authorBart Visscher <bartv@thisnet.nl>
Fri, 20 Sep 2013 15:34:33 +0000 (17:34 +0200)
committerBart Visscher <bartv@thisnet.nl>
Fri, 20 Sep 2013 18:20:01 +0000 (20:20 +0200)
lib/app.php
lib/navigationmanager.php [new file with mode: 0644]
lib/public/inavigationmanager.php [new file with mode: 0644]
lib/public/iservercontainer.php
lib/server.php

index d98af2dc29688956d2a531a5851973b2ccd65299..0ab1ee57f631654cffcde66de4040b78ac23550e 100644 (file)
@@ -27,8 +27,6 @@
  * upgrading and removing apps.
  */
 class OC_App{
-       static private $activeapp = '';
-       static private $navigation = array();
        static private $settingsForms = array();
        static private $adminForms = array();
        static private $personalForms = array();
@@ -271,7 +269,7 @@ class OC_App{
 
        /**
         * @brief adds an entry to the navigation
-        * @param string $data array containing the data
+        * @param array $data array containing the data
         * @return bool
         *
         * This function adds a new entry to the navigation visible to users. $data
@@ -287,11 +285,7 @@ class OC_App{
         *     the navigation. Lower values come first.
         */
        public static function addNavigationEntry( $data ) {
-               $data['active']=false;
-               if(!isset($data['icon'])) {
-                       $data['icon']='';
-               }
-               OC_App::$navigation[] = $data;
+               OC::$server->getNavigationManager()->add($data);
                return true;
        }
 
@@ -305,9 +299,7 @@ class OC_App{
         * highlighting the current position of the user.
         */
        public static function setActiveNavigationEntry( $id ) {
-               // load all the apps, to make sure we have all the navigation entries
-               self::loadApps();
-               self::$activeapp = $id;
+               OC::$server->getNavigationManager()->setActiveEntry($id);
                return true;
        }
 
@@ -315,15 +307,14 @@ class OC_App{
         * @brief Get the navigation entries for the $app
         * @param string $app app
         * @return array of the $data added with addNavigationEntry
+        *
+        * Warning: destroys the existing entries
         */
        public static function getAppNavigationEntries($app) {
                if(is_file(self::getAppPath($app).'/appinfo/app.php')) {
-                       $save = self::$navigation;
-                       self::$navigation = array();
+                       OC::$server->getNavigationManager()->clear();
                        require $app.'/appinfo/app.php';
-                       $app_entries = self::$navigation;
-                       self::$navigation = $save;
-                       return $app_entries;
+                       return OC::$server->getNavigationManager()->getAll();
                }
                return array();
        }
@@ -336,7 +327,7 @@ class OC_App{
         * setActiveNavigationEntry
         */
        public static function getActiveNavigationEntry() {
-               return self::$activeapp;
+               return OC::$server->getNavigationManager()->getActiveEntry();
        }
 
        /**
@@ -419,8 +410,9 @@ class OC_App{
 
        // This is private as well. It simply works, so don't ask for more details
        private static function proceedNavigation( $list ) {
+               $activeapp = OC::$server->getNavigationManager()->getActiveEntry();
                foreach( $list as &$naventry ) {
-                       if( $naventry['id'] == self::$activeapp ) {
+                       if( $naventry['id'] == $activeapp ) {
                                $naventry['active'] = true;
                        }
                        else{
@@ -572,7 +564,8 @@ class OC_App{
         *   - active: boolean, signals if the user is on this navigation entry
         */
        public static function getNavigation() {
-               $navigation = self::proceedNavigation( self::$navigation );
+               $entries = OC::$server->getNavigationManager()->getAll();
+               $navigation = self::proceedNavigation( $entries );
                return $navigation;
        }
 
diff --git a/lib/navigationmanager.php b/lib/navigationmanager.php
new file mode 100644 (file)
index 0000000..f032afd
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ *
+ */
+
+namespace OC;
+
+/**
+ * Manages the owncloud navigation
+ */
+class NavigationManager {
+       protected $entries = array();
+
+       /**
+        * Creates a new navigation entry
+        * @param array $entry containing: id, name, order, icon and href key
+        */
+       public function add(array $entry) {
+               $entry['active'] = false;
+               if(!isset($entry['icon'])) {
+                       $entry['icon'] = '';
+               }
+               $this->entries[] = $entry;
+       }
+
+       /**
+        * @brief returns all the added Menu entries
+        * @return array of the added entries
+        */
+       public function getAll() {
+               return $this->entries;
+       }
+
+       /**
+        * @brief removes all the entries
+        */
+       public function clear() {
+               $this->entries = array();
+       }
+
+       /**
+        * Sets the current navigation entry of the currently running app
+        * @param string $id of the app entry to activate (from added $entry)
+        */
+       public function setActiveEntry($id) {
+               $this->activeEntry = $id;
+       }
+
+       /**
+        * @brief gets the active Menu entry
+        * @return string id or empty string
+        *
+        * This function returns the id of the active navigation entry (set by
+        * setActiveEntry
+        */
+       public function getActiveEntry() {
+               return $this->activeEntry;
+       }
+}
diff --git a/lib/public/inavigationmanager.php b/lib/public/inavigationmanager.php
new file mode 100644 (file)
index 0000000..21744dd
--- /dev/null
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ * 
+ */
+
+namespace OCP;
+
+/**
+ * Manages the owncloud navigation
+ */
+interface INavigationManager {
+       /**
+        * Creates a new navigation entry
+        * @param array $entry containing: id, name, order, icon and href key
+        */
+       public function add(array $entry);
+
+       /**
+        * Sets the current navigation entry of the currently running app
+        * @param string $appId id of the app entry to activate (from added $entry)
+        */
+       public function setActiveEntry($appId);
+}
\ No newline at end of file
index 5481cd6ce6a9f0fca493e749985071643f0c703c..ebcc0fe4cd49a0bb686fc0ce882c7b5cf1a87008 100644 (file)
@@ -69,6 +69,11 @@ interface IServerContainer {
         */
        function getUserSession();
 
+       /**
+        * @return \OCP\INavigationManager
+        */
+       function getNavigationManager();
+
        /**
         * Returns an ICache instance
         *
index a5288fa148270060059647124202e7e8cdd41b43..13bda2dc30df9fd3c96187a674a202d677c8eaac 100644 (file)
@@ -97,6 +97,9 @@ class Server extends SimpleContainer implements IServerContainer {
                        });
                        return $userSession;
                });
+               $this->registerService('NavigationManager', function($c) {
+                       return new \OC\NavigationManager();
+               });
                $this->registerService('UserCache', function($c) {
                        return new UserCache();
                });
@@ -152,6 +155,13 @@ class Server extends SimpleContainer implements IServerContainer {
                return $this->query('UserSession');
        }
 
+       /**
+        * @return \OC\NavigationManager
+        */
+       function getNavigationManager() {
+               return $this->query('NavigationManager');
+       }
+
        /**
         * Returns an ICache instance
         *