Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update 4.1 from 4.0 #107

Closed
joomlapl-bot opened this issue Jan 5, 2022 · 1 comment
Closed

Update 4.1 from 4.0 #107

joomlapl-bot opened this issue Jan 5, 2022 · 1 comment

Comments

@joomlapl-bot
Copy link
Collaborator

PR w związku ze zmianą oryginału joomla/joomla-cms#36575 Poniżej zmiany w oryginale:

Click to expand the diff!
diff --git a/administrator/components/com_banners/tmpl/clients/default.php b/administrator/components/com_banners/tmpl/clients/default.php
index 27f0d737f6a4..fc7e5392d147 100644
--- a/administrator/components/com_banners/tmpl/clients/default.php
+++ b/administrator/components/com_banners/tmpl/clients/default.php
@@ -123,20 +123,40 @@
 										<?php echo $item->contact; ?>
 									</td>
 									<td class="text-center btns d-none d-md-table-cell itemnumber">
-										<a class="btn <?php echo ($item->count_published > 0) ? 'btn-success' : 'btn-secondary'; ?>" href="<?php echo Route::_('index.php?option=com_banners&view=banners&filter[client_id]=' . (int) $item->id . '&filter[published]=1'); ?>">
-											<?php echo $item->count_published; ?></a>
+										<a class="btn <?php echo ($item->count_published > 0) ? 'btn-success' : 'btn-secondary'; ?>" href="<?php echo Route::_('index.php?option=com_banners&view=banners&filter[client_id]=' . (int) $item->id . '&filter[published]=1'); ?>"
+										aria-describedby="tip-publish<?php echo $i; ?>">
+											<?php echo $item->count_published; ?>
+										</a>
+										<div role="tooltip" id="tip-publish<?php echo $i; ?>">
+											<?php echo Text::_('COM_BANNERS_COUNT_PUBLISHED_ITEMS'); ?>
+										</div>
 									</td>
 									<td class="text-center btns d-none d-md-table-cell itemnumber">
-										<a class="btn <?php echo ($item->count_unpublished > 0) ? 'btn-danger' : 'btn-secondary'; ?>" href="<?php echo Route::_('index.php?option=com_banners&view=banners&filter[client_id]=' . (int) $item->id . '&filter[published]=0'); ?>">
-											<?php echo $item->count_unpublished; ?></a>
+										<a class="btn <?php echo ($item->count_unpublished > 0) ? 'btn-danger' : 'btn-secondary'; ?>" href="<?php echo Route::_('index.php?option=com_banners&view=banners&filter[client_id]=' . (int) $item->id . '&filter[published]=0'); ?>"
+										aria-describedby="tip-unpublish<?php echo $i; ?>">
+											<?php echo $item->count_unpublished; ?>
+										</a>
+										<div role="tooltip" id="tip-unpublish<?php echo $i; ?>">
+											<?php echo Text::_('COM_BANNERS_COUNT_UNPUBLISHED_ITEMS'); ?>
+										</div>
 									</td>
 									<td class="text-center btns d-none d-md-table-cell itemnumber">
-										<a class="btn <?php echo ($item->count_archived > 0) ? 'btn-info' : 'btn-secondary'; ?>" href="<?php echo Route::_('index.php?option=com_banners&view=banners&filter[client_id]=' . (int) $item->id . '&filter[published]=2'); ?>">
-											<?php echo $item->count_archived; ?></a>
+										<a class="btn <?php echo ($item->count_archived > 0) ? 'btn-info' : 'btn-secondary'; ?>" href="<?php echo Route::_('index.php?option=com_banners&view=banners&filter[client_id]=' . (int) $item->id . '&filter[published]=2'); ?>"
+										aria-describedby="tip-archived<?php echo $i; ?>">
+											<?php echo $item->count_archived; ?>
+										</a>
+										<div role="tooltip" id="tip-archived<?php echo $i; ?>">
+											<?php echo Text::_('COM_BANNERS_COUNT_ARCHIVED_ITEMS'); ?>
+										</div>
 									</td>
 									<td class="text-center btns d-none d-md-table-cell itemnumber">
-										<a class="btn <?php echo ($item->count_trashed > 0) ? 'btn-inverse' : 'btn-secondary'; ?>" href="<?php echo Route::_('index.php?option=com_banners&view=banners&filter[client_id]=' . (int) $item->id . '&filter[published]=-2'); ?>">
-											<?php echo $item->count_trashed; ?></a>
+										<a class="btn <?php echo ($item->count_trashed > 0) ? 'btn-dark' : 'btn-secondary'; ?>" href="<?php echo Route::_('index.php?option=com_banners&view=banners&filter[client_id]=' . (int) $item->id . '&filter[published]=-2'); ?>"
+										aria-describedby="tip-trashed<?php echo $i; ?>">
+											<?php echo $item->count_trashed; ?>
+										</a>
+										<div role="tooltip" id="tip-trashed<?php echo $i; ?>">
+											<?php echo Text::_('COM_BANNERS_COUNT_TRASHED_ITEMS'); ?>
+										</div>
 									</td>
 									<td class="small d-none d-md-table-cell">
 										<?php if ($item->purchase_type < 0) : ?>
diff --git a/administrator/components/com_categories/tmpl/category/edit.php b/administrator/components/com_categories/tmpl/category/edit.php
index 26dfa454f4ac..448b4a18d583 100644
--- a/administrator/components/com_categories/tmpl/category/edit.php
+++ b/administrator/components/com_categories/tmpl/category/edit.php
@@ -124,6 +124,7 @@
 
 		<?php echo $this->form->getInput('extension'); ?>
 		<input type="hidden" name="task" value="">
+		<input type="hidden" name="return" value="<?php echo $input->getBase64('return'); ?>">
 		<input type="hidden" name="forcedLanguage" value="<?php echo $input->get('forcedLanguage', '', 'cmd'); ?>">
 		<?php echo HTMLHelper::_('form.token'); ?>
 	</div>
diff --git a/administrator/components/com_content/forms/article.xml b/administrator/components/com_content/forms/article.xml
index a71ec8438528..6c9189d19404 100644
--- a/administrator/components/com_content/forms/article.xml
+++ b/administrator/components/com_content/forms/article.xml
@@ -909,7 +909,7 @@
 
 	<fields name="metadata" label="JGLOBAL_FIELDSET_METADATA_OPTIONS">
 		<fieldset name="jmetadata"
-				  label="JGLOBAL_FIELDSET_METADATA_OPTIONS">
+				label="JGLOBAL_FIELDSET_METADATA_OPTIONS">
 
 			<field
 				name="robots"
