From 1dddba0fc82dbae07021a85f568335fbbe2bd30b Mon Sep 17 00:00:00 2001 From: Llewellyn van der Merwe Date: Sat, 10 Sep 2022 10:16:44 +0200 Subject: [PATCH] Moved some arrays to the Registry, and marked and updated deprecated class methods and values in the compiler. --- README.md | 8 +- admin/README.txt | 8 +- admin/config.xml | 10 - admin/helpers/compiler.php | 50 +- admin/helpers/compiler/a_Get.php | 1088 ++--------------- admin/helpers/compiler/b_Structure.php | 22 +- admin/helpers/compiler/c_Fields.php | 94 +- admin/helpers/compiler/e_Interpretation.php | 278 ++--- admin/helpers/compiler/f_Infusion.php | 45 +- admin/helpers/extrusion/b_builder.php | 2 +- .../en-GB/en-GB.com_componentbuilder.ini | 5 - admin/layouts/power/code_left.php | 6 +- admin/models/power.php | 6 +- admin/sql/install.mysql.utf8.sql | 4 +- componentbuilder.xml | 2 +- 15 files changed, 340 insertions(+), 1288 deletions(-) diff --git a/README.md b/README.md index 79fdd2705..f6a473d39 100644 --- a/README.md +++ b/README.md @@ -140,14 +140,14 @@ TODO + *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io) + *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder) + *First Build*: 30th April, 2015 -+ *Last Build*: 3rd September, 2022 ++ *Last Build*: 10th September, 2022 + *Version*: 3.1.5 + *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved. + *License*: GNU General Public License version 2 or later; see LICENSE.txt -+ *Line count*: **321830** ++ *Line count*: **324186** + *Field count*: **2002** -+ *File count*: **2107** -+ *Folder count*: **363** ++ *File count*: **2125** ++ *Folder count*: **366** > This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](http://joomlacomponentbuilder.com). > Developed by [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com) diff --git a/admin/README.txt b/admin/README.txt index 79fdd2705..f6a473d39 100644 --- a/admin/README.txt +++ b/admin/README.txt @@ -140,14 +140,14 @@ TODO + *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io) + *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder) + *First Build*: 30th April, 2015 -+ *Last Build*: 3rd September, 2022 ++ *Last Build*: 10th September, 2022 + *Version*: 3.1.5 + *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved. + *License*: GNU General Public License version 2 or later; see LICENSE.txt -+ *Line count*: **321830** ++ *Line count*: **324186** + *Field count*: **2002** -+ *File count*: **2107** -+ *Folder count*: **363** ++ *File count*: **2125** ++ *Folder count*: **366** > This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](http://joomlacomponentbuilder.com). > Developed by [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com) diff --git a/admin/config.xml b/admin/config.xml index 974a94e8f..ea930586a 100644 --- a/admin/config.xml +++ b/admin/config.xml @@ -678,16 +678,6 @@ size="60" default="" /> - -
writeFile($xmlPath, $componentXML); } // Trigger Event: jcb_ce_onBeforeUpdateFiles - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeUpdateFiles', array(&$this->componentContext, &$this) ); @@ -133,7 +133,7 @@ class Compiler extends Infusion return false; } // Trigger Event: jcb_ce_onBeforeGetCustomCode - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeGetCustomCode', array(&$this->componentContext, &$this) ); @@ -141,7 +141,7 @@ class Compiler extends Infusion if (CFactory::_('Customcode')->get()) { // Trigger Event: jcb_ce_onBeforeAddCustomCode - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeAddCustomCode', array(&$this->componentContext, &$this) ); @@ -149,7 +149,7 @@ class Compiler extends Infusion $this->addCustomCode(); } // Trigger Event: jcb_ce_onBeforeSetLangFileData - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeSetLangFileData', array(&$this->componentContext, &$this) ); @@ -627,7 +627,7 @@ class Compiler extends Infusion protected function setFileContent(&$name, &$path, &$bom, $view = null) { // Trigger Event: jcb_ce_onBeforeSetFileContent - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeSetFileContent', array(&$this->componentContext, &$name, &$path, &$bom, &$view) ); @@ -642,7 +642,7 @@ class Compiler extends Infusion // get content of the file $string = ComponentbuilderHelper::getFileContents($path); // Trigger Event: jcb_ce_onGetFileContents - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onGetFileContents', array(&$this->componentContext, &$string, &$name, &$path, &$bom, &$view) @@ -670,7 +670,7 @@ class Compiler extends Infusion $answer = CFactory::_('Customcode')->update($answer); } // Trigger Event: jcb_ce_onBeforeSetFileContent - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeWriteFileContent', array(&$this->componentContext, &$answer, &$name, &$path, &$bom, &$view) @@ -983,7 +983,7 @@ class Compiler extends Infusion . $this->componentData->sales_name . '__joomla_' . CFactory::_('Config')->get('version', 3); // Trigger Event: jcb_ce_onBeforeUpdateRepo - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeUpdateRepo', array(&$this->componentContext, &$this->componentPath, &$repoFullPath, &$this->componentData) @@ -993,7 +993,7 @@ class Compiler extends Infusion // set the new data Folder::copy($this->componentPath, $repoFullPath, '', true); // Trigger Event: jcb_ce_onAfterUpdateRepo - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterUpdateRepo', array(&$this->componentContext, &$this->componentPath, &$repoFullPath, &$this->componentData) @@ -1014,7 +1014,7 @@ class Compiler extends Infusion . $module->folder_name . '__joomla_' . CFactory::_('Config')->get('version', 3); // Trigger Event: jcb_ce_onBeforeUpdateRepo - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeUpdateRepo', array(&$module_context, &$module->folder_path, &$repoFullPath, &$module) @@ -1028,7 +1028,7 @@ class Compiler extends Infusion $module->folder_path, $repoFullPath, '', true ); // Trigger Event: jcb_ce_onAfterUpdateRepo - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterUpdateRepo', array(&$module_context, &$module->folder_path, &$repoFullPath, &$module) @@ -1051,7 +1051,7 @@ class Compiler extends Infusion . $plugin->folder_name . '__joomla_' . CFactory::_('Config')->get('version', 3); // Trigger Event: jcb_ce_onBeforeUpdateRepo - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeUpdateRepo', array(&$plugin_context, &$plugin->folder_path, &$repoFullPath, &$plugin) @@ -1065,7 +1065,7 @@ class Compiler extends Infusion $plugin->folder_path, $repoFullPath, '', true ); // Trigger Event: jcb_ce_onAfterUpdateRepo - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterUpdateRepo', array(&$plugin_context, &$plugin->folder_path, &$repoFullPath, &$plugin) @@ -1084,7 +1084,7 @@ class Compiler extends Infusion $this->filepath['component'] = $this->tempPath . '/' . $this->filepath['component-folder'] . '.zip'; // Trigger Event: jcb_ce_onBeforeZipComponent - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeZipComponent', array(&$this->componentContext, &$this->componentPath, &$this->filepath['component'], &$this->tempPath, @@ -1099,7 +1099,7 @@ class Compiler extends Infusion if ($this->backupPath && $this->dynamicIntegration) { // Trigger Event: jcb_ce_onBeforeBackupZip - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBackupZip', array(&$this->componentContext, &$this->filepath['component'], &$this->tempPath, @@ -1121,7 +1121,7 @@ class Compiler extends Infusion if (isset($this->componentData->sales_server)) { // Trigger Event: jcb_ce_onBeforeMoveToServer - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeMoveToServer', array(&$this->componentContext, &$this->filepath['component'], &$this->tempPath, @@ -1137,7 +1137,7 @@ class Compiler extends Infusion } } // Trigger Event: jcb_ce_onAfterZipComponent - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterZipComponent', array(&$this->componentContext, &$this->filepath['component'], &$this->tempPath, &$this->componentFolderName, @@ -1176,7 +1176,7 @@ class Compiler extends Infusion $this->filepath['modules'][$module->id] = $this->tempPath . '/' . $module->zip_name . '.zip'; // Trigger Event: jcb_ce_onBeforeZipModule - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeZipModule', array(&$module_context, &$module->folder_path, &$this->filepath['modules'][$module->id], @@ -1193,7 +1193,7 @@ class Compiler extends Infusion { $__module_context = 'module.' . $module_context; // Trigger Event: jcb_ce_onBeforeBackupZip - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBackupZip', array(&$__module_context, &$this->filepath['modules'][$module->id], @@ -1215,7 +1215,7 @@ class Compiler extends Infusion if (isset($module->sales_server)) { // Trigger Event: jcb_ce_onBeforeMoveToServer - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeMoveToServer', array(&$__module_context, &$this->filepath['modules'][$module->id], @@ -1232,7 +1232,7 @@ class Compiler extends Infusion } } // Trigger Event: jcb_ce_onAfterZipModule - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterZipModule', array(&$module_context, &$this->filepath['modules'][$module->id], &$this->tempPath, @@ -1270,7 +1270,7 @@ class Compiler extends Infusion $this->filepath['plugins'][$plugin->id] = $this->tempPath . '/' . $plugin->zip_name . '.zip'; // Trigger Event: jcb_ce_onBeforeZipPlugin - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeZipPlugin', array(&$plugin_context, &$plugin->folder_path, &$this->filepath['plugins'][$plugin->id], @@ -1287,7 +1287,7 @@ class Compiler extends Infusion { $__plugin_context = 'plugin.' . $plugin_context; // Trigger Event: jcb_ce_onBeforeBackupZip - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBackupZip', array(&$__plugin_context, &$this->filepath['plugins'][$plugin->id], @@ -1309,7 +1309,7 @@ class Compiler extends Infusion if (isset($plugin->sales_server)) { // Trigger Event: jcb_ce_onBeforeMoveToServer - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeMoveToServer', array(&$__plugin_context, &$this->filepath['plugins'][$plugin->id], @@ -1326,7 +1326,7 @@ class Compiler extends Infusion } } // Trigger Event: jcb_ce_onAfterZipPlugin - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterZipPlugin', array(&$plugin_context, &$this->filepath['plugins'][$plugin->id], &$this->tempPath, diff --git a/admin/helpers/compiler/a_Get.php b/admin/helpers/compiler/a_Get.php index a19c91efb..6e3f2769b 100644 --- a/admin/helpers/compiler/a_Get.php +++ b/admin/helpers/compiler/a_Get.php @@ -682,6 +682,7 @@ class Get * The validation rules that should be added * * @var array + * @deprecated 3.3 Use CFactory::_('Registry')->get('validation.rules'); */ public $validationRules = array(); @@ -689,6 +690,7 @@ class Get * The validation linked to fields * * @var array + * @deprecated 3.3 Use CFactory::_('Registry')->get('validation.linked'); */ public $validationLinkedFields = array(); @@ -703,6 +705,7 @@ class Get * The field data array * * @var array + * @deprecated 3.3 */ private $_fieldData = array(); @@ -728,6 +731,7 @@ class Get * Set unique Names * * @var array + * @deprecated 3.3 Use CFactory::_('Registry')->get('unique.names'); */ public $uniqueNames = array(); @@ -735,6 +739,7 @@ class Get * Set unique Names * * @var array + * @deprecated */ protected $uniqueFieldNames = array(); @@ -742,6 +747,7 @@ class Get * Category other name bucket * * @var array + * @deprecated 3.3 Use CFactory::_('Registry')->get('category.other.name'); */ public $catOtherName = array(); @@ -749,6 +755,7 @@ class Get * The field relations values * * @var array + * @deprecate Use CFactory::_('Registry')->get('builder.field_relations'); */ public $fieldRelations = array(); @@ -772,6 +779,7 @@ class Get * The list join fields * * @var array + * @deprecate Use CFactory::_('Registry')->get('builder.list_join'); */ public $listJoinBuilder = array(); @@ -779,6 +787,7 @@ class Get * The list head over ride * * @var array + * @deprecate Use CFactory::_('Registry')->get('builder.list_head_override'); */ public $listHeadOverRide = array(); @@ -842,6 +851,7 @@ class Get * The WHMCS Encryption Switch * * @var boolean + * @deprecated 3.3 Use CFactory::_('Config')->whmcs_encryption; */ public $whmcsEncryption = false; @@ -849,6 +859,7 @@ class Get * The Basic Encryption Switch * * @var boolean + * @deprecated 3.3 Use CFactory::_('Config')->basic_encryption; */ public $basicEncryption = false; @@ -856,6 +867,7 @@ class Get * The Medium Encryption Switch * * @var boolean + * @deprecated 3.3 Use CFactory::_('Config')->medium_encryption; */ public $mediumEncryption = false; @@ -863,6 +875,7 @@ class Get * The Custom field Switch per view * * @var array + * @deprecated 3.3 */ public $customFieldScript = array(); @@ -985,7 +998,7 @@ class Get // Set the params $this->params = JComponentHelper::getParams('com_componentbuilder'); // Trigger Event: jcb_ce_onBeforeGet - CFactory::_J('Event')->trigger('jcb_ce_onBeforeGet', array(&$config, &$this)); + CFactory::_('Event')->trigger('jcb_ce_onBeforeGet', array(&$config, &$this)); // set the Joomla version @deprecated $this->joomlaVersion = CFactory::_('Config')->joomla_version; // set the minfy switch of the JavaScript @deprecated @@ -1051,14 +1064,14 @@ class Get CFactory::_('Customcode.Extractor')->run(); // Trigger Event: jcb_ce_onBeforeGetComponentData - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeGetComponentData', array(&$this->componentContext, &$this) ); // get the component data $this->componentData = $this->getComponentData(); // Trigger Event: jcb_ce_onAfterGetComponentData - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterGetComponentData', array(&$this->componentContext, &$this) ); @@ -1100,7 +1113,7 @@ class Get ); // Trigger Event: jcb_ce_onBeforeGet - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterGet', array(&$this->componentContext, &$this) ); @@ -1113,12 +1126,12 @@ class Get * @param int $nr The number of tag/space * * @return string - * + * @deprecated 3.3 Use Indent::_($nr); */ public function _t($nr) { // use global method for conformity - return ComponentbuilderHelper::_t($nr); + return Indent::_($nr); } /** @@ -1128,11 +1141,11 @@ class Get * @param mix $data The values to pass to the event/plugin * * @return void - * @deprecated 3.3 Use CFactory::_J('Event')->trigger($event, $data); + * @deprecated 3.3 Use CFactory::_('Event')->trigger($event, $data); */ public function triggerEvent($event, $data) { - return CFactory::_J('Event')->trigger($event, $data); + return CFactory::_('Event')->trigger($event, $data); } /** @@ -1217,7 +1230,7 @@ class Get ); // Trigger Event: jcb_ce_onBeforeQueryComponentData - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeQueryComponentData', array(&$this->componentContext, &$this->componentID, &$query, &$this->db) @@ -1230,7 +1243,7 @@ class Get $component = $this->db->loadObject(); // Trigger Event: jcb_ce_onBeforeModelComponentData - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeModelComponentData', array(&$this->componentContext, &$component) ); @@ -1622,9 +1635,9 @@ class Get $field['alias'] = 0; $field['title'] = 0; // set the field details - $this->setFieldDetails($field); + CFactory::_('Field')->set($field); // set unique name counter - $this->setUniqueNameCounter($field['base_name'], 'configs'); + CFactory::_('Field.Unique.Name')->set($field['base_name'], 'configs'); // return field return $field; @@ -1635,7 +1648,7 @@ class Get foreach ($component->config as $field) { // so first we lock the field name in - $this->getFieldName($field, 'configs'); + CFactory::_('Field.Name')->get($field, 'configs'); } // unset original value unset($component->addconfig); @@ -1666,10 +1679,10 @@ class Get } // build update SQL - $old_admin_views = $this->getHistoryWatch( + $old_admin_views = CFactory::_('History')->get( 'component_admin_views', $component->addadmin_views_id ); - $old_component = $this->getHistoryWatch( + $old_component = CFactory::_('History')->get( 'joomla_component', CFactory::_('Config')->component_id ); if ($old_component || $old_admin_views) @@ -2079,7 +2092,7 @@ class Get unset($component->addjoomla_plugins); // Trigger Event: jcb_ce_onAfterModelComponentData - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterModelComponentData', array(&$this->componentContext, &$component) ); @@ -2098,7 +2111,6 @@ class Get * * @return void * @deprecated 3.3 Use CFactory::_('Language')->set($target, $language, $string, $addPrefix); - * */ public function setLangContent($target, $language, $string, $addPrefix = false @@ -2114,7 +2126,6 @@ class Get * * @return string * @deprecated 3.3 - * */ public function fixLangString(&$string) { @@ -2189,7 +2200,7 @@ class Get $query->where($this->db->quoteName('a.id') . ' = ' . (int) $id); // Trigger Event: jcb_ce_onBeforeQueryViewData - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeQueryViewData', array(&$this->componentContext, &$id, &$query, &$this->db) ); @@ -2222,7 +2233,7 @@ class Get $name_length = CFactory::_('Config')->component_code_name_length + strlen( $view->name_single_code ) + 5; - // when the name is larger then 49 we need to add the assets table name fix + // when the name is larger than 49 we need to add the assets' table name fix if ($name_length > 49) { $this->addAssetsTableNameFix = true; @@ -2304,7 +2315,7 @@ class Get // for plugin event TODO change event api signatures $this->placeholders = CFactory::_('Placeholder')->active; // Trigger Event: jcb_ce_onBeforeModelViewData - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeModelViewData', array(&$this->componentContext, &$view, &$this->placeholders) ); @@ -2495,7 +2506,7 @@ class Get &$view, &$ignoreFields ) { // set the field details - $this->setFieldDetails( + CFactory::_('Field')->set( $field, $view->name_single_code, $view->name_list_code ); @@ -2516,7 +2527,7 @@ class Get }, array_values($view->addfields) ); // build update SQL - if ($old_view = $this->getHistoryWatch( + if ($old_view = CFactory::_('History')->get( 'admin_fields', $view->addfields_id )) { @@ -2563,7 +2574,7 @@ class Get foreach ($view->fields as $field) { // so first we lock the field name in - $field_name = $this->getFieldName( + $field_name = CFactory::_('Field.Name')->get( $field, $view->name_list_code ); // check if the field changed since the last compilation (default fields never change and are always added) @@ -2624,12 +2635,12 @@ class Get $tmpfield['settings']->type_name = $field['settings']->type_name; // get the old name - $old_field_name = $this->getFieldName( + $old_field_name = CFactory::_('Field.Name')->get( $tmpfield ); // only run this if not a multi field - if (!isset($this->uniqueNames[$view->name_list_code]['names'][$field_name])) + if (CFactory::_('Registry')->get('unique.names.' . $view->name_list_code . '.names.' . $field_name) === null) { // this only works when the field is not multiple of the same field $this->setUpdateSQL( @@ -2664,7 +2675,7 @@ class Get } unset($view->addfields); // build update SQL - if ($old_view = $this->getHistoryWatch('admin_view', $id)) + if ($old_view = CFactory::_('History')->get('admin_view', $id)) { // check if the view name changed if (StringHelper::check($old_view->name_single)) @@ -2755,10 +2766,10 @@ class Get // set the field name $conditionValue['target_field'][$fieldKey] = array( - 'name' => $this->getFieldName( + 'name' => CFactory::_('Field.Name')->get( $fieldValues, $view->name_list_code ), - 'type' => $this->getFieldType( + 'type' => CFactory::_('Field.Type.Name')->get( $fieldValues ), 'required' => $required, @@ -2780,10 +2791,10 @@ class Get == (int) $conditionValue['match_field']) { // set the type - $type = $this->getFieldType($fieldValue); + $type = CFactory::_('Field.Type.Name')->get($fieldValue); // set the field details $conditionValue['match_name'] - = $this->getFieldName( + = CFactory::_('Field.Name')->get( $fieldValue, $view->name_list_code ); $conditionValue['match_type'] = $type; @@ -2813,10 +2824,6 @@ class Get } unset($view->addconditions); - // prep the buckets - $this->fieldRelations[$view->name_list_code] = array(); - $this->listJoinBuilder[$view->name_list_code] = array(); - $this->listHeadOverRide[$view->name_list_code] = array(); // set the relations $view->addrelations = (isset($view->addrelations) && JsonHelper::check($view->addrelations)) @@ -2825,7 +2832,7 @@ class Get { foreach ($view->addrelations as $nr => $relationsValue) { - // only add if list view field is selected and joind fields are set + // only add if list view field is selected and joined fields are set if (isset($relationsValue['listfield']) && is_numeric( $relationsValue['listfield'] @@ -2845,18 +2852,11 @@ class Get $relationsValue['set'] ); } - // check that the arrays are set - if (!isset($this->fieldRelations[$view->name_list_code][(int) $relationsValue['listfield']]) - || !ArrayHelper::check( - $this->fieldRelations[$view->name_list_code][(int) $relationsValue['listfield']] - )) - { - $this->fieldRelations[$view->name_list_code][(int) $relationsValue['listfield']] - = array(); - } + // load the field relations - $this->fieldRelations[$view->name_list_code][(int) $relationsValue['listfield']][(int) $relationsValue['area']] - = $relationsValue; + CFactory::_('Registry')->set('builder.field_relations.' . $view->name_list_code . '.' . (int) $relationsValue['listfield'] + . '.' . (int) $relationsValue['area'], $relationsValue); + // load the list joints if (isset($relationsValue['joinfields']) && ArrayHelper::check( @@ -2865,8 +2865,7 @@ class Get { foreach ($relationsValue['joinfields'] as $join) { - $this->listJoinBuilder[$view->name_list_code][(int) $join] - = (int) $join; + CFactory::_('Registry')->set('builder.list_join.' . $view->name_list_code . '.' . (int) $join, (int) $join); } } // set header over-ride @@ -2892,8 +2891,11 @@ class Get 'admin', $column_name_lang, $relationsValue['column_name'] ); - $this->listHeadOverRide[$view->name_list_code][(int) $relationsValue['listfield']] - = $column_name_lang; + CFactory::_('Registry')->set('builder.list_head_override.' . + $view->name_list_code . '.' . (int) $relationsValue['listfield'], + $column_name_lang + ); + } } } @@ -3201,7 +3203,7 @@ class Get $this->customAliasBuilder[$view->name_single_code] = (array) array_map( function ($field) use (&$view) { - return $this->getFieldName( + return CFactory::_('Field.Name')->get( $field, $view->name_list_code ); }, $alias_fields @@ -3264,7 +3266,7 @@ class Get // for plugin event TODO change event api signatures $this->placeholders = CFactory::_('Placeholder')->active; // Trigger Event: jcb_ce_onAfterModelViewData - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterModelViewData', array(&$this->componentContext, &$view, &$this->placeholders) ); @@ -3312,7 +3314,7 @@ class Get $query->where($this->db->quoteName('a.id') . ' = ' . (int) $id); // Trigger Event: jcb_ce_onBeforeQueryCustomViewData - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeQueryCustomViewData', array(&$this->componentContext, &$id, &$table, &$query, &$this->db) ); @@ -3329,7 +3331,7 @@ class Get $view->Code = StringHelper::safe($view->code, 'F'); $view->CODE = StringHelper::safe($view->code, 'U'); // Trigger Event: jcb_ce_onBeforeModelCustomViewData - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeModelCustomViewData', array(&$this->componentContext, &$view, &$id, &$table) ); @@ -3650,7 +3652,7 @@ class Get } // Trigger Event: jcb_ce_onAfterModelCustomViewData - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterModelCustomViewData', array(&$this->componentContext, &$view) ); @@ -3667,432 +3669,11 @@ class Get * @param string $name_list The view list name * * @return oject The field data - * + * @deprecated 3.3 Use CFactory::_('Field.Data')->get($id, $name_single, $name_list); */ public function getFieldData($id, $name_single = null, $name_list = null) { - if ($id > 0 && !isset($this->_fieldData[$id])) - { - // Create a new query object. - $query = $this->db->getQuery(true); - - // Select all the values in the field - $query->select('a.*'); - $query->select( - $this->db->quoteName( - array('c.name', 'c.properties'), - array('type_name', 'properties') - ) - ); - $query->from('#__componentbuilder_field AS a'); - $query->join( - 'LEFT', - $this->db->quoteName('#__componentbuilder_fieldtype', 'c') - . ' ON (' . $this->db->quoteName('a.fieldtype') . ' = ' - . $this->db->quoteName('c.id') . ')' - ); - $query->where( - $this->db->quoteName('a.id') . ' = ' . $this->db->quote($id) - ); - - // Trigger Event: jcb_ce_onBeforeQueryFieldData - CFactory::_J('Event')->trigger( - 'jcb_ce_onBeforeQueryFieldData', - array(&$this->componentContext, &$id, &$query, &$this->db) - ); - - // Reset the query using our newly populated query object. - $this->db->setQuery($query); - $this->db->execute(); - if ($this->db->getNumRows()) - { - // Load the results as a list of stdClass objects (see later for more options on retrieving data). - $field = $this->db->loadObject(); - - // Trigger Event: jcb_ce_onBeforeModelFieldData - CFactory::_J('Event')->trigger( - 'jcb_ce_onBeforeModelFieldData', - array(&$this->componentContext, &$field) - ); - - // adding a fix for the changed name of type to fieldtype - $field->type = $field->fieldtype; - - // repeatable fields to update - $searchRepeatables = array( - // repeatablefield => checker - 'properties' => 'name' - ); - // set upater - $updater = array( - 'table' => 'fieldtype', - 'key' => 'id', - 'val' => (int) $id - ); - // update the repeatable fields - $field = ComponentbuilderHelper::convertRepeatableFields( - $field, $searchRepeatables, $updater - ); - - // load the values form params - $field->xml = CFactory::_('Customcode')->update(json_decode($field->xml)); - - // check if we have validate (validation rule set) - $validationRule = GetHelper::between( - $field->xml, 'validate="', '"' - ); - if (StringHelper::check($validationRule)) - { - // make sure it is lowercase - $validationRule = StringHelper::safe( - $validationRule - ); - // link this field to this validation - $this->validationLinkedFields[$id] = $validationRule; - // make sure it is not already set - if (!isset($this->validationRules[$validationRule])) - { - // get joomla core validation names - if ($coreValidationRules - = ComponentbuilderHelper::getExistingValidationRuleNames( - true - )) - { - // make sure this rule is not a core validation rule - if (!in_array( - $validationRule, (array) $coreValidationRules - )) - { - // get the class methods for this rule if it exists - if ($this->validationRules[$validationRule] - = GetHelper::var( - 'validation_rule', $validationRule, 'name', - 'php' - )) - { - // open and set the validation rule - $this->validationRules[$validationRule] - = CFactory::_('Customcode.Gui')->set( - CFactory::_('Placeholder')->update( - CFactory::_('Customcode')->update( - base64_decode( - $this->validationRules[$validationRule] - ) - ), CFactory::_('Placeholder')->active - ), - array( - 'table' => 'validation_rule', - 'field' => 'php', - 'id' => GetHelper::var( - 'validation_rule', - $validationRule, 'name', 'id' - ), - 'type' => 'php') - ); - } - else - { - // set the notice that this validation rule is custom and was not found (TODO) - unset($this->validationLinkedFields[$id], $this->validationRules[$validationRule]); - } - } - else - { - // remove link (we only want custom validations linked) - unset($this->validationLinkedFields[$id]); - } - } - } - } - - // load the type values form type params - $field->properties = (isset($field->properties) - && JsonHelper::check($field->properties)) - ? json_decode($field->properties, true) : null; - if (ArrayHelper::check($field->properties)) - { - $field->properties = array_values($field->properties); - } - // check if we have WHMCS encryption - if (4 == $field->store - && (!isset($this->whmcsEncryption) - || !$this->whmcsEncryption)) - { - $this->whmcsEncryption = true; - } - // check if we have basic encryption - elseif (3 == $field->store - && (!isset($this->basicEncryption) - || !$this->basicEncryption)) - { - $this->basicEncryption = true; - } - // check if we have better encryption - elseif (5 == $field->store - && (!isset($this->mediumEncryption) - || !$this->mediumEncryption)) - { - $this->mediumEncryption = true; - } - // check if we have better encryption - elseif (6 == $field->store - && StringHelper::check( - $field->on_get_model_field - ) - && StringHelper::check( - $field->on_save_model_field - )) - { - // add only if string lenght found - if (StringHelper::check( - $field->initiator_on_save_model - )) - { - $field->initiator_save_key = md5( - $field->initiator_on_save_model - ); - $field->initiator_save = explode( - PHP_EOL, CFactory::_('Placeholder')->update( - CFactory::_('Customcode')->update( - base64_decode( - $field->initiator_on_save_model - ) - ), CFactory::_('Placeholder')->active - ) - ); - } - if (StringHelper::check( - $field->initiator_on_save_model - )) - { - $field->initiator_get_key = md5( - $field->initiator_on_get_model - ); - $field->initiator_get = explode( - PHP_EOL, CFactory::_('Placeholder')->update( - CFactory::_('Customcode')->update( - base64_decode( - $field->initiator_on_get_model - ) - ), CFactory::_('Placeholder')->active - ) - ); - } - // set the field modeling - $field->model_field['save'] = explode( - PHP_EOL, CFactory::_('Placeholder')->update( - CFactory::_('Customcode')->update( - base64_decode($field->on_save_model_field) - ), CFactory::_('Placeholder')->active - ) - ); - $field->model_field['get'] = explode( - PHP_EOL, CFactory::_('Placeholder')->update( - CFactory::_('Customcode')->update( - base64_decode($field->on_get_model_field) - ), CFactory::_('Placeholder')->active - ) - ); - // remove the original values - unset($field->on_save_model_field, $field->on_get_model_field, $field->initiator_on_save_model, $field->initiator_on_get_model); - } - - // get the last used version - $field->history = $this->getHistoryWatch('field', $id); - - // Trigger Event: jcb_ce_onAfterModelFieldData - CFactory::_J('Event')->trigger( - 'jcb_ce_onAfterModelFieldData', - array(&$this->componentContext, &$field) - ); - - $this->_fieldData[$id] = $field; - } - else - { - return false; - } - } - // check if the script should be added to the view each time this field is called - if ($id > 0 && isset($this->_fieldData[$id])) - { - // check if we should load scripts for single view - if (StringHelper::check($name_single) - && !isset($this->customFieldScript[$name_single][$id])) - { - // add_javascript_view_footer - if ($this->_fieldData[$id]->add_javascript_view_footer == 1 - && StringHelper::check( - $this->_fieldData[$id]->javascript_view_footer - )) - { - $convert__ = true; - if (isset($this->_fieldData[$id]->javascript_view_footer_decoded) - && $this->_fieldData[$id]->javascript_view_footer_decoded) - { - $convert__ = false; - } - CFactory::_('Customcode.Dispenser')->set( - $this->_fieldData[$id]->javascript_view_footer, - 'view_footer', - $name_single, - null, - array( - 'table' => 'field', - 'id' => (int) $id, - 'field' => 'javascript_view_footer', - 'type' => 'js', - 'prefix' => PHP_EOL), - $convert__, - $convert__, - true - ); - if (!isset($this->_fieldData[$id]->javascript_view_footer_decoded)) - { - $this->_fieldData[$id]->javascript_view_footer_decoded - = true; - } - if (strpos( - $this->_fieldData[$id]->javascript_view_footer, - "token" - ) !== false - || strpos( - $this->_fieldData[$id]->javascript_view_footer, - "task=ajax" - ) !== false) - { - if (!isset(CFactory::_('Customcode.Dispenser')->hub['token'])) - { - CFactory::_('Customcode.Dispenser')->hub['token'] = []; - } - if (!isset(CFactory::_('Customcode.Dispenser')->hub['token'][$name_single]) - || !CFactory::_('Customcode.Dispenser')->hub['token'][$name_single]) - { - CFactory::_('Customcode.Dispenser')->hub['token'][$name_single] - = true; - } - } - } - - // add_css_view - if ($this->_fieldData[$id]->add_css_view == 1) - { - $convert__ = true; - if (isset($this->_fieldData[$id]->css_view_decoded) - && $this->_fieldData[$id]->css_view_decoded) - { - $convert__ = false; - } - CFactory::_('Customcode.Dispenser')->set( - $this->_fieldData[$id]->css_view, - 'css_view', - $name_single, - null, - array('prefix' => PHP_EOL), - $convert__, - $convert__, - true - ); - if (!isset($this->_fieldData[$id]->css_view_decoded)) - { - $this->_fieldData[$id]->css_view_decoded = true; - } - } - } - // check if we should load scripts for list views - if (StringHelper::check($name_list) - && !isset($this->customFieldScript[$name_list][$id])) - { - // add_javascript_views_footer - if ($this->_fieldData[$id]->add_javascript_views_footer == 1 - && StringHelper::check( - $this->_fieldData[$id]->javascript_views_footer - )) - { - $convert__ = true; - if (isset($this->_fieldData[$id]->javascript_views_footer_decoded) - && $this->_fieldData[$id]->javascript_views_footer_decoded) - { - $convert__ = false; - } - CFactory::_('Customcode.Dispenser')->set( - $this->_fieldData[$id]->javascript_views_footer, - 'views_footer', - $name_single, - null, - array( - 'table' => 'field', - 'id' => (int) $id, - 'field' => 'javascript_views_footer', - 'type' => 'js', - 'prefix' => PHP_EOL), - $convert__, - $convert__, - true - ); - if (!isset($this->_fieldData[$id]->javascript_views_footer_decoded)) - { - $this->_fieldData[$id]->javascript_views_footer_decoded - = true; - } - if (strpos( - $this->_fieldData[$id]->javascript_views_footer, - "token" - ) !== false - || strpos( - $this->_fieldData[$id]->javascript_views_footer, - "task=ajax" - ) !== false) - { - if (!isset(CFactory::_('Customcode.Dispenser')->hub['token'])) - { - CFactory::_('Customcode.Dispenser')->hub['token'] = []; - } - if (!isset(CFactory::_('Customcode.Dispenser')->hub['token'][$name_list]) - || !CFactory::_('Customcode.Dispenser')->hub['token'][$name_list]) - { - CFactory::_('Customcode.Dispenser')->hub['token'][$name_list] - = true; - } - } - } - // add_css_views - if ($this->_fieldData[$id]->add_css_views == 1) - { - $convert__ = true; - if (isset($this->_fieldData[$id]->css_views_decoded) - && $this->_fieldData[$id]->css_views_decoded) - { - $convert__ = false; - } - CFactory::_('Customcode.Dispenser')->set( - $this->_fieldData[$id]->css_views, - 'css_views', - $name_single, - null, - array('prefix' => PHP_EOL), - $convert__, - $convert__, - true - ); - if (!isset($this->_fieldData[$id]->css_views_decoded)) - { - $this->_fieldData[$id]->css_views_decoded = true; - } - } - } - // add this only once to single view. - $this->customFieldScript[$name_single][$id] = true; - // add this only once to list view. - $this->customFieldScript[$name_list][$id] = true; - } - if ($id > 0 && isset($this->_fieldData[$id])) - { - // return the found field data - return $this->_fieldData[$id]; - } - - return false; + return CFactory::_('Field.Data')->get($id, $name_single, $name_list); } /** @@ -4104,55 +3685,11 @@ class Get * @param string $amicably The peaceful resolve * * @return void - * + * @deprecated 3.3 Use CFactory::_('Field')->set($field, $singleViewName, $listViewName, $amicably); */ - public function setFieldDetails(&$field, $singleViewName = null, - $listViewName = null, $amicably = '' - ) + public function setFieldDetails(&$field, $singleViewName = null, $listViewName = null, $amicably = '') { - // set hash - static $hash = 123467890; - // load hash if not found - if (!isset($field['hash'])) - { - $field['hash'] = md5($field['field'] . $hash); - // increment hash - $hash++; - } - // set the settings - if (!isset($field['settings'])) - { - $field['settings'] = $this->getFieldData( - $field['field'], $singleViewName, $listViewName - ); - } - // set real field name - if (!isset($field['base_name'])) - { - $field['base_name'] = $this->getFieldName($field); - } - // set code name for field type - if (!isset($field['type_name'])) - { - $field['type_name'] = $this->getFieldType($field); - } - // check if value is array - if (isset($field['permission']) - && !ArrayHelper::check( - $field['permission'] - ) - && is_numeric($field['permission']) - && $field['permission'] > 0) - { - $field['permission'] = array($field['permission']); - } - // set unique name keeper - if ($listViewName) - { - $this->setUniqueNameCounter( - $field['base_name'], $listViewName . $amicably - ); - } + CFactory::_('Field')->set($field, $singleViewName, $listViewName, $amicably); } /** @@ -4174,7 +3711,7 @@ class Get as $order_field ) { - if (($order_field_name = $this->getFieldDatabaseName( + if (($order_field_name = CFactory::_('Field.Database.Name')->get( $nameListCode, $order_field['field'] )) !== false) { @@ -4202,52 +3739,11 @@ class Get * @param string $targetArea The area being targeted * * @return string - * + * @deprecated 3.3 Use CFactory::_('Field.Database.Name')->get($nameListCode, $fieldId, $targetArea); */ - public function getFieldDatabaseName($nameListCode, int $fieldId, - $targetArea = 'listBuilder' - ) + public function getFieldDatabaseName($nameListCode, int $fieldId, $targetArea = 'builder.list') { - if (isset($this->{$targetArea}[$nameListCode])) - { - if ($fieldId < 0) - { - switch ($fieldId) - { - case -1: - return 'a.id'; - case -2: - return 'a.ordering'; - case -3: - return 'a.published'; - } - } - foreach ($this->{$targetArea}[$nameListCode] as $field) - { - if ($field['id'] == $fieldId) - { - // now check if this is a category - if ($field['type'] === 'category') - { - return 'c.title'; - } - // set the custom code - elseif (ArrayHelper::check( - $field['custom'] - )) - { - return $field['custom']['db'] . "." - . $field['custom']['text']; - } - else - { - return 'a.' . $field['code']; - } - } - } - } - - return false; + return CFactory::_('Field.Database.Name')->get($nameListCode, $fieldId, $targetArea); } /** @@ -4256,92 +3752,11 @@ class Get * @param object $field The field object * * @return string Success returns field type - * + * @deprecated 3.3 Use CFactory::_('Field.Type.Name')->get($field); */ public function getFieldType(&$field) { - // check if we have done this already - if (isset($field['type_name'])) - { - return $field['type_name']; - } - // check that we have the poperties - if (isset($field['settings']) - && ObjectHelper::check( - $field['settings'] - ) - && isset($field['settings']->properties) - && ArrayHelper::check( - $field['settings']->properties - )) - { - // search for own custom fields - if (strpos($field['settings']->type_name, '@') !== false) - { - // set own custom field - $field['settings']->own_custom = $field['settings']->type_name; - $field['settings']->type_name = 'Custom'; - } - // set the type name - $type_name = TypeHelper::safe( - $field['settings']->type_name - ); - // if custom (we must use the xml value) - if (strtolower($type_name) === 'custom' - || strtolower($type_name) === 'customuser') - { - $type = TypeHelper::safe( - GetHelper::between( - $field['settings']->xml, 'type="', '"' - ) - ); - } - else - { - // loop over properties looking for the type value - foreach ($field['settings']->properties as $property) - { - if ($property['name'] - === 'type') // type field is never ajustable (unless custom) - { - // force the default value - if (isset($property['example']) - && StringHelper::check( - $property['example'] - )) - { - $type = TypeHelper::safe( - $property['example'] - ); - } - // fall back on the xml settings (not ideal) - else - { - $type = TypeHelper::safe( - GetHelper::between( - $field['settings']->xml, 'type="', '"' - ) - ); - } - // exit foreach loop - break; - } - } - } - // check if the value is set - if (isset($type) && StringHelper::check($type)) - { - return $type; - } - // fallback on type name set in name field (not ideal) - else - { - return $type_name; - } - } - - // fall back to text - return 'text'; + return CFactory::_('Field.Type.Name')->get($field); } /** @@ -4352,147 +3767,11 @@ class Get * @param string $amicably The peaceful resolve (for fields in subforms in same view :) * * @return string Success returns field name - * + * @deprecated 3.3 Use CFactory::_('Field.Name')->get($field, $listViewName, $amicably); */ public function getFieldName(&$field, $listViewName = null, $amicably = '') { - // return the unique name if already set - if (StringHelper::check($listViewName) - && isset($field['hash']) - && isset( - $this->uniqueFieldNames[$listViewName . $amicably - . $field['hash']] - )) - { - return $this->uniqueFieldNames[$listViewName . $amicably - . $field['hash']]; - } - // always make sure we have a field name and type - if (!isset($field['settings']) || !isset($field['settings']->type_name) - || !isset($field['settings']->name)) - { - return 'error'; - } - // set the type name - $type_name = TypeHelper::safe( - $field['settings']->type_name - ); - // set the name of the field - $name = FieldHelper::safe($field['settings']->name); - // check that we have the properties - if (ArrayHelper::check($field['settings']->properties)) - { - foreach ($field['settings']->properties as $property) - { - if ($property['name'] === 'name') - { - // if category then name must be catid (only one per view) - if ($type_name === 'category') - { - // quick check if this is a category linked to view page - $requeSt_id = GetHelper::between( - $field['settings']->xml, 'name="', '"' - ); - if (strpos($requeSt_id, '_request_id') !== false - || strpos($requeSt_id, '_request_catid') !== false) - { - // keep it then, don't change - $name = CFactory::_('Placeholder')->update( - $requeSt_id, CFactory::_('Placeholder')->active - ); - } - else - { - $name = 'catid'; - } - // if list view name is set - if (StringHelper::check($listViewName)) - { - // check if we should use another Text Name as this views name - $otherName = CFactory::_('Placeholder')->update( - GetHelper::between( - $field['settings']->xml, 'othername="', '"' - ), CFactory::_('Placeholder')->active - ); - $otherViews = CFactory::_('Placeholder')->update( - GetHelper::between( - $field['settings']->xml, 'views="', '"' - ), CFactory::_('Placeholder')->active - ); - $otherView = CFactory::_('Placeholder')->update( - GetHelper::between( - $field['settings']->xml, 'view="', '"' - ), CFactory::_('Placeholder')->active - ); - // This is to link other view category - if (StringHelper::check($otherName) - && StringHelper::check( - $otherViews - ) - && StringHelper::check( - $otherView - )) - { - // set other category details - $this->catOtherName[$listViewName] = array( - 'name' => FieldHelper::safe( - $otherName - ), - 'views' => StringHelper::safe( - $otherViews - ), - 'view' => StringHelper::safe( - $otherView - ) - ); - } - } - } - // if tag is set then enable all tag options for this view (only one per view) - elseif ($type_name === 'tag') - { - $name = 'tags'; - } - // if the field is set as alias it must be called alias - elseif (isset($field['alias']) && $field['alias']) - { - $name = 'alias'; - } - else - { - // get value from xml - $xml = FieldHelper::safe( - CFactory::_('Placeholder')->update( - GetHelper::between( - $field['settings']->xml, 'name="', '"' - ), CFactory::_('Placeholder')->active - ) - ); - // check if a value was found - if (StringHelper::check($xml)) - { - $name = $xml; - } - } - // exit foreach loop - break; - } - } - } - // return the value unique - if (StringHelper::check($listViewName) - && isset($field['hash'])) - { - $this->uniqueFieldNames[$listViewName . $amicably . $field['hash']] - = $this->uniqueName($name, $listViewName . $amicably); - - // now return the unique name - return $this->uniqueFieldNames[$listViewName . $amicably - . $field['hash']]; - } - - // fall back to global - return $name; + return CFactory::_('Field.Name')->get($field, $listViewName, $amicably); } /** @@ -4502,26 +3781,11 @@ class Get * @param string $view The name of the view * * @return void - * + * @deprecated Use CFactory::_('Field.Unique.Name')->set($name, $view); */ protected function setUniqueNameCounter($name, $view) { - if (!isset($this->uniqueNames[$view])) - { - $this->uniqueNames[$view] = array(); - $this->uniqueNames[$view]['counter'] = array(); - $this->uniqueNames[$view]['names'] = array(); - } - if (!isset($this->uniqueNames[$view]['counter'][$name])) - { - $this->uniqueNames[$view]['counter'][$name] = 1; - - return; - } - // count how many times the field is used - $this->uniqueNames[$view]['counter'][$name]++; - - return; + CFactory::_('Field.Unique.Name')->set($name, $view); } /** @@ -4531,36 +3795,19 @@ class Get * @param string $view The name of the view * * @return string the name - * + * @deprecated */ protected function uniqueName($name, $view) { - // only increment if the field name is used multiple times - if (isset($this->uniqueNames[$view]['counter'][$name]) - && $this->uniqueNames[$view]['counter'][$name] > 1) - { - $counter = 1; - // set the unique name - $uniqueName = FieldHelper::safe( - $name . '_' . $counter - ); - while (isset($this->uniqueNames[$view]['names'][$uniqueName])) - { - // increment the number - $counter++; - // try again - $uniqueName = FieldHelper::safe( - $name . '_' . $counter - ); - } - // set the new name number - $this->uniqueNames[$view]['names'][$uniqueName] = $counter; - - // return the unique name - return $uniqueName; - } - - return $name; + // set notice that we could not get a valid string from the target + $this->app->enqueueMessage( + JText::sprintf('

