Skip to content

Commit d6e2991

Browse files
authored
[5.4] Convert mod_finder to service provider (joomla#45815)
* mod_finder converted to service provider
1 parent 52cd3f4 commit d6e2991

File tree

6 files changed

+187
-67
lines changed

6 files changed

+187
-67
lines changed

modules/mod_finder/mod_finder.php

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

modules/mod_finder/mod_finder.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<description>MOD_FINDER_XML_DESCRIPTION</description>
1212
<namespace path="src">Joomla\Module\Finder</namespace>
1313
<files>
14-
<filename module="mod_finder">mod_finder.php</filename>
14+
<folder module="mod_finder">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_finder
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 finder 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\\Finder'));
37+
$container->registerServiceProvider(new HelperFactory('\\Joomla\\Module\\Finder\\Site\\Helper'));
38+
39+
$container->registerServiceProvider(new Module());
40+
}
41+
};
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
<?php
2+
3+
/**
4+
* @package Joomla.Site
5+
* @subpackage mod_finder
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\Finder\Site\Dispatcher;
12+
13+
use Joomla\CMS\Component\ComponentHelper;
14+
use Joomla\CMS\Dispatcher\AbstractModuleDispatcher;
15+
use Joomla\CMS\Helper\HelperFactoryAwareInterface;
16+
use Joomla\CMS\Helper\HelperFactoryAwareTrait;
17+
use Joomla\CMS\Language\Text;
18+
use Joomla\CMS\Router\Route;
19+
use Joomla\CMS\Uri\Uri;
20+
use Joomla\Component\Finder\Administrator\Helper\LanguageHelper;
21+
use Joomla\Component\Finder\Site\Helper\RouteHelper;
22+
23+
// phpcs:disable PSR1.Files.SideEffects
24+
\defined('_JEXEC') or die;
25+
// phpcs:enable PSR1.Files.SideEffects
26+
27+
/**
28+
* Dispatcher class for mod_finder
29+
*
30+
* @since __DEPLOY_VERSION__
31+
*/
32+
class Dispatcher extends AbstractModuleDispatcher implements HelperFactoryAwareInterface
33+
{
34+
use HelperFactoryAwareTrait;
35+
36+
/**
37+
* Returns the layout data.
38+
*
39+
* @return array
40+
*
41+
* @since __DEPLOY_VERSION__
42+
*/
43+
protected function getLayoutData()
44+
{
45+
$data = parent::getLayoutData();
46+
47+
$cparams = ComponentHelper::getParams('com_finder');
48+
49+
// Check for OpenSearch
50+
if ($data['params']->get('opensearch', $cparams->get('opensearch', 1))) {
51+
$defaultTitle = Text::_('MOD_FINDER_OPENSEARCH_NAME') . ' ' . $data['app']->get('sitename');
52+
$ostitle = $data['params']->get('opensearch_name', $cparams->get('opensearch_name', $defaultTitle));
53+
$data['app']->getDocument()->addHeadLink(
54+
Uri::getInstance()->toString(['scheme', 'host', 'port']) . Route::_('index.php?option=com_finder&view=search&format=opensearch'),
55+
'search',
56+
'rel',
57+
['title' => $ostitle, 'type' => 'application/opensearchdescription+xml']
58+
);
59+
}
60+
61+
// Get the route.
62+
$data['route'] = RouteHelper::getSearchRoute($data['params']->get('searchfilter', null));
63+
64+
if ($data['params']->get('set_itemid')) {
65+
$uri = Uri::getInstance($data['route']);
66+
$uri->setVar('Itemid', $data['params']->get('set_itemid'));
67+
$data['route'] = $uri->toString(['path', 'query']);
68+
}
69+
70+
// Load component language file.
71+
LanguageHelper::loadComponentLanguage();
72+
73+
// Load plugin language files.
74+
LanguageHelper::loadPluginLanguage();
75+
76+
// Get Smart Search query object.
77+
$data['query'] = $this->getHelperFactory()->getHelper('FinderHelper')->getSearchQuery($data['params'], $data['app']);
78+
79+
return $data;
80+
}
81+
}

modules/mod_finder/src/Helper/FinderHelper.php

Lines changed: 61 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,15 @@
1010

1111
namespace Joomla\Module\Finder\Site\Helper;
1212

13+
use Joomla\CMS\Application\CMSApplicationInterface;
1314
use Joomla\CMS\Factory;
1415
use Joomla\CMS\Filter\InputFilter;
1516
use Joomla\CMS\Router\Route;
1617
use Joomla\CMS\Uri\Uri;
1718
use Joomla\Component\Finder\Administrator\Indexer\Query;
18-
use Joomla\Database\DatabaseInterface;
19+
use Joomla\Database\DatabaseAwareInterface;
20+
use Joomla\Database\DatabaseAwareTrait;
21+
use Joomla\Registry\Registry;
1922
use Joomla\Utilities\ArrayHelper;
2023

