Release of v5.0.0-alpha8
Add power path override option on component level. Fix the sql build feature. #1032.
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Utilities;
|
||||
|
||||
|
||||
/**
|
||||
* Utilities Constant Paths
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Constantpaths
|
||||
{
|
||||
/**
|
||||
* The array of constant paths
|
||||
*
|
||||
* JPATH_SITE is meant to represent the root path of the JSite application,
|
||||
* just as JPATH_ADMINISTRATOR is mean to represent the root path of the JAdministrator application.
|
||||
*
|
||||
* JPATH_BASE is the root path for the current requested application.... so if you are in the administrator application:
|
||||
*
|
||||
* JPATH_BASE == JPATH_ADMINISTRATOR
|
||||
*
|
||||
* If you are in the site application:
|
||||
*
|
||||
* JPATH_BASE == JPATH_SITE
|
||||
*
|
||||
* If you are in the installation application:
|
||||
*
|
||||
* JPATH_BASE == JPATH_INSTALLATION.
|
||||
*
|
||||
* JPATH_ROOT is the root path for the Joomla install and does not depend upon any application.
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected array $paths = [
|
||||
// The path to the administrator folder.
|
||||
'JPATH_ADMINISTRATOR' => JPATH_ADMINISTRATOR,
|
||||
// The path to the installed Joomla! site, or JPATH_ROOT/administrator if executed from the backend.
|
||||
'JPATH_BASE' => JPATH_BASE,
|
||||
// The path to the cache folder.
|
||||
'JPATH_CACHE' => JPATH_CACHE,
|
||||
// The path to the administration folder of the current component being executed.
|
||||
'JPATH_COMPONENT_ADMINISTRATOR' => JPATH_COMPONENT_ADMINISTRATOR,
|
||||
// The path to the site folder of the current component being executed.
|
||||
'JPATH_COMPONENT_SITE' => JPATH_COMPONENT_SITE,
|
||||
// The path to the current component being executed.
|
||||
'JPATH_COMPONENT' => JPATH_COMPONENT,
|
||||
// The path to folder containing the configuration.php file.
|
||||
'JPATH_CONFIGURATION' => JPATH_CONFIGURATION,
|
||||
// The path to the installation folder.
|
||||
'JPATH_INSTALLATION' => JPATH_INSTALLATION,
|
||||
// The path to the libraries folder.
|
||||
'JPATH_LIBRARIES' => JPATH_LIBRARIES,
|
||||
// The path to the plugins folder.
|
||||
'JPATH_PLUGINS' => JPATH_PLUGINS,
|
||||
// The path to the installed Joomla! site.
|
||||
'JPATH_ROOT' => JPATH_ROOT,
|
||||
// The path to the installed Joomla! site.
|
||||
'JPATH_SITE' => JPATH_SITE,
|
||||
// The path to the templates folder.
|
||||
'JPATH_THEMES' => JPATH_THEMES
|
||||
];
|
||||
|
||||
/**
|
||||
* get array of constant paths or just one constant path
|
||||
*
|
||||
* @param string|null $path The path to get
|
||||
*
|
||||
* @return array|string|null
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function get(?string $path = null)
|
||||
{
|
||||
if (is_null($path))
|
||||
{
|
||||
return $this->paths;
|
||||
}
|
||||
|
||||
return $this->paths[$path] ?? null;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,814 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Componentbuilder\Utilities;
|
||||
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use VDM\Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\GetHelper;
|
||||
|
||||
|
||||
/**
|
||||
* Filter Helper
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
abstract class FilterHelper
|
||||
{
|
||||
/**
|
||||
* get extensions grouped list xml
|
||||
*
|
||||
* @return string The XML string of Extentions
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public static function extensions(): string
|
||||
{
|
||||
// the extension types
|
||||
$extensions = array(
|
||||
'joomla_component' => 'COM_COMPONENTBUILDER_COMPONENT',
|
||||
'joomla_module' => 'COM_COMPONENTBUILDER_MODULE',
|
||||
'joomla_plugin' => 'COM_COMPONENTBUILDER_PLUGIN'
|
||||
);
|
||||
|
||||
// get the extension values
|
||||
foreach ($extensions as $extension => $label)
|
||||
{
|
||||
${$extension} = self::names($extension);
|
||||
}
|
||||
|
||||
$xml = new \DOMDocument();
|
||||
$xml->formatOutput = true;
|
||||
|
||||
$root = $xml->createElement('field');
|
||||
$root->setAttributeNode(new \DOMAttr('name', 'extension'));
|
||||
$root->setAttributeNode(new \DOMAttr('type', 'groupedlist'));
|
||||
$root->setAttributeNode(new \DOMAttr('onchange', 'this.form.submit();'));
|
||||
|
||||
$root
|
||||
->appendChild($xml->createElement('option', '- ' . Text::_('COM_COMPONENTBUILDER_SELECT_EXTENSION') . ' -'))
|
||||
->setAttributeNode(new \DOMAttr('value', ''));
|
||||
|
||||
foreach ($extensions as $extension => $label)
|
||||
{
|
||||
$extension_node = $xml->createElement('group');
|
||||
$extension_node->setAttributeNode(new \DOMAttr('label', $label));
|
||||
if (!ArrayHelper::check(${$extension}))
|
||||
{
|
||||
$extension_node
|
||||
->appendChild($xml->createElement('option', '- ' . Text::_('COM_COMPONENTBUILDER_NONE') . ' -'))
|
||||
->setAttributeNode(new \DOMAttr('disabled', 'true'));
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (${$extension} as $id => $element)
|
||||
{
|
||||
$extension_node
|
||||
->appendChild($xml->createElement('option', $element))
|
||||
->setAttributeNode(new \DOMAttr('value', $extension . '__' . $id));
|
||||
}
|
||||
}
|
||||
$root->appendChild($extension_node);
|
||||
}
|
||||
$xml->appendChild($root);
|
||||
|
||||
return $xml->saveXML();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get by type the ids and system names
|
||||
*
|
||||
* @param string $type The table name to get system names for
|
||||
* @param string|null $limiter The to limit by limiter table
|
||||
*
|
||||
* @return array|null The array of system name and IDs
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public static function names(string $type, ?string $limiter = null): ?array
|
||||
{
|
||||
$db = Factory::getDbo();
|
||||
$query = $db->getQuery(true);
|
||||
|
||||
$query
|
||||
->select($db->quoteName(array('id', 'system_name')))
|
||||
->from($db->quoteName('#__componentbuilder_' . $type))
|
||||
->where($db->quoteName('published') . ' >= 1')
|
||||
->order($db->quoteName('modified') . ' desc')
|
||||
->order($db->quoteName('created') . ' desc');
|
||||
|
||||
// check if we have a limiter for admin views
|
||||
if ($type === 'admin_view' && $limiter)
|
||||
{
|
||||
// first get all views
|
||||
$admin_view_ids = array();
|
||||
|
||||
// if this is a plugin or a module, then no views
|
||||
if (strpos($limiter, 'joomla_component') !== false)
|
||||
{
|
||||
$component = (int) str_replace('joomla_component__', '', $limiter);
|
||||
// get the views of this component
|
||||
if ($add_views = GetHelper::var('component_admin_views', (int) $component, 'joomla_component', 'addadmin_views'))
|
||||
{
|
||||
if (JsonHelper::check($add_views))
|
||||
{
|
||||
$add_views = json_decode($add_views, true);
|
||||
if (ArrayHelper::check($add_views))
|
||||
{
|
||||
foreach($add_views as $add_view)
|
||||
{
|
||||
if (isset($add_view['adminview']))
|
||||
{
|
||||
$admin_view_ids[(int) $add_view['adminview']] = (int) $add_view['adminview'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// now check if we still have admin views
|
||||
if (ArrayHelper::check($admin_view_ids))
|
||||
{
|
||||
$query->where($db->quoteName('id') . ' IN (' . implode(',', $admin_view_ids) . ')');
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
|
||||
if ($db->getNumRows())
|
||||
{
|
||||
return $db->loadAssocList('id', 'system_name');
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* get any area linked IDs
|
||||
*
|
||||
* @param int $id The target ID
|
||||
* @param string $method The target method
|
||||
*
|
||||
* @return array|null The result ids
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public static function linked(int $id, string $method): ?array
|
||||
{
|
||||
// check if method exist
|
||||
if (method_exists(__CLASS__, $method))
|
||||
{
|
||||
return self::{$method}($id);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the substrings of the namespace until the last "\" or "."
|
||||
*
|
||||
* @return array|null The result substrings
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public static function namespaces(): ?array
|
||||
{
|
||||
$db = Factory::getDbo();
|
||||
$query = $db->getQuery(true);
|
||||
$query
|
||||
->select(
|
||||
'DISTINCT REPLACE(SUBSTRING('
|
||||
. $db->quoteName('namespace')
|
||||
. ', 1, LENGTH('
|
||||
. $db->quoteName('namespace')
|
||||
. ') - LEAST('
|
||||
. 'IF(LOCATE('
|
||||
. $db->quote('\\')
|
||||
. ', ' . $db->quoteName('namespace')
|
||||
. ') > 0, LOCATE('
|
||||
. $db->quote('\\')
|
||||
. ', REVERSE('
|
||||
. $db->quoteName('namespace')
|
||||
. ')), 0), '
|
||||
. 'IF(LOCATE('
|
||||
. $db->quote('.')
|
||||
. ', ' . $db->quoteName('namespace')
|
||||
. ') > 0, LOCATE('
|
||||
. $db->quote('.')
|
||||
. ', REVERSE('
|
||||
. $db->quoteName('namespace')
|
||||
. ')), 0))), ".", "\\\") AS trimmed_namespace'
|
||||
)
|
||||
->from($db->quoteName('#__componentbuilder_power'))
|
||||
->where($db->quoteName('published') . ' = 1')
|
||||
->order('LENGTH(trimmed_namespace) ASC, trimmed_namespace ASC');
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
|
||||
if ($db->getNumRows())
|
||||
{
|
||||
return $db->loadAssocList('trimmed_namespace', 'trimmed_namespace');
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* get get IDs of powers matching namespaces
|
||||
*
|
||||
* @param string $namespace The target namespace
|
||||
*
|
||||
* @return array|null The result ids
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public static function namegroup(string $namespace): ?array
|
||||
{
|
||||
$db = Factory::getDbo();
|
||||
$query = $db->getQuery(true);
|
||||
$query
|
||||
->select($db->quoteName(array('id')))
|
||||
->from($db->quoteName('#__componentbuilder_power'))
|
||||
->where($db->quoteName('published') . ' = 1');
|
||||
|
||||
// we get only those that match the owner and repo (smaller set)
|
||||
$paths = explode('\\', $namespace);
|
||||
foreach ($paths as $path)
|
||||
{
|
||||
$query->where($db->quoteName('namespace') . ' REGEXP ' . $db->quote($path));
|
||||
}
|
||||
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
|
||||
if ($db->getNumRows())
|
||||
{
|
||||
return $db->loadColumn();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* get translation extension ids
|
||||
*
|
||||
* @param int $extension The target ID
|
||||
* @param string $type The target method
|
||||
*
|
||||
* @return array|null The result ids
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public static function translation(int $extension, string $type): ?array
|
||||
{
|
||||
// only allow these columns (extension types)
|
||||
$columns = array(
|
||||
'joomla_component' => 'components',
|
||||
'joomla_module' => 'modules',
|
||||
'joomla_plugin' => 'plugins'
|
||||
);
|
||||
|
||||
// check if the column name is correct
|
||||
if (isset($columns[$type]))
|
||||
{
|
||||
$column = $columns[$type];
|
||||
$db = Factory::getDbo();
|
||||
$query = $db->getQuery(true);
|
||||
$query
|
||||
->select($db->quoteName(array('id', $column)))
|
||||
->from($db->quoteName('#__componentbuilder_language_translation'))
|
||||
->where($db->quoteName($column) . ' != ' . $db->quote(''));
|
||||
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
|
||||
if ($db->getNumRows())
|
||||
{
|
||||
$results = $db->loadAssocList();
|
||||
$matches = [];
|
||||
foreach ($results as $k => $v)
|
||||
{
|
||||
$value = json_decode($v[$column], true);
|
||||
if (in_array($extension, $value))
|
||||
{
|
||||
$matches[$v['id']] = $v['id'];
|
||||
}
|
||||
}
|
||||
|
||||
// Checks that we found matches
|
||||
if (ArrayHelper::check($matches))
|
||||
{
|
||||
return array_values($matches);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* get translation ids
|
||||
*
|
||||
* @param int $id The target ID
|
||||
*
|
||||
* @return array|null The result ids
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public static function translations($language, $translated = true): ?array
|
||||
{
|
||||
$db = Factory::getDbo();
|
||||
$query = $db->getQuery(true);
|
||||
|
||||
$query
|
||||
->select($db->quoteName('id'))
|
||||
->from($db->quoteName('#__componentbuilder_language_translation'));
|
||||
|
||||
// Build the where condition
|
||||
if ($translated === true) // Translated
|
||||
{
|
||||
if ($language === 'all')
|
||||
{
|
||||
if (($languages = self::languages()) !== null)
|
||||
{
|
||||
$wheres = [];
|
||||
foreach ($languages as $k => $v)
|
||||
{
|
||||
$wheres[] = $db->quoteName('translation') . ' LIKE ' . $db->quote('%' . $k . '%');
|
||||
}
|
||||
$query->where($wheres);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$query->where($db->quoteName('translation') . ' LIKE ' . $db->quote('%' . $language . '%'));
|
||||
}
|
||||
}
|
||||
else // Not translated
|
||||
{
|
||||
if ($language === 'none')
|
||||
{
|
||||
$query->where(
|
||||
array(
|
||||
$db->quoteName('translation') . ' = ' . $db->quote(''),
|
||||
$db->quoteName('translation') . ' = ' . $db->quote('[]'),
|
||||
$db->quoteName('translation') . ' = ' . $db->quote('{}')
|
||||
), 'OR'
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$query->where($db->quoteName('translation') . ' NOT LIKE ' . $db->quote('%' . $language . '%'));
|
||||
}
|
||||
}
|
||||
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
|
||||
if ($db->getNumRows())
|
||||
{
|
||||
return array_unique($db->loadColumn());
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* get available languages
|
||||
*
|
||||
* @return array|null The result ids
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public static function languages(): ?array
|
||||
{
|
||||
$db = Factory::getDbo();
|
||||
$query = $db->getQuery(true);
|
||||
$query
|
||||
->select($db->quoteName(array('langtag', 'name')))
|
||||
->from($db->quoteName('#__componentbuilder_language'))
|
||||
->where($db->quoteName('published') . ' = 1')
|
||||
->order($db->quoteName('name') . ' desc');
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
|
||||
if ($db->getNumRows())
|
||||
{
|
||||
return $db->loadAssocList('langtag', 'name');
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* get get IDs of powers link to this path
|
||||
*
|
||||
* @param string $path The target PATH
|
||||
*
|
||||
* @return array|null The result ids
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public static function paths(string $path): ?array
|
||||
{
|
||||
// get all this power ids
|
||||
$ids = [];
|
||||
|
||||
$db = Factory::getDbo();
|
||||
$query = $db->getQuery(true);
|
||||
$query
|
||||
->select($db->quoteName(array('id', 'approved_paths')))
|
||||
->from($db->quoteName('#__componentbuilder_power'))
|
||||
->where($db->quoteName('published') . ' = 1');
|
||||
|
||||
// we get only those that match the owner and repo (smaller set)
|
||||
if (($pos = strpos($path, '/')) !== false)
|
||||
{
|
||||
$owner = substr($path, 0, $pos);
|
||||
$repo = substr($path, $pos + 1);
|
||||
$query
|
||||
->where($db->quoteName('approved_paths') . ' REGEXP ' . $db->quote($owner))
|
||||
->where($db->quoteName('approved_paths') . ' REGEXP ' . $db->quote($repo));
|
||||
}
|
||||
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
|
||||
if ($db->getNumRows())
|
||||
{
|
||||
$result = $db->loadAssocList('id', 'approved_paths');
|
||||
foreach ($result as $id => $paths)
|
||||
{
|
||||
if (JsonHelper::check($paths))
|
||||
{
|
||||
$paths = json_decode($paths, true);
|
||||
if (ArrayHelper::check($paths) && in_array($path, $paths, true))
|
||||
{
|
||||
$ids[$id] = $id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ArrayHelper::check($ids))
|
||||
{
|
||||
return $ids;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a component admin views IDs
|
||||
*
|
||||
* @param int $id The target ID
|
||||
*
|
||||
* @return array|null The result ids
|
||||
* @since 3.2.0
|
||||
*/
|
||||
private static function joomla_component_admin_views(int $id): ?array
|
||||
{
|
||||
// get all this components views
|
||||
$admin_view_ids = [];
|
||||
|
||||
// get the views of this component
|
||||
if ($add_views = GetHelper::var('component_admin_views', (int) $id, 'joomla_component', 'addadmin_views'))
|
||||
{
|
||||
if (JsonHelper::check($add_views))
|
||||
{
|
||||
$add_views = json_decode($add_views, true);
|
||||
if (ArrayHelper::check($add_views))
|
||||
{
|
||||
foreach($add_views as $add_view)
|
||||
{
|
||||
if (isset($add_view['adminview']))
|
||||
{
|
||||
$admin_view_ids[(int) $add_view['adminview']] = (int) $add_view['adminview'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check that we have fields
|
||||
if (ArrayHelper::check($admin_view_ids))
|
||||
{
|
||||
return array_values($admin_view_ids);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* get a component custom admin views IDs
|
||||
*
|
||||
* @param int $id The target ID
|
||||
*
|
||||
* @return array|null The result ids
|
||||
* @since 3.2.0
|
||||
*/
|
||||
private static function joomla_component_custom_admin_views($id): ?array
|
||||
{
|
||||
// get all this components views
|
||||
$admin_view_ids = [];
|
||||
|
||||
// get the views of this component
|
||||
if ($add_views = GetHelper::var('component_custom_admin_views', (int) $id, 'joomla_component', 'addcustom_admin_views'))
|
||||
{
|
||||
if (JsonHelper::check($add_views))
|
||||
{
|
||||
$add_views = json_decode($add_views, true);
|
||||
if (ArrayHelper::check($add_views))
|
||||
{
|
||||
foreach($add_views as $add_view)
|
||||
{
|
||||
if (isset($add_view['customadminview']))
|
||||
{
|
||||
$admin_view_ids[(int) $add_view['customadminview']] = (int) $add_view['customadminview'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check that we have fields
|
||||
if (ArrayHelper::check($admin_view_ids))
|
||||
{
|
||||
return array_values($admin_view_ids);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* get a component site views IDs
|
||||
*
|
||||
* @param int $id The target ID
|
||||
*
|
||||
* @return array|null The result ids
|
||||
* @since 3.2.0
|
||||
*/
|
||||
private static function joomla_component_site_views($id): ?array
|
||||
{
|
||||
// get all this components views
|
||||
$admin_view_ids = [];
|
||||
|
||||
// get the views of this component
|
||||
if ($add_views = GetHelper::var('component_site_views', (int) $id, 'joomla_component', 'addsite_views'))
|
||||
{
|
||||
if (JsonHelper::check($add_views))
|
||||
{
|
||||
$add_views = json_decode($add_views, true);
|
||||
if (ArrayHelper::check($add_views))
|
||||
{
|
||||
foreach($add_views as $add_view)
|
||||
{
|
||||
if (isset($add_view['siteview']))
|
||||
{
|
||||
$admin_view_ids[(int) $add_view['siteview']] = (int) $add_view['siteview'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check that we have fields
|
||||
if (ArrayHelper::check($admin_view_ids))
|
||||
{
|
||||
return array_values($admin_view_ids);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* get a component fields IDs
|
||||
*
|
||||
* @param int $id The target ID
|
||||
*
|
||||
* @return array|null The result ids
|
||||
* @since 3.2.0
|
||||
*/
|
||||
private static function joomla_component($id): ?array
|
||||
{
|
||||
// we start the field array
|
||||
$field_ids = [];
|
||||
|
||||
// first get all views
|
||||
$admin_view_ids = [];
|
||||
|
||||
// get the views of this component
|
||||
if ($add_views = GetHelper::var('component_admin_views', (int) $id, 'joomla_component', 'addadmin_views'))
|
||||
{
|
||||
if (JsonHelper::check($add_views))
|
||||
{
|
||||
$add_views = json_decode($add_views, true);
|
||||
if (ArrayHelper::check($add_views))
|
||||
{
|
||||
foreach($add_views as $add_view)
|
||||
{
|
||||
if (isset($add_view['adminview']))
|
||||
{
|
||||
$admin_view_ids[(int) $add_view['adminview']] = (int) $add_view['adminview'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check that we have views
|
||||
if (ArrayHelper::check($admin_view_ids))
|
||||
{
|
||||
foreach ($admin_view_ids as $admin_view)
|
||||
{
|
||||
// get all the fields linked to the admin view
|
||||
if ($add_fields = GetHelper::var('admin_fields', (int) $admin_view, 'admin_view', 'addfields'))
|
||||
{
|
||||
if (JsonHelper::check($add_fields))
|
||||
{
|
||||
$add_fields = json_decode($add_fields, true);
|
||||
if (ArrayHelper::check($add_fields))
|
||||
{
|
||||
foreach($add_fields as $add_field)
|
||||
{
|
||||
if (isset($add_field['field']))
|
||||
{
|
||||
$field_ids[(int) $add_field['field']] = (int) $add_field['field'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// get config values
|
||||
if ($add_config = GetHelper::var('component_config', (int) $id, 'joomla_component', 'addconfig'))
|
||||
{
|
||||
if (JsonHelper::check($add_config))
|
||||
{
|
||||
$add_config = json_decode($add_config, true);
|
||||
if (ArrayHelper::check($add_config))
|
||||
{
|
||||
foreach($add_config as $add_conf)
|
||||
{
|
||||
if (isset($add_conf['field']))
|
||||
{
|
||||
$field_ids[(int) $add_conf['field']] = (int) $add_conf['field'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check that we have fields
|
||||
if (ArrayHelper::check($field_ids))
|
||||
{
|
||||
return array_values($field_ids);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* get a module fields IDs
|
||||
*
|
||||
* @param int $id The target ID
|
||||
*
|
||||
* @return array|null The result ids
|
||||
* @since 3.2.0
|
||||
*/
|
||||
private static function joomla_module($id): ?array
|
||||
{
|
||||
// we start the field array
|
||||
$field_ids = [];
|
||||
|
||||
if ($fields = GetHelper::var('joomla_module', (int) $id, 'id', 'fields'))
|
||||
{
|
||||
if (JsonHelper::check($fields))
|
||||
{
|
||||
$fields = json_decode($fields, true);
|
||||
if (ArrayHelper::check($fields))
|
||||
{
|
||||
foreach($fields as $form)
|
||||
{
|
||||
if (isset($form['fields']) && ArrayHelper::check($form['fields']))
|
||||
{
|
||||
foreach ($form['fields'] as $field)
|
||||
{
|
||||
if (isset($field['field']))
|
||||
{
|
||||
$field_ids[(int) $field['field']] = (int) $field['field'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check that we have fields
|
||||
if (ArrayHelper::check($field_ids))
|
||||
{
|
||||
return array_values($field_ids);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* get a plugin fields IDs
|
||||
*
|
||||
* @param int $id The target ID
|
||||
*
|
||||
* @return array|null The result ids
|
||||
* @since 3.2.0
|
||||
*/
|
||||
private static function joomla_plugin($id): ?array
|
||||
{
|
||||
// we start the field array
|
||||
$field_ids = [];
|
||||
|
||||
if ($fields = GetHelper::var('joomla_plugin', (int) $id, 'id', 'fields'))
|
||||
{
|
||||
if (JsonHelper::check($fields))
|
||||
{
|
||||
$fields = json_decode($fields, true);
|
||||
if (ArrayHelper::check($fields))
|
||||
{
|
||||
foreach($fields as $form)
|
||||
{
|
||||
if (isset($form['fields']) && ArrayHelper::check($form['fields']))
|
||||
{
|
||||
foreach ($form['fields'] as $field)
|
||||
{
|
||||
if (isset($field['field']))
|
||||
{
|
||||
$field_ids[(int) $field['field']] = (int) $field['field'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check that we have fields
|
||||
if (ArrayHelper::check($field_ids))
|
||||
{
|
||||
return array_values($field_ids);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* get an admin view fields IDs
|
||||
*
|
||||
* @param int $id The target ID
|
||||
*
|
||||
* @return array|null The result ids
|
||||
* @since 3.2.0
|
||||
*/
|
||||
private static function admin_view($id): ?array
|
||||
{
|
||||
// we start the field array
|
||||
$field_ids = [];
|
||||
|
||||
// get all the fields linked to the admin view
|
||||
if ($add_fields = GetHelper::var('admin_fields', (int) $id, 'admin_view', 'addfields'))
|
||||
{
|
||||
if (JsonHelper::check($add_fields))
|
||||
{
|
||||
$add_fields = json_decode($add_fields, true);
|
||||
if (ArrayHelper::check($add_fields))
|
||||
{
|
||||
foreach($add_fields as $add_field)
|
||||
{
|
||||
if (isset($add_field['field']))
|
||||
{
|
||||
$field_ids[(int) $add_field['field']] = (int) $add_field['field'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check that we have fields
|
||||
if (ArrayHelper::check($field_ids))
|
||||
{
|
||||
return array_values($field_ids);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1 @@
|
||||
<html><body bgcolor="#FFFFFF"></body></html>
|
Reference in New Issue
Block a user