Skip to content

Commit fb908ba

Browse files
authored
[5.4] Convert mod_random_image to service provider (#45648)
* mod_random_image converted to service provider
1 parent 769f3de commit fb908ba

File tree

5 files changed

+165
-33
lines changed

5 files changed

+165
-33
lines changed

modules/mod_random_image/mod_random_image.php

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

modules/mod_random_image/mod_random_image.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<description>MOD_RANDOM_IMAGE_XML_DESCRIPTION</description>
1212
<namespace path="src">Joomla\Module\RandomImage</namespace>
1313
<files>
14-
<filename module="mod_random_image">mod_random_image.php</filename>
14+
<folder module="mod_random_image">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.Site
5+
* @subpackage mod_random_image
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 random image 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\\RandomImage'));
37+
$container->registerServiceProvider(new HelperFactory('\\Joomla\\Module\\RandomImage\\Site\\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.Site
5+
* @subpackage mod_random_image
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\RandomImage\Site\Dispatcher;
12+
13+
use Joomla\CMS\Dispatcher\AbstractModuleDispatcher;
14+
use Joomla\CMS\Helper\HelperFactoryAwareInterface;
15+
use Joomla\CMS\Helper\HelperFactoryAwareTrait;
16+
17+
// phpcs:disable PSR1.Files.SideEffects
18+
\defined('_JEXEC') or die;
19+
// phpcs:enable PSR1.Files.SideEffects
20+
21+
/**
22+
* Dispatcher class for mod_random_image
23+
*
24+
* @since __DEPLOY_VERSION__
25+
*/
26+
class Dispatcher extends AbstractModuleDispatcher implements HelperFactoryAwareInterface
27+
{
28+
use HelperFactoryAwareTrait;
29+
30+
/**
31+
* Returns the layout data.
32+
*
33+
* @return array
34+
*
35+
* @since __DEPLOY_VERSION__
36+
*/
37+
protected function getLayoutData()
38+
{
39+
$data = parent::getLayoutData();
40+
41+
$helper = $this->getHelperFactory()->getHelper('RandomImageHelper');
42+
$data['link'] = $data['params']->get('link');
43+
$folder = $helper->getSanitizedFolder($data['params']);
44+
$data['images'] = $helper->getImagesFromFolder($data['params'], $folder);
45+
$data['image'] = $helper->getImage($data['params'], $data['images']);
46+
47+
return $data;
48+
}
49+
}

modules/mod_random_image/src/Helper/RandomImageHelper.php

Lines changed: 74 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
namespace Joomla\Module\RandomImage\Site\Helper;
1212

1313
use Joomla\CMS\Uri\Uri;
14+
use Joomla\Registry\Registry;
1415
use Joomla\String\StringHelper;
1516

1617
// phpcs:disable PSR1.Files.SideEffects
@@ -27,12 +28,14 @@ class RandomImageHelper
2728
/**
2829
* Retrieves a random image
2930
*
30-
* @param \Joomla\Registry\Registry &$params module parameters object
31-
* @param array $images list of images
31+
* @param Registry &$params module parameters object
32+
* @param array $images list of images
3233
*
3334
* @return mixed
35+
*
36+
* @since __DEPLOY_VERSION__
3437
*/
35-
public static function getRandomImage(&$params, $images)
38+
public function getImage(Registry &$params, array $images): mixed
3639
{
3740
$width = $params->get('width', 100);
3841
$height = $params->get('height', null);
@@ -75,12 +78,14 @@ public static function getRandomImage(&$params, $images)
7578
/**
7679
* Retrieves images from a specific folder
7780
*
78-
* @param \Joomla\Registry\Registry &$params module params
79-
* @param string $folder folder to get the images from
81+
* @param Registry &$params module params
82+
* @param string $folder folder to get the images from
8083
*
8184
* @return array
85+
*
86+
* @since __DEPLOY_VERSION__
8287
*/
83-
public static function getImages(&$params, $folder)
88+
public function getImagesFromFolder(Registry &$params, string $folder): array
8489
{
8590
$type = $params->get('type', 'jpg');
8691
$files = [];
@@ -119,18 +124,20 @@ public static function getImages(&$params, $folder)
119124
/**
120125
* Get sanitized folder
121126
*
122-
* @param \Joomla\Registry\Registry &$params module params objects
127+
* @param Registry &$params module params objects
123128
*
124129
* @return mixed
130+
*
131+
* @since __DEPLOY_VERSION__
125132
*/
126-
public static function getFolder(&$params)
133+
public function getSanitizedFolder(Registry &$params): mixed
127134
{
128135
$folder = $params->get('folder');
129-
$LiveSite = Uri::base();
136+
$liveSite = Uri::base();
130137

131138
// If folder includes livesite info, remove
132-
if (StringHelper::strpos($folder, $LiveSite) === 0) {
133-
$folder = str_replace($LiveSite, '', $folder);
139+
if (StringHelper::strpos($folder, $liveSite) === 0) {
140+
$folder = str_replace($liveSite, '', $folder);
134141
}
135142

136143
// If folder includes absolute path, remove
@@ -140,4 +147,60 @@ public static function getFolder(&$params)
140147

141148
return str_replace(['\\', '/'], DIRECTORY_SEPARATOR, $folder);
142149
}
150+
151+
/**
152+
* Retrieves a random image
153+
*
154+
* @param Registry &$params module parameters object
155+
* @param array $images list of images
156+
*
157+
* @return mixed
158+
*
159+
* @deprecated __DEPLOY_VERSION__ will be removed in 7.0
160+
* Use the non-static method getImage
161+
* Example: Factory::getApplication()->bootModule('mod_random_image', 'site')
162+
* ->getHelper('RandomImageHelper')
163+
* ->getImage($params, $images)
164+
*/
165+
public static function getRandomImage(&$params, $images)
166+
{
167+
return (new self())->getImage($params, $images);
168+
}
169+
170+
/**
171+
* Retrieves images from a specific folder
172+
*
173+
* @param Registry &$params module params
174+
* @param string $folder folder to get the images from
175+
*
176+
* @return array
177+
*
178+
* @deprecated __DEPLOY_VERSION__ will be removed in 7.0
179+
* Use the non-static method getImagesFromFolder
180+
* Example: Factory::getApplication()->bootModule('mod_random_image', 'site')
181+
* ->getHelper('RandomImageHelper')
182+
* ->getImagesFromFolder($params, $folder)
183+
*/
184+
public static function getImages(&$params, $folder)
185+
{
186+
return (new self())->getImagesFromFolder($params, $folder);
187+
}
188+
189+
/**
190+
* Get sanitized folder
191+
*
192+
* @param Registry &$params module params objects
193+
*
194+
* @return mixed
195+
*
196+
* @deprecated __DEPLOY_VERSION__ will be removed in 7.0
197+
* Use the non-static method getSanitizedFolder
198+
* Example: Factory::getApplication()->bootModule('mod_random_image', 'site')
199+
* ->getHelper('RandomImageHelper')
200+
* ->getSanitizedFolder($params)
201+
*/
202+
public static function getFolder(&$params)
203+
{
204+
return (new self())->getSanitizedFolder($params);
205+
}
143206
}

0 commit comments

Comments
 (0)