acf
This commit is contained in:
132
plugins/system/nrframework/fields/nrcomponents.php
Normal file
132
plugins/system/nrframework/fields/nrcomponents.php
Normal file
@ -0,0 +1,132 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Tassos.gr <info@tassos.gr>
|
||||
* @link https://www.tassos.gr
|
||||
* @copyright Copyright © 2024 Tassos All Rights Reserved
|
||||
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
use Joomla\CMS\Form\Field\ListField;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Factory;
|
||||
|
||||
class JFormFieldNRComponents extends ListField
|
||||
{
|
||||
protected function getOptions()
|
||||
{
|
||||
return array_merge(parent::getOptions(), $this->getInstalledComponents());
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to get field parameters
|
||||
*
|
||||
* @param string $val Field parameter
|
||||
* @param string $default The default value
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function get($val, $default = '')
|
||||
{
|
||||
return (isset($this->element[$val]) && (string) $this->element[$val] != '') ? (string) $this->element[$val] : $default;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a list of installed components
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getInstalledComponents()
|
||||
{
|
||||
$lang = Factory::getLanguage();
|
||||
$db = Factory::getDbo();
|
||||
|
||||
$components = $db->setQuery(
|
||||
$db->getQuery(true)
|
||||
->select('name, element')
|
||||
->from('#__extensions')
|
||||
->where('type = ' . $db->quote('component'))
|
||||
->where('name != ""')
|
||||
->where('element != ""')
|
||||
->where('enabled = 1')
|
||||
->order('element, name')
|
||||
)->loadObjectList();
|
||||
|
||||
$comps = array();
|
||||
|
||||
foreach ($components as $component)
|
||||
{
|
||||
// Make sure we have a valid element
|
||||
if (empty($component->element))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Skip backend-based only components
|
||||
if ($this->get('frontend', false))
|
||||
{
|
||||
$component_folder = JPATH_SITE . '/components/' . $component->element;
|
||||
|
||||
if (!is_dir($component_folder))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!is_dir($component_folder . '/views') &&
|
||||
!is_dir($component_folder . '/View') &&
|
||||
!is_dir($component_folder . '/view'))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// Try loading component's system language file in order to display a user friendly component name
|
||||
// Runs only if the component's name is not translated already.
|
||||
if (strpos($component->name, ' ') === false)
|
||||
{
|
||||
$filenames = [
|
||||
$component->element . '.sys',
|
||||
$component->element
|
||||
];
|
||||
|
||||
$paths = [
|
||||
JPATH_ADMINISTRATOR,
|
||||
JPATH_ADMINISTRATOR . '/components/' . $component->element,
|
||||
JPATH_SITE,
|
||||
JPATH_SITE . '/components/' . $component->element
|
||||
];
|
||||
|
||||
foreach ($filenames as $key => $filename)
|
||||
{
|
||||
foreach ($paths as $key => $path)
|
||||
{
|
||||
$loaded = $lang->load($filename, $path, null) || $lang->load($filename, $path, $lang->getDefault());
|
||||
|
||||
if ($loaded)
|
||||
{
|
||||
break 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Translate component's name
|
||||
$component->name = Text::_(strtoupper($component->name));
|
||||
}
|
||||
|
||||
$comps[strtolower($component->element)] = $component->name;
|
||||
}
|
||||
|
||||
asort($comps);
|
||||
|
||||
$options = array();
|
||||
|
||||
foreach ($comps as $key => $name)
|
||||
{
|
||||
$options[] = HTMLHelper::_('select.option', $key, $name);
|
||||
}
|
||||
|
||||
return $options;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user