diff --git a/administrator/components/com_content/src/Model/ArticleModel.php b/administrator/components/com_content/src/Model/ArticleModel.php
index 7376a433dfad..9ced66d6e8f8 100644
--- a/administrator/components/com_content/src/Model/ArticleModel.php
+++ b/administrator/components/com_content/src/Model/ArticleModel.php
@@ -499,7 +499,9 @@ public function getForm($data = array(), $loadData = true)
 		$record = new \stdClass;
 
 		// Get ID of the article from input, for frontend, we use a_id while backend uses id
-		$articleIdFromInput = (int) $app->input->getInt('a_id') ?: $app->input->getInt('id', 0);
+		$articleIdFromInput = $app->isClient('site')
+			? $app->input->getInt('a_id', 0)
+			: $app->input->getInt('id', 0);
 
 		// On edit article, we get ID of article from article.id state, but on save, we use data from input
 		$id = (int) $this->getState('article.id', $articleIdFromInput);
diff --git a/administrator/components/com_installer/src/Model/WarningsModel.php b/administrator/components/com_installer/src/Model/WarningsModel.php
index 395add43e35a..ff3d20e5d1ce 100644
--- a/administrator/components/com_installer/src/Model/WarningsModel.php
+++ b/administrator/components/com_installer/src/Model/WarningsModel.php
@@ -98,76 +98,99 @@ public function getItems()
 		$messages = [];
 
 		// 16MB
-		$minMemory = 16 * 1024 * 1024;
+		$minLimit = 16 * 1024 * 1024;
 
 		$file_uploads = ini_get('file_uploads');
 
 		if (!$file_uploads)
 		{
-			$messages[] = array('message' => Text::_('COM_INSTALLER_MSG_WARNINGS_FILEUPLOADSDISABLED'),
-					'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_FILEUPLOADISDISABLEDDESC'));
+			$messages[] = [
+				'message'     => Text::_('COM_INSTALLER_MSG_WARNINGS_FILEUPLOADSDISABLED'),
+				'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_FILEUPLOADISDISABLEDDESC'),
+			];
 		}
 
 		$upload_dir = ini_get('upload_tmp_dir');
 
 		if (!$upload_dir)
 		{
-			$messages[] = array('message' => Text::_('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTSET'),
-					'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTSETDESC'));
+			$messages[] = [
+				'message'     => Text::_('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTSET'),
+				'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTSETDESC'),
+			];
 		}
 		elseif (!is_writable($upload_dir))
 		{
-			$messages[] = array('message' => Text::_('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTWRITEABLE'),
-					'description' => Text::sprintf('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTWRITEABLEDESC', $upload_dir));
+			$messages[] = [
+				'message'     => Text::_('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTWRITEABLE'),
+				'description' => Text::sprintf('COM_INSTALLER_MSG_WARNINGS_PHPUPLOADNOTWRITEABLEDESC', $upload_dir),
+			];
 		}
 
 		$tmp_path = Factory::getApplication()->get('tmp_path');
 
 		if (!$tmp_path)
 		{
-			$messages[] = array('message' => Text::_('COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTSET'),
-					'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTSETDESC'));
+			$messages[] = [
+				'message'     => Text::_('COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTSET'),
+				'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTSETDESC'),
+			];
 		}
 		elseif (!is_writable($tmp_path))
 		{
-			$messages[] = array('message' => Text::_('COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTWRITEABLE'),
-					'description' => Text::sprintf('COM_INSTALLER_MSG_WARNINGS_JOOMLATMPNOTWRITEABLEDESC', $tmp_path));
+			$messages[] = [
+				'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 < $minMemory && $memory_limit != -1)
+		if ($memory_limit > -1)
 		{
-			// 16MB
-			$messages[] = array('message' => Text::_('COM_INSTALLER_MSG_WARNINGS_LOWMEMORYWARN'),
-					'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_LOWMEMORYDESC'));
-		}
-		elseif ($memory_limit < ($minMemory * 1.5) && $memory_limit != -1)
-		{
-			// 24MB
-			$messages[] = array('message' => Text::_('COM_INSTALLER_MSG_WARNINGS_MEDMEMORYWARN'),
-					'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_MEDMEMORYDESC'));
+			if ($memory_limit < $minLimit)
+			{
+				// 16MB
+				$messages[] = [
+					'message'     => Text::_('COM_INSTALLER_MSG_WARNINGS_LOWMEMORYWARN'),
+					'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_LOWMEMORYDESC'),
+				];
+			}
+			elseif ($memory_limit < ($minLimit * 1.5))
+			{
+				// 24MB
+				$messages[] = [
+					'message'     => Text::_('COM_INSTALLER_MSG_WARNINGS_MEDMEMORYWARN'),
+					'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_MEDMEMORYDESC'),
+				];
+			}
 		}
 
-		$post_max_size = $this->return_bytes(ini_get('post_max_size'));
+		$post_max_size       = $this->return_bytes(ini_get('post_max_size'));
 		$upload_max_filesize = $this->return_bytes(ini_get('upload_max_filesize'));
 
-		if ($post_max_size < $upload_max_filesize)
+		if ($post_max_size > 0 && $post_max_size < $upload_max_filesize)
 		{
-			$messages[] = array('message' => Text::_('COM_INSTALLER_MSG_WARNINGS_UPLOADBIGGERTHANPOST'),
-					'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_UPLOADBIGGERTHANPOSTDESC'));
+			$messages[] = [
+				'message'     => Text::_('COM_INSTALLER_MSG_WARNINGS_UPLOADBIGGERTHANPOST'),
+				'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_UPLOADBIGGERTHANPOSTDESC'),
+			];
 		}
 
-		if ($post_max_size < $minMemory)
+		if ($post_max_size > 0 && $post_max_size < $minLimit)
 		{
-			$messages[] = array('message' => Text::_('COM_INSTALLER_MSG_WARNINGS_SMALLPOSTSIZE'),
-					'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_SMALLPOSTSIZEDESC'));
+			$messages[] = [
+				'message'     => Text::_('COM_INSTALLER_MSG_WARNINGS_SMALLPOSTSIZE'),
+				'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_SMALLPOSTSIZEDESC'),
+			];
 		}
 
-		if ($upload_max_filesize < $minMemory)
+		if ($upload_max_filesize > 0 && $upload_max_filesize < $minLimit)
 		{
-			$messages[] = array('message' => Text::_('COM_INSTALLER_MSG_WARNINGS_SMALLUPLOADSIZE'),
-					'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_SMALLUPLOADSIZEDESC'));
+			$messages[] = [
+				'message'     => Text::_('COM_INSTALLER_MSG_WARNINGS_SMALLUPLOADSIZE'),
+				'description' => Text::_('COM_INSTALLER_MSG_WARNINGS_SMALLUPLOADSIZEDESC'),
+			];
 		}
 
 		return $messages;
