aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorBart Visscher <bartv@thisnet.nl>2013-09-20 17:34:33 +0200
committerBart Visscher <bartv@thisnet.nl>2013-09-20 20:20:01 +0200
commite3013c580108e6b0cc332ba14976f3ffb4b7b274 (patch)
treed89d9dc176abd69974ebc3d7c275e5bb67d8cb12 /lib
parentaa8a85f77d0c6705ee727d182e95d288ba7b7917 (diff)
downloadnextcloud-server-e3013c580108e6b0cc332ba14976f3ffb4b7b274.tar.gz
nextcloud-server-e3013c580108e6b0cc332ba14976f3ffb4b7b274.zip
Add Navigation class to server container
Diffstat (limited to 'lib')
-rw-r--r--lib/app.php31
-rw-r--r--lib/navigationmanager.php63
-rw-r--r--lib/public/inavigationmanager.php27
-rw-r--r--lib/public/iservercontainer.php5
-rw-r--r--lib/server.php10
5 files changed, 117 insertions, 19 deletions
diff --git a/lib/app.php b/lib/app.php
index d98af2dc296..0ab1ee57f63 100644
--- a/lib/app.php
+++ b/lib/app.php
@@ -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
index 00000000000..f032afd1fc4
--- /dev/null
+++ b/lib/navigationmanager.php
@@ -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
index 00000000000..21744dd1c21
--- /dev/null
+++ b/lib/public/inavigationmanager.php
@@ -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
diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index 5481cd6ce6a..ebcc0fe4cd4 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -70,6 +70,11 @@ interface IServerContainer {
function getUserSession();
/**
+ * @return \OCP\INavigationManager
+ */
+ function getNavigationManager();
+
+ /**
* Returns an ICache instance
*
* @return \OCP\ICache
diff --git a/lib/server.php b/lib/server.php
index a5288fa1482..13bda2dc30d 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -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();
});
@@ -153,6 +156,13 @@ class Server extends SimpleContainer implements IServerContainer {
}
/**
+ * @return \OC\NavigationManager
+ */
+ function getNavigationManager() {
+ return $this->query('NavigationManager');
+ }
+
+ /**
* Returns an ICache instance
*
* @return \OCP\ICache