diff --git a/administrator/components/com_admin/script.php b/administrator/components/com_admin/script.php index 2f162b8c3ab3e..226620cf0fb92 100644 --- a/administrator/components/com_admin/script.php +++ b/administrator/components/com_admin/script.php @@ -1395,6 +1395,14 @@ public function deleteUnexistingFiles($dryRun = false, $suppressOutput = false) '/administrator/components/com_joomlaupdate/helpers/select.php', '/administrator/components/com_joomlaupdate/joomlaupdate.php', '/administrator/components/com_joomlaupdate/models/default.php', + '/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default.php', + '/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_nodownload.php', + '/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_noupdate.php', + '/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_preupdatecheck.php', + '/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_reinstall.php', + '/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_update.php', + '/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_updatemefirst.php', + '/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_upload.php', '/administrator/components/com_joomlaupdate/views/default/tmpl/complete.php', '/administrator/components/com_joomlaupdate/views/default/tmpl/default.php', '/administrator/components/com_joomlaupdate/views/default/tmpl/default.xml', diff --git a/administrator/components/com_installer/src/Model/WarningsModel.php b/administrator/components/com_installer/src/Model/WarningsModel.php index ba53b4664a971..395add43e35ad 100644 --- a/administrator/components/com_installer/src/Model/WarningsModel.php +++ b/administrator/components/com_installer/src/Model/WarningsModel.php @@ -95,7 +95,11 @@ public function getItems() return $messages; } - $messages = array(); + $messages = []; + + // 16MB + $minMemory = 16 * 1024 * 1024; + $file_uploads = ini_get('file_uploads'); if (!$file_uploads) @@ -111,13 +115,10 @@ public function getItems() $messages[] = array('message' => Text::_('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTSET'), 'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTSETDESC')); } - else + elseif (!is_writable($upload_dir)) { - if (!is_writable($upload_dir)) - { - $messages[] = array('message' => Text::_('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTWRITEABLE'), - 'description' => Text::sprintf('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTWRITEABLEDESC', $upload_dir)); - } + $messages[] = array('message' => Text::_('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTWRITEABLE'), + 'description' => Text::sprintf('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTWRITEABLEDESC', $upload_dir)); } $tmp_path = Factory::getApplication()->get('tmp_path'); @@ -127,26 +128,23 @@ public function getItems() $messages[] = array('message' => Text::_('COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTSET'), 'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTSETDESC')); } - else + elseif (!is_writable($tmp_path)) { - if (!is_writable($tmp_path)) - { - $messages[] = array('message' => Text::_('COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTWRITEABLE'), - 'description' => Text::sprintf('COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTWRITEABLEDESC', $tmp_path)); - } + $messages[] = array('message' => Text::_('COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTWRITEABLE'), + 'description' => Text::sprintf('COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTWRITEABLEDESC', $tmp_path)); } $memory_limit = $this->return_bytes(ini_get('memory_limit')); - if ($memory_limit < (8 * 1024 * 1024) && $memory_limit != -1) + if ($memory_limit < $minMemory && $memory_limit != -1) { - // 8MB + // 16MB $messages[] = array('message' => Text::_('COM_INSTALLER_MSG_WARNINGS_LOWMEMORYWARN'), 'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_LOWMEMORYDESC')); } - elseif ($memory_limit < (16 * 1024 * 1024) && $memory_limit != -1) + elseif ($memory_limit < ($minMemory * 1.5) && $memory_limit != -1) { - // 16MB + // 24MB $messages[] = array('message' => Text::_('COM_INSTALLER_MSG_WARNINGS_MEDMEMORYWARN'), 'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_MEDMEMORYDESC')); } @@ -160,13 +158,13 @@ public function getItems() 'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_UPLOADBIGGERTHANPOSTDESC')); } - if ($post_max_size < (8 * 1024 * 1024)) // 8MB + if ($post_max_size < $minMemory) { $messages[] = array('message' => Text::_('COM_INSTALLER_MSG_WARNINGS_SMALLPOSTSIZE'), 'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_SMALLPOSTSIZEDESC')); } - if ($upload_max_filesize < (8 * 1024 * 1024)) // 8MB + if ($upload_max_filesize < $minMemory) { $messages[] = array('message' => Text::_('COM_INSTALLER_MSG_WARNINGS_SMALLUPLOADSIZE'), 'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_SMALLUPLOADSIZEDESC')); diff --git a/administrator/components/com_joomlaupdate/src/Controller/DisplayController.php b/administrator/components/com_joomlaupdate/src/Controller/DisplayController.php index 1432a4ebd0733..dede389d2ae5b 100644 --- a/administrator/components/com_joomlaupdate/src/Controller/DisplayController.php +++ b/administrator/components/com_joomlaupdate/src/Controller/DisplayController.php @@ -45,6 +45,12 @@ public function display($cachable = false, $urlparams = false) // Get and render the view. if ($view = $this->getView($vName, $vFormat)) { + // Only super user can access file upload + if ($view == 'upload' && !$this->app->getIdentity()->authorise('core.admin', 'com_joomlaupdate')) + { + $this->app->redirect(Route::_('index.php?option=com_joomlaupdate', true)); + } + // Get the model for the view. /** @var \Joomla\Component\Joomlaupdate\Administrator\Model\UpdateModel $model */ $model = $this->getModel('Update'); diff --git a/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php b/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php index 93e374900ce8a..59cae00061bab 100644 --- a/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php +++ b/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php @@ -172,6 +172,69 @@ public function refreshUpdates($force = false) } } + /** + * Makes sure that the Joomla! Update Component Update is in the database and check if there is a new version. + * + * @return boolean True if there is an update else false + * + * @since __DEPLOY_VERSION__ + */ + public function getCheckForSelfUpdate() + { + $db = $this->getDbo(); + + $query = $db->getQuery(true) + ->select($db->quoteName('extension_id')) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote('com_joomlaupdate')); + $db->setQuery($query); + + try + { + // Get the component extension ID + $joomlaUpdateComponentId = $db->loadResult(); + } + catch (\RuntimeException $e) + { + // Something is wrong here! + $joomlaUpdateComponentId = 0; + Factory::getApplication()->enqueueMessage($e->getMessage(), 'error'); + } + + // Try the update only if we have an extension id + if ($joomlaUpdateComponentId != 0) + { + // Always force to check for an update! + $cache_timeout = 0; + + $updater = Updater::getInstance(); + $updater->findUpdates($joomlaUpdateComponentId, $cache_timeout, Updater::STABILITY_STABLE); + + // Fetch the update information from the database. + $query = $db->getQuery(true) + ->select('*') + ->from($db->quoteName('#__updates')) + ->where($db->quoteName('extension_id') . ' = :id') + ->bind(':id', $joomlaUpdateComponentId, ParameterType::INTEGER); + $db->setQuery($query); + + try + { + $joomlaUpdateComponentObject = $db->loadObject(); + } + catch (\RuntimeException $e) + { + // Something is wrong here! + $joomlaUpdateComponentObject = null; + Factory::getApplication()->enqueueMessage($e->getMessage(), 'error'); + } + + return !empty($joomlaUpdateComponentObject); + } + + return false; + } + /** * Returns an array with the Joomla! update information. * @@ -1354,7 +1417,7 @@ public function getNonCoreExtensions() * * @since 3.10.0 */ - public function getNonCorePlugins($folderFilter = array()) + public function getNonCorePlugins($folderFilter = ['system','user','authentication','actionlog','twofactorauth']) { $db = $this->getDbo(); $query = $db->getQuery(true); diff --git a/administrator/components/com_joomlaupdate/src/View/Joomlaupdate/HtmlView.php b/administrator/components/com_joomlaupdate/src/View/Joomlaupdate/HtmlView.php index 954085328f6b9..33e444d48f749 100644 --- a/administrator/components/com_joomlaupdate/src/View/Joomlaupdate/HtmlView.php +++ b/administrator/components/com_joomlaupdate/src/View/Joomlaupdate/HtmlView.php @@ -68,7 +68,25 @@ class HtmlView extends BaseHtmlView * @var \JObject * @since 4.0.0 */ - public $state; + protected $state; + + /** + * Flag if the update component itself has to be updated + * + * @var boolean True when update is available otherwise false + * + * @since __DEPLOY_VERSION__ + */ + protected $selfUpdateAvailable = false; + + /** + * A special prefix used for the emptystate layout variable + * + * @var string The prefix + * + * @since __DEPLOY_VERSION__ + */ + protected $messagePrefix = ''; /** * Renders the view @@ -81,42 +99,77 @@ class HtmlView extends BaseHtmlView */ public function display($tpl = null) { - // Get data from the model. - $this->state = $this->get('State'); + $this->updateInfo = $this->get('UpdateInformation'); + $this->selfUpdateAvailable = $this->get('CheckForSelfUpdate'); - // Load useful classes. - /** @var \Joomla\Component\Joomlaupdate\Administrator\Model\UpdateModel $model */ - $model = $this->getModel(); + // Get results of pre update check evaluations + $this->phpOptions = $this->get('PhpOptions'); + $this->phpSettings = $this->get('PhpSettings'); + $this->nonCoreExtensions = $this->get('NonCoreExtensions'); + $this->nonCoreCriticalPlugins = $this->get('NonCorePlugins'); - // Assign view variables. - $this->updateInfo = $model->getUpdateInformation(); + // Set to true if a required PHP option is not ok + $isCritical = false; - // Get results of pre update check evaluations - $this->phpOptions = $model->getPhpOptions(); - $this->phpSettings = $model->getPhpSettings(); - $this->nonCoreExtensions = $model->getNonCoreExtensions(); - $this->nonCoreCriticalPlugins = $model->getNonCorePlugins(array('system','user','authentication','actionlog','twofactorauth')); + foreach ($this->phpOptions as $option) + { + if (!$option->state) + { + $isCritical = true; + break; + } + } - // Set the toolbar information. - ToolbarHelper::title(Text::_('COM_JOOMLAUPDATE_OVERVIEW'), 'joomla install'); - ToolbarHelper::custom('update.purge', 'loop', '', 'COM_JOOMLAUPDATE_TOOLBAR_CHECK', false); + $this->state = $this->get('State'); - // Add toolbar buttons. - if (Factory::getUser()->authorise('core.admin')) + $hasUpdate = !empty($this->updateInfo['hasUpdate']); + $hasDownload = isset($this->updateInfo['object']->downloadurl->_data); + + // Fresh update, show it + if ($this->getLayout() == 'complete') { - ToolbarHelper::preferences('com_joomlaupdate'); + // Complete message, nothing to do here + } + // There is an update for the updater itself. So we have to update it first + elseif ($this->selfUpdateAvailable) + { + $this->setLayout('selfupdate'); } + elseif (!$hasDownload || !$hasUpdate) + { + // Could be that we have a download file but no update, so we offer a re-install + if ($hasDownload) + { + // We can reinstall if we have a URL but no update + $this->setLayout('reinstall'); + } + // No download available + else + { + if ($hasUpdate) + { + $this->messagePrefix = '_NODOWNLOAD'; + } - ToolbarHelper::divider(); - ToolbarHelper::help('JHELP_COMPONENTS_JOOMLA_UPDATE'); + $this->setLayout('noupdate'); + } + } + // Here we have now two options: preupdatecheck or update + elseif ($this->getLayout() != 'update' || $isCritical) + { + $this->setLayout('preupdatecheck'); + } - if (!is_null($this->updateInfo['object'])) + if (in_array($this->getLayout(), ['preupdatecheck', 'update', 'upload'])) { - // Show the message if an update is found. - Factory::getApplication()->enqueueMessage(Text::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_UPDATE_NOTICE'), 'warning'); + $language = Factory::getLanguage(); + $language->load('com_installer', JPATH_ADMINISTRATOR, 'en-GB', false, true); + $language->load('com_installer', JPATH_ADMINISTRATOR, null, true); + + Factory::getApplication()->enqueueMessage(Text::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_UPDATE_NOTICE'), 'notice'); } - $params = ComponentHelper::getParams('com_joomlaupdate'); + $params = ComponentHelper::getParams('com_joomlaupdate'); switch ($params->get('updatesource', 'default')) { @@ -151,96 +204,48 @@ public function display($tpl = null) $this->updateSourceKey = Text::_('COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_DEFAULT'); } - $this->warnings = array(); - /** @var \Joomla\Component\Installer\Administrator\Model\WarningsModel $warningsModel */ - $warningsModel = $this->getModel('warnings'); - - if (is_object($warningsModel) && $warningsModel instanceof \Joomla\CMS\MVC\Model\BaseDatabaseModel) - { - $language = Factory::getLanguage(); - $language->load('com_installer', JPATH_ADMINISTRATOR, 'en-GB', false, true); - $language->load('com_installer', JPATH_ADMINISTRATOR, null, true); - - $this->warnings = $warningsModel->getItems(); - } - - $this->selfUpdate = $this->checkForSelfUpdate(); - - // Only Super Users have access to the Update & Install for obvious security reasons - $this->showUploadAndUpdate = Factory::getUser()->authorise('core.admin'); - // Remove temporary files - $model->removePackageFiles(); + $this->getModel()->removePackageFiles(); + + $this->addToolbar(); // Render the view. parent::display($tpl); } /** - * Makes sure that the Joomla! Update Component Update is in the database and check if there is a new version. + * Add the page title and toolbar. * - * @return boolean True if there is an update else false + * @return void * - * @since 3.6.3 + * @since __DEPLOY_VERSION__ */ - private function checkForSelfUpdate() + protected function addToolbar() { - $db = Factory::getDbo(); - - $query = $db->getQuery(true) - ->select($db->quoteName('extension_id')) - ->from($db->quoteName('#__extensions')) - ->where($db->quoteName('element') . ' = ' . $db->quote('com_joomlaupdate')); - $db->setQuery($query); + // Set the toolbar information. + ToolbarHelper::title(Text::_('COM_JOOMLAUPDATE_OVERVIEW'), 'joomla install'); - try + if (in_array($this->getLayout(), ['update', 'complete'])) { - // Get the component extension ID - $joomlaUpdateComponentId = $db->loadResult(); + $arrow = Factory::getLanguage()->isRtl() ? 'arrow-right' : 'arrow-left'; + + ToolbarHelper::link('index.php?option=com_joomlaupdate', 'JTOOLBAR_BACK', $arrow); + + ToolbarHelper::title(Text::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_TAB_UPLOAD'), 'joomla install'); } - catch (\RuntimeException $e) + elseif (!$this->selfUpdateAvailable) { - // Something is wrong here! - $joomlaUpdateComponentId = 0; - Factory::getApplication()->enqueueMessage($e->getMessage(), 'error'); + ToolbarHelper::custom('update.purge', 'loop', '', 'COM_JOOMLAUPDATE_TOOLBAR_CHECK', false); } - // Try the update only if we have an extension id - if ($joomlaUpdateComponentId != 0) + // Add toolbar buttons. + if (Factory::getUser()->authorise('core.admin')) { - // Always force to check for an update! - $cache_timeout = 0; - - $updater = Updater::getInstance(); - $updater->findUpdates($joomlaUpdateComponentId, $cache_timeout, Updater::STABILITY_STABLE); - - // Fetch the update information from the database. - $query = $db->getQuery(true) - ->select('*') - ->from($db->quoteName('#__updates')) - ->where($db->quoteName('extension_id') . ' = :id') - ->bind(':id', $joomlaUpdateComponentId, ParameterType::INTEGER); - $db->setQuery($query); - - try - { - $joomlaUpdateComponentObject = $db->loadObject(); - } - catch (\RuntimeException $e) - { - // Something is wrong here! - $joomlaUpdateComponentObject = null; - Factory::getApplication()->enqueueMessage($e->getMessage(), 'error'); - } - - if (is_null($joomlaUpdateComponentObject)) - { - // No Update great! - return false; - } - - return true; + ToolbarHelper::preferences('com_joomlaupdate'); } + + ToolbarHelper::divider(); + ToolbarHelper::help('JHELP_COMPONENTS_JOOMLA_UPDATE'); } /** @@ -255,7 +260,6 @@ private function checkForSelfUpdate() public function shouldDisplayPreUpdateCheck() { return isset($this->updateInfo['object']->downloadurl->_data) - && $this->getModel()->isDatabaseTypeSupported() - && $this->getModel()->isPhpVersionSupported(); + && !empty($this->updateInfo['hasUpdate']); } } diff --git a/administrator/components/com_joomlaupdate/src/View/Upload/HtmlView.php b/administrator/components/com_joomlaupdate/src/View/Upload/HtmlView.php index bcf09376e1b87..a4e8246e7c102 100644 --- a/administrator/components/com_joomlaupdate/src/View/Upload/HtmlView.php +++ b/administrator/components/com_joomlaupdate/src/View/Upload/HtmlView.php @@ -23,6 +23,33 @@ */ class HtmlView extends BaseHtmlView { + /** + * An array with the Joomla! update information. + * + * @var array + * + * @since __DEPLOY_VERSION__ + */ + protected $updateInfo = null; + + /** + * Flag if the update component itself has to be updated + * + * @var boolean True when update is available otherwise false + * + * @since __DEPLOY_VERSION__ + */ + protected $selfUpdateAvailable = false; + + /** + * Warnings for the upload update + * + * @var array An array of warnings which could prevent the upload update + * + * @since __DEPLOY_VERSION__ + */ + protected $warnings = []; + /** * Renders the view. * @@ -34,17 +61,40 @@ class HtmlView extends BaseHtmlView */ public function display($tpl = null) { - // Set the toolbar information. - ToolbarHelper::title(Text::_('COM_JOOMLAUPDATE_OVERVIEW'), 'sync install'); - ToolbarHelper::divider(); - ToolbarHelper::help('JHELP_COMPONENTS_JOOMLA_UPDATE'); + $this->updateInfo = $this->get('UpdateInformation'); + $this->selfUpdateAvailable = $this->get('CheckForSelfUpdate'); + + if ($this->getLayout() !== 'captive') + { + $this->warnings = $this->get('Items', 'warnings'); + } // Load com_installer's language $language = Factory::getLanguage(); $language->load('com_installer', JPATH_ADMINISTRATOR, 'en-GB', false, true); $language->load('com_installer', JPATH_ADMINISTRATOR, null, true); + $this->addToolbar(); + // Render the view. parent::display($tpl); } + + /** + * Add the page title and toolbar. + * + * @return void + * + * @since __DEPLOY_VERSION__ + */ + protected function addToolbar() + { + // Set the toolbar information. + ToolbarHelper::title(Text::_('COM_JOOMLAUPDATE_OVERVIEW'), 'sync install'); + + $arrow = Factory::getLanguage()->isRtl() ? 'arrow-right' : 'arrow-left'; + ToolbarHelper::link('index.php?option=com_joomlaupdate&' . ($this->getLayout() == 'captive' ? 'view=upload' : ''), 'JTOOLBAR_BACK', $arrow); + ToolbarHelper::divider(); + ToolbarHelper::help('JHELP_COMPONENTS_JOOMLA_UPDATE'); + } } diff --git a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/complete.php b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/complete.php index 8827ecd44579d..01a8d4eb7fe1e 100644 --- a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/complete.php +++ b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/complete.php @@ -14,16 +14,15 @@ use Joomla\CMS\Router\Route; ?> - 'complete')); ?> - - +
+