diff --git a/administrator/components/com_media/src/Controller/ApiController.php b/administrator/components/com_media/src/Controller/ApiController.php
index ff9568617f99..3fab0b90b5b7 100644
--- a/administrator/components/com_media/src/Controller/ApiController.php
+++ b/administrator/components/com_media/src/Controller/ApiController.php
@@ -359,15 +359,19 @@ public function getModel($name = 'Api', $prefix = 'Administrator', $config = [])
 	 */
 	private function checkContent()
 	{
-		$params = ComponentHelper::getParams('com_media');
-
-		$helper       = new MediaHelper;
-		$serverlength = $this->input->server->getInt('CONTENT_LENGTH');
-
-		if (($params->get('upload_maxsize', 0) > 0 && $serverlength > ($params->get('upload_maxsize', 0) * 1024 * 1024))
-			|| $serverlength > $helper->toBytes(ini_get('upload_max_filesize'))
-			|| $serverlength > $helper->toBytes(ini_get('post_max_size'))
-			|| $serverlength > $helper->toBytes(ini_get('memory_limit')))
+		$helper              = new MediaHelper;
+		$contentLength       = $this->input->server->getInt('CONTENT_LENGTH');
+		$params              = ComponentHelper::getParams('com_media');
+		$paramsUploadMaxsize = $params->get('upload_maxsize', 0) * 1024 * 1024;
+		$uploadMaxFilesize   = $helper->toBytes(ini_get('upload_max_filesize'));
+		$postMaxSize         = $helper->toBytes(ini_get('post_max_size'));
+		$memoryLimit         = $helper->toBytes(ini_get('memory_limit'));
+
+		if (($paramsUploadMaxsize > 0 && $contentLength > $paramsUploadMaxsize)
+			|| ($uploadMaxFilesize > 0 && $contentLength > $uploadMaxFilesize)
+			|| ($postMaxSize > 0 && $contentLength > $postMaxSize)
+			|| ($memoryLimit > -1 && $contentLength > $memoryLimit)
+		)
 		{
 			throw new \Exception(Text::_('COM_MEDIA_ERROR_WARNFILETOOLARGE'), 403);
 		}
diff --git a/administrator/components/com_menus/forms/item.xml b/administrator/components/com_menus/forms/item.xml
index db0570dc2c2e..984ae531e0d5 100644
--- a/administrator/components/com_menus/forms/item.xml
+++ b/administrator/components/com_menus/forms/item.xml
@@ -97,7 +97,7 @@
 			showtime="true"
 			size="22"
 			filter="user_utc"
-		   	showon="home:0"
+			showon="home:0"
 		/>
 
 		<field
diff --git a/administrator/components/com_menus/src/Controller/ItemsController.php b/administrator/components/com_menus/src/Controller/ItemsController.php
index 6fc524e2b0b5..47c8bb725ffb 100644
--- a/administrator/components/com_menus/src/Controller/ItemsController.php
+++ b/administrator/components/com_menus/src/Controller/ItemsController.php
@@ -41,7 +41,7 @@ public function __construct($config = array(), MVCFactoryInterface $factory = nu
 	{
 		parent::__construct($config, $factory, $app, $input);
 
-		$this->registerTask('unsetDefault',	'setDefault');
+		$this->registerTask('unsetDefault', 'setDefault');
 	}
 
 	/**
diff --git a/administrator/components/com_workflow/src/Controller/StagesController.php b/administrator/components/com_workflow/src/Controller/StagesController.php
index 5cd19a2fb7e5..e7af94b3b237 100644
--- a/administrator/components/com_workflow/src/Controller/StagesController.php
+++ b/administrator/components/com_workflow/src/Controller/StagesController.php
@@ -103,7 +103,7 @@ public function __construct(array $config = array(), MVCFactoryInterface $factor
 			}
 		}
 
-		$this->registerTask('unsetDefault',	'setDefault');
+		$this->registerTask('unsetDefault', 'setDefault');
 	}
 
 	/**
diff --git a/administrator/components/com_workflow/src/Controller/WorkflowsController.php b/administrator/components/com_workflow/src/Controller/WorkflowsController.php
index 9c698600ff0a..9739d666dba2 100644
--- a/administrator/components/com_workflow/src/Controller/WorkflowsController.php
+++ b/administrator/components/com_workflow/src/Controller/WorkflowsController.php
@@ -76,7 +76,7 @@ public function __construct($config = array(), MVCFactoryInterface $factory = nu
 			}
 		}
 
-		$this->registerTask('unsetDefault',	'setDefault');
+		$this->registerTask('unsetDefault', 'setDefault');
 	}
 
 	/**
diff --git a/administrator/components/com_workflow/src/Model/WorkflowModel.php b/administrator/components/com_workflow/src/Model/WorkflowModel.php
index beb71976e59d..dec07533ed12 100644
--- a/administrator/components/com_workflow/src/Model/WorkflowModel.php
+++ b/administrator/components/com_workflow/src/Model/WorkflowModel.php
@@ -297,7 +297,12 @@ public function setDefault($pk, $value = 1)
 		if ($value)
 		{
 			// Unset other default item
-			if ($table->load(array('default' => '1')))
+			if ($table->load(
+				[
+					'default' => '1',
+					'extension' => $table->get('extension')
+				]
+			))
 			{
 				$table->default = 0;
 				$table->modified = $date;
diff --git a/administrator/components/com_workflow/src/Table/WorkflowTable.php b/administrator/components/com_workflow/src/Table/WorkflowTable.php
index faedf915b6f1..a9f7267bb39b 100644
--- a/administrator/components/com_workflow/src/Table/WorkflowTable.php
+++ b/administrator/components/com_workflow/src/Table/WorkflowTable.php
@@ -144,7 +144,7 @@ public function check()
 		}
 		else
 		{
-			$db = $this->getDbo();
+			$db    = $this->getDbo();
 			$query = $db->getQuery(true);
 
 			$query
@@ -192,7 +192,7 @@ public function store($updateNulls = true)
 		{
 			// Existing item
 			$this->modified_by = $user->id;
-			$this->modified = $date->toSql();
+			$this->modified    = $date->toSql();
 		}
 		else
 		{
@@ -219,10 +219,15 @@ public function store($updateNulls = true)
 			$this->modified_by = $this->created_by;
 		}
 
-		if ($this->default == '1')
+		if ((int) $this->default === 1)
 		{
 			// Verify that the default is unique for this workflow
-			if ($table->load(array('default' => '1')))
+			if ($table->load(
+				[
+					'default' => '1',
+					'extension' => $this->extension
+				]
+			))
 			{
 				$table->default = 0;
 				$table->store();
diff --git a/administrator/language/en-GB/com_joomlaupdate.ini b/administrator/language/en-GB/com_joomlaupdate.ini
index 06aecff2d5b2..b2dd8d7fabb0 100644
--- a/administrator/language/en-GB/com_joomlaupdate.ini
+++ b/administrator/language/en-GB/com_joomlaupdate.ini
@@ -59,7 +59,7 @@ COM_JOOMLAUPDATE_SELF_EMPTYSTATE_TITLE="A new version of the Joomla Update Compo
 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'm prepared for the update and have made a backup."
+COM_JOOMLAUPDATE_UPDATE_CONFIRM_BACKUP="I'm prepared for the update and have made a backup of the files and database."
 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."
diff --git a/api/components/com_languages/src/Controller/OverridesController.php b/api/components/com_languages/src/Controller/OverridesController.php
index 9ebb27ff5db9..fc376fbe2e3b 100644
--- a/api/components/com_languages/src/Controller/OverridesController.php
+++ b/api/components/com_languages/src/Controller/OverridesController.php
@@ -87,14 +87,14 @@ protected function save($recordKey = null)
 		/** @var \Joomla\CMS\MVC\Model\AdminModel $model */
 		$model = $this->getModel(Inflector::singularize($this->contentType));
 
-		$model->setState('filter.language', $this->input->post->get('lang_code'));
-		$model->setState('filter.client', $this->input->post->get('app'));
-
 		if (!$model)
 		{
 			throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'));
 		}
 
+		$model->setState('filter.language', $this->input->post->get('lang_code'));
+		$model->setState('filter.client', $this->input->post->get('app'));
+
 		$data = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array');
 
 		// TODO: Not the cleanest thing ever but it works...
diff --git a/build/media_source/com_media/scss/components/_media-breadcrumb.scss b/build/media_source/com_media/scss/components/_media-breadcrumb.scss
index 21fdc086d519..faffa71558c6 100644
--- a/build/media_source/com_media/scss/components/_media-breadcrumb.scss
+++ b/build/media_source/com_media/scss/components/_media-breadcrumb.scss
@@ -1,11 +1,11 @@
 .media-breadcrumb {
   display: flex;
   padding: 0;
-  margin: 0 auto 0 0;
+  margin-inline-end: auto;
   font-size: .9rem;
   line-height: $toolbar-height;
   background: transparent;
-  border-left: 1px solid $border-color;
+  border-inline-start: 1px solid $border-color;
 
   ol {
     display: flex;
@@ -20,15 +20,16 @@
 }
 
 .media-breadcrumb-item {
-  padding: 0 8px 0 22px;
+  padding-inline-end: 8px;
+  padding-inline-start: 22px;
   background-color: $breadcrumbs-bg;
   &:first-of-type {
-    padding-left: 16px;
+    padding-inline-start: 16px;
   }
   &:last-of-type {
     background-color: $breadcrumbs-current-bg;
     &::after {
-      border-left-color: $breadcrumbs-current-bg;
+      border-inline-start-color: $breadcrumbs-current-bg;
     }
   }
   &:hover {
@@ -42,7 +43,7 @@
     position: absolute;
     top: 0;
     bottom: 0;
-    left: 100%;
+    inset-inline-start: 100%;
     z-index: 2;
     display: block;
     width: 0;
@@ -51,45 +52,12 @@
     content: "" !important;
     border-top: 23px solid transparent;
     border-bottom: 23px solid transparent;
-    border-left: 10px solid transparent;
+    border-inline-start: 10px solid transparent;
   }
   &::before {
-    border-left-color: $border-color;
+    border-inline-start-color: $border-color;
   }
   &::after {
-    border-left-color: $breadcrumbs-bg;
+    border-inline-start-color: $breadcrumbs-bg;
   }
 }
-
-.breadcrumb-item + .breadcrumb-item::before {
-  display: none;
-}
-
-// RTL override
-
-html[dir=rtl] .media-breadcrumb {
-  margin: 0 0 0 auto;
-}
-
-html[dir=rtl] .media-breadcrumb-item::after, .media-breadcrumb-item::before {
-  right: 100%;
-  border-right: 10px solid transparent;
-  border-left: 0;
-}
-
-html[dir=rtl] .media-breadcrumb-item {
-  padding: 0 22px 0 8px;
-}
-
-html[dir=rtl] .media-breadcrumb-item::before {
-  border-right-color: #fafafa;
-}
-
-html[dir=rtl] .media-breadcrumb-item:first-of-type {
-  padding-right: 16px;
-  padding-left: 0;
-}
-
-html[dir=rtl] .media-breadcrumb-item:last-of-type::after {
-  border-right: 10px solid #fff;
-}
diff --git a/build/media_source/plg_editors_codemirror/js/joomla-editor-codemirror.w-c.es6.js b/build/media_source/plg_editors_codemirror/js/joomla-editor-codemirror.w-c.es6.js
index ecef691e569e..ddb2ded4c233 100644
--- a/build/media_source/plg_editors_codemirror/js/joomla-editor-codemirror.w-c.es6.js
+++ b/build/media_source/plg_editors_codemirror/js/joomla-editor-codemirror.w-c.es6.js
@@ -6,6 +6,13 @@ class CodemirrorEditor extends HTMLElement {
     this.host = window.location.origin;
     this.element = this.querySelector('textarea');
     this.refresh = this.refresh.bind(this);
+
+    // Observer instance to refresh the Editor when it become visible, eg after Tab switching
+    this.intersectionObserver = new IntersectionObserver((entries) => {
+      if (entries[0].isIntersecting && this.instance) {
+        this.instance.refresh();
+      }
+    }, { threshold: 0 });
   }
 
   static get observedAttributes() {
@@ -124,11 +131,17 @@ class CodemirrorEditor extends HTMLElement {
     this.instance = window.CodeMirror.fromTextArea(this.element, this.options);
     this.instance.disable = (disabled) => this.setOption('readOnly', disabled ? 'nocursor' : false);
     Joomla.editors.instances[this.element.id] = this.instance;
+
+    // Watch when the element in viewport, and refresh the editor
+    this.intersectionObserver.observe(this);
   }
 
   disconnectedCallback() {
     // Remove from the Joomla API
     delete Joomla.editors.instances[this.element.id];
+
+    // Remove from observer
+    this.intersectionObserver.unobserve(this);
   }
 
   refresh(element) {
diff --git a/build/media_source/plg_editors_tinymce/js/tinymce.es6.js b/build/media_source/plg_editors_tinymce/js/tinymce.es6.js
index 795dc92d7f13..aad5d4592ef9 100644
--- a/build/media_source/plg_editors_tinymce/js/tinymce.es6.js
+++ b/build/media_source/plg_editors_tinymce/js/tinymce.es6.js
@@ -33,12 +33,14 @@
           toggleButton.removeAttribute('disabled');
           toggleButton.addEventListener('click', () => {
             if (Joomla.editors.instances[currentEditor.id].instance.isHidden()) {
-              toggleIcon.setAttribute('class', 'icon-eye');
               Joomla.editors.instances[currentEditor.id].instance.show();
             } else {
-              toggleIcon.setAttribute('class', 'icon-eye-slash');
               Joomla.editors.instances[currentEditor.id].instance.hide();
             }
+
+            if (toggleIcon) {
+              toggleIcon.setAttribute('class', Joomla.editors.instances[currentEditor.id].instance.isHidden() ? 'icon-eye' : 'icon-eye-slash');
+            }
           });
         }
       });
diff --git a/build/media_source/templates/administrator/atum/scss/blocks/_icons.scss b/build/media_source/templates/administrator/atum/scss/blocks/_icons.scss
index 671ac513c78b..5528b46ec864 100644
--- a/build/media_source/templates/administrator/atum/scss/blocks/_icons.scss
+++ b/build/media_source/templates/administrator/atum/scss/blocks/_icons.scss
@@ -38,7 +38,6 @@
     border-color: $warning;
   }
 
-  .#{$jicon-css-prefix}-archive,
   .#{$jicon-css-prefix}-folder,
   .#{$fa-css-prefix}-folder {
     color: var(--template-text-dark);
diff --git a/build/media_source/templates/administrator/atum/scss/blocks/_login.scss b/build/media_source/templates/administrator/atum/scss/blocks/_login.scss
index 08a068b30771..dd28e05015eb 100644
--- a/build/media_source/templates/administrator/atum/scss/blocks/_login.scss
+++ b/build/media_source/templates/administrator/atum/scss/blocks/_login.scss
@@ -84,30 +84,18 @@
 
     .form-control-feedback {
       position: absolute;
-      right: 0;
+      inset-inline-end: 0;
       bottom: -1.5rem;
       font-size: ($font-size-base * .75);
-      text-align: right;
-
-      [dir=rtl] & {
-        right: auto;
-        left: 0;
-        text-align: left;
-      }
+      text-align: end;
     }
 
     .form-control-hint {
       position: absolute;
       top: .1rem;
-      right: 0;
+      inset-inline-end: 0;
       font-size: ($font-size-base * .75);
-      text-align: right;
-
-      [dir=rtl] & {
-        right: auto;
-        left: 0;
-        text-align: left;
-      }
+      text-align: end;
     }
   }
 