%s Warning

', __CLASS__), 'Error' + ); + $this->app->enqueueMessage( + JText::sprintf( + 'Use of a deprecated method (%s)!', __METHOD__ + ), 'Error' + ); } /** @@ -4602,7 +3849,7 @@ class Get foreach ($results as $_nr => &$result) { // Trigger Event: jcb_ce_onBeforeModelDynamicGetData - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeModelDynamicGetData', array(&$this->componentContext, &$result, &$result->id, &$view_code, &$context) ); @@ -5117,7 +4364,7 @@ class Get $result->plugin_events = ''; } // Trigger Event: jcb_ce_onAfterModelDynamicGetData - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterModelDynamicGetData', array(&$this->componentContext, &$result, &$result->id, &$view_code, &$context) ); @@ -5475,83 +4722,12 @@ class Get * @param string $type The type of item * @param int $id The item ID * - * @return oject The history - * + * @return object The history + * @deprecated 3.3 Use CFactory::_('History')->get($type, $id); */ protected function getHistoryWatch($type, $id) { - // quick class object to store old history object - $this->tmpHistory = null; - // Create a new query object. - $query = $this->db->getQuery(true); - - $query->select('h.*'); - $query->from('#__ucm_history AS h'); - $query->where( - $this->db->quoteName('h.ucm_item_id') . ' = ' . (int) $id - ); - // Join over the content type for the type id - $query->join( - 'LEFT', '#__content_types AS ct ON ct.type_id = h.ucm_type_id' - ); - $query->where( - 'ct.type_alias = ' . $this->db->quote( - 'com_componentbuilder.' . $type - ) - ); - $query->order('h.save_date DESC'); - $this->db->setQuery($query, 0, 1); - $this->db->execute(); - if ($this->db->getNumRows()) - { - // new version of this item found - // so we need to mark it as the last compiled version - $newActive = $this->db->loadObject(); - // set the new version watch - $this->setHistoryWatch($newActive, 1); - } - // Get last compiled verion - $query = $this->db->getQuery(true); - - $query->select('h.*'); - $query->from('#__ucm_history AS h'); - $query->where( - $this->db->quoteName('h.ucm_item_id') . ' = ' . (int) $id - ); - $query->where('h.keep_forever = 1'); - $query->where('h.version_note LIKE ' . $this->db->quote('%component%')); - // make sure it does not return the active version - if (isset($newActive) && isset($newActive->version_id)) - { - $query->where('h.version_id != ' . (int) $newActive->version_id); - } - // Join over the content type for the type id - $query->join( - 'LEFT', '#__content_types AS ct ON ct.type_id = h.ucm_type_id' - ); - $query->where( - 'ct.type_alias = ' . $this->db->quote( - 'com_componentbuilder.' . $type - ) - ); - $query->order('h.save_date DESC'); - $this->db->setQuery($query); - $this->db->execute(); - if ($this->db->getNumRows()) - { - // the old active version was found - // so we may need to do an SQL update - // and unmark the old compiled version - $oldActives = $this->db->loadObjectList(); - foreach ($oldActives as $oldActive) - { - // remove old version watch - $this->setHistoryWatch($oldActive, 0); - } - } - - // return the last used history record or null. - return $this->tmpHistory; + return CFactory::_('History')->get($type, $id); } /** @@ -5564,73 +4740,19 @@ class Get * @param string $type The type of item * * @return bool - * + * @deprecated 3.3 */ protected function setHistoryWatch($object, $action) { - // check the note - if (JsonHelper::check($object->version_note)) - { - $version_note = json_decode($object->version_note, true); - } - else - { - $version_note = array('component' => array()); - } - // set watch - switch ($action) - { - case 0: - // remove watch - if (isset($version_note['component']) - && ($key = array_search( - CFactory::_('Config')->component_id, $version_note['component'] - )) !== false) - { - // last version that was used to build/compile - $this->tmpHistory = json_decode($object->version_data); - // remove it from this component - unset($version_note['component'][$key]); - } - else - { - // since it was not found, no need to update anything - return true; - } - break; - case 1: - // add watch - if (!in_array(CFactory::_('Config')->component_id, $version_note['component'])) - { - $version_note['component'][] = CFactory::_('Config')->component_id; - } - else - { - // since it is there already, no need to update anything - return true; - } - break; - } - // check if we need to still keep this locked - if (isset($version_note['component']) - && ArrayHelper::check($version_note['component'])) - { - // insure component ids are only added once per item - $version_note['component'] = array_unique( - $version_note['component'] - ); - // we may change this, little risky (but since JCB does not have history notes it should be okay for now) - $object->version_note = json_encode($version_note); - $object->keep_forever = '1'; - } - else - { - $object->version_note = ''; - $object->keep_forever = '0'; - } - - // run the update - return $this->db->updateObject('#__ucm_history', $object, 'version_id'); + // set notice that we could not get a valid string from the target + $this->app->enqueueMessage( + JText::sprintf('

%s Warning