+
- - - +
+
diff --git a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default.php b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default.php deleted file mode 100644 index 098986c9a1717..0000000000000 --- a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default.php +++ /dev/null @@ -1,98 +0,0 @@ - - * @license GNU General Public License version 2 or later; see LICENSE.txt - */ - -defined('_JEXEC') or die; - -use Joomla\CMS\Factory; -use Joomla\CMS\HTML\HTMLHelper; -use Joomla\CMS\Language\Text; -use Joomla\CMS\WebAsset\WebAssetManager; -use Joomla\Component\Joomlaupdate\Administrator\View\Joomlaupdate\HtmlView; - -/** @var HtmlView $this */ - -/** @var WebAssetManager $wa */ -$wa = $this->document->getWebAssetManager(); -$wa->useScript('core') - ->useScript('com_joomlaupdate.default') - ->useScript('bootstrap.popover'); - -Text::script('COM_INSTALLER_MSG_INSTALL_PLEASE_SELECT_A_PACKAGE', true); -Text::script('JYES'); -Text::script('JNO'); -Text::script('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_NO_COMPATIBILITY_INFORMATION'); -Text::script('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_WARNING_UNKNOWN'); -Text::script('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_SERVER_ERROR'); -Text::script('COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN'); -Text::script('COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN_DESC'); -Text::script('COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN_LIST'); -Text::script('COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN_CONFIRM_MESSAGE'); -Text::script('COM_JOOMLAUPDATE_VIEW_DEFAULT_HELP'); - -$latestJoomlaVersion = $this->updateInfo['latest']; -$currentJoomlaVersion = isset($this->updateInfo['current']) ? $this->updateInfo['current'] : JVERSION; -?> - -
- showUploadAndUpdate) : ?> - $this->shouldDisplayPreUpdateCheck() ? 'pre-update-check' : 'online-update')); ?> - shouldDisplayPreUpdateCheck()) : ?> - - loadTemplate('preupdatecheck'); ?> - - - - - - - - selfUpdate) : ?> - - enqueueMessage(Text::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_INSTALL_SELF_UPDATE_FIRST'), 'error'); ?> - loadTemplate('updatemefirst'); ?> - - updateInfo['object']->downloadurl->_data) - && !$this->updateInfo['hasUpdate'])) : ?> - - loadTemplate('noupdate'); ?> - updateInfo['object']->downloadurl->_data) - || !$this->getModel()->isDatabaseTypeSupported() - || !$this->getModel()->isPhpVersionSupported()) : ?> - - loadTemplate('nodownload'); ?> - updateInfo['hasUpdate']) : ?> - - loadTemplate('reinstall'); ?> - - - loadTemplate('update'); ?> - - - - - - - - - - - showUploadAndUpdate) : ?> - - - loadTemplate('upload'); ?> - - - - - -
-
diff --git a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_nodownload.php b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_nodownload.php deleted file mode 100644 index dc94a63d68597..0000000000000 --- a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_nodownload.php +++ /dev/null @@ -1,48 +0,0 @@ - - * @license GNU General Public License version 2 or later; see LICENSE.txt - */ - -defined('_JEXEC') or die; - -use Joomla\CMS\Language\Text; -use Joomla\Component\Joomlaupdate\Administrator\View\Joomlaupdate\HtmlView; - -/** @var HtmlView $this */ -?> - -
- - - -
- getModel()->isDatabaseTypeSupported()) : ?> -

