Skip to content

Commit

Permalink
Package filter in the Extensions: Manage page (#37838)
Browse files Browse the repository at this point in the history
* Package filter in the Extensions: Manage page

* Update administrator/components/com_installer/forms/filter_manage.xml

Co-authored-by: Konstantin Kolos <k0nstantinkolos88@gmail.com>

* Update administrator/components/com_installer/src/Field/PackageField.php

Co-authored-by: heelc29 <66922325+heelc29@users.noreply.github.com>

* Update administrator/components/com_installer/src/Helper/InstallerHelper.php

Co-authored-by: heelc29 <66922325+heelc29@users.noreply.github.com>

* Update administrator/components/com_installer/src/Model/ManageModel.php

Co-authored-by: heelc29 <66922325+heelc29@users.noreply.github.com>

* Update administrator/components/com_installer/src/Helper/InstallerHelper.php

Co-authored-by: heelc29 <66922325+heelc29@users.noreply.github.com>

* Update administrator/components/com_installer/src/Field/PackageField.php

Co-authored-by: heelc29 <66922325+heelc29@users.noreply.github.com>

* Update administrator/language/en-GB/com_installer.ini

Co-authored-by: heelc29 <66922325+heelc29@users.noreply.github.com>

Co-authored-by: Konstantin Kolos <k0nstantinkolos88@gmail.com>
Co-authored-by: heelc29 <66922325+heelc29@users.noreply.github.com>
  • Loading branch information
3 people authored Jun 6, 2022
1 parent 4c59ca9 commit bde3e00
Show file tree
Hide file tree
Showing 5 changed files with 127 additions and 5 deletions.
10 changes: 10 additions & 0 deletions administrator/components/com_installer/forms/filter_manage.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,16 @@
<option value="">COM_INSTALLER_VALUE_CLIENT_SELECT</option>
</field>

<field
name="package_id"
type="package"
label="COM_INSTALLER_MANAGE_FILTER_PACKAGE_ID_LABEL"
description="COM_INSTALLER_MANAGE_FILTER_PACKAGE_ID_DESC"
onchange="this.form.submit();"
>
<option value="">COM_INSTALLER_VALUE_PACKAGE_ID_SELECT</option>
</field>

<field
name="type"
type="type"
Expand Down
36 changes: 36 additions & 0 deletions administrator/components/com_installer/src/Field/PackageField.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_installer
*
* @copyright (C) 2022 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/

namespace Joomla\Component\Installer\Administrator\Field;

use Joomla\CMS\Form\Field\ListField;
use Joomla\Component\Installer\Administrator\Helper\InstallerHelper;

/**
* Package field.
*
* Selects the extension ID of an extension of the "package" type.
*
* @since __DEPLOY_VERSION__
*/
class PackageField extends ListField
{
/**
* Method to get the field options.
*
* @return array The field option objects.
* @since __DEPLOY_VERSION__
*/
protected function getOptions()
{
$options = InstallerHelper::getPackageOptions();

return array_merge(parent::getOptions(), $options);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Object\CMSObject;
use Joomla\Database\DatabaseDriver;
use Joomla\Database\ParameterType;
use SimpleXMLElement;

Expand Down Expand Up @@ -119,6 +120,66 @@ public static function getStateOptions()
return $options;
}

/**
* Get a list of filter options for extensions of the "package" type.
*
* @return array
* @since __DEPLOY_VERSION__
*/
public static function getPackageOptions(): array
{
$options = [];

/** @var DatabaseDriver $db The application's database driver object */
$db = Factory::getContainer()->get(DatabaseDriver::class);
$query = $db->getQuery(true)
->select(
$db->quoteName(
[
'extension_id',
'name',
'element',
]
)
)
->from($db->quoteName('#__extensions'))
->where($db->quoteName('type') . ' = ' . $db->quote('package'));
$extensions = $db->setQuery($query)->loadObjectList() ?: [];

if (empty($extensions))
{
return $options;
}

$language = Factory::getApplication()->getLanguage();
$arrayKeys = array_map(
function (object $entry) use ($language): string
{
$language->load($entry->element, JPATH_ADMINISTRATOR);

return Text::_($entry->name);
},
$extensions
);
$arrayValues = array_map(
function (object $entry): int
{
return $entry->extension_id;
},
$extensions
);

$extensions = array_combine($arrayKeys, $arrayValues);
ksort($extensions);

foreach ($extensions as $label => $id)
{
$options[] = HTMLHelper::_('select.option', $id, $label);
}

return $options;
}

/**
* Get a list of filter options for the application statuses.
*
Expand Down
22 changes: 17 additions & 5 deletions administrator/components/com_installer/src/Model/ManageModel.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ protected function populateState($ordering = 'name', $direction = 'asc')
// Load the filter state.
$this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string'));
$this->setState('filter.client_id', $this->getUserStateFromRequest($this->context . '.filter.client_id', 'filter_client_id', null, 'int'));
$this->setState('filter.package_id', $this->getUserStateFromRequest($this->context . '.filter.package_id', 'filter_package_id', null, 'int'));
$this->setState('filter.status', $this->getUserStateFromRequest($this->context . '.filter.status', 'filter_status', '', 'string'));
$this->setState('filter.type', $this->getUserStateFromRequest($this->context . '.filter.type', 'filter_type', '', 'string'));
$this->setState('filter.folder', $this->getUserStateFromRequest($this->context . '.filter.folder', 'filter_folder', '', 'string'));
Expand Down Expand Up @@ -330,11 +331,12 @@ protected function getListQuery()
->where('state = 0');

// Process select filters.
$status = $this->getState('filter.status', '');
$type = $this->getState('filter.type');
$clientId = $this->getState('filter.client_id', '');
$folder = $this->getState('filter.folder');
$core = $this->getState('filter.core', '');
$status = $this->getState('filter.status', '');
$type = $this->getState('filter.type');
$clientId = $this->getState('filter.client_id', '');
$folder = $this->getState('filter.folder');
$core = $this->getState('filter.core', '');
$packageId = $this->getState('filter.package_id', '');

if ($status !== '')
{
Expand Down Expand Up @@ -368,6 +370,16 @@ protected function getListQuery()
->bind(':clientid', $clientId, ParameterType::INTEGER);
}

if ($packageId !== '')
{
$packageId = (int) $packageId;
$query->where(
'((' . $db->quoteName('package_id') . ' = :packageId1) OR '
. '(' . $db->quoteName('extension_id') . ' = :packageId2))'
)
->bind([':packageId1',':packageId2'], $packageId, ParameterType::INTEGER);
}

if ($folder)
{
$folder = $folder === '*' ? '' : $folder;
Expand Down
3 changes: 3 additions & 0 deletions administrator/language/en-GB/com_installer.ini
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ COM_INSTALLER_LANGUAGES_AVAILABLE_LANGUAGES="Available Languages"
COM_INSTALLER_LANGUAGES_FILTER_SEARCH_DESC="Search in language name and language tag."
COM_INSTALLER_LANGUAGES_FILTER_SEARCH_LABEL="Search Languages"
COM_INSTALLER_LANGUAGES_TABLE_CAPTION="Table of Available Languages"
COM_INSTALLER_MANAGE_FILTER_PACKAGE_ID_LABEL="Package"
COM_INSTALLER_MANAGE_FILTER_PACKAGE_ID_DESC="Search for a package extension and extensions included with that package extension."
COM_INSTALLER_MANAGE_FILTER_SEARCH_DESC="Search in extension name. Prefix with ID: to search for an extension ID."
COM_INSTALLER_MANAGE_FILTER_SEARCH_LABEL="Search Extensions"
COM_INSTALLER_MANAGE_TABLE_CAPTION="Table of Extensions"
Expand Down Expand Up @@ -280,6 +282,7 @@ COM_INSTALLER_VALUE_CORE_SELECT="- Select Extensions -"
COM_INSTALLER_VALUE_CORE_YES="Core Extensions"
COM_INSTALLER_VALUE_FOLDER_NONAPPLICABLE="N/A"
COM_INSTALLER_VALUE_FOLDER_SELECT="- Select Folder -"
COM_INSTALLER_VALUE_PACKAGE_ID_SELECT="- Select Package -"
COM_INSTALLER_VALUE_STATE_SELECT="- Select Status -"
COM_INSTALLER_VALUE_SUPPORTED_EXISTS="Download Key valid"
COM_INSTALLER_VALUE_SUPPORTED_MISSING="Download Key invalid"
Expand Down

0 comments on commit bde3e00

Please sign in to comment.