diff --git a/administrator/components/com_admin/script.php b/administrator/components/com_admin/script.php
index 6891989e1ffbb..b770e02e1bdfe 100644
--- a/administrator/components/com_admin/script.php
+++ b/administrator/components/com_admin/script.php
@@ -287,7 +287,6 @@ protected function updateManifestCaches()
array('module', 'mod_quickicon', '', 1),
array('module', 'mod_stats_admin', '', 1),
array('module', 'mod_status', '', 1),
- array('module', 'mod_submenu', '', 1),
array('module', 'mod_title', '', 1),
array('module', 'mod_toolbar', '', 1),
array('module', 'mod_multilangstatus', '', 1),
diff --git a/administrator/components/com_admin/sql/updates/mysql/4.0.0-2016-10-03.sql b/administrator/components/com_admin/sql/updates/mysql/4.0.0-2016-10-03.sql
new file mode 100644
index 0000000000000..d7238a044ac83
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/mysql/4.0.0-2016-10-03.sql
@@ -0,0 +1,3 @@
+DELETE FROM `#__assets` WHERE `id` = 47;
+
+DELETE FROM `#__extensions` WHERE `name` = ''mod_submenu'';
diff --git a/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2016-10-03.sql b/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2016-10-03.sql
new file mode 100644
index 0000000000000..4977e9437e93d
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2016-10-03.sql
@@ -0,0 +1,3 @@
+DELETE FROM `#__assets` WHERE `id` = 47;
+
+DELETE FROM "#__extensions" WHERE "name" = "mod_submenu";
diff --git a/administrator/includes/helper.php b/administrator/includes/helper.php
deleted file mode 100644
index 717944d386766..0000000000000
--- a/administrator/includes/helper.php
+++ /dev/null
@@ -1,56 +0,0 @@
-input->get('option'));
-
- $user = $app->getIdentity();
-
- if (!$user)
- {
- $app->loadIdentity(JFactory::getUser());
-
- $user = $app->getIdentity();
- }
-
- if ($user->get('guest') || !$user->authorise('core.login.admin'))
- {
- $option = 'com_login';
- }
-
- if (empty($option))
- {
- $option = 'com_cpanel';
- }
-
- $app->input->set('option', $option);
-
- return $option;
- }
-}
diff --git a/administrator/includes/subtoolbar.php b/administrator/includes/subtoolbar.php
deleted file mode 100644
index eabdb4c62eac8..0000000000000
--- a/administrator/includes/subtoolbar.php
+++ /dev/null
@@ -1,144 +0,0 @@
- $label, 'name' => $name, 'options' => $options, 'noDefault' => $noDefault));
- }
-
- /**
- * Returns an array of all filters
- *
- * @return array
- *
- * @since 3.0
- * @deprecated 4.0 Use JHtmlSidebar::getFilters() instead.
- */
- public static function getFilters()
- {
- JLog::add('JSubMenuHelper::getFilters() is deprecated. Use JHtmlSidebar::getFilters() instead.', JLog::WARNING, 'deprecated');
-
- return self::$filters;
- }
-
- /**
- * Set value for the action attribute of the filter form
- *
- * @param string $action Value for the action attribute of the form
- *
- * @return void
- *
- * @since 3.0
- * @deprecated 4.0 Use JHtmlSidebar::setAction() instead.
- */
- public static function setAction($action)
- {
- JLog::add('JSubMenuHelper::setAction() is deprecated. Use JHtmlSidebar::setAction() instead.', JLog::WARNING, 'deprecated');
- self::$action = $action;
- }
-
- /**
- * Get value for the action attribute of the filter form
- *
- * @return string Value for the action attribute of the form
- *
- * @since 3.0
- * @deprecated 4.0 Use JHtmlSidebar::getAction() instead.
- */
- public static function getAction()
- {
- JLog::add('JSubMenuHelper::getAction() is deprecated. Use JHtmlSidebar::getAction() instead.', JLog::WARNING, 'deprecated');
-
- return self::$action;
- }
-}
diff --git a/administrator/index.php b/administrator/index.php
index 9f6a1180f1f41..a46b16e4fa44c 100644
--- a/administrator/index.php
+++ b/administrator/index.php
@@ -41,8 +41,6 @@
}
require_once JPATH_BASE . '/includes/framework.php';
-require_once JPATH_BASE . '/includes/helper.php';
-require_once JPATH_BASE . '/includes/toolbar.php';
// Set profiler start time and memory usage and mark afterLoad in the profiler.
JDEBUG ? JProfiler::getInstance('Application')->setStart($startTime, $startMem)->mark('afterLoad') : null;
diff --git a/administrator/modules/mod_submenu/mod_submenu.php b/administrator/modules/mod_submenu/mod_submenu.php
deleted file mode 100644
index 81ddb0e38a8ed..0000000000000
--- a/administrator/modules/mod_submenu/mod_submenu.php
+++ /dev/null
@@ -1,24 +0,0 @@
-input->getBool('hidemainmenu');
-
-if ($displayMenu || $displayFilters)
-{
- require JModuleHelper::getLayoutPath('mod_submenu', $params->get('layout', 'default'));
-}
diff --git a/administrator/modules/mod_submenu/mod_submenu.xml b/administrator/modules/mod_submenu/mod_submenu.xml
deleted file mode 100644
index 5f4a88eb52d4c..0000000000000
--- a/administrator/modules/mod_submenu/mod_submenu.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
- mod_submenu
- Joomla! Project
- Feb 2006
- Copyright (C) 2005 - 2016 Open Source Matters. All rights reserved.
- GNU General Public License version 2 or later; see LICENSE.txt
- admin@joomla.org
- www.joomla.org
- 3.0.0
- MOD_SUBMENU_XML_DESCRIPTION
-
- mod_submenu.php
- tmpl
-
-
- en-GB.mod_submenu.ini
- en-GB.mod_submenu.sys.ini
-
-
-
-
-
-
-
-
diff --git a/administrator/modules/mod_submenu/tmpl/default.php b/administrator/modules/mod_submenu/tmpl/default.php
deleted file mode 100644
index d18a17ef2fd32..0000000000000
--- a/administrator/modules/mod_submenu/tmpl/default.php
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
diff --git a/installation/sql/mysql/joomla.sql b/installation/sql/mysql/joomla.sql
index 6304c3c8d2fbb..60a53750e2bf9 100644
--- a/installation/sql/mysql/joomla.sql
+++ b/installation/sql/mysql/joomla.sql
@@ -75,7 +75,6 @@ INSERT INTO `#__assets` (`id`, `parent_id`, `lft`, `rgt`, `level`, `name`, `titl
(44, 18, 52, 53, 2, 'com_modules.module.9', 'Quick Icons', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
(45, 18, 54, 55, 2, 'com_modules.module.10', 'Logged-in Users', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
(46, 18, 56, 57, 2, 'com_modules.module.12', 'Admin Menu', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(47, 18, 58, 59, 2, 'com_modules.module.13', 'Admin Submenu', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
(48, 18, 60, 61, 2, 'com_modules.module.14', 'User Status', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
(49, 18, 62, 63, 2, 'com_modules.module.15', 'Title', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
(50, 18, 64, 65, 2, 'com_modules.module.16', 'Login Form', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
@@ -550,7 +549,6 @@ INSERT INTO `#__extensions` (`extension_id`, `name`, `type`, `element`, `folder`
(307, 'mod_popular', 'module', 'mod_popular', '', 1, 1, 1, 0, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0),
(308, 'mod_quickicon', 'module', 'mod_quickicon', '', 1, 1, 1, 1, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0),
(309, 'mod_status', 'module', 'mod_status', '', 1, 1, 1, 0, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0),
-(310, 'mod_submenu', 'module', 'mod_submenu', '', 1, 1, 1, 0, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0),
(311, 'mod_title', 'module', 'mod_title', '', 1, 1, 1, 0, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0),
(312, 'mod_toolbar', 'module', 'mod_toolbar', '', 1, 1, 1, 1, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0),
(313, 'mod_multilangstatus', 'module', 'mod_multilangstatus', '', 1, 1, 1, 0, '', '{"cache":"0"}', '', '', 0, '0000-00-00 00:00:00', 0, 0),
diff --git a/installation/sql/postgresql/joomla.sql b/installation/sql/postgresql/joomla.sql
index 1596406091599..a01618e788aa1 100644
--- a/installation/sql/postgresql/joomla.sql
+++ b/installation/sql/postgresql/joomla.sql
@@ -73,7 +73,6 @@ INSERT INTO "#__assets" ("id", "parent_id", "lft", "rgt", "level", "name", "titl
(44, 18, 52, 53, 2, 'com_modules.module.9', 'Quick Icons', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
(45, 18, 54, 55, 2, 'com_modules.module.10', 'Logged-in Users', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
(46, 18, 56, 57, 2, 'com_modules.module.12', 'Admin Menu', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(47, 18, 58, 59, 2, 'com_modules.module.13', 'Admin Submenu', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
(48, 18, 60, 61, 2, 'com_modules.module.14', 'User Status', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
(49, 18, 62, 63, 2, 'com_modules.module.15', 'Title', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
(50, 18, 64, 65, 2, 'com_modules.module.16', 'Login Form', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
@@ -547,7 +546,6 @@ INSERT INTO "#__extensions" ("extension_id", "name", "type", "element", "folder"
(307, 'mod_popular', 'module', 'mod_popular', '', 1, 1, 1, 0, '', '', '', '', 0, '1970-01-01 00:00:00', 0, 0),
(308, 'mod_quickicon', 'module', 'mod_quickicon', '', 1, 1, 1, 1, '', '', '', '', 0, '1970-01-01 00:00:00', 0, 0),
(309, 'mod_status', 'module', 'mod_status', '', 1, 1, 1, 0, '', '', '', '', 0, '1970-01-01 00:00:00', 0, 0),
-(310, 'mod_submenu', 'module', 'mod_submenu', '', 1, 1, 1, 0, '', '', '', '', 0, '1970-01-01 00:00:00', 0, 0),
(311, 'mod_title', 'module', 'mod_title', '', 1, 1, 1, 0, '', '', '', '', 0, '1970-01-01 00:00:00', 0, 0),
(312, 'mod_toolbar', 'module', 'mod_toolbar', '', 1, 1, 1, 1, '', '', '', '', 0, '1970-01-01 00:00:00', 0, 0),
(313, 'mod_multilangstatus', 'module', 'mod_multilangstatus', '', 1, 1, 1, 0, '', '{"cache":"0"}', '', '', 0, '1970-01-01 00:00:00', 0, 0),
diff --git a/libraries/cms/application/administrator.php b/libraries/cms/application/administrator.php
index c731da906037c..3acc70a0b4410 100644
--- a/libraries/cms/application/administrator.php
+++ b/libraries/cms/application/administrator.php
@@ -63,7 +63,7 @@ public function dispatch($component = null)
{
if ($component === null)
{
- $component = JAdministratorHelper::findOption();
+ $component = $this->findOption();
}
// Load the document to the API
@@ -459,4 +459,38 @@ protected function route()
JPluginHelper::importPlugin('system');
$this->triggerEvent('onAfterRoute');
}
+
+ /**
+ * Return the application option string [main component].
+ *
+ * @return string The component to access.
+ *
+ * @since __DEPLOY_VERSION__
+ */
+ public function findOption()
+ {
+ $app = JFactory::getApplication();
+ $option = strtolower($app->input->get('option'));
+ $user = $app->getIdentity();
+
+ if (!$user)
+ {
+ $app->loadIdentity(JFactory::getUser());
+ $user = $app->getIdentity();
+ }
+
+ if ($user->get('guest') || !$user->authorise('core.login.admin'))
+ {
+ $option = 'com_login';
+ }
+
+ if (empty($option))
+ {
+ $option = 'com_cpanel';
+ }
+
+ $app->input->set('option', $option);
+
+ return $option;
+ }
}
diff --git a/administrator/includes/toolbar.php b/libraries/cms/toolbar/helper.php
similarity index 99%
rename from administrator/includes/toolbar.php
rename to libraries/cms/toolbar/helper.php
index 9b27e2a4b35da..321a24d3f1ba6 100644
--- a/administrator/includes/toolbar.php
+++ b/libraries/cms/toolbar/helper.php
@@ -8,8 +8,6 @@
defined('_JEXEC') or die;
-JLoader::register('JSubMenuHelper', JPATH_BASE . '/includes/subtoolbar.php');
-
/**
* Utility class for the button bar.
*
diff --git a/tests/unit/suites/administrator/includes/JAdministratorHelperTest.php b/tests/unit/suites/administrator/includes/JAdministratorHelperTest.php
deleted file mode 100644
index d360c0c3ed5ab..0000000000000
--- a/tests/unit/suites/administrator/includes/JAdministratorHelperTest.php
+++ /dev/null
@@ -1,157 +0,0 @@
-object = new JErrorPage;
- $this->saveFactoryState();
-
- JFactory::$application = $this->getMockCmsApp();
- JFactory::$application->input = $this->getMockInput();
- $this->user = $this->getMock('JUser', array('get', 'authorise'));
-
- JFactory::$application->expects($this->once())
- ->method('getIdentity')
- ->will($this->returnValue($this->user));
- }
-
- /**
- * Tears down the fixture, for example, closes a network connection.
- * This method is called after a test is executed.
- */
- protected function tearDown()
- {
- $this->restoreFactoryState();
- unset($this->user);
- }
-
- /**
- * Tests the findOption() method simulating a guest.
- */
- public function testFindOptionGuest()
- {
- $this->user->expects($this->once())
- ->method('get')
- ->with($this->equalTo('guest'))
- ->willReturn(true);
-
- $this->user->expects($this->never())
- ->method('authorise');
-
- $this->assertEquals(
- 'com_login',
- JAdministratorHelper::findOption()
- );
-
- $this->assertEquals(
- 'com_login',
- JFactory::$application->input->get('option')
- );
- }
-
- /**
- * Tests the findOption() method simulating a user without login admin permissions.
- */
- public function testFindOptionCanNotLoginAdmin()
- {
- $this->user->expects($this->once())
- ->method('get')
- ->with($this->equalTo('guest'))
- ->willReturn(false);
-
- $this->user->expects($this->once())
- ->method('authorise')
- ->with($this->equalTo('core.login.admin'))
- ->willReturn(false);
-
- $this->assertEquals(
- 'com_login',
- JAdministratorHelper::findOption()
- );
-
- $this->assertEquals(
- 'com_login',
- JFactory::$application->input->get('option')
- );
- }
-
- /**
- * Tests the findOption() method simulating a user who is able to log in to admin.
- */
- public function testFindOptionCanLoginAdmin()
- {
- $this->user->expects($this->once())
- ->method('get')
- ->with($this->equalTo('guest'))
- ->willReturn(false);
-
- $this->user->expects($this->once())
- ->method('authorise')
- ->with($this->equalTo('core.login.admin'))
- ->willReturn(true);
-
- $this->assertEquals(
- 'com_cpanel',
- JAdministratorHelper::findOption()
- );
-
- $this->assertEquals(
- 'com_cpanel',
- JFactory::$application->input->get('option')
- );
- }
-
- /**
- * Tests the findOption() method simulating the option at a special value.
- */
- public function testFindOptionCanLoginAdminOptionSet()
- {
- $this->user->expects($this->once())
- ->method('get')
- ->with($this->equalTo('guest'))
- ->willReturn(false);
-
- $this->user->expects($this->once())
- ->method('authorise')
- ->with($this->equalTo('core.login.admin'))
- ->willReturn(false);
-
- JFactory::$application->input->set('option', 'foo');
-
- $this->assertEquals(
- 'com_login',
- JAdministratorHelper::findOption()
- );
-
- $this->assertEquals(
- 'com_login',
- JFactory::$application->input->get('option')
- );
- }
-}
diff --git a/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php b/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php
index a836624f529ae..050da2bb45b0d 100644
--- a/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php
+++ b/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php
@@ -280,4 +280,103 @@ public function testRender()
$this->assertEquals(array('JWeb Body'), TestReflection::getValue($this->class, 'response')->body);
}
+
+ /**
+ * Tests the findOption() method simulating a guest.
+ */
+ public function testFindOptionGuest()
+ {
+ $user = $this->getMock('JUser', array('get', 'authorise'));
+ $user->expects($this->once())
+ ->method('get')
+ ->with($this->equalTo('guest'))
+ ->willReturn(true);
+ $user->expects($this->never())
+ ->method('authorise');
+ $this->class->loadIdentity($user);
+ $this->assertEquals(
+ 'com_login',
+ $this->class->findOption()
+ );
+ $this->assertEquals(
+ 'com_login',
+ $this->class->input->get('option')
+ );
+ }
+
+ /**
+ * Tests the findOption() method simulating an user without login admin permissions.
+ */
+ public function testFindOptionCanNotLoginAdmin()
+ {
+ $user = $this->getMock('JUser', array('get', 'authorise'));
+ $user->expects($this->once())
+ ->method('get')
+ ->with($this->equalTo('guest'))
+ ->willReturn(false);
+ $user->expects($this->once())
+ ->method('authorise')
+ ->with($this->equalTo('core.login.admin'))
+ ->willReturn(false);
+ $this->class->loadIdentity($user);
+ $this->assertEquals(
+ 'com_login',
+ $this->class->findOption()
+ );
+ $this->assertEquals(
+ 'com_login',
+ $this->class->input->get('option')
+ );
+ }
+
+ /**
+ * Tests the findOption() method simulating an user who is able to log in to admin.
+ */
+ public function testFindOptionCanLoginAdmin()
+ {
+ $user = $this->getMock('JUser', array('get', 'authorise'));
+ $user->expects($this->once())
+ ->method('get')
+ ->with($this->equalTo('guest'))
+ ->willReturn(false);
+ $user->expects($this->once())
+ ->method('authorise')
+ ->with($this->equalTo('core.login.admin'))
+ ->willReturn(true);
+ $this->class->loadIdentity($user);
+ $this->assertEquals(
+ 'com_cpanel',
+ $this->class->findOption()
+ );
+ $this->assertEquals(
+ 'com_cpanel',
+ $this->class->input->get('option')
+ );
+ }
+
+ /**
+ * Tests the findOption() method simulating the option at a special value.
+ */
+ public function testFindOptionCanLoginAdminOptionSet()
+ {
+ $user = $this->getMock('JUser', array('get', 'authorise'));
+ $user->expects($this->once())
+ ->method('get')
+ ->with($this->equalTo('guest'))
+ ->willReturn(false);
+ $user->expects($this->once())
+ ->method('authorise')
+ ->with($this->equalTo('core.login.admin'))
+ ->willReturn(false);
+ $this->class->loadIdentity($user);
+ $this->class->input->set('option', 'foo');
+ $this->assertEquals(
+ 'com_login',
+ $this->class->findOption()
+ );
+ $this->assertEquals(
+ 'com_login',
+ JFactory::$application->input->get('option')
+ );
+ }
}
diff --git a/travisci-phpunit.xml b/travisci-phpunit.xml
index 36e0531c59a71..04aba90e9c446 100644
--- a/travisci-phpunit.xml
+++ b/travisci-phpunit.xml
@@ -21,9 +21,6 @@
tests/unit/suites/database
-
- tests/unit/suites/administrator
-
tests/unit/suites/finderIndexer