- -

-

- updateInfo['latest']); ?> -

- - getModel()->isPhpVersionSupported()) : ?> -

- -

-

- updateInfo['latest']); ?> -

- - updateInfo['object']->downloadurl->_data) && $this->updateInfo['installed'] < $this->updateInfo['latest'] && $this->getModel()->isPhpVersionSupported() && $this->getModel()->isDatabaseTypeSupported()) : ?> -

- -

-

- updateInfo['latest']); ?> -

- -
-
diff --git a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_noupdate.php b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_noupdate.php deleted file mode 100644 index 28f06e3d08dbd..0000000000000 --- a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_noupdate.php +++ /dev/null @@ -1,27 +0,0 @@ - - * @license GNU General Public License version 2 or later; see LICENSE.txt - */ - -defined('_JEXEC') or die; - -use Joomla\CMS\Language\Text; -use Joomla\Component\Joomlaupdate\Administrator\View\Joomlaupdate\HtmlView; - -/** @var HtmlView $this */ -?> -
- - - -

- langKey, $this->updateSourceKey); ?> -

-
- -
-
diff --git a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_preupdatecheck.php b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_preupdatecheck.php deleted file mode 100644 index e1b0831320fb1..0000000000000 --- a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_preupdatecheck.php +++ /dev/null @@ -1,269 +0,0 @@ - - * @license GNU General Public License version 2 or later; see LICENSE.txt - */ - -defined('_JEXEC') or die; - -use Joomla\CMS\Factory; -use Joomla\CMS\Language\Text; -use Joomla\CMS\Uri\Uri; -use Joomla\Component\Joomlaupdate\Administrator\View\Joomlaupdate\HtmlView; - -/** @var HtmlView $this */ - -// JText::script doesn't have a sprintf equivalent so work around this -Factory::getDocument()->addScriptOptions('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_MORE_COMPATIBILITY_INFORMATION', Text::sprintf('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_MORE_COMPATIBILITY_INFORMATION', '', true)) - ->addScriptOptions('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_LESS_COMPATIBILITY_INFORMATION', Text::sprintf('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_LESS_COMPATIBILITY_INFORMATION', '', true)) - ->addScriptOptions('nonCoreCriticalPlugins', $this->nonCoreCriticalPlugins); - -$compatibilityTypes = array( - 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_RUNNING_PRE_UPDATE_CHECKS' => array( - 'class' => 'alert-secondary', - 'notes' => 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_RUNNING_PRE_UPDATE_CHECKS_NOTES', - 'group' => 0, - ), - 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_PRE_UPDATE_CHECKS_FAILED' => array( - 'class' => 'alert-danger', - 'notes' => 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_PRE_UPDATE_CHECKS_FAILED_NOTES', - 'group' => 4, - ), - 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_UPDATE_SERVER_OFFERS_NO_COMPATIBLE_VERSION' => array( - 'class' => 'alert-danger', - 'notes' => 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_UPDATE_SERVER_OFFERS_NO_COMPATIBLE_VERSION_NOTES', - 'group' => 1, - ), - 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_REQUIRING_UPDATES_TO_BE_COMPATIBLE' => array( - 'class' => 'alert-warning', - 'notes' => 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_REQUIRING_UPDATES_TO_BE_COMPATIBLE_NOTES', - 'group' => 2, - ), - 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_PROBABLY_COMPATIBLE' => array( - 'class' => 'alert-success', - 'notes' => 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_PROBABLY_COMPATIBLE_NOTES', - 'group' => 3, - ), -); -?> - -

- updateInfo['latest']); ?> -

-

- -

- -
-
-
- - phpOptions as $option) : ?> - state) : ?> - - - - - -

- -
- ' - ); ?> -
-

-
- -
-
- -
-
- - phpSettings as $setting) : ?> - state !== $setting->recommended) : ?> - - - - - - -

- -
- ' - ); ?> -
-

-
- -
-
-
-
- nonCoreExtensions)) : ?> -
-

- -

- $compatibilityData) : ?> - - - -
- -

- -
- ' - ); ?> -
- - -

-
-
- -
- - - - - - - - - - - - - - nonCoreExtensions as $extension) : ?> - - - - - - - - - -
- - - -
- name; ?> - - type)); ?> -
-
- -
- -
-

- -

-
- - -
-
- -
diff --git a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_reinstall.php b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_reinstall.php deleted file mode 100644 index 8967a6aa9876b..0000000000000 --- a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_reinstall.php +++ /dev/null @@ -1,83 +0,0 @@ - - * @license GNU General Public License version 2 or later; see LICENSE.txt - */ - -defined('_JEXEC') or die; - -use Joomla\CMS\HTML\HTMLHelper; -use Joomla\CMS\Language\Text; -use Joomla\CMS\Updater\Update; -use Joomla\Component\Joomlaupdate\Administrator\View\Joomlaupdate\HtmlView; - -/** @var HtmlView $this */ -?> -
- - - -

- - - -

-

langKey, $this->updateSourceKey); ?>

-

- - - -

- updateInfo['object']) && ($this->updateInfo['object'] instanceof Update)) : ?> -
-
- -
-
- updateInfo['object']->downloadurl->_data, - $this->updateInfo['object']->downloadurl->_data, - [ - 'target' => '_blank', - 'rel' => 'noopener noreferrer', - 'title' => Text::sprintf('JBROWSERTARGET_NEW_TITLE', $this->updateInfo['object']->downloadurl->_data) - ] - ); ?> -
-
- - updateInfo['object']->get('infourl')->_data) - && isset($this->updateInfo['object']->get('infourl')->title)) : ?> -
-
- -
-
- updateInfo['object']->get('infourl')->_data, - $this->updateInfo['object']->get('infourl')->title, - [ - 'target' => '_blank', - 'rel' => 'noopener noreferrer', - 'title' => Text::sprintf('JBROWSERTARGET_NEW_TITLE', $this->updateInfo['object']->get('infourl')->title) - ] - ); ?> -
-
- - -
- -
-
- -
-
- - -
diff --git a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_update.php b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_update.php deleted file mode 100644 index 71a1394cafb45..0000000000000 --- a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_update.php +++ /dev/null @@ -1,205 +0,0 @@ - - * @license GNU General Public License version 2 or later; see LICENSE.txt - */ - -defined('_JEXEC') or die; - -use Joomla\CMS\HTML\HTMLHelper; -use Joomla\CMS\Language\Text; -use Joomla\Component\Joomlaupdate\Administrator\View\Joomlaupdate\HtmlView; - -/** @var HtmlView $this */ -?> - -
- - - -

- langKey, $this->updateSourceKey); ?> -

- -
-
- -
-
- updateInfo['installed']; ?> -
-
- -
-
- -
-
- updateInfo['latest']; ?> -
-
- -
-
- -
-
- updateInfo['object']->downloadurl->_data, - $this->updateInfo['object']->downloadurl->_data, - [ - 'target' => '_blank', - 'rel' => 'noopener noreferrer', - 'title' => Text::sprintf('JBROWSERTARGET_DOWNLOAD', $this->updateInfo['object']->downloadurl->_data) - ] - ); ?> -
-
- - updateInfo['object']->get('infourl')->_data) - && isset($this->updateInfo['object']->get('infourl')->title)) : ?> -
-
- -
-
- updateInfo['object']->get('infourl')->_data, - $this->updateInfo['object']->get('infourl')->title, - [ - 'target' => '_blank', - 'rel' => 'noopener noreferrer', - 'title' => Text::sprintf('JBROWSERTARGET_NEW_TITLE', $this->updateInfo['object']->get('infourl')->title) - ] - ); ?> -
-
- - -
-

- -

-
-
- -
-
-
- - - -
- -
- -
- - - - - - - - - nonCoreCriticalPlugins as $nonCoreCriticalPlugin) : ?> - - - package_id > 0) : ?> - nonCoreExtensions as $nonCoreExtension) : ?> - package_id == $nonCoreExtension->extension_id) : ?> - - - - - - - - - - - - - -
- - - - - - - -
- name); ?> - - name; ?> - - - - manifest_cache->author)) : ?> - manifest_cache->author); ?> - package_id > 0) : ?> - nonCoreExtensions as $nonCoreExtension) : ?> - package_id == $nonCoreExtension->extension_id) : ?> - - name; ?> - - - manifest_cache->authorUrl)) : ?> - manifest_cache->authorUrl; ?> - package_id > 0) : ?> - nonCoreExtensions as $nonCoreExtension) : ?> - package_id == $nonCoreExtension->extension_id) : ?> - manifest_cache->authorUrl; ?> - - - - - - - - - - - - -
-
- - - - -
- - - -
- -
- -
-
- -
-
-
diff --git a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_updatemefirst.php b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_updatemefirst.php deleted file mode 100644 index 9d44184337805..0000000000000 --- a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_updatemefirst.php +++ /dev/null @@ -1,25 +0,0 @@ - - * @license GNU General Public License version 2 or later; see LICENSE.txt - */ -defined('_JEXEC') or die; - -use Joomla\CMS\Language\Text; - -?> - -
- - - -

- -

-

- -

-
diff --git a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_upload.php b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_upload.php deleted file mode 100644 index 5f654d09be97c..0000000000000 --- a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/default_upload.php +++ /dev/null @@ -1,84 +0,0 @@ - - * @license GNU General Public License version 2 or later; see LICENSE.txt - */ - -defined('_JEXEC') or die; - -use Joomla\CMS\HTML\HTMLHelper; -use Joomla\CMS\Language\Text; -use Joomla\CMS\Utility\Utility; -use Joomla\Component\Joomlaupdate\Administrator\View\Joomlaupdate\HtmlView; - -/** @var HtmlView $this */ - -HTMLHelper::_('behavior.core'); -Text::script('COM_INSTALLER_MSG_INSTALL_PLEASE_SELECT_A_PACKAGE', true); -Text::script('COM_INSTALLER_MSG_WARNINGS_UPLOADFILETOOBIG', true); -Text::script('JGLOBAL_SELECTED_UPLOAD_FILE_SIZE', true); -?> - -
- - -
- -warnings)) : ?> -

