diff --git a/administrator/components/com_admin/sql/updates/mysql/4.0.0-2018-07-02.sql b/administrator/components/com_admin/sql/updates/mysql/4.0.0-2018-07-02.sql
new file mode 100644
index 0000000000000..bfe42ef67760d
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/mysql/4.0.0-2018-07-02.sql
@@ -0,0 +1 @@
+UPDATE `#__extensions` SET `protected` = 1 WHERE `name` = 'plg_extension_namespacemap';
diff --git a/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2018-07-02.sql b/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2018-07-02.sql
new file mode 100644
index 0000000000000..c1604cb30bb3c
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2018-07-02.sql
@@ -0,0 +1 @@
+UPDATE "#__extensions" SET "protected" = 1 WHERE "name" = 'plg_extension_namespacemap';
diff --git a/administrator/language/en-GB/en-GB.plg_extension_namespacemap.ini b/administrator/language/en-GB/en-GB.plg_extension_namespacemap.ini
new file mode 100644
index 0000000000000..681f7eb2bbc68
--- /dev/null
+++ b/administrator/language/en-GB/en-GB.plg_extension_namespacemap.ini
@@ -0,0 +1,7 @@
+; Joomla! Project
+; Copyright (C) 2005 - 2018 Open Source Matters. All rights reserved.
+; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php
+; Note : All ini files need to be saved as UTF-8
+
+PLG_EXTENSION_NAMESPACEMAP="Extension - Namespace Updater"
+PLG_EXTENSION_NAMESPACEMAP_XML_DESCRIPTION="Automatically builds and updates the libraries\autoload_psr4.php file that is used to autoload extensions.
Warning! This plugin must be enabled it runs on extension install, update and deletion."
\ No newline at end of file
diff --git a/administrator/language/en-GB/en-GB.plg_extension_namespacemap.sys.ini b/administrator/language/en-GB/en-GB.plg_extension_namespacemap.sys.ini
new file mode 100644
index 0000000000000..681f7eb2bbc68
--- /dev/null
+++ b/administrator/language/en-GB/en-GB.plg_extension_namespacemap.sys.ini
@@ -0,0 +1,7 @@
+; Joomla! Project
+; Copyright (C) 2005 - 2018 Open Source Matters. All rights reserved.
+; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php
+; Note : All ini files need to be saved as UTF-8
+
+PLG_EXTENSION_NAMESPACEMAP="Extension - Namespace Updater"
+PLG_EXTENSION_NAMESPACEMAP_XML_DESCRIPTION="Automatically builds and updates the libraries\autoload_psr4.php file that is used to autoload extensions.
Warning! This plugin must be enabled it runs on extension install, update and deletion."
\ No newline at end of file
diff --git a/installation/sql/mysql/joomla.sql b/installation/sql/mysql/joomla.sql
index ec25ec5dd15b2..be4b8e9a19a07 100644
--- a/installation/sql/mysql/joomla.sql
+++ b/installation/sql/mysql/joomla.sql
@@ -661,7 +661,7 @@ INSERT INTO `#__extensions` (`extension_id`, `package_id`, `name`, `type`, `elem
(486, 0, 'plg_installer_webinstaller', 'plugin', 'webinstaller', 'installer', 0, 1, 1, 0, '', '{"tab_position":"1"}', 0, '0000-00-00 00:00:00', 0, 0, ''),
(487, 0, 'plg_system_httpheaders', 'plugin', 'httpheaders', 'system', 0, 1, 1, 0, '', '{}', 0, '0000-00-00 00:00:00', 0, 0, ''),
(488, 0, 'plg_sampledata_multilang', 'plugin', 'multilang', 'sampledata', 0, 1, 1, 0, '', '', 0, '0000-00-00 00:00:00', 0, 0, ''),
-(489, 0, 'plg_extension_namespacemap', 'plugin', 'namespacemap', 'extension', 0, 1, 1, 0, '', '{}', 0, '0000-00-00 00:00:00', 0, 0, ''),
+(489, 0, 'plg_extension_namespacemap', 'plugin', 'namespacemap', 'extension', 0, 1, 1, 1, '', '{}', 0, '0000-00-00 00:00:00', 0, 0, ''),
(509, 0, 'atum', 'template', 'atum', '', 1, 1, 1, 0, '', '', 0, '0000-00-00 00:00:00', 0, 0, ''),
(510, 0, 'cassiopeia', 'template', 'cassiopeia', '', 0, 1, 1, 0, '', '{"logoFile":"","fluidContainer":"0","sidebarLeftWidth":"3","sidebarRightWidth":"3"}', 0, '0000-00-00 00:00:00', 0, 0, ''),
(600, 802, 'English (en-GB)', 'language', 'en-GB', '', 0, 1, 1, 1, '', '', 0, '0000-00-00 00:00:00', 0, 0, ''),
diff --git a/installation/sql/postgresql/joomla.sql b/installation/sql/postgresql/joomla.sql
index cfc69fdc81bfc..dd27873d2895e 100644
--- a/installation/sql/postgresql/joomla.sql
+++ b/installation/sql/postgresql/joomla.sql
@@ -674,7 +674,7 @@ INSERT INTO "#__extensions" ("extension_id", "package_id", "name", "type", "elem
(486, 0, 'plg_installer_webinstaller', 'plugin', 'webinstaller', 'installer', 0, 1, 1, 0, '', '{"tab_position":"1"}', 0, '1970-01-01 00:00:00', 0, 0, ''),
(487, 0, 'plg_system_httpheaders', 'plugin', 'httpheaders', 'system', 0, 1, 1, 0, '', '{}', 0, '1970-01-01 00:00:00', 0, 0, ''),
(488, 0, 'plg_sampledata_multilang', 'plugin', 'multilang', 'sampledata', 0, 1, 1, 0, '', '', 0, '0000-00-00 00:00:00', 0, 0, ''),
-(489, 0, 'plg_extension_namespacemap', 'plugin', 'namespacemap', 'extension', 0, 1, 1, 0, '', '{}', 0, '1970-01-01 00:00:00', 0, 0, ''),
+(489, 0, 'plg_extension_namespacemap', 'plugin', 'namespacemap', 'extension', 0, 1, 1, 1, '', '{}', 0, '1970-01-01 00:00:00', 0, 0, ''),
(600, 802, 'English (en-GB)', 'language', 'en-GB', '', 0, 1, 1, 1, '', '', 0, '1970-01-01 00:00:00', 0, 0, ''),
(601, 802, 'English (en-GB)', 'language', 'en-GB', '', 1, 1, 1, 1, '', '', 0, '1970-01-01 00:00:00', 0, 0, ''),
(700, 0, 'files_joomla', 'file', 'joomla', '', 0, 1, 1, 1, '', '', 0, '1970-01-01 00:00:00', 0, 0, ''),
diff --git a/plugins/extension/namespacemap/namespacemap.php b/plugins/extension/namespacemap/namespacemap.php
index 20cfccf3cb73f..9444a12bb5be4 100644
--- a/plugins/extension/namespacemap/namespacemap.php
+++ b/plugins/extension/namespacemap/namespacemap.php
@@ -14,7 +14,7 @@
use Joomla\CMS\Installer\Installer as JInstaller;
/**
- * Joomla! namespace map updater.
+ * Joomla! namespace map creator / updater.
*
* @since 4.0.0
*/
@@ -33,9 +33,9 @@ class PlgExtensionNamespacemap extends CMSPlugin
* @param DispatcherInterface &$subject The object to observe
* @param array $config An optional associative array of configuration settings.
* Recognized key values include 'name', 'group', 'params', 'language'
- * (this list is not meant to be comprehensive).
+ * (this list is not meant to be comprehensive).
*
- * @since 1.5
+ * @since 4.0
*/
public function __construct(&$subject, $config = array())
{
@@ -45,10 +45,10 @@ public function __construct(&$subject, $config = array())
}
/**
- * Handle post extension install update sites
+ * Update / Create map on extension install
*
- * @param JInstaller $installer Installer object
- * @param integer $eid Extension Identifier
+ * @param JInstaller $installer Installer instance
+ * @param integer $eid Extension id
*
* @return void
*
@@ -56,15 +56,16 @@ public function __construct(&$subject, $config = array())
*/
public function onExtensionAfterInstall($installer, $eid)
{
- // Update / Create new map
+ // Check that we have a valid extension
if ($eid)
{
+ // Update / Create new map
$this->fileCreator->create();
}
}
/**
- * Handle extension uninstall
+ * Update / Create map on extension uninstall
*
* @param JInstaller $installer Installer instance
* @param integer $eid Extension id
@@ -76,8 +77,7 @@ public function onExtensionAfterInstall($installer, $eid)
*/
public function onExtensionAfterUninstall($installer, $eid, $removed)
{
- // If we have a valid extension ID and the extension was successfully uninstalled wipe out any
- // update sites for it
+ // Check that we have a valid extension and that it has been removed
if ($eid && $removed)
{
// Update / Create new map
@@ -86,10 +86,10 @@ public function onExtensionAfterUninstall($installer, $eid, $removed)
}
/**
- * After update of an extension
+ * Update map on extension update
*
- * @param JInstaller $installer Installer object
- * @param integer $eid Extension identifier
+ * @param JInstaller $installer Installer instance
+ * @param integer $eid Extension id
*
* @return void
*
@@ -97,25 +97,7 @@ public function onExtensionAfterUninstall($installer, $eid, $removed)
*/
public function onExtensionAfterUpdate($installer, $eid)
{
- if ($eid)
- {
- // Update / Create new map
- $this->fileCreator->create();
- }
- }
-
- /**
- * After update of an extension
- *
- * @param JInstaller $installer Installer object
- * @param integer $eid Extension identifier
- *
- * @return void
- *
- * @since 4.0.0
- */
- public function onExtensionAfterSave($installer, $eid)
- {
+ // Check that we have a valid extension
if ($eid)
{
// Update / Create new map