Skip to content

Commit a40a4e0

Browse files
authored
Merge branch '5.3-dev' into fix/vuecs
2 parents 286471d + d19e161 commit a40a4e0

File tree

7 files changed

+153
-53
lines changed

7 files changed

+153
-53
lines changed

administrator/modules/mod_feed/mod_feed.php

Lines changed: 0 additions & 17 deletions
This file was deleted.

administrator/modules/mod_feed/mod_feed.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<description>MOD_FEED_XML_DESCRIPTION</description>
1212
<namespace path="src">Joomla\Module\Feed</namespace>
1313
<files>
14-
<filename module="mod_feed">mod_feed.php</filename>
14+
<folder module="mod_feed">services</folder>
1515
<folder>src</folder>
1616
<folder>tmpl</folder>
1717
</files>
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
/**
4+
* @package Joomla.Administrator
5+
* @subpackage mod_feed
6+
*
7+
* @copyright (C) 2025 Open Source Matters, Inc. <https://www.joomla.org>
8+
* @license GNU General Public License version 2 or later; see LICENSE.txt
9+
*/
10+
11+
\defined('_JEXEC') or die;
12+
13+
use Joomla\CMS\Extension\Service\Provider\HelperFactory;
14+
use Joomla\CMS\Extension\Service\Provider\Module;
15+
use Joomla\CMS\Extension\Service\Provider\ModuleDispatcherFactory;
16+
use Joomla\DI\Container;
17+
use Joomla\DI\ServiceProviderInterface;
18+
19+
/**
20+
* The feed module service provider.
21+
*
22+
* @since __DEPLOY_VERSION__
23+
*/
24+
return new class () implements ServiceProviderInterface {
25+
/**
26+
* Registers the service provider with a DI container.
27+
*
28+
* @param Container $container The DI container.
29+
*
30+
* @return void
31+
*
32+
* @since __DEPLOY_VERSION__
33+
*/
34+
public function register(Container $container)
35+
{
36+
$container->registerServiceProvider(new ModuleDispatcherFactory('\\Joomla\\Module\\Feed'));
37+
$container->registerServiceProvider(new HelperFactory('\\Joomla\\Module\\Feed\\Administrator\\Helper'));
38+
39+
$container->registerServiceProvider(new Module());
40+
}
41+
};
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
3+
/**
4+
* @package Joomla.Administrator
5+
* @subpackage mod_feed
6+
*
7+
* @copyright (C) 2025 Open Source Matters, Inc. <https://www.joomla.org>
8+
* @license GNU General Public License version 2 or later; see LICENSE.txt
9+
*/
10+
11+
namespace Joomla\Module\Feed\Administrator\Dispatcher;
12+
13+
use Joomla\CMS\Dispatcher\AbstractModuleDispatcher;
14+
use Joomla\CMS\Feed\FeedFactory;
15+
use Joomla\CMS\Helper\HelperFactoryAwareInterface;
16+
use Joomla\CMS\Helper\HelperFactoryAwareTrait;
17+
18+
// phpcs:disable PSR1.Files.SideEffects
19+
\defined('_JEXEC') or die;
20+
// phpcs:enable PSR1.Files.SideEffects
21+
22+
/**
23+
* Dispatcher class for mod_feed
24+
*
25+
* @since __DEPLOY_VERSION__
26+
*/
27+
class Dispatcher extends AbstractModuleDispatcher implements HelperFactoryAwareInterface
28+
{
29+
use HelperFactoryAwareTrait;
30+
31+
/**
32+
* Returns the layout data.
33+
*
34+
* @return array
35+
*
36+
* @since __DEPLOY_VERSION__
37+
*/
38+
protected function getLayoutData()
39+
{
40+
$data = parent::getLayoutData();
41+
$feedFactory = new FeedFactory();
42+
43+
$data['feed'] = $this->getHelperFactory()->getHelper('FeedHelper')->getFeedData($data['params'], $feedFactory);
44+
$data['rssurl'] = $data['params']->get('rssurl', '');
45+
$data['rssrtl'] = $data['params']->get('rssrtl', 0);
46+
47+
return $data;
48+
}
49+
}

administrator/modules/mod_feed/src/Helper/FeedHelper.php

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
use Joomla\CMS\Feed\FeedFactory;
1414
use Joomla\CMS\Language\Text;
15+
use Joomla\Registry\Registry;
1516