', __CLASS__), 'Error' + ); + $this->app->enqueueMessage( + JText::sprintf( + 'Use of a deprecated method (%s)!', __METHOD__ + ), 'Error' + ); } /** @@ -6212,7 +5334,7 @@ class Get function ($array) { $array['alias'] = 0; $array['title'] = 0; - $array['settings'] = $this->getFieldData( + $array['settings'] = CFactory::_('Field.Data')->get( $array['field'] ); @@ -8134,7 +7256,7 @@ class Get $field['alias'] = 0; $field['title'] = 0; // set the field details - $this->setFieldDetails( + CFactory::_('Field')->set( $field, $key, $key, $unique ); // update the default if set @@ -8196,7 +7318,7 @@ class Get foreach ($form['fields'] as $field) { // so first we lock the field name in - $this->getFieldName( + CFactory::_('Field.Name')->get( $field, $module->key, $unique ); // add the fields to the global form file builder @@ -8223,7 +7345,7 @@ class Get foreach ($form['fields'] as $field) { // so first we lock the field name in - $this->getFieldName( + CFactory::_('Field.Name')->get( $field, $module->key, $unique ); // add the fields to the config builder @@ -9002,7 +8124,7 @@ class Get $field['alias'] = 0; $field['title'] = 0; // set the field details - $this->setFieldDetails( + CFactory::_('Field')->set( $field, $key, $key, $unique ); // update the default if set @@ -9064,7 +8186,7 @@ class Get foreach ($form['fields'] as $field) { // so first we lock the field name in - $this->getFieldName( + CFactory::_('Field.Name')->get( $field, $plugin->key, $unique ); // add the fields to the global form file builder @@ -9091,7 +8213,7 @@ class Get foreach ($form['fields'] as $field) { // so first we lock the field name in - $this->getFieldName( + CFactory::_('Field.Name')->get( $field, $plugin->key, $unique ); // add the fields to the config builder diff --git a/admin/helpers/compiler/b_Structure.php b/admin/helpers/compiler/b_Structure.php index 8f3da1daa..44cd7c12f 100644 --- a/admin/helpers/compiler/b_Structure.php +++ b/admin/helpers/compiler/b_Structure.php @@ -436,7 +436,7 @@ class Structure extends Get // set the Joomla Version Data $this->joomlaVersionData = $this->setJoomlaVersionData(); // Trigger Event: jcb_ce_onAfterSetJoomlaVersionData - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterSetJoomlaVersionData', array(&$this->componentContext, &$this->joomlaVersionData) ); @@ -477,7 +477,7 @@ class Structure extends Get // for plugin event TODO change event api signatures $this->powers = CFactory::_('Power')->active; // Trigger Event: jcb_ce_onBeforeSetModules - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBuildPowers', array(&$this->componentContext, &$this->powers) ); @@ -590,7 +590,7 @@ class Structure extends Get if (ArrayHelper::check($this->joomlaModules)) { // Trigger Event: jcb_ce_onBeforeSetModules - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBuildModules', array(&$this->componentContext, &$this->joomlaModules) ); @@ -1171,7 +1171,7 @@ class Structure extends Get if (ArrayHelper::check($this->joomlaPlugins)) { // Trigger Event: jcb_ce_onBeforeSetPlugins - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBuildPlugins', array(&$this->componentContext, &$this->joomlaPlugins) ); @@ -1587,7 +1587,7 @@ class Structure extends Get if (ArrayHelper::check($this->libraries)) { // Trigger Event: jcb_ce_onBeforeSetLibraries - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeSetLibraries', array(&$this->componentContext, &$this->libraries) ); @@ -2495,11 +2495,11 @@ class Structure extends Get } } // check if this has validation that should be moved - if (isset($this->validationLinkedFields[$field['field']])) + if (CFactory::_('Registry')->get('validation.linked.' . $field['field']) !== null) { $check = md5( $path . 'rule' - . $this->validationLinkedFields[$field['field']] + . CFactory::_('Registry')->get('validation.linked.' . $field['field']) ); // lets check if we already moved this if (!isset($this->extentionTrackingFilesMoved[$check])) @@ -2507,16 +2507,16 @@ class Structure extends Get // check files exist if (File::exists( $this->componentPath . '/admin/models/rules/' - . $this->validationLinkedFields[$field['field']] + . CFactory::_('Registry')->get('validation.linked.' . $field['field']) . '.php' )) { // copy the custom field File::copy( $this->componentPath . '/admin/models/rules/' - . $this->validationLinkedFields[$field['field']] + . CFactory::_('Registry')->get('validation.linked.' . $field['field']) . '.php', $path . '/rules/' - . $this->validationLinkedFields[$field['field']] + . CFactory::_('Registry')->get('validation.linked.' . $field['field']) . '.php' ); } @@ -2555,7 +2555,7 @@ class Structure extends Get // setup the field $field = array(); $field['field'] = $id; - $this->setFieldDetails($field); + CFactory::_('Field')->set($field); // move field and rules if needed $this->moveFieldsRules($field, $path); } diff --git a/admin/helpers/compiler/c_Fields.php b/admin/helpers/compiler/c_Fields.php index 9fe5377e4..f158238f3 100644 --- a/admin/helpers/compiler/c_Fields.php +++ b/admin/helpers/compiler/c_Fields.php @@ -153,6 +153,7 @@ class Fields extends Structure * list builder * * @var array + * @deprecated 3.3 Use CFactory::_('Registry')->get('builder.list'); */ public $listBuilder = array(); @@ -609,7 +610,7 @@ class Fields extends Structure // for plugin event TODO change event api signatures $this->placeholders = CFactory::_('Placeholder')->active; // Trigger Event: jcb_ce_onBeforeBuildFields - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBuildFields', array(&$this->componentContext, &$dynamicFields, &$readOnly, &$dbkey, &$view, &$component, &$nameSingleCode, @@ -630,7 +631,7 @@ class Fields extends Structure // for plugin event TODO change event api signatures $this->placeholders = CFactory::_('Placeholder')->active; // Trigger Event: jcb_ce_onAfterBuildFields - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterBuildFields', array(&$this->componentContext, &$dynamicFields, &$readOnly, &$dbkey, &$view, &$component, &$nameSingleCode, @@ -1028,7 +1029,7 @@ class Fields extends Structure // for plugin event TODO change event api signatures $this->placeholders = CFactory::_('Placeholder')->active; // Trigger Event: jcb_ce_onBeforeBuildFields - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBuildFields', array(&$this->componentContext, &$dynamicFieldsXML, &$readOnlyXML, &$dbkey, &$view, &$component, &$nameSingleCode, @@ -1049,7 +1050,7 @@ class Fields extends Structure // for plugin event TODO change event api signatures $this->placeholders = CFactory::_('Placeholder')->active; // Trigger Event: jcb_ce_onAfterBuildFields - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterBuildFields', array(&$this->componentContext, &$dynamicFieldsXML, &$readOnlyXML, &$dbkey, &$view, &$component, &$nameSingleCode, @@ -1606,8 +1607,8 @@ class Fields extends Structure )) { // reset some values - $name = $this->getFieldName($field, $nameListCode); - $typeName = $this->getFieldType($field); + $name = CFactory::_('Field.Name')->get($field, $nameListCode); + $typeName = CFactory::_('Field.Type.Name')->get($field); $multiple = false; $langLabel = ''; $fieldSet = ''; @@ -2313,7 +2314,7 @@ class Fields extends Structure $field = array(); $field['field'] = $id; // set the field details - $this->setFieldDetails( + CFactory::_('Field')->set( $field, $nameSingleCode, $nameListCode, $_resolverKey ); @@ -2330,10 +2331,10 @@ class Fields extends Structure $fieldData['settings'] )) { - $r_name = $this->getFieldName( + $r_name = CFactory::_('Field.Name')->get( $fieldData, $nameListCode, $_resolverKey ); - $r_typeName = $this->getFieldType($fieldData); + $r_typeName = CFactory::_('Field.Type.Name')->get($fieldData); $r_multiple = false; $r_langLabel = ''; // add the tabs needed @@ -2479,7 +2480,7 @@ class Fields extends Structure $field = array(); $field['field'] = $id; // set the field details - $this->setFieldDetails( + CFactory::_('Field')->set( $field, $nameSingleCode, $nameListCode, $_resolverKey ); @@ -2496,10 +2497,10 @@ class Fields extends Structure $fieldData['settings'] )) { - $r_name = $this->getFieldName( + $r_name = CFactory::_('Field.Name')->get( $fieldData, $nameListCode, $_resolverKey ); - $r_typeName = $this->getFieldType($fieldData); + $r_typeName = CFactory::_('Field.Type.Name')->get($fieldData); $r_multiple = false; $r_langLabel = ''; // add the tabs needed @@ -3309,7 +3310,7 @@ class Fields extends Structure $field = array(); $field['field'] = $id; // set the field details - $this->setFieldDetails( + CFactory::_('Field')->set( $field, $nameSingleCode, $nameListCode, $_resolverKey ); @@ -3326,10 +3327,10 @@ class Fields extends Structure $fieldData['settings'] )) { - $r_name = $this->getFieldName( + $r_name = CFactory::_('Field.Name')->get( $fieldData, $nameListCode, $_resolverKey ); - $r_typeName = $this->getFieldType($fieldData); + $r_typeName = CFactory::_('Field.Type.Name')->get($fieldData); $r_multiple = false; $r_langLabel = ''; // get field values @@ -3493,7 +3494,7 @@ class Fields extends Structure $field = array(); $field['field'] = $id; // set the field details - $this->setFieldDetails( + CFactory::_('Field')->set( $field, $nameSingleCode, $nameListCode, $_resolverKey ); @@ -3510,10 +3511,10 @@ class Fields extends Structure $fieldData['settings'] )) { - $r_name = $this->getFieldName( + $r_name = CFactory::_('Field.Name')->get( $fieldData, $nameListCode, $_resolverKey ); - $r_typeName = $this->getFieldType($fieldData); + $r_typeName = CFactory::_('Field.Type.Name')->get($fieldData); $r_multiple = false; $r_langLabel = ''; // get field values @@ -4047,8 +4048,7 @@ class Fields extends Structure public function buildSiteFieldData($view, $field, $set, $type) { $decode = array('json', 'base64', 'basic_encryption', - 'whmcs_encryption', 'medium_encryption', - 'expert_mode'); + 'whmcs_encryption', 'medium_encryption', 'expert_mode'); $textareas = array('textarea', 'editor'); if (isset($this->siteFields[$view][$field]) && ArrayHelper::check( @@ -4392,11 +4392,11 @@ class Fields extends Structure if ($property['name'] === 'label') { if (isset($fieldAttributes['name']) - && isset($this->uniqueNames[$nameListCode]['names'][$fieldAttributes['name']])) + && CFactory::_('Registry')->get("unique.names.$nameListCode.names." . $fieldAttributes['name']) !== null) { $xmlValue .= ' (' . StringHelper::safe( - $this->uniqueNames[$nameListCode]['names'][$fieldAttributes['name']] + CFactory::_('Registry')->get("unique.names.$nameListCode.names." . $fieldAttributes['name']) ) . ')'; } } @@ -4699,7 +4699,7 @@ class Fields extends Structure || $field['list'] == 4)); // set list join $listJoin - = (isset($this->listJoinBuilder[$nameListCode][(int) $field['field']])); + = CFactory::_('Registry')->exists('builder.list_join.' . $nameListCode . '.' . (int) $field['field']); // add history to this view if (isset($view['history']) && $view['history']) { @@ -4720,12 +4720,9 @@ class Fields extends Structure // category name fix if ($typeName === 'category') { - if (isset($this->catOtherName[$nameListCode]) - && ArrayHelper::check( - $this->catOtherName[$nameListCode] - )) + if (CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.name')) { - $tempName = $this->catOtherName[$nameListCode]['name']; + $tempName = CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.name'); } else { @@ -4786,7 +4783,13 @@ class Fields extends Structure // load to list builder if ($listSwitch) { - $this->listBuilder[$nameListCode][] = array( + // check if it does not exists + if (!CFactory::_('Registry')->exists('builder.list.' . $nameListCode)) + { + CFactory::_('Registry')->set('builder.list.' . $nameListCode, []); + } + // append values + CFactory::_('Registry')->append('builder.list.' . $nameListCode, [ 'id' => (int) $field['field'], 'type' => $typeName, 'code' => $name, @@ -4802,7 +4805,8 @@ class Fields extends Structure 'custom' => $custom, 'multiple' => $multiple, 'options' => $options, - 'target' => (int) $field['list']); + 'target' => (int) $field['list'] + ]); } // build custom builder list if ($listSwitch || $listJoin) @@ -4813,8 +4817,7 @@ class Fields extends Structure // load the list join builder if ($listJoin) { - $this->listJoinBuilder[$nameListCode][(int) $field['field']] - = array( + CFactory::_('Registry')->set('builder.list_join.' . $nameListCode . '.' . (int) $field['field'], [ 'type' => $typeName, 'code' => $name, 'lang' => $listLangName, @@ -4828,24 +4831,21 @@ class Fields extends Structure : false, 'custom' => $custom, 'multiple' => $multiple, - 'options' => $options); + 'options' => $options + ]); } // update the field relations - if (isset($this->fieldRelations[$nameListCode]) - && isset($this->fieldRelations[$nameListCode][(int) $field['field']]) - && ArrayHelper::check( - $this->fieldRelations[$nameListCode][(int) $field['field']] - )) + if (($field_relations = + CFactory::_('Registry')->get('builder.field_relations.' . $nameListCode . '.' . (int) $field['field'])) !== null) { - foreach ( - $this->fieldRelations[$nameListCode][(int) $field['field']] as - $area => &$field_values - ) + $field_relations = (array) $field_relations; + foreach ($field_relations as $area => &$field_values) { $field_values['type'] = $typeName; $field_values['code'] = $name; $field_values['custom'] = $custom; } + CFactory::_('Registry')->set('builder.field_relations.' . $nameListCode . '.' . (int) $field['field'], $field_relations); } // set the hidden field of this view if ($dbSwitch && $typeName === 'hidden') @@ -4943,13 +4943,11 @@ class Fields extends Structure // setup category for this view if ($dbSwitch && $typeName === 'category') { - if (isset($this->catOtherName[$nameListCode]) - && ArrayHelper::check( - $this->catOtherName[$nameListCode] - )) + if (CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.view') + && CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.views')) { - $otherViews = $this->catOtherName[$nameListCode]['views']; - $otherView = $this->catOtherName[$nameListCode]['view']; + $otherViews = CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.views'); + $otherView = CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.view'); } else { diff --git a/admin/helpers/compiler/e_Interpretation.php b/admin/helpers/compiler/e_Interpretation.php index 0bcaa928e..17c492f56 100644 --- a/admin/helpers/compiler/e_Interpretation.php +++ b/admin/helpers/compiler/e_Interpretation.php @@ -1192,7 +1192,7 @@ class Interpretation extends Fields $modelJ = ComponentbuilderHelper::getModel('joomla_component'); $modelJ->save($newJ); // <-- to insure the history is also updated // reset the watch here - $this->getHistoryWatch('joomla_component', CFactory::_('Config')->component_id); + CFactory::_('History')->get('joomla_component', CFactory::_('Config')->component_id); // update the component update table $newU = array(); @@ -10700,7 +10700,7 @@ class Interpretation extends Fields // for plugin event TODO change event api signatures $langContent = CFactory::_('Language')->getTarget('admin'); // Trigger Event: jcb_ce_onBeforeBuildAdminLang - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBuildAdminLang', array(&$this->componentContext, &$langContent, &$this->langPrefix, &$componentName) @@ -10965,7 +10965,7 @@ class Interpretation extends Fields // for plugin event TODO change event api signatures $langContent = CFactory::_('Language')->getTarget('admin'); // Trigger Event: jcb_ce_onAfterBuildAdminLang - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterBuildAdminLang', array(&$this->componentContext, &$langContent, &$this->langPrefix, &$componentName) @@ -10993,7 +10993,7 @@ class Interpretation extends Fields // for plugin event TODO change event api signatures $langContent = CFactory::_('Language')->getTarget('site'); // Trigger Event: jcb_ce_onBeforeBuildSiteLang - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBuildSiteLang', array(&$this->componentContext, &$langContent, &$this->langPrefix, &$componentName) @@ -11064,7 +11064,7 @@ class Interpretation extends Fields // for plugin event TODO change event api signatures $langContent = CFactory::_('Language')->getTarget('site'); // Trigger Event: jcb_ce_onAfterBuildSiteLang - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterBuildSiteLang', array(&$this->componentContext, &$langContent, &$this->langPrefix, &$componentName) @@ -11092,7 +11092,7 @@ class Interpretation extends Fields // for plugin event TODO change event api signatures $langContent = CFactory::_('Language')->getTarget('sitesys'); // Trigger Event: jcb_ce_onBeforeBuildSiteSysLang - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBuildSiteSysLang', array(&$this->componentContext, &$langContent, &$this->langPrefix, &$componentName) @@ -11124,7 +11124,7 @@ class Interpretation extends Fields // for plugin event TODO change event api signatures $langContent = CFactory::_('Language')->getTarget('sitesys'); // Trigger Event: jcb_ce_onAfterBuildSiteSysLang - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterBuildSiteSysLang', array(&$this->componentContext, &$langContent, &$this->langPrefix, &$componentName) @@ -11152,7 +11152,7 @@ class Interpretation extends Fields // for plugin event TODO change event api signatures $langContent = CFactory::_('Language')->getTarget('adminsys'); // Trigger Event: jcb_ce_onBeforeBuildAdminSysLang - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBuildAdminSysLang', array(&$this->componentContext, &$langContent, &$this->langPrefix, &$componentName) @@ -11173,7 +11173,7 @@ class Interpretation extends Fields // for plugin event TODO change event api signatures $langContent = CFactory::_('Language')->getTarget('adminsys'); // Trigger Event: jcb_ce_onAfterBuildAdminSysLang - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterBuildAdminSysLang', array(&$this->componentContext, &$langContent, &$this->langPrefix, &$componentName) @@ -11275,10 +11275,7 @@ class Interpretation extends Fields */ public function setListBody($nameSingleCode, $nameListCode) { - if (isset($this->listBuilder[$nameListCode]) - && ArrayHelper::check( - $this->listBuilder[$nameListCode] - )) + if (($items = CFactory::_('Registry')->get('builder.list.' . $nameListCode)) !== null) { // component helper name $Helper = $this->fileContentStatic[Placefix::_h('Component')] . 'Helper'; @@ -11398,7 +11395,7 @@ class Interpretation extends Fields $doNotEscape = true; } // start adding the dynamic - foreach ($this->listBuilder[$nameListCode] as $item) + foreach ($items as $item) { // check if target is admin list if (1 == $item['target'] || 3 == $item['target']) @@ -11524,20 +11521,19 @@ class Interpretation extends Fields ) { // check if we have relation fields - if (isset($this->fieldRelations[$nameListCode]) - && isset($this->fieldRelations[$nameListCode][(int) $item['id']]) - && isset($this->fieldRelations[$nameListCode][(int) $item['id']][2])) + if (($field_relations = + CFactory::_('Registry')->get('builder.field_relations.' . $nameListCode . '.' . (int) $item['id'] . '.2')) !== null) { // set the fields array $field = array(); // use custom code $useCustomCode - = (isset($this->fieldRelations[$nameListCode][(int) $item['id']][2]['join_type']) - && $this->fieldRelations[$nameListCode][(int) $item['id']][2]['join_type'] + = (isset($field_relations['join_type']) + && $field_relations['join_type'] == 2 - && isset($this->fieldRelations[$nameListCode][(int) $item['id']][2]['set']) + && isset($field_relations['set']) && StringHelper::check( - $this->fieldRelations[$nameListCode][(int) $item['id']][2]['set'] + $field_relations['set'] )); // load the main list view field $field['[field=' . (int) $item['id'] . ']'] = $this->getListItem( @@ -11552,34 +11548,28 @@ class Interpretation extends Fields . $item['code']; } // now load the relations - if (isset($this->fieldRelations[$nameListCode][(int) $item['id']][2]['joinfields']) - && ArrayHelper::check( - $this->fieldRelations[$nameListCode][(int) $item['id']][2]['joinfields'] - )) + if (isset($field_relations['joinfields']) + && ArrayHelper::check($field_relations['joinfields'])) { - foreach ( - $this->fieldRelations[$nameListCode][(int) $item['id']][2]['joinfields'] - as $join - ) + foreach ($field_relations['joinfields'] as $join) { $blankClass = ''; - if (isset($this->listJoinBuilder[$nameListCode]) - && isset($this->listJoinBuilder[$nameListCode][(int) $join])) + if (($join_item = + CFactory::_('Registry')->get('builder.list_join.' . $nameListCode . '.' . (int) $join)) !== null) { // code block $field['[field=' . (int) $join . ']'] = $this->getListItem( - $this->listJoinBuilder[$nameListCode][(int) $join], - $nameSingleCode, $nameListCode, $blankClass, + $join_item, $nameSingleCode, $nameListCode, $blankClass, $doNotEscape, $coreLoad, $core, false, $ref, $escape, $user, $refview ); // code name - if (isset($this->listJoinBuilder[$nameListCode][(int) $join]['code']) + if (isset($join_item['code']) && $useCustomCode) { $field['$item->{' . (int) $join . '}'] = '$item->' - . $this->listJoinBuilder[$nameListCode][(int) $join]['code']; + . $join_item['code']; } } } @@ -11592,18 +11582,18 @@ class Interpretation extends Fields . CFactory::_('Placeholder')->update( str_replace( array_keys($field), array_values($field), - $this->fieldRelations[$nameListCode][(int) $item['id']][2]['set'] + $field_relations['set'] ), $this->placeholders ) . PHP_EOL . Indent::_(3) . ""; } - elseif (isset($this->fieldRelations[$nameListCode][(int) $item['id']]['set']) + elseif (isset($field_relations['set']) && StringHelper::check( - $this->fieldRelations[$nameListCode][(int) $item['id']][2]['set'] + $field_relations['set'] )) { // concatenate return PHP_EOL . Indent::_(3) . "
" . implode( - $this->fieldRelations[$nameListCode][(int) $item['id']][2]['set'], + $field_relations['set'], $field ) . PHP_EOL . Indent::_(3) . "
"; } @@ -12146,7 +12136,7 @@ class Interpretation extends Fields $body[] = ""; } // Trigger Event: jcb_ce_onSetDefaultViewsBodyTop - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onSetDefaultViewsBodyTop', array(&$this, &$body, @@ -12167,7 +12157,7 @@ class Interpretation extends Fields $body[] = Indent::_(1) . "
"; $body[] = ""; // Trigger Event: jcb_ce_onSetDefaultViewsFormTop - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onSetDefaultViewsFormTop', array(&$this, &$body, @@ -12263,7 +12253,7 @@ class Interpretation extends Fields . ""; $body[] = Indent::_(1) . ""; // Trigger Event: jcb_ce_onSetDefaultViewsFormBottom - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onSetDefaultViewsFormBottom', array(&$this, &$body, @@ -12272,7 +12262,7 @@ class Interpretation extends Fields ); $body[] = ""; // Trigger Event: jcb_ce_onSetDefaultViewsBodyBottom - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onSetDefaultViewsBodyBottom', array(&$this, &$body, @@ -12293,10 +12283,7 @@ class Interpretation extends Fields */ public function setListHead($nameSingleCode, $nameListCode) { - if (isset($this->listBuilder[$nameListCode]) - && ArrayHelper::check( - $this->listBuilder[$nameListCode] - )) + if (($items = CFactory::_('Registry')->get('builder.list.' . $nameListCode)) !== null) { // set the JHtml values based on filter type $jhtml_sort = "grid.sort"; @@ -12354,20 +12341,17 @@ class Interpretation extends Fields // set footer Column number $this->listColnrBuilder[$nameListCode] = 4; // build the dynamic fields - foreach ($this->listBuilder[$nameListCode] as $item) + foreach ($items as $item) { // check if target is admin list if (1 == $item['target'] || 3 == $item['target']) { // check if we have an over-ride - if (isset($this->listHeadOverRide[$nameListCode]) - && ArrayHelper::check( - $this->listHeadOverRide[$nameListCode] - ) - && isset($this->listHeadOverRide[$nameListCode][$item['id']])) + if (($list_head_override = CFactory::_('Registry')->get('builder.list_head_override.' . + $nameListCode . '.' . (int) $item['id'])) + !== null) { - $item['lang'] - = $this->listHeadOverRide[$nameListCode][$item['id']]; + $item['lang'] = $list_head_override; } $class = 'nowrap hidden-phone'; if ($item['link']) @@ -14074,10 +14058,7 @@ class Interpretation extends Fields $refview ) { - if (isset($this->listBuilder[$nameListCode]) - && ArrayHelper::check( - $this->listBuilder[$nameListCode] - )) + if (($items = CFactory::_('Registry')->get('builder.list.' . $nameListCode)) !== null) { // component helper name $Helper = $this->fileContentStatic[Placefix::_h('Component')] . 'Helper'; @@ -14112,7 +14093,7 @@ class Interpretation extends Fields $doNotEscape = true; } // start adding the dynamic - foreach ($this->listBuilder[$nameListCode] as $item) + foreach ($items as $item) { // check if target is linked list view if (1 == $item['target'] || 4 == $item['target']) @@ -14267,10 +14248,7 @@ class Interpretation extends Fields $addNewButon, $refview ) { - if (isset($this->listBuilder[$nameListCode]) - && ArrayHelper::check( - $this->listBuilder[$nameListCode] - )) + if (($items = CFactory::_('Registry')->get('builder.list.' . $nameListCode)) !== null) { // component helper name $Helper = $this->fileContentStatic[Placefix::_h('Component')] . 'Helper'; @@ -14376,20 +14354,17 @@ class Interpretation extends Fields // set controller for data hiding options $controller = 1; // build the dynamic fields - foreach ($this->listBuilder[$nameListCode] as $item) + foreach ($items as $item) { // check if target is linked list view if (1 == $item['target'] || 4 == $item['target']) { // check if we have an over-ride - if (isset($this->listHeadOverRide[$nameListCode]) - && ArrayHelper::check( - $this->listHeadOverRide[$nameListCode] - ) - && isset($this->listHeadOverRide[$nameListCode][$item['id']])) + if (($list_head_override = CFactory::_('Registry')->get('builder.list_head_override.' . + $nameListCode . '.' . (int) $item['id'])) + !== null) { - $item['lang'] - = $this->listHeadOverRide[$nameListCode][$item['id']]; + $item['lang'] = $list_head_override; } $setin = (2 == $this->footableVersion) ? ' data-hide="phone"' : ' data-breakpoints="xs sm"'; @@ -14689,7 +14664,7 @@ class Interpretation extends Fields as $order_field ) { - if (($order_field_name = $this->getFieldDatabaseName( + if (($order_field_name = CFactory::_('Field.Database.Name')->get( $nameListCode, $order_field['field'] // We Removed This 'listJoinBuilder' as targetArea // we will keep an eye on this @@ -15277,7 +15252,7 @@ class Interpretation extends Fields as $order_field ) { - if (($order_field_name = $this->getFieldDatabaseName( + if (($order_field_name = CFactory::_('Field.Database.Name')->get( $nameListCode, $order_field['field'] )) !== false) { @@ -15831,7 +15806,7 @@ class Interpretation extends Fields as $order_field ) { - if (($order_field_name = $this->getFieldDatabaseName( + if (($order_field_name = CFactory::_('Field.Database.Name')->get( $nameListCode, $order_field['field'] )) !== false) { @@ -18924,13 +18899,11 @@ class Interpretation extends Fields $component = $this->componentCodeName; } // check if category has another name - if (isset($this->catOtherName[$nameListCode]) - && ArrayHelper::check( - $this->catOtherName[$nameListCode] - )) + if (CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.view') + && CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.views')) { - $otherViews = $this->catOtherName[$nameListCode]['views']; - $otherView = $this->catOtherName[$nameListCode]['view']; + $otherViews = CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.views'); + $otherView = CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.view'); } else { @@ -19019,13 +18992,11 @@ class Interpretation extends Fields if (0) //isset($this->categoryBuilder[$nameListCode]) && ArrayHelper::check($this->categoryBuilder[$nameListCode])) <-- remove category from check { // check if category has another name - if ($coreLoad && isset($this->catOtherName[$nameListCode]) - && ArrayHelper::check( - $this->catOtherName[$nameListCode] - )) + if (CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.view') + && CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.views')) { - $otherViews = $this->catOtherName[$nameListCode]['views']; - $otherView = $this->catOtherName[$nameListCode]['view']; + $otherViews = CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.views'); + $otherView = CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.view'); } else { @@ -19178,13 +19149,11 @@ class Interpretation extends Fields )) { // check if category has another name - if ($coreLoad && isset($this->catOtherName[$nameListCode]) - && ArrayHelper::check( - $this->catOtherName[$nameListCode] - )) + if ($coreLoad && CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.view') + && CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.views')) { - $otherViews = $this->catOtherName[$nameListCode]['views']; - $otherView = $this->catOtherName[$nameListCode]['view']; + $otherViews = CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.views'); + $otherView = CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.view'); } else { @@ -19567,13 +19536,11 @@ class Interpretation extends Fields if (0) //isset($this->categoryBuilder[$nameListCode]) && ArrayHelper::check($this->categoryBuilder[$nameListCode])) <-- remove category from check { // check if category has another name - if ($coreLoad && isset($this->catOtherName[$nameListCode]) - && ArrayHelper::check( - $this->catOtherName[$nameListCode] - )) + if ($coreLoad && CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.view') + && CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.views')) { - $otherViews = $this->catOtherName[$nameListCode]['views']; - $otherView = $this->catOtherName[$nameListCode]['view']; + $otherViews = CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.views'); + $otherView = CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.view'); } else { @@ -20184,13 +20151,11 @@ class Interpretation extends Fields if (0) //isset($this->categoryBuilder[$nameListCode]) && ArrayHelper::check($this->categoryBuilder[$nameListCode])) <-- remove category from check { // check if category has another name - if ($coreLoad && isset($this->catOtherName[$nameListCode]) - && ArrayHelper::check( - $this->catOtherName[$nameListCode] - )) + if ($coreLoad && CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.view') + && CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.views')) { - $otherViews = $this->catOtherName[$nameListCode]['views']; - $otherView = $this->catOtherName[$nameListCode]['view']; + $otherViews = CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.views'); + $otherView = CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.view'); } else { @@ -20308,13 +20273,11 @@ class Interpretation extends Fields if (0) // isset($this->categoryBuilder[$nameListCode]) && ArrayHelper::check($this->categoryBuilder[$nameListCode])) <-- remove category from check { // check if category has another name - if (isset($this->catOtherName[$nameListCode]) - && ArrayHelper::check( - $this->catOtherName[$nameListCode] - )) + if (CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.view') + && CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.views')) { - $otherViews = $this->catOtherName[$nameListCode]['views']; - $otherView = $this->catOtherName[$nameListCode]['view']; + $otherViews = CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.views'); + $otherView = CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.view'); } else { @@ -21703,14 +21666,10 @@ class Interpretation extends Fields $methodName = 'getItemsMethodListStringFixBuilder'; } // load the relations before modeling - if (isset($this->fieldRelations[$nameListCode]) - && ArrayHelper::check( - $this->fieldRelations[$nameListCode] - )) + if (($field_relations = + CFactory::_('Registry')->get('builder.field_relations.' . $nameListCode)) !== null) { - foreach ( - $this->fieldRelations[$nameListCode] as $field_id => $fields - ) + foreach ($field_relations as $field_id => $fields) { foreach ($fields as $area => $field) { @@ -22072,12 +22031,10 @@ class Interpretation extends Fields } } */ // load the relations after modeling - if (isset($this->fieldRelations[$nameListCode]) - && ArrayHelper::check( - $this->fieldRelations[$nameListCode] - )) + if (($field_relations = + CFactory::_('Registry')->get('builder.field_relations.' . $nameListCode)) !== null) { - foreach ($this->fieldRelations[$nameListCode] as $fields) + foreach ($field_relations as $fields) { foreach ($fields as $area => $field) { @@ -22437,7 +22394,7 @@ class Interpretation extends Fields break; } // Trigger Event: jcb_ce_setClassHeader - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_setClassHeader', array(&$this->componentContext, &$context, &$codeName, &$headers) @@ -22602,7 +22559,7 @@ class Interpretation extends Fields foreach ($item['joinfields'] as $join) { $field['$item->{' . (int) $join . '}'] = '$item->' - . $this->listJoinBuilder[$nameListCode][(int) $join]['code']; + . CFactory::_('Registry')->get('builder.list_join.' . $nameListCode . '.' . (int) $join . '.code'); } } // set based on join_type @@ -22917,13 +22874,11 @@ class Interpretation extends Fields $catCode = $this->categoryBuilder[$name_list]['code']; // check if category has another name - if (isset($this->catOtherName[$name_list]) - && ArrayHelper::check( - $this->catOtherName[$name_list] - )) + if (CFactory::_('Registry')->get('category.other.name.' . $name_list . '.views') + && CFactory::_('Registry')->get('category.other.name.' . $name_list . '.name')) { - $otherViews = $this->catOtherName[$name_list]['views']; - $otherNames = $this->catOtherName[$name_list]['name']; + $otherViews = CFactory::_('Registry')->get('category.other.name.' . $name_list . '.views'); + $otherNames = CFactory::_('Registry')->get('category.other.name.' . $name_list . '.name'); // build lang $langName = StringHelper::safe( $otherNames, 'W' @@ -23503,13 +23458,10 @@ class Interpretation extends Fields $view['settings']->name_list ); // check if category has another name - if (isset($this->catOtherName[$nameListCode]) - && ArrayHelper::check( - $this->catOtherName[$nameListCode] - )) + if (CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.views')) { $otherViews - = $this->catOtherName[$nameListCode]['views']; + = CFactory::_('Registry')->get('category.other.name.' . $nameListCode . '.views'); } else { @@ -24171,7 +24123,7 @@ class Interpretation extends Fields // set the custom table key $dbkey = 'g'; // Trigger Event: jcb_ce_onBeforeSetConfigFieldsets - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeSetConfigFieldsets', array(&$this->componentContext, &$timer, &$this->configFieldSets, @@ -24248,7 +24200,7 @@ class Interpretation extends Fields elseif (2 == $timer) // this is after the admin views are build { // Trigger Event: jcb_ce_onBeforeSetConfigFieldsets - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeSetConfigFieldsets', array(&$this->componentContext, &$timer, &$this->configFieldSets, @@ -24267,7 +24219,7 @@ class Interpretation extends Fields $this->setCustomControlConfigFieldsets($lang); } // Trigger Event: jcb_ce_onAfterSetConfigFieldsets - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterSetConfigFieldsets', array(&$this->componentContext, &$timer, &$this->configFieldSets, &$this->configFieldSetsCustomField, &$this->extensionsParams, @@ -26629,9 +26581,9 @@ function vdm_dkim() { // enable the loading of dynamic field sets $dynamicAddFields = array(); // Add encryption if needed - if ((isset($this->basicEncryption) && $this->basicEncryption) - || (isset($this->whmcsEncryption) && $this->whmcsEncryption) - || (isset($this->mediumEncryption) && $this->mediumEncryption) + if (CFactory::_('Config')->basic_encryption + || CFactory::_('Config')->whmcs_encryption + || CFactory::_('Config')->medium_encryption || $this->componentData->add_license || (isset($this->configFieldSetsCustomField['Encryption Settings']) && ArrayHelper::check( @@ -26649,11 +26601,9 @@ function vdm_dkim() { . '_ENCRYPTION_DESC">'; // set tab lang - if (((isset($this->basicEncryption) && $this->basicEncryption) - || (isset($this->mediumEncryption) - && $this->mediumEncryption) - || (isset($this->whmcsEncryption) - && $this->whmcsEncryption)) + if ((CFactory::_('Config')->basic_encryption + || CFactory::_('Config')->medium_encryption + || CFactory::_('Config')->whmcs_encryption) && $this->componentData->add_license && $this->componentData->license_type == 3) { @@ -26668,11 +26618,9 @@ function vdm_dkim() { // add the next dynamic option $dynamicAddFields[] = "License & Encryption Settings"; } - elseif (((isset($this->basicEncryption) && $this->basicEncryption) - || (isset($this->mediumEncryption) - && $this->mediumEncryption) - || (isset($this->whmcsEncryption) - && $this->whmcsEncryption)) + elseif ((CFactory::_('Config')->basic_encryption + || CFactory::_('Config')->medium_encryption + || CFactory::_('Config')->whmcs_encryption) && $this->componentData->add_license && $this->componentData->license_type == 2) { @@ -26725,7 +26673,7 @@ function vdm_dkim() { ); } - if (isset($this->basicEncryption) && $this->basicEncryption) + if (CFactory::_('Config')->basic_encryption) { // set field lang CFactory::_('Language')->set( @@ -26759,7 +26707,7 @@ function vdm_dkim() { $this->configFieldSets[] = Indent::_(3) . 'default=""'; $this->configFieldSets[] = Indent::_(2) . "/>"; } - if (isset($this->mediumEncryption) && $this->mediumEncryption) + if (CFactory::_('Config')->medium_encryption) { // set field lang CFactory::_('Language')->set( @@ -26802,7 +26750,7 @@ function vdm_dkim() { "Medium key path (for encryption of various fields) does not exist, or is not writable. Please check the path and update it in the global option of this component." ); } - if (isset($this->whmcsEncryption) && $this->whmcsEncryption + if (CFactory::_('Config')->whmcs_encryption || $this->componentData->add_license) { // set field lang label and description @@ -26863,7 +26811,7 @@ function vdm_dkim() { } else { - if (isset($this->whmcsEncryption) && $this->whmcsEncryption) + if (CFactory::_('Config')->whmcs_encryption) { CFactory::_('Language')->set( CFactory::_('Config')->lang_target, $lang . '_WHMCS_KEY_NOTE_LABEL', @@ -26880,7 +26828,7 @@ function vdm_dkim() { } } // add the description based on global settings - if (isset($this->whmcsEncryption) && $this->whmcsEncryption) + if (CFactory::_('Config')->whmcs_encryption) { CFactory::_('Language')->set( CFactory::_('Config')->lang_target, $lang . '_WHMCS_KEY_NOTE_DESC', @@ -27010,7 +26958,7 @@ function vdm_dkim() { $this->permissionViews = array(); // Trigger Event: jcb_ce_onBeforeBuildAccessSections - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBuildAccessSections', array(&$this->componentContext, &$this) ); @@ -27372,8 +27320,8 @@ function vdm_dkim() { $field['settings']->properties )) { - $fieldType = $this->getFieldType($field); - $fieldName = $this->getFieldName( + $fieldType = CFactory::_('Field.Type.Name')->get($field); + $fieldName = CFactory::_('Field.Name')->get( $field, $nameViews ); // loop the permission options @@ -27447,7 +27395,7 @@ function vdm_dkim() { } // Trigger Event: jcb_ce_onAfterBuildAccessSections - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterBuildAccessSections', array(&$this->componentContext, &$this) ); @@ -28175,7 +28123,7 @@ function vdm_dkim() { // for plugin event TODO change event api signatures $langContent = CFactory::_('Language')->getTarget($module->key); // Trigger Event: jcb_ce_onBeforeBuildModuleLang - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBuildModuleLang', array(&$this->componentContext, &$module, &$langContent, &$module->lang_prefix, &$module->official_name) @@ -28197,7 +28145,7 @@ function vdm_dkim() { $total = count($values); unset($values); // Trigger Event: jcb_ce_onBeforeBuildModuleLangFiles - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBuildModuleLangFiles', array(&$this->componentContext, &$module, &$this->languages['modules'], @@ -28563,7 +28511,7 @@ function vdm_dkim() { // for plugin event TODO change event api signatures $langContent = CFactory::_('Language')->getTarget($plugin->key); // Trigger Event: jcb_ce_onBeforeBuildPluginLang - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBuildPluginLang', array(&$this->componentContext, &$plugin, &$langContent, @@ -28586,7 +28534,7 @@ function vdm_dkim() { $total = count($values); unset($values); // Trigger Event: jcb_ce_onBeforeBuildPluginLangFiles - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBuildPluginLangFiles', array(&$this->componentContext, &$plugin, &$this->languages['plugins'], diff --git a/admin/helpers/compiler/f_Infusion.php b/admin/helpers/compiler/f_Infusion.php index 65dc4de66..fd9707e04 100644 --- a/admin/helpers/compiler/f_Infusion.php +++ b/admin/helpers/compiler/f_Infusion.php @@ -67,7 +67,7 @@ class Infusion extends Interpretation // for plugin event TODO change event api signatures $this->placeholders = CFactory::_('Placeholder')->active; // Trigger Event: jcb_ce_onBeforeBuildFilesContent - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBuildFilesContent', array(&$this->componentContext, &$this->componentData, &$this->fileContentStatic, &$this->fileContentDynamic, @@ -391,7 +391,7 @@ class Infusion extends Interpretation // for plugin event TODO change event api signatures $this->placeholders = CFactory::_('Placeholder')->active; // Trigger Event: jcb_ce_onBeforeBuildAdminEditViewContent - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBuildAdminEditViewContent', array(&$this->componentContext, &$view, &$nameSingleCode, @@ -641,7 +641,7 @@ class Infusion extends Interpretation // for plugin event TODO change event api signatures $this->placeholders = CFactory::_('Placeholder')->active; // Trigger Event: jcb_ce_onAfterBuildAdminEditViewContent - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterBuildAdminEditViewContent', array(&$this->componentContext, &$view, &$nameSingleCode, @@ -666,7 +666,7 @@ class Infusion extends Interpretation // for plugin event TODO change event api signatures $this->placeholders = CFactory::_('Placeholder')->active; // Trigger Event: jcb_ce_onBeforeBuildAdminListViewContent - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBuildAdminListViewContent', array(&$this->componentContext, &$view, &$nameSingleCode, @@ -982,7 +982,7 @@ class Infusion extends Interpretation // for plugin event TODO change event api signatures $this->placeholders = CFactory::_('Placeholder')->active; // Trigger Event: jcb_ce_onAfterBuildAdminListViewContent - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterBuildAdminListViewContent', array(&$this->componentContext, &$view, &$nameSingleCode, @@ -1156,7 +1156,7 @@ class Infusion extends Interpretation // for plugin event TODO change event api signatures $this->placeholders = CFactory::_('Placeholder')->active; // Trigger Event: jcb_ce_onAfterBuildAdminViewContent - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterBuildAdminViewContent', array(&$this->componentContext, &$view, &$nameSingleCode, @@ -1241,7 +1241,7 @@ class Infusion extends Interpretation // for plugin event TODO change event api signatures $this->placeholders = CFactory::_('Placeholder')->active; // Trigger Event: jcb_ce_onBeforeBuildCustomAdminViewContent - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBuildCustomAdminViewContent', array(&$this->componentContext, &$view, &$view['settings']->code, @@ -1430,7 +1430,7 @@ class Infusion extends Interpretation // for plugin event TODO change event api signatures $this->placeholders = CFactory::_('Placeholder')->active; // Trigger Event: jcb_ce_onAfterBuildCustomAdminViewContent - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterBuildCustomAdminViewContent', array(&$this->componentContext, &$view, &$view['settings']->code, @@ -1624,10 +1624,9 @@ class Infusion extends Interpretation } // build the validation rules - if (isset($this->validationRules) - && ArrayHelper::check($this->validationRules)) + if (($validationRules = CFactory::_('Registry')->_('validation.rules')) !== null) { - foreach ($this->validationRules as $rule => $_php) + foreach ($validationRules as $rule => $_php) { // setup rule file $target = array('admin' => 'a_rule_zi'); @@ -1716,7 +1715,7 @@ class Infusion extends Interpretation // for plugin event TODO change event api signatures $this->placeholders = CFactory::_('Placeholder')->active; // Trigger Event: jcb_ce_onBeforeBuildSiteViewContent - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBuildSiteViewContent', array(&$this->componentContext, &$view, &$view['settings']->code, @@ -1933,7 +1932,7 @@ class Infusion extends Interpretation // for plugin event TODO change event api signatures $this->placeholders = CFactory::_('Placeholder')->active; // Trigger Event: jcb_ce_onAfterBuildSiteViewContent - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterBuildSiteViewContent', array(&$this->componentContext, &$view, &$view['settings']->code, @@ -2089,7 +2088,7 @@ class Infusion extends Interpretation if (ObjectHelper::check($power)) { // Trigger Event: jcb_ce_onBeforeInfusePowerData - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeInfusePowerData', array(&$this->componentContext, &$power, &$this) ); @@ -2099,7 +2098,7 @@ class Infusion extends Interpretation // build the autoloader $autoloader[implode('.', $power->_namespace_prefix)] = $power->_namespace_prefix; // Trigger Event: jcb_ce_onAfterInfusePowerData - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterInfusePowerData', array(&$this->componentContext, &$power, &$this) ); @@ -2120,7 +2119,7 @@ class Infusion extends Interpretation if (ObjectHelper::check($module)) { // Trigger Event: jcb_ce_onBeforeInfuseModuleData - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeInfuseModuleData', array(&$this->componentContext, &$module, &$this) ); @@ -2150,7 +2149,7 @@ class Infusion extends Interpretation { // INSTALLCLASS $this->fileContentDynamic[$module->key][Placefix::_h('INSTALLCLASS')] - = CFactory::_J('Extension.InstallScript')->get($module); + = CFactory::_('Extension.InstallScript')->get($module); } // FIELDSET if (isset($module->form_files) @@ -2178,7 +2177,7 @@ class Infusion extends Interpretation $this->fileContentDynamic[$module->key][Placefix::_h('MAINXML')] = $this->getModuleMainXML($module); // Trigger Event: jcb_ce_onAfterInfuseModuleData - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterInfuseModuleData', array(&$this->componentContext, &$module, &$this) ); @@ -2193,7 +2192,7 @@ class Infusion extends Interpretation if (ObjectHelper::check($plugin)) { // Trigger Event: jcb_ce_onBeforeInfusePluginData - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeInfusePluginData', array(&$this->componentContext, &$plugin, &$this) ); @@ -2209,7 +2208,7 @@ class Infusion extends Interpretation { // INSTALLCLASS $this->fileContentDynamic[$plugin->key][Placefix::_h('INSTALLCLASS')] - = CFactory::_J('Extension.InstallScript')->get($plugin); + = CFactory::_('Extension.InstallScript')->get($plugin); } // FIELDSET if (isset($plugin->form_files) @@ -2237,7 +2236,7 @@ class Infusion extends Interpretation $this->fileContentDynamic[$plugin->key][Placefix::_h('MAINXML')] = $this->getPluginMainXML($plugin); // Trigger Event: jcb_ce_onAfterInfusePluginData - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterInfusePluginData', array(&$this->componentContext, &$plugin, &$this) ); @@ -2252,7 +2251,7 @@ class Infusion extends Interpretation // for plugin event TODO change event api signatures $this->placeholders = CFactory::_('Placeholder')->active; // Trigger Event: jcb_ce_onAfterBuildFilesContent - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onAfterBuildFilesContent', array(&$this->componentContext, &$this->componentData, &$this->fileContentStatic, &$this->fileContentDynamic, @@ -2438,7 +2437,7 @@ class Infusion extends Interpretation // path to INI file $getPAth = $this->templatePath . '/en-GB.com_admin.ini'; // Trigger Event: jcb_ce_onBeforeBuildAllLangFiles - CFactory::_J('Event')->trigger( + CFactory::_('Event')->trigger( 'jcb_ce_onBeforeBuildAllLangFiles', array(&$this->componentContext, &$this->languages['components'], &$this->langTag) diff --git a/admin/helpers/extrusion/b_builder.php b/admin/helpers/extrusion/b_builder.php index 49500600f..7afad4ea8 100644 --- a/admin/helpers/extrusion/b_builder.php +++ b/admin/helpers/extrusion/b_builder.php @@ -191,7 +191,7 @@ class Builder extends Mapping */ protected function setField(&$view, &$field) { - if ($fieldType = $this->getFieldType($field['fieldType'])) + if ($fieldType = CFactory::_('Field.Type.Name')->get($field['fieldType'])) { // set the field object $object = new stdClass(); diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.ini b/admin/language/en-GB/en-GB.com_componentbuilder.ini index c9bfb09f2..5556dee6f 100644 --- a/admin/language/en-GB/en-GB.com_componentbuilder.ini +++ b/admin/language/en-GB/en-GB.com_componentbuilder.ini @@ -3528,11 +3528,6 @@ COM_COMPONENTBUILDER_CONFIG_MAIL_CONFIGURATION="Mail Configuration" COM_COMPONENTBUILDER_CONFIG_MANAGE_JCB_PACKAGE_DIRECTORIES_DESCRIPTION="Here you can choose to manually select what directories should show, or turn them off altogether." COM_COMPONENTBUILDER_CONFIG_MANAGE_JCB_PACKAGE_DIRECTORIES_LABEL="Manage JCB Package Directories" COM_COMPONENTBUILDER_CONFIG_MANUAL_SELECTION="Manual Selection" -COM_COMPONENTBUILDER_CONFIG_MEDIUM_KEY_DESC="Set the full path to where the key file must be stored. Make sure it is behind the root folder of your website, so that it is not public accessible." -COM_COMPONENTBUILDER_CONFIG_MEDIUM_KEY_LABEL="Medium Key (Path)" -COM_COMPONENTBUILDER_CONFIG_MEDIUM_KEY_NOTE_DESC="When using the medium encryption option, the system generates its own key and stores it in a file at the folder/path you set here.
Never change this key once it is set, or remove the key file! DATA WILL GET CORRUPTED IF YOU DO! Also make sure the full path to where the the key file should be stored, is behind the root folder of your website/system, so that it is not public accessible. Making a backup of this key file over a secure connection is recommended!" -COM_COMPONENTBUILDER_CONFIG_MEDIUM_KEY_NOTE_LABEL="Medium Encryption" -COM_COMPONENTBUILDER_CONFIG_MEDIUM_KEY_PATH_ERROR="Medium key path (for encryption of various fields) does not exist, or is not writable. Please check the path and update it in the global option of this component." COM_COMPONENTBUILDER_CONFIG_MENU_PREFIX_DESCRIPTION="Add the prefix you would like to use. Make sure that it is HTML Character Entities since it is being used in XML." COM_COMPONENTBUILDER_CONFIG_MENU_PREFIX_HINT="»" COM_COMPONENTBUILDER_CONFIG_MENU_PREFIX_LABEL="Prefix
diff --git a/admin/layouts/power/code_left.php b/admin/layouts/power/code_left.php index 098dc960b..85ed07e9f 100644 --- a/admin/layouts/power/code_left.php +++ b/admin/layouts/power/code_left.php @@ -29,10 +29,10 @@ $fields = $displayData->get($fields_tab_layout) ?: array( 'name', 'description', 'extends', - 'implements_custom', - 'implements', - 'namespace', 'extends_custom', + 'implements', + 'implements_custom', + 'namespace', 'add_head' ); diff --git a/admin/models/power.php b/admin/models/power.php index 6c2f82742..24693b742 100644 --- a/admin/models/power.php +++ b/admin/models/power.php @@ -33,10 +33,10 @@ class ComponentbuilderModelPower extends AdminModel 'name', 'description', 'extends', - 'implements_custom', - 'implements', - 'namespace', 'extends_custom', + 'implements', + 'implements_custom', + 'namespace', 'add_head' ), 'right' => array( diff --git a/admin/sql/install.mysql.utf8.sql b/admin/sql/install.mysql.utf8.sql index 15782757b..7ab8a2050 100644 --- a/admin/sql/install.mysql.utf8.sql +++ b/admin/sql/install.mysql.utf8.sql @@ -1987,8 +1987,8 @@ INSERT INTO `#__componentbuilder_power` (`id`, `add_head`, `description`, `exten (21, 1, 'Global Unique ID Helper\r\n\r\n@since 3.0.9', '', '', '9c513baf-b279-43fd-ae29-a585c8cbc4f0', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTs=', '', '', '{\"load_selection0\":{\"load\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\"},\"load_selection1\":{\"load\":\"1f28cb53-60d9-4db1-b517-3c7dc6b429ef\"}}', 'CS8qKg0KCSAqIFJldHVybnMgYSBHVUlEdjQgc3RyaW5nDQoJICogDQoJICogVGhhbmtzIHRvIERhdmUgUGVhcnNvbiAoYW5kIG90aGVyKQ0KCSAqIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmNvbS1jcmVhdGUtZ3VpZC5waHAjMTE5MTY4IA0KCSAqDQoJICogVXNlcyB0aGUgYmVzdCBjcnlwdG9ncmFwaGljYWxseSBzZWN1cmUgbWV0aG9kDQoJICogZm9yIGFsbCBzdXBwb3J0ZWQgcGxhdGZvcm1zIHdpdGggZmFsbGJhY2sgdG8gYW4gb2xkZXIsDQoJICogbGVzcyBzZWN1cmUgdmVyc2lvbi4NCgkgKg0KCSAqIEBwYXJhbSBib29sICR0cmltDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZw0KCSAqDQoJICogQHNpbmNlICAzLjAuOQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0KCR0cmltID0gdHJ1ZSkNCgl7DQoJCS8vIFdpbmRvd3MNCgkJaWYgKGZ1bmN0aW9uX2V4aXN0cygnY29tX2NyZWF0ZV9ndWlkJykgPT09IHRydWUpDQoJCXsNCgkJCWlmICgkdHJpbSA9PT0gdHJ1ZSkNCgkJCXsNCgkJCQlyZXR1cm4gdHJpbShjb21fY3JlYXRlX2d1aWQoKSwgJ3t9Jyk7DQoJCQl9DQoJCQlyZXR1cm4gY29tX2NyZWF0ZV9ndWlkKCk7DQoJCX0NCg0KCQkvLyBzZXQgdGhlIGJyYWNlcyBpZiBuZWVkZWQNCgkJJGxicmFjZSA9ICR0cmltID8gIiIgOiBjaHIoMTIzKTsgICAgLy8gInsiDQoJCSRyYnJhY2UgPSAkdHJpbSA/ICIiIDogY2hyKDEyNSk7ICAgIC8vICJ9Ig0KDQoJCS8vIE9TWC9MaW51eA0KCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdvcGVuc3NsX3JhbmRvbV9wc2V1ZG9fYnl0ZXMnKSA9PT0gdHJ1ZSkNCgkJew0KCQkJJGRhdGEgPSBvcGVuc3NsX3JhbmRvbV9wc2V1ZG9fYnl0ZXMoMTYpOw0KCQkJJGRhdGFbNl0gPSBjaHIoIG9yZCgkZGF0YVs2XSkgJiAweDBmIHwgMHg0MCk7ICAgIC8vIHNldCB2ZXJzaW9uIHRvIDAxMDANCgkJCSRkYXRhWzhdID0gY2hyKCBvcmQoJGRhdGFbOF0pICYgMHgzZiB8IDB4ODApOyAgICAvLyBzZXQgYml0cyA2LTcgdG8gMTANCgkJCXJldHVybiAkbGJyYWNlIC4gdnNwcmludGYoJyVzJXMtJXMtJXMtJXMtJXMlcyVzJywgc3RyX3NwbGl0KGJpbjJoZXgoJGRhdGEpLCA0KSkgLiAkbGJyYWNlOw0KCQl9DQoNCgkJLy8gRmFsbGJhY2sgKFBIUCA0LjIrKQ0KCQltdF9zcmFuZCgoZG91YmxlKSBtaWNyb3RpbWUoKSAqIDEwMDAwKTsNCgkJJGNoYXJpZCA9IHN0cnRvbG93ZXIoIG1kNSggdW5pcWlkKCByYW5kKCksIHRydWUpKSk7DQoJCSRoeXBoZW4gPSBjaHIoNDUpOyAgICAgICAgICAgICAgICAgIC8vICItIg0KCQkkZ3VpZHY0ID0gJGxicmFjZS4NCgkJCXN1YnN0cigkY2hhcmlkLCAgMCwgIDgpLiAkaHlwaGVuLg0KCQkJc3Vic3RyKCRjaGFyaWQsICA4LCAgNCkuICRoeXBoZW4uDQoJCQlzdWJzdHIoJGNoYXJpZCwgMTIsICA0KS4gJGh5cGhlbi4NCgkJCXN1YnN0cigkY2hhcmlkLCAxNiwgIDQpLiAkaHlwaGVuLg0KCQkJc3Vic3RyKCRjaGFyaWQsIDIwLCAxMikuDQoJCQkkcmJyYWNlOw0KCQlyZXR1cm4gJGd1aWR2NDsNCgl9DQoNCgkvKioNCgkgKiBWYWxpZGF0ZSB0aGUgR2xvYmFsbHkgVW5pcXVlIElkZW50aWZpZXIgKCBhbmQgY2hlY2sgaWYgdGFibGUgYWxyZWFkeSBoYXMgdGhpcyBpZGVudGlmaWVyKQ0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAgICAgICAkZ3VpZA0KCSAqIEBwYXJhbSBzdHJpbmcgICAgICAgJHRhYmxlDQoJICogQHBhcmFtIGludCAgICAgICAgICAgICRpZA0KCSAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkY29tcG9uZW50DQoJICoNCgkgKiBAcmV0dXJuIGJvb2wNCgkgKg0KCSAqIEBzaW5jZSAgMy4wLjkNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHZhbGlkKCRndWlkLCAkdGFibGUgPSBudWxsLCAkaWQgPSAwLCAkY29tcG9uZW50ID0gbnVsbCkNCgl7DQoJCS8vIGNoZWNrIGlmIHdlIGhhdmUgYSBzdHJpbmcNCgkJaWYgKHNlbGY6OnZhbGlkYXRlKCRndWlkKSkNCgkJew0KCQkJLy8gY2hlY2sgaWYgdGFibGUgYWxyZWFkeSBoYXMgdGhpcyBpZGVudGlmaWVyDQoJCQlpZiAoU3RyaW5nSGVscGVyOjpjaGVjaygkdGFibGUpKQ0KCQkJew0KCQkJCS8vIGNoZWNrIHRoYXQgd2UgaGF2ZSB0aGUgY29tcG9uZW50IGNvZGUgbmFtZQ0KCQkJCWlmICghaXNfc3RyaW5nKCRjb21wb25lbnQpKQ0KCQkJCXsNCgkJCQkJJGNvbXBvbmVudCA9IChzdHJpbmcpIEhlbHBlcjo6Z2V0Q29kZSgpOw0KCQkJCX0NCgkJCQkvLyBHZXQgdGhlIGRhdGFiYXNlIG9iamVjdCBhbmQgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkJJHF1ZXJ5LT5zZWxlY3QoJ0NPVU5UKCopJykNCgkJCQkJLT5mcm9tKCcjX18nIC4gKHN0cmluZykgJGNvbXBvbmVudCAuICdfJyAuIChzdHJpbmcpICR0YWJsZSkNCgkJCQkJLT53aGVyZSgkZGItPnF1b3RlTmFtZSgnZ3VpZCcpIC4gJyA9ICcgLiAkZGItPnF1b3RlKCRndWlkKSk7DQoNCgkJCQkvLyByZW1vdmUgdGhpcyBpdGVtIGZyb20gdGhlIGxpc3QNCgkJCQlpZiAoJGlkID4gMCkNCgkJCQl7DQoJCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnIDw+ICcgLiAoaW50KSAkaWQpOw0KCQkJCX0NCg0KCQkJCS8vIFNldCBhbmQgcXVlcnkgdGhlIGRhdGFiYXNlLg0KCQkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCQkkZHVwbGljYXRlID0gKGJvb2wpICRkYi0+bG9hZFJlc3VsdCgpOw0KDQoJCQkJaWYgKCRkdXBsaWNhdGUpDQoJCQkJew0KCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJfQ0KCQkJfQ0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgaXRlbSBieSBndWlkIGluIGEgdGFibGUNCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICRndWlkDQoJICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgJHRhYmxlDQoJICogQHBhcmFtIHN0cmluZy9hcnJheSAgJHdoYXQNCgkgKiBAcGFyYW0gc3RyaW5nfG51bGwgICAgJGNvbXBvbmVudA0KCSAqDQoJICogQHJldHVybiBtaXgNCgkgKg0KCSAqIEBzaW5jZSAgMy4wLjkNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGl0ZW0oJGd1aWQsICR0YWJsZSwgJHdoYXQgPSAnYS5pZCcsICRjb21wb25lbnQgPSBudWxsKQ0KCXsNCgkJLy8gY2hlY2sgaWYgd2UgaGF2ZSBhIHN0cmluZw0KCQlpZiAoc2VsZjo6dmFsaWRhdGUoJGd1aWQpKQ0KCQl7DQoJCQkvLyBjaGVjayBpZiB0YWJsZSBhbHJlYWR5IGhhcyB0aGlzIGlkZW50aWZpZXINCgkJCWlmIChTdHJpbmdIZWxwZXI6OmNoZWNrKCR0YWJsZSkpDQoJCQl7DQoJCQkJLy8gY2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBjb21wb25lbnQgY29kZSBuYW1lDQoJCQkJaWYgKCFpc19zdHJpbmcoJGNvbXBvbmVudCkpDQoJCQkJew0KCQkJCQkkY29tcG9uZW50ID0gKHN0cmluZykgSGVscGVyOjpnZXRDb2RlKCk7DQoJCQkJfQ0KCQkJCS8vIEdldCB0aGUgZGF0YWJhc2Ugb2JqZWN0IGFuZCBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkJCWlmIChBcnJheUhlbHBlcjo6Y2hlY2soJHdoYXQpKQ0KCQkJCXsNCgkJCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoJHdoYXQpKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJHF1ZXJ5LT5zZWxlY3QoJHdoYXQpOw0KCQkJCX0NCg0KCQkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fJyAuIChzdHJpbmcpICRjb21wb25lbnQgLiAnXycgLiAoc3RyaW5nKSAkdGFibGUsICdhJykpDQoJCQkJCS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuZ3VpZCcpIC4gJyA9ICcgLiAkZGItPnF1b3RlKCRndWlkKSk7DQoNCgkJCQkvLyBTZXQgYW5kIHF1ZXJ5IHRoZSBkYXRhYmFzZS4NCgkJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkJJGRiLT5leGVjdXRlKCk7DQoNCgkJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQkJew0KCQkJCQlpZiAoQXJyYXlIZWxwZXI6OmNoZWNrKCR3aGF0KSB8fCAkd2hhdCA9PT0gJ2EuKicpDQoJCQkJCXsNCgkJCQkJCXJldHVybiAkZGItPmxvYWRPYmplY3QoKTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCXJldHVybiAkZGItPmxvYWRSZXN1bHQoKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogVmFsaWRhdGUgdGhlIEdsb2JhbGx5IFVuaXF1ZSBJZGVudGlmaWVyDQoJICoNCgkgKiBUaGFua3MgdG8gTGV3aWUNCgkgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTUxNTQ1Ni8xNDI5Njc3DQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRndWlkDQoJICoNCgkgKiBAcmV0dXJuIGJvb2wNCgkgKg0KCSAqIEBzaW5jZSAgMy4wLjkNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHZhbGlkYXRlKCRndWlkKQ0KCXsNCgkJLy8gY2hlY2sgaWYgd2UgaGF2ZSBhIHN0cmluZw0KCQlpZiAoU3RyaW5nSGVscGVyOjpjaGVjaygkZ3VpZCkpDQoJCXsNCgkJCXJldHVybiBwcmVnX21hdGNoKCIvXihceyk/W2EtZlxkXXs4fSgtW2EtZlxkXXs0fSl7NH1bYS1mXGRdezh9KD8oMSlcfSkkL2kiLCAkZ3VpZCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg==', '{}', 'GuidHelper', 'VDM\\Joomla\\Utilities.GuidHelper', '1.0.0', '{}', 'Utilities GuidHelper', 'abstract class', '{\"use_selection0\":{\"use\":\"640b5352-fb09-425f-a26e-cd44eda03f15\"}}', '', 1, '2022-03-12 01:27:10', '2022-05-21 13:27:39', 12, 9), (22, 1, 'File helper\r\n\r\n@since 3.0.9', '', '', 'a223b31e-ea1d-4cdf-92ae-5f9becffaff0', 'dXNlIEpvb21sYVxDTVNcVXJpXFVyaTsNCnVzZSBKb29tbGFcQ01TXEZhY3Rvcnk7DQp1c2UgSm9vbWxhXENNU1xMYW5ndWFnZVxUZXh0Ow0KdXNlIEpvb21sYVxDTVNcRmlsZXN5c3RlbVxQYXRoOw0KdXNlIEpvb21sYVxDTVNcRmlsZXN5c3RlbVxGaWxlOw0KdXNlIEpvb21sYVxDTVNcRmlsZXN5c3RlbVxGb2xkZXI7DQp1c2UgSm9vbWxhXEFyY2hpdmVcQXJjaGl2ZTs=', '', '', '{\"load_selection0\":{\"load\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\"},\"load_selection1\":{\"load\":\"1f28cb53-60d9-4db1-b517-3c7dc6b429ef\"},\"load_selection2\":{\"load\":\"91004529-94a9-4590-b842-e7c6b624ecf5\"}}', 'CS8qKg0KCSAqIFRyaWdnZXIgZXJyb3Igbm90aWNlIG9ubHkgb25jZQ0KCSAqDQoJICogQHZhciAgICBib29sDQoJICoNCgkgKiBAc2luY2UgIDMuMC45DQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyAkY3VybEVycm9yID0gZmFsc2U7DQoNCgkvKioNCgkgKiBUaGUgemlwcGVyIG1ldGhvZA0KCSAqIA0KCSAqIEBwYXJhbSAgc3RyaW5nICAgJHdvcmtpbmdEaXJlY3RvcnkgICAgVGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgaXRlbXMgbXVzdCBiZSB6aXBwZWQNCgkgKiBAcGFyYW0gIHN0cmluZyAgICRmaWxlcGF0aCAgICAgICAgICBUaGUgcGF0aCB0byB3aGVyZSB0aGUgemlwIGZpbGUgbXVzdCBiZSBwbGFjZWQNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wgdHJ1ZSAgIE9uIHN1Y2Nlc3MNCgkgKg0KCSAqIEBzaW5jZSAgMy4wLjkNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHppcCgkd29ya2luZ0RpcmVjdG9yeSwgJiRmaWxlcGF0aCkNCgl7DQoJCS8vIHN0b3JlIHRoZSBjdXJyZW50IGpvb21sYSB3b3JraW5nIGRpcmVjdG9yeQ0KCQkkam9vbWxhID0gZ2V0Y3dkKCk7DQoNCgkJLy8gd2UgYXJlIGNoYW5naW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgY29tcG9uZW50IHRlbXAgZm9sZGVyDQoJCWNoZGlyKCR3b3JraW5nRGlyZWN0b3J5KTsNCg0KCQkvLyB0aGUgZnVsbCBmaWxlIHBhdGggb2YgdGhlIHppcCBmaWxlDQoJCSRmaWxlcGF0aCA9IFBhdGg6OmNsZWFuKCRmaWxlcGF0aCk7DQoNCgkJLy8gZGVsZXRlIGFuIGV4aXN0aW5nIHppcCBmaWxlIChvciB1c2UgYW4gZXhjbHVzaW9uIHBhcmFtZXRlciBpbiBGb2xkZXI6OmZpbGVzKCkNCgkJRmlsZTo6ZGVsZXRlKCRmaWxlcGF0aCk7DQoNCgkJLy8gZ2V0IGEgbGlzdCBvZiBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgdHJlZSAoYWxzbyB0aGUgaGlkZGVuIGZpbGVzKQ0KCQkkZmlsZXMgPSBGb2xkZXI6OmZpbGVzKCcuJywgJycsIHRydWUsIHRydWUsIGFycmF5KCcuc3ZuJywgJ0NWUycsICcuRFNfU3RvcmUnLCAnX19NQUNPU1gnKSwgYXJyYXkoJy4qficpKTsNCg0KCQkkemlwQXJyYXkgPSBhcnJheSgpOw0KCQkvLyBzZXR1cCB0aGUgemlwIGFycmF5DQoJCWZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkNCgkJew0KCQkJJHRtcCA9IGFycmF5KCk7DQoJCQkkdG1wWyduYW1lJ10gPSBzdHJfcmVwbGFjZSgnLi8nLCAnJywgJGZpbGUpOw0KCQkJJHRtcFsnZGF0YSddID0gc2VsZjo6Z2V0Q29udGVudCgkZmlsZSk7DQoJCQkkdG1wWyd0aW1lJ10gPSBmaWxlbXRpbWUoJGZpbGUpOw0KCQkJJHppcEFycmF5W10gPSAkdG1wOw0KCQl9DQoNCgkJLy8gY2hhbmdlIGJhY2sgdG8gam9vbWxhIHdvcmtpbmcgZGlyZWN0b3J5DQoJCWNoZGlyKCRqb29tbGEpOw0KDQoJCS8vIGdldCB0aGUgemlwIGFkYXB0ZXINCgkJJGFkYXB0ZXIgPSBuZXcgQXJjaGl2ZSgpOw0KCQkkemlwID0gJGFkYXB0ZXItPmdldEFkYXB0ZXIoJ3ppcCcpOw0KDQoJCS8vY3JlYXRlIHRoZSB6aXAgZmlsZQ0KCQlpZiAoJHppcC0+Y3JlYXRlKCRmaWxlcGF0aCwgJHppcEFycmF5KSkNCgkJew0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgY29udGVudCBvZiBhIGZpbGUNCgkgKg0KCSAqIEBwYXJhbSAgc3RyaW5nICAgICAgICAkcGF0aCAgIFRoZSBwYXRoIHRvIHRoZSBmaWxlDQoJICogQHBhcmFtICBzdHJpbmcvYm9vbCAgICRub25lICAgVGhlIHJldHVybiB2YWx1ZSBpZiBubyBjb250ZW50IHdhcyBmb3VuZA0KCSAqDQoJICogQHJldHVybiAgc3RyaW5nICAgT24gc3VjY2Vzcw0KCSAqDQoJICogQHNpbmNlICAzLjAuOQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q29udGVudCgkcGF0aCwgJG5vbmUgPSAnJykNCgl7DQoJCWlmIChTdHJpbmdIZWxwZXI6OmNoZWNrKCRwYXRoKSkNCgkJew0KCQkJLy8gdXNlIGJhc2ljIGZpbGUgZ2V0IGNvbnRlbnQgZm9yIG5vdw0KCQkJaWYgKCgkY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygkcGF0aCkpICE9PSBGQUxTRSkNCgkJCXsNCgkJCQlyZXR1cm4gJGNvbnRlbnQ7DQoJCQl9DQoJCQkvLyB1c2UgY3VybCBpZiBhdmFpbGFibGUNCgkJCWVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSkNCgkJCXsNCgkJCQkvLyBzdGFydCBjdXJsDQoJCQkJJGNoID0gY3VybF9pbml0KCk7DQoJCQkJLy8gc2V0IHRoZSBvcHRpb25zDQoJCQkJJG9wdGlvbnMgPSBhcnJheSgpOw0KCQkJCSRvcHRpb25zW0NVUkxPUFRfVVJMXSA9ICRwYXRoOw0KCQkJCSRvcHRpb25zW0NVUkxPUFRfVVNFUkFHRU5UXSA9ICdNb3ppbGxhLzUuMCAoV2luZG93czsgVTsgV2luZG93cyBOVCA2LjE7IGVuLVVTOyBydjoxLjkuMi4xMikgR2Vja28vMjAxMDEwMjYgRmlyZWZveC8zLjYuMTInOw0KCQkJCSRvcHRpb25zW0NVUkxPUFRfUkVUVVJOVFJBTlNGRVJdID0gVFJVRTsNCgkJCQkkb3B0aW9uc1tDVVJMT1BUX1NTTF9WRVJJRllQRUVSXSA9IEZBTFNFOw0KCQkJCS8vIGxvYWQgdGhlIG9wdGlvbnMNCgkJCQljdXJsX3NldG9wdF9hcnJheSgkY2gsICRvcHRpb25zKTsNCgkJCQkvLyBnZXQgdGhlIGNvbnRlbnQNCgkJCQkkY29udGVudCA9IGN1cmxfZXhlYygkY2gpOw0KCQkJCS8vIGNsb3NlIHRoZSBjb25uZWN0aW9uDQoJCQkJY3VybF9jbG9zZSgkY2gpOw0KDQoJCQkJLy8gcmV0dXJuIGlmIGZvdW5kDQoJCQkJaWYgKFN0cmluZ0hlbHBlcjo6Y2hlY2soJGNvbnRlbnQpKQ0KCQkJCXsNCgkJCQkJcmV0dXJuICRjb250ZW50Ow0KCQkJCX0NCgkJCX0NCgkJCWVsc2VpZiAoIXNlbGY6OiRjdXJsRXJyb3IpDQoJCQl7DQoJCQkJLy8gc2V0IHRoZSBub3RpY2UNCgkJCQlGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT5lbnF1ZXVlTWVzc2FnZShUZXh0OjpfKCc8aDI+Q3VybCBOb3QgRm91bmQhPC9oMj48cD5QbGVhc2Ugc2V0dXAgY3VybCBvbiB5b3VyIHN5c3RlbSwgb3IgPGI+W1tbY29tcG9uZW50XV1dPC9iPiB3aWxsIG5vdCBmdW5jdGlvbiBjb3JyZWN0bHkhPC9wPicpLCAnRXJyb3InKTsNCgkJCQkvLyBsb2FkIHRoaXMgbm90aWNlIG9ubHkgb25jZQ0KCQkJCXNlbGY6OiRjdXJsRXJyb3IgPSB0cnVlOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAkbm9uZTsNCgl9DQoNCgkvKioNCgkgKiBXcml0ZSBhIGZpbGUgdG8gdGhlIHNlcnZlcg0KCSAqDQoJICogQHBhcmFtICBzdHJpbmcgICAkcGF0aCAgICBUaGUgcGF0aCBhbmQgZmlsZSBuYW1lIHdoZXJlIHRvIHNhZmUgdGhlIGRhdGENCgkgKiBAcGFyYW0gIHN0cmluZyAgICRkYXRhICAgIFRoZSBkYXRhIHRvIHNhZmUNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wgdHJ1ZSAgIE9uIHN1Y2Nlc3MNCgkgKg0KCSAqIEBzaW5jZSAgMy4wLjkNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHdyaXRlKCRwYXRoLCAkZGF0YSkNCgl7DQoJCSRrbGFhciA9IGZhbHNlOw0KCQlpZiAoU3RyaW5nSGVscGVyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCS8vIG9wZW4gdGhlIGZpbGUNCgkJCSRmaCA9IGZvcGVuKCRwYXRoLCAidyIpOw0KCQkJaWYgKCFpc19yZXNvdXJjZSgkZmgpKQ0KCQkJew0KCQkJCXJldHVybiAka2xhYXI7DQoJCQl9DQoJCQkvLyB3cml0ZSB0byB0aGUgZmlsZQ0KCQkJaWYgKGZ3cml0ZSgkZmgsICRkYXRhKSkNCgkJCXsNCgkJCQkvLyBoYXMgYmVlbiBkb25lDQoJCQkJJGtsYWFyID0gdHJ1ZTsNCgkJCX0NCgkJCS8vIGNsb3NlIGZpbGUuDQoJCQlmY2xvc2UoJGZoKTsNCgkJfQ0KCQlyZXR1cm4gJGtsYWFyOw0KCX0NCg0KCS8qKg0KCSAqIGdldCBhbGwgdGhlIGZpbGUgcGF0aHMgaW4gZm9sZGVyIGFuZCBzdWIgZm9sZGVycw0KCSAqIA0KCSAqIEBwYXJhbSAgIHN0cmluZyAgJGZvbGRlciAgICAgVGhlIGxvY2FsIHBhdGggdG8gcGFyc2UNCgkgKiBAcGFyYW0gICBhcnJheSAgICRmaWxlVHlwZXMgIFRoZSB0eXBlIG9mIGZpbGVzIHRvIGdldA0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAzLjAuOQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UGF0aHMoJGZvbGRlciwgJGZpbGVUeXBlcyA9IGFycmF5KCdcLnBocCcsICdcLmpzJywgJ1wuY3NzJywgJ1wubGVzcycpLCAkcmVjdXJzZSA9IHRydWUsICRmdWxsID0gdHJ1ZSkNCgl7DQoJCWlmIChGb2xkZXI6OmV4aXN0cygkZm9sZGVyKSkNCgkJew0KCQkJLy8gd2UgbXVzdCBmaXJzdCBzdG9yZSB0aGUgY3VycmVudCB3b2tpbmcgZGlyZWN0b3J5DQoJCQkkam9vbWxhID0gZ2V0Y3dkKCk7DQoJCQkvLyB3ZSBhcmUgY2hhbmdpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHRoZSBjb21wb25lbnQgcGF0aA0KCQkJY2hkaXIoJGZvbGRlcik7DQoNCgkJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGZpbGUgdHlwZSBmaWx0ZXINCgkJCWlmIChBcnJheUhlbHBlcjo6Y2hlY2soJGZpbGVUeXBlcykpDQoJCQl7DQoJCQkJLy8gZ2V0IHRoZSBmaWxlcw0KCQkJCWZvcmVhY2ggKCRmaWxlVHlwZXMgYXMgJHR5cGUpDQoJCQkJew0KCQkJCQkvLyBnZXQgYSBsaXN0IG9mIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0cmVlDQoJCQkJCSRmaWxlc1tdID0gRm9sZGVyOjpmaWxlcygnLicsICR0eXBlLCAkcmVjdXJzZSwgJGZ1bGwpOw0KCQkJCX0NCgkJCX0NCgkJCWVsc2VpZiAoU3RyaW5nSGVscGVyOjpjaGVjaygkZmlsZVR5cGVzKSkNCgkJCXsNCgkJCQkvLyBnZXQgYSBsaXN0IG9mIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0cmVlDQoJCQkJJGZpbGVzW10gPSBGb2xkZXI6OmZpbGVzKCcuJywgJGZpbGVUeXBlcywgJHJlY3Vyc2UsICRmdWxsKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkvLyBnZXQgYSBsaXN0IG9mIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0cmVlDQoJCQkJJGZpbGVzW10gPSBGb2xkZXI6OmZpbGVzKCcuJywgJy4nLCAkcmVjdXJzZSwgJGZ1bGwpOw0KCQkJfQ0KDQoJCQkvLyBjaGFuZ2UgYmFjayB0byBKb29tbGEgd29ya2luZyBkaXJlY3RvcnkNCgkJCWNoZGlyKCRqb29tbGEpOw0KDQoJCQkvLyByZXR1cm4gYXJyYXkgb2YgZmlsZXMNCgkJCXJldHVybiBhcnJheV9tYXAoIGZ1bmN0aW9uKCRmaWxlKSB7IHJldHVybiBzdHJfcmVwbGFjZSgnLi8nLCAnLycsICRmaWxlKTsgfSwgKGFycmF5KSBBcnJheUhlbHBlcjo6bWVyZ2UoJGZpbGVzKSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEdldCB0aGUgZmlsZSBwYXRoIG9yIHVybA0KCSAqDQoJICogQHBhcmFtICBzdHJpbmcgICAkdHlwZSAgICAgICAgICAgICAgVGhlICh1cmwvcGF0aCkgdHlwZSB0byByZXR1cm4NCgkgKiBAcGFyYW0gIHN0cmluZyAgICR0YXJnZXQgICAgICAgICAgICBUaGUgUGFyYW1zIFRhcmdldCBuYW1lIChpZiBzZXQpDQoJICogQHBhcmFtICBzdHJpbmcgICAkZmlsZVR5cGUgICAgICAgICAgVGhlIGtpbmQgb2YgZmlsZW5hbWUgdG8gZ2VuZXJhdGUgKGlmIG5vdCBzZXQgbm8gZmlsZSBuYW1lIGlzIGdlbmVyYXRlZCkNCgkgKiBAcGFyYW0gIHN0cmluZyAgICRrZXkgICAgICAgICAgICAgICBUaGUga2V5IHRvIGFkanVzdCB0aGUgZmlsZW5hbWUgKGlmIG5vdCBzZXQgaWdub3JlZCkNCgkgKiBAcGFyYW0gIHN0cmluZyAgICRkZWZhdWx0ICAgICAgICAgICBUaGUgZGVmYXVsdCBwYXRoIGlmIG5vdCBzZXQgaW4gUGFyYW1zIChmYWxsYmFjayBwYXRoKQ0KCSAqIEBwYXJhbSAgYm9vbCAgICAgJGNyZWF0ZUlmTm90U2V0ICAgIFRoZSBzd2l0Y2ggdG8gY3JlYXRlIHRoZSBmb2xkZXIgaWYgbm90IGZvdW5kDQoJICoNCgkgKiBAcmV0dXJuICBzdHJpbmcgICAgT24gc3VjY2VzcyB0aGUgcGF0aCBvciB1cmwgaXMgcmV0dXJuZWQgYmFzZWQgb24gdGhlIHR5cGUgcmVxdWVzdGVkDQoJICoNCgkgKiBAc2luY2UgIDMuMC45DQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQYXRoKCR0eXBlID0gJ3BhdGgnLCAkdGFyZ2V0ID0gJ2ZpbGVwYXRoJywgJGZpbGVUeXBlID0gbnVsbCwgJGtleSA9ICcnLCAkZGVmYXVsdCA9ICcnLCAkY3JlYXRlSWZOb3RTZXQgPSB0cnVlKQ0KCXsNCgkJLy8gbWFrZSBzdXJlIHRvIGFsd2F5cyBoYXZlIGEgc3RyaW5nL3BhdGgNCgkJaWYoIVN0cmluZ0hlbHBlcjo6Y2hlY2soJGRlZmF1bHQpKQ0KCQl7DQoJCQkkZGVmYXVsdCA9IEpQQVRIX1NJVEUgLiAnL2ltYWdlcy8nOw0KCQl9DQoNCgkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJJGZpbGVQYXRoID0gSGVscGVyOjpnZXRQYXJhbXMoKS0+Z2V0KCR0YXJnZXQsICRkZWZhdWx0KTsNCg0KCQkvLyBjaGVjayB0aGUgZmlsZSBwYXRoIChyZXZlcnQgdG8gZGVmYXVsdCBvbmx5IG9mIG5vdCBhIGhpZGRlbiBmaWxlIHBhdGgpDQoJCWlmICgnaGlkZGVuZmlsZXBhdGgnICE9PSAkdGFyZ2V0ICYmIHN0cnBvcygkZmlsZVBhdGgsIEpQQVRIX1NJVEUpID09PSBmYWxzZSkNCgkJew0KCQkJJGZpbGVQYXRoID0gJGRlZmF1bHQ7DQoJCX0NCg0KCQkvLyBjcmVhdGUgdGhlIGZvbGRlciBpZiBpdCBkb2VzIG5vdCBleGlzdA0KCQlpZiAoJGNyZWF0ZUlmTm90U2V0ICYmICFGb2xkZXI6OmV4aXN0cygkZmlsZVBhdGgpKQ0KCQl7DQoJCQlGb2xkZXI6OmNyZWF0ZSgkZmlsZVBhdGgpOw0KCQl9DQoNCgkJLy8gc2V0dXAgdGhlIGZpbGUgbmFtZQ0KCQkkZmlsZU5hbWUgPSAnJzsNCg0KCQkvLyBHZXQgYmFzaWMga2V5DQoJCSRiYXNpY2tleSA9ICdUaCFzX2lTX24wdF9zQWZlX2J1VF9iM3R0ZXJfdGhlbl9uMHRoaXVnJzsNCgkJLy8gZ2V0IHRoZSBjb21wb25lbnQgaGVscGVyDQoJCSRoZWxwZXIgPSBIZWxwZXI6OmdldCgpOw0KCQkvLyBjaGVjayBpZiBtZXRob2QgZXhpc3QgaW4gaGVscGVyIGNsYXNzDQoJCWlmICgkaGVscGVyICYmIEhlbHBlcjo6bWV0aG9kRXhpc3RzKCdnZXRDcnlwdEtleScpKSANCgkJew0KCQkJJGJhc2lja2V5ID0gJGhlbHBlcjo6Z2V0Q3J5cHRLZXkoJ2Jhc2ljJywgJGJhc2lja2V5KTsNCgkJfQ0KDQoJCS8vIGNoZWNrIHRoZSBrZXkNCgkJaWYgKCFTdHJpbmdIZWxwZXI6OmNoZWNrKCRrZXkpKQ0KCQl7DQoJCQkka2V5ID0gJ3ZEbSc7DQoJCX0NCg0KCQkvLyBzZXQgdGhlIGZpbGUgbmFtZQ0KCQlpZiAoU3RyaW5nSGVscGVyOjpjaGVjaygkZmlsZVR5cGUpKQ0KCQl7DQoJCQkvLyBzZXQgdGhlIG5hbWUNCgkJCSRmaWxlTmFtZSA9IHRyaW0oIG1kNSgkdHlwZSAuICR0YXJnZXQgLiAkYmFzaWNrZXkgLiAka2V5KSAuICcuJyAuIHRyaW0oJGZpbGVUeXBlLCAnLicpKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRmaWxlTmFtZSA9IHRyaW0oIG1kNSgkdHlwZSAuICR0YXJnZXQgLiAkYmFzaWNrZXkgLiAka2V5KSkgLiAnLnR4dCc7DQoJCX0NCg0KCQkvLyByZXR1cm4gdGhlIHVybA0KCQlpZiAoJ3VybCcgPT09ICR0eXBlKQ0KCQl7DQoJCQlpZiAoXHN0cnBvcygkZmlsZVBhdGgsIEpQQVRIX1NJVEUpICE9PSBmYWxzZSkNCgkJCXsNCgkJCQkkZmlsZVBhdGggPSB0cmltKCBzdHJfcmVwbGFjZSggSlBBVEhfU0lURSwgJycsICRmaWxlUGF0aCksICcvJyk7DQoNCgkJCQlyZXR1cm4gVXJpOjpyb290KCkgLiAkZmlsZVBhdGggLiAnLycgLiAkZmlsZU5hbWU7DQoJCQl9DQoNCgkJCS8vIHNpbmNlIHRoZSBwYXRoIGlzIGJlaGluZCB0aGUgcm9vdCBmb2xkZXIgb2YgdGhlIHNpdGUsIHJldHVybiBvbmx5IHRoZSByb290IHVybCAobWF5IGJlIHVzZWQgdG8gYnVpbGQgdGhlIGxpbmspDQoJCQlyZXR1cm4gVXJpOjpyb290KCk7DQoJCX0NCg0KCQkvLyBzYW5pdGl6ZSB0aGUgcGF0aA0KCQlyZXR1cm4gJy8nIC4gdHJpbSggJGZpbGVQYXRoLCAnLycgKSAuICcvJyAuICRmaWxlTmFtZTsNCgl9DQoNCgkvKioNCgkgKiBDaGVjayBpZiBmaWxlIGV4aXN0DQoJICoNCgkgKiBAcGFyYW0gIHN0cmluZyAgICRwYXRoICAgVGhlIHVybC9wYXRoIHRvIGNoZWNrDQoJICoNCgkgKiBAcmV0dXJuICBib29sICAgICAgSWYgZXhpc3QgdHJ1ZQ0KCSAqDQoJICogQHNpbmNlICAzLjAuOQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXhpc3RzKCRwYXRoKQ0KCXsNCgkJJGV4aXN0cyA9IGZhbHNlOw0KCQkvLyBpZiB0aGlzIGlzIGEgbG9jYWwgcGF0aA0KCQlpZiAoc3RycG9zKCRwYXRoLCAnaHR0cDonKSA9PT0gZmFsc2UgJiYgc3RycG9zKCRwYXRoLCAnaHR0cHM6JykgPT09IGZhbHNlKQ0KCQl7DQoJCQlpZiAoZmlsZV9leGlzdHMoJHBhdGgpKQ0KCQkJew0KCQkJCSRleGlzdHMgPSB0cnVlOw0KCQkJfQ0KCQl9DQoJCS8vIGNoZWNrIGlmIHdlIGNhbiB1c2UgY3VybA0KCQllbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJykpDQoJCXsNCgkJCS8vIGluaXRpYXRlIGN1cmwNCgkJCSRjaCA9IGN1cmxfaW5pdCgkcGF0aCk7DQoJCQkvLyBDVVJMT1BUX05PQk9EWSAoZG8gbm90IHJldHVybiBib2R5KQ0KCQkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX05PQk9EWSwgdHJ1ZSk7DQoJCQkvLyBtYWtlIGNhbGwNCgkJCSRyZXN1bHQgPSBjdXJsX2V4ZWMoJGNoKTsNCgkJCS8vIGNoZWNrIHJldHVybiB2YWx1ZQ0KCQkJaWYgKCRyZXN1bHQgIT09IGZhbHNlKQ0KCQkJew0KCQkJCS8vIGdldCB0aGUgaHR0cCBDT0RFDQoJCQkJJHN0YXR1c0NvZGUgPSBjdXJsX2dldGluZm8oJGNoLCBDVVJMSU5GT19IVFRQX0NPREUpOw0KCQkJCWlmICgkc3RhdHVzQ29kZSAhPT0gNDA0KQ0KCQkJCXsNCgkJCQkJJGV4aXN0cyA9IHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gY2xvc2UgdGhlIGNvbm5lY3Rpb24NCgkJCWN1cmxfY2xvc2UoJGNoKTsNCgkJfQ0KCQllbHNlaWYgKCRoZWFkZXJzID0gQGdldF9oZWFkZXJzKCRwYXRoKSkNCgkJew0KCQkJaWYoaXNzZXQoJGhlYWRlcnNbMF0pICYmIGlzX3N0cmluZygkaGVhZGVyc1swXSkgJiYgc3RycG9zKCRoZWFkZXJzWzBdLCc0MDQnKSA9PT0gZmFsc2UpDQoJCQl7DQoJCQkJJGV4aXN0cyA9IHRydWU7DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRleGlzdHM7DQoJfQ0K', '{}', 'FileHelper', 'VDM\\Joomla\\Utilities.FileHelper', '1.0.0', '{}', 'Utilities FileHelper', 'abstract class', '{\"use_selection0\":{\"use\":\"640b5352-fb09-425f-a26e-cd44eda03f15\",\"as\":\"default\"}}', '', 1, '2022-03-12 02:09:18', '2022-06-11 16:54:51', 24, 9), (23, 1, 'Some component helper\r\n\r\n@since 3.0.11', '', '', '640b5352-fb09-425f-a26e-cd44eda03f15', 'dXNlIEpvb21sYVxJbnB1dFxJbnB1dDsNCnVzZSBKb29tbGFcQ01TXENvbXBvbmVudFxDb21wb25lbnRIZWxwZXI7DQp1c2UgSm9vbWxhXFJlZ2lzdHJ5XFJlZ2lzdHJ5Ow==', '', '', '{}', 'CS8qKg0KCSAqIFRoZSBjdXJyZW50IG9wdGlvbg0KCSAqDQoJICogQHZhciAgICBTdHJpbmcNCgkgKiBAc2luY2UgICAzLjAuMTENCgkgKi8NCglwdWJsaWMgc3RhdGljICRvcHRpb247DQoNCgkvKioNCgkgKiBUaGUgY29tcG9uZW50IHBhcmFtcyBsaXN0IGNhY2hlDQoJICoNCgkgKiBAdmFyICAgIFJlZ2lzdHJ5W10NCgkgKiBAc2luY2UgICAzLjAuMTENCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljICRwYXJhbXMgPSBhcnJheSgpOw0KDQoJLyoqDQoJICogR2V0cyB0aGUgcGFyYW1ldGVyIG9iamVjdCBmb3IgdGhlIGNvbXBvbmVudA0KCSAqDQoJICogQHBhcmFtICAgU3RyaW5nICAgICAgICAgICAgICAgJG9wdGlvbiAgVGhlIG9wdGlvbiBmb3IgdGhlIGNvbXBvbmVudC4NCgkgKg0KCSAqIEByZXR1cm4gIFJlZ2lzdHJ5ICAgICAgICAgICAgQSBSZWdpc3RyeSBvYmplY3QuDQoJICoNCgkgKiBAc2VlICAgICBSZWdpc3RyeQ0KCSAqIEBzaW5jZSAgIDMuMC4xMQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UGFyYW1zKCRvcHRpb24gPSBudWxsKQ0KCXsNCgkJLy8gY2hlY2sgdGhhdCB3ZSBoYXZlIGFuIG9wdGlvbg0KCQlpZiAoZW1wdHkoJG9wdGlvbikpDQoJCXsNCgkJCSRvcHRpb24gPSBzZWxmOjpnZXRPcHRpb24oKTsNCgkJfQ0KDQoJCS8vIGdldCBnbG9iYWwgdmFsdWUNCgkJaWYgKCFpc3NldChzZWxmOjokcGFyYW1zWyRvcHRpb25dKSB8fCAhc2VsZjo6JHBhcmFtc1skb3B0aW9uXSBpbnN0YW5jZW9mIFJlZ2lzdHJ5KQ0KCQl7DQoJCQlzZWxmOjokcGFyYW1zWyRvcHRpb25dID0gQ29tcG9uZW50SGVscGVyOjpnZXRQYXJhbXMoJG9wdGlvbik7DQoJCX0NCg0KCQlyZXR1cm4gc2VsZjo6JHBhcmFtc1skb3B0aW9uXTsNCgl9DQoNCgkvKioNCgkgKiBHZXRzIHRoZSBjb21wb25lbnQgb3B0aW9uDQoJICoNCgkgKiBAcGFyYW0gICBTdHJpbmd8Qm9vbCAgICAgICRkZWZhdWx0ICBUaGUgZGVmYXVsdCByZXR1cm4gdmFsdWUgaWYgbm9uZSBpcyBmb3VuZA0KCSAqDQoJICogQHJldHVybiAgU3RyaW5nfEJvb2wgICAgICBBIGNvbXBvbmVudCBvcHRpb24NCgkgKg0KCSAqIEBzaW5jZSAgIDMuMC4xMQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0T3B0aW9uKCRkZWZhdWx0ID0gJ2VtcHR5JykNCgl7DQoJCWlmIChlbXB0eShzZWxmOjokb3B0aW9uKSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBvcHRpb24gZnJvbSB0aGUgdXJsIGlucHV0DQoJCQlzZWxmOjokb3B0aW9uID0gKG5ldyBJbnB1dCktPmdldFN0cmluZygnb3B0aW9uJywgZmFsc2UpOw0KCQl9DQoNCgkJaWYgKHNlbGY6OiRvcHRpb24pDQoJCXsNCgkJCSByZXR1cm4gc2VsZjo6JG9wdGlvbjsNCgkJfQ0KDQoJCXJldHVybiAkZGVmYXVsdDsNCgl9DQoNCgkvKioNCgkgKiBHZXRzIHRoZSBjb21wb25lbnQgY29kZSBuYW1lDQoJICoNCgkgKiBAcGFyYW0gICBTdHJpbmcgICAgICAgICAgICAgICRvcHRpb24gIFRoZSBvcHRpb24gZm9yIHRoZSBjb21wb25lbnQuDQoJICogQHBhcmFtICAgU3RyaW5nfEJvb2wgICAgICAkZGVmYXVsdCAgVGhlIGRlZmF1bHQgcmV0dXJuIHZhbHVlIGlmIG5vbmUgaXMgZm91bmQNCgkgKg0KCSAqIEByZXR1cm4gIFN0cmluZ3xNaXhlZCAgICAgIEEgY29tcG9uZW50IGNvZGUgbmFtZQ0KCSAqDQoJICogQHNpbmNlICAgMy4wLjExDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDb2RlKCRvcHRpb24gPSBudWxsLCAkZGVmYXVsdCA9IG51bGwpDQoJew0KCQkvLyBjaGVjayB0aGF0IHdlIGhhdmUgYW4gb3B0aW9uDQoJCWlmIChlbXB0eSgkb3B0aW9uKSkNCgkJew0KCQkJJG9wdGlvbiA9IHNlbGY6OmdldE9wdGlvbigpOw0KCQl9DQoJCS8vIG9wdGlvbiB3aXRoIGNvbV8NCgkJaWYgKGlzX3N0cmluZygkb3B0aW9uKSAmJiBzdHJwb3MoJG9wdGlvbiwgJ2NvbV8nKSA9PT0gMCkNCgkJew0KCQkJcmV0dXJuIHN0cnRvbG93ZXIodHJpbShzdWJzdHIoJG9wdGlvbiwgNCkpKTsNCgkJfQ0KDQoJCXJldHVybiAkZGVmYXVsdDsNCgl9DQoNCgkvKioNCgkgKiBHZXRzIHRoZSBjb21wb25lbnQgYWJzdHJhY3QgaGVscGVyIGNsYXNzDQoJICoNCgkgKiBAcGFyYW0gICBTdHJpbmcgICAgICAgICAgICAgICRvcHRpb24gIFRoZSBvcHRpb24gZm9yIHRoZSBjb21wb25lbnQuDQoJICogQHBhcmFtICAgU3RyaW5nfEJvb2wgICAgICAkZGVmYXVsdCAgVGhlIGRlZmF1bHQgcmV0dXJuIHZhbHVlIGlmIG5vbmUgaXMgZm91bmQNCgkgKg0KCSAqIEByZXR1cm4gIFN0cmluZ3xNaXhlZCAgICAgIEEgY29tcG9uZW50IGhlbHBlciBuYW1lDQoJICoNCgkgKiBAc2luY2UgICAzLjAuMTENCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldCgkb3B0aW9uID0gbnVsbCwgJGRlZmF1bHQgPSBudWxsKQ0KCXsNCgkJLy8gY2hlY2sgdGhhdCB3ZSBoYXZlIGFuIG9wdGlvbg0KCQkvLyBhbmQgZ2V0IHRoZSBjb2RlIG5hbWUgZnJvbSBpdA0KCQlpZiAoKCRjb2RlX25hbWUgPSBzZWxmOjpnZXRDb2RlKCRvcHRpb24sIGZhbHNlKSkgIT09IGZhbHNlKQ0KCQl7DQoJCQkvLyB3ZSBidWlsZCB0aGUgaGVscGVyIGNsYXNzIG5hbWUNCgkJCSRoZWxwZXJfbmFtZSA9ICdcXCcgLiBcdWNmaXJzdCgkY29kZV9uYW1lKSAuICdIZWxwZXInOw0KCQkJLy8gY2hlY2sgaWYgY2xhc3MgZXhpc3QNCgkJCWlmIChjbGFzc19leGlzdHMoJGhlbHBlcl9uYW1lKSkNCgkJCXsNCgkJCQlyZXR1cm4gJGhlbHBlcl9uYW1lOw0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuICRkZWZhdWx0Ow0KCX0NCg0KCS8qKg0KCSAqIENoZWNrIGlmIHRoZSBoZWxwZXIgY2xhc3Mgb2YgdGhpcyBjb21wb25lbnQgaGFzIGEgbWV0aG9kDQoJICoNCgkgKiBAcGFyYW0gICBTdHJpbmcgICAgICAgJG1ldGhvZCAgVGhlIG1ldGhvZCBuYW1lIHRvIHNlYXJjaCBmb3INCgkgKiBAcGFyYW0gICBTdHJpbmcgICAgICAgJG9wdGlvbiAgICBUaGUgb3B0aW9uIGZvciB0aGUgY29tcG9uZW50Lg0KCSAqDQoJICogQHJldHVybiAgYm9vbCAgICAgICAgICB0cnVlIGlmIG1ldGhvZCBleGlzdA0KCSAqDQoJICogQHNpbmNlICAgMy4wLjExDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtZXRob2RFeGlzdHMoJG1ldGhvZCwgJG9wdGlvbiA9IG51bGwpDQoJew0KCQkvLyBnZXQgdGhlIGhlbHBlciBjbGFzcw0KCQlpZiAoKCRoZWxwZXIgPSBzZWxmOjpnZXQoJG9wdGlvbiwgZmFsc2UpKSAhPT0gZmFsc2UpDQoJCXsNCgkJCWlmIChtZXRob2RfZXhpc3RzKCRoZWxwZXIsICRtZXRob2QpKQ0KCQkJew0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg==', '{}', 'Helper', 'VDM\\Joomla\\Utilities.Component.Helper', '1.0.0', '{}', 'Utilities Component Helper', 'abstract class', '{}', '', 1, '2022-05-13 05:36:32', '2022-05-21 13:27:39', 17, 7), -(24, 1, 'Image helper\r\n\r\n@since 3.0.11', '', '', '962b15d8-915f-4cd7-aea6-7cf82afdc20b', 'dXNlIEpvb21sYVxDTVNcRmlsZXN5c3RlbVxGaWxlOw0KdXNlIEpvb21sYVxDTVNcRmlsZXN5c3RlbVxGb2xkZXI7DQp1c2UgSm9vbWxhXENNU1xVcmlcVXJpOw0KdXNlIEpvb21sYVxDTVNcSW1hZ2VcSW1hZ2U7', '', '', '{\"load_selection0\":{\"load\":\"91004529-94a9-4590-b842-e7c6b624ecf5\"},\"load_selection1\":{\"load\":\"f11dc790-713e-4706-9a85-a318ed3ad56e\"}}', 'CS8qKg0KCSAqIFJlc2l6ZSBhbiBpbWFnZQ0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgICRmdWxsUGF0aCAgIFRoZSBmdWxsIHBhdGggdG8gdGhlIGltYWdlDQoJICogQHBhcmFtICAgc3RyaW5nICAgICR0eXBlICAgICAgICBUaGUgdHlwZSBvZiBpbWFnZQ0KCSAqDQoJICogQHJldHVybiBib29sDQoJICogQHNpbmNlIDMuMC4xMQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVzaXplKHN0cmluZyAkZnVsbFBhdGgsIHN0cmluZyAkdHlwZSkNCgl7DQoJCS8vIGZpcnN0IGNoZWNrIGlmIHdlIHNob3VsZCByZXNpemUgdGhpcyB0YXJnZXQNCgkJaWYgKDEgPT0gSGVscGVyOjpnZXRQYXJhbXMoKS0+Z2V0KCR0eXBlIC4gJ19yZXNpemUnLCAwKSkNCgkJew0KCQkJLy8gbG9hZCB0aGUgc2l6ZSB0byBiZSBzZXQNCgkJCSRoZWlnaHQgPSBIZWxwZXI6OmdldFBhcmFtcygpLT5nZXQoJHR5cGUgLiAnX2hlaWdodCcsICdub3Rfc2V0Jyk7DQoJCQkkd2lkdGggPSBIZWxwZXI6OmdldFBhcmFtcygpLT5nZXQoJHR5cGUgLiAnX3dpZHRoJywgJ25vdF9zZXQnKTsNCg0KCQkJLy8gR2V0IGZpbGUgZXh0ZW5zaW9uL2Zvcm1hdA0KCQkJJGZpbGVfZm9ybWF0ID0gTWltZUhlbHBlcjo6ZXh0ZW5zaW9uKCRmdWxsUGF0aCk7DQoNCgkJCS8vIGdldCBpbWFnZSBwcm9wZXJ0aWVzDQoJCQkkaW1hZ2UgPSBzZWxmOjpnZXRQcm9wZXJ0aWVzKCRmdWxsUGF0aCk7DQoNCgkJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGFuIG9iamVjdA0KCQkJaWYgKE9iamVjdEhlbHBlcjo6Y2hlY2soJGltYWdlKSAmJiBpc19zdHJpbmcoJGZpbGVfZm9ybWF0KSkNCgkJCXsNCgkJCQlpZiAoJHdpZHRoICE9PSAnbm90X3NldCcgJiYgJGhlaWdodCAhPT0gJ25vdF9zZXQnICYmICgkaW1hZ2UtPndpZHRoICE9ICR3aWR0aCB8fCAkaW1hZ2UtPmhlaWdodCAhPSAkaGVpZ2h0KSkNCgkJCQl7DQoJCQkJCS8vIGlmIGltYWdlIGlzIGh1Z2UgYW5kIHNob3VsZCBvbmx5IGJlIHNjYWxlZCwgcmVzaXplIGl0IG9uIHRoZSBmbHkNCgkJCQkJaWYoKCRpbWFnZS0+d2lkdGggPiA5MDAgfHwgJGltYWdlLT5oZWlnaHQgPiA3MDApICYmICgkaGVpZ2h0ID09IDAgfHwgJHdpZHRoID09IDApKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZWxlY3QgdGhlIGltYWdlICJnZXR0ZXIiIGJhc2VkIG9uIGZvcm1hdA0KCQkJCQkJaWYoJGZpbGVfZm9ybWF0ID09ICJqcGciIHx8ICRmaWxlX2Zvcm1hdCA9PSAianBlZyIgKQ0KCQkJCQkJew0KCQkJCQkJCSRzcmMgPSBpbWFnZWNyZWF0ZWZyb21qcGVnKCRmdWxsUGF0aCk7DQoJCQkJCQl9DQoJCQkJCQllbHNlaWYoJGZpbGVfZm9ybWF0ID09ICJwbmciKQ0KCQkJCQkJew0KCQkJCQkJCSRzcmMgPSBpbWFnZWNyZWF0ZWZyb21wbmcoJGZ1bGxQYXRoKTsNCgkJCQkJCX0NCgkJCQkJCWVsc2VpZigkZmlsZV9mb3JtYXQgPT0gImdpZiIpDQoJCQkJCQl7DQoJCQkJCQkJJHNyYyA9IGltYWdlY3JlYXRlZnJvbWdpZigkZnVsbFBhdGgpOw0KCQkJCQkJfQ0KCQkJCQkJLy8gd2Ugb25seSBzdXBwb3J0IHRoZSBhYm92ZSB0aHJlZSBmb3JtYXRzIGZvciBub3cNCgkJCQkJCWVsc2UNCgkJCQkJCXsNCgkJCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJCQl9DQoNCgkJCQkJCS8vIHdvcmtvdXQgdGhlIHJhdGlvIGlmIHdlIGhhdmUgaGVpZ2h0DQoJCQkJCQlpZiAoJGhlaWdodCAhPSAwKQ0KCQkJCQkJew0KCQkJCQkJCSRoZWlnaHRfcmF0aW8gPSAkaW1hZ2UtPmhlaWdodCAvICRoZWlnaHQ7DQoJCQkJCQl9DQoNCgkJCQkJCS8vIHdvcmtvdXQgdGhlIHJhdGlvIGlmIHdlIGhhdmUgd2lkdGgNCgkJCQkJCWlmICgkd2lkdGggIT0gMCkNCgkJCQkJCXsNCgkJCQkJCQkkd2lkdGhfcmF0aW8gPSAkaW1hZ2UtPndpZHRoIC8gJHdpZHRoOw0KCQkJCQkJfQ0KDQoJCQkJCQkvLyBzZXQgbWF4IHJhdGlvIGJhc2VkIG9uIGJvdGgNCgkJCQkJCWlmIChpc3NldCgkaGVpZ2h0X3JhdGlvKSAmJiBpc3NldCgkd2lkdGhfcmF0aW8pKQ0KCQkJCQkJew0KCQkJCQkJCSRtYXhfcmF0aW8JPSBtYXgoJHdpZHRoX3JhdGlvLCAkaGVpZ2h0X3JhdGlvKTsNCgkJCQkJCX0NCgkJCQkJCS8vIHNldCBtYXggcmF0aW8gYmFzZWQgb24gd2lkdGgNCgkJCQkJCWVsc2VpZiAoaXNzZXQoJHdpZHRoX3JhdGlvKSkNCgkJCQkJCXsNCgkJCQkJCQkkbWF4X3JhdGlvCT0gJHdpZHRoX3JhdGlvOw0KCQkJCQkJfQ0KCQkJCQkJLy8gc2V0IG1heCByYXRpbyBiYXNlZCBvbiBoZWlnaHQNCgkJCQkJCWVsc2VpZiAoaXNzZXQoJGhlaWdodF9yYXRpbykpDQoJCQkJCQl7DQoJCQkJCQkJJG1heF9yYXRpbwk9ICRoZWlnaHRfcmF0aW87DQoJCQkJCQl9DQoNCgkJCQkJCS8vIGlmIHdlIGhhdmUgcmF0aW8gZG8gdGhlIGNvbnZlcnNpb24NCgkJCQkJCWlmICgkbWF4X3JhdGlvID4gMSkNCgkJCQkJCXsNCgkJCQkJCQkkbmV3X3dpZHRoCT0gJGltYWdlLT53aWR0aCAvICRtYXhfcmF0aW87DQoJCQkJCQkJJG5ld19oZWlnaHQJPSAkaW1hZ2UtPmhlaWdodCAvICRtYXhfcmF0aW87DQoJCQkJCQl9DQoJCQkJCQllbHNlDQoJCQkJCQl7DQoJCQkJCQkJJG5ld193aWR0aAk9ICRpbWFnZS0+d2lkdGg7DQoJCQkJCQkJJG5ld19oZWlnaHQJPSAkaW1hZ2UtPmhlaWdodDsNCgkJCQkJCX0NCg0KCQkJCQkJJHRtcAkJCT0gaW1hZ2VjcmVhdGV0cnVlY29sb3IoJG5ld193aWR0aCwgJG5ld19oZWlnaHQpOw0KCQkJCQkJJGJhY2tncm91bmRfY29sb3IJPSBpbWFnZWNvbG9yYWxsb2NhdGUoJHRtcCwgMjU1LCAyNTUsIDI1NSk7DQoNCgkJCQkJCWltYWdlZmlsbCgkdG1wLCAwLCAwLCAkYmFja2dyb3VuZF9jb2xvcik7DQoJCQkJCQlpbWFnZWNvcHlyZXNhbXBsZWQoJHRtcCwgJHNyYywgMCwgMCwgMCwgMCwkbmV3X3dpZHRoLCAkbmV3X2hlaWdodCwgJGltYWdlLT53aWR0aCwgJGltYWdlLT5oZWlnaHQpOw0KCQkJCQkJaW1hZ2VqcGVnKCR0bXAsICRmdWxsUGF0aCwgMTAwKTsNCgkJCQkJCWltYWdlZGVzdHJveSgkc3JjKTsNCgkJCQkJCWltYWdlZGVzdHJveSgkdG1wKTsNCgkJCQkJfQ0KCQkJCQkvLyB3ZSBvbmx5IGNyb3AgaWYgYm90aCBoZWlnaHQgYW5kIHdpZHRoIGlzIHNldCB0byBjcm9wDQoJCQkJCWlmICgkaGVpZ2h0ICE9IDAgJiYgJHdpZHRoICE9IDApDQoJCQkJCXsNCgkJCQkJCS8vIGdldCB0aGUgY3VycmVudCBjb21wb25lbnQgY29kZSBuYW1lDQoJCQkJCQlpZiAoKCRjb21wb25lbnRfY29kZV9uYW1lID0gSGVscGVyOjpnZXRDb2RlKG51bGwsIGZhbHNlKSkgPT09IGZhbHNlKQ0KCQkJCQkJew0KCQkJCQkJCS8vIGlmIHdlIGNhbid0IGdldCB0aGUgY29tcG9uZW50IGNvZGUgbmFtZSB3ZSBzaG91bGQgYnJlYWsgcHV0IG5vdw0KCQkJCQkJCXJldHVybiBmYWxzZTsNCgkJCQkJCX0NCgkJCQkJCS8vIEluY2x1ZGUgd2lkZWltYWdlIC0gaHR0cDovL3dpZGVpbWFnZS5zb3VyY2Vmb3JnZS5uZXQgVE9ETzogaHR0cHM6Ly9naXRodWIuY29tL3Ntb3R0dC9XaWRlSW1hZ2UNCgkJCQkJCXJlcXVpcmVfb25jZShKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV8nIC4gJGNvbXBvbmVudF9jb2RlX25hbWUgLiAnL2hlbHBlcnMvd2lkZWltYWdlL1dpZGVJbWFnZS5waHAnKTsNCgkJCQkJCS8vIGxvYWQgdGhlIGltYWdlIGludG8gdGhlIGJ1aWxkZXINCgkJCQkJCSRidWlsZGVyID0gXFdpZGVJbWFnZTo6bG9hZCgkZnVsbFBhdGgpOw0KCQkJCQkJLy8gcmVzaXplIHRoZSBpbWFnZQ0KCQkJCQkJJHJlc2l6ZWQgPSAkYnVpbGRlci0+cmVzaXplKCR3aWR0aCwgJGhlaWdodCwgJ291dHNpZGUnKS0+Y3JvcCgnY2VudGVyJywgJ21pZGRsZScsICR3aWR0aCwgJGhlaWdodCk7DQoJCQkJCQkvLyBzYXZlIHRoZSBuZXcgaW1hZ2UgdG8gZnVsbCBmaWxlIHBhdGgNCgkJCQkJCSRyZXNpemVkLT5zYXZlVG9GaWxlKCRmdWxsUGF0aCk7DQoJCQkJCX0NCgkJCQl9DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBJbWFnZSBQcm9wZXJ0aWVzDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgJGZ1bGxQYXRoICAgVGhlIGZ1bGwgcGF0aCB0byB0aGUgaW1hZ2UNCgkgKg0KCSAqIEByZXR1cm4gYm9vbHxzdGRDbGFzcw0KCSAqIEBzaW5jZSAzLjAuMTENCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFByb3BlcnRpZXMoJGZ1bGxQYXRoKQ0KCXsNCgkJLy8gY2hlY2sgdGhhdCB0aGUgZmlsZSBleGlzdA0KCQlpZiAoRmlsZTo6ZXhpc3RzKCRmdWxsUGF0aCkpDQoJCXsNCgkJCSRwcm9wZXJ0aWVzID0gSW1hZ2U6OmdldEltYWdlRmlsZVByb3BlcnRpZXMoJGZ1bGxQYXRoKTsNCgkJCS8vIGNoZWNrIGlmIHdlIGhhdmUgcHJvcGVydGllcw0KCQkJaWYgKE9iamVjdEhlbHBlcjo6Y2hlY2soJHByb3BlcnRpZXMpKQ0KCQkJew0KCQkJCS8vIGdldCBpbWFnZSBmaWxlIG5hbWUNCgkJCQkkbmFtZSA9IGJhc2VuYW1lKCRmdWxsUGF0aCk7DQoJCQkJLy8gcmVtb3ZlIGZpbGUgbmFtZSBmcm9tIHBhdGgNCgkJCQkkZGlyX25hbWUgPSBwYXRoaW5mbygkZnVsbFBhdGgsIFBBVEhJTkZPX0RJUk5BTUUpOw0KCQkJCS8vIHJlbW92ZSB0aGUgc2VydmVyIHBhdGgNCgkJCQkkaW1hZ2VfcHVibGljX3BhdGggPSB0cmltKHN0cl9yZXBsYWNlKEpQQVRIX1NJVEUsICcnLCAkZGlyX25hbWUpLCAnLycpIC4gJy8nIC4gJG5hbWU7DQoJCQkJLy8gbm93IGFkZCB0aGUgc3JjIHBhdGggdG8gc2hvdyB0aGUgaW1hZ2UNCgkJCQkkcHJvcGVydGllcy0+c3JjID0gVXJpOjpyb290KCkgLiAkaW1hZ2VfcHVibGljX3BhdGg7DQoJCQkJLy8gcmV0dXJuIHRoZSBpbWFnZSBwcm9wZXJ0aWVzDQoJCQkJcmV0dXJuICRwcm9wZXJ0aWVzOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQo=', '{}', 'ImageHelper', 'VDM\\Joomla\\Utilities.ImageHelper', '1.0.0', '{}', 'Utilities ImageHelper', 'abstract class', '{\"use_selection0\":{\"use\":\"640b5352-fb09-425f-a26e-cd44eda03f15\",\"as\":\"default\"}}', '', 1, '2022-05-16 10:59:17', '2022-05-21 13:27:39', 17, 9), -(25, 1, 'Upload Helper\r\n\r\n@since 3.0.11', '', '', 'd7600b43-771a-4747-9f5d-952765721799', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcQ01TXExhbmd1YWdlXFRleHQ7DQp1c2UgSm9vbWxhXENNU1xGaWxlc3lzdGVtXEZpbGU7DQp1c2UgSm9vbWxhXENNU1xGaWxlc3lzdGVtXEZvbGRlcjsNCnVzZSBKb29tbGFcQ01TXEZpbGVzeXN0ZW1cUGF0aDs=', '', '', '{\"load_selection0\":{\"load\":\"f11dc790-713e-4706-9a85-a318ed3ad56e\"},\"load_selection1\":{\"load\":\"1f28cb53-60d9-4db1-b517-3c7dc6b429ef\"}}', 'CS8qKg0KCSAqIFRydWUgdG8gdXNlIHN0cmVhbXMNCgkgKg0KCSAqIEB2YXIgICAgYm9vbA0KCSAqDQoJICogQHNpbmNlICAzLjAuMTENCgkgKi8NCglwdWJsaWMgc3RhdGljICR1c2VTdHJlYW1zID0gZmFsc2U7DQoNCgkvKioNCgkgKiBBbGxvdyB0aGUgdXBsb2FkIG9mIHVuc2FmZSBmaWxlcw0KCSAqDQoJICogQHZhciAgICBib29sDQoJICoNCgkgKiBAc2luY2UgIDMuMC4xMQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgJGFsbG93VW5zYWZlID0gZmFsc2U7DQoNCgkvKioNCgkgKiBPcHRpb25zIHRvIElucHV0RmlsdGVyOjppc1NhZmVGaWxlDQoJICoNCgkgKiBAdmFyICAgIGFycmF5DQoJICoNCgkgKiBAc2luY2UgIDMuMC4xMQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgJHNhZmVGaWxlT3B0aW9ucyA9IGFycmF5KCk7DQoNCgkvKioNCgkgKiBTZXQgdGhlIGVycm9yIGJlaGF2aW9yDQoJICoNCgkgKiBAdmFyICAgIGJvb2wNCgkgKg0KCSAqIEBzaW5jZSAgMy4wLjExDQoJICovDQoJcHVibGljIHN0YXRpYyAkZW5xdWV1ZUVycm9yID0gdHJ1ZTsNCg0KCS8qKg0KCSAqIEVycm9ycw0KCSAqDQoJICogQHZhciAgICBhcnJheQ0KCSAqDQoJICogQHNpbmNlICAzLjAuMTENCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljICRlcnJvcnMgPSBhcnJheSgpOw0KDQoJLyoqDQoJICogR2V0IGZpbGUvZmlsZXMgZnJvbSBhIEhUVFAgdXBsb2FkLg0KCSAqDQoJICogQHBhcmFtICBzdHJpbmcgICAgICAgICAgJGZpZWxkICAgICAgICBUaGUgaW5wdXQgZmllbGQgbmFtZQ0KCSAqIEBwYXJhbSAgc3RyaW5nICAgICAgICAgICR0eXBlICAgICAgICBUaGUgZmlsZSB0eXBlDQoJICogQHBhcmFtICBzdHJpbmd8bnVsbCAgICRmaWx0ZXIgICAgICAgIFRoZSBmaWx0ZXIgdG8gdXNlIHdoZW4gdXBsb2FkaW5nIHRoZSBmaWxlDQoJICogQHBhcmFtICBzdHJpbmd8bnVsbCAgICRwYXRoICAgICAgICBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBpbWFnZSBtdXN0IGJlIHBsYWNlZA0KCSAqDQoJICogQHJldHVybiAgbWl4ZWQgICBGaWxlIGRldGFpbHMgb3IgZmFsc2Ugb24gZmFpbHVyZS4NCgkgKiBAc2luY2UgIDMuMC4xMQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0KHN0cmluZyAkZmllbGQsIHN0cmluZyAkdHlwZSwgc3RyaW5nICRmaWx0ZXIgPSBudWxsLCBzdHJpbmcgJHBhdGggPSBudWxsKQ0KCXsNCgkJLy8gR2V0IHRoZSB1cGxvYWRlZCBmaWxlIGluZm9ybWF0aW9uLg0KCQkkaW5wdXQgICAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT5pbnB1dDsNCg0KCQkvLyBzZXQgdGhlIGRlZmF1bHQgZmlsdGVyDQoJCWlmIChlbXB0eSgkZmlsdGVyKSkNCgkJew0KCQkJJGZpbHRlciA9ICdhcnJheSc7DQoJCX0NCgkJLy8gaWYgcmF3IHRoZW4gYWxzbyB1bnNhZmUNCgkJLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vam9vbWxhL2pvb21sYS1jbXMvYmxvYi80LjEtZGV2L2FkbWluaXN0cmF0b3IvY29tcG9uZW50cy9jb21faW5zdGFsbGVyL3NyYy9Nb2RlbC9JbnN0YWxsTW9kZWwucGhwI0wyNTkNCgkJZWxzZWlmICgkZmlsdGVyID09PSAncmF3JykNCgkJew0KCQkJc2VsZjo6JGFsbG93VW5zYWZlID0gdHJ1ZTsNCgkJfQ0KDQoJCS8vIGNoZWNrIGlmIHdlIGhhdmUgYSBmaWxlIGRlc3RpbmF0aW9uIG5hbWUgaW4gdGhlIGZpZWxkIG5hbWUNCgkJJG5hbWUgPSBudWxsOw0KCQlpZiAoc3RycG9zKCRmaWVsZCwgJzonKSAhPT0gZmFsc2UpDQoJCXsNCgkJCWxpc3QoJGZpZWxkLCAkbmFtZSkgPSBleHBsb2RlKCc6JywgJGZpZWxkKTsNCgkJfQ0KDQoJCS8vIFNlZSBKSW5wdXRGaWxlczo6Z2V0Lg0KCQkkdXNlcmZpbGUgPSAkaW5wdXQtPmZpbGVzLT5nZXQoJGZpZWxkLCBudWxsLCAkZmlsdGVyKTsNCg0KCQkvLyBNYWtlIHN1cmUgdGhhdCBmaWxlIHVwbG9hZHMgYXJlIGVuYWJsZWQgaW4gcGhwLg0KCQlpZiAoIShib29sKSBpbmlfZ2V0KCdmaWxlX3VwbG9hZHMnKSkNCgkJew0KCQkJc2VsZjo6c2V0RXJyb3IoVGV4dDo6XygnV2FybmluZywgdXBsb2FkIGVycm9yLicpKTsNCg0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoNCgkJLy8gSWYgdGhlcmUgaXMgbm8gdXBsb2FkZWQgZmlsZSwgd2UgaGF2ZSBhIHByb2JsZW0uLi4NCgkJaWYgKCFpc19hcnJheSgkdXNlcmZpbGUpKQ0KCQl7DQoJCQlzZWxmOjpzZXRFcnJvcihUZXh0OjpfKCdObyB1cGxvYWQgc2VsZWN0ZWQnKSk7DQoNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCS8vIElzIHRoZSBQSFAgdG1wIGRpcmVjdG9yeSBtaXNzaW5nPw0KCQlpZiAoJHVzZXJmaWxlWydlcnJvciddICYmICgkdXNlcmZpbGVbJ2Vycm9yJ10gPT0gVVBMT0FEX0VSUl9OT19UTVBfRElSKSkNCgkJew0KCQkJc2VsZjo6c2V0RXJyb3IoVGV4dDo6XygnVGhlcmUgd2FzIGFuIGVycm9yIHVwbG9hZGluZyB0byB0aGUgc2VydmVyLicpIC4gJzxicj4nIC4gVGV4dDo6XygnVGhlIFBIUCB0ZW1wb3JhcnkgZm9sZGVyIGlzIG5vdCBzZXQuJykpOw0KDQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCg0KCQkvLyBJcyB0aGUgbWF4IHVwbG9hZCBzaXplIHRvbyBzbWFsbCBpbiBwaHAuaW5pPw0KCQlpZiAoJHVzZXJmaWxlWydlcnJvciddICYmICgkdXNlcmZpbGVbJ2Vycm9yJ10gPT0gVVBMT0FEX0VSUl9JTklfU0laRSkpDQoJCXsNCgkJCXNlbGY6OnNldEVycm9yKFRleHQ6Ol8oJ1RoZXJlIHdhcyBhbiBlcnJvciB1cGxvYWRpbmcgdG8gdGhlIHNlcnZlci4nKSAuICc8YnI+JyAuIFRleHQ6Ol8oJ1lvdXIgZmlsZSB3YXMgaXMgbGFyZ2VyIHRoYW4gdGhlIGFsbG93ZWQgc2l6ZS4nKSk7DQoNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCS8vIENoZWNrIGlmIHRoZXJlIHdhcyBhIGRpZmZlcmVudCBwcm9ibGVtIHVwbG9hZGluZyB0aGUgZmlsZS4NCgkJaWYgKCR1c2VyZmlsZVsnZXJyb3InXSB8fCAkdXNlcmZpbGVbJ3NpemUnXSA8IDEpDQoJCXsNCgkJCXNlbGY6OnNldEVycm9yKFRleHQ6Ol8oJ1RoZXJlIHdhcyBhbiBlcnJvciB1cGxvYWRpbmcgdG8gdGhlIHNlcnZlci4nKSk7DQoNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCS8vIGNoZWNrIGlmIGEgcGF0aCB3YXMgcGFzc2VkIGFuZCBleGlzdA0KCQlpZiAoaXNfc3RyaW5nKCRwYXRoKSAmJiBGb2xkZXI6OmNyZWF0ZSgkcGF0aCkpDQoJCXsNCgkJCS8vIHNldCB0aGUgcGF0aA0KCQkJJHVzZXJmaWxlWydwYXRoJ10gPSAkcGF0aDsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCS8vIGdldCB0aGUgSm9vbWxhIGNvbmZpZyBjbGFzcw0KCQkJJGNvbmZpZyA9IEZhY3Rvcnk6OmdldENvbmZpZygpOw0KCQkJLy8gc2V0IHRoZSBwYXRoDQoJCQkkdXNlcmZpbGVbJ3BhdGgnXSA9ICRjb25maWctPmdldCgndG1wX3BhdGgnKTsNCgkJfQ0KDQoJCS8vIHNldCB0aGUgcmFuZG9tIHBhcnQgb2YgdGhlIG5hbWUNCgkJJHVzZXJmaWxlWydyYW5kb20nXSA9IFN0cmluZ0hlbHBlcjo6cmFuZG9tKDEyKTsNCg0KCQkvLyBzZXQgdGhlIGZpbGUgbmFtZQ0KCQlpZiAoZW1wdHkoJG5hbWUpKQ0KCQl7DQoJCQkvLyBzZXQgdGhlIGZpbGUgbmFtZQ0KCQkJJHVzZXJmaWxlWydmaWxlX25hbWUnXSA9ICR1c2VyZmlsZVsncmFuZG9tJ10gLiAkdXNlcmZpbGVbJ25hbWUnXTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCS8vIGNoZWNrIHRoYXQgaGlzIG5hbWUgaGFzIGZpbGUgZm9ybWF0DQoJCQlpZiAoaXNfc3RyaW5nKCRuYW1lKSAmJiBzdHJwb3MoJG5hbWUsICcuJykgPT09IGZhbHNlKQ0KCQkJew0KCQkJCSRuYW1lID0gJG5hbWUgLiAnLicgLiBNaW1lSGVscGVyOjpleHRlbnNpb24obnVsbCwgJHVzZXJmaWxlWyd0eXBlJ10pOw0KCQkJfQ0KCQkJJHVzZXJmaWxlWydmaWxlX25hbWUnXSA9ICRuYW1lOw0KCQl9DQoNCgkJLy8gc2V0IGZ1bGwgcGF0aA0KCQkkdXNlcmZpbGVbJ2Z1bGxfcGF0aCddID0gJHVzZXJmaWxlWydwYXRoJ10gLiAnLycgLiAkdXNlcmZpbGVbJ2ZpbGVfbmFtZSddOw0KDQoJCS8vIFVwbG9hZCB0aGUgZmlsZS4NCgkJaWYgKEZpbGU6OnVwbG9hZCgkdXNlcmZpbGVbJ3RtcF9uYW1lJ10sICR1c2VyZmlsZVsnZnVsbF9wYXRoJ10sIHNlbGY6OiR1c2VTdHJlYW1zLCBzZWxmOjokYWxsb3dVbnNhZmUpKQ0KCQl7DQoJCQkvLyBDaGVjayB0aGF0IHRoaXMgaXMgYSB2YWxpZCBmaWxlDQoJCQlyZXR1cm4gc2VsZjo6Y2hlY2soJHVzZXJmaWxlLCAkdHlwZSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEdldCB0aGUgZXJyb3JzDQoJICoNCgkgKiBAcGFyYW0gIGJvb2wgICAgICAgICAkdG9TdHJpbmcgICAgICBUaGUgb3B0aW9uIHRvIHJldHVybiBlcnJvcnMgYXMgYSBzdHJpbmcNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5DQoJICogQHNpbmNlICAzLjAuMTENCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEVycm9yKCR0b1N0cmluZyA9IGZhbHNlKQ0KCXsNCgkJaWYgKCR0b1N0cmluZykNCgkJew0KCQkJcmV0dXJuIGltcGxvZGUoJyAnIC4gUEhQX0VPTCwgc2VsZjo6JGVycm9ycyk7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRlcnJvcnM7DQoJfQ0KDQoJLyoqDQoJICogQ2hlY2sgYSBmaWxlIGFuZCB2ZXJpZmllcyBpdCBhcyBhIGFsbG93ZWQgZmlsZSBmb3JtYXQgZmlsZQ0KCSAqDQoJICogQHBhcmFtICBhcnJheSAgICAgICAgICR1cGxvYWQgICAgICBUaGUgdXBsb2FkZWQgZGV0YWlscyBhcnJheQ0KCSAqIEBwYXJhbSAgc3RyaW5nICAgICAgICAkdHlwZSAgICAgICAgICBUaGUgZmlsZSB0eXBlDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheSAgb2YgZWxlbWVudHMNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gY2hlY2soYXJyYXkgJHVwbG9hZCwgc3RyaW5nICR0eXBlKQ0KCXsNCgkJLy8gRGVmYXVsdCBmb3JtYXRzDQoJCSRmb3JtYXRzID0gTWltZUhlbHBlcjo6ZXh0ZW5zaW9ucygkdHlwZSk7DQoNCgkJLy8gQ2xlYW4gdGhlIHBhdGgNCgkJJHVwbG9hZF9wYXRoID0gUGF0aDo6Y2xlYW4oJHVwbG9hZFsnZnVsbF9wYXRoJ10pOw0KDQoJCS8vIEdldCBmaWxlIGV4dGVuc2lvbi9mb3JtYXQNCgkJJGZvcm1hdCA9IE1pbWVIZWxwZXI6OmV4dGVuc2lvbigkdXBsb2FkX3BhdGgpOw0KDQoJCS8vIExlZ2FsIGZpbGUgZm9ybWF0cw0KCQkkbGVnYWwgPSBhcnJheSgpOw0KDQoJCS8vIGNoZWNrIGlmIHRoZSBmaWxlIGZvcm1hdCBpcyBldmVuIGluIHRoZSBsaXN0DQoJCWlmIChpbl9hcnJheSgkZm9ybWF0LCAkZm9ybWF0cykpDQoJCXsNCgkJCS8vIGdldCBhbGxvd2VkIGZvcm1hdHMNCgkJCSRsZWdhbCA9IChhcnJheSkgSGVscGVyOjpnZXRQYXJhbXMoKS0+Z2V0KCR0eXBlIC4gJ19mb3JtYXRzJywgYXJyYXkoKSk7DQoJCX0NCg0KCQkvLyBjaGVjayB0aGUgZXh0ZW5zaW9uDQoJCWlmICghaW5fYXJyYXkoJGZvcm1hdCwgJGxlZ2FsKSkNCgkJew0KCQkJLy8gQ2xlYW51cCB0aGUgaW1wb3J0IGZpbGUNCgkJCXNlbGY6OnJlbW92ZSgkdXBsb2FkWydmdWxsX3BhdGgnXSk7DQoNCgkJCXNlbGY6OnNldEVycm9yKFRleHQ6Ol8oJ1VwbG9hZCBpcyBub3QgYSB2YWxpZCB0eXBlLicpKTsNCg0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoNCgkJcmV0dXJuICR1cGxvYWQ7DQoJfQ0KDQoJLyoqDQoJICogQ2xlYW4gdXAgdGVtcG9yYXJ5IHVwbG9hZGVkIGZpbGUNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgJGZ1bGxQYXRoICAgIFRoZSBmdWxsIHBhdGggb2YgdGhlIHVwbG9hZGVkIGZpbGUNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2xlYW4gIFRydWUgb24gc3VjY2Vzcw0KCSAqDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiByZW1vdmUoJGZ1bGxQYXRoKQ0KCXsNCgkJLy8gSXMgdGhlIHBhY2thZ2UgZmlsZSBhIHZhbGlkIGZpbGU/DQoJCWlmIChpc19maWxlKCRmdWxsUGF0aCkpDQoJCXsNCgkJCUZpbGU6OmRlbGV0ZSgkZnVsbFBhdGgpOw0KCQl9DQoJCWVsc2VpZiAoaXNfZmlsZShQYXRoOjpjbGVhbigkZnVsbFBhdGgpKSkNCgkJew0KCQkJLy8gSXQgbWlnaHQgYWxzbyBiZSBqdXN0IGEgYmFzZSBmaWxlbmFtZQ0KCQkJRmlsZTo6ZGVsZXRlKFBhdGg6OmNsZWFuKCRmdWxsUGF0aCkpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogU2V0IHRoZSBlcnJvcnMNCgkgKg0KCSAqIEBwYXJhbSAgc3RyaW5nICAgICAgICAkbWVzc2FnZSAgIFRoZSBlcnJvciBtZXNzYWdlDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAzLjAuMTENCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldEVycm9yKCRtZXNzYWdlKQ0KCXsNCgkJaWYgKHNlbGY6OiRlbnF1ZXVlRXJyb3IpDQoJCXsNCgkJCUZhY3Rvcnk6OmdldEFwcGxpY2F0aW9uKCktPmVucXVldWVNZXNzYWdlKCRtZXNzYWdlLCAnZXJyb3InKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCXNlbGY6OiRlcnJvcnNbXSA9ICRtZXNzYWdlOw0KCQl9DQoJfQ==', '{}', 'UploadHelper', 'VDM\\Joomla\\Utilities.UploadHelper', '1.0.0', '{}', 'Utilities UploadHelper', 'abstract class', '{\"use_selection0\":{\"use\":\"640b5352-fb09-425f-a26e-cd44eda03f15\",\"as\":\"default\"}}', '', 1, '2022-05-16 13:20:50', '2022-05-21 13:27:39', 31, 9), +(24, 1, 'Image helper\r\n\r\n@since 3.0.11', '', '', '962b15d8-915f-4cd7-aea6-7cf82afdc20b', 'dXNlIEpvb21sYVxDTVNcRmlsZXN5c3RlbVxGaWxlOw0KdXNlIEpvb21sYVxDTVNcRmlsZXN5c3RlbVxGb2xkZXI7DQp1c2UgSm9vbWxhXENNU1xVcmlcVXJpOw0KdXNlIEpvb21sYVxDTVNcSW1hZ2VcSW1hZ2U7', '', '', '{\"load_selection0\":{\"load\":\"91004529-94a9-4590-b842-e7c6b624ecf5\"},\"load_selection1\":{\"load\":\"f11dc790-713e-4706-9a85-a318ed3ad56e\"}}', 'CS8qKg0KCSAqIFJlc2l6ZSBhbiBpbWFnZQ0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgICRmdWxsUGF0aCAgIFRoZSBmdWxsIHBhdGggdG8gdGhlIGltYWdlDQoJICogQHBhcmFtICAgc3RyaW5nICAgICR0eXBlICAgICAgICBUaGUgdHlwZSBvZiBpbWFnZQ0KCSAqDQoJICogQHJldHVybiBib29sDQoJICogQHNpbmNlIDMuMC4xMQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVzaXplKHN0cmluZyAkZnVsbFBhdGgsIHN0cmluZyAkdHlwZSkNCgl7DQoJCS8vIGZpcnN0IGNoZWNrIGlmIHdlIHNob3VsZCByZXNpemUgdGhpcyB0YXJnZXQNCgkJaWYgKDEgPT0gSGVscGVyOjpnZXRQYXJhbXMoKS0+Z2V0KCR0eXBlIC4gJ19yZXNpemUnLCAwKSkNCgkJew0KCQkJLy8gbG9hZCB0aGUgc2l6ZSB0byBiZSBzZXQNCgkJCSRoZWlnaHQgPSBIZWxwZXI6OmdldFBhcmFtcygpLT5nZXQoJHR5cGUgLiAnX2hlaWdodCcsICdub3Rfc2V0Jyk7DQoJCQkkd2lkdGggPSBIZWxwZXI6OmdldFBhcmFtcygpLT5nZXQoJHR5cGUgLiAnX3dpZHRoJywgJ25vdF9zZXQnKTsNCg0KCQkJLy8gR2V0IGZpbGUgZXh0ZW5zaW9uL2Zvcm1hdA0KCQkJJGZpbGVfZm9ybWF0ID0gTWltZUhlbHBlcjo6ZXh0ZW5zaW9uKCRmdWxsUGF0aCk7DQoNCgkJCS8vIGdldCBpbWFnZSBwcm9wZXJ0aWVzDQoJCQkkaW1hZ2UgPSBzZWxmOjpnZXRQcm9wZXJ0aWVzKCRmdWxsUGF0aCk7DQoNCgkJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGFuIG9iamVjdA0KCQkJaWYgKE9iamVjdEhlbHBlcjo6Y2hlY2soJGltYWdlKSAmJiBpc19zdHJpbmcoJGZpbGVfZm9ybWF0KSkNCgkJCXsNCgkJCQlpZiAoJHdpZHRoICE9PSAnbm90X3NldCcgJiYgJGhlaWdodCAhPT0gJ25vdF9zZXQnICYmICgkaW1hZ2UtPndpZHRoICE9ICR3aWR0aCB8fCAkaW1hZ2UtPmhlaWdodCAhPSAkaGVpZ2h0KSkNCgkJCQl7DQoJCQkJCS8vIGlmIGltYWdlIGlzIGh1Z2UgYW5kIHNob3VsZCBvbmx5IGJlIHNjYWxlZCwgcmVzaXplIGl0IG9uIHRoZSBmbHkNCgkJCQkJaWYoKCRpbWFnZS0+d2lkdGggPiA5MDAgfHwgJGltYWdlLT5oZWlnaHQgPiA3MDApICYmICgkaGVpZ2h0ID09IDAgfHwgJHdpZHRoID09IDApKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZWxlY3QgdGhlIGltYWdlICJnZXR0ZXIiIGJhc2VkIG9uIGZvcm1hdA0KCQkJCQkJaWYoJGZpbGVfZm9ybWF0ID09ICJqcGciIHx8ICRmaWxlX2Zvcm1hdCA9PSAianBlZyIgKQ0KCQkJCQkJew0KCQkJCQkJCSRzcmMgPSBpbWFnZWNyZWF0ZWZyb21qcGVnKCRmdWxsUGF0aCk7DQoJCQkJCQl9DQoJCQkJCQllbHNlaWYoJGZpbGVfZm9ybWF0ID09ICJwbmciKQ0KCQkJCQkJew0KCQkJCQkJCSRzcmMgPSBpbWFnZWNyZWF0ZWZyb21wbmcoJGZ1bGxQYXRoKTsNCgkJCQkJCX0NCgkJCQkJCWVsc2VpZigkZmlsZV9mb3JtYXQgPT0gImdpZiIpDQoJCQkJCQl7DQoJCQkJCQkJJHNyYyA9IGltYWdlY3JlYXRlZnJvbWdpZigkZnVsbFBhdGgpOw0KCQkJCQkJfQ0KCQkJCQkJLy8gd2Ugb25seSBzdXBwb3J0IHRoZSBhYm92ZSB0aHJlZSBmb3JtYXRzIGZvciBub3cNCgkJCQkJCWVsc2UNCgkJCQkJCXsNCgkJCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJCQl9DQoNCgkJCQkJCS8vIHdvcmtvdXQgdGhlIHJhdGlvIGlmIHdlIGhhdmUgaGVpZ2h0DQoJCQkJCQlpZiAoJGhlaWdodCAhPSAwKQ0KCQkJCQkJew0KCQkJCQkJCSRoZWlnaHRfcmF0aW8gPSAkaW1hZ2UtPmhlaWdodCAvICRoZWlnaHQ7DQoJCQkJCQl9DQoNCgkJCQkJCS8vIHdvcmtvdXQgdGhlIHJhdGlvIGlmIHdlIGhhdmUgd2lkdGgNCgkJCQkJCWlmICgkd2lkdGggIT0gMCkNCgkJCQkJCXsNCgkJCQkJCQkkd2lkdGhfcmF0aW8gPSAkaW1hZ2UtPndpZHRoIC8gJHdpZHRoOw0KCQkJCQkJfQ0KDQoJCQkJCQkvLyBzZXQgbWF4IHJhdGlvIGJhc2VkIG9uIGJvdGgNCgkJCQkJCWlmIChpc3NldCgkaGVpZ2h0X3JhdGlvKSAmJiBpc3NldCgkd2lkdGhfcmF0aW8pKQ0KCQkJCQkJew0KCQkJCQkJCSRtYXhfcmF0aW8JPSBtYXgoJHdpZHRoX3JhdGlvLCAkaGVpZ2h0X3JhdGlvKTsNCgkJCQkJCX0NCgkJCQkJCS8vIHNldCBtYXggcmF0aW8gYmFzZWQgb24gd2lkdGgNCgkJCQkJCWVsc2VpZiAoaXNzZXQoJHdpZHRoX3JhdGlvKSkNCgkJCQkJCXsNCgkJCQkJCQkkbWF4X3JhdGlvCT0gJHdpZHRoX3JhdGlvOw0KCQkJCQkJfQ0KCQkJCQkJLy8gc2V0IG1heCByYXRpbyBiYXNlZCBvbiBoZWlnaHQNCgkJCQkJCWVsc2VpZiAoaXNzZXQoJGhlaWdodF9yYXRpbykpDQoJCQkJCQl7DQoJCQkJCQkJJG1heF9yYXRpbwk9ICRoZWlnaHRfcmF0aW87DQoJCQkJCQl9DQoNCgkJCQkJCS8vIGlmIHdlIGhhdmUgcmF0aW8gZG8gdGhlIGNvbnZlcnNpb24NCgkJCQkJCWlmICgkbWF4X3JhdGlvID4gMSkNCgkJCQkJCXsNCgkJCQkJCQkkbmV3X3dpZHRoCT0gJGltYWdlLT53aWR0aCAvICRtYXhfcmF0aW87DQoJCQkJCQkJJG5ld19oZWlnaHQJPSAkaW1hZ2UtPmhlaWdodCAvICRtYXhfcmF0aW87DQoJCQkJCQl9DQoJCQkJCQllbHNlDQoJCQkJCQl7DQoJCQkJCQkJJG5ld193aWR0aAk9ICRpbWFnZS0+d2lkdGg7DQoJCQkJCQkJJG5ld19oZWlnaHQJPSAkaW1hZ2UtPmhlaWdodDsNCgkJCQkJCX0NCg0KCQkJCQkJJHRtcAkJCT0gaW1hZ2VjcmVhdGV0cnVlY29sb3IoJG5ld193aWR0aCwgJG5ld19oZWlnaHQpOw0KCQkJCQkJJGJhY2tncm91bmRfY29sb3IJPSBpbWFnZWNvbG9yYWxsb2NhdGUoJHRtcCwgMjU1LCAyNTUsIDI1NSk7DQoNCgkJCQkJCWltYWdlZmlsbCgkdG1wLCAwLCAwLCAkYmFja2dyb3VuZF9jb2xvcik7DQoJCQkJCQlpbWFnZWNvcHlyZXNhbXBsZWQoJHRtcCwgJHNyYywgMCwgMCwgMCwgMCwkbmV3X3dpZHRoLCAkbmV3X2hlaWdodCwgJGltYWdlLT53aWR0aCwgJGltYWdlLT5oZWlnaHQpOw0KCQkJCQkJaW1hZ2VqcGVnKCR0bXAsICRmdWxsUGF0aCwgMTAwKTsNCgkJCQkJCWltYWdlZGVzdHJveSgkc3JjKTsNCgkJCQkJCWltYWdlZGVzdHJveSgkdG1wKTsNCgkJCQkJfQ0KCQkJCQkvLyB3ZSBvbmx5IGNyb3AgaWYgYm90aCBoZWlnaHQgYW5kIHdpZHRoIGlzIHNldCB0byBjcm9wDQoJCQkJCWlmICgkaGVpZ2h0ICE9IDAgJiYgJHdpZHRoICE9IDApDQoJCQkJCXsNCgkJCQkJCS8vIGdldCB0aGUgY3VycmVudCBjb21wb25lbnQgY29kZSBuYW1lDQoJCQkJCQlpZiAoKCRjb21wb25lbnRfY29kZV9uYW1lID0gSGVscGVyOjpnZXRDb2RlKG51bGwsIGZhbHNlKSkgPT09IGZhbHNlKQ0KCQkJCQkJew0KCQkJCQkJCS8vIGlmIHdlIGNhbid0IGdldCB0aGUgY29tcG9uZW50IGNvZGUgbmFtZSB3ZSBzaG91bGQgYnJlYWsgcHV0IG5vdw0KCQkJCQkJCXJldHVybiBmYWxzZTsNCgkJCQkJCX0NCgkJCQkJCS8vIEluY2x1ZGUgd2lkZWltYWdlIC0gaHR0cDovL3dpZGVpbWFnZS5zb3VyY2Vmb3JnZS5uZXQgVE9ETzogaHR0cHM6Ly9naXRodWIuY29tL3Ntb3R0dC9XaWRlSW1hZ2UNCgkJCQkJCXJlcXVpcmVfb25jZShKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV8nIC4gJGNvbXBvbmVudF9jb2RlX25hbWUgLiAnL2hlbHBlcnMvd2lkZWltYWdlL1dpZGVJbWFnZS5waHAnKTsNCgkJCQkJCS8vIGxvYWQgdGhlIGltYWdlIGludG8gdGhlIGJ1aWxkZXINCgkJCQkJCSRidWlsZGVyID0gXFdpZGVJbWFnZTo6bG9hZCgkZnVsbFBhdGgpOw0KCQkJCQkJLy8gcmVzaXplIHRoZSBpbWFnZQ0KCQkJCQkJJHJlc2l6ZWQgPSAkYnVpbGRlci0+cmVzaXplKCR3aWR0aCwgJGhlaWdodCwgJ291dHNpZGUnKS0+Y3JvcCgnY2VudGVyJywgJ21pZGRsZScsICR3aWR0aCwgJGhlaWdodCk7DQoJCQkJCQkvLyBzYXZlIHRoZSBuZXcgaW1hZ2UgdG8gZnVsbCBmaWxlIHBhdGgNCgkJCQkJCSRyZXNpemVkLT5zYXZlVG9GaWxlKCRmdWxsUGF0aCk7DQoJCQkJCX0NCgkJCQl9DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBJbWFnZSBQcm9wZXJ0aWVzDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgJGZ1bGxQYXRoICAgVGhlIGZ1bGwgcGF0aCB0byB0aGUgaW1hZ2UNCgkgKg0KCSAqIEByZXR1cm4gYm9vbHxzdGRDbGFzcw0KCSAqIEBzaW5jZSAzLjAuMTENCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFByb3BlcnRpZXMoJGZ1bGxQYXRoKQ0KCXsNCgkJLy8gY2hlY2sgdGhhdCB0aGUgZmlsZSBleGlzdA0KCQlpZiAoRmlsZTo6ZXhpc3RzKCRmdWxsUGF0aCkpDQoJCXsNCgkJCSRwcm9wZXJ0aWVzID0gSW1hZ2U6OmdldEltYWdlRmlsZVByb3BlcnRpZXMoJGZ1bGxQYXRoKTsNCgkJCS8vIGNoZWNrIGlmIHdlIGhhdmUgcHJvcGVydGllcw0KCQkJaWYgKE9iamVjdEhlbHBlcjo6Y2hlY2soJHByb3BlcnRpZXMpKQ0KCQkJew0KCQkJCS8vIGdldCBpbWFnZSBmaWxlIG5hbWUNCgkJCQkkbmFtZSA9IGJhc2VuYW1lKCRmdWxsUGF0aCk7DQoJCQkJLy8gcmVtb3ZlIGZpbGUgbmFtZSBmcm9tIHBhdGgNCgkJCQkkZGlyX25hbWUgPSBwYXRoaW5mbygkZnVsbFBhdGgsIFBBVEhJTkZPX0RJUk5BTUUpOw0KCQkJCS8vIHJlbW92ZSB0aGUgc2VydmVyIHBhdGgNCgkJCQkkaW1hZ2VfcHVibGljX3BhdGggPSB0cmltKHN0cl9yZXBsYWNlKEpQQVRIX1NJVEUsICcnLCAkZGlyX25hbWUpLCAnLycpIC4gJy8nIC4gJG5hbWU7DQoJCQkJLy8gbm93IGFkZCB0aGUgc3JjIHBhdGggdG8gc2hvdyB0aGUgaW1hZ2UNCgkJCQkkcHJvcGVydGllcy0+c3JjID0gVXJpOjpyb290KCkgLiAkaW1hZ2VfcHVibGljX3BhdGg7DQoJCQkJLy8gcmV0dXJuIHRoZSBpbWFnZSBwcm9wZXJ0aWVzDQoJCQkJcmV0dXJuICRwcm9wZXJ0aWVzOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQo=', '{}', 'ImageHelper', 'VDM\\Joomla\\Utilities.ImageHelper', '1.0.0', '{}', 'Utilities ImageHelper', 'abstract class', '{\"use_selection0\":{\"use\":\"640b5352-fb09-425f-a26e-cd44eda03f15\",\"as\":\"default\"}}', '', 1, '2022-05-16 10:59:17', '2022-09-03 17:18:33', 18, 9), +(25, 1, 'Upload Helper\r\n\r\n@since 3.0.11', '', '', 'd7600b43-771a-4747-9f5d-952765721799', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcQ01TXExhbmd1YWdlXFRleHQ7DQp1c2UgSm9vbWxhXENNU1xGaWxlc3lzdGVtXEZpbGU7DQp1c2UgSm9vbWxhXENNU1xGaWxlc3lzdGVtXEZvbGRlcjsNCnVzZSBKb29tbGFcQ01TXEZpbGVzeXN0ZW1cUGF0aDs=', '', '', '{\"load_selection0\":{\"load\":\"f11dc790-713e-4706-9a85-a318ed3ad56e\"},\"load_selection1\":{\"load\":\"1f28cb53-60d9-4db1-b517-3c7dc6b429ef\"}}', 'CS8qKg0KCSAqIFRydWUgdG8gdXNlIHN0cmVhbXMNCgkgKg0KCSAqIEB2YXIgICAgYm9vbA0KCSAqDQoJICogQHNpbmNlICAzLjAuMTENCgkgKi8NCglwdWJsaWMgc3RhdGljICR1c2VTdHJlYW1zID0gZmFsc2U7DQoNCgkvKioNCgkgKiBBbGxvdyB0aGUgdXBsb2FkIG9mIHVuc2FmZSBmaWxlcw0KCSAqDQoJICogQHZhciAgICBib29sDQoJICoNCgkgKiBAc2luY2UgIDMuMC4xMQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgJGFsbG93VW5zYWZlID0gZmFsc2U7DQoNCgkvKioNCgkgKiBPcHRpb25zIHRvIElucHV0RmlsdGVyOjppc1NhZmVGaWxlDQoJICoNCgkgKiBAdmFyICAgIGFycmF5DQoJICoNCgkgKiBAc2luY2UgIDMuMC4xMQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgJHNhZmVGaWxlT3B0aW9ucyA9IGFycmF5KCk7DQoNCgkvKioNCgkgKiBTZXQgdGhlIGVycm9yIGJlaGF2aW9yDQoJICoNCgkgKiBAdmFyICAgIGJvb2wNCgkgKg0KCSAqIEBzaW5jZSAgMy4wLjExDQoJICovDQoJcHVibGljIHN0YXRpYyAkZW5xdWV1ZUVycm9yID0gdHJ1ZTsNCg0KCS8qKg0KCSAqIEVycm9ycw0KCSAqDQoJICogQHZhciAgICBhcnJheQ0KCSAqDQoJICogQHNpbmNlICAzLjAuMTENCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljICRlcnJvcnMgPSBhcnJheSgpOw0KDQoJLyoqDQoJICogR2V0IGZpbGUvZmlsZXMgZnJvbSBhIEhUVFAgdXBsb2FkLg0KCSAqDQoJICogQHBhcmFtICBzdHJpbmcgICAgICAgICAgJGZpZWxkICAgICAgICBUaGUgaW5wdXQgZmllbGQgbmFtZQ0KCSAqIEBwYXJhbSAgc3RyaW5nICAgICAgICAgICR0eXBlICAgICAgICBUaGUgZmlsZSB0eXBlDQoJICogQHBhcmFtICBzdHJpbmd8bnVsbCAgICRmaWx0ZXIgICAgICAgIFRoZSBmaWx0ZXIgdG8gdXNlIHdoZW4gdXBsb2FkaW5nIHRoZSBmaWxlDQoJICogQHBhcmFtICBzdHJpbmd8bnVsbCAgICRwYXRoICAgICAgICBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBpbWFnZSBtdXN0IGJlIHBsYWNlZA0KCSAqDQoJICogQHJldHVybiAgbWl4ZWQgICBGaWxlIGRldGFpbHMgb3IgZmFsc2Ugb24gZmFpbHVyZS4NCgkgKiBAc2luY2UgIDMuMC4xMQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0KHN0cmluZyAkZmllbGQsIHN0cmluZyAkdHlwZSwgc3RyaW5nICRmaWx0ZXIgPSBudWxsLCBzdHJpbmcgJHBhdGggPSBudWxsKQ0KCXsNCgkJLy8gR2V0IHRoZSB1cGxvYWRlZCBmaWxlIGluZm9ybWF0aW9uLg0KCQkkaW5wdXQgICAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT5pbnB1dDsNCg0KCQkvLyBzZXQgdGhlIGRlZmF1bHQgZmlsdGVyDQoJCWlmIChlbXB0eSgkZmlsdGVyKSkNCgkJew0KCQkJJGZpbHRlciA9ICdhcnJheSc7DQoJCX0NCgkJLy8gaWYgcmF3IHRoZW4gYWxzbyB1bnNhZmUNCgkJLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vam9vbWxhL2pvb21sYS1jbXMvYmxvYi80LjEtZGV2L2FkbWluaXN0cmF0b3IvY29tcG9uZW50cy9jb21faW5zdGFsbGVyL3NyYy9Nb2RlbC9JbnN0YWxsTW9kZWwucGhwI0wyNTkNCgkJZWxzZWlmICgkZmlsdGVyID09PSAncmF3JykNCgkJew0KCQkJc2VsZjo6JGFsbG93VW5zYWZlID0gdHJ1ZTsNCgkJfQ0KDQoJCS8vIGNoZWNrIGlmIHdlIGhhdmUgYSBmaWxlIGRlc3RpbmF0aW9uIG5hbWUgaW4gdGhlIGZpZWxkIG5hbWUNCgkJJG5hbWUgPSBudWxsOw0KCQlpZiAoc3RycG9zKCRmaWVsZCwgJzonKSAhPT0gZmFsc2UpDQoJCXsNCgkJCWxpc3QoJGZpZWxkLCAkbmFtZSkgPSBleHBsb2RlKCc6JywgJGZpZWxkKTsNCgkJfQ0KDQoJCS8vIFNlZSBKSW5wdXRGaWxlczo6Z2V0Lg0KCQkkdXNlcmZpbGUgPSAkaW5wdXQtPmZpbGVzLT5nZXQoJGZpZWxkLCBudWxsLCAkZmlsdGVyKTsNCg0KCQkvLyBNYWtlIHN1cmUgdGhhdCBmaWxlIHVwbG9hZHMgYXJlIGVuYWJsZWQgaW4gcGhwLg0KCQlpZiAoIShib29sKSBpbmlfZ2V0KCdmaWxlX3VwbG9hZHMnKSkNCgkJew0KCQkJc2VsZjo6c2V0RXJyb3IoVGV4dDo6XygnV2FybmluZywgdXBsb2FkIGVycm9yLicpKTsNCg0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoNCgkJLy8gSWYgdGhlcmUgaXMgbm8gdXBsb2FkZWQgZmlsZSwgd2UgaGF2ZSBhIHByb2JsZW0uLi4NCgkJaWYgKCFpc19hcnJheSgkdXNlcmZpbGUpKQ0KCQl7DQoJCQlzZWxmOjpzZXRFcnJvcihUZXh0OjpfKCdObyB1cGxvYWQgc2VsZWN0ZWQnKSk7DQoNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCS8vIElzIHRoZSBQSFAgdG1wIGRpcmVjdG9yeSBtaXNzaW5nPw0KCQlpZiAoJHVzZXJmaWxlWydlcnJvciddICYmICgkdXNlcmZpbGVbJ2Vycm9yJ10gPT0gVVBMT0FEX0VSUl9OT19UTVBfRElSKSkNCgkJew0KCQkJc2VsZjo6c2V0RXJyb3IoVGV4dDo6XygnVGhlcmUgd2FzIGFuIGVycm9yIHVwbG9hZGluZyB0byB0aGUgc2VydmVyLicpIC4gJzxicj4nIC4gVGV4dDo6XygnVGhlIFBIUCB0ZW1wb3JhcnkgZm9sZGVyIGlzIG5vdCBzZXQuJykpOw0KDQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCg0KCQkvLyBJcyB0aGUgbWF4IHVwbG9hZCBzaXplIHRvbyBzbWFsbCBpbiBwaHAuaW5pPw0KCQlpZiAoJHVzZXJmaWxlWydlcnJvciddICYmICgkdXNlcmZpbGVbJ2Vycm9yJ10gPT0gVVBMT0FEX0VSUl9JTklfU0laRSkpDQoJCXsNCgkJCXNlbGY6OnNldEVycm9yKFRleHQ6Ol8oJ1RoZXJlIHdhcyBhbiBlcnJvciB1cGxvYWRpbmcgdG8gdGhlIHNlcnZlci4nKSAuICc8YnI+JyAuIFRleHQ6Ol8oJ1lvdXIgZmlsZSB3YXMgaXMgbGFyZ2VyIHRoYW4gdGhlIGFsbG93ZWQgc2l6ZS4nKSk7DQoNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCS8vIENoZWNrIGlmIHRoZXJlIHdhcyBhIGRpZmZlcmVudCBwcm9ibGVtIHVwbG9hZGluZyB0aGUgZmlsZS4NCgkJaWYgKCR1c2VyZmlsZVsnZXJyb3InXSB8fCAkdXNlcmZpbGVbJ3NpemUnXSA8IDEpDQoJCXsNCgkJCXNlbGY6OnNldEVycm9yKFRleHQ6Ol8oJ1RoZXJlIHdhcyBhbiBlcnJvciB1cGxvYWRpbmcgdG8gdGhlIHNlcnZlci4nKSk7DQoNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCS8vIGNoZWNrIGlmIGEgcGF0aCB3YXMgcGFzc2VkIGFuZCBleGlzdA0KCQlpZiAoaXNfc3RyaW5nKCRwYXRoKSAmJiBGb2xkZXI6OmNyZWF0ZSgkcGF0aCkpDQoJCXsNCgkJCS8vIHNldCB0aGUgcGF0aA0KCQkJJHVzZXJmaWxlWydwYXRoJ10gPSAkcGF0aDsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCS8vIGdldCB0aGUgSm9vbWxhIGNvbmZpZyBjbGFzcw0KCQkJJGNvbmZpZyA9IEZhY3Rvcnk6OmdldENvbmZpZygpOw0KCQkJLy8gc2V0IHRoZSBwYXRoDQoJCQkkdXNlcmZpbGVbJ3BhdGgnXSA9ICRjb25maWctPmdldCgndG1wX3BhdGgnKTsNCgkJfQ0KDQoJCS8vIHNldCB0aGUgcmFuZG9tIHBhcnQgb2YgdGhlIG5hbWUNCgkJJHVzZXJmaWxlWydyYW5kb20nXSA9IFN0cmluZ0hlbHBlcjo6cmFuZG9tKDEyKTsNCg0KCQkvLyBzZXQgdGhlIGZpbGUgbmFtZQ0KCQlpZiAoZW1wdHkoJG5hbWUpKQ0KCQl7DQoJCQkvLyBzZXQgdGhlIGZpbGUgbmFtZQ0KCQkJJHVzZXJmaWxlWydmaWxlX25hbWUnXSA9ICR1c2VyZmlsZVsncmFuZG9tJ10gLiAkdXNlcmZpbGVbJ25hbWUnXTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCS8vIGNoZWNrIHRoYXQgaGlzIG5hbWUgaGFzIGZpbGUgZm9ybWF0DQoJCQlpZiAoaXNfc3RyaW5nKCRuYW1lKSAmJiBzdHJwb3MoJG5hbWUsICcuJykgPT09IGZhbHNlKQ0KCQkJew0KCQkJCSRuYW1lID0gJG5hbWUgLiAnLicgLiBNaW1lSGVscGVyOjpleHRlbnNpb24obnVsbCwgJHVzZXJmaWxlWyd0eXBlJ10pOw0KCQkJfQ0KCQkJJHVzZXJmaWxlWydmaWxlX25hbWUnXSA9ICRuYW1lOw0KCQl9DQoNCgkJLy8gc2V0IGZ1bGwgcGF0aA0KCQkkdXNlcmZpbGVbJ2Z1bGxfcGF0aCddID0gJHVzZXJmaWxlWydwYXRoJ10gLiAnLycgLiAkdXNlcmZpbGVbJ2ZpbGVfbmFtZSddOw0KDQoJCS8vIFVwbG9hZCB0aGUgZmlsZS4NCgkJaWYgKEZpbGU6OnVwbG9hZCgkdXNlcmZpbGVbJ3RtcF9uYW1lJ10sICR1c2VyZmlsZVsnZnVsbF9wYXRoJ10sIHNlbGY6OiR1c2VTdHJlYW1zLCBzZWxmOjokYWxsb3dVbnNhZmUpKQ0KCQl7DQoJCQkvLyBDaGVjayB0aGF0IHRoaXMgaXMgYSB2YWxpZCBmaWxlDQoJCQlyZXR1cm4gc2VsZjo6Y2hlY2soJHVzZXJmaWxlLCAkdHlwZSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEdldCB0aGUgZXJyb3JzDQoJICoNCgkgKiBAcGFyYW0gIGJvb2wgICAgICAgICAkdG9TdHJpbmcgICAgICBUaGUgb3B0aW9uIHRvIHJldHVybiBlcnJvcnMgYXMgYSBzdHJpbmcNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5DQoJICogQHNpbmNlICAzLjAuMTENCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEVycm9yKCR0b1N0cmluZyA9IGZhbHNlKQ0KCXsNCgkJaWYgKCR0b1N0cmluZykNCgkJew0KCQkJcmV0dXJuIGltcGxvZGUoJyAnIC4gUEhQX0VPTCwgc2VsZjo6JGVycm9ycyk7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRlcnJvcnM7DQoJfQ0KDQoJLyoqDQoJICogQ2hlY2sgYSBmaWxlIGFuZCB2ZXJpZmllcyBpdCBhcyBhIGFsbG93ZWQgZmlsZSBmb3JtYXQgZmlsZQ0KCSAqDQoJICogQHBhcmFtICBhcnJheSAgICAgICAgICR1cGxvYWQgICAgICBUaGUgdXBsb2FkZWQgZGV0YWlscyBhcnJheQ0KCSAqIEBwYXJhbSAgc3RyaW5nICAgICAgICAkdHlwZSAgICAgICAgICBUaGUgZmlsZSB0eXBlDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheSAgb2YgZWxlbWVudHMNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gY2hlY2soYXJyYXkgJHVwbG9hZCwgc3RyaW5nICR0eXBlKQ0KCXsNCgkJLy8gRGVmYXVsdCBmb3JtYXRzDQoJCSRmb3JtYXRzID0gTWltZUhlbHBlcjo6ZXh0ZW5zaW9ucygkdHlwZSk7DQoNCgkJLy8gQ2xlYW4gdGhlIHBhdGgNCgkJJHVwbG9hZF9wYXRoID0gUGF0aDo6Y2xlYW4oJHVwbG9hZFsnZnVsbF9wYXRoJ10pOw0KDQoJCS8vIEdldCBmaWxlIGV4dGVuc2lvbi9mb3JtYXQNCgkJJGZvcm1hdCA9IE1pbWVIZWxwZXI6OmV4dGVuc2lvbigkdXBsb2FkX3BhdGgpOw0KDQoJCS8vIExlZ2FsIGZpbGUgZm9ybWF0cw0KCQkkbGVnYWwgPSBhcnJheSgpOw0KDQoJCS8vIGNoZWNrIGlmIHRoZSBmaWxlIGZvcm1hdCBpcyBldmVuIGluIHRoZSBsaXN0DQoJCWlmIChpbl9hcnJheSgkZm9ybWF0LCAkZm9ybWF0cykpDQoJCXsNCgkJCS8vIGdldCBhbGxvd2VkIGZvcm1hdHMNCgkJCSRsZWdhbCA9IChhcnJheSkgSGVscGVyOjpnZXRQYXJhbXMoKS0+Z2V0KCR0eXBlIC4gJ19mb3JtYXRzJywgYXJyYXkoKSk7DQoJCX0NCg0KCQkvLyBjaGVjayB0aGUgZXh0ZW5zaW9uDQoJCWlmICghaW5fYXJyYXkoJGZvcm1hdCwgJGxlZ2FsKSkNCgkJew0KCQkJLy8gQ2xlYW51cCB0aGUgaW1wb3J0IGZpbGUNCgkJCXNlbGY6OnJlbW92ZSgkdXBsb2FkWydmdWxsX3BhdGgnXSk7DQoNCgkJCXNlbGY6OnNldEVycm9yKFRleHQ6Ol8oJ1VwbG9hZCBpcyBub3QgYSB2YWxpZCB0eXBlLicpKTsNCg0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoNCgkJcmV0dXJuICR1cGxvYWQ7DQoJfQ0KDQoJLyoqDQoJICogQ2xlYW4gdXAgdGVtcG9yYXJ5IHVwbG9hZGVkIGZpbGUNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgJGZ1bGxQYXRoICAgIFRoZSBmdWxsIHBhdGggb2YgdGhlIHVwbG9hZGVkIGZpbGUNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2xlYW4gIFRydWUgb24gc3VjY2Vzcw0KCSAqDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiByZW1vdmUoJGZ1bGxQYXRoKQ0KCXsNCgkJLy8gSXMgdGhlIHBhY2thZ2UgZmlsZSBhIHZhbGlkIGZpbGU/DQoJCWlmIChpc19maWxlKCRmdWxsUGF0aCkpDQoJCXsNCgkJCUZpbGU6OmRlbGV0ZSgkZnVsbFBhdGgpOw0KCQl9DQoJCWVsc2VpZiAoaXNfZmlsZShQYXRoOjpjbGVhbigkZnVsbFBhdGgpKSkNCgkJew0KCQkJLy8gSXQgbWlnaHQgYWxzbyBiZSBqdXN0IGEgYmFzZSBmaWxlbmFtZQ0KCQkJRmlsZTo6ZGVsZXRlKFBhdGg6OmNsZWFuKCRmdWxsUGF0aCkpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogU2V0IHRoZSBlcnJvcnMNCgkgKg0KCSAqIEBwYXJhbSAgc3RyaW5nICAgICAgICAkbWVzc2FnZSAgIFRoZSBlcnJvciBtZXNzYWdlDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAzLjAuMTENCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldEVycm9yKCRtZXNzYWdlKQ0KCXsNCgkJaWYgKHNlbGY6OiRlbnF1ZXVlRXJyb3IpDQoJCXsNCgkJCUZhY3Rvcnk6OmdldEFwcGxpY2F0aW9uKCktPmVucXVldWVNZXNzYWdlKCRtZXNzYWdlLCAnZXJyb3InKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCXNlbGY6OiRlcnJvcnNbXSA9ICRtZXNzYWdlOw0KCQl9DQoJfQ0K', '{}', 'UploadHelper', 'VDM\\Joomla\\Utilities.UploadHelper', '1.0.0', '{}', 'Utilities UploadHelper', 'abstract class', '{\"use_selection0\":{\"use\":\"640b5352-fb09-425f-a26e-cd44eda03f15\",\"as\":\"default\"}}', '', 1, '2022-05-16 13:20:50', '2022-09-03 17:20:06', 33, 9), (26, '', 'Mime Helper\r\n\r\n@since 3.0.11', '', '', 'f11dc790-713e-4706-9a85-a318ed3ad56e', '', '', '', '{}', 'W0VYVEVSTkFMQ09ERT1odHRwczovL2dpc3QuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0xsZXdlbGx5bnZkbS83NGJlMzczMzU3ZTEzMWI4Nzc1YTc1ODJjM2RlNTA4Yi9yYXcvbWltZV90eXBlcy5waHBdDQoNCltFWFRFUk5BTENPREU9aHR0cHM6Ly9naXN0LmdpdGh1YnVzZXJjb250ZW50LmNvbS9MbGV3ZWxseW52ZG0vNzRiZTM3MzM1N2UxMzFiODc3NWE3NTgyYzNkZTUwOGIvcmF3L2dldC5waHBdDQoNCltFWFRFUk5BTENPREU9aHR0cHM6Ly9naXN0LmdpdGh1YnVzZXJjb250ZW50LmNvbS9MbGV3ZWxseW52ZG0vNzRiZTM3MzM1N2UxMzFiODc3NWE3NTgyYzNkZTUwOGIvcmF3L2V4dGVuc2lvbnMucGhwXQ==', '{}', 'MimeHelper', 'VDM\\Joomla\\Utilities.MimeHelper', '1.0.0', '{}', 'Utilities MimeHelper', 'abstract class', '{}', '', 1, '2022-05-16 14:27:38', '2022-05-21 13:27:39', 3, 9), (27, '', 'Just to link powers to the power updater component', '', '', '8025e71c-8e21-44cb-b23e-dce2fb5a1ab5', '', '', '', '{\"load_selection0\":{\"load\":\"db4a1e4d-be59-4e87-8b4d-c40512752232\"},\"load_selection1\":{\"load\":\"79d765b3-7319-4988-9730-446c7f347020\"},\"load_selection2\":{\"load\":\"d7600b43-771a-4747-9f5d-952765721799\"},\"load_selection3\":{\"load\":\"962b15d8-915f-4cd7-aea6-7cf82afdc20b\"},\"load_selection4\":{\"load\":\"f11dc790-713e-4706-9a85-a318ed3ad56e\"}}', '', '{}', 'Updater', 'VDM\\Powe\\Updater', '1.0.0', '{}', 'Power Updater', 'class', '{}', '', 1, '2022-05-21 13:15:55', '2022-06-11 16:54:51', 3, 13), (28, 1, 'Start looking here:\r\nhttps://git.vdm.dev/api/swagger#/repository/repoGetContents', 'c65aaf1f-817c-49a2-8202-282e3904f5b1', '', 'ef011ee1-64f0-4048-b013-777473b727dd', 'dXNlIEpvb21sYVxDTVNcSHR0cFxIdHRwOw0KdXNlIEpvb21sYVxSZWdpc3RyeVxSZWdpc3RyeTs=', '', '', '{}', 'CS8qKg0KCSAqIEdldHMgdGhlIG1ldGFkYXRhIGFuZCBjb250ZW50cyAoaWYgYSBmaWxlKSBvZiBhbiBlbnRyeSBpbiBhIHJlcG9zaXRvcnksIG9yIGEgbGlzdCBvZiBlbnRyaWVzIGlmIGEgZGlyDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICRvd25lciAgICAgICBSZXBvc2l0b3J5IG93bmVyLg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgJHJlcG8gICAgICAgICBSZXBvc2l0b3J5IG5hbWUuDQoJICogQHBhcmFtICAgc3RyaW5nICAkZmlsZXBhdGggICAgUmVwb3NpdG9yeSBmaWxlIHBhdGguDQoJICoNCgkgKiBAcmV0dXJuICBvYmplY3QNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXQoJG93bmVyLCAkcmVwbywgJGZpbGVwYXRoKQ0KCXsNCgkJLy8gQnVpbGQgdGhlIHJlcXVlc3QgcGF0aC4NCgkJJHBhdGggPSAnL3JlcG9zLycgLiAkb3duZXIgLiAnLycgLiAkcmVwbyAuICcvY29udGVudHMvJyAuICRmaWxlcGF0aDsNCg0KCQkvLyBTZW5kIHRoZSByZXF1ZXN0Lg0KCQlyZXR1cm4gJHRoaXMtPnByb2Nlc3NSZXNwb25zZSgNCgkJCSR0aGlzLT5jbGllbnQtPmdldCgkdGhpcy0+ZmV0Y2hVcmwoJHBhdGgpKQ0KCQkpOw0KCX0NCg==', '{}', 'File', 'VDM\\Gitea\\Package.Repo.File', '1.0.0', '{}', 'Gitea Repo File', 'class', '{}', '', 1, '2022-05-21 13:40:09', '2022-07-09 10:28:20', 10, 4), diff --git a/componentbuilder.xml b/componentbuilder.xml index e86cbba2a..225f932f2 100644 --- a/componentbuilder.xml +++ b/componentbuilder.xml @@ -1,7 +1,7 @@ COM_COMPONENTBUILDER - 3rd September, 2022 + 10th September, 2022 Llewellyn van der Merwe joomla@vdm.io https://dev.vdm.io