diff --git a/layouts/joomla/content/category_default.php b/layouts/joomla/content/category_default.php
index 0b5b36ea4bc2..5ba6d8ea049e 100644
--- a/layouts/joomla/content/category_default.php
+++ b/layouts/joomla/content/category_default.php
@@ -51,50 +51,47 @@
 
 $tagsData = $category->tags->itemTags;
 ?>
-<div>
-	<div class="<?php echo $className . '-category' . $displayData->pageclass_sfx; ?>">
-		<?php if ($params->get('show_page_heading')) : ?>
-			<h1>
-				<?php echo $displayData->escape($params->get('page_heading')); ?>
-			</h1>
-		<?php endif; ?>
+<div class="<?php echo $className . '-category' . $displayData->pageclass_sfx; ?>">
+	<?php if ($params->get('show_page_heading')) : ?>
+		<h1>
+			<?php echo $displayData->escape($params->get('page_heading')); ?>
+		</h1>
+	<?php endif; ?>
 
-		<?php if ($params->get('show_category_title', 1)) : ?>
-			<<?php echo $htag; ?>>
-				<?php echo HTMLHelper::_('content.prepare', $category->title, '', $extension . '.category.title'); ?>
-			</<?php echo $htag; ?>>
-		<?php endif; ?>
-		<?php echo $afterDisplayTitle; ?>
+	<?php if ($params->get('show_category_title', 1)) : ?>
+		<<?php echo $htag; ?>>
+			<?php echo HTMLHelper::_('content.prepare', $category->title, '', $extension . '.category.title'); ?>
+		</<?php echo $htag; ?>>
+	<?php endif; ?>
+	<?php echo $afterDisplayTitle; ?>
 
