Fix the update server #978 issue. Fixed the change log to load all entries, not just the last one. Fixed #983 so that database updates are created when adding a new adminview. Moved a few builder arrays to the Compiler Registry. Adds super powers to JCB. Adds Gitea API library. Improves Power filters. Fix #991 to add the Utilities service class. Adds Superpower Key (SPK) replacement feature. Adds Superpower search (GREP) feature. Adds Power Insert/Update Classe. Fix #995 that all update sites are using the correct URL.

This commit is contained in:
2023-05-02 02:10:55 +02:00
parent d6c73987f5
commit df16b2e3ad
246 changed files with 24890 additions and 4141 deletions

View File

@ -14,6 +14,8 @@ defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\Utilities\ArrayHelper;
use VDM\Joomla\Componentbuilder\Utilities\FilterHelper as JCBFilterHelper;
use VDM\Joomla\Componentbuilder\Utilities\FormHelper as JCBFormHelper;
/**
* Admin_views List Model
@ -70,7 +72,7 @@ class ComponentbuilderModelAdmin_views extends ListModel
'' => '- ' . JText::_('COM_COMPONENTBUILDER_NO_COMPONENTS_FOUND') . ' -'
);
// check if we have joomla components
if (($joomla_components = ComponentbuilderHelper::getByTypeTheIdsSystemNames('joomla_component')) !== false)
if (($joomla_components = JCBFilterHelper::names('joomla_component')) !== null)
{
$options = array(
'' => '- ' . JText::_('COM_COMPONENTBUILDER_SELECT_COMPONENT') . ' -'
@ -79,7 +81,7 @@ class ComponentbuilderModelAdmin_views extends ListModel
$options = $options + $joomla_components;
}
$form->setField(ComponentbuilderHelper::getFieldXML($attributes, $options),'filter');
$form->setField(JCBFormHelper::xml($attributes, $options),'filter');
$form->setValue(
'joomla_component',
'filter',
@ -88,7 +90,8 @@ class ComponentbuilderModelAdmin_views extends ListModel
array_push($this->filter_fields, 'joomla_component');
return $form;
}
}
/**
* Method to auto-populate the model state.
@ -354,7 +357,7 @@ class ComponentbuilderModelAdmin_views extends ListModel
$filter_joomla_component = $this->state->get("filter.joomla_component");
if ($filter_joomla_component !== null && !empty($filter_joomla_component))
{
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($filter_joomla_component, 'joomla_component_admin_views')) !== false)
if (($ids = JCBFilterHelper::linked((int) $filter_joomla_component, 'joomla_component_admin_views')) !== null)
{
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
}
@ -589,7 +592,7 @@ class ComponentbuilderModelAdmin_views extends ListModel
$filter_joomla_component = $this->state->get("filter.joomla_component");
if ($filter_joomla_component !== null && !empty($filter_joomla_component))
{
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($filter_joomla_component, 'joomla_component_admin_views')) !== false)
if (($ids = JCBFilterHelper::linked((int) $filter_joomla_component, 'joomla_component_admin_views')) !== null)
{
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
}

View File

@ -14,7 +14,7 @@ defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\Utilities\ArrayHelper;
use VDM\Gitea\Gitea;
use VDM\Joomla\Gitea\Factory as GiteaFactory;
use VDM\Joomla\Componentbuilder\Package\Factory as PackageFactory;
use VDM\Joomla\Utilities\FileHelper;
use VDM\Joomla\Utilities\JsonHelper;
@ -175,11 +175,18 @@ class ComponentbuilderModelAjax extends ListModel
// check if url exist
if ($info = FileHelper::getContent($url, false))
{
if ((($info_ = PackageFactory::_('Crypt')->decrypt($info, 'local')) !== null && JsonHelper::check($info_)) ||
(($info_ = PackageFactory::_('Crypt')->decrypt($info, 'local.legacy')) !== null && JsonHelper::check($info_)) ||
(($info_ = PackageFactory::_('Crypt')->decrypt($info, 'local.fof')) !== null && JsonHelper::check($info_)))
$_info = PackageFactory::_('Crypt')->decrypt($info, 'local.legacy');
// check if we had success
if (!JsonHelper::check($_info))
{
$info = json_decode($info_, true);
$_info = PackageFactory::_('Crypt')->decrypt($info, 'local.fof');
}
// check if we have json
if (JsonHelper::check($_info))
{
$info = json_decode($_info, true);
return [
'owner' => PackageFactory::_('Display.Details')->owner($info, true),
@ -268,25 +275,16 @@ class ComponentbuilderModelAjax extends ListModel
public function getWiki($name = 'Home')
{
// get the token if set
$token = JComponentHelper::getParams('com_componentbuilder')->get('gitea_token', false);
// setup a registry
$options = new Registry;
// only add if token is set
if ($token)
{
$options->set('access.token', $token);
}
try
{
// get gitea object
$gitea = new Gitea($options);
// load the API details
GiteaFactory::_('Gitea.Repository.Wiki')->load_('https://git.vdm.dev', '');
// get the gitea wiki page TODO: we hard coded the page name
$page = $gitea->repo->wiki->getHtml('joomla', 'Component-Builder', 'Home');
// get the gitea wiki page im markdown
$wiki = GiteaFactory::_('Gitea.Repository.Wiki')->get('joomla', 'Component-Builder', 'Home');
// now render the page in HTML
$page = GiteaFactory::_('Gitea.Miscellaneous.Markdown')->render($wiki->content, true);
}
catch (DomainException $e)
{
@ -323,20 +321,18 @@ class ComponentbuilderModelAjax extends ListModel
public function getVersion($version = null)
{
// get the token if set
$token = JComponentHelper::getParams('com_componentbuilder')->get('gitea_token', false);
$token = $this->app_params->get('gitea_token', false);
// only add if token is set
if ($token)
{
// setup a registry
$options = new Registry;
$options->set('access.token', $token);
// get the gitea http
try
{
// get gitea object
$gitea = new Gitea($options);
// get a list of all the repos tags
$tags = $gitea->repo->getListTags('joomla', 'Component-Builder');
// load the API details
GiteaFactory::_('Gitea.Repository.Tags')->load_('https://git.vdm.dev', $token);
// get the repository tags
$tags = GiteaFactory::_('Gitea.Repository.Tags')->list('joomla', 'Component-Builder');
}
catch (DomainException $e)
{

View File

@ -14,7 +14,6 @@ defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\Utilities\ArrayHelper;
use VDM\Gitea\Gitea;
use Joomla\Registry\Registry;
/**

View File

@ -14,6 +14,8 @@ defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\Utilities\ArrayHelper;
use VDM\Joomla\Componentbuilder\Utilities\FormHelper as JCBFormHelper;
use VDM\Joomla\Componentbuilder\Utilities\FilterHelper as JCBFilterHelper;
/**
* Custom_admin_views List Model
@ -68,7 +70,7 @@ class ComponentbuilderModelCustom_admin_views extends ListModel
'' => '- ' . JText::_('COM_COMPONENTBUILDER_NO_COMPONENTS_FOUND') . ' -'
);
// check if we have joomla components
if (($joomla_components = ComponentbuilderHelper::getByTypeTheIdsSystemNames('joomla_component')) !== false)
if (($joomla_components = JCBFilterHelper::names('joomla_component')) !== null)
{
$options = array(
'' => '- ' . JText::_('COM_COMPONENTBUILDER_SELECT_COMPONENT') . ' -'
@ -77,7 +79,7 @@ class ComponentbuilderModelCustom_admin_views extends ListModel
$options = $options + $joomla_components;
}
$form->setField(ComponentbuilderHelper::getFieldXML($attributes, $options),'filter');
$form->setField(JCBFormHelper::xml($attributes, $options),'filter');
$form->setValue(
'joomla_component',
'filter',
@ -293,7 +295,7 @@ class ComponentbuilderModelCustom_admin_views extends ListModel
$filter_joomla_component = $this->state->get("filter.joomla_component");
if ($filter_joomla_component !== null && !empty($filter_joomla_component))
{
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($filter_joomla_component, 'joomla_component_custom_admin_views')) !== false)
if (($ids = JCBFilterHelper::linked((int) $filter_joomla_component, 'joomla_component_custom_admin_views')) !== null)
{
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
}
@ -498,7 +500,7 @@ class ComponentbuilderModelCustom_admin_views extends ListModel
$filter_joomla_component = $this->state->get("filter.joomla_component");
if ($filter_joomla_component !== null && !empty($filter_joomla_component))
{
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($filter_joomla_component, 'joomla_component_custom_admin_views')) !== false)
if (($ids = JCBFilterHelper::linked((int) $filter_joomla_component, 'joomla_component_custom_admin_views')) !== null)
{
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
}

View File

@ -14,6 +14,8 @@ defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\Utilities\ArrayHelper;
use VDM\Joomla\Componentbuilder\Utilities\FormHelper as JCBFormHelper;
use VDM\Joomla\Componentbuilder\Utilities\FilterHelper as JCBFilterHelper;
/**
* Fields List Model
@ -63,7 +65,7 @@ class ComponentbuilderModelFields extends ListModel
// Create the "extension" filter
$form->setField(new SimpleXMLElement(
ComponentbuilderHelper::getExtensionGroupedListXml()
JCBFilterHelper::extensions()
),'filter');
$form->setValue(
'extension',
@ -82,7 +84,7 @@ class ComponentbuilderModelFields extends ListModel
'' => '- ' . JText::_('COM_COMPONENTBUILDER_NO_ADMIN_VIEWS_FOUND') . ' -'
);
// check if we have admin views (and limit to an extension if it is set)
if (($admin_views = ComponentbuilderHelper::getByTypeTheIdsSystemNames('admin_view', $this->state->get("filter.extension"))) !== false)
if (($admin_views = JCBFilterHelper::names('admin_view', $this->state->get("filter.extension"))) !== null)
{
$options = array(
'' => '- ' . JText::_('COM_COMPONENTBUILDER_SELECT_ADMIN_VIEW') . ' -'
@ -91,7 +93,7 @@ class ComponentbuilderModelFields extends ListModel
$options = $options + $admin_views;
}
$form->setField(ComponentbuilderHelper::getFieldXML($attributes, $options),'filter');
$form->setField(JCBFormHelper::xml($attributes, $options),'filter');
$form->setValue(
'admin_view',
'filter',
@ -100,7 +102,8 @@ class ComponentbuilderModelFields extends ListModel
array_push($this->filter_fields, 'admin_view');
return $form;
}
}
/**
* Method to auto-populate the model state.
@ -379,7 +382,7 @@ class ComponentbuilderModelFields extends ListModel
{
// column name, and id
$type_extension = explode('__', $filter_extension);
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($type_extension[1], $type_extension[0])) !== false)
if (($ids = JCBFilterHelper::linked((int) $type_extension[1], (string) $type_extension[0])) !== null)
{
$field_ids = $ids;
}
@ -395,7 +398,7 @@ class ComponentbuilderModelFields extends ListModel
$filter_admin_view = $this->state->get("filter.admin_view");
if ($get_ids && $filter_admin_view !== null && !empty($filter_admin_view))
{
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($filter_admin_view, 'admin_view')) !== false)
if (($ids = JCBFilterHelper::linked((int) $filter_admin_view, 'admin_view')) !== null)
{
// view will return less fields, so we ignore the component
$field_ids = $ids;
@ -644,7 +647,7 @@ class ComponentbuilderModelFields extends ListModel
{
// column name, and id
$type_extension = explode('__', $filter_extension);
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($type_extension[1], $type_extension[0])) !== false)
if (($ids = JCBFilterHelper::linked((int) $type_extension[1], (string) $type_extension[0])) !== null)
{
$field_ids = $ids;
}
@ -660,7 +663,7 @@ class ComponentbuilderModelFields extends ListModel
$filter_admin_view = $this->state->get("filter.admin_view");
if ($get_ids && $filter_admin_view !== null && !empty($filter_admin_view))
{
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($filter_admin_view, 'admin_view')) !== false)
if (($ids = JCBFilterHelper::linked((int) $filter_admin_view, 'admin_view')) !== null)
{
// view will return less fields, so we ignore the component
$field_ids = $ids;

View File

@ -17,16 +17,16 @@ jimport('joomla.form.helper');
JFormHelper::loadFieldClass('list');
/**
* Powersfilterpowerversion Form Field class for the Componentbuilder component
* Powersfilterapproved Form Field class for the Componentbuilder component
*/
class JFormFieldPowersfilterpowerversion extends JFormFieldList
class JFormFieldPowersfilterapproved extends JFormFieldList
{
/**
* The powersfilterpowerversion field type.
* The powersfilterapproved field type.
*
* @var string
*/
public $type = 'powersfilterpowerversion';
public $type = 'powersfilterapproved';
/**
* Method to get a list of options for a list input.
@ -42,24 +42,28 @@ class JFormFieldPowersfilterpowerversion extends JFormFieldList
$query = $db->getQuery(true);
// Select the text.
$query->select($db->quoteName('power_version'));
$query->select($db->quoteName('approved'));
$query->from($db->quoteName('#__componentbuilder_power'));
$query->order($db->quoteName('power_version') . ' ASC');
$query->order($db->quoteName('approved') . ' ASC');
// Reset the query using our newly populated query object.
$db->setQuery($query);
$results = $db->loadColumn();
$_filter = array();
$_filter[] = JHtml::_('select.option', '', '- ' . JText::_('COM_COMPONENTBUILDER_FILTER_SELECT_VERSION') . ' -');
$_filter[] = JHtml::_('select.option', '', '- ' . JText::_('COM_COMPONENTBUILDER_FILTER_SELECT_SUPER_POWER') . ' -');
if ($results)
{
// get powersmodel
$model = ComponentbuilderHelper::getModel('powers');
$results = array_unique($results);
foreach ($results as $power_version)
foreach ($results as $approved)
{
// Now add the power_version and its text to the options array
$_filter[] = JHtml::_('select.option', $power_version, $power_version);
// Translate the approved selection
$text = $model->selectionTranslation($approved,'approved');
// Now add the approved and its text to the options array
$_filter[] = JHtml::_('select.option', $approved, JText::_($text));
}
}
return $_filter;

View File

@ -0,0 +1,100 @@
<?php
/**
* @package Joomla.Component.Builder
*
* @created 30th April, 2015
* @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
*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// Import the checkboxes field type classes needed
JFormHelper::loadFieldClass('checkboxes');
use VDM\Joomla\Utilities\Component\Helper;
/**
* Superpowerpaths Form Field class for the Componentbuilder component
*/
class JFormFieldSuperpowerpaths extends JFormFieldCheckboxes
{
/**
* The superpowerpaths field type.
*
* @var string
*/
public $type = 'superpowerpaths';
// A DynamicCheckboxes@ Field
/**
* Method to get the data to be passed to the layout for rendering.
*
* @return array
*
* @since 3.5
*/
protected function getLayoutData()
{
$data = parent::getLayoutData();
// True if the field has 'value' set. In other words, it has been stored, don't use the default values.
$hasValue = (isset($this->value) && !empty($this->value));
// If a value has been stored, use it. Otherwise, use the defaults.
$checkedOptions = $hasValue ? $this->value : $this->checkedOptions;
// get the form options
$options = [];
// get the component params
$params = Helper::getParams();
$activate = $params->get('super_powers_repositories', 0);
// set the default
$default = $params->get('super_powers_core', 'joomla/super-powers');
// must have one / in the path
if (strpos($default, '/') !== false)
{
$tmp = new stdClass;
$tmp->text = $tmp->value = trim($default);
$tmp->checked = false;
$options[$tmp->value] = $tmp;
}
if ($activate == 1)
{
$subform = $params->get($this->fieldname);
// add the paths found in global settings
if (is_object($subform))
{
foreach ($subform as $value)
{
if (isset($value->owner) && strlen($value->owner) > 1 &&
isset($value->repo) && strlen($value->repo) > 1)
{
$tmp = new stdClass;
$tmp->text = $tmp->value = trim($value->owner) . '/' . trim($value->repo);
$tmp->checked = false;
$options[$tmp->value] = $tmp;
}
}
}
}
$extraData = array(
'checkedOptions' => is_array($checkedOptions) ? $checkedOptions : explode(',', (string) $checkedOptions),
'hasValue' => $hasValue,
'options' => array_values($options)
);
return array_merge($data, $extraData);
}
}

View File

@ -271,7 +271,7 @@ class ComponentbuilderModelFieldtype extends AdminModel
{
// column name, and id
$type_extension = explode('__', $filter_extension);
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($type_extension[1], $type_extension[0])) !== false)
if (($ids = JCBFilterHelper::linked((int) $type_extension[1], (string) $type_extension[0])) !== null)
{
$field_ids = $ids;
}
@ -287,7 +287,7 @@ class ComponentbuilderModelFieldtype extends AdminModel
$filter_admin_view = $this->state->get("filter.admin_view");
if ($get_ids && $filter_admin_view !== null && !empty($filter_admin_view))
{
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($filter_admin_view, 'admin_view')) !== false)
if (($ids = JCBFilterHelper::linked((int) $filter_admin_view, 'admin_view')) !== null)
{
// view will return less fields, so we ignore the component
$field_ids = $ids;

View File

@ -86,8 +86,8 @@
<option value="a.published DESC">JSTATUS_DESC</option>
<option value="a.system_name ASC">COM_COMPONENTBUILDER_FILTER_SYSTEM_NAME_ASCENDING</option>
<option value="a.system_name DESC">COM_COMPONENTBUILDER_FILTER_SYSTEM_NAME_DESCENDING</option>
<option value="a.name_single ASC">COM_COMPONENTBUILDER_FILTER_NAME_SINGLE_RECORD_NAMING_CONVENTIONS_ASCENDING</option>
<option value="a.name_single DESC">COM_COMPONENTBUILDER_FILTER_NAME_SINGLE_RECORD_NAMING_CONVENTIONS_DESCENDING</option>
<option value="a.name_single ASC">COM_COMPONENTBUILDER_FILTER_NAME_SINGLE_RECORDNAMING_CONVENTIONS_ASCENDING</option>
<option value="a.name_single DESC">COM_COMPONENTBUILDER_FILTER_NAME_SINGLE_RECORDNAMING_CONVENTIONS_DESCENDING</option>
<option value="a.short_description ASC">COM_COMPONENTBUILDER_FILTER_SHORT_DESCRIPTION_ASCENDING</option>
<option value="a.short_description DESC">COM_COMPONENTBUILDER_FILTER_SHORT_DESCRIPTION_DESCENDING</option>
<option value="a.id ASC">JGRID_HEADING_ID_ASC</option>

View File

@ -66,8 +66,8 @@
<option value="a.published DESC">JSTATUS_DESC</option>
<option value="a.system_name ASC">COM_COMPONENTBUILDER_FILTER_SYSTEM_NAME_ASCENDING</option>
<option value="a.system_name DESC">COM_COMPONENTBUILDER_FILTER_SYSTEM_NAME_DESCENDING</option>
<option value="a.name_code ASC">COM_COMPONENTBUILDER_FILTER_NAME_IN_CODE_NAMING_CONVENTIONS_ASCENDING</option>
<option value="a.name_code DESC">COM_COMPONENTBUILDER_FILTER_NAME_IN_CODE_NAMING_CONVENTIONS_DESCENDING</option>
<option value="a.name_code ASC">COM_COMPONENTBUILDER_FILTER_NAME_IN_CODENAMING_CONVENTIONS_ASCENDING</option>
<option value="a.name_code DESC">COM_COMPONENTBUILDER_FILTER_NAME_IN_CODENAMING_CONVENTIONS_DESCENDING</option>
<option value="a.short_description ASC">COM_COMPONENTBUILDER_FILTER_SHORT_DESCRIPTION_ASCENDING</option>
<option value="a.short_description DESC">COM_COMPONENTBUILDER_FILTER_SHORT_DESCRIPTION_DESCENDING</option>
<option value="a.companyname ASC">COM_COMPONENTBUILDER_FILTER_COMPANY_NAME_ASCENDING</option>

View File

@ -39,16 +39,9 @@
onchange="this.form.submit();"
/>
<field
type="powersfilterpowerversion"
name="power_version"
label="COM_COMPONENTBUILDER_POWER_POWER_VERSION_LABEL"
multiple="false"
onchange="this.form.submit();"
/>
<field
type="classpowers"
name="extends"
label="COM_COMPONENTBUILDER_POWER_EXTENDS_LABEL"
type="powersfilterapproved"
name="approved"
label="COM_COMPONENTBUILDER_POWER_APPROVED_LABEL"
multiple="false"
onchange="this.form.submit();"
/>

View File

@ -159,6 +159,38 @@
message="COM_COMPONENTBUILDER_POWER_POWER_VERSION_MESSAGE"
hint="COM_COMPONENTBUILDER_POWER_POWER_VERSION_HINT"
/>
<!-- Not_required Field. Type: Hidden. (joomla) -->
<field
type="hidden"
name="not_required"
default="一_一"
/>
<!-- Method_selection Field. Type: Subform. (joomla) -->
<field
type="subform"
name="method_selection"
label="COM_COMPONENTBUILDER_POWER_METHOD_SELECTION_LABEL"
layout="joomla.form.field.subform.repeatable-table"
multiple="true"
buttons="add,remove,move"
description="COM_COMPONENTBUILDER_POWER_METHOD_SELECTION_DESCRIPTION"
icon="list"
max="150"
min="0">
<form hidden="true" name="list_method_selection_modal" repeat="true">
<!-- Method Field. Type: Pluginsclassmethods. (custom) -->
<field
type="pluginsclassmethods"
name="method"
label="COM_COMPONENTBUILDER_POWER_METHOD_LABEL"
class="list_class span12 method_selection_list"
multiple="false"
default="0"
onchange="getClassCode(this, 'method');"
button="false"
/>
</form>
</field>
<!-- Load_selection Field. Type: Subform. (joomla) -->
<field
type="subform"
@ -184,20 +216,8 @@
/>
</form>
</field>
<!-- Load_powers_note Field. Type: Note. A None Database Field. (joomla) -->
<field type="note" name="load_powers_note" label="COM_COMPONENTBUILDER_POWER_LOAD_POWERS_NOTE_LABEL" description="COM_COMPONENTBUILDER_POWER_LOAD_POWERS_NOTE_DESCRIPTION" heading="h4" class="alert alert-info load_powers_note" />
<!-- Description Field. Type: Textarea. (joomla) -->
<field
type="textarea"
name="description"
label="COM_COMPONENTBUILDER_POWER_DESCRIPTION_LABEL"
rows="11"
cols="10"
description="COM_COMPONENTBUILDER_POWER_DESCRIPTION_DESCRIPTION"
class="text_area span12"
filter="HTML"
hint="COM_COMPONENTBUILDER_POWER_DESCRIPTION_HINT"
/>
<!-- Note_linked_to_notice Field. Type: Note. A None Database Field. (joomla) -->
<field type="note" name="note_linked_to_notice" label="COM_COMPONENTBUILDER_POWER_NOTE_LINKED_TO_NOTICE_LABEL" description="COM_COMPONENTBUILDER_POWER_NOTE_LINKED_TO_NOTICE_DESCRIPTION" heading="h4" class="note_linked_to_notice" />
<!-- Licensing_template Field. Type: Textarea. (joomla) -->
<field
type="textarea"
@ -211,6 +231,20 @@
validate="code"
showon="add_licensing_template:2"
/>
<!-- Description Field. Type: Textarea. (joomla) -->
<field
type="textarea"
name="description"
label="COM_COMPONENTBUILDER_POWER_DESCRIPTION_LABEL"
rows="11"
cols="10"
description="COM_COMPONENTBUILDER_POWER_DESCRIPTION_DESCRIPTION"
class="text_area span12"
filter="HTML"
hint="COM_COMPONENTBUILDER_POWER_DESCRIPTION_HINT"
/>
<!-- Note_approved_paths Field. Type: Note. A None Database Field. (joomla) -->
<field type="note" name="note_approved_paths" label="COM_COMPONENTBUILDER_POWER_NOTE_APPROVED_PATHS_LABEL" description="COM_COMPONENTBUILDER_POWER_NOTE_APPROVED_PATHS_DESCRIPTION" heading="h4" class="alert alert-info note_approved_paths" showon="approved:1" />
<!-- Composer Field. Type: Subform. (joomla) -->
<field
type="subform"
@ -268,6 +302,33 @@
</field>
</form>
</field>
<!-- Extends Field. Type: Classpowers. (custom) -->
<field
type="classpowers"
name="extends"
label="COM_COMPONENTBUILDER_POWER_EXTENDS_LABEL"
description="COM_COMPONENTBUILDER_POWER_EXTENDS_DESCRIPTION"
class="list_class span12"
multiple="false"
default="0"
showon="type:class[OR]type:abstract class[OR]type:final class"
button="true"
/>
<!-- Approved Field. Type: Radio. (joomla) -->
<field
type="radio"
name="approved"
label="COM_COMPONENTBUILDER_POWER_APPROVED_LABEL"
description="COM_COMPONENTBUILDER_POWER_APPROVED_DESCRIPTION"
class="btn-group btn-group-yesno"
default="0"
required="true">
<!-- Option Set. -->
<option value="0">
COM_COMPONENTBUILDER_POWER_NOT_APPROVED</option>
<option value="1">
COM_COMPONENTBUILDER_POWER_APPROVED</option>
</field>
<!-- Property_selection Field. Type: Subform. (joomla) -->
<field
type="subform"
@ -308,6 +369,20 @@
<option value="0">
COM_COMPONENTBUILDER_POWER_NO</option>
</field>
<!-- Extends_custom Field. Type: Text. (joomla) -->
<field
type="text"
name="extends_custom"
label="COM_COMPONENTBUILDER_POWER_EXTENDS_CUSTOM_LABEL"
size="10"
maxlength="50"
description="COM_COMPONENTBUILDER_POWER_EXTENDS_CUSTOM_DESCRIPTION"
class="text_area span12"
filter="STRING"
message="COM_COMPONENTBUILDER_POWER_EXTENDS_CUSTOM_MESSAGE"
autocomplete="on"
showon="extends:-1[AND]type!:trait[AND]type!:interface"
/>
<!-- Implements_custom Field. Type: Text. (joomla) -->
<field
type="text"
@ -334,66 +409,6 @@
showon="type!:interface[AND]type!:trait"
button="true"
/>
<!-- Extends_custom Field. Type: Text. (joomla) -->
<field
type="text"
name="extends_custom"
label="COM_COMPONENTBUILDER_POWER_EXTENDS_CUSTOM_LABEL"
size="10"
maxlength="50"
description="COM_COMPONENTBUILDER_POWER_EXTENDS_CUSTOM_DESCRIPTION"
class="text_area span12"
filter="STRING"
message="COM_COMPONENTBUILDER_POWER_EXTENDS_CUSTOM_MESSAGE"
autocomplete="on"
showon="extends:-1[AND]type!:trait[AND]type!:interface"
/>
<!-- Extends Field. Type: Classpowers. (custom) -->
<field
type="classpowers"
name="extends"
label="COM_COMPONENTBUILDER_POWER_EXTENDS_LABEL"
description="COM_COMPONENTBUILDER_POWER_EXTENDS_DESCRIPTION"
class="list_class span12"
multiple="false"
default="0"
showon="type:class[OR]type:abstract class[OR]type:final class"
button="true"
/>
<!-- Note_linked_to_notice Field. Type: Note. A None Database Field. (joomla) -->
<field type="note" name="note_linked_to_notice" label="COM_COMPONENTBUILDER_POWER_NOTE_LINKED_TO_NOTICE_LABEL" description="COM_COMPONENTBUILDER_POWER_NOTE_LINKED_TO_NOTICE_DESCRIPTION" heading="h4" class="note_linked_to_notice" />
<!-- Not_required Field. Type: Hidden. (joomla) -->
<field
type="hidden"
name="not_required"
default="一_一"
/>
<!-- Method_selection Field. Type: Subform. (joomla) -->
<field
type="subform"
name="method_selection"
label="COM_COMPONENTBUILDER_POWER_METHOD_SELECTION_LABEL"
layout="joomla.form.field.subform.repeatable-table"
multiple="true"
buttons="add,remove,move"
description="COM_COMPONENTBUILDER_POWER_METHOD_SELECTION_DESCRIPTION"
icon="list"
max="150"
min="0">
<form hidden="true" name="list_method_selection_modal" repeat="true">
<!-- Method Field. Type: Pluginsclassmethods. (custom) -->
<field
type="pluginsclassmethods"
name="method"
label="COM_COMPONENTBUILDER_POWER_METHOD_LABEL"
class="list_class span12 method_selection_list"
multiple="false"
default="0"
onchange="getClassCode(this, 'method');"
button="false"
/>
</form>
</field>
<!-- Namespace_details Field. Type: Note. A None Database Field. (joomla) -->
<field type="note" name="namespace_details" label="COM_COMPONENTBUILDER_POWER_NAMESPACE_DETAILS_LABEL" description="COM_COMPONENTBUILDER_POWER_NAMESPACE_DETAILS_DESCRIPTION" heading="h4" class="alert alert-success namespace_details" />
<!-- Head Field. Type: Editor. (joomla) -->
@ -413,8 +428,18 @@
required="false"
validate="code"
/>
<!-- Autoload_composer_note Field. Type: Note. A None Database Field. (joomla) -->
<field type="note" name="autoload_composer_note" label="COM_COMPONENTBUILDER_POWER_AUTOLOAD_COMPOSER_NOTE_LABEL" description="COM_COMPONENTBUILDER_POWER_AUTOLOAD_COMPOSER_NOTE_DESCRIPTION" heading="h4" class="alert alert-info autoload_composer_note" />
<!-- Approved_paths Field. Type: Superpowerpaths. (custom) -->
<field
type="superpowerpaths"
name="approved_paths"
label="COM_COMPONENTBUILDER_POWER_APPROVED_PATHS_LABEL"
description="COM_COMPONENTBUILDER_POWER_APPROVED_PATHS_DESCRIPTION"
required="false"
showon="approved:1">
<!-- Option Set. -->
<option value="joomla/super-powers">
COM_COMPONENTBUILDER_POWER_JOOMLASUPERPOWERS</option>
</field>
<!-- Use_selection Field. Type: Subform. (joomla) -->
<field
type="subform"
@ -452,21 +477,8 @@
/>
</form>
</field>
<!-- Add_licensing_template Field. Type: Radio. (joomla) -->
<field
type="radio"
name="add_licensing_template"
label="COM_COMPONENTBUILDER_POWER_ADD_LICENSING_TEMPLATE_LABEL"
description="COM_COMPONENTBUILDER_POWER_ADD_LICENSING_TEMPLATE_DESCRIPTION"
class="btn-group btn-group-yesno"
default="1"
required="true">
<!-- Option Set. -->
<option value="1">
COM_COMPONENTBUILDER_POWER_USE_GLOBAL</option>
<option value="2">
COM_COMPONENTBUILDER_POWER_OVERRIDE</option>
</field>
<!-- Autoload_composer_note Field. Type: Note. A None Database Field. (joomla) -->
<field type="note" name="autoload_composer_note" label="COM_COMPONENTBUILDER_POWER_AUTOLOAD_COMPOSER_NOTE_LABEL" description="COM_COMPONENTBUILDER_POWER_AUTOLOAD_COMPOSER_NOTE_DESCRIPTION" heading="h4" class="alert alert-info autoload_composer_note" />
<!-- Main_class_code Field. Type: Editor. (joomla) -->
<field
type="editor"
@ -483,6 +495,23 @@
filter="raw"
validate="code"
/>
<!-- Add_licensing_template Field. Type: Radio. (joomla) -->
<field
type="radio"
name="add_licensing_template"
label="COM_COMPONENTBUILDER_POWER_ADD_LICENSING_TEMPLATE_LABEL"
description="COM_COMPONENTBUILDER_POWER_ADD_LICENSING_TEMPLATE_DESCRIPTION"
class="btn-group btn-group-yesno"
default="1"
required="true">
<!-- Option Set. -->
<option value="1">
COM_COMPONENTBUILDER_POWER_USE_GLOBAL</option>
<option value="2">
COM_COMPONENTBUILDER_POWER_OVERRIDE</option>
</field>
<!-- Load_powers_note Field. Type: Note. A None Database Field. (joomla) -->
<field type="note" name="load_powers_note" label="COM_COMPONENTBUILDER_POWER_LOAD_POWERS_NOTE_LABEL" description="COM_COMPONENTBUILDER_POWER_LOAD_POWERS_NOTE_DESCRIPTION" heading="h4" class="alert alert-info load_powers_note" />
<!-- Guid Field. Type: Text. (joomla) -->
<field
type="text"

View File

@ -1122,7 +1122,7 @@ class ComponentbuilderModelImport_joomla_components extends BaseDatabaseModel
return $data_;
}
$this->app->enqueueMessage(Text::_('COM_COMPONENTBUILDER_HTWOWE_COULD_NOT_OPEN_THE_ENCRYPT_DATAHTWO_THIS_COULD_BE_DUE_TO_THE_FOFENCRYPTION_THAT_IS_NO_LONGER_SUPPORTED_IN_JOOMLABR_PLEASE_EXPORT_YOUR_PACKAGES_WITH_JCB_VTHREEONEONENINE_OR_HIGHER_TO_BE_ABLE_TO_IMPORT_IT_INTO_THIS_VERSION_OF_JCB'), 'error');
$this->app->enqueueMessage(Text::_('COM_COMPONENTBUILDER_HTWOWE_COULD_NOT_OPEN_THE_ENCRYPT_DATAHTWO_THIS_COULD_BE_DUE_TO_THE_FOFENCRYPTION_THAT_IS_NO_LONGER_SUPPORTED_IN_JOOMLABR_PLEASE_EXPORT_YOUR_PACKAGES_WITH_JCB_VTHREEONEONEEIGHT_OR_HIGHER_TO_BE_ABLE_TO_IMPORT_IT_INTO_THIS_VERSION_OF_JCB'), 'error');
}
else
{

View File

@ -14,6 +14,8 @@ defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\Utilities\ArrayHelper;
use VDM\Joomla\Componentbuilder\Utilities\FormHelper as JCBFormHelper;
use VDM\Joomla\Componentbuilder\Utilities\FilterHelper as JCBFilterHelper;
/**
* Language_translations List Model
@ -55,7 +57,7 @@ class ComponentbuilderModelLanguage_translations extends ListModel
// Create the "extension" filter
$form->setField(new SimpleXMLElement(
ComponentbuilderHelper::getExtensionGroupedListXml()
JCBFilterHelper::extensions()
),'filter');
$form->setValue(
'extension',
@ -75,7 +77,7 @@ class ComponentbuilderModelLanguage_translations extends ListModel
'' => '- ' . JText::_('COM_COMPONENTBUILDER_NO_LANGUAGES_FOUND') . ' -'
);
// check if we have languages set
if (($languages = ComponentbuilderHelper::getAvailableLanguages()) !== false)
if (($languages = JCBFilterHelper::languages()) !== null)
{
$options = array(
'' => '- ' . JText::_('COM_COMPONENTBUILDER_TRANSLATED_IN') . ' -',
@ -85,7 +87,7 @@ class ComponentbuilderModelLanguage_translations extends ListModel
$options = array_merge($options, $languages);
}
$form->setField(ComponentbuilderHelper::getFieldXML($attributes, $options),'filter');
$form->setField(JCBFormHelper::xml($attributes, $options),'filter');
$form->setValue(
'translated',
'filter',
@ -114,7 +116,7 @@ class ComponentbuilderModelLanguage_translations extends ListModel
$options = array_merge($options, $languages);
}
$form->setField(ComponentbuilderHelper::getFieldXML($attributes, $options),'filter');
$form->setField(JCBFormHelper::xml($attributes, $options),'filter');
$form->setValue(
'not_translated',
'filter',
@ -300,7 +302,7 @@ class ComponentbuilderModelLanguage_translations extends ListModel
$filter_translated = $this->state->get("filter.translated");
if ($filter_translated !== null && !empty($filter_translated))
{
if (($ids = ComponentbuilderHelper::getTranslationIds($filter_translated)) !== false)
if (($ids = JCBFilterHelper::translations($filter_translated)) !== null)
{
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
}
@ -315,7 +317,7 @@ class ComponentbuilderModelLanguage_translations extends ListModel
$filter_not_translated = $this->state->get("filter.not_translated");
if ($filter_not_translated !== null && !empty($filter_not_translated))
{
if (($ids = ComponentbuilderHelper::getTranslationIds($filter_not_translated, false)) !== false)
if (($ids = JCBFilterHelper::translations($filter_not_translated, false)) !== null)
{
$query->where($db->quoteName('a.id') . ' IN (' . implode(',',$ids) . ')');
}
@ -332,7 +334,7 @@ class ComponentbuilderModelLanguage_translations extends ListModel
{
// column name, and id
$type_extension = explode('__', $filter_extension);
if (($ids = ComponentbuilderHelper::getTranslationExtensionsIds($type_extension[1], $type_extension[0])) !== false)
if (($ids = JCBFilterHelper::translation((int) $type_extension[1], $type_extension[0])) !== null)
{
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
}
@ -459,7 +461,7 @@ class ComponentbuilderModelLanguage_translations extends ListModel
$filter_translated = $this->state->get("filter.translated");
if ($filter_translated !== null && !empty($filter_translated))
{
if (($ids = ComponentbuilderHelper::getTranslationIds($filter_translated)) !== false)
if (($ids = JCBFilterHelper::translations($filter_translated)) !== null)
{
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
}
@ -474,7 +476,7 @@ class ComponentbuilderModelLanguage_translations extends ListModel
$filter_not_translated = $this->state->get("filter.not_translated");
if ($filter_not_translated !== null && !empty($filter_not_translated))
{
if (($ids = ComponentbuilderHelper::getTranslationIds($filter_not_translated, false)) !== false)
if (($ids = JCBFilterHelper::translations($filter_not_translated, false)) !== null)
{
$query->where($db->quoteName('a.id') . ' IN (' . implode(',',$ids) . ')');
}
@ -491,7 +493,7 @@ class ComponentbuilderModelLanguage_translations extends ListModel
{
// column name, and id
$type_extension = explode('__', $filter_extension);
if (($ids = ComponentbuilderHelper::getTranslationExtensionsIds($type_extension[1], $type_extension[0])) !== false)
if (($ids = JCBFilterHelper::translation((int) $type_extension[1], $type_extension[0])) !== null)
{
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
}

View File

@ -16,6 +16,9 @@ use Joomla\CMS\MVC\Model\AdminModel;
use Joomla\Registry\Registry;
use Joomla\String\StringHelper;
use Joomla\Utilities\ArrayHelper;
use VDM\Joomla\Utilities\String\ClassfunctionHelper;
use VDM\Joomla\Utilities\StringHelper as UtilitiesStringHelper;
use VDM\Joomla\Utilities\GetHelper;
/**
* Componentbuilder Power Admin Model
@ -65,6 +68,15 @@ class ComponentbuilderModelPower extends AdminModel
'licensing_template'
)
),
'super_power' => array(
'left' => array(
'approved',
'approved_paths'
),
'right' => array(
'note_approved_paths'
)
),
'composer' => array(
'fullwidth' => array(
'autoload_composer_note',
@ -202,6 +214,14 @@ class ComponentbuilderModelPower extends AdminModel
$item->main_class_code = base64_decode($item->main_class_code);
}
if (!empty($item->method_selection))
{
// Convert the method_selection field to an array.
$method_selection = new Registry;
$method_selection->loadString($item->method_selection);
$item->method_selection = $method_selection->toArray();
}
if (!empty($item->load_selection))
{
// Convert the load_selection field to an array.
@ -234,14 +254,6 @@ class ComponentbuilderModelPower extends AdminModel
$item->implements = $implements->toArray();
}
if (!empty($item->method_selection))
{
// Convert the method_selection field to an array.
$method_selection = new Registry;
$method_selection->loadString($item->method_selection);
$item->method_selection = $method_selection->toArray();
}
if (!empty($item->use_selection))
{
// Convert the use_selection field to an array.
@ -250,6 +262,12 @@ class ComponentbuilderModelPower extends AdminModel
$item->use_selection = $use_selection->toArray();
}
if (!empty($item->approved_paths))
{
// JSON Decode approved_paths.
$item->approved_paths = json_decode($item->approved_paths);
}
if (empty($item->id))
{
@ -1003,24 +1021,30 @@ class ComponentbuilderModelPower extends AdminModel
$data['metadata'] = (string) $metadata;
}
// Set the empty approved_paths item to data
if (!isset($data['approved_paths']))
{
$data['approved_paths'] = '';
}
// check if the name has placeholder
if (strpos($data['name'], '[[[') === false && strpos($data['name'], '###') === false)
{
// make sure the name is safe to be used as a function name
$data['name'] = ComponentbuilderHelper::safeClassFunctionName($data['name']);
$data['name'] = ClassfunctionHelper::safe($data['name']);
}
// if system name is empty create from name
if (empty($data['system_name']) || !ComponentbuilderHelper::checkString($data['system_name']))
if (empty($data['system_name']) || !UtilitiesStringHelper::check($data['system_name']))
{
$data['system_name'] = $data['name'];
}
// must set the version if empty
if (empty($data['power_version']) && $data['id'] > 0 && ($power_version = ComponentbuilderHelper::getVar('power', $data['id'], 'id', 'power_version')) !== false)
if (empty($data['power_version']) && $data['id'] > 0 && ($power_version = GetHelper::var('power', $data['id'], 'id', 'power_version')) !== false)
{
$data['power_version'] = $power_version;
}
// we must preserve versions (so that a change to the version number must result in save as copy)
elseif ($data['id'] > 0 && ($old_version = ComponentbuilderHelper::getVar('power', $data['id'], 'id', 'power_version')) && $data['power_version'] != $old_version)
elseif ($data['id'] > 0 && ($old_version = GetHelper::var('power', $data['id'], 'id', 'power_version')) && $data['power_version'] != $old_version)
{
// lets check if we already have this version
if (($existing_id = ComponentbuilderHelper::checkExist('power', ['power_version' => $data['power_version'], 'name' => $data['name'], 'namespace' => $data['namespace']])) !== false)
@ -1051,6 +1075,19 @@ class ComponentbuilderModelPower extends AdminModel
}
// Set the method_selection items to data.
if (isset($data['method_selection']) && is_array($data['method_selection']))
{
$method_selection = new JRegistry;
$method_selection->loadArray($data['method_selection']);
$data['method_selection'] = (string) $method_selection;
}
elseif (!isset($data['method_selection']))
{
// Set the empty method_selection to data
$data['method_selection'] = '';
}
// Set the load_selection items to data.
if (isset($data['load_selection']) && is_array($data['load_selection']))
{
@ -1103,19 +1140,6 @@ class ComponentbuilderModelPower extends AdminModel
$data['implements'] = '';
}
// Set the method_selection items to data.
if (isset($data['method_selection']) && is_array($data['method_selection']))
{
$method_selection = new JRegistry;
$method_selection->loadArray($data['method_selection']);
$data['method_selection'] = (string) $method_selection;
}
elseif (!isset($data['method_selection']))
{
// Set the empty method_selection to data
$data['method_selection'] = '';
}
// Set the use_selection items to data.
if (isset($data['use_selection']) && is_array($data['use_selection']))
{
@ -1129,6 +1153,12 @@ class ComponentbuilderModelPower extends AdminModel
$data['use_selection'] = '';
}
// Set the approved_paths string to JSON string.
if (isset($data['approved_paths']))
{
$data['approved_paths'] = (string) json_encode($data['approved_paths']);
}
// Set the licensing_template string to base64 string.
if (isset($data['licensing_template']))
{

View File

@ -14,6 +14,9 @@ defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\Utilities\ArrayHelper;
use VDM\Joomla\Utilities\Component\Helper as JCBHelper;
use VDM\Joomla\Componentbuilder\Utilities\FilterHelper as JCBFilterHelper;
use VDM\Joomla\Componentbuilder\Utilities\FormHelper as JCBFormHelper;
/**
* Powers List Model
@ -32,16 +35,123 @@ class ComponentbuilderModelPowers extends ListModel
'a.created_by','created_by',
'a.modified_by','modified_by',
'a.type','type',
'a.power_version','power_version',
'h.name','extends',
'a.approved','approved',
'a.system_name','system_name',
'a.namespace','namespace'
'a.namespace','namespace',
'a.power_version','power_version'
);
}
parent::__construct($config);
}
/**
* Get the filter form - Override the parent method
*
* @param array $data data
* @param boolean $loadData load current data
*
* @return \JForm|boolean The \JForm object or false on error
*
* @since JCB 2.12.5
*/
public function getFilterForm($data = array(), $loadData = true)
{
// load form from the parent class
$form = parent::getFilterForm($data, $loadData);
// Create the "admin_view" filter
$attributes = array(
'name' => 'namegroup',
'type' => 'list',
'onchange' => 'this.form.submit();',
);
$options = array(
'' => '- ' . JText::_('COM_COMPONENTBUILDER_NO_NAMESPACE_FOUND') . ' -'
);
// check if we have namespace (and limit to an extension if it is set)
if (($namespaces = JCBFilterHelper::namespaces()) !== null)
{
$options = array(
'' => '- ' . JText::_('COM_COMPONENTBUILDER_SELECT_A_NAMESPACE') . ' -'
);
// make sure we do not lose the key values in normal merge
$options = $options + $namespaces;
}
$form->setField(JCBFormHelper::xml($attributes, $options),'filter');
$form->setValue(
'namegroup',
'filter',
$this->state->get("filter.namegroup")
);
array_push($this->filter_fields, 'namegroup');
// get the component params
$params = JCBHelper::getParams();
$activate = $params->get('super_powers_repositories', 0);
if ($activate == 1)
{
$subform = $params->get('approved_paths', null);
// create approved paths filter
$attributes = array(
'name' => 'approved_paths',
'type' => 'list',
'onchange' => 'this.form.submit();',
);
$options = array(
'' => '- ' . JText::_('COM_COMPONENTBUILDER_NO_PATHS_FOUND') . ' -'
);
// add the paths found in global settings
if (is_object($subform))
{
$core = $params->get('super_powers_core', 'joomla/super-powers');
$options = array(
'' => '- ' . JText::_('COM_COMPONENTBUILDER_SELECT_APPROVED_PATH') . ' -',
$core => $core
);
foreach ($subform as $value)
{
if (isset($value->owner) && strlen($value->owner) > 1 &&
isset($value->repo) && strlen($value->repo) > 1)
{
$value = trim($value->owner) . '/' . trim($value->repo);
$options[$value] = $value;
}
}
}
$form->setField(JCBFormHelper::xml($attributes, $options), 'filter');
$form->setValue(
'approved_paths',
'filter',
$this->state->get("filter.approved_paths")
);
array_push($this->filter_fields, 'approved_paths');
}
return $form;
}
/**
* Check if a power can be used in linking
*
* @param string $type the type of power
*
* @return bool
* @since JCB 3.1.23
*/
protected function isSuperPower(string $type): bool
{
return in_array($type, ['class', 'abstract class', 'final class', 'trait']);
}
/**
* Method to auto-populate the model state.
*
@ -95,18 +205,11 @@ class ComponentbuilderModelPowers extends ListModel
$this->setState('filter.type', $type);
}
$power_version = $this->getUserStateFromRequest($this->context . '.filter.power_version', 'filter_power_version');
$approved = $this->getUserStateFromRequest($this->context . '.filter.approved', 'filter_approved');
if ($formSubmited)
{
$power_version = $app->input->post->get('power_version');
$this->setState('filter.power_version', $power_version);
}
$extends = $this->getUserStateFromRequest($this->context . '.filter.extends', 'filter_extends');
if ($formSubmited)
{
$extends = $app->input->post->get('extends');
$this->setState('filter.extends', $extends);
$approved = $app->input->post->get('approved');
$this->setState('filter.approved', $approved);
}
$system_name = $this->getUserStateFromRequest($this->context . '.filter.system_name', 'filter_system_name');
@ -123,6 +226,13 @@ class ComponentbuilderModelPowers extends ListModel
$this->setState('filter.namespace', $namespace);
}
$power_version = $this->getUserStateFromRequest($this->context . '.filter.power_version', 'filter_power_version');
if ($formSubmited)
{
$power_version = $app->input->post->get('power_version');
$this->setState('filter.power_version', $power_version);
}
// List state information.
parent::populateState($ordering, $direction);
}
@ -158,6 +268,11 @@ class ComponentbuilderModelPowers extends ListModel
continue;
}
// create the GUID placeholder key
if ($this->isSuperPower($item->type))
{
$item->super_power_key = 'Super_'.'_'.'_' . str_replace('-', '_', $item->guid) . '_'.'_'.'_Power';
}
// remove dots
$item->namespace = str_replace('.','\\', $item->namespace);
}
@ -170,6 +285,8 @@ class ComponentbuilderModelPowers extends ListModel
{
// convert type
$item->type = $this->selectionTranslation($item->type, 'type');
// convert approved
$item->approved = $this->selectionTranslation($item->approved, 'approved');
}
}
@ -201,6 +318,19 @@ class ComponentbuilderModelPowers extends ListModel
return $typeArray[$value];
}
}
// Array of approved language strings
if ($name === 'approved')
{
$approvedArray = array(
0 => 'COM_COMPONENTBUILDER_POWER_NOT_APPROVED',
1 => 'COM_COMPONENTBUILDER_POWER_APPROVED'
);
// Now check if value is found in this array
if (isset($approvedArray[$value]) && ComponentbuilderHelper::checkString($approvedArray[$value]))
{
return $approvedArray[$value];
}
}
return $value;
}
@ -223,9 +353,43 @@ class ComponentbuilderModelPowers extends ListModel
// From the componentbuilder_item table
$query->from($db->quoteName('#__componentbuilder_power', 'a'));
// do not use these filters in the export method
if (!isset($_export) || !$_export)
{
// Filtering "namegroup"
$filter_namegroup = $this->state->get("filter.namegroup");
if ($filter_namegroup !== null && !empty($filter_namegroup))
{
if (($ids = JCBFilterHelper::namegroup($filter_namegroup)) !== null)
{
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
}
else
{
// there is none
$query->where($db->quoteName('a.id') . ' = ' . 0);
}
}
// Filtering "approved paths"
$filter_approved_paths = $this->state->get("filter.approved_paths");
if ($filter_approved_paths !== null && !empty($filter_approved_paths))
{
if (($ids = JCBFilterHelper::paths($filter_approved_paths)) !== null)
{
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
}
else
{
// there is none
$query->where($db->quoteName('a.id') . ' = ' . 0);
}
}
}
// From the componentbuilder_power table.
$query->select($db->quoteName(['h.name','h.id'],['extends_name','extends_id']));
$query->join('LEFT', $db->quoteName('#__componentbuilder_power', 'h') . ' ON (' . $db->quoteName('a.extends') . ' = ' . $db->quoteName('h.guid') . ')');
$query->select($db->quoteName(['g.name','g.id'],['extends_name','extends_id']));
$query->join('LEFT', $db->quoteName('#__componentbuilder_power', 'g') . ' ON (' . $db->quoteName('a.extends') . ' = ' . $db->quoteName('g.guid') . ')');
// Filter by published state
$published = $this->getState('filter.published');
@ -271,7 +435,7 @@ class ComponentbuilderModelPowers extends ListModel
else
{
$search = $db->quote('%' . $db->escape($search) . '%');
$query->where('(a.system_name LIKE '.$search.' OR a.type LIKE '.$search.' OR a.description LIKE '.$search.' OR a.extends_custom LIKE '.$search.' OR a.extends LIKE '.$search.' OR a.guid LIKE '.$search.' OR a.name LIKE '.$search.')');
$query->where('(a.system_name LIKE '.$search.' OR a.type LIKE '.$search.' OR a.description LIKE '.$search.' OR a.extends LIKE '.$search.' OR a.extends_custom LIKE '.$search.' OR a.approved_paths LIKE '.$search.' OR a.guid LIKE '.$search.' OR a.name LIKE '.$search.')');
}
}
@ -315,39 +479,22 @@ class ComponentbuilderModelPowers extends ListModel
// Filter by the Type Array.
$query->where('a.type IN (' . implode(',', $_type) . ')');
}
// Filter by Power_version.
$_power_version = $this->getState('filter.power_version');
if (is_numeric($_power_version))
// Filter by Approved.
$_approved = $this->getState('filter.approved');
if (is_numeric($_approved))
{
if (is_float($_power_version))
if (is_float($_approved))
{
$query->where('a.power_version = ' . (float) $_power_version);
$query->where('a.approved = ' . (float) $_approved);
}
else
{
$query->where('a.power_version = ' . (int) $_power_version);
$query->where('a.approved = ' . (int) $_approved);
}
}
elseif (ComponentbuilderHelper::checkString($_power_version))
elseif (ComponentbuilderHelper::checkString($_approved))
{
$query->where('a.power_version = ' . $db->quote($db->escape($_power_version)));
}
// Filter by Extends.
$_extends = $this->getState('filter.extends');
if (is_numeric($_extends))
{
if (is_float($_extends))
{
$query->where('a.extends = ' . (float) $_extends);
}
else
{
$query->where('a.extends = ' . (int) $_extends);
}
}
elseif (ComponentbuilderHelper::checkString($_extends))
{
$query->where('a.extends = ' . $db->quote($db->escape($_extends)));
$query->where('a.approved = ' . $db->quote($db->escape($_approved)));
}
// Add the list ordering clause.
@ -400,10 +547,10 @@ class ComponentbuilderModelPowers extends ListModel
{
$id .= ':' . $_type;
}
$id .= ':' . $this->getState('filter.power_version');
$id .= ':' . $this->getState('filter.extends');
$id .= ':' . $this->getState('filter.approved');
$id .= ':' . $this->getState('filter.system_name');
$id .= ':' . $this->getState('filter.namespace');
$id .= ':' . $this->getState('filter.power_version');
return parent::getStoreId($id);
}

View File

@ -14,6 +14,8 @@ defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\Utilities\ArrayHelper;
use VDM\Joomla\Componentbuilder\Utilities\FormHelper as JCBFormHelper;
use VDM\Joomla\Componentbuilder\Utilities\FilterHelper as JCBFilterHelper;
/**
* Site_views List Model
@ -69,7 +71,7 @@ class ComponentbuilderModelSite_views extends ListModel
'' => '- ' . JText::_('COM_COMPONENTBUILDER_NO_COMPONENTS_FOUND') . ' -'
);
// check if we have joomla components
if (($joomla_components = ComponentbuilderHelper::getByTypeTheIdsSystemNames('joomla_component')) !== false)
if (($joomla_components = JCBFilterHelper::names('joomla_component')) !== null)
{
$options = array(
'' => '- ' . JText::_('COM_COMPONENTBUILDER_SELECT_COMPONENT') . ' -'
@ -78,7 +80,7 @@ class ComponentbuilderModelSite_views extends ListModel
$options = $options + $joomla_components;
}
$form->setField(ComponentbuilderHelper::getFieldXML($attributes, $options),'filter');
$form->setField(JCBFormHelper::xml($attributes, $options),'filter');
$form->setValue(
'joomla_component',
'filter',
@ -301,7 +303,7 @@ class ComponentbuilderModelSite_views extends ListModel
$filter_joomla_component = $this->state->get("filter.joomla_component");
if ($filter_joomla_component !== null && !empty($filter_joomla_component))
{
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($filter_joomla_component, 'joomla_component_site_views')) !== false)
if (($ids = JCBFilterHelper::linked((int) $filter_joomla_component, 'joomla_component_site_views')) !== null)
{
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
}
@ -506,7 +508,7 @@ class ComponentbuilderModelSite_views extends ListModel
$filter_joomla_component = $this->state->get("filter.joomla_component");
if ($filter_joomla_component !== null && !empty($filter_joomla_component))
{
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($filter_joomla_component, 'joomla_component_site_views')) !== false)
if (($ids = JCBFilterHelper::linked((int) $filter_joomla_component, 'joomla_component_site_views')) !== null)
{
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
}