1617
// phpcs:disable PSR1.Files.SideEffects
1718
\defined('_JEXEC') or die;
@@ -28,19 +29,19 @@ class FeedHelper
2829
* Method to load a feed.
2930
*
3031
* @param \Joomla\Registry\Registry $params The parameters object.
32+
* @param \Joomla\CMS\Feed\FeedFactory FeedFactory object
3133
*
32-
* @return \Joomla\CMS\Feed\Feed|string Return a JFeedReader object or a string message if error.
34+
* @return \Joomla\CMS\Feed\Feed|string Return a Feed object or a string message if error.
3335
*
34-
* @since 1.5
36+
* @since __DEPLOY_VERSION__
3537
*/
36-
public static function getFeed($params)
38+
public function getFeedData(Registry $params, FeedFactory $feed): \Joomla\CMS\Feed\Feed|string
3739
{
3840
// Module params
3941
$rssurl = $params->get('rssurl', '');
4042

4143
// Get RSS parsed object
4244
try {
43-
$feed = new FeedFactory();
4445
$rssDoc = $feed->getFeed($rssurl);
4546
} catch (\Exception $e) {
4647
return Text::_('MOD_FEED_ERR_FEED_NOT_RETRIEVED');
@@ -52,4 +53,24 @@ public static function getFeed($params)
5253

5354
return $rssDoc;
5455
}
56+
57+
/**
58+
* Method to load a feed.
59+
*
60+
* @param \Joomla\Registry\Registry $params The parameters object.
61+
*
62+
* @return \Joomla\CMS\Feed\Feed|string Return a Feed object or a string message if error.
63+
*
64+
* @since 1.5
65+
*
66+
* @deprecated __DEPLOY_VERSION__ will be removed in 7.0
67+
* Use the non-static method getFeedData
68+
* Example: Factory::getApplication()->bootModule('mod_feed', 'administrator')
69+
* ->getHelper('FeedHelper')
70+
* ->getFeedData($params, new FeedFactory())
71+
*/
72+
public static function getFeed($params)
73+
{
74+
return (new self())->getFeedData($params, new FeedFactory());
75+
}
5576
}

plugins/system/shortcut/src/Extension/Shortcut.php

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
namespace Joomla\Plugin\System\Shortcut\Extension;
1212