-		<?php if ($params->get('show_cat_tags', 1)) : ?>
-			<?php echo LayoutHelper::render('joomla.content.tags', $tagsData); ?>
-		<?php endif; ?>
+	<?php if ($params->get('show_cat_tags', 1)) : ?>
+		<?php echo LayoutHelper::render('joomla.content.tags', $tagsData); ?>
+	<?php endif; ?>
 
-		<?php if ($beforeDisplayContent || $afterDisplayContent || $params->get('show_description', 1) || $params->def('show_description_image', 1)) : ?>
-			<div class="category-desc">
-				<?php if ($params->get('show_description_image') && $category->getParams()->get('image')) : ?>
-					<?php $alt = empty($category->getParams()->get('image_alt')) && empty($category->getParams()->get('image_alt_empty')) ? '' : 'alt="' . htmlspecialchars($category->getParams()->get('image_alt'), ENT_COMPAT, 'UTF-8') . '"'; ?>
-					<img src="<?php echo $category->getParams()->get('image'); ?>" <?php echo $alt; ?>>
-				<?php endif; ?>
-				<?php echo $beforeDisplayContent; ?>
-				<?php if ($params->get('show_description') && $category->description) : ?>
-					<?php echo HTMLHelper::_('content.prepare', $category->description, '', $extension . '.category.description'); ?>
-				<?php endif; ?>
-				<?php echo $afterDisplayContent; ?>
-			</div>
-		<?php endif; ?>
-		<?php echo $displayData->loadTemplate($displayData->subtemplatename); ?>
+	<?php if ($beforeDisplayContent || $afterDisplayContent || $params->get('show_description', 1) || $params->def('show_description_image', 1)) : ?>
+		<div class="category-desc">
+			<?php if ($params->get('show_description_image') && $category->getParams()->get('image')) : ?>
+				<?php $alt = empty($category->getParams()->get('image_alt')) && empty($category->getParams()->get('image_alt_empty')) ? '' : 'alt="' . htmlspecialchars($category->getParams()->get('image_alt'), ENT_COMPAT, 'UTF-8') . '"'; ?>
+				<img src="<?php echo $category->getParams()->get('image'); ?>" <?php echo $alt; ?>>
+			<?php endif; ?>
+			<?php echo $beforeDisplayContent; ?>
+			<?php if ($params->get('show_description') && $category->description) : ?>
+				<?php echo HTMLHelper::_('content.prepare', $category->description, '', $extension . '.category.description'); ?>
+			<?php endif; ?>
+			<?php echo $afterDisplayContent; ?>
+		</div>
+	<?php endif; ?>
+	<?php echo $displayData->loadTemplate($displayData->subtemplatename); ?>
 