- warnings as $warning) : ?> -
-

- - - -

-

-
- -
-

- - - -

-

-
- - -
-
- - -
- -
- - - - -
- - -
-
-
-
- -
-
- -
- - - - - -
diff --git a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/noupdate.php b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/noupdate.php new file mode 100644 index 0000000000000..3f2fa6a9ec115 --- /dev/null +++ b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/noupdate.php @@ -0,0 +1,49 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +defined('_JEXEC') or die; + +use Joomla\CMS\Factory; +use Joomla\CMS\HTML\HTMLHelper; +use Joomla\CMS\Language\Text; +use Joomla\CMS\Layout\LayoutHelper; +use Joomla\CMS\Session\Session; + +$uploadLink = 'index.php?option=com_joomlaupdate&view=upload'; + +$displayData = [ + 'textPrefix' => 'COM_JOOMLAUPDATE' . $this->messagePrefix, + 'content' => Text::sprintf($this->langKey, $this->updateSourceKey), + 'formURL' => 'index.php?option=com_joomlaupdate&view=joomlaupdate', + 'helpURL' => 'https://docs.joomla.org/Special:MyLanguage/Updating_from_an_existing_version', + 'icon' => 'icon-loop joomlaupdate', + 'createURL' => 'index.php?option=com_joomlaupdate&task=update.purge&' . Session::getFormToken() . '=1' +]; + +if (Factory::getApplication()->getIdentity()->authorise('core.admin', 'com_joomlaupdate')) +{ + $displayData['formAppend'] = '
' . HTMLHelper::_('link', $uploadLink, Text::_($displayData['textPrefix'] . '_EMPTYSTATE_APPEND')) . '
'; +} + +if (isset($this->updateInfo['object']) && isset($this->updateInfo['object']->get('infourl')->_data)) : + $displayData['content'] .= '
' . HTMLHelper::_('link', + $this->updateInfo['object']->get('infourl')->_data, + Text::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_INFOURL'), + [ + 'target' => '_blank', + 'rel' => 'noopener noreferrer', + 'title' => isset($this->updateInfo['object']->get('infourl')->title) ? Text::sprintf('JBROWSERTARGET_NEW_TITLE', $this->updateInfo['object']->get('infourl')->title) : '' + ] + ); +endif; + +$content = LayoutHelper::render('joomla.content.emptystate', $displayData); + +// Inject Joomla! version +echo str_replace('%1$s', '‎' . $this->updateInfo['latest'], $content); diff --git a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/preupdatecheck.php b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/preupdatecheck.php new file mode 100644 index 0000000000000..d3d381e883c5b --- /dev/null +++ b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/preupdatecheck.php @@ -0,0 +1,348 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +defined('_JEXEC') or die; + +use Joomla\CMS\Factory; +use Joomla\CMS\HTML\HTMLHelper; +use Joomla\CMS\Language\Text; +use Joomla\CMS\Router\Route; +use Joomla\CMS\Uri\Uri; +use Joomla\Component\Joomlaupdate\Administrator\View\Joomlaupdate\HtmlView; + +/** @var HtmlView $this */ + +/** @var WebAssetManager $wa */ +$wa = $this->document->getWebAssetManager(); +$wa->useScript('core') + ->useScript('com_joomlaupdate.default') + ->useScript('bootstrap.popover') + ->useScript('bootstrap.tab'); + +// Text::script doesn't have a sprintf equivalent so work around this +Factory::getDocument()->addScriptOptions('nonCoreCriticalPlugins', $this->nonCoreCriticalPlugins); + +Text::script('COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN_CONFIRM_MESSAGE'); +Text::script('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_NO_COMPATIBILITY_INFORMATION'); +Text::script('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_WARNING_UNKNOWN'); +Text::script('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_SERVER_ERROR'); +Text::script('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_MORE_COMPATIBILITY_INFORMATION'); +Text::script('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_LESS_COMPATIBILITY_INFORMATION'); +Text::script('COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN'); +Text::script('COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN_DESC'); +Text::script('COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN_LIST'); +Text::script('COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN_CONFIRM_MESSAGE'); +Text::script('COM_JOOMLAUPDATE_VIEW_DEFAULT_HELP'); + +$compatibilityTypes = array( + 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_RUNNING_PRE_UPDATE_CHECKS' => array( + 'class' => 'info', + 'icon' => 'hourglass fa-spin', + 'notes' => 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_RUNNING_PRE_UPDATE_CHECKS_NOTES', + 'group' => 0, + ), + 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_REQUIRING_UPDATES_TO_BE_COMPATIBLE' => array( + 'class' => 'danger', + 'icon' => 'times', + 'notes' => 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_REQUIRING_UPDATES_TO_BE_COMPATIBLE_NOTES', + 'group' => 2, + ), + 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_PRE_UPDATE_CHECKS_FAILED' => array( + 'class' => 'warning', + 'icon' => 'exclamation-triangle', + 'notes' => 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_PRE_UPDATE_CHECKS_FAILED_NOTES', + 'group' => 4, + ), + 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_UPDATE_SERVER_OFFERS_NO_COMPATIBLE_VERSION' => array( + 'class' => 'warning', + 'icon' => 'exclamation-triangle', + 'notes' => 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_UPDATE_SERVER_OFFERS_NO_COMPATIBLE_VERSION_NOTES', + 'group' => 1, + ), + 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_PROBABLY_COMPATIBLE' => array( + 'class' => 'success', + 'icon' => 'check', + 'notes' => 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_PROBABLY_COMPATIBLE_NOTES', + 'group' => 3, + ), +); + +$latestJoomlaVersion = $this->updateInfo['latest']; +$currentJoomlaVersion = isset($this->updateInfo['current']) ? $this->updateInfo['current'] : JVERSION; + +$updatePossible = true; + +?> + +
+ +

+ updateInfo['latest']); ?> +

+

+ +

+ +
+ + +
+
+

+ +

+
+ + + + + + + + + + phpOptions as $option) : ?> + + + + + + +
+ +
+ + + +
+ label; ?> + notice) : ?> +
+ notice; ?> +
+ +
+ + state ? 'JYES' : 'JNO'); ?> + +
+
+
+ +
+

+ +

+
+
+

+ +

+
+
+ +
+
+
+
+ + + + nonCoreExtensions)) : ?> +
+ $data) : ?> +
+

+ + + 0) : ?> + + +

+ +
+ + + + + + + + + + + + + + nonCoreExtensions as $extension) : ?> + + + + + + + + +
+ +
+ + + +
+ name; ?> + + + type)); ?> +
+
+
+ +
+ +
+ + +
+ +
+
+
+ + + +
+ +
+
+ + +
+
+ + +
+ + +
+ + +
+ + authorise('core.admin')) : ?> +
+ +
+ +
diff --git a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/reinstall.php b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/reinstall.php new file mode 100644 index 0000000000000..c67528ca70eb0 --- /dev/null +++ b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/reinstall.php @@ -0,0 +1,57 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +defined('_JEXEC') or die; + +use Joomla\CMS\Factory; +use Joomla\CMS\HTML\HTMLHelper; +use Joomla\CMS\Language\Text; +use Joomla\CMS\Layout\LayoutHelper; +use Joomla\CMS\Session\Session; + +/** @var HtmlView $this */ + +/** @var WebAssetManager $wa */ +$wa = $this->document->getWebAssetManager(); +$wa->useScript('core') + ->useScript('com_joomlaupdate.default') + ->useScript('bootstrap.popover'); + +$uploadLink = 'index.php?option=com_joomlaupdate&view=upload'; + +$displayData = [ + 'textPrefix' => 'COM_JOOMLAUPDATE_REINSTALL', + 'content' => Text::sprintf($this->langKey, $this->updateSourceKey), + 'formURL' => 'index.php?option=com_joomlaupdate&view=joomlaupdate', + 'helpURL' => 'https://docs.joomla.org/Special:MyLanguage/Updating_from_an_existing_version', + 'icon' => 'icon-loop joomlaupdate', + 'createURL' => '#' +]; + +if (isset($this->updateInfo['object']) && isset($this->updateInfo['object']->get('infourl')->_data)) : + $displayData['content'] .= '
' . HTMLHelper::_('link', + $this->updateInfo['object']->get('infourl')->_data, + Text::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_INFOURL'), + [ + 'target' => '_blank', + 'rel' => 'noopener noreferrer', + 'title' => isset($this->updateInfo['object']->get('infourl')->title) ? Text::sprintf('JBROWSERTARGET_NEW_TITLE', $this->updateInfo['object']->get('infourl')->title) : '' + ] + ); +endif; + +if (Factory::getApplication()->getIdentity()->authorise('core.admin', 'com_joomlaupdate')) : + $displayData['formAppend'] = '
' . HTMLHelper::_('link', $uploadLink, Text::_('COM_JOOMLAUPDATE_EMPTYSTATE_APPEND')) . '
'; +endif; + +echo '
'; + +echo LayoutHelper::render('joomla.content.emptystate', $displayData); + +echo '
'; diff --git a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/selfupdate.php b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/selfupdate.php new file mode 100644 index 0000000000000..6decf089b0efa --- /dev/null +++ b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/selfupdate.php @@ -0,0 +1,23 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ +defined('_JEXEC') or die; + +use Joomla\CMS\Factory; +use Joomla\CMS\Language\Text; +use Joomla\CMS\Layout\LayoutHelper; + +$displayData = [ + 'textPrefix' => 'COM_JOOMLAUPDATE_SELF', + 'formURL' => 'index.php?option=com_joomlaupdate&view=joomlaupdate', + 'helpURL' => 'https://docs.joomla.org/Special:MyLanguage/Updating_from_an_existing_version', + 'icon' => 'icon-loop joomlaupdate', + 'createURL' => 'index.php?option=com_installer&view=update' +]; + +echo LayoutHelper::render('joomla.content.emptystate', $displayData); diff --git a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/update.php b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/update.php new file mode 100644 index 0000000000000..6277a5bbc0566 --- /dev/null +++ b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/update.php @@ -0,0 +1,66 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +defined('_JEXEC') or die; + +use Joomla\CMS\Factory; +use Joomla\CMS\HTML\HTMLHelper; +use Joomla\CMS\Language\Text; +use Joomla\CMS\Layout\LayoutHelper; +use Joomla\CMS\Session\Session; + +/** @var HtmlView $this */ + +/** @var WebAssetManager $wa */ +$wa = $this->document->getWebAssetManager(); +$wa->useScript('core') + ->useScript('com_joomlaupdate.default') + ->useScript('bootstrap.popover'); + +$uploadLink = 'index.php?option=com_joomlaupdate&view=upload'; + +$displayData = [ + 'textPrefix' => 'COM_JOOMLAUPDATE_UPDATE', + 'title' => Text::sprintf('COM_JOOMLAUPDATE_UPDATE_EMPTYSTATE_TITLE', $this->escape($this->updateInfo['latest'])), + 'content' => Text::sprintf($this->langKey, $this->updateSourceKey), + 'formURL' => 'index.php?option=com_joomlaupdate&view=joomlaupdate', + 'helpURL' => 'https://docs.joomla.org/Special:MyLanguage/Updating_from_an_existing_version', + 'icon' => 'icon-loop joomlaupdate', + 'createURL' => '#' +]; + +if (isset($this->updateInfo['object']) && isset($this->updateInfo['object']->get('infourl')->_data)) : + $displayData['content'] .= '
' . HTMLHelper::_('link', + $this->updateInfo['object']->get('infourl')->_data, + Text::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_INFOURL'), + [ + 'target' => '_blank', + 'rel' => 'noopener noreferrer', + 'title' => isset($this->updateInfo['object']->get('infourl')->title) ? Text::sprintf('JBROWSERTARGET_NEW_TITLE', $this->updateInfo['object']->get('infourl')->title) : '' + ] + ); +endif; + +// Confirm backup and check +$displayData['content'] .= '
+ + +
'; + +if (Factory::getApplication()->getIdentity()->authorise('core.admin', 'com_joomlaupdate')) : + $displayData['formAppend'] = '
' . HTMLHelper::_('link', $uploadLink, Text::_('COM_JOOMLAUPDATE_EMPTYSTATE_APPEND')) . '
'; +endif; + +echo '
'; + +echo LayoutHelper::render('joomla.content.emptystate', $displayData); + +echo '
'; diff --git a/administrator/components/com_joomlaupdate/tmpl/upload/captive.php b/administrator/components/com_joomlaupdate/tmpl/upload/captive.php index 42302d204758b..86af707b21681 100644 --- a/administrator/components/com_joomlaupdate/tmpl/upload/captive.php +++ b/administrator/components/com_joomlaupdate/tmpl/upload/captive.php @@ -40,9 +40,9 @@
-
-
- + +
+
diff --git a/administrator/components/com_joomlaupdate/tmpl/upload/default.php b/administrator/components/com_joomlaupdate/tmpl/upload/default.php new file mode 100644 index 0000000000000..0890992250931 --- /dev/null +++ b/administrator/components/com_joomlaupdate/tmpl/upload/default.php @@ -0,0 +1,100 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +defined('_JEXEC') or die; + +use Joomla\CMS\HTML\HTMLHelper; +use Joomla\CMS\Language\Text; +use Joomla\CMS\Updater\Update; +use Joomla\CMS\Utility\Utility; +use Joomla\Component\Joomlaupdate\Administrator\View\Joomlaupdate\HtmlView; + +/** @var HtmlView $this */ + +/** @var WebAssetManager $wa */ +$wa = $this->document->getWebAssetManager(); +$wa->useScript('core') + ->useScript('com_joomlaupdate.default') + ->useScript('bootstrap.popover'); + +HTMLHelper::_('behavior.core'); +Text::script('COM_INSTALLER_MSG_INSTALL_PLEASE_SELECT_A_PACKAGE', true); +Text::script('COM_INSTALLER_MSG_WARNINGS_UPLOADFILETOOBIG', true); +Text::script('JGLOBAL_SELECTED_UPLOAD_FILE_SIZE', true); + +$latestJoomlaVersion = $this->updateInfo['latest']; +$currentJoomlaVersion = isset($this->updateInfo['current']) ? $this->updateInfo['current'] : JVERSION; +?> + +
+
+ + + updateInfo['object']) && ($this->updateInfo['object'] instanceof Update)) : ?> +