2124
// phpcs:disable PSR1.Files.SideEffects
@@ -27,20 +30,21 @@
2730
*
2831
* @since 2.5
2932
*/
30-
class FinderHelper
33+
class FinderHelper implements DatabaseAwareInterface
3134
{
35+
use DatabaseAwareTrait;
36+
3237
/**
3338
* Method to get hidden input fields for a get form so that control variables
3439
* are not lost upon form submission.
3540
*
3641
* @param string $route The route to the page. [optional]
37-
* @param integer $paramItem The menu item ID. (@since 3.1) [optional]
3842
*
3943
* @return string A string of hidden input form fields
4044
*
41-
* @since 2.5
45+
* @since __DEPLOY_VERSION__
4246
*/
43-
public static function getGetFields($route = null, $paramItem = 0)
47+
public function getHiddenFields($route = null): string
4448
{
4549
$fields = [];
4650
$uri = Uri::getInstance(Route::_($route));
@@ -57,15 +61,16 @@ public static function getGetFields($route = null, $paramItem = 0)
5761
/**
5862
* Get Smart Search query object.
5963
*
60-
* @param \Joomla\Registry\Registry $params Module parameters.
64+
* @param Registry $params Module parameters.
65+
* @param CMSApplicationInterface $app The application
6166
*
6267
* @return Query object
6368
*
64-
* @since 2.5
69+
* @since __DEPLOY_VERSION__
6570
*/
66-
public static function getQuery($params)
71+
public function getSearchQuery(Registry $params, CMSApplicationInterface $app): Query
6772
{
68-
$request = Factory::getApplication()->getInput()->request;
73+
$request = $app->getInput()->request;
6974
$filter = InputFilter::getInstance();
7075

7176
// Get the static taxonomy filters.
@@ -79,6 +84,52 @@ public static function getQuery($params)
7984
$options['filters'] = ArrayHelper::toInteger($options['filters']);
8085

8186
// Instantiate a query object.
82-
return new Query($options, Factory::getContainer()->get(DatabaseInterface::class));
87+
return new Query($options, $this->getDatabase());
88+
}
89+
90+
/**
91+
* Method to get hidden input fields for a get form so that control variables
92+
* are not lost upon form submission.
93+
*
94+
* @param string $route The route to the page. [optional]
95+
* @param integer $paramItem The menu item ID. (@since 3.1) [optional]
96+
*
97+
* @return string A string of hidden input form fields
98+
*
99+
* @since 2.5
100+
*
101+
* @deprecated __DEPLOY_VERSION__ will be removed in 7.0
102+
* Use the non-static method getFields
103+
* Example: Factory::getApplication()->bootModule('mod_finder', 'site')
104+
* ->getHelper('FinderHelper')
105+
* ->getHiddenFields($route, $paramItem)
106+
*/
107+
public static function getGetFields($route = null, $paramItem = 0)
108+
{
109+
return (new self())->getHiddenFields($route);
110+
}
111+
112+
/**
113+
* Get Smart Search query object.
114+
*
115+
* @param \Joomla\Registry\Registry $params Module parameters.
116+
*
117+
* @return Query object
118+
*
119+
* @since 2.5
120+
*
121+
* @deprecated __DEPLOY_VERSION__ will be removed in 7.0
122+
* Use the non-static method getSearchQuery
123+
* Example: Factory::getApplication()->bootModule('mod_finder', 'site')
124+
* ->getHelper('FinderHelper')
125+
* ->getSearchQuery($params, Factory::getApplication())
126+
*/
127+
public static function getQuery($params)
128+
{
129+
$app = Factory::getApplication();
130+
131+
return $app->bootModule('mod_finder', 'site')
132+
->getHelper('FinderHelper')
133+
->getSearchQuery($params, $app);
83134
}
84135
}

modules/mod_finder/tmpl/default.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
use Joomla\CMS\HTML\HTMLHelper;
1414
use Joomla\CMS\Language\Text;
1515
use Joomla\CMS\Router\Route;
16-
use Joomla\Module\Finder\Site\Helper\FinderHelper;
1716

1817
// Load the smart search component language file.
1918
$lang = $app->getLanguage();
@@ -59,6 +58,8 @@
5958

6059
$wa->useScript('com_finder.finder');
6160

61+
$finderHelper = $app->bootModule('mod_finder', 'site')->getHelper('FinderHelper');
62+
6263
?>
6364

6465
<form class="mod-finder js-finder-searchform form-search" action="<?php echo Route::_($route); ?>" method="get" role="search">
@@ -73,5 +74,5 @@
7374
<?php echo HTMLHelper::_('filter.select', $query, $params); ?>
7475
</div>
7576
<?php endif; ?>
76-
<?php echo FinderHelper::getGetFields($route, (int) $params->get('set_itemid', 0)); ?>
77+
<?php echo $finderHelper->getHiddenFields($route); ?>
7778
</form>

0 commit comments

Comments
 (0)