-		<?php if ($displayData->maxLevel != 0 && $displayData->get('children')) : ?>
-			<div class="cat-children">
-				<?php if ($params->get('show_category_heading_title_text', 1) == 1) : ?>
-					<h3>
-						<?php echo Text::_('JGLOBAL_SUBCATEGORIES'); ?>
-					</h3>
-				<?php endif; ?>
-				<?php echo $displayData->loadTemplate('children'); ?>
-			</div>
-		<?php endif; ?>
-	</div>
+	<?php if ($displayData->maxLevel != 0 && $displayData->get('children')) : ?>
+		<div class="cat-children">
+			<?php if ($params->get('show_category_heading_title_text', 1) == 1) : ?>
+				<h3>
+					<?php echo Text::_('JGLOBAL_SUBCATEGORIES'); ?>
+				</h3>
+			<?php endif; ?>
+			<?php echo $displayData->loadTemplate('children'); ?>
+		</div>
+	<?php endif; ?>
 </div>
-
diff --git a/layouts/joomla/content/icons/edit_lock.php b/layouts/joomla/content/icons/edit_lock.php
index e22160aa5055..3b8def519104 100644
--- a/layouts/joomla/content/icons/edit_lock.php
+++ b/layouts/joomla/content/icons/edit_lock.php
@@ -11,15 +11,18 @@
 
 use Joomla\CMS\Language\Text;
 
-if (isset($displayData['article']))
+if (isset($displayData['ariaDescribed']))
 {
-	$article = $displayData['article'];
+	$aria_described = $displayData['ariaDescribed'];
+}
+elseif (isset($displayData['article']))
+{
+	$article        = $displayData['article'];
 	$aria_described = 'editarticle-' . (int) $article->id;
 }
-
-if (isset($displayData['contact']))
+elseif (isset($displayData['contact']))
 {
-	$contact = $displayData['contact'];
+	$contact        = $displayData['contact'];
 	$aria_described = 'editcontact-' . (int) $contact->id;
 }
 
diff --git a/layouts/joomla/form/field/list-fancy-select.php b/layouts/joomla/form/field/list-fancy-select.php
index ed97de16f4aa..8820fe0fee47 100644
--- a/layouts/joomla/form/field/list-fancy-select.php
+++ b/layouts/joomla/form/field/list-fancy-select.php
@@ -110,4 +110,4 @@
 
 ?>
 
-<joomla-field-fancy-select <?php echo $attr2; ?>><?php	echo implode($html); ?></joomla-field-fancy-select>
+<joomla-field-fancy-select <?php echo $attr2; ?>><?php echo implode($html); ?></joomla-field-fancy-select>
diff --git a/libraries/src/Application/ConsoleApplication.php b/libraries/src/Application/ConsoleApplication.php
index 391d00a8ec69..8b218c56a26a 100644
--- a/libraries/src/Application/ConsoleApplication.php
+++ b/libraries/src/Application/ConsoleApplication.php
@@ -10,10 +10,13 @@
 
 \defined('JPATH_PLATFORM') or die;
 
+use InvalidArgumentException;
 use Joomla\CMS\Console;
 use Joomla\CMS\Extension\ExtensionManagerTrait;
+use Joomla\CMS\Factory;
 use Joomla\CMS\Language\Language;
 use Joomla\CMS\Plugin\PluginHelper;
+use Joomla\CMS\Router\Router;
 use Joomla\CMS\Version;
 use Joomla\Console\Application;
 use Joomla\DI\Container;
@@ -434,4 +437,27 @@ public function setName(string $name): void
 	{
 		throw new \RuntimeException('The console application name cannot be changed');
 	}
+
+	/**
+	 * Returns the application Router object.
+	 *
+	 * @param   string  $name     The name of the application.
+	 * @param   array   $options  An optional associative array of configuration settings.
+	 *
+	 * @return  Router
+	 *
+	 * @since   __DEPLOY_VERSION__
+	 * @throws  \InvalidArgumentException
+	 */
+	public static function getRouter($name = null, array $options = array())
+	{
+		if (empty($name))
+		{
+			throw new InvalidArgumentException('A router name must be set in console application.');
+		}
+
+		$options['mode'] = Factory::getApplication()->get('sef');
+
+		return Router::getInstance($name, $options);
+	}
 }
diff --git a/libraries/src/Cache/Cache.php b/libraries/src/Cache/Cache.php
index 9bc636965ad4..4d3693cd8b08 100644
--- a/libraries/src/Cache/Cache.php
+++ b/libraries/src/Cache/Cache.php
@@ -595,7 +595,7 @@ public static function getWorkarounds($data, $options = array())
 	 * @param   string  $data     Cached data
 	 * @param   array   $options  Array of options
 	 *
-	 * @return  array
+	 * @return  array  Data to be cached
 	 *
 	 * @since   1.7.0
 	 */
@@ -688,9 +688,13 @@ public static function setWorkarounds($data, $options = [])
 								{
 									$oldScriptStr = $options['headerbefore'][$now][strtolower($type)];
 
-									if ($oldScriptStr != $currentScriptStr)
+									// Save only the appended declaration.
+									if (\is_array($oldScriptStr) && \is_array($currentScriptStr))
+									{
+										$newvalue[strtolower($type)] = array_diff_key($currentScriptStr, $oldScriptStr);
+									}
+									else
 									{
-										// Save only the appended declaration.
 										$newvalue[strtolower($type)] = StringHelper::substr($currentScriptStr, StringHelper::strlen($oldScriptStr));
 									}
 								}
diff --git a/libraries/src/Form/Field/SubformField.php b/libraries/src/Form/Field/SubformField.php
index 867a4cd8be5c..c477f34c52dc 100644
--- a/libraries/src/Form/Field/SubformField.php
+++ b/libraries/src/Form/Field/SubformField.php
@@ -173,6 +173,17 @@ public function __set($name, $value)
 
 				break;
 
+			case 'value':
+				// We allow a json encoded string or an array
+				if (is_string($value))
+				{
+					$value = json_decode($value, true);
+				}
+
+				$this->value = $value !== null ? (array) $value : null;
+
+				break;
+
 			default:
 				parent::__set($name, $value);
 		}