+ + updateInfo['object']->downloadurl->_data); ?> + +
+ +warnings)) : ?> +

+ warnings as $warning) : ?> +
+

+ + + +

+

+
+ +
+

+ + + +

+

+
+ + + + +
+ + + + + + +
+ + +
+ +
+ + +
+ + + + + + + + +
diff --git a/administrator/language/en-GB/com_installer.ini b/administrator/language/en-GB/com_installer.ini index eef36f7e3612e..5f2708706a478 100644 --- a/administrator/language/en-GB/com_installer.ini +++ b/administrator/language/en-GB/com_installer.ini @@ -182,10 +182,10 @@ COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTSET="The Joomla temporary folder is not s COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTSETDESC="This folder is where Joomla copies an extension, extracts the extension and the files are then copied into the correct directories. If this location is not set in configuration.php ($tmp_path) then you won't be able to upload extensions. Create a folder to enable Joomla to write to the folder to fix the issue." COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTWRITEABLE="The Joomla temporary folder is not writable or does not exist." COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTWRITEABLEDESC="This may cause issues when trying to upload extensions to Joomla. If you are having issues uploading extensions, make sure the folder defined in your configuration.php exists or check the '%s' and set it to be writeable and see if this fixes the issue." -COM_INSTALLER_MSG_WARNINGS_LOWMEMORYDESC="Low PHP memory limit." -COM_INSTALLER_MSG_WARNINGS_LOWMEMORYWARN="Your PHP memory limit is set below 8MB which may cause some issues when installing large extensions. Please set your memory limit to at least 16MB." -COM_INSTALLER_MSG_WARNINGS_MEDMEMORYDESC="Potentially low PHP memory limit." -COM_INSTALLER_MSG_WARNINGS_MEDMEMORYWARN="Your PHP memory limit is set below 16MB which may cause some issues when installing large extensions. Please set your memory limit to at least 16MB." +COM_INSTALLER_MSG_WARNINGS_LOWMEMORYDESC="Your PHP memory limit is set below 16MB which may cause some issues when installing large extensions. Please set your memory limit to at least 32MB." +COM_INSTALLER_MSG_WARNINGS_LOWMEMORYWARN="Low PHP memory limit." +COM_INSTALLER_MSG_WARNINGS_MEDMEMORYDESC="Your PHP memory limit is set below 24MB which may cause some issues when installing large extensions. Please set your memory limit to at least 32MB." +COM_INSTALLER_MSG_WARNINGS_MEDMEMORYWARN="Potentially low PHP memory limit." COM_INSTALLER_MSG_WARNINGS_NONE="No warnings detected." COM_INSTALLER_MSG_WARNINGS_NOTCOMPLETE="

Warning: Update Not Complete!

The update is only partially complete. Please do the second update to complete the process.

" COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTSET="The PHP temporary folder is not set." diff --git a/administrator/language/en-GB/com_joomlaupdate.ini b/administrator/language/en-GB/com_joomlaupdate.ini index ac4620cb47182..eb46c9b94849e 100644 --- a/administrator/language/en-GB/com_joomlaupdate.ini +++ b/administrator/language/en-GB/com_joomlaupdate.ini @@ -3,6 +3,7 @@ ; License GNU General Public License version 2 or later; see LICENSE.txt ; Note : All ini files need to be saved as UTF-8 +COM_JOOMLAUPDATE_CAPTIVE_HEADLINE="Confirm your credentials" COM_JOOMLAUPDATE_CHECKED_UPDATES="Checked for updates." COM_JOOMLAUPDATE_CONFIG_CUSTOMURL_LABEL="Custom URL" COM_JOOMLAUPDATE_CONFIG_SOURCES_DESC="Configure where Joomla gets its update information from." @@ -15,8 +16,11 @@ COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_NEXT="Joomla Next" COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_TESTING="Testing" COM_JOOMLAUPDATE_CONFIGURATION="Joomla Update: Options" COM_JOOMLAUPDATE_CONFIRM="Confirm" +COM_JOOMLAUPDATE_EMPTYSTATE_APPEND="Update your site by manually uploading the update package." +COM_JOOMLAUPDATE_EMPTYSTATE_BUTTON_ADD="Check for Updates" +COM_JOOMLAUPDATE_EMPTYSTATE_CONTENT="Select the button below to check for updates." +COM_JOOMLAUPDATE_EMPTYSTATE_TITLE="Check if an update is available." COM_JOOMLAUPDATE_FAILED_TO_CHECK_UPDATES="Failed to check for updates." -COM_JOOMLAUPDATE_LOGIN="Login" COM_JOOMLAUPDATE_MINIMUM_STABILITY_ALPHA="Alpha" COM_JOOMLAUPDATE_MINIMUM_STABILITY_BETA="Beta" COM_JOOMLAUPDATE_MINIMUM_STABILITY_DESC="The minimum stability of the Joomla updates you would like to see. Development is the least stable, Stable is production quality. If an update doesn't specify a level it is assumed to be Stable." @@ -24,17 +28,33 @@ COM_JOOMLAUPDATE_MINIMUM_STABILITY_DEV="Development" COM_JOOMLAUPDATE_MINIMUM_STABILITY_LABEL="Minimum Stability" COM_JOOMLAUPDATE_MINIMUM_STABILITY_RC="Release Candidate" COM_JOOMLAUPDATE_MINIMUM_STABILITY_STABLE="Stable" +COM_JOOMLAUPDATE_NODOWNLOAD_EMPTYSTATE_APPEND="Update your site by manually uploading the update package." +COM_JOOMLAUPDATE_NODOWNLOAD_EMPTYSTATE_BUTTON_ADD="Retry check for update" +COM_JOOMLAUPDATE_NODOWNLOAD_EMPTYSTATE_CONTENT="An update to Joomla %1$s was found, but it wasn't possible to fetch the download URL for that update. Either the update to Joomla %1$s is not available for your stability level or there is a problem with the Joomla Update Server.
Please try to download the update package from the official Joomla download page and use the Upload and Update function." +COM_JOOMLAUPDATE_NODOWNLOAD_EMPTYSTATE_TITLE="We can't find a download URL" COM_JOOMLAUPDATE_OVERVIEW="Joomla Update" COM_JOOMLAUPDATE_PREUPDATE_CHECK_CAPTION="Table of server settings to check before update." -COM_JOOMLAUPDATE_PREUPDATE_CHECK_COMPLETED_YOU_HAVE_DANGEROUS_PLUGINS="There are plugins installed and enabled that could interfere with the Joomla upgrade and result in a failed upgrade that leaves the site inaccessible.

You are strongly advised to upgrade, disable or uninstall these plugins before upgrading." +COM_JOOMLAUPDATE_PREUPDATE_CHECK_COMPLETED_YOU_HAVE_DANGEROUS_PLUGINS="There are plugins installed and enabled that could interfere with the Joomla update and result in a failed update that leaves the site inaccessible.