13+
use Joomla\CMS\Event\Application\BeforeCompileHeadEvent;
1314
use Joomla\CMS\Event\GenericEvent;
1415
use Joomla\CMS\Language\Text;
1516
use Joomla\CMS\Plugin\CMSPlugin;
@@ -57,20 +58,23 @@ public static function getSubscribedEvents(): array
5758
/**
5859
* Add the javascript for the shortcuts
5960
*
61+
* @param BeforeCompileHeadEvent $event The event instance.
62+
*
6063
* @return void
6164
*
6265
* @since 4.2.0
6366
*/
64-
public function initialize()
67+
public function initialize(BeforeCompileHeadEvent $event): void
6568
{
66-
if (!$this->getApplication()->isClient('administrator')) {
69+
$app = $event->getApplication();
70+
if (!$app->isClient('administrator')) {
6771
return;
6872
}
6973

7074
// Load translations
7175
$this->loadLanguage();
7276

73-
$context = $this->getApplication()->getInput()->get('option') . '.' . $this->getApplication()->getInput()->get('view');
77+
$context = $app->getInput()->get('option') . '.' . $app->getInput()->get('view');
7478

7579
$shortcuts = [];
7680

@@ -92,7 +96,7 @@ public function initialize()
9296
Text::script('PLG_SYSTEM_SHORTCUT_THEN');
9397
Text::script('JCLOSE');
9498

95-
$document = $this->getApplication()->getDocument();
99+
$document = $app->getDocument();
96100
$wa = $document->getWebAssetManager();
97101
$wa->registerAndUseScript(
98102
'plg_system_shortcut.shortcut',
@@ -111,28 +115,29 @@ public function initialize()
111115
/**
112116
* Add default shortcuts to the document
113117
*
114-
* @param Event $event The event
118+
* @param Event $event The event instance.
115119
*
116120
* @return void
117121
*
118122
* @since 4.2.0
119123
*/
120-
public function addShortcuts(Event $event)
124+
public function addShortcuts(Event $event): void
121125
{
122126
$shortcuts = $event->getArgument('shortcuts', []);
123127

128+
$language = $this->getApplication()->getLanguage();
124129
$shortcuts = array_merge(
125130
$shortcuts,
126131
[
127-
'applyKey' => (object) ['selector' => 'joomla-toolbar-button .button-apply', 'shortcut' => 'A', 'title' => $this->getApplication()->getLanguage()->_('JAPPLY')],
128-
'saveKey' => (object) ['selector' => 'joomla-toolbar-button .button-save', 'shortcut' => 'S', 'title' => $this->getApplication()->getLanguage()->_('JTOOLBAR_SAVE')],
129-
'cancelKey' => (object) ['selector' => 'joomla-toolbar-button .button-cancel', 'shortcut' => 'Q', 'title' => $this->getApplication()->getLanguage()->_('JCANCEL')],
130-
'newKey' => (object) ['selector' => 'joomla-toolbar-button .button-new', 'shortcut' => 'N', 'title' => $this->getApplication()->getLanguage()->_('JTOOLBAR_NEW')],
131-
'searchKey' => (object) ['selector' => 'input[placeholder=' . $this->getApplication()->getLanguage()->_('JSEARCH_FILTER') . ']', 'shortcut' => 'F', 'title' => $this->getApplication()->getLanguage()->_('JSEARCH_FILTER')],
132-
'optionKey' => (object) ['selector' => 'joomla-toolbar-button .button-options', 'shortcut' => 'O', 'title' => $this->getApplication()->getLanguage()->_('JOPTIONS')],
133-
'helpKey' => (object) ['selector' => 'joomla-toolbar-button .button-help', 'shortcut' => 'H', 'title' => $this->getApplication()->getLanguage()->_('JHELP')],
134-
'toggleMenu' => (object) ['selector' => '#menu-collapse', 'shortcut' => 'M', 'title' => $this->getApplication()->getLanguage()->_('JTOGGLE_SIDEBAR_MENU')],
135-
'dashboard' => (object) ['selector' => (string) new Uri(Route::_('index.php?')), 'shortcut' => 'D', 'title' => $this->getApplication()->getLanguage()->_('JHOMEDASHBOARD')],
132+
'applyKey' => (object) ['selector' => 'joomla-toolbar-button .button-apply', 'shortcut' => 'A', 'title' => $language->_('JAPPLY')],
133+
'saveKey' => (object) ['selector' => 'joomla-toolbar-button .button-save', 'shortcut' => 'S', 'title' => $language->_('JTOOLBAR_SAVE')],
134+
'cancelKey' => (object) ['selector' => 'joomla-toolbar-button .button-cancel', 'shortcut' => 'Q', 'title' => $language->_('JCANCEL')],
135+
'newKey' => (object) ['selector' => 'joomla-toolbar-button .button-new', 'shortcut' => 'N', 'title' => $language->_('JTOOLBAR_NEW')],
136+
'searchKey' => (object) ['selector' => 'input[placeholder=' . $language->_('JSEARCH_FILTER') . ']', 'shortcut' => 'F', 'title' => $language->_('JSEARCH_FILTER')],
137+
'optionKey' => (object) ['selector' => 'joomla-toolbar-button .button-options', 'shortcut' => 'O', 'title' => $language->_('JOPTIONS')],
138+
'helpKey' => (object) ['selector' => 'joomla-toolbar-button .button-help', 'shortcut' => 'H', 'title' => $language->_('JHELP')],
139+
'toggleMenu' => (object) ['selector' => '#menu-collapse', 'shortcut' => 'M', 'title' => $language->_('JTOGGLE_SIDEBAR_MENU')],
140+
'dashboard' => (object) ['selector' => (string) new Uri(Route::_('index.php?')), 'shortcut' => 'D', 'title' => $language->_('JHOMEDASHBOARD')],
136141
]
137142
);
138143

plugins/system/skipto/src/Extension/Skipto.php

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ public function onAfterDispatch(AfterDispatchEvent $event): void
7373
$this->loadLanguage();
7474

7575
// Add plugin settings and strings for translations in JavaScript.
76+
$language = $app->getLanguage();
7677
$document->addScriptOptions(
7778
'skipto-settings',
7879
[
@@ -87,24 +88,24 @@ public function onAfterDispatch(AfterDispatchEvent $event): void
8788
'displayOption' => 'popup',
8889

8990
// Button labels and messages
90-
'buttonLabel' => $app->getLanguage()->_('PLG_SYSTEM_SKIPTO_TITLE'),
91-
'buttonTooltipAccesskey' => $app->getLanguage()->_('PLG_SYSTEM_SKIPTO_ACCESS_KEY'),
91+
'buttonLabel' => $language->_('PLG_SYSTEM_SKIPTO_TITLE'),
92+
'buttonTooltipAccesskey' => $language->_('PLG_SYSTEM_SKIPTO_ACCESS_KEY'),
9293

9394
// Menu labels and messages
94-
'landmarkGroupLabel' => $app->getLanguage()->_('PLG_SYSTEM_SKIPTO_LANDMARK'),
95-
'headingGroupLabel' => $app->getLanguage()->_('PLG_SYSTEM_SKIPTO_HEADING'),
96-
'mofnGroupLabel' => $app->getLanguage()->_('PLG_SYSTEM_SKIPTO_HEADING_MOFN'),
97-
'headingLevelLabel' => $app->getLanguage()->_('PLG_SYSTEM_SKIPTO_HEADING_LEVEL'),
98-
'mainLabel' => $app->getLanguage()->_('PLG_SYSTEM_SKIPTO_LANDMARK_MAIN'),
99-
'searchLabel' => $app->getLanguage()->_('PLG_SYSTEM_SKIPTO_LANDMARK_SEARCH'),
100-
'navLabel' => $app->getLanguage()->_('PLG_SYSTEM_SKIPTO_LANDMARK_NAV'),
101-
'regionLabel' => $app->getLanguage()->_('PLG_SYSTEM_SKIPTO_LANDMARK_REGION'),
102-
'asideLabel' => $app->getLanguage()->_('PLG_SYSTEM_SKIPTO_LANDMARK_ASIDE'),
103-
'footerLabel' => $app->getLanguage()->_('PLG_SYSTEM_SKIPTO_LANDMARK_FOOTER'),
104-
'headerLabel' => $app->getLanguage()->_('PLG_SYSTEM_SKIPTO_LANDMARK_HEADER'),
105-
'formLabel' => $app->getLanguage()->_('PLG_SYSTEM_SKIPTO_LANDMARK_FORM'),
106-
'msgNoLandmarksFound' => $app->getLanguage()->_('PLG_SYSTEM_SKIPTO_LANDMARK_NONE'),
107-
'msgNoHeadingsFound' => $app->getLanguage()->_('PLG_SYSTEM_SKIPTO_HEADING_NONE'),
95+
'landmarkGroupLabel' => $language->_('PLG_SYSTEM_SKIPTO_LANDMARK'),
96+
'headingGroupLabel' => $language->_('PLG_SYSTEM_SKIPTO_HEADING'),
97+
'mofnGroupLabel' => $language->_('PLG_SYSTEM_SKIPTO_HEADING_MOFN'),
98+
'headingLevelLabel' => $language->_('PLG_SYSTEM_SKIPTO_HEADING_LEVEL'),
99+
'mainLabel' => $language->_('PLG_SYSTEM_SKIPTO_LANDMARK_MAIN'),
100+
'searchLabel' => $language->_('PLG_SYSTEM_SKIPTO_LANDMARK_SEARCH'),
101+
'navLabel' => $language->_('PLG_SYSTEM_SKIPTO_LANDMARK_NAV'),
102+
'regionLabel' => $language->_('PLG_SYSTEM_SKIPTO_LANDMARK_REGION'),
103+
'asideLabel' => $language->_('PLG_SYSTEM_SKIPTO_LANDMARK_ASIDE'),
104+
'footerLabel' => $language->_('PLG_SYSTEM_SKIPTO_LANDMARK_FOOTER'),
105+
'headerLabel' => $language->_('PLG_SYSTEM_SKIPTO_LANDMARK_HEADER'),
106+
'formLabel' => $language->_('PLG_SYSTEM_SKIPTO_LANDMARK_FORM'),
107+
'msgNoLandmarksFound' => $language->_('PLG_SYSTEM_SKIPTO_LANDMARK_NONE'),
108+
'msgNoHeadingsFound' => $language->_('PLG_SYSTEM_SKIPTO_HEADING_NONE'),
108109

109110
// Selectors for landmark and headings sections
110111
'headings' => 'h1, h2, h3',

0 commit comments

Comments
 (0)