aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb/install/helper/navigation/navigation_provider.php
diff options
context:
space:
mode:
authorCHItA <mate.bartus@gmail.com>2015-06-13 15:35:19 +0200
committerMate Bartus <mate.bartus@gmail.com>2015-07-08 01:28:03 +0200
commit3dcaa48850bf823b238391fbf9c3f085092010bc (patch)
tree52101d29d4774e88d2cf6c3a249e435c06b8d6ba /phpBB/phpbb/install/helper/navigation/navigation_provider.php
parentdb4cfa7df62d5911bc5a0edcdc59236c39aede08 (diff)
downloadforums-3dcaa48850bf823b238391fbf9c3f085092010bc.tar
forums-3dcaa48850bf823b238391fbf9c3f085092010bc.tar.gz
forums-3dcaa48850bf823b238391fbf9c3f085092010bc.tar.bz2
forums-3dcaa48850bf823b238391fbf9c3f085092010bc.tar.xz
forums-3dcaa48850bf823b238391fbf9c3f085092010bc.zip
[ticket/13740] Move installer files to phpbb/install directory
PHPBB3-13740
Diffstat (limited to 'phpBB/phpbb/install/helper/navigation/navigation_provider.php')
-rw-r--r--phpBB/phpbb/install/helper/navigation/navigation_provider.php115
1 files changed, 115 insertions, 0 deletions
diff --git a/phpBB/phpbb/install/helper/navigation/navigation_provider.php b/phpBB/phpbb/install/helper/navigation/navigation_provider.php
new file mode 100644
index 0000000000..1f58cbea83
--- /dev/null
+++ b/phpBB/phpbb/install/helper/navigation/navigation_provider.php
@@ -0,0 +1,115 @@
+<?php
+/**
+ *
+ * This file is part of the phpBB Forum Software package.
+ *
+ * @copyright (c) phpBB Limited <https://www.phpbb.com>
+ * @license GNU General Public License, version 2 (GPL-2.0)
+ *
+ * For full copyright and license information, please see
+ * the docs/CREDITS.txt file.
+ *
+ */
+
+namespace phpbb\install\helper\navigation;
+
+use phpbb\di\service_collection;
+
+/**
+ * Installers navigation provider
+ */
+class navigation_provider
+{
+ /**
+ * @var array
+ */
+ private $menu_collection;
+
+ /**
+ * Constructor
+ *
+ * @param service_collection $plugins
+ */
+ public function __construct(service_collection $plugins)
+ {
+ $this->menu_collection = array();
+
+ foreach ($plugins as $plugin => $plugin_instance)
+ {
+ $this->register($plugin_instance);
+ }
+ }
+
+ /**
+ * Returns navigation array
+ *
+ * @return array
+ */
+ public function get()
+ {
+ return $this->menu_collection;
+ }
+
+ /**
+ * Registers a navigation provider's navigation items
+ *
+ * @param navigation_interface $navigation
+ */
+ public function register(navigation_interface $navigation)
+ {
+ $nav_arry = $navigation->get();
+ $this->merge($nav_arry, $this->menu_collection);
+ }
+
+ /**
+ * Set a property in the navigation array
+ *
+ * @param array $nav_element Array to the navigation elem
+ * @param array $property_array Array with the properties to set
+ */
+ public function set_nav_property($nav_element, $property_array)
+ {
+ $array_pointer = array();
+ $array_root_pointer = &$array_pointer;
+ foreach ($nav_element as $array_path)
+ {
+ $array_pointer[$array_path] = array();
+ $array_pointer = &$array_pointer[$array_path];
+ }
+
+ $array_pointer = $property_array;
+
+ $this->merge($array_root_pointer, $this->menu_collection);
+ }
+
+ /**
+ * Recursive array merge
+ *
+ * This function is necessary to be able to replace the options of
+ * already set navigation items.
+ *
+ * @param array $array_to_merge
+ * @param array $array_to_merge_into
+ */
+ private function merge(&$array_to_merge, &$array_to_merge_into)
+ {
+ foreach ($array_to_merge as $key => $value)
+ {
+ if (isset($array_to_merge_into[$key]))
+ {
+ if (is_array($array_to_merge_into[$key]) && is_array($value))
+ {
+ $this->merge($value, $array_to_merge_into[$key]);
+ }
+ else
+ {
+ $array_to_merge_into[$key] = $value;
+ }
+ }
+ else
+ {
+ $array_to_merge_into[$key] = $value;
+ }
+ }
+ }
+}