You are strongly advised to update, disable or uninstall these plugins before upgrading." COM_JOOMLAUPDATE_PREUPDATE_CHECK_EXTENSION_AUTHOR_URL="Extension Author URL" COM_JOOMLAUPDATE_PREUPDATE_CHECK_NOT_COMPLETE="Pre-Update checks have not been completed yet - please wait." +COM_JOOMLAUPDATE_PREUPDATE_EXTENSIONS="Extensions" COM_JOOMLAUPDATE_PREUPDATE_HEADING_CHECKED="Checked" COM_JOOMLAUPDATE_PREUPDATE_HEADING_REQUIREMENT="Requirement" +COM_JOOMLAUPDATE_PREUPDATE_REQUIRED_SETTINGS="Required Settings" +COM_JOOMLAUPDATE_PREUPDATE_RECOMMENDED_SETTINGS="Recommended Settings" COM_JOOMLAUPDATE_PREUPDATE_UNKNOWN_EXTENSION_MANIFESTCACHE_VERSION="Unknown Version" +COM_JOOMLAUPDATE_REINSTALL_EMPTYSTATE_BUTTON_ADD="Reinstall Joomla! core files" +COM_JOOMLAUPDATE_REINSTALL_EMPTYSTATE_CONTENT="You can reinstall all core files to repair broken or missing files." +COM_JOOMLAUPDATE_REINSTALL_EMPTYSTATE_TITLE="Currently no update available." +COM_JOOMLAUPDATE_SELF_EMPTYSTATE_BUTTON_ADD="Update component now" +COM_JOOMLAUPDATE_SELF_EMPTYSTATE_CONTENT="A new version of the Joomla Update Component is available. You must update this first before you can update Joomla!" +COM_JOOMLAUPDATE_SELF_EMPTYSTATE_TITLE="Live Update is not available" COM_JOOMLAUPDATE_SYSTEM_CHECK="System Check" COM_JOOMLAUPDATE_TOOLBAR_CHECK="Check for Updates" COM_JOOMLAUPDATE_UPDATE_CHECK="Update Check" +COM_JOOMLAUPDATE_UPDATE_CONFIRM_BACKUP="I've created a backup and my extensions are compatible." +COM_JOOMLAUPDATE_UPDATE_EMPTYSTATE_TITLE="Update your site to \"Joomla! %s\"" +COM_JOOMLAUPDATE_UPDATE_EMPTYSTATE_BUTTON_ADD="Start update" COM_JOOMLAUPDATE_UPDATE_LOG_CLEANUP="Cleaning up after installation." COM_JOOMLAUPDATE_UPDATE_LOG_COMPLETE="Update to version %s is complete." COM_JOOMLAUPDATE_UPDATE_LOG_DELETE_FILES="Deleting removed files and folders." @@ -59,7 +79,7 @@ COM_JOOMLAUPDATE_VIEW_DEFAULT_DIRECTIVE="Directive" COM_JOOMLAUPDATE_VIEW_DEFAULT_DOWNLOAD_IN_PROGRESS="Downloading update file. Please wait ..." COM_JOOMLAUPDATE_VIEW_DEFAULT_EXPLANATION_AND_LINK_TO_DOCS="The pre-update check provides you with information about the readiness of your server, settings and installed extensions for the update.
You can find more information about this page and how to prepare for updating Joomla in the pre-update check documentation." COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_COMPATIBLE="Compatible" -COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_COMPATIBLE_WITH_JOOMLA_VERSION="Joomla %s Compatible Version" +COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_COMPATIBLE_WITH_JOOMLA_VERSION="%s Compatible" COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_INSTALLED_VERSION="Installed Version" COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_NAME="Extension Name" COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_NO_COMPATIBILITY_INFORMATION="No Compatibility Information" @@ -73,13 +93,13 @@ COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_NONE="No extensions installed." COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_PRE_UPDATE_CHECKS_FAILED="Pre-Update Checks Failed" COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_PRE_UPDATE_CHECKS_FAILED_NOTES="It was not possible to check the compatibility of these plugins. The request to the update server either timed out or returned an error." COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_PROBABLY_COMPATIBLE="No Update Required" -COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_PROBABLY_COMPATIBLE_NOTES="

The extension developer states that the currently installed version is compatible.

" +COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_PROBABLY_COMPATIBLE_NOTES="

The extension developer states that the currently installed version is compatible.

Please note that if you see a version highlighted as X.X.X then the extension developer is offering a newer version of the extension for your current version of Joomla than they do for the new version of Joomla. You should check with the extension developer if this is correct before you update Joomla.

" COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_REQUIRING_UPDATES_TO_BE_COMPATIBLE="Update Required" -COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_REQUIRING_UPDATES_TO_BE_COMPATIBLE_NOTES="

Please update these extensions before updating Joomla.

" +COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_REQUIRING_UPDATES_TO_BE_COMPATIBLE_NOTES="

Please update these extensions before updating Joomla.

Please be especially careful if the extension is also listed as incompatible with the current version of Joomla!

" COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_RUNNING_PRE_UPDATE_CHECKS="Running Pre-Update Checks" -COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_RUNNING_PRE_UPDATE_CHECKS_NOTES="Please be patient whilst we run the pre-update checks on your extensions." -COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_LESS_COMPATIBILITY_INFORMATION="[ Less Detail %s ]" -COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_MORE_COMPATIBILITY_INFORMATION="[ More Detail %s ]" +COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_RUNNING_PRE_UPDATE_CHECKS_NOTES="

Please be patient whilst we run the pre-update checks on your extensions.

" +COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_LESS_COMPATIBILITY_INFORMATION="Less Details" +COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_MORE_COMPATIBILITY_INFORMATION="More Details" COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_UPDATE_SERVER_OFFERS_NO_COMPATIBLE_VERSION="Update Information Unavailable" COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_UPDATE_SERVER_OFFERS_NO_COMPATIBLE_VERSION_NOTES="Extension does not offer a compatible version for the selected target version of Joomla. This could mean the extension does not use the Joomla update system or the developer has not provided compatibility information for this Joomla version yet." COM_JOOMLAUPDATE_VIEW_DEFAULT_HELP="More Information." @@ -87,24 +107,25 @@ COM_JOOMLAUPDATE_VIEW_DEFAULT_INFOURL="Additional Information" COM_JOOMLAUPDATE_VIEW_DEFAULT_INSTALL_SELF_UPDATE_FIRST="You must update to the latest version of the Joomla Update Component before you can update Joomla!" COM_JOOMLAUPDATE_VIEW_DEFAULT_INSTALLAGAIN="Reinstall Joomla core files" COM_JOOMLAUPDATE_VIEW_DEFAULT_INSTALLED="Installed Joomla version" -COM_JOOMLAUPDATE_VIEW_DEFAULT_INSTALLUPDATE="Install the Update" +COM_JOOMLAUPDATE_VIEW_DEFAULT_INSTALLUPDATE="Update" COM_JOOMLAUPDATE_VIEW_DEFAULT_LATEST="Latest Joomla version" COM_JOOMLAUPDATE_VIEW_DEFAULT_NO_DOWNLOAD_URL="We can't find a download URL" COM_JOOMLAUPDATE_VIEW_DEFAULT_NO_DOWNLOAD_URL_DESC="An update to Joomla %1$s was found, but it wasn't possible to fetch the download URL for that update. Either the update to Joomla %1$s is not available for your stability level or there is a problem with the Joomla Update Server.
Please try to download the update package from the official Joomla download page and use the Upload and Update tab." COM_JOOMLAUPDATE_VIEW_DEFAULT_NO_LIVE_UPDATE="Live Update is not available" COM_JOOMLAUPDATE_VIEW_DEFAULT_NO_LIVE_UPDATE_DESC="There is a new version of the Joomla Update Component that needs to be installed first. Click here to update the component." -COM_JOOMLAUPDATE_VIEW_DEFAULT_NON_CORE_PLUGIN_BEING_CHECKED="The system is currently checking these plugins to see if they could cause problems during the upgrade.

Please be patient while the checks are completed." -COM_JOOMLAUPDATE_VIEW_DEFAULT_NON_CORE_PLUGIN_CONFIRMATION="Do you wish to ignore the warnings about potentially incompatible plugins and to proceed with the upgrade?" +COM_JOOMLAUPDATE_VIEW_DEFAULT_NON_CORE_PLUGIN_BEING_CHECKED="The system is currently checking these plugins to see if they could cause problems during the update.

Please be patient while the checks are completed." +COM_JOOMLAUPDATE_VIEW_DEFAULT_NON_CORE_PLUGIN_CONFIRMATION="I accept the warnings about potentially incompatible extensions and wish to proceed with the update." COM_JOOMLAUPDATE_VIEW_DEFAULT_NOUPDATES="No updates available" COM_JOOMLAUPDATE_VIEW_DEFAULT_NOUPDATESNOTICE="You already have the latest Joomla version, %s." COM_JOOMLAUPDATE_VIEW_DEFAULT_PACKAGE="Update package URL" +COM_JOOMLAUPDATE_VIEW_DEFAULT_PACKAGE_INFO="You can also download the update package and install it manually." COM_JOOMLAUPDATE_VIEW_DEFAULT_PACKAGE_REINSTALL="Reinstall package URL" COM_JOOMLAUPDATE_VIEW_DEFAULT_PHP_VERSION_NOT_SUPPORTED="Your PHP version is not supported" COM_JOOMLAUPDATE_VIEW_DEFAULT_PHP_VERSION_NOT_SUPPORTED_DESC="An update to Joomla %1$s was found, but your currently installed PHP version does not match the minimum requirements for Joomla %1$s." -COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN="Potentially Serious Problem." -COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN_CONFIRM_MESSAGE="Are you sure you want to ignore the warnings about potentially incompatible plugins and proceed with the upgrade?" -COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN_DESC="This extension includes a plugin that could cause the upgrade to fail.

To perform the Joomla upgrade safely you should either upgrade this extension to a version compatible with your target version of Joomla or disable the relevant plugin(s) and check again.

For more information about the relevant plugins please check the 'Live Update' tab." -COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN_LIST="The following plugins could cause problems during the upgrade" +COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN="Potential Problem." +COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN_CONFIRM_MESSAGE="Are you sure you want to ignore the warnings about potentially incompatible extensions and proceed with the update?" +COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN_DESC="This extension includes a plugin that could cause the update to fail.

To perform the Joomla update safely you should either update this extension to a version compatible with your target version of Joomla or disable the relevant plugin(s) and check again.

