Convert Finder - Weblinks plugin to service provider

This commit is contained in:
Tuan Pham Ngoc 2023-03-16 15:55:14 +07:00
parent 8d928181e9
commit 6262e22a18
3 changed files with 92 additions and 21 deletions

View File

@ -0,0 +1,47 @@
<?php
/**
* @package Joomla.Plugin
* @subpackage Finder.weblinks
*
* @copyright (C) 2023 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
use Joomla\CMS\Extension\PluginInterface;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\Database\DatabaseInterface;
use Joomla\DI\Container;
use Joomla\DI\ServiceProviderInterface;
use Joomla\Event\DispatcherInterface;
use Joomla\Plugin\Finder\Weblinks\Extension\Weblinks;
return new class () implements ServiceProviderInterface {
/**
* Registers the service provider with a DI container.
*
* @param Container $container The DI container.
*
* @return void
*
* @since __DEPLOY_VERSION__
*/
public function register(Container $container)
{
$container->set(
PluginInterface::class,
function (Container $container) {
$dispatcher = $container->get(DispatcherInterface::class);
$database = $container->get(DatabaseInterface::class);
return new Weblinks(
$dispatcher,
(array) PluginHelper::getPlugin('finder', 'weblinks'),
$database
);
}
);
}
};

View File

@ -7,15 +7,22 @@
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\Plugin\Finder\Weblinks\Extension;
defined('JPATH_BASE') or die;
use Joomla\CMS\Categories\Categories;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Table\Table;
use Joomla\Component\Finder\Administrator\Indexer\Adapter;
use Joomla\Component\Finder\Administrator\Indexer\Helper;
use Joomla\Component\Finder\Administrator\Indexer\Indexer;
use Joomla\Component\Finder\Administrator\Indexer\Result;
use Joomla\Component\Weblinks\Site\Helper\RouteHelper;
use Joomla\Database\DatabaseAwareTrait;
use Joomla\Database\DatabaseInterface;
use Joomla\Database\DatabaseQuery;
use Joomla\Event\DispatcherInterface;
use Joomla\Registry\Registry;
/**
@ -23,8 +30,10 @@ use Joomla\Registry\Registry;
*
* @since 2.5
*/
class PlgFinderWeblinks extends Adapter
final class Weblinks extends Adapter
{
use DatabaseAwareTrait;
/**
* The plugin identifier.
*
@ -73,6 +82,20 @@ class PlgFinderWeblinks extends Adapter
*/
protected $autoloadLanguage = true;
/**
* Constructor
*
* @param DispatcherInterface $dispatcher
* @param array $config
* @param DatabaseInterface $database
*/
public function __construct(DispatcherInterface $dispatcher, array $config, DatabaseInterface $database)
{
parent::__construct($dispatcher, $config);
$this->setDatabase($database);
}
/**
* Method to update the item link information when the item category is
* changed. This is fired when the item category is published or unpublished
@ -99,12 +122,12 @@ class PlgFinderWeblinks extends Adapter
* Method to remove the link information for items that have been deleted.
*
* @param string $context The context of the action being performed.
* @param JTable $table A JTable object containing the record to be deleted.
* @param Table $table A JTable object containing the record to be deleted.
*
* @return boolean True on success.
*
* @throws \Exception on database error.
* @since 2.5
* @throws Exception on database error.
*/
public function onFinderAfterDelete($context, $table)
{
@ -132,13 +155,13 @@ class PlgFinderWeblinks extends Adapter
* the category to which it belongs has been changed.
*
* @param string $context The context of the content passed to the plugin.
* @param JTable $row A JTable object.
* @param Table $row A JTable object.
* @param boolean $isNew True if the content has just been created.
*
* @return boolean True on success.
*
* @throws \Exception on database error.
* @since 2.5
* @throws Exception on database error.
*/
public function onFinderAfterSave($context, $row, $isNew)
{
@ -174,13 +197,13 @@ class PlgFinderWeblinks extends Adapter
* This event is fired before the data is actually saved.
*
* @param string $context The context of the content passed to the plugin.
* @param JTable $row A JTable object.
* @param Table $row A JTable object.
* @param boolean $isNew True if the content is just about to be created.
*
* @return boolean True on success.
*
* @throws \Exception on database error.
* @since 2.5
* @throws Exception on database error.
*/
public function onFinderBeforeSave($context, $row, $isNew)
{
@ -238,12 +261,12 @@ class PlgFinderWeblinks extends Adapter
/**
* Method to index an item. The item must be a FinderIndexerResult object.
*
* @param Result $item The item to index as an FinderIndexerResult object.
* @param Result $item The item to index as an FinderIndexerResult object.
*
* @return void
*
* @throws \Exception on database error.
* @since 2.5
* @throws Exception on database error.
*/
protected function index(Result $item)
{
@ -256,7 +279,7 @@ class PlgFinderWeblinks extends Adapter
$item->setLanguage();
// Initialise the item parameters.
$item->params = new Registry($item->params);
$item->params = new Registry($item->params);
$item->metadata = new Registry($item->metadata);
// Build the necessary route and path information.
@ -323,16 +346,16 @@ class PlgFinderWeblinks extends Adapter
*
* @param mixed $query A JDatabaseQuery object or null.
*
* @return JDatabaseQuery A database object.
* @return DatabaseQuery A database object.
*
* @since 2.5
*/
protected function getListQuery($query = null)
{
$db = $this->db;
$db = $this->getDatabase();
// Check if we can use the supplied SQL query.
$query = $query instanceof JDatabaseQuery ? $query : $db->getQuery(true)
$query = $query instanceof DatabaseQuery ? $query : $db->getQuery(true)
->select('a.id, a.catid, a.title, a.alias, a.url AS link, a.description AS summary')
->select('a.metakey, a.metadesc, a.metadata, a.language, a.access, a.ordering')
->select('a.created_by_alias, a.modified, a.modified_by')
@ -344,8 +367,8 @@ class PlgFinderWeblinks extends Adapter
$case_when_item_alias = ' CASE WHEN ';
$case_when_item_alias .= $query->charLength('a.alias', '!=', '0');
$case_when_item_alias .= ' THEN ';
$a_id = $query->castAs('CHAR', 'a.id');
$case_when_item_alias .= $query->concatenate(array($a_id, 'a.alias'), ':');
$a_id = $query->castAs('CHAR', 'a.id');
$case_when_item_alias .= $query->concatenate([$a_id, 'a.alias'], ':');
$case_when_item_alias .= ' ELSE ';
$case_when_item_alias .= $a_id . ' END as slug';
$query->select($case_when_item_alias);
@ -353,12 +376,11 @@ class PlgFinderWeblinks extends Adapter
$case_when_category_alias = ' CASE WHEN ';
$case_when_category_alias .= $query->charLength('c.alias', '!=', '0');
$case_when_category_alias .= ' THEN ';
$c_id = $query->castAs('CHAR', 'c.id');
$case_when_category_alias .= $query->concatenate(array($c_id, 'c.alias'), ':');
$c_id = $query->castAs('CHAR', 'c.id');
$case_when_category_alias .= $query->concatenate([$c_id, 'c.alias'], ':');
$case_when_category_alias .= ' ELSE ';
$case_when_category_alias .= $c_id . ' END as catslug';
$query->select($case_when_category_alias)
->from('#__weblinks AS a')
->join('LEFT', '#__categories AS c ON c.id = a.catid');
@ -370,15 +392,16 @@ class PlgFinderWeblinks extends Adapter
*
* @param string $time The modified timestamp.
*
* @return JDatabaseQuery A database object.
* @return DatabaseQuery A database object.
*
* @since 2.5
*/
protected function getUpdateQueryByTime($time)
{
// Build an SQL query based on the modified time.
$query = $this->db->getQuery(true)
->where('a.date >= ' . $this->db->quote($time));
$db = $this->getDatabase();
$query = $db->getQuery(true)
->where('a.date >= ' . $db->quote($time));
return $query;
}

View File

@ -9,6 +9,7 @@
<authorUrl>www.joomla.org</authorUrl>
<version>##VERSION##</version>
<description>PLG_FINDER_WEBLINKS_XML_DESCRIPTION</description>
<namespace path="src">Joomla\Plugin\Finder\Weblinks</namespace>
<files>
##FILES##
</files>