diff --git a/libraries/src/HTML/HTMLHelper.php b/libraries/src/HTML/HTMLHelper.php
index b09bda11ad0e..b538febff82e 100644
--- a/libraries/src/HTML/HTMLHelper.php
+++ b/libraries/src/HTML/HTMLHelper.php
@@ -632,13 +632,15 @@ protected static function includeRelativeFiles($folder, $file, $relative, $detec
 	/**
 	 * Gets a URL, cleans the Joomla specific params and returns an object
 	 *
-	 * @param    string        $url        The relative or absolute URL to use for the src attribute.
+	 * @param    string  $url  The relative or absolute URL to use for the src attribute.
 	 *
 	 * @return   object
 	 * @example  {
-	 *             url:    'string',
-	 *             width:  integer,
-	 *             height: integer,
+	 *             url: 'string',
+	 *             attributes: [
+	 *               width:  integer,
+	 *               height: integer,
+	 *             ]
 	 *           }
 	 *
 	 * @since    4.0.0
diff --git a/libraries/src/MVC/Controller/AdminController.php b/libraries/src/MVC/Controller/AdminController.php
index 11ae6242cec8..6f455f220a3c 100644
--- a/libraries/src/MVC/Controller/AdminController.php
+++ b/libraries/src/MVC/Controller/AdminController.php
@@ -12,7 +12,6 @@
 
 use Joomla\CMS\Application\CMSApplication;
 use Joomla\CMS\Component\ComponentHelper;
-use Joomla\CMS\Factory;
 use Joomla\CMS\Language\Text;
 use Joomla\CMS\MVC\Factory\MVCFactoryInterface;
 use Joomla\CMS\MVC\Model\BaseDatabaseModel;
@@ -224,7 +223,7 @@ public function publish()
 				{
 					if ($errors)
 					{
-						Factory::getApplication()->enqueueMessage(Text::plural($this->text_prefix . '_N_ITEMS_FAILED_PUBLISHING', \count($cid)), 'error');
+						$this->app->enqueueMessage(Text::plural($this->text_prefix . '_N_ITEMS_FAILED_PUBLISHING', \count($cid)), 'error');
 					}
 					else
 					{
diff --git a/libraries/src/Mail/MailTemplate.php b/libraries/src/Mail/MailTemplate.php
index d60ef39b87f0..994fc90f1adb 100644
--- a/libraries/src/Mail/MailTemplate.php
+++ b/libraries/src/Mail/MailTemplate.php
@@ -190,6 +190,12 @@ public function send()
 
 		$mail = self::getTemplate($this->template_id, $this->language);
 
+		// If the Mail Template was not found in the db, we cannot send an email.
+		if ($mail === null)
+		{
+			return false;
+		}
+
 		/** @var Registry $params */
 		$params = $mail->params;
 		$app    = Factory::getApplication();
@@ -370,7 +376,7 @@ protected function replaceTags($text, $tags)
 	 * @param   string  $key       Template identifier
 	 * @param   string  $language  Language code of the template
 	 *
-	 * @return  object  An object with the data of the mail
+	 * @return  object|null  An object with the data of the mail, or null if the template not found in the db.
 	 *
 	 * @since   4.0.0
 	 */
diff --git a/libraries/src/Uri/Uri.php b/libraries/src/Uri/Uri.php
index e27c98385f36..6d7f0175c071 100644
--- a/libraries/src/Uri/Uri.php
+++ b/libraries/src/Uri/Uri.php
@@ -148,12 +148,14 @@ public static function base($pathonly = false)
 				static::$base['prefix'] = $uri->toString(array('scheme', 'host', 'port'));
 				static::$base['path'] = rtrim($uri->toString(array('path')), '/\\');
 
-				if (\defined('JPATH_BASE') && \defined('JPATH_ADMINISTRATOR'))
+				if (\defined('JPATH_BASE') && \defined('JPATH_ADMINISTRATOR') && JPATH_BASE == JPATH_ADMINISTRATOR)
 				{
-					if (JPATH_BASE == JPATH_ADMINISTRATOR)
-					{
-						static::$base['path'] .= '/administrator';
-					}
+					static::$base['path'] .= '/administrator';
+				}
+
+				if (\defined('JPATH_BASE') && \defined('JPATH_API') && JPATH_BASE == JPATH_API)
+				{
+					static::$base['path'] .= '/api';
 				}
 			}
 			else