For more information about the relevant plugins please check the 'Live Update' tab." +COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN_LIST="The following plugins could cause problems during the update" COM_JOOMLAUPDATE_VIEW_DEFAULT_PREUPDATE_CHECK="Pre-Update Check for Joomla %s" COM_JOOMLAUPDATE_VIEW_DEFAULT_RECOMMENDED="Recommended" COM_JOOMLAUPDATE_VIEW_DEFAULT_RECOMMENDED_SETTINGS_DESC="These settings are recommended for PHP in order to ensure full compatibility with Joomla. However, Joomla! will still operate if your settings do not quite match the recommended configuration." @@ -121,7 +142,7 @@ COM_JOOMLAUPDATE_VIEW_DEFAULT_UPDATES_INFO_CUSTOM="You are on the "%s" COM_JOOMLAUPDATE_VIEW_DEFAULT_UPDATES_INFO_DEFAULT="You are on the "%s" update channel. Through this channel you'll receive notifications for all updates of the current Joomla release (4.x)" COM_JOOMLAUPDATE_VIEW_DEFAULT_UPDATES_INFO_NEXT="You are on the "%s" update channel. Through this channel you'll receive notifications for all updates of the current Joomla release (4.x) and you will also be notified when the future major release (5.x) will be available. Before upgrading to 5.x you'll need to assess its compatibility with your environment." COM_JOOMLAUPDATE_VIEW_DEFAULT_UPDATES_INFO_TESTING="You are on the "%s" update channel. This channel is designed for testing new releases and fixes in Joomla.
It is only intended for JBS (Joomla Bug Squad™) members and others within the Joomla community who are testing. Do not use this setting on a production site." -COM_JOOMLAUPDATE_VIEW_DEFAULT_UPLOAD_INTRO="You can use this feature to update Joomla if your server is behind a firewall or otherwise unable to contact the update servers. First download the Joomla Upgrade Package in ZIP format from the official Joomla download page. Then use the fields below to upload and install it." +COM_JOOMLAUPDATE_VIEW_DEFAULT_UPLOAD_INTRO="You can use this feature to update Joomla if your server is behind a firewall or otherwise unable to contact the update servers. First download the Joomla Update Package in ZIP format from the official Joomla download page. Then use the fields below to upload and install it." COM_JOOMLAUPDATE_VIEW_UPDATE_BYTESEXTRACTED="Bytes extracted" COM_JOOMLAUPDATE_VIEW_UPDATE_BYTESREAD="Bytes read" COM_JOOMLAUPDATE_VIEW_UPDATE_CHECKSUM_WRONG="File Checksum Failed" diff --git a/build/media_source/com_joomlaupdate/js/default.es6.js b/build/media_source/com_joomlaupdate/js/default.es6.js index 6c6a75a6abafe..06c4f2ad97320 100644 --- a/build/media_source/com_joomlaupdate/js/default.es6.js +++ b/build/media_source/com_joomlaupdate/js/default.es6.js @@ -16,7 +16,7 @@ Joomla = window.Joomla || {}; alert(Joomla.Text._('COM_INSTALLER_MSG_INSTALL_PLEASE_SELECT_A_PACKAGE'), true); } else if (form.install_package.files[0].size > form.max_upload_size.value) { alert(Joomla.Text._('COM_INSTALLER_MSG_WARNINGS_UPLOADFILETOOBIG'), true); - } else { + } else if (document.getElementById('joomlaupdate-confirm-backup').checked) { form.submit(); } }; @@ -45,13 +45,26 @@ Joomla = window.Joomla || {}; document.addEventListener('DOMContentLoaded', () => { const uploadButton = document.getElementById('uploadButton'); - const downloadMsg = document.getElementById('downloadMessage'); - + const uploadField = document.getElementById('install_package'); + const installButton = document.querySelector('.emptystate-btnadd', document.getElementById('joomlaupdate-wrapper')); + const updateCheck = document.getElementById('joomlaupdate-confirm-backup'); + const form = installButton ? installButton.closest('form') : null; + const task = form ? form.querySelector('[name=task]', form) : null; if (uploadButton) { - uploadButton.addEventListener('click', () => { - if (downloadMsg) { - downloadMsg.classList.remove('hidden'); + uploadButton.addEventListener('click', Joomla.submitbuttonUpload); + } + if (uploadField) { + uploadField.addEventListener('change', Joomla.installpackageChange); + } + // Trigger (re-) install (including checkbox confirm if we update) + if (installButton && installButton.getAttribute('href') === '#' && task) { + installButton.addEventListener('click', (e) => { + e.preventDefault(); + if (updateCheck && !updateCheck.checked) { + return; } + task.value = 'update.download'; + form.submit(); }); } }); @@ -91,82 +104,87 @@ Joomla = window.Joomla || {}; SERVER_ERROR: 3, }; + PreUpdateChecker.cleanup = (status) => { + // Set the icon in the nav-tab + const infoIcon = document.querySelector('#joomlaupdate-precheck-extensions-tab .fa-spinner'); + + let iconColor = 'success'; + let iconClass = 'check'; + + switch (status) { + case 'danger': + iconColor = 'danger'; + iconClass = 'times'; + break; + case 'warning': + iconColor = 'warning'; + iconClass = 'exclamation-triangle'; + break; + default: + } + if (infoIcon) { + infoIcon.classList.remove('fa-spinner', 'fa-spin', 'text-info'); + infoIcon.classList.add(`fa-${iconClass}`, `text-${iconColor}`); + } + // Hide table of addons to load + const checkedExtensions = document.querySelector('#compatibilityTable0'); + const preupdateCheckWarning = document.querySelector('#preupdateCheckWarning'); + if (checkedExtensions) { + checkedExtensions.classList.add('hidden'); + } + if (preupdateCheckWarning) { + preupdateCheckWarning.classList.add('hidden'); + } + }; + /** * Run the PreUpdateChecker. * Called by document ready, setup below. */ PreUpdateChecker.run = () => { - [].slice.call(document.querySelectorAll('.settingstoggle')).forEach((el) => { - el.style.float = 'right'; - el.style.cursor = 'pointer'; - el.addEventListener('click', () => { - const settingsfieldset = el.closest('fieldset'); - if (el.dataset.state === 'closed') { - el.dataset.state = 'open'; - el.innerHTML = Joomla.sanitizeHtml(Joomla.getOptions('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_LESS_COMPATIBILITY_INFORMATION')); - settingsfieldset.querySelectorAll('.settingsInfo').forEach((fieldset) => { - fieldset.classList.remove('hidden'); - }); - } else { - el.dataset.state = 'closed'; - el.innerHTML = Joomla.sanitizeHtml(Joomla.getOptions('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_MORE_COMPATIBILITY_INFORMATION')); - settingsfieldset.querySelectorAll('.settingsInfo').forEach((fieldset) => { - fieldset.classList.add('hidden'); - }); - } - }); - }); - // eslint-disable-next-line no-undef PreUpdateChecker.nonCoreCriticalPlugins = Joomla.getOptions('nonCoreCriticalPlugins', []); - // If there are no non Core Critical Plugins installed, and we are in the update view, then - // disable the warnings upfront - if (PreUpdateChecker.nonCoreCriticalPlugins.length === 0 && document.getElementById('updateView') !== null) { - document.getElementById('preupdateCheckWarning').style.display = 'none'; - document.getElementById('preupdateconfirmation').style.display = 'none'; - document.getElementById('preupdatecheckbox').style.display = 'none'; - document.getElementById('preupdatecheckheadings').style.display = 'none'; - document.getElementById('preupdatecheckbox').checked = true; - document.getElementById('noncoreplugins').checked = true; - - [].slice.call(document.querySelectorAll('button.submitupdate')).forEach((el) => { - el.classList.remove('disabled'); - el.removeAttribute('disabled'); - }); - } - // Grab all extensions based on the selector set in the config object const extensions = document.querySelectorAll(PreUpdateChecker.config.selector); // If there are no extensions to be checked we can exit here if (extensions.length === 0) { + if (document.getElementById('preupdatecheckbox') !== null) { + document.getElementById('preupdatecheckbox').style.display = 'none'; + } + if (document.getElementById('noncoreplugins') !== null) { + document.getElementById('noncoreplugins').checked = true; + } + [].slice.call(document.querySelectorAll('button.submitupdate')).forEach((el) => { + el.classList.remove('disabled'); + el.removeAttribute('disabled'); + }); + PreUpdateChecker.cleanup(); return; } + // Let the user make an update although there *could* be dangerous plugins in the wild const onChangeEvent = () => { - const preUpdateCheckbox = document.getElementById('preupdatecheckbox').checked; - const nonCorePluginCheckbox = document.getElementById('noncoreplugins').checked; - if (preUpdateCheckbox && nonCorePluginCheckbox) { + const nonCorePluginCheckbox = document.getElementById('noncoreplugins'); + if (nonCorePluginCheckbox.checked) { if (window.confirm(Joomla.Text._('COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN_CONFIRM_MESSAGE'))) { [].slice.call(document.querySelectorAll('button.submitupdate')).forEach((el) => { el.classList.remove('disabled'); el.removeAttribute('disabled'); }); } else { - document.getElementById('preupdatecheckbox').checked = true; - document.getElementById('noncoreplugins').checked = true; + nonCorePluginCheckbox.checked = false; } } else { [].slice.call(document.querySelectorAll('button.submitupdate')).forEach((el) => { - el.classList.remove('disabled'); - el.removeAttribute('disabled'); + el.classList.add('disabled'); + el.setAttribute('disabled', ''); }); } }; - if (document.getElementById('updateView') !== null) { - document.getElementById('preupdatecheckbox').addEventListener('change', onChangeEvent); + if (document.getElementById('noncoreplugins') !== null) { document.getElementById('noncoreplugins').addEventListener('change', onChangeEvent); } @@ -175,99 +193,24 @@ Joomla = window.Joomla || {}; PreUpdateChecker.joomlaTargetVersion = joomlaUpdateWrapper.getAttribute('data-joomla-target-version'); PreUpdateChecker.joomlaCurrentVersion = joomlaUpdateWrapper.getAttribute('data-joomla-current-version'); - // No point creating and loading a component stylesheet for 4 settings - [].slice.call(document.querySelectorAll('.compatibilitytypes img')).forEach((el) => { - el.style.height = '20px'; - }); - [].slice.call(document.querySelectorAll('.compatibilitytypes')).forEach((el) => { - el.style.display = 'none'; - el.style.marginLeft = 0; - }); - // The currently processing line should show until it’s finished - const compatibilityType0 = document.getElementById('compatibilitytype0'); - - if (compatibilityType0) { - compatibilityType0.style.display = 'block'; - } - [].slice.call(document.querySelectorAll('.compatibilitytoggle')).forEach((el) => { - el.style.float = 'right'; - el.style.cursor = 'pointer'; el.addEventListener('click', () => { - const compatibilitytypes = el.closest('fieldset.compatibilitytypes'); + const compatibilityTable = el.closest('.compatibilityTable'); if (el.dataset.state === 'closed') { el.dataset.state = 'open'; - el.innerHTML = Joomla.sanitizeHtml(Joomla.getOptions('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_LESS_COMPATIBILITY_INFORMATION')); + el.innerHTML = Joomla.sanitizeHtml(Joomla.Text._('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_LESS_COMPATIBILITY_INFORMATION')); - [].slice.call(compatibilitytypes.querySelectorAll('.exname')).forEach((extension) => { - extension.classList.remove('col-md-8'); - extension.classList.add('col-md-4'); + [].slice.call(compatibilityTable.querySelectorAll('table .hidden')).forEach((elem) => { + elem.classList.remove('hidden'); }); - - [].slice.call(compatibilitytypes.querySelectorAll('.extype')).forEach((extension) => { - extension.classList.remove('col-md-4'); - extension.classList.add('col-md-1'); - }); - - [].slice.call(compatibilitytypes.querySelectorAll('.upcomp')).forEach((extension) => { - extension.classList.remove('hidden'); - extension.classList.add('col-md-3'); - }); - - [].slice.call(compatibilitytypes.querySelectorAll('.currcomp')).forEach((extension) => { - extension.classList.remove('hidden'); - extension.classList.add('col-md-3'); - }); - - [].slice.call(compatibilitytypes.querySelectorAll('.instver')).forEach((extension) => { - extension.classList.remove('hidden'); - extension.classList.add('col-md-1'); - }); - - if (PreUpdateChecker.showyellowwarning && compatibilitytypes.querySelector('#updateyellowwarning')) { - compatibilitytypes.querySelector('#updateyellowwarning').classList.remove('hidden'); - } - - if (PreUpdateChecker.showorangewarning && compatibilitytypes.querySelector('#updateorangewarning')) { - compatibilitytypes.querySelector('#updateorangewarning').classList.remove('hidden'); - } } else { el.dataset.state = 'closed'; - el.innerHTML = Joomla.sanitizeHtml(Joomla.getOptions('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_MORE_COMPATIBILITY_INFORMATION')); - - [].slice.call(compatibilitytypes.querySelectorAll('.exname')).forEach((extension) => { - extension.classList.add('col-md-8'); - extension.classList.remove('col-md-4'); - }); + el.innerHTML = Joomla.sanitizeHtml(Joomla.Text._('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_MORE_COMPATIBILITY_INFORMATION')); - [].slice.call(compatibilitytypes.querySelectorAll('.extype')).forEach((extension) => { - extension.classList.add('col-md-4'); - extension.classList.remove('col-md-1'); + [].slice.call(compatibilityTable.querySelectorAll('table .instver, table .upcomp, table .currcomp')).forEach((elem) => { + elem.classList.add('hidden'); }); - - [].slice.call(compatibilitytypes.querySelectorAll('.upcomp')).forEach((extension) => { - extension.classList.add('hidden'); - extension.classList.remove('col-md-3'); - }); - - [].slice.call(compatibilitytypes.querySelectorAll('.currcomp')).forEach((extension) => { - extension.classList.add('hidden'); - extension.classList.remove('col-md-3'); - }); - - [].slice.call(compatibilitytypes.querySelectorAll('.instver')).forEach((extension) => { - extension.classList.add('hidden'); - extension.classList.remove('col-md-1'); - }); - - if (PreUpdateChecker.showyellowwarning && compatibilitytypes.querySelector('#updateyellowwarning')) { - compatibilitytypes.querySelector('#updateyellowwarning').classList.add('hidden'); - } - - if (PreUpdateChecker.showorangewarning && compatibilitytypes.querySelector('#updateorangewarning')) { - compatibilitytypes.querySelector('#updateorangewarning').classList.add('hidden'); - } } }); }); @@ -314,6 +257,7 @@ Joomla = window.Joomla || {}; callback(extension); }, onError() { + extension.serverError = 1; // Pass the retrieved data to the callback callback(extension); }, @@ -344,24 +288,35 @@ Joomla = window.Joomla || {}; case PreUpdateChecker.STATE.COMPATIBLE: if (extensionData.compatibilityData.upgradeWarning) { // eslint-disable-next-line max-len - html = `${extensionData.compatibilityData.upgradeCompatibilityStatus.compatibleVersion}`; - PreUpdateChecker.showyellowwarning = true; + const compatibleVersion = Joomla.sanitizeHtml(extensionData.compatibilityData.upgradeCompatibilityStatus.compatibleVersion); + html = `${compatibleVersion}`; + // @TODO activate when language strings are correct + /* if (compatibilitytypes.querySelector('#updateorangewarning')) { + compatibilitytypes.querySelector('#updateorangewarning').classList.remove('hidden'); + } */ } else { // eslint-disable-next-line max-len html = extensionData.compatibilityData.upgradeCompatibilityStatus.compatibleVersion === false ? Joomla.Text._('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_NO_COMPATIBILITY_INFORMATION') - : extensionData.compatibilityData.upgradeCompatibilityStatus.compatibleVersion; + // eslint-disable-next-line max-len + : Joomla.sanitizeHtml(extensionData.compatibilityData.upgradeCompatibilityStatus.compatibleVersion); } break; case PreUpdateChecker.STATE.INCOMPATIBLE: // No compatible version found -> display error label html = Joomla.Text._('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_NO_COMPATIBILITY_INFORMATION'); - PreUpdateChecker.showorangewarning = true; + // @TODO activate when language strings are correct + /* if (document.querySelector('#updateyellowwarning')) { + document.querySelector('#updateyellowwarning').classList.remove('hidden'); + } */ break; case PreUpdateChecker.STATE.MISSING_COMPATIBILITY_TAG: // Could not check compatibility state -> display warning html = Joomla.Text._('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_NO_COMPATIBILITY_INFORMATION'); - PreUpdateChecker.showorangewarning = true; + // @TODO activate when language strings are correct + /* if (document.querySelector('#updateyellowwarning')) { + document.querySelector('#updateyellowwarning').classList.remove('hidden'); + } */ break; default: // An error occurred -> show unknown error note @@ -370,7 +325,7 @@ Joomla = window.Joomla || {}; } // Insert the generated html - extensionData.element.innerHTML = Joomla.sanitizeHtml(html); + extensionData.element.innerHTML = html; // Process Current Version Extension Compatibility html = ''; @@ -403,36 +358,29 @@ Joomla = window.Joomla || {}; const extensionId = extensionData.element.getAttribute('data-extension-id'); document.getElementById(`available-version-${extensionId}`).innerText = html; - const compatType = document.querySelector(`#compatibilitytype${extensionData.compatibilityData.resultGroup} tbody`); + const compatType = document.querySelector(`#compatibilityTable${extensionData.compatibilityData.resultGroup} tbody`); if (compatType) { compatType.appendChild(extensionData.element.closest('tr')); } - document.getElementById(`compatibilitytype${extensionData.compatibilityData.resultGroup}`).style.display = 'block'; - document.getElementById('compatibilitytype0').style.display = 'block'; + // Show the table + document.getElementById(`compatibilityTable${extensionData.compatibilityData.resultGroup}`).classList.remove('hidden'); // Process the nonCoreCriticalPlugin list if (extensionData.compatibilityData.resultGroup === 3) { PreUpdateChecker.nonCoreCriticalPlugins.forEach((plugin, cpi) => { if (plugin.package_id.toString() === extensionId || plugin.extension_id.toString() === extensionId) { - document.getElementById(`#plg_${plugin.extension_id}`).remove(); PreUpdateChecker.nonCoreCriticalPlugins.splice(cpi, 1); } }); } - // Have we finished running through the potentially critical plugins - if so we can hide the - // warning before all the checks are completed - const headingsElement = document.getElementById('preupdatecheckheadings'); - if (headingsElement && headingsElement.querySelectorAll('table td').length === 0) { - headingsElement.style.display = 'none'; - } - // Have we finished? - if (!document.querySelector('#compatibilitytype0 tbody td')) { - document.getElementById('compatibilitytype0').style.display = 'none'; + if (!document.querySelector('#compatibilityTable0 tbody td')) { + document.getElementById('compatibilityTable0').classList.add('hidden'); + let status = 'success'; PreUpdateChecker.nonCoreCriticalPlugins.forEach((plugin) => { let problemPluginRow = document.querySelector(`td[data-extension-id="${plugin.extension_id}"]`); if (!problemPluginRow) { @@ -441,61 +389,54 @@ Joomla = window.Joomla || {}; if (problemPluginRow) { const tableRow = problemPluginRow.closest('tr'); tableRow.classList.add('error'); - const pluginTitleTableCell = tableRow.querySelector('td:first-child'); - pluginTitleTableCell.innerHTML = Joomla.sanitizeHtml(`${pluginTitleTableCell.innerHTML} - + const pluginTitleTableCell = tableRow.querySelector('.exname'); + pluginTitleTableCell.innerHTML = `${Joomla.sanitizeHtml(pluginTitleTableCell.innerHTML)} +
+ ${Joomla.Text._('COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN')} - - ${Joomla.Text._('COM_JOOMLAUPDATE_VIEW_DEFAULT_HELP')} - `); + +
`; const popoverElement = pluginTitleTableCell.querySelector('.hasPopover'); if (popoverElement) { popoverElement.style.cursor = 'pointer'; // eslint-disable-next-line no-new - new bootstrap.Popover(popoverElement, { placement: 'top', html: true, trigger: 'focus click' }); + new bootstrap.Popover(popoverElement, { placement: 'top', html: true, trigger: 'focus' }); } + status = 'danger'; } }); - - // If we aren't in the update view now - bail early. - if (document.getElementById('updateView') === null) { - return; + // Updates required + if (document.querySelector('#compatibilityTable2 tbody td')) { + status = 'danger'; + } else if (status !== 'danger' && document.querySelector('#compatibilityTable1 tbody td')) { + status = 'warning'; } - if (PreUpdateChecker.nonCoreCriticalPlugins.length === 0) { - document.getElementById('preupdateCheckWarning').style.display = 'none'; - document.getElementById('preupdateconfirmation').style.display = 'none'; + if (PreUpdateChecker.nonCoreCriticalPlugins.length === 0 && status === 'success') { document.getElementById('preupdatecheckbox').style.display = 'none'; - document.getElementById('preupdatecheckheadings').style.display = 'none'; - document.getElementById('preupdatecheckbox').checked = true; document.getElementById('noncoreplugins').checked = true; [].slice.call(document.querySelectorAll('button.submitupdate')).forEach((el) => { el.classList.remove('disabled'); el.removeAttribute('disabled'); }); - } else { - document.getElementById('preupdateCheckWarning').classList.add('hidden'); + } else if (PreUpdateChecker.nonCoreCriticalPlugins.length > 0) { document.getElementById('preupdateCheckCompleteProblems').classList.remove('hidden'); - - [].slice.call(document.querySelectorAll('#preupdateconfirmation .preupdateconfirmation_label h3')).forEach((el) => { - el.innerText = Joomla.Text._('COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN_LIST'); - }); - - [].slice.call(document.querySelectorAll('#preupdateconfirmation .preupdateconfirmation_label')).forEach((el) => { - el.classList.add('label-important'); - el.classList.remove('label-warning'); - }); } + + PreUpdateChecker.cleanup(status); } }; - // Run PreUpdateChecker on document ready - document.addEventListener('DOMContentLoaded', PreUpdateChecker.run, false); + if (document.getElementById('preupdatecheck') !== null) { + // Run PreUpdateChecker on document ready + document.addEventListener('DOMContentLoaded', PreUpdateChecker.run, false); + } })(Joomla, document); diff --git a/layouts/joomla/content/emptystate.php b/layouts/joomla/content/emptystate.php index 06cb2eee6e22d..3fe64284cda07 100644 --- a/layouts/joomla/content/emptystate.php +++ b/layouts/joomla/content/emptystate.php @@ -45,7 +45,7 @@
input->get('tmpl') !== 'component') : ?> + class="btn btn-primary btn-lg px-4 me-sm-3 emptystate-btnadd">