diff --git a/plugins/fields/imagelist/tmpl/imagelist.php b/plugins/fields/imagelist/tmpl/imagelist.php
index 700e5281139c..ea8c42ac939e 100644
--- a/plugins/fields/imagelist/tmpl/imagelist.php
+++ b/plugins/fields/imagelist/tmpl/imagelist.php
@@ -37,7 +37,7 @@
 
 	if ($fieldParams->get('directory', '/') !== '/')
 	{
-		$imageInfo = Image::getImageFileProperties('images/' . $fieldParams->get('directory') . '/' . $imageFilePath);
+		$imageInfo = Image::getImageFileProperties(JPATH_ROOT . '/images/' . $fieldParams->get('directory') . '/' . $imageFilePath);
 
 		$buffer .= sprintf('<img loading="lazy" width="%s" height="%s" src="images/%s/%s"%s alt="">',
 			$imageInfo->width,
@@ -49,7 +49,7 @@
 	}
 	else
 	{
-		$imageInfo = Image::getImageFileProperties('images/' . $imageFilePath);
+		$imageInfo = Image::getImageFileProperties(JPATH_ROOT . '/images/' . $imageFilePath);
 
 		$buffer .= sprintf('<img loading="lazy" width="%s" height="%s" src="images/%s"%s>',
 			$imageInfo->width,
diff --git a/plugins/sampledata/blog/blog.php b/plugins/sampledata/blog/blog.php
index 47d40aca5ca9..cf41cb6d150b 100644
--- a/plugins/sampledata/blog/blog.php
+++ b/plugins/sampledata/blog/blog.php
@@ -565,12 +565,14 @@ public function onAjaxSampledataApplyStep1()
 				'featured' => 1,
 				'tags'     => array_map('strval', $tagIds),
 				'images'   => array(
-					'image_intro'               => 'images/sampledata/cassiopeia/nasa1-1200.jpg',
+					'image_intro'               => 'images/sampledata/cassiopeia/nasa1-1200.jpg#'
+												. 'joomlaImage://local-images/sampledata/cassiopeia/nasa1-1200.jpg?width=1200&height=400',
 					'float_intro'               => '',
 					'image_intro_alt'           => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_ARTICLE_2_INTROIMAGE_ALT'),
 					'image_intro_alt_empty'     => '',
 					'image_intro_caption'       => '',
-					'image_fulltext'            => 'images/sampledata/cassiopeia/nasa1-400.jpg',
+					'image_fulltext'            => 'images/sampledata/cassiopeia/nasa1-400.jpg#'
+												. 'joomlaImage://local-images/sampledata/cassiopeia/nasa1-400.jpg?width=400&height=400',
 					'float_fulltext'            => 'float-start',
 					'image_fulltext_alt'        => '',
 					'image_fulltext_alt_empty'  => 1,
@@ -583,12 +585,14 @@ public function onAjaxSampledataApplyStep1()
 				'featured' => 1,
 				'tags'     => array_map('strval', $tagIds),
 				'images'   => array(
-					'image_intro'               => 'images/sampledata/cassiopeia/nasa2-1200.jpg',
+					'image_intro'               => 'images/sampledata/cassiopeia/nasa2-1200.jpg#'
+												. 'joomlaImage://local-images/sampledata/cassiopeia/nasa2-1200.jpg?width=1200&height=400',
 					'float_intro'               => '',
 					'image_intro_alt'           => '',
 					'image_intro_alt_empty'     => 1,
 					'image_intro_caption'       => '',
-					'image_fulltext'            => 'images/sampledata/cassiopeia/nasa2-400.jpg',
+					'image_fulltext'            => 'images/sampledata/cassiopeia/nasa2-400.jpg#'
+												. 'joomlaImage://local-images/sampledata/cassiopeia/nasa2-400.jpg?width=400&height=400',
 					'float_fulltext'            => 'float-start',
 					'image_fulltext_alt'        => '',
 					'image_fulltext_alt_empty'  => 1,
@@ -602,12 +606,14 @@ public function onAjaxSampledataApplyStep1()
 				'featured' => 1,
 				'tags'     => array_map('strval', $tagIds),
 				'images'   => array(
-					'image_intro'               => 'images/sampledata/cassiopeia/nasa3-1200.jpg',
+					'image_intro'               => 'images/sampledata/cassiopeia/nasa3-1200.jpg#'
+												. 'joomlaImage://local-images/sampledata/cassiopeia/nasa3-1200.jpg?width=1200&height=400',
 					'float_intro'               => '',
 					'image_intro_alt'           => '',
 					'image_intro_alt_empty'     => 1,
 					'image_intro_caption'       => '',
-					'image_fulltext'            => 'images/sampledata/cassiopeia/nasa3-400.jpg',
+					'image_fulltext'            => 'images/sampledata/cassiopeia/nasa3-400.jpg#'
+												. 'joomlaImage://local-images/sampledata/cassiopeia/nasa3-400.jpg?width=400&height=400',
 					'float_fulltext'            => 'float-start',
 					'image_fulltext_alt'        => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_ARTICLE_4_FULLTEXTIMAGE_ALT'),
 					'image_fulltext_alt_empty'  => '',
@@ -620,16 +626,18 @@ public function onAjaxSampledataApplyStep1()
 				'featured' => 1,
 				'tags'     => array_map('strval', $tagIds),
 				'images'   => array(
-					'image_intro'               => 'images/sampledata/cassiopeia/nasa4-1200.jpg',
+					'image_intro'               => 'images/sampledata/cassiopeia/nasa4-1200.jpg#'
+												. 'joomlaImage://local-images/sampledata/cassiopeia/nasa4-1200.jpg?width=1200&height=400',
 					'float_intro'               => '',
 					'image_intro_alt'           => '',
 					'image_intro_alt_empty'     => 1,
 					'image_intro_caption'       => '',
-					'image_fulltext'            => 'images/sampledata/cassiopeia/nasa4-400.jpg',
+					'image_fulltext'            => 'images/sampledata/cassiopeia/nasa4-400.jpg#'
+												. 'joomlaImage://local-images/sampledata/cassiopeia/nasa4-400.jpg?width=400&height=400',
 					'float_fulltext'            => 'float-start',
 					'image_fulltext_alt'        => '',
 					'image_fulltext_alt_empty'  => 1,
-					'image_fulltext_caption' => 'www.nasa.gov/multimedia/imagegallery',
+					'image_fulltext_caption'    => 'www.nasa.gov/multimedia/imagegallery',
 				),
 			),
 			// Category 2 = Joomla - marketing texts
@@ -637,7 +645,8 @@ public function onAjaxSampledataApplyStep1()
 				// Article 6 - Millions
 				'catid'    => $catIds[2],
 				'images'   => array(
-					'image_intro'            => 'images/sampledata/cassiopeia/nasa1-640.jpg',
+					'image_intro'            => 'images/sampledata/cassiopeia/nasa1-640.jpg#'
+											. 'joomlaImage://local-images/sampledata/cassiopeia/nasa1-640.jpg?width=640&height=320',
 					'float_intro'            => '',
 					'image_intro_alt'        => '',
 					'image_intro_alt_empty'  => 1,
@@ -648,7 +657,8 @@ public function onAjaxSampledataApplyStep1()
 				// Article 7 - Love
 				'catid'    => $catIds[2],
 				'images'   => array(
-					'image_intro'            => 'images/sampledata/cassiopeia/nasa2-640.jpg',
+					'image_intro'            => 'images/sampledata/cassiopeia/nasa2-640.jpg#'
+											. 'joomlaImage://local-images/sampledata/cassiopeia/nasa2-640.jpg?width=640&height=320',
 					'float_intro'            => '',
 					'image_intro_alt'        => '',
 					'image_intro_alt_empty'  => 1,
@@ -659,7 +669,8 @@ public function onAjaxSampledataApplyStep1()
 				// Article 8 - Joomla
 				'catid'    => $catIds[2],
 				'images'   => array(
-					'image_intro'            => 'images/sampledata/cassiopeia/nasa3-640.jpg',
+					'image_intro'            => 'images/sampledata/cassiopeia/nasa3-640.jpg#'
+											. 'joomlaImage://local-images/sampledata/cassiopeia/nasa3-640.jpg?width=640&height=320',
 					'float_intro'            => '',
 					'image_intro_alt'        => '',
 					'image_intro_alt_empty'  => 1,
@@ -675,7 +686,8 @@ public function onAjaxSampledataApplyStep1()
 					'image_intro_alt'           => '',
 					'image_intro_alt_empty'     => '',
 					'image_intro_caption'       => '',
-					'image_fulltext'            => 'images/sampledata/cassiopeia/nasa4-400.jpg',
+					'image_fulltext'            => 'images/sampledata/cassiopeia/nasa4-400.jpg#'
+												. 'joomlaImage://local-images/sampledata/cassiopeia/nasa4-400.jpg?width=400&height=400',
 					'float_fulltext'            => 'float-end',
 					'image_fulltext_alt'        => '',
 					'image_fulltext_alt_empty'  => 1,
@@ -1635,7 +1647,7 @@ public function onAjaxSampledataApplyStep3()
 				'showtitle'  => 0,
 				'params'     => array(
 					'prepare_content' => 0,
-					'backgroundimage' => 'images/banners/banner.jpg',
+					'backgroundimage' => 'images/banners/banner.jpg#joomlaImage://local-images/banners/banner.jpg?width=1140&height=600',
 					'layout'          => 'cassiopeia:banner',
 					'moduleclass_sfx' => '',
 					'cache'           => 1,
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants