2016-03-01 18:44:13 +00:00
< ? php
2018-05-18 06:28:27 +00:00
/**
* @ package Joomla . Component . Builder
*
* @ created 30 th April , 2015
2021-12-21 14:44:50 +00:00
* @ author Llewellyn van der Merwe < https :// dev . vdm . io >
* @ gitea Joomla Component Builder < https :// git . vdm . dev / joomla / Component - Builder >
2018-05-18 06:28:27 +00:00
* @ github Joomla Component Builder < https :// github . com / vdm - io / Joomla - Component - Builder >
2021-01-03 16:49:35 +00:00
* @ copyright Copyright ( C ) 2015 Vast Development Method . All rights reserved .
2018-05-18 06:28:27 +00:00
* @ license GNU General Public License version 2 or later ; see LICENSE . txt
*/
2016-03-01 18:44:13 +00:00
// No direct access to this file
defined ( '_JEXEC' ) or die ( 'Restricted access' );
/**
* Compiler class
*/
class Fields extends Structure
{
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Metadate Switch
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $metadataBuilder = array ();
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* View access Switch
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $accessBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* edit view tabs counter
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $tabCounter = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* layout builder
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $layoutBuilder = array ();
2017-12-14 23:10:47 +00:00
2020-12-24 16:28:07 +00:00
/**
* permissions builder
*
* @ var array
*/
public $hasPermissions = array ();
2017-08-12 11:47:25 +00:00
/**
* used to fix the zero order
2019-10-16 20:34:36 +00:00
*
2017-08-12 11:47:25 +00:00
* @ var array
*/
private $zeroOrderFix = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Site field data
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $siteFieldData = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* list of fields that are not being escaped
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $doNotEscape = array ();
2017-12-14 23:10:47 +00:00
2018-02-27 12:17:38 +00:00
/**
* list of classes used in the list view for the fields
2019-10-16 20:34:36 +00:00
*
2018-02-27 12:17:38 +00:00
* @ var array
*/
public $listFieldClass = array ();
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* tags builder
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $tagsBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* query builder
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $queryBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* unique keys for database field
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $dbUniqueKeys = array ();
2017-12-14 23:10:47 +00:00
2020-05-25 00:38:16 +00:00
/**
* unique guid swtich
*
* @ var array
*/
public $dbUniqueGuid = array ();
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* keys for database field
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $dbKeys = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* history builder
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $historyBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* alias builder
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $aliasBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* title builder
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $titleBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* list builder
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $listBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* custom Builder List
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $customBuilderList = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Hidden Fields Builder
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $hiddenFieldsBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* INT Field Builder
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $intFieldsBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Dynamic Fields Builder
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $dynamicfieldsBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Main text Builder
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $maintextBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Custom Builder
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $customBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Custom Field Links Builder
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $customFieldLinksBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Set Script for User Switch
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $setScriptUserSwitch = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Set Script for Media Switch
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $setScriptMediaSwitch = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Category builder
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $categoryBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Category Code builder
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $catCodeBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Check Box builder
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $checkboxBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Json String Builder
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $jsonStringBuilder = array ();
2017-12-14 23:10:47 +00:00
2017-06-18 07:37:48 +00:00
/**
* Json String Builder for return values to array
2019-10-16 20:34:36 +00:00
*
2017-06-18 07:37:48 +00:00
* @ var array
*/
public $jsonItemBuilderArray = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Json Item Builder
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $jsonItemBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Base 64 Builder
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $base64Builder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2019-10-16 20:34:36 +00:00
* Basic Encryption Field Modeling
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
2019-10-16 20:34:36 +00:00
public $basicFieldModeling = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2019-10-16 20:34:36 +00:00
* WHMCS Encryption Field Modeling
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
2019-10-16 20:34:36 +00:00
public $whmcsFieldModeling = array ();
2018-03-06 02:28:44 +00:00
/**
2019-10-16 20:34:36 +00:00
* Medium Encryption Field Modeling
*
* @ var array
*/
public $mediumFieldModeling = array ();
/**
* Expert Field Modeling
*
* @ var array
*/
public $expertFieldModeling = array ();
/**
* Expert Mode Initiator
*
2018-03-06 02:28:44 +00:00
* @ var array
*/
2019-10-16 20:34:36 +00:00
public $expertFieldModelInitiator = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Get Items Method List String Fix Builder
2019-10-16 20:34:36 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $getItemsMethodListStringFixBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Get Items Method Eximport String Fix Builder
2020-03-28 13:34:14 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $getItemsMethodEximportStringFixBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Selection Translation Fix Builder
2020-03-28 13:34:14 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
2017-12-14 23:10:47 +00:00
public $selectionTranslationFixBuilder = array ();
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Sort Builder
2020-03-28 13:34:14 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $sortBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Search Builder
2020-03-28 13:34:14 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $searchBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Filter Builder
2020-03-28 13:34:14 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
*/
public $filterBuilder = array ();
2017-12-14 23:10:47 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* Set Group Control
2020-03-28 13:34:14 +00:00
*
2016-03-01 18:44:13 +00:00
* @ var array
2016-03-04 00:01:43 +00:00
*/
public $setGroupControl = array ();
2017-12-14 23:10:47 +00:00
2016-06-02 16:18:49 +00:00
/**
* Set Field Names
2020-03-28 13:34:14 +00:00
*
2016-06-02 16:18:49 +00:00
* @ var array
*/
2017-12-14 23:10:47 +00:00
public $fieldsNames = array ();
2016-06-02 16:18:49 +00:00
/**
* Default Fields set to publishing
2020-03-28 13:34:14 +00:00
*
2016-06-02 16:18:49 +00:00
* @ var array
*/
public $newPublishingFields = array ();
2017-12-14 23:10:47 +00:00
2016-06-02 16:18:49 +00:00
/**
* Default Fields set to publishing
2020-03-28 13:34:14 +00:00
*
2016-06-02 16:18:49 +00:00
* @ var array
*/
public $movedPublishingFields = array ();
2017-12-14 23:10:47 +00:00
2016-09-03 21:44:47 +00:00
/**
* Set the line number in comments
2020-03-28 13:34:14 +00:00
*
* @ param int $nr The line number
*
2016-09-03 21:44:47 +00:00
* @ return void
2020-03-28 13:34:14 +00:00
*
2016-09-03 21:44:47 +00:00
*/
private function setLine ( $nr )
{
2017-04-06 08:47:51 +00:00
if ( $this -> debugLinenr )
2016-09-03 21:44:47 +00:00
{
2017-12-14 23:10:47 +00:00
return ' [Fields ' . $nr . ']' ;
2016-09-03 21:44:47 +00:00
}
2020-03-28 13:34:14 +00:00
2016-09-03 21:44:47 +00:00
return '' ;
}
2016-03-01 18:44:13 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* set the Field set of a view
2020-03-28 13:34:14 +00:00
*
2020-11-26 17:33:39 +00:00
* @ param array $view The view data
* @ param string $component The component name
* @ param string $nameSingleCode The single view name
* @ param string $nameListCode The list view name
2016-03-01 18:44:13 +00:00
*
* @ return string The fields set in xml
2020-03-28 13:34:14 +00:00
*
2016-03-01 18:44:13 +00:00
*/
2020-11-26 17:33:39 +00:00
public function setFieldSet ( $view , $component , $nameSingleCode ,
$nameListCode
2020-03-28 13:34:14 +00:00
) {
2016-03-01 18:44:13 +00:00
// setup the fieldset of this view
2020-03-28 13:34:14 +00:00
if ( isset ( $view [ 'settings' ] -> fields )
&& ComponentbuilderHelper :: checkArray ( $view [ 'settings' ] -> fields ))
2016-03-01 18:44:13 +00:00
{
// add metadata to the view
2017-10-30 13:08:02 +00:00
if ( isset ( $view [ 'metadata' ]) && $view [ 'metadata' ])
2016-03-01 18:44:13 +00:00
{
2020-12-03 00:13:49 +00:00
$this -> metadataBuilder [ $nameSingleCode ] = $nameListCode ;
2016-03-01 18:44:13 +00:00
}
// add access to the view
2017-10-30 13:08:02 +00:00
if ( isset ( $view [ 'access' ]) && $view [ 'access' ])
2016-03-01 18:44:13 +00:00
{
2020-12-03 00:13:49 +00:00
$this -> accessBuilder [ $nameSingleCode ] = $nameListCode ;
2016-03-01 18:44:13 +00:00
}
// main lang prefix
2020-03-28 13:34:14 +00:00
$langView = $this -> langPrefix . '_'
. $this -> placeholders [ $this -> hhh . 'VIEW' . $this -> hhh ];
$langViews = $this -> langPrefix . '_'
. $this -> placeholders [ $this -> hhh . 'VIEWS' . $this -> hhh ];
2016-03-01 18:44:13 +00:00
// set default lang
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
$this -> lang , $langView , $view [ 'settings' ] -> name_single
);
$this -> setLangContent (
$this -> lang , $langViews , $view [ 'settings' ] -> name_list
);
2016-03-01 18:44:13 +00:00
// set global item strings
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
$this -> lang , $langViews . '_N_ITEMS_ARCHIVED' ,
" %s " . $view [ 'settings' ] -> name_list . " archived. "
);
$this -> setLangContent (
$this -> lang , $langViews . '_N_ITEMS_ARCHIVED_1' ,
" %s " . $view [ 'settings' ] -> name_single . " archived. "
);
$this -> setLangContent (
$this -> lang , $langViews . '_N_ITEMS_CHECKED_IN_0' ,
" No " . $view [ 'settings' ] -> name_single
. " successfully checked in. "
);
$this -> setLangContent (
$this -> lang , $langViews . '_N_ITEMS_CHECKED_IN_1' ,
" %d " . $view [ 'settings' ] -> name_single
. " successfully checked in. "
);
$this -> setLangContent (
$this -> lang , $langViews . '_N_ITEMS_CHECKED_IN_MORE' ,
" %d " . $view [ 'settings' ] -> name_list
. " successfully checked in. "
);
$this -> setLangContent (
$this -> lang , $langViews . '_N_ITEMS_DELETED' ,
" %s " . $view [ 'settings' ] -> name_list . " deleted. "
);
$this -> setLangContent (
$this -> lang , $langViews . '_N_ITEMS_DELETED_1' ,
" %s " . $view [ 'settings' ] -> name_single . " deleted. "
);
$this -> setLangContent (
$this -> lang , $langViews . '_N_ITEMS_FEATURED' ,
" %s " . $view [ 'settings' ] -> name_list . " featured. "
);
$this -> setLangContent (
$this -> lang , $langViews . '_N_ITEMS_FEATURED_1' ,
" %s " . $view [ 'settings' ] -> name_single . " featured. "
);
$this -> setLangContent (
$this -> lang , $langViews . '_N_ITEMS_PUBLISHED' ,
" %s " . $view [ 'settings' ] -> name_list . " published. "
);
$this -> setLangContent (
$this -> lang , $langViews . '_N_ITEMS_PUBLISHED_1' ,
" %s " . $view [ 'settings' ] -> name_single . " published. "
);
$this -> setLangContent (
$this -> lang , $langViews . '_N_ITEMS_TRASHED' ,
" %s " . $view [ 'settings' ] -> name_list . " trashed. "
);
$this -> setLangContent (
$this -> lang , $langViews . '_N_ITEMS_TRASHED_1' ,
" %s " . $view [ 'settings' ] -> name_single . " trashed. "
);
$this -> setLangContent (
$this -> lang , $langViews . '_N_ITEMS_UNFEATURED' ,
" %s " . $view [ 'settings' ] -> name_list . " unfeatured. "
);
$this -> setLangContent (
$this -> lang , $langViews . '_N_ITEMS_UNFEATURED_1' ,
" %s " . $view [ 'settings' ] -> name_single . " unfeatured. "
);
$this -> setLangContent (
$this -> lang , $langViews . '_N_ITEMS_UNPUBLISHED' ,
" %s " . $view [ 'settings' ] -> name_list . " unpublished. "
);
$this -> setLangContent (
$this -> lang , $langViews . '_N_ITEMS_UNPUBLISHED_1' ,
" %s " . $view [ 'settings' ] -> name_single . " unpublished. "
);
2020-09-15 17:14:53 +00:00
$this -> setLangContent (
$this -> lang , $langViews . '_N_ITEMS_FAILED_PUBLISHING' ,
" %s " . $view [ 'settings' ] -> name_list . " failed publishing. "
);
$this -> setLangContent (
$this -> lang , $langViews . '_N_ITEMS_FAILED_PUBLISHING_1' ,
" %s " . $view [ 'settings' ] -> name_single . " failed publishing. "
);
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
$this -> lang , $langViews . '_BATCH_OPTIONS' ,
" Batch process the selected " . $view [ 'settings' ] -> name_list
);
$this -> setLangContent (
$this -> lang , $langViews . '_BATCH_TIP' ,
" All changes will be applied to all selected "
. $view [ 'settings' ] -> name_list
);
2016-03-01 18:44:13 +00:00
// set some basic defaults
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
$this -> lang , $langView . '_ERROR_UNIQUE_ALIAS' ,
" Another " . $view [ 'settings' ] -> name_single
. " has the same alias. "
);
$this -> setLangContent (
$this -> lang , $langView . '_CREATED_DATE_LABEL' , " Created Date "
);
$this -> setLangContent (
$this -> lang , $langView . '_CREATED_DATE_DESC' ,
" The date this " . $view [ 'settings' ] -> name_single
. " was created. "
);
$this -> setLangContent (
$this -> lang , $langView . '_MODIFIED_DATE_LABEL' , " Modified Date "
);
$this -> setLangContent (
$this -> lang , $langView . '_MODIFIED_DATE_DESC' ,
" The date this " . $view [ 'settings' ] -> name_single
. " was modified. "
);
$this -> setLangContent (
$this -> lang , $langView . '_CREATED_BY_LABEL' , " Created By "
);
$this -> setLangContent (
$this -> lang , $langView . '_CREATED_BY_DESC' ,
" The user that created this " . $view [ 'settings' ] -> name_single
. " . "
);
$this -> setLangContent (
$this -> lang , $langView . '_MODIFIED_BY_LABEL' , " Modified By "
);
$this -> setLangContent (
$this -> lang , $langView . '_MODIFIED_BY_DESC' ,
" The last user that modified this "
. $view [ 'settings' ] -> name_single . " . "
);
$this -> setLangContent (
$this -> lang , $langView . '_ORDERING_LABEL' , " Ordering "
);
$this -> setLangContent (
$this -> lang , $langView . '_VERSION_LABEL' , " Version "
);
$this -> setLangContent (
$this -> lang , $langView . '_VERSION_DESC' ,
" A count of the number of times this "
. $view [ 'settings' ] -> name_single . " has been revised. "
);
$this -> setLangContent (
$this -> lang , $langView . '_SAVE_WARNING' ,
" Alias already existed so a number was added at the end. You can re-edit the "
. $view [ 'settings' ] -> name_single . " to customise the alias. "
);
2018-03-18 04:28:54 +00:00
// check what type of field builder to use
if ( $this -> fieldBuilderType == 1 )
{
// build field set using string manipulation
2020-03-28 13:34:14 +00:00
return $this -> stringFieldSet (
2020-11-26 17:33:39 +00:00
$view , $component , $nameSingleCode , $nameListCode ,
2020-03-28 13:34:14 +00:00
$langView , $langViews
);
2018-03-18 04:28:54 +00:00
}
else
{
// build field set with simpleXMLElement class
2020-03-28 13:34:14 +00:00
return $this -> simpleXMLFieldSet (
2020-11-26 17:33:39 +00:00
$view , $component , $nameSingleCode , $nameListCode ,
2020-03-28 13:34:14 +00:00
$langView , $langViews
);
2018-03-18 04:28:54 +00:00
}
2016-03-01 18:44:13 +00:00
}
2020-03-28 13:34:14 +00:00
2016-03-01 18:44:13 +00:00
return '' ;
}
2017-12-03 17:08:01 +00:00
2018-03-18 04:28:54 +00:00
/**
* build field set using string manipulation
*
2020-11-26 17:33:39 +00:00
* @ param array $view The view data
* @ param string $component The component name
* @ param string $nameSingleCode The single view name
* @ param string $nameListCode The list view name
* @ param string $langView The language string of the view
* @ param string $langViews The language string of the views
2018-03-18 04:28:54 +00:00
*
* @ return string The fields set in xml
*
*/
2020-11-26 17:33:39 +00:00
protected function stringFieldSet ( $view , $component , $nameSingleCode ,
$nameListCode , $langView , $langViews
2020-03-28 13:34:14 +00:00
) {
2018-03-18 04:28:54 +00:00
// set the read only
$readOnly = false ;
if ( $view [ 'settings' ] -> type == 2 )
{
2020-03-28 13:34:14 +00:00
$readOnly = $this -> _t ( 3 ) . 'readonly="true"' . PHP_EOL . $this -> _t (
3
) . 'disabled="true"' ;
2018-03-18 04:28:54 +00:00
}
// start adding dynamc fields
$dynamicFields = '' ;
// set the custom table key
$dbkey = 'g' ;
2019-06-22 10:43:26 +00:00
// Trigger Event: jcb_ce_onBeforeBuildFields
2020-03-28 13:34:14 +00:00
$this -> triggerEvent (
'jcb_ce_onBeforeBuildFields' ,
array ( & $this -> componentContext , & $dynamicFields , & $readOnly ,
2020-11-26 17:33:39 +00:00
& $dbkey , & $view , & $component , & $nameSingleCode ,
& $nameListCode , & $this -> placeholders , & $langView ,
2020-03-28 13:34:14 +00:00
& $langViews )
);
2018-03-18 04:28:54 +00:00
// TODO we should add the global and local view switch if field for front end
foreach ( $view [ 'settings' ] -> fields as $field )
{
2020-03-28 13:34:14 +00:00
$dynamicFields .= $this -> setDynamicField (
$field , $view , $view [ 'settings' ] -> type , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode , $this -> placeholders , $dbkey ,
2020-03-28 13:34:14 +00:00
true
);
2018-03-18 04:28:54 +00:00
}
2019-06-22 10:43:26 +00:00
// Trigger Event: jcb_ce_onAfterBuildFields
2020-03-28 13:34:14 +00:00
$this -> triggerEvent (
'jcb_ce_onAfterBuildFields' ,
array ( & $this -> componentContext , & $dynamicFields , & $readOnly ,
2020-11-26 17:33:39 +00:00
& $dbkey , & $view , & $component , & $nameSingleCode ,
& $nameListCode , & $this -> placeholders , & $langView ,
2020-03-28 13:34:14 +00:00
& $langViews )
);
2018-03-18 04:28:54 +00:00
// set the default fields
2020-03-28 13:34:14 +00:00
$fieldSet = array ();
2018-03-18 04:28:54 +00:00
$fieldSet [] = '<fieldset name="details">' ;
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 2 ) . " <!-- " . $this -> setLine ( __LINE__ )
. " Default Fields. --> " ;
$fieldSet [] = $this -> _t ( 2 ) . " <!-- " . $this -> setLine ( __LINE__ )
. " Id Field. Type: Text (joomla) --> " ;
2018-03-18 04:28:54 +00:00
// if id is not set
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'id' ]))
2018-03-18 04:28:54 +00:00
{
2018-05-26 10:03:08 +00:00
$fieldSet [] = $this -> _t ( 2 ) . " <field " ;
$fieldSet [] = $this -> _t ( 3 ) . " name= " . '"id"' ;
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 3 )
. 'type="text" class="readonly" label="JGLOBAL_FIELD_ID_LABEL"' ;
$fieldSet [] = $this -> _t ( 3 )
. 'description ="JGLOBAL_FIELD_ID_DESC" size="10" default="0"' ;
2018-05-26 10:03:08 +00:00
$fieldSet [] = $this -> _t ( 3 ) . 'readonly="true"' ;
$fieldSet [] = $this -> _t ( 2 ) . " /> " ;
2018-03-18 04:28:54 +00:00
// count the static field created
$this -> fieldCount ++ ;
}
// if created is not set
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'created' ]))
2018-03-18 04:28:54 +00:00
{
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 2 ) . " <!-- " . $this -> setLine ( __LINE__ )
. " Date Created Field. Type: Calendar (joomla) --> " ;
2018-05-26 10:03:08 +00:00
$fieldSet [] = $this -> _t ( 2 ) . " <field " ;
$fieldSet [] = $this -> _t ( 3 ) . " name= " . '"created"' ;
$fieldSet [] = $this -> _t ( 3 ) . " type= " . '"calendar"' ;
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 3 ) . " label= " . '"' . $langView
. '_CREATED_DATE_LABEL"' ;
$fieldSet [] = $this -> _t ( 3 ) . " description= " . '"' . $langView
. '_CREATED_DATE_DESC"' ;
2018-05-26 10:03:08 +00:00
$fieldSet [] = $this -> _t ( 3 ) . " size= " . '"22"' ;
2018-03-18 04:28:54 +00:00
if ( $readOnly )
{
$fieldSet [] = $readOnly ;
}
2018-05-26 10:03:08 +00:00
$fieldSet [] = $this -> _t ( 3 ) . " format= " . '"%Y-%m-%d %H:%M:%S"' ;
$fieldSet [] = $this -> _t ( 3 ) . " filter= " . '"user_utc"' ;
$fieldSet [] = $this -> _t ( 2 ) . " /> " ;
2018-03-18 04:28:54 +00:00
// count the static field created
$this -> fieldCount ++ ;
}
// if created_by is not set
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'created_by' ]))
2018-03-18 04:28:54 +00:00
{
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 2 ) . " <!-- " . $this -> setLine ( __LINE__ )
. " User Created Field. Type: User (joomla) --> " ;
2018-05-26 10:03:08 +00:00
$fieldSet [] = $this -> _t ( 2 ) . " <field " ;
$fieldSet [] = $this -> _t ( 3 ) . " name= " . '"created_by"' ;
$fieldSet [] = $this -> _t ( 3 ) . " type= " . '"user"' ;
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 3 ) . " label= " . '"' . $langView
. '_CREATED_BY_LABEL"' ;
2018-03-18 04:28:54 +00:00
if ( $readOnly )
{
$fieldSet [] = $readOnly ;
}
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 3 ) . " description= " . '"' . $langView
. '_CREATED_BY_DESC"' ;
2018-05-26 10:03:08 +00:00
$fieldSet [] = $this -> _t ( 2 ) . " /> " ;
2018-03-18 04:28:54 +00:00
// count the static field created
$this -> fieldCount ++ ;
}
// if published is not set
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'published' ]))
2018-03-18 04:28:54 +00:00
{
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 2 ) . " <!-- " . $this -> setLine ( __LINE__ )
. " Published Field. Type: List (joomla) --> " ;
$fieldSet [] = $this -> _t ( 2 ) . " <field name= "
. '"published" type="list" label="JSTATUS"' ;
$fieldSet [] = $this -> _t ( 3 ) . " description= "
. '"JFIELD_PUBLISHED_DESC" class="chzn-color-state"' ;
2018-03-18 04:28:54 +00:00
if ( $readOnly )
{
$fieldSet [] = $readOnly ;
}
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 3 ) . " filter= "
. '"intval" size="1" default="1" >' ;
2018-05-26 10:03:08 +00:00
$fieldSet [] = $this -> _t ( 3 ) . " <option value= " . '"1">' ;
$fieldSet [] = $this -> _t ( 4 ) . " JPUBLISHED</option> " ;
$fieldSet [] = $this -> _t ( 3 ) . " <option value= " . '"0">' ;
$fieldSet [] = $this -> _t ( 4 ) . " JUNPUBLISHED</option> " ;
$fieldSet [] = $this -> _t ( 3 ) . " <option value= " . '"2">' ;
$fieldSet [] = $this -> _t ( 4 ) . " JARCHIVED</option> " ;
$fieldSet [] = $this -> _t ( 3 ) . " <option value= " . '"-2">' ;
$fieldSet [] = $this -> _t ( 4 ) . " JTRASHED</option> " ;
$fieldSet [] = $this -> _t ( 2 ) . " </field> " ;
2018-03-18 04:28:54 +00:00
// count the static field created
$this -> fieldCount ++ ;
}
// if modified is not set
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'modified' ]))
2018-03-18 04:28:54 +00:00
{
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 2 ) . " <!-- " . $this -> setLine ( __LINE__ )
. " Date Modified Field. Type: Calendar (joomla) --> " ;
$fieldSet [] = $this -> _t ( 2 )
. '<field name="modified" type="calendar" class="readonly"' ;
$fieldSet [] = $this -> _t ( 3 ) . 'label="' . $langView
. '_MODIFIED_DATE_LABEL" description="' . $langView
. '_MODIFIED_DATE_DESC"' ;
$fieldSet [] = $this -> _t ( 3 )
. 'size="22" readonly="true" format="%Y-%m-%d %H:%M:%S" filter="user_utc" />' ;
2018-03-18 04:28:54 +00:00
// count the static field created
$this -> fieldCount ++ ;
}
// if modified_by is not set
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'modified_by' ]))
2018-03-18 04:28:54 +00:00
{
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 2 ) . " <!-- " . $this -> setLine ( __LINE__ )
. " User Modified Field. Type: User (joomla) --> " ;
$fieldSet [] = $this -> _t ( 2 )
. '<field name="modified_by" type="user"' ;
$fieldSet [] = $this -> _t ( 3 ) . 'label="' . $langView
. '_MODIFIED_BY_LABEL"' ;
$fieldSet [] = $this -> _t ( 3 ) . " description= " . '"' . $langView
. '_MODIFIED_BY_DESC"' ;
2018-05-26 10:03:08 +00:00
$fieldSet [] = $this -> _t ( 3 ) . 'class="readonly"' ;
$fieldSet [] = $this -> _t ( 3 ) . 'readonly="true"' ;
$fieldSet [] = $this -> _t ( 3 ) . 'filter="unset"' ;
$fieldSet [] = $this -> _t ( 2 ) . " /> " ;
2018-03-18 04:28:54 +00:00
// count the static field created
$this -> fieldCount ++ ;
}
// check if view has access
2020-11-26 17:33:39 +00:00
if ( isset ( $this -> accessBuilder [ $nameSingleCode ])
2020-03-28 13:34:14 +00:00
&& ComponentbuilderHelper :: checkString (
2020-11-26 17:33:39 +00:00
$this -> accessBuilder [ $nameSingleCode ]
2020-03-28 13:34:14 +00:00
)
2020-11-26 17:33:39 +00:00
&& ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'access' ]))
2018-03-18 04:28:54 +00:00
{
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 2 ) . " <!-- " . $this -> setLine ( __LINE__ )
. " Access Field. Type: Accesslevel (joomla) --> " ;
2018-05-26 10:03:08 +00:00
$fieldSet [] = $this -> _t ( 2 ) . '<field name="access"' ;
$fieldSet [] = $this -> _t ( 3 ) . 'type="accesslevel"' ;
$fieldSet [] = $this -> _t ( 3 ) . 'label="JFIELD_ACCESS_LABEL"' ;
$fieldSet [] = $this -> _t ( 3 ) . 'description="JFIELD_ACCESS_DESC"' ;
$fieldSet [] = $this -> _t ( 3 ) . 'default="1"' ;
2018-03-18 04:28:54 +00:00
if ( $readOnly )
{
$fieldSet [] = $readOnly ;
}
2018-05-26 10:03:08 +00:00
$fieldSet [] = $this -> _t ( 3 ) . 'required="false"' ;
$fieldSet [] = $this -> _t ( 2 ) . " /> " ;
2018-03-18 04:28:54 +00:00
// count the static field created
$this -> fieldCount ++ ;
}
// if ordering is not set
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'ordering' ]))
2018-03-18 04:28:54 +00:00
{
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 2 ) . " <!-- " . $this -> setLine ( __LINE__ )
. " Ordering Field. Type: Numbers (joomla) --> " ;
2018-05-26 10:03:08 +00:00
$fieldSet [] = $this -> _t ( 2 ) . " <field " ;
$fieldSet [] = $this -> _t ( 3 ) . 'name="ordering"' ;
$fieldSet [] = $this -> _t ( 3 ) . 'type="number"' ;
$fieldSet [] = $this -> _t ( 3 ) . 'class="inputbox validate-ordering"' ;
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 3 ) . 'label="' . $langView
. '_ORDERING_LABEL' . '"' ;
2018-05-26 10:03:08 +00:00
$fieldSet [] = $this -> _t ( 3 ) . 'description=""' ;
$fieldSet [] = $this -> _t ( 3 ) . 'default="0"' ;
$fieldSet [] = $this -> _t ( 3 ) . 'size="6"' ;
2018-03-18 04:28:54 +00:00
if ( $readOnly )
{
$fieldSet [] = $readOnly ;
}
2018-05-26 10:03:08 +00:00
$fieldSet [] = $this -> _t ( 3 ) . 'required="false"' ;
$fieldSet [] = $this -> _t ( 2 ) . " /> " ;
2018-03-18 04:28:54 +00:00
// count the static field created
$this -> fieldCount ++ ;
}
// if version is not set
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'version' ]))
2018-03-18 04:28:54 +00:00
{
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 2 ) . " <!-- " . $this -> setLine ( __LINE__ )
. " Version Field. Type: Text (joomla) --> " ;
2018-05-26 10:03:08 +00:00
$fieldSet [] = $this -> _t ( 2 ) . " <field " ;
$fieldSet [] = $this -> _t ( 3 ) . 'name="version"' ;
$fieldSet [] = $this -> _t ( 3 ) . 'type="text"' ;
$fieldSet [] = $this -> _t ( 3 ) . 'class="readonly"' ;
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 3 ) . 'label="' . $langView
. '_VERSION_LABEL"' ;
$fieldSet [] = $this -> _t ( 3 ) . 'description="' . $langView
. '_VERSION_DESC"' ;
2018-05-26 10:03:08 +00:00
$fieldSet [] = $this -> _t ( 3 ) . 'size="6"' ;
$fieldSet [] = $this -> _t ( 3 ) . 'readonly="true"' ;
$fieldSet [] = $this -> _t ( 3 ) . 'filter="unset"' ;
$fieldSet [] = $this -> _t ( 2 ) . " /> " ;
2018-03-18 04:28:54 +00:00
// count the static field created
$this -> fieldCount ++ ;
}
// check if metadata is added to this view
2020-11-26 17:33:39 +00:00
if ( isset ( $this -> metadataBuilder [ $nameSingleCode ])
2020-03-28 13:34:14 +00:00
&& ComponentbuilderHelper :: checkString (
2020-11-26 17:33:39 +00:00
$this -> metadataBuilder [ $nameSingleCode ]
2020-03-28 13:34:14 +00:00
))
2018-03-18 04:28:54 +00:00
{
// metakey
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'metakey' ]))
2019-10-11 13:41:00 +00:00
{
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 2 ) . " <!-- " . $this -> setLine ( __LINE__ )
. " Metakey Field. Type: Textarea (joomla) --> " ;
2019-10-11 13:41:00 +00:00
$fieldSet [] = $this -> _t ( 2 ) . " <field " ;
$fieldSet [] = $this -> _t ( 3 ) . 'name="metakey"' ;
$fieldSet [] = $this -> _t ( 3 ) . 'type="textarea"' ;
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 3 )
. 'label="JFIELD_META_KEYWORDS_LABEL"' ;
$fieldSet [] = $this -> _t ( 3 )
. 'description="JFIELD_META_KEYWORDS_DESC"' ;
2019-10-11 13:41:00 +00:00
$fieldSet [] = $this -> _t ( 3 ) . 'rows="3"' ;
$fieldSet [] = $this -> _t ( 3 ) . 'cols="30"' ;
$fieldSet [] = $this -> _t ( 2 ) . " /> " ;
// count the static field created
$this -> fieldCount ++ ;
}
2018-03-18 04:28:54 +00:00
// metadesc
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'metadesc' ]))
2019-10-11 13:41:00 +00:00
{
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 2 ) . " <!-- " . $this -> setLine ( __LINE__ )
. " Metadesc Field. Type: Textarea (joomla) --> " ;
2019-10-11 13:41:00 +00:00
$fieldSet [] = $this -> _t ( 2 ) . " <field " ;
$fieldSet [] = $this -> _t ( 3 ) . 'name="metadesc"' ;
$fieldSet [] = $this -> _t ( 3 ) . 'type="textarea"' ;
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 3 )
. 'label="JFIELD_META_DESCRIPTION_LABEL"' ;
$fieldSet [] = $this -> _t ( 3 )
. 'description="JFIELD_META_DESCRIPTION_DESC"' ;
2019-10-11 13:41:00 +00:00
$fieldSet [] = $this -> _t ( 3 ) . 'rows="3"' ;
$fieldSet [] = $this -> _t ( 3 ) . 'cols="30"' ;
$fieldSet [] = $this -> _t ( 2 ) . " /> " ;
// count the static field created
$this -> fieldCount ++ ;
}
2018-03-18 04:28:54 +00:00
}
2020-12-24 13:39:33 +00:00
// fix the permissions field "title" issue gh-629
// check if the the title is not already set
2020-12-24 16:28:07 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'title' ])
&& $this -> hasPermissionsSet ( $view , $nameSingleCode ))
2020-12-24 13:39:33 +00:00
{
// set the field/tab name
$field_name = " title " ;
$tab_name = " publishing " ;
$fieldSet [] = $this -> _t ( 2 ) . " <!-- " . $this -> setLine ( __LINE__ )
. " Was added due to Permissions JS needing a Title field --> " ;
$fieldSet [] = $this -> _t ( 2 ) . " <!-- " . $this -> setLine ( __LINE__ )
. " Let us know at gh-629 should this change --> " ;
$fieldSet [] = $this -> _t ( 2 ) . " <!-- " . $this -> setLine ( __LINE__ )
. " https://github.com/vdm-io/Joomla-Component-Builder/issues/629#issuecomment-750117235 --> " ;
// at this point we know that we must add a hidden title field
// and make sure it does not get stored to the database
$fieldSet [] = $this -> _t ( 2 ) . " <field " ;
$fieldSet [] = $this -> _t ( 3 ) . " name= " . '"' . $field_name . '"' ;
$fieldSet [] = $this -> _t ( 3 )
. 'type="hidden"' ;
$fieldSet [] = $this -> _t ( 3 ) . 'default="' . $component . ' '
. $nameSingleCode . '"' ;
$fieldSet [] = $this -> _t ( 2 ) . " /> " ;
// count the static field created
$this -> fieldCount ++ ;
// setup needed field values for layout
$field_array = array ();
$field_array [ 'order_edit' ] = 0 ;
$field_array [ 'tab' ] = 15 ;
$field_array [ 'alignment' ] = 1 ;
// make sure it gets added to view
$this -> setLayoutBuilder (
$nameSingleCode , $tab_name , $field_name , $field_array
);
}
2018-03-18 04:28:54 +00:00
// load the dynamic fields now
if ( ComponentbuilderHelper :: checkString ( $dynamicFields ))
{
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 2 ) . " <!-- " . $this -> setLine ( __LINE__ )
. " Dynamic Fields. --> " . $dynamicFields ;
2018-03-18 04:28:54 +00:00
}
// close fieldset
2018-05-26 10:03:08 +00:00
$fieldSet [] = $this -> _t ( 1 ) . " </fieldset> " ;
2018-03-18 04:28:54 +00:00
// check if metadata is added to this view
2020-11-26 17:33:39 +00:00
if ( isset ( $this -> metadataBuilder [ $nameSingleCode ])
2020-03-28 13:34:14 +00:00
&& ComponentbuilderHelper :: checkString (
2020-11-26 17:33:39 +00:00
$this -> metadataBuilder [ $nameSingleCode ]
2020-03-28 13:34:14 +00:00
))
2018-03-18 04:28:54 +00:00
{
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'robots' ])
|| ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'rights' ])
|| ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'author' ]))
2019-10-11 13:41:00 +00:00
{
2020-03-28 13:34:14 +00:00
$fieldSet [] = PHP_EOL . $this -> _t ( 1 ) . " <!-- " . $this -> setLine (
__LINE__
) . " Metadata Fields. --> " ;
$fieldSet [] = $this -> _t ( 1 ) . " <fields "
. ' name="metadata" label="JGLOBAL_FIELDSET_METADATA_OPTIONS">' ;
2019-10-11 13:41:00 +00:00
$fieldSet [] = $this -> _t ( 2 ) . '<fieldset name="vdmmetadata"' ;
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 3 )
. 'label="JGLOBAL_FIELDSET_METADATA_OPTIONS">' ;
2019-10-11 13:41:00 +00:00
// robots
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'robots' ]))
2019-10-11 13:41:00 +00:00
{
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 3 ) . " <!-- " . $this -> setLine (
__LINE__
) . " Robots Field. Type: List (joomla) --> " ;
2019-10-11 13:41:00 +00:00
$fieldSet [] = $this -> _t ( 3 ) . '<field name="robots"' ;
$fieldSet [] = $this -> _t ( 4 ) . 'type="list"' ;
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 4 )
. 'label="JFIELD_METADATA_ROBOTS_LABEL"' ;
$fieldSet [] = $this -> _t ( 4 )
. 'description="JFIELD_METADATA_ROBOTS_DESC" >' ;
$fieldSet [] = $this -> _t ( 4 )
. '<option value="">JGLOBAL_USE_GLOBAL</option>' ;
$fieldSet [] = $this -> _t ( 4 )
. '<option value="index, follow">JGLOBAL_INDEX_FOLLOW</option>' ;
$fieldSet [] = $this -> _t ( 4 )
. '<option value="noindex, follow">JGLOBAL_NOINDEX_FOLLOW</option>' ;
$fieldSet [] = $this -> _t ( 4 )
. '<option value="index, nofollow">JGLOBAL_INDEX_NOFOLLOW</option>' ;
$fieldSet [] = $this -> _t ( 4 )
. '<option value="noindex, nofollow">JGLOBAL_NOINDEX_NOFOLLOW</option>' ;
2019-10-11 13:41:00 +00:00
$fieldSet [] = $this -> _t ( 3 ) . '</field>' ;
// count the static field created
$this -> fieldCount ++ ;
}
// author
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'author' ]))
2019-10-11 13:41:00 +00:00
{
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 3 ) . " <!-- " . $this -> setLine (
__LINE__
) . " Author Field. Type: Text (joomla) --> " ;
2019-10-11 13:41:00 +00:00
$fieldSet [] = $this -> _t ( 3 ) . '<field name="author"' ;
$fieldSet [] = $this -> _t ( 4 ) . 'type="text"' ;
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 4 )
. 'label="JAUTHOR" description="JFIELD_METADATA_AUTHOR_DESC"' ;
2019-10-11 13:41:00 +00:00
$fieldSet [] = $this -> _t ( 4 ) . 'size="20"' ;
$fieldSet [] = $this -> _t ( 3 ) . " /> " ;
// count the static field created
$this -> fieldCount ++ ;
}
// rights
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'rights' ]))
2019-10-11 13:41:00 +00:00
{
2020-03-28 13:34:14 +00:00
$fieldSet [] = $this -> _t ( 3 ) . " <!-- " . $this -> setLine (
__LINE__
) . " Rights Field. Type: Textarea (joomla) --> " ;
$fieldSet [] = $this -> _t ( 3 )
. '<field name="rights" type="textarea" label="JFIELD_META_RIGHTS_LABEL"' ;
$fieldSet [] = $this -> _t ( 4 )
. 'description="JFIELD_META_RIGHTS_DESC" required="false" filter="string"' ;
2019-10-11 13:41:00 +00:00
$fieldSet [] = $this -> _t ( 4 ) . 'cols="30" rows="2"' ;
$fieldSet [] = $this -> _t ( 3 ) . " /> " ;
// count the static field created
$this -> fieldCount ++ ;
}
$fieldSet [] = $this -> _t ( 2 ) . " </fieldset> " ;
$fieldSet [] = $this -> _t ( 1 ) . " </fields> " ;
}
2018-03-18 04:28:54 +00:00
}
2020-03-28 13:34:14 +00:00
2020-11-26 17:33:39 +00:00
// return the set
2018-03-18 04:28:54 +00:00
return implode ( PHP_EOL , $fieldSet );
}
/**
* build field set with simpleXMLElement class
*
2020-11-26 17:33:39 +00:00
* @ param array $view The view data
* @ param string $component The component name
* @ param string $nameSingleCode The single view name
* @ param string $nameListCode The list view name
* @ param string $langView The language string of the view
* @ param string $langViews The language string of the views
2018-03-18 04:28:54 +00:00
*
* @ return string The fields set in xml
*
*/
2020-11-26 17:33:39 +00:00
protected function simpleXMLFieldSet ( $view , $component , $nameSingleCode ,
$nameListCode , $langView , $langViews
2020-03-28 13:34:14 +00:00
) {
2018-03-18 04:28:54 +00:00
// set the read only
$readOnlyXML = array ();
if ( $view [ 'settings' ] -> type == 2 )
{
$readOnlyXML [ 'readonly' ] = true ;
$readOnlyXML [ 'disabled' ] = true ;
}
// start adding dynamc fields
$dynamicFieldsXML = array ();
// set the custom table key
$dbkey = 'g' ;
2019-06-22 10:43:26 +00:00
// Trigger Event: jcb_ce_onBeforeBuildFields
2020-03-28 13:34:14 +00:00
$this -> triggerEvent (
'jcb_ce_onBeforeBuildFields' ,
array ( & $this -> componentContext , & $dynamicFieldsXML , & $readOnlyXML ,
2020-11-26 17:33:39 +00:00
& $dbkey , & $view , & $component , & $nameSingleCode ,
& $nameListCode , & $this -> placeholders , & $langView ,
2020-03-28 13:34:14 +00:00
& $langViews )
);
2018-03-18 04:28:54 +00:00
// TODO we should add the global and local view switch if field for front end
foreach ( $view [ 'settings' ] -> fields as $field )
{
2020-03-28 13:34:14 +00:00
$dynamicFieldsXML [] = $this -> setDynamicField (
$field , $view , $view [ 'settings' ] -> type , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode , $this -> placeholders , $dbkey ,
2020-03-28 13:34:14 +00:00
true
);
2018-03-18 04:28:54 +00:00
}
2019-06-22 10:43:26 +00:00
// Trigger Event: jcb_ce_onAfterBuildFields
2020-03-28 13:34:14 +00:00
$this -> triggerEvent (
'jcb_ce_onAfterBuildFields' ,
array ( & $this -> componentContext , & $dynamicFieldsXML , & $readOnlyXML ,
2020-11-26 17:33:39 +00:00
& $dbkey , & $view , & $component , & $nameSingleCode ,
& $nameListCode , & $this -> placeholders , & $langView ,
2020-03-28 13:34:14 +00:00
& $langViews )
);
2018-03-18 04:28:54 +00:00
// set the default fields
2020-03-28 13:34:14 +00:00
$XML = new simpleXMLElement ( '<a/>' );
2018-03-18 04:28:54 +00:00
$fieldSetXML = $XML -> addChild ( 'fieldset' );
$fieldSetXML -> addAttribute ( 'name' , 'details' );
2020-03-28 13:34:14 +00:00
ComponentbuilderHelper :: xmlComment (
$fieldSetXML , $this -> setLine ( __LINE__ ) . " Default Fields. "
);
ComponentbuilderHelper :: xmlComment (
$fieldSetXML ,
$this -> setLine ( __LINE__ ) . " Id Field. Type: Text (joomla) "
);
2018-03-18 04:28:54 +00:00
// if id is not set
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'id' ]))
2018-03-18 04:28:54 +00:00
{
$attributes = array (
2020-03-28 13:34:14 +00:00
'name' => 'id' ,
'type' => 'text' ,
'class' => 'readonly' ,
'readonly' => " true " ,
'label' => 'JGLOBAL_FIELD_ID_LABEL' ,
2018-03-18 04:28:54 +00:00
'description' => 'JGLOBAL_FIELD_ID_DESC' ,
2020-03-28 13:34:14 +00:00
'size' => 10 ,
'default' => 0
2018-03-18 04:28:54 +00:00
);
2020-03-28 13:34:14 +00:00
$fieldXML = $fieldSetXML -> addChild ( 'field' );
2018-04-08 06:12:18 +00:00
ComponentbuilderHelper :: xmlAddAttributes ( $fieldXML , $attributes );
2018-03-18 04:28:54 +00:00
// count the static field created
$this -> fieldCount ++ ;
}
// if created is not set
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'created' ]))
2018-03-18 04:28:54 +00:00
{
$attributes = array (
2020-03-28 13:34:14 +00:00
'name' => 'created' ,
'type' => 'calendar' ,
'label' => $langView . '_CREATED_DATE_LABEL' ,
2018-03-18 04:28:54 +00:00
'description' => $langView . '_CREATED_DATE_DESC' ,
2020-03-28 13:34:14 +00:00
'size' => 22 ,
'format' => '%Y-%m-%d %H:%M:%S' ,
'filter' => 'user_utc'
2018-03-18 04:28:54 +00:00
);
$attributes = array_merge ( $attributes , $readOnlyXML );
2020-03-28 13:34:14 +00:00
ComponentbuilderHelper :: xmlComment (
$fieldSetXML , $this -> setLine ( __LINE__ )
. " Date Created Field. Type: Calendar (joomla) "
);
2018-03-18 04:28:54 +00:00
$fieldXML = $fieldSetXML -> addChild ( 'field' );
2018-04-08 06:12:18 +00:00
ComponentbuilderHelper :: xmlAddAttributes ( $fieldXML , $attributes );
2018-03-18 04:28:54 +00:00
// count the static field created
$this -> fieldCount ++ ;
}
// if created_by is not set
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'created_by' ]))
2018-03-18 04:28:54 +00:00
{
$attributes = array (
2020-03-28 13:34:14 +00:00
'name' => 'created_by' ,
'type' => 'user' ,
'label' => $langView . '_CREATED_BY_LABEL' ,
2018-03-18 04:28:54 +00:00
'description' => $langView . '_CREATED_BY_DESC' ,
);
$attributes = array_merge ( $attributes , $readOnlyXML );
2020-03-28 13:34:14 +00:00
ComponentbuilderHelper :: xmlComment (
$fieldSetXML , $this -> setLine ( __LINE__ )
. " User Created Field. Type: User (joomla) "
);
2018-03-18 04:28:54 +00:00
$fieldXML = $fieldSetXML -> addChild ( 'field' );
2018-04-08 06:12:18 +00:00
ComponentbuilderHelper :: xmlAddAttributes ( $fieldXML , $attributes );
2018-03-18 04:28:54 +00:00
// count the static field created
$this -> fieldCount ++ ;
}
// if published is not set
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'published' ]))
2018-03-18 04:28:54 +00:00
{
$attributes = array (
2020-03-28 13:34:14 +00:00
'name' => 'published' ,
'type' => 'list' ,
2018-03-18 04:28:54 +00:00
'label' => 'JSTATUS'
);
$attributes = array_merge ( $attributes , $readOnlyXML );
2020-03-28 13:34:14 +00:00
ComponentbuilderHelper :: xmlComment (
$fieldSetXML , $this -> setLine ( __LINE__ )
. " Published Field. Type: List (joomla) "
);
2018-03-18 04:28:54 +00:00
$fieldXML = $fieldSetXML -> addChild ( 'field' );
2018-04-08 06:12:18 +00:00
ComponentbuilderHelper :: xmlAddAttributes ( $fieldXML , $attributes );
2018-03-18 04:28:54 +00:00
// count the static field created
$this -> fieldCount ++ ;
2020-03-28 13:34:14 +00:00
foreach (
array ( 'JPUBLISHED' => 1 , 'JUNPUBLISHED' => 0 , 'JARCHIVED' => 2 ,
'JTRASHED' => - 2 ) as $text => $value
)
2018-03-18 04:28:54 +00:00
{
$optionXML = $fieldXML -> addChild ( 'option' );
$optionXML -> addAttribute ( 'value' , $value );
$optionXML [] = $text ;
}
}
// if modified is not set
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'modified' ]))
2018-03-18 04:28:54 +00:00
{
$attributes = array (
2020-03-28 13:34:14 +00:00
'name' => 'modified' ,
'type' => 'calendar' ,
'class' => 'readonly' ,
'label' => $langView . '_MODIFIED_DATE_LABEL' ,
2018-03-18 04:28:54 +00:00
'description' => $langView . '_MODIFIED_DATE_DESC' ,
2020-03-28 13:34:14 +00:00
'size' => 22 ,
'readonly' => " true " ,
'format' => '%Y-%m-%d %H:%M:%S' ,
'filter' => 'user_utc'
);
ComponentbuilderHelper :: xmlComment (
$fieldSetXML , $this -> setLine ( __LINE__ )
. " Date Modified Field. Type: Calendar (joomla) "
2018-03-18 04:28:54 +00:00
);
$fieldXML = $fieldSetXML -> addChild ( 'field' );
2018-04-08 06:12:18 +00:00
ComponentbuilderHelper :: xmlAddAttributes ( $fieldXML , $attributes );
2018-03-18 04:28:54 +00:00
// count the static field created
$this -> fieldCount ++ ;
}
// if modified_by is not set
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'modified_by' ]))
2018-03-18 04:28:54 +00:00
{
$attributes = array (
2020-03-28 13:34:14 +00:00
'name' => 'modified_by' ,
'type' => 'user' ,
'label' => $langView . '_MODIFIED_BY_LABEL' ,
2018-03-18 04:28:54 +00:00
'description' => $langView . '_MODIFIED_BY_DESC' ,
2020-03-28 13:34:14 +00:00
'class' => 'readonly' ,
'readonly' => 'true' ,
'filter' => 'unset'
);
ComponentbuilderHelper :: xmlComment (
$fieldSetXML , $this -> setLine ( __LINE__ )
. " User Modified Field. Type: User (joomla) "
2018-03-18 04:28:54 +00:00
);
$fieldXML = $fieldSetXML -> addChild ( 'field' );
2018-04-08 06:12:18 +00:00
ComponentbuilderHelper :: xmlAddAttributes ( $fieldXML , $attributes );
2018-03-18 04:28:54 +00:00
// count the static field created
$this -> fieldCount ++ ;
}
// check if view has access
2020-11-26 17:33:39 +00:00
if ( isset ( $this -> accessBuilder [ $nameSingleCode ])
2020-03-28 13:34:14 +00:00
&& ComponentbuilderHelper :: checkString (
2020-11-26 17:33:39 +00:00
$this -> accessBuilder [ $nameSingleCode ]
2020-03-28 13:34:14 +00:00
)
2020-11-26 17:33:39 +00:00
&& ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'access' ]))
2018-03-18 04:28:54 +00:00
{
$attributes = array (
2020-03-28 13:34:14 +00:00
'name' => 'access' ,
'type' => 'accesslevel' ,
'label' => 'JFIELD_ACCESS_LABEL' ,
2018-03-18 04:28:54 +00:00
'description' => 'JFIELD_ACCESS_DESC' ,
2020-03-28 13:34:14 +00:00
'default' => 1 ,
'required' => " false "
2018-03-18 04:28:54 +00:00
);
$attributes = array_merge ( $attributes , $readOnlyXML );
2020-03-28 13:34:14 +00:00
ComponentbuilderHelper :: xmlComment (
$fieldSetXML , $this -> setLine ( __LINE__ )
. " Access Field. Type: Accesslevel (joomla) "
);
2018-03-18 04:28:54 +00:00
$fieldXML = $fieldSetXML -> addChild ( 'field' );
2018-04-08 06:12:18 +00:00
ComponentbuilderHelper :: xmlAddAttributes ( $fieldXML , $attributes );
2018-03-18 04:28:54 +00:00
// count the static field created
$this -> fieldCount ++ ;
}
// if ordering is not set
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'ordering' ]))
2018-03-18 04:28:54 +00:00
{
$attributes = array (
2020-03-28 13:34:14 +00:00
'name' => 'ordering' ,
'type' => 'number' ,
'class' => 'inputbox validate-ordering' ,
'label' => $langView . '_ORDERING_LABEL' ,
2018-03-18 04:28:54 +00:00
'description' => '' ,
2020-03-28 13:34:14 +00:00
'default' => 0 ,
'size' => 6 ,
'required' => " false "
2018-03-18 04:28:54 +00:00
);
$attributes = array_merge ( $attributes , $readOnlyXML );
2020-03-28 13:34:14 +00:00
ComponentbuilderHelper :: xmlComment (
$fieldSetXML , $this -> setLine ( __LINE__ )
. " Ordering Field. Type: Numbers (joomla) "
);
2018-03-18 04:28:54 +00:00
$fieldXML = $fieldSetXML -> addChild ( 'field' );
2018-04-08 06:12:18 +00:00
ComponentbuilderHelper :: xmlAddAttributes ( $fieldXML , $attributes );
2018-03-18 04:28:54 +00:00
// count the static field created
$this -> fieldCount ++ ;
}
// if version is not set
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'version' ]))
2018-03-18 04:28:54 +00:00
{
$attributes = array (
2020-03-28 13:34:14 +00:00
'name' => 'version' ,
'type' => 'text' ,
'class' => 'readonly' ,
'label' => $langView . '_VERSION_LABEL' ,
2018-03-18 04:28:54 +00:00
'description' => $langView . '_VERSION_DESC' ,
2020-03-28 13:34:14 +00:00
'size' => 6 ,
'readonly' => " true " ,
'filter' => 'unset'
);
ComponentbuilderHelper :: xmlComment (
$fieldSetXML ,
$this -> setLine ( __LINE__ ) . " Version Field. Type: Text (joomla) "
2018-03-18 04:28:54 +00:00
);
$fieldXML = $fieldSetXML -> addChild ( 'field' );
2018-04-08 06:12:18 +00:00
ComponentbuilderHelper :: xmlAddAttributes ( $fieldXML , $attributes );
2018-03-18 04:28:54 +00:00
// count the static field created
$this -> fieldCount ++ ;
}
// check if metadata is added to this view
2020-11-26 17:33:39 +00:00
if ( isset ( $this -> metadataBuilder [ $nameSingleCode ])
2020-03-28 13:34:14 +00:00
&& ComponentbuilderHelper :: checkString (
2020-11-26 17:33:39 +00:00
$this -> metadataBuilder [ $nameSingleCode ]
2020-03-28 13:34:14 +00:00
))
2018-03-18 04:28:54 +00:00
{
// metakey
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'metakey' ]))
2019-10-11 13:41:00 +00:00
{
$attributes = array (
2020-03-28 13:34:14 +00:00
'name' => 'metakey' ,
'type' => 'textarea' ,
'label' => 'JFIELD_META_KEYWORDS_LABEL' ,
2019-10-11 13:41:00 +00:00
'description' => 'JFIELD_META_KEYWORDS_DESC' ,
2020-03-28 13:34:14 +00:00
'rows' => 3 ,
'cols' => 30
);
ComponentbuilderHelper :: xmlComment (
$fieldSetXML , $this -> setLine ( __LINE__ )
. " Metakey Field. Type: Textarea (joomla) "
2019-10-11 13:41:00 +00:00
);
$fieldXML = $fieldSetXML -> addChild ( 'field' );
2020-03-28 13:34:14 +00:00
ComponentbuilderHelper :: xmlAddAttributes (
$fieldXML , $attributes
);
2019-10-11 13:41:00 +00:00
// count the static field created
$this -> fieldCount ++ ;
}
2018-03-18 04:28:54 +00:00
// metadesc
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'metadesc' ]))
2019-10-11 13:41:00 +00:00
{
2020-03-28 13:34:14 +00:00
$attributes [ 'name' ] = 'metadesc' ;
$attributes [ 'label' ] = 'JFIELD_META_DESCRIPTION_LABEL' ;
2019-10-11 13:41:00 +00:00
$attributes [ 'description' ] = 'JFIELD_META_DESCRIPTION_DESC' ;
2020-03-28 13:34:14 +00:00
ComponentbuilderHelper :: xmlComment (
$fieldSetXML , $this -> setLine ( __LINE__ )
. " Metadesc Field. Type: Textarea (joomla) "
);
2019-10-11 13:41:00 +00:00
$fieldXML = $fieldSetXML -> addChild ( 'field' );
2020-03-28 13:34:14 +00:00
ComponentbuilderHelper :: xmlAddAttributes (
$fieldXML , $attributes
);
2019-10-11 13:41:00 +00:00
// count the static field created
$this -> fieldCount ++ ;
}
2018-03-18 04:28:54 +00:00
}
2020-12-24 13:39:33 +00:00
// fix the permissions field "title" issue gh-629
// check if the the title is not already set
2020-12-24 16:28:07 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'title' ])
&& $this -> hasPermissionsSet ( $view , $nameSingleCode ))
2020-12-24 13:39:33 +00:00
{
// set the field/tab name
$field_name = " title " ;
$tab_name = " publishing " ;
$attributes = array (
2021-03-04 06:13:05 +00:00
'name' => $field_name ,
'type' => 'hidden' ,
'default' => $component . ' ' . $nameSingleCode
2020-12-24 13:39:33 +00:00
);
ComponentbuilderHelper :: xmlComment (
$fieldSetXML ,
2021-03-04 06:13:05 +00:00
$this -> setLine ( __LINE__ )
. " Was added due to Permissions JS needing a Title field "
2020-12-24 13:39:33 +00:00
);
ComponentbuilderHelper :: xmlComment (
$fieldSetXML ,
2021-03-04 06:13:05 +00:00
$this -> setLine ( __LINE__ )
. " Let us know at gh-629 should this change "
2020-12-24 13:39:33 +00:00
);
ComponentbuilderHelper :: xmlComment (
$fieldSetXML ,
2021-03-04 06:13:05 +00:00
$this -> setLine ( __LINE__ )
. " https://github.com/vdm-io/Joomla-Component-Builder/issues/629#issuecomment-750117235 "
2020-12-24 13:39:33 +00:00
);
$fieldXML = $fieldSetXML -> addChild ( 'field' );
ComponentbuilderHelper :: xmlAddAttributes ( $fieldXML , $attributes );
// count the static field created
$this -> fieldCount ++ ;
// setup needed field values for layout
$field_array = array ();
$field_array [ 'order_edit' ] = 0 ;
$field_array [ 'tab' ] = 15 ;
$field_array [ 'alignment' ] = 1 ;
// make sure it gets added to view
$this -> setLayoutBuilder (
$nameSingleCode , $tab_name , $field_name , $field_array
);
}
2018-03-18 04:28:54 +00:00
// load the dynamic fields now
2019-09-05 21:12:56 +00:00
if ( count (( array ) $dynamicFieldsXML ))
2018-03-18 04:28:54 +00:00
{
2020-03-28 13:34:14 +00:00
ComponentbuilderHelper :: xmlComment (
$fieldSetXML , $this -> setLine ( __LINE__ ) . " Dynamic Fields. "
);
2018-03-18 04:28:54 +00:00
foreach ( $dynamicFieldsXML as $dynamicfield )
{
2018-04-08 06:12:18 +00:00
ComponentbuilderHelper :: xmlAppend ( $fieldSetXML , $dynamicfield );
2018-03-18 04:28:54 +00:00
}
}
// check if metadata is added to this view
2020-11-26 17:33:39 +00:00
if ( isset ( $this -> metadataBuilder [ $nameSingleCode ])
2020-03-28 13:34:14 +00:00
&& ComponentbuilderHelper :: checkString (
2020-11-26 17:33:39 +00:00
$this -> metadataBuilder [ $nameSingleCode ]
2020-03-28 13:34:14 +00:00
))
2018-03-18 04:28:54 +00:00
{
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'robots' ])
|| ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'author' ])
|| ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'rights' ]))
2018-03-18 04:28:54 +00:00
{
2020-03-28 13:34:14 +00:00
ComponentbuilderHelper :: xmlComment (
$fieldSetXML , $this -> setLine ( __LINE__ ) . " Metadata Fields "
);
2019-10-11 13:41:00 +00:00
$fieldsXML = $fieldSetXML -> addChild ( 'fields' );
$fieldsXML -> addAttribute ( 'name' , 'metadata' );
2020-03-28 13:34:14 +00:00
$fieldsXML -> addAttribute (
'label' , 'JGLOBAL_FIELDSET_METADATA_OPTIONS'
);
2019-10-11 13:41:00 +00:00
$fieldsFieldSetXML = $fieldsXML -> addChild ( 'fieldset' );
$fieldsFieldSetXML -> addAttribute ( 'name' , 'vdmmetadata' );
2020-03-28 13:34:14 +00:00
$fieldsFieldSetXML -> addAttribute (
'label' , 'JGLOBAL_FIELDSET_METADATA_OPTIONS'
);
2019-10-11 13:41:00 +00:00
// robots
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'robots' ]))
2019-10-11 13:41:00 +00:00
{
2020-03-28 13:34:14 +00:00
ComponentbuilderHelper :: xmlComment (
$fieldsFieldSetXML , $this -> setLine ( __LINE__ )
. " Robots Field. Type: List (joomla) "
);
$robots = $fieldsFieldSetXML -> addChild ( 'field' );
2019-10-11 13:41:00 +00:00
$attributes = array (
2020-03-28 13:34:14 +00:00
'name' => 'robots' ,
'type' => 'list' ,
'label' => 'JFIELD_METADATA_ROBOTS_LABEL' ,
2019-10-11 13:41:00 +00:00
'description' => 'JFIELD_METADATA_ROBOTS_DESC'
);
2020-03-28 13:34:14 +00:00
ComponentbuilderHelper :: xmlAddAttributes (
$robots , $attributes
);
2019-10-11 13:41:00 +00:00
// count the static field created
$this -> fieldCount ++ ;
$options = array (
2020-03-28 13:34:14 +00:00
'JGLOBAL_USE_GLOBAL' => '' ,
'JGLOBAL_INDEX_FOLLOW' => 'index, follow' ,
'JGLOBAL_NOINDEX_FOLLOW' => 'noindex, follow' ,
'JGLOBAL_INDEX_NOFOLLOW' => 'index, nofollow' ,
2019-10-11 13:41:00 +00:00
'JGLOBAL_NOINDEX_NOFOLLOW' => 'noindex, nofollow' ,
);
foreach ( $options as $text => $value )
{
$option = $robots -> addChild ( 'option' );
$option -> addAttribute ( 'value' , $value );
$option [] = $text ;
}
}
// author
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'author' ]))
2019-10-11 13:41:00 +00:00
{
2020-03-28 13:34:14 +00:00
ComponentbuilderHelper :: xmlComment (
$fieldsFieldSetXML , $this -> setLine ( __LINE__ )
. " Author Field. Type: Text (joomla) "
);
$author = $fieldsFieldSetXML -> addChild ( 'field' );
2019-10-11 13:41:00 +00:00
$attributes = array (
2020-03-28 13:34:14 +00:00
'name' => 'author' ,
'type' => 'text' ,
'label' => 'JAUTHOR' ,
2019-10-11 13:41:00 +00:00
'description' => 'JFIELD_METADATA_AUTHOR_DESC' ,
2020-03-28 13:34:14 +00:00
'size' => 20
);
ComponentbuilderHelper :: xmlAddAttributes (
$author , $attributes
2019-10-11 13:41:00 +00:00
);
// count the static field created
$this -> fieldCount ++ ;
}
// rights
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'rights' ]))
2019-10-11 13:41:00 +00:00
{
2020-03-28 13:34:14 +00:00
ComponentbuilderHelper :: xmlComment (
$fieldsFieldSetXML , $this -> setLine ( __LINE__ )
. " Rights Field. Type: Textarea (joomla) "
);
$rights = $fieldsFieldSetXML -> addChild ( 'field' );
2019-10-11 13:41:00 +00:00
$attributes = array (
2020-03-28 13:34:14 +00:00
'name' => 'rights' ,
'type' => 'textarea' ,
'label' => 'JFIELD_META_RIGHTS_LABEL' ,
2019-10-11 13:41:00 +00:00
'description' => 'JFIELD_META_RIGHTS_DESC' ,
2020-03-28 13:34:14 +00:00
'required' => 'false' ,
'filter' => 'string' ,
'cols' => 30 ,
'rows' => 2
);
ComponentbuilderHelper :: xmlAddAttributes (
$rights , $attributes
2019-10-11 13:41:00 +00:00
);
// count the static field created
$this -> fieldCount ++ ;
}
2018-03-18 04:28:54 +00:00
}
}
2020-03-28 13:34:14 +00:00
2018-03-18 04:28:54 +00:00
// return the set
return $this -> xmlPrettyPrint ( $XML , 'fieldset' );
}
2020-12-24 16:28:07 +00:00
/**
* Check to see if a view has permissions
*
* @ param array $view View details
* @ param string $nameSingleCode View Single Code Name
*
* @ return boolean true if it has permisssions
*
*/
protected function hasPermissionsSet ( & $view , & $nameSingleCode )
{
// first check if we have checked this already
if ( ! isset ( $this -> hasPermissions [ $nameSingleCode ]))
{
// default is false
$this -> hasPermissions [ $nameSingleCode ] = false ;
// when a view has history, it has permissions
// since it tracks the version access
if ( isset ( $view [ 'history' ]) && $view [ 'history' ] == 1 )
{
// set the permission for later
$this -> hasPermissions [ $nameSingleCode ] = true ;
2021-03-04 06:13:05 +00:00
2020-12-24 16:28:07 +00:00
// break out here
return true ;
}
// check if the view has permissions
if ( isset ( $view [ 'settings' ])
&& ComponentbuilderHelper :: checkArray (
2020-12-25 21:16:34 +00:00
$view [ 'settings' ] -> permissions , true
2020-12-24 16:28:07 +00:00
))
{
foreach ( $view [ 'settings' ] -> permissions as $per )
{
// check if the permission targets the view
// 1 = view
// 3 = both view & component
if ( isset ( $per [ 'implementation' ])
&& (
$per [ 'implementation' ] == 1
|| $per [ 'implementation' ] == 3
))
{
// set the permission for later
$this -> hasPermissions [ $nameSingleCode ] = true ;
2021-03-04 06:13:05 +00:00
2020-12-24 16:28:07 +00:00
// break out here
return true ;
}
}
}
// check if the fields has permissions
if ( isset ( $view [ 'settings' ])
&& ComponentbuilderHelper :: checkArray (
2020-12-25 21:16:34 +00:00
$view [ 'settings' ] -> fields , true
2020-12-24 16:28:07 +00:00
))
{
foreach ( $view [ 'settings' ] -> fields as $field )
{
// if a field has any permissions
// the a view has permissions
if ( isset ( $field [ 'permission' ])
&& ComponentbuilderHelper :: checkArray (
2020-12-25 21:16:34 +00:00
$field [ 'permission' ], true
2020-12-24 16:28:07 +00:00
))
{
// set the permission for later
$this -> hasPermissions [ $nameSingleCode ] = true ;
2021-03-04 06:13:05 +00:00
2020-12-24 16:28:07 +00:00
// break out here
return true ;
}
}
}
}
2021-03-04 06:13:05 +00:00
2020-12-24 16:28:07 +00:00
return $this -> hasPermissions [ $nameSingleCode ];
}
2016-06-02 16:18:49 +00:00
/**
* set Field Names
2017-12-03 17:08:01 +00:00
*
2020-03-28 13:34:14 +00:00
* @ param string $view View the field belongs to
* @ param string $name The name of the field
2016-06-02 16:18:49 +00:00
*
2017-12-03 17:08:01 +00:00
*
2016-06-02 16:18:49 +00:00
*/
public function setFieldsNames ( & $view , & $name )
{
$this -> fieldsNames [ $view ][ $name ] = $name ;
}
2016-03-01 18:44:13 +00:00
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* set Dynamic field
2017-12-03 17:08:01 +00:00
*
2020-11-26 17:33:39 +00:00
* @ param array $field The field data
* @ param array $view The view data
* @ param int $viewType The view type
* @ param string $langView The language string of the view
* @ param string $nameSingleCode The single view name
* @ param string $nameListCode The list view name
* @ param array $placeholders The place holder and replace values
* @ param string $dbkey The the custom table key
* @ param boolean $build The switch to set the build option
2016-03-01 18:44:13 +00:00
*
2017-12-03 17:08:01 +00:00
* @ return SimpleXMLElement The complete field in xml
*
2016-03-01 18:44:13 +00:00
*/
2020-03-28 13:34:14 +00:00
public function setDynamicField ( & $field , & $view , & $viewType , & $langView ,
2020-11-26 17:33:39 +00:00
& $nameSingleCode , & $nameListCode , & $placeholders , & $dbkey , $build
2020-03-28 13:34:14 +00:00
) {
2018-03-18 04:28:54 +00:00
// set default return
if ( $this -> fieldBuilderType == 1 )
{
// string manipulation
$dynamicField = '' ;
}
else
{
// simpleXMLElement class
$dynamicField = false ;
}
// make sure we have settings
2020-03-28 13:34:14 +00:00
if ( isset ( $field [ 'settings' ])
&& ComponentbuilderHelper :: checkObject (
$field [ 'settings' ]
))
2016-03-01 18:44:13 +00:00
{
2017-12-03 17:08:01 +00:00
// reset some values
2020-11-26 17:33:39 +00:00
$name = $this -> getFieldName ( $field , $nameListCode );
2020-03-28 13:34:14 +00:00
$typeName = $this -> getFieldType ( $field );
$multiple = false ;
$langLabel = '' ;
$fieldSet = '' ;
2017-12-03 17:08:01 +00:00
$fieldAttributes = array ();
2016-06-23 15:05:37 +00:00
// set field attributes
2020-03-28 13:34:14 +00:00
$fieldAttributes = $this -> setFieldAttributes (
$field , $viewType , $name , $typeName , $multiple , $langLabel ,
2020-11-26 17:33:39 +00:00
$langView , $nameListCode , $nameSingleCode , $placeholders
2020-03-28 13:34:14 +00:00
);
2016-06-23 15:05:37 +00:00
// check if values were set
if ( ComponentbuilderHelper :: checkArray ( $fieldAttributes ))
2016-03-01 18:44:13 +00:00
{
2016-06-23 15:05:37 +00:00
// set the array of field names
2020-03-28 13:34:14 +00:00
$this -> setFieldsNames (
2020-11-26 17:33:39 +00:00
$nameSingleCode , $fieldAttributes [ 'name' ]
2020-03-28 13:34:14 +00:00
);
2017-12-14 23:10:47 +00:00
2018-05-24 13:56:56 +00:00
if ( ComponentbuilderHelper :: fieldCheck ( $typeName , 'option' ))
2016-03-01 18:44:13 +00:00
{
2016-06-23 15:05:37 +00:00
//reset options array
$optionArray = array ();
// now add to the field set
2020-03-28 13:34:14 +00:00
$dynamicField = $this -> setField (
'option' , $fieldAttributes , $name , $typeName , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode , $placeholders ,
2020-03-28 13:34:14 +00:00
$optionArray
);
2016-06-23 15:05:37 +00:00
if ( $build )
{
// set builders
2020-03-28 13:34:14 +00:00
$this -> setBuilders (
2020-11-26 17:33:39 +00:00
$langLabel , $langView , $nameSingleCode ,
$nameListCode , $name , $view , $field , $typeName ,
2020-03-28 13:34:14 +00:00
$multiple , false , $optionArray
);
2016-06-23 15:05:37 +00:00
}
2016-03-01 18:44:13 +00:00
}
2018-05-24 13:56:56 +00:00
elseif ( ComponentbuilderHelper :: fieldCheck ( $typeName , 'spacer' ))
2016-03-01 18:44:13 +00:00
{
2016-06-23 15:05:37 +00:00
if ( $build )
2016-03-01 18:44:13 +00:00
{
2016-06-23 15:05:37 +00:00
// make sure spacers gets loaded to layout
$tabName = '' ;
2020-03-28 13:34:14 +00:00
if ( isset ( $view [ 'settings' ] -> tabs )
&& isset ( $view [ 'settings' ] -> tabs [( int ) $field [ 'tab' ]]))
2016-06-23 15:05:37 +00:00
{
2020-03-28 13:34:14 +00:00
$tabName
= $view [ 'settings' ] -> tabs [( int ) $field [ 'tab' ]];
2016-06-23 15:05:37 +00:00
}
elseif (( int ) $field [ 'tab' ] == 15 )
{
// set to publishing tab
$tabName = 'publishing' ;
}
2020-03-28 13:34:14 +00:00
$this -> setLayoutBuilder (
2020-11-26 17:33:39 +00:00
$nameSingleCode , $tabName , $name , $field
2020-03-28 13:34:14 +00:00
);
2016-03-01 18:44:13 +00:00
}
2016-06-23 15:05:37 +00:00
// now add to the field set
2020-03-28 13:34:14 +00:00
$dynamicField = $this -> setField (
'spacer' , $fieldAttributes , $name , $typeName , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode , $placeholders ,
2020-03-28 13:34:14 +00:00
$optionArray
);
2016-03-01 18:44:13 +00:00
}
2020-03-28 13:34:14 +00:00
elseif ( ComponentbuilderHelper :: fieldCheck (
$typeName , 'special'
))
2016-03-01 18:44:13 +00:00
{
2017-06-18 07:37:48 +00:00
// set the repeatable field or subform field
if ( $typeName === 'repeatable' || $typeName === 'subform' )
2016-06-23 15:05:37 +00:00
{
if ( $build )
{
// set builders
2020-03-28 13:34:14 +00:00
$this -> setBuilders (
2020-11-26 17:33:39 +00:00
$langLabel , $langView , $nameSingleCode ,
$nameListCode , $name , $view , $field ,
2020-03-28 13:34:14 +00:00
$typeName , $multiple , false
);
2016-06-23 15:05:37 +00:00
}
// now add to the field set
2020-03-28 13:34:14 +00:00
$dynamicField = $this -> setField (
'special' , $fieldAttributes , $name , $typeName ,
2020-11-26 17:33:39 +00:00
$langView , $nameSingleCode , $nameListCode ,
2020-03-28 13:34:14 +00:00
$placeholders , $optionArray
);
2016-06-23 15:05:37 +00:00
}
2016-03-01 18:44:13 +00:00
}
2020-03-28 13:34:14 +00:00
elseif ( isset ( $fieldAttributes [ 'custom' ])
&& ComponentbuilderHelper :: checkArray (
$fieldAttributes [ 'custom' ]
))
2016-03-01 18:44:13 +00:00
{
2016-06-23 15:05:37 +00:00
// set the custom array
$custom = $fieldAttributes [ 'custom' ];
unset ( $fieldAttributes [ 'custom' ]);
// set db key
$custom [ 'db' ] = $dbkey ;
// increment the db key
$dbkey ++ ;
2016-03-01 18:44:13 +00:00
if ( $build )
{
// set builders
2020-03-28 13:34:14 +00:00
$this -> setBuilders (
2020-11-26 17:33:39 +00:00
$langLabel , $langView , $nameSingleCode ,
$nameListCode , $name , $view , $field , $typeName ,
2020-03-28 13:34:14 +00:00
$multiple , $custom
);
2016-03-01 18:44:13 +00:00
}
// now add to the field set
2020-03-28 13:34:14 +00:00
$dynamicField = $this -> setField (
'custom' , $fieldAttributes , $name , $typeName , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode , $placeholders ,
2020-03-28 13:34:14 +00:00
$optionArray , $custom
);
2016-03-01 18:44:13 +00:00
}
2019-07-15 20:03:57 +00:00
else
{
if ( $build )
{
// set builders
2020-03-28 13:34:14 +00:00
$this -> setBuilders (
2020-11-26 17:33:39 +00:00
$langLabel , $langView , $nameSingleCode ,
$nameListCode , $name , $view , $field , $typeName ,
2020-03-28 13:34:14 +00:00
$multiple
);
2019-07-15 20:03:57 +00:00
}
// now add to the field set
2020-03-28 13:34:14 +00:00
$dynamicField = $this -> setField (
'plain' , $fieldAttributes , $name , $typeName , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode , $placeholders ,
2020-03-28 13:34:14 +00:00
$optionArray
);
2019-07-15 20:03:57 +00:00
}
2016-03-01 18:44:13 +00:00
}
}
2020-03-28 13:34:14 +00:00
2018-03-18 04:28:54 +00:00
return $dynamicField ;
2016-03-01 18:44:13 +00:00
}
2020-11-26 17:33:39 +00:00
/**
* build field set
*
* @ param array $fields The fields data
* @ param string $langView The language string of the view
* @ param string $nameSingleCode The single view name
* @ param string $nameListCode The list view name
* @ param array $placeholders The place holder and replace values
* @ param string $dbkey The the custom table key
* @ param boolean $build The switch to set the build option
* @ param int $return_type The return type 1 = string , 2 = array
*
* @ return mix The complete field in xml
*
*/
public function getFieldsetXML ( & $fields , & $langView , & $nameSingleCode ,
& $nameListCode , & $placeholders , & $dbkey , $build = false ,
$return_type = 1
) {
// set some defaults
$view = '' ;
$viewType = 0 ;
// build the fieldset
if ( $return_type == 1 )
{
$fieldset = '' ;
}
else
{
$fieldset = array ();
}
// loop over the fields to build
if ( ComponentbuilderHelper :: checkArray ( $fields ))
{
foreach ( $fields as $field )
{
// get the field
$xmlField = $this -> getFieldXMLString (
$field , $view , $viewType , $langView ,
$nameSingleCode , $nameListCode ,
$placeholders , $dbkey , $build
);
// make sure the xml is set and a string
if ( isset ( $xmlField )
&& ComponentbuilderHelper :: checkString (
$xmlField
))
{
if ( $return_type == 1 )
{
$fieldset .= $xmlField ;
}
else
{
$fieldset [] = $xmlField ;
}
}
}
}
return $fieldset ;
}
/**
* build field string
*
* @ param array $field The field data
* @ param array $view The view data
* @ param int $viewType The view type
* @ param string $langView The language string of the view
* @ param string $nameSingleCode The single view name
* @ param string $nameListCode The list view name
* @ param array $placeholders The place holder and replace values
* @ param string $dbkey The the custom table key
* @ param boolean $build The switch to set the build option
*
* @ return string The complete field in xml - string
*
*/
public function getFieldXMLString ( & $field , & $view , & $viewType , & $langView ,
& $nameSingleCode , & $nameListCode , & $placeholders , & $dbkey ,
$build = false
) {
// check the field builder type
$xmlField = '' ;
if ( $this -> fieldBuilderType == 1 )
{
// string manipulation
$xmlField = $this -> setDynamicField (
$field , $view , $viewType , $langView ,
$nameSingleCode , $nameListCode ,
$placeholders , $dbkey , $build
);
}
else
{
// simpleXMLElement class
$newxmlField = $this -> setDynamicField (
$field , $view , $viewType , $langView ,
$nameSingleCode , $nameListCode ,
$placeholders , $dbkey , $build
);
if ( isset ( $newxmlField -> fieldXML ))
{
$xmlField = dom_import_simplexml (
$newxmlField -> fieldXML
);
$xmlField = PHP_EOL . $this -> _t ( 2 ) . " <!-- "
. $this -> setLine ( __LINE__ ) . " "
. $newxmlField -> comment . ' -->' . PHP_EOL
. $this -> _t ( 1 ) . $this -> xmlPrettyPrint (
$xmlField , 'field'
);
}
}
// return the string
return $xmlField ;
}
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* set a field
*
2020-11-26 17:33:39 +00:00
* @ param string $setType The set of fields type
* @ param array $fieldAttributes The field values
* @ param string $name The field name
* @ param string $typeName The field type
* @ param string $langView The language string of the view
* @ param string $nameSingleCode The single view name
* @ param string $nameListCode The list view name
* @ param array $placeholders The place holder and replace values
* @ param string $optionArray The option bucket array used to set the field options if needed .
* @ param array $custom Used when field is from config
* @ param string $taber The tabs to add in layout ( only in string manipulation )
2018-03-18 04:28:54 +00:00
*
* @ return SimpleXMLElement The field in xml
*
*/
2020-03-28 13:34:14 +00:00
private function setField ( $setType , & $fieldAttributes , & $name , & $typeName ,
2020-11-26 17:33:39 +00:00
& $langView , & $nameSingleCode , & $nameListCode , $placeholders ,
2020-03-28 13:34:14 +00:00
& $optionArray , $custom = null , $taber = ''
) {
2018-03-18 04:52:07 +00:00
// count the dynamic fields created
$this -> fieldCount ++ ;
2018-03-18 04:28:54 +00:00
// check what type of field builder to use
if ( $this -> fieldBuilderType == 1 )
{
// build field set using string manipulation
2020-03-28 13:34:14 +00:00
return $this -> stringSetField (
$setType , $fieldAttributes , $name , $typeName , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode , $placeholders , $optionArray ,
2020-03-28 13:34:14 +00:00
$custom , $taber
);
2018-03-18 04:28:54 +00:00
}
else
{
// build field set with simpleXMLElement class
2020-03-28 13:34:14 +00:00
return $this -> simpleXMLSetField (
$setType , $fieldAttributes , $name , $typeName , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode , $placeholders , $optionArray ,
2020-03-28 13:34:14 +00:00
$custom
);
2018-03-18 04:28:54 +00:00
}
}
/**
* set a field using string manipulation
*
2020-11-26 17:33:39 +00:00
* @ param string $setType The set of fields type
* @ param array $fieldAttributes The field values
* @ param string $name The field name
* @ param string $typeName The field type
* @ param string $langView The language string of the view
* @ param string $nameSingleCode The single view name
* @ param string $nameListCode The list view name
* @ param array $placeholders The place holder and replace values
* @ param string $optionArray The option bucket array used to set the field options if needed .
* @ param array $custom Used when field is from config
* @ param string $taber The tabs to add in layout
2018-03-18 04:28:54 +00:00
*
* @ return SimpleXMLElement The field in xml
*
*/
2020-03-28 13:34:14 +00:00
protected function stringSetField ( $setType , & $fieldAttributes , & $name ,
2020-11-26 17:33:39 +00:00
& $typeName , & $langView , & $nameSingleCode , & $nameListCode ,
2020-03-28 13:34:14 +00:00
$placeholders , & $optionArray , $custom = null , $taber = ''
) {
2018-03-18 04:28:54 +00:00
$field = '' ;
if ( $setType === 'option' )
{
// now add to the field set
2020-03-28 13:34:14 +00:00
$field .= PHP_EOL . $this -> _t ( 1 ) . $taber . $this -> _t ( 1 )
. " <!-- " . $this -> setLine ( __LINE__ ) . " " . ucfirst ( $name )
. " Field. Type: " . ComponentbuilderHelper :: safeString (
$typeName , 'F'
) . " . (joomla) --> " ;
$field .= PHP_EOL . $this -> _t ( 1 ) . $taber . $this -> _t ( 1 )
. " <field " ;
2018-03-18 04:28:54 +00:00
$optionSet = '' ;
foreach ( $fieldAttributes as $property => $value )
{
if ( $property != 'option' )
{
2020-03-28 13:34:14 +00:00
$field .= PHP_EOL . $this -> _t ( 2 ) . $taber . $this -> _t ( 1 )
. $property . '="' . $value . '"' ;
2018-03-18 04:28:54 +00:00
}
elseif ( $property === 'option' )
{
$optionSet = '' ;
2020-03-28 13:34:14 +00:00
if ( strtolower ( $typeName ) === 'groupedlist'
&& strpos (
$value , ','
) !== false
&& strpos ( $value , '@@' ) !== false )
2019-07-29 11:30:13 +00:00
{
// reset the group temp arrays
2020-03-28 13:34:14 +00:00
$groups_ = array ();
$grouped_ = array ( 'group' => array (),
'option' => array ());
$order_ = array ();
2019-07-29 11:30:13 +00:00
// mulitpal options
$options = explode ( ',' , $value );
foreach ( $options as $option )
{
if ( strpos ( $option , '@@' ) !== false )
{
// set the group label
$valueKeyArray = explode ( '@@' , $option );
if ( count (( array ) $valueKeyArray ) == 2 )
{
2020-03-28 13:34:14 +00:00
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$valueKeyArray [ 0 ], true
);
2019-07-29 11:30:13 +00:00
// add to lang array
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
$this -> lang , $langValue ,
$valueKeyArray [ 0 ]
);
2019-07-29 11:30:13 +00:00
// now add group label
2020-03-28 13:34:14 +00:00
$groups_ [ $valueKeyArray [ 1 ]] = PHP_EOL
. $this -> _t ( 1 ) . $taber . $this -> _t ( 2 )
. '<group label="' . $langValue . '">' ;
2019-07-29 11:30:13 +00:00
// set order
2020-03-28 13:34:14 +00:00
$order_ [ 'group' . $valueKeyArray [ 1 ]]
= $valueKeyArray [ 1 ];
2019-07-29 11:30:13 +00:00
}
}
elseif ( strpos ( $option , '|' ) !== false )
{
// has other value then text
$valueKeyArray = explode ( '|' , $option );
if ( count (( array ) $valueKeyArray ) == 3 )
{
2020-03-28 13:34:14 +00:00
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$valueKeyArray [ 1 ], true
);
2019-07-29 11:30:13 +00:00
// add to lang array
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
$this -> lang , $langValue ,
$valueKeyArray [ 1 ]
);
2019-07-29 11:30:13 +00:00
// now add to option set
2020-03-28 13:34:14 +00:00
$grouped_ [ 'group' ][ $valueKeyArray [ 2 ]][]
= PHP_EOL . $this -> _t ( 1 ) . $taber
. $this -> _t ( 3 ) . '<option value="'
. $valueKeyArray [ 0 ] . '">' . PHP_EOL
. $this -> _t ( 1 ) . $taber . $this -> _t ( 4 )
. $langValue . '</option>' ;
$optionArray [ $valueKeyArray [ 0 ]]
= $langValue ;
2019-07-29 11:30:13 +00:00
// set order
2020-03-28 13:34:14 +00:00
$order_ [ 'group' . $valueKeyArray [ 2 ]]
= $valueKeyArray [ 2 ];
2019-07-29 11:30:13 +00:00
}
else
{
2020-03-28 13:34:14 +00:00
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$valueKeyArray [ 1 ], true
);
2019-07-29 11:30:13 +00:00
// add to lang array
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
$this -> lang , $langValue ,
$valueKeyArray [ 1 ]
);
2019-07-29 11:30:13 +00:00
// now add to option set
2020-03-28 13:34:14 +00:00
$grouped_ [ 'option' ][ $valueKeyArray [ 0 ]]
= PHP_EOL . $this -> _t ( 1 ) . $taber
. $this -> _t ( 2 ) . '<option value="'
. $valueKeyArray [ 0 ] . '">' . PHP_EOL
. $this -> _t ( 1 ) . $taber . $this -> _t ( 3 )
. $langValue . '</option>' ;
$optionArray [ $valueKeyArray [ 0 ]]
= $langValue ;
2019-07-29 11:30:13 +00:00
// set order
2020-03-28 13:34:14 +00:00
$order_ [ 'option' . $valueKeyArray [ 0 ]]
= $valueKeyArray [ 0 ];
2019-07-29 11:30:13 +00:00
}
}
else
{
// text is also the value
2020-03-28 13:34:14 +00:00
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$option , true
);
2019-07-29 11:30:13 +00:00
// add to lang array
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
$this -> lang , $langValue , $option
);
2019-07-29 11:30:13 +00:00
// now add to option set
2020-03-28 13:34:14 +00:00
$grouped_ [ 'option' ][ $option ] = PHP_EOL
. $this -> _t ( 1 ) . $taber . $this -> _t ( 2 )
. '<option value="' . $option . '">'
. PHP_EOL . $this -> _t ( 1 ) . $taber
. $this -> _t ( 3 ) . $langValue . '</option>' ;
$optionArray [ $option ] = $langValue ;
2019-07-29 11:30:13 +00:00
// set order
$order_ [ 'option' . $option ] = $option ;
}
}
// now build the groups
foreach ( $order_ as $pointer_ => $_id )
{
// load the default key
$key_ = 'group' ;
if ( strpos ( $pointer_ , 'option' ) !== false )
{
// load the option field
$key_ = 'option' ;
}
// check if this is a group loader
2020-03-28 13:34:14 +00:00
if ( 'group' === $key_ && isset ( $groups_ [ $_id ])
&& isset ( $grouped_ [ $key_ ][ $_id ])
&& ComponentbuilderHelper :: checkArray (
$grouped_ [ $key_ ][ $_id ]
))
2019-07-29 11:30:13 +00:00
{
// set group label
$optionSet .= $groups_ [ $_id ];
foreach ( $grouped_ [ $key_ ][ $_id ] as $option_ )
{
$optionSet .= $option_ ;
}
unset ( $groups_ [ $_id ]);
unset ( $grouped_ [ $key_ ][ $_id ]);
// close the group
2020-03-28 13:34:14 +00:00
$optionSet .= PHP_EOL . $this -> _t ( 1 ) . $taber
. $this -> _t ( 2 ) . '</group>' ;
2019-07-29 11:30:13 +00:00
}
2020-03-28 13:34:14 +00:00
elseif ( isset ( $grouped_ [ $key_ ][ $_id ])
&& ComponentbuilderHelper :: checkString (
$grouped_ [ $key_ ][ $_id ]
))
2019-07-29 11:30:13 +00:00
{
$optionSet .= $grouped_ [ $key_ ][ $_id ];
}
}
}
elseif ( strpos ( $value , ',' ) !== false )
2018-03-18 04:28:54 +00:00
{
// mulitpal options
$options = explode ( ',' , $value );
foreach ( $options as $option )
{
if ( strpos ( $option , '|' ) !== false )
{
// has other value then text
list ( $v , $t ) = explode ( '|' , $option );
2020-03-28 13:34:14 +00:00
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$t , true
);
2018-03-18 04:28:54 +00:00
// add to lang array
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
$this -> lang , $langValue , $t
);
2019-07-29 11:30:13 +00:00
// now add to option set
2020-03-28 13:34:14 +00:00
$optionSet .= PHP_EOL . $this -> _t ( 1 )
. $taber . $this -> _t ( 2 ) . '<option value="'
. $v . '">' . PHP_EOL . $this -> _t ( 1 )
. $taber . $this -> _t ( 3 ) . $langValue
. '</option>' ;
2018-03-18 04:28:54 +00:00
$optionArray [ $v ] = $langValue ;
}
else
{
// text is also the value
2020-03-28 13:34:14 +00:00
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$option , true
);
2018-03-18 04:28:54 +00:00
// add to lang array
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
$this -> lang , $langValue , $option
);
2019-07-29 11:30:13 +00:00
// now add to option set
2020-03-28 13:34:14 +00:00
$optionSet .= PHP_EOL . $this -> _t ( 2 )
. $taber . $this -> _t ( 1 ) . '<option value="'
. $option . '">' . PHP_EOL . $this -> _t ( 2 )
. $taber . $this -> _t ( 2 ) . $langValue
. '</option>' ;
2018-03-18 04:28:54 +00:00
$optionArray [ $option ] = $langValue ;
}
}
}
else
{
// one option
if ( strpos ( $value , '|' ) !== false )
{
// has other value then text
list ( $v , $t ) = explode ( '|' , $value );
2020-03-28 13:34:14 +00:00
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$t , true
);
2018-03-18 04:28:54 +00:00
// add to lang array
2019-07-04 23:53:54 +00:00
$this -> setLangContent ( $this -> lang , $langValue , $t );
2019-07-29 11:30:13 +00:00
// now add to option set
2020-03-28 13:34:14 +00:00
$optionSet .= PHP_EOL . $this -> _t ( 2 ) . $taber
. $this -> _t ( 1 ) . '<option value="' . $v . '">'
. PHP_EOL . $this -> _t ( 2 ) . $taber . $this -> _t ( 2 )
. $langValue . '</option>' ;
2018-03-18 04:28:54 +00:00
$optionArray [ $v ] = $langValue ;
}
else
{
// text is also the value
2020-03-28 13:34:14 +00:00
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$value , true
);
2018-03-18 04:28:54 +00:00
// add to lang array
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
$this -> lang , $langValue , $value
);
2019-07-29 11:30:13 +00:00
// now add to option set
2020-03-28 13:34:14 +00:00
$optionSet .= PHP_EOL . $this -> _t ( 2 )
. $taber . $this -> _t ( 1 ) . '<option value="'
. $value . '">' . PHP_EOL . $this -> _t ( 2 )
. $taber . $this -> _t ( 2 ) . $langValue
. '</option>' ;
2018-03-18 04:28:54 +00:00
$optionArray [ $value ] = $langValue ;
}
}
}
}
2019-03-05 07:51:52 +00:00
// if options were found
2018-03-18 04:28:54 +00:00
if ( ComponentbuilderHelper :: checkString ( $optionSet ))
{
$field .= '>' ;
2020-03-28 13:34:14 +00:00
$field .= PHP_EOL . $this -> _t ( 3 ) . $taber . " <!-- "
. $this -> setLine ( __LINE__ ) . " Option Set. --> " ;
2018-03-18 04:28:54 +00:00
$field .= $optionSet ;
2018-05-26 10:03:08 +00:00
$field .= PHP_EOL . $this -> _t ( 2 ) . $taber . " </field> " ;
2018-03-18 04:28:54 +00:00
}
2019-03-05 07:51:52 +00:00
// if no options found and must have a list of options
elseif ( ComponentbuilderHelper :: fieldCheck ( $typeName , 'list' ))
2018-03-18 04:28:54 +00:00
{
$optionArray = false ;
2020-03-28 13:34:14 +00:00
$field .= PHP_EOL . $this -> _t ( 2 ) . $taber . " /> " ;
$field .= PHP_EOL . $this -> _t ( 2 ) . $taber . " <!-- "
. $this -> setLine ( __LINE__ )
. " No Manual Options Were Added In Field Settings. --> "
. PHP_EOL ;
2018-03-18 04:28:54 +00:00
}
else
{
$optionArray = false ;
2020-03-28 13:34:14 +00:00
$field .= PHP_EOL . $this -> _t ( 2 ) . $taber . " /> " ;
2018-03-18 04:28:54 +00:00
}
}
elseif ( $setType === 'plain' )
{
// now add to the field set
2020-03-28 13:34:14 +00:00
$field .= PHP_EOL . $this -> _t ( 2 ) . $taber . " <!-- " . $this -> setLine (
__LINE__
) . " " . ucfirst ( $name ) . " Field. Type: "
. ComponentbuilderHelper :: safeString ( $typeName , 'F' )
. " . (joomla) --> " ;
2018-05-26 10:03:08 +00:00
$field .= PHP_EOL . $this -> _t ( 2 ) . $taber . " <field " ;
2018-03-18 04:28:54 +00:00
foreach ( $fieldAttributes as $property => $value )
{
if ( $property != 'option' )
{
2020-03-28 13:34:14 +00:00
$field .= PHP_EOL . $this -> _t ( 2 ) . $taber . $this -> _t ( 1 )
. $property . '="' . $value . '"' ;
2018-03-18 04:28:54 +00:00
}
}
2018-05-26 10:03:08 +00:00
$field .= PHP_EOL . $this -> _t ( 2 ) . $taber . " /> " ;
2018-03-18 04:28:54 +00:00
}
elseif ( $setType === 'spacer' )
{
// now add to the field set
2020-03-28 13:34:14 +00:00
$field .= PHP_EOL . $this -> _t ( 2 ) . " <!-- " . $this -> setLine ( __LINE__ )
. " " . ucfirst ( $name ) . " Field. Type: "
. ComponentbuilderHelper :: safeString ( $typeName , 'F' )
. " . A None Database Field. (joomla) --> " ;
2018-05-26 10:03:08 +00:00
$field .= PHP_EOL . $this -> _t ( 2 ) . " <field " ;
2018-03-18 04:28:54 +00:00
foreach ( $fieldAttributes as $property => $value )
{
if ( $property != 'option' )
{
$field .= " " . $property . '="' . $value . '"' ;
}
}
$field .= " /> " ;
}
elseif ( $setType === 'special' )
{
// set the repeatable field
if ( $typeName === 'repeatable' )
{
// now add to the field set
2020-03-28 13:34:14 +00:00
$field .= PHP_EOL . $this -> _t ( 2 ) . " <!-- " . $this -> setLine (
__LINE__
) . " " . ucfirst ( $name ) . " Field. Type: "
. ComponentbuilderHelper :: safeString ( $typeName , 'F' )
. " . (joomla) --> " ;
$field .= PHP_EOL . $this -> _t ( 2 ) . " <field " ;
2018-03-18 04:28:54 +00:00
$fieldsSet = array ();
foreach ( $fieldAttributes as $property => $value )
{
if ( $property != 'fields' )
{
2020-03-28 13:34:14 +00:00
$field .= PHP_EOL . $this -> _t ( 3 ) . $property . '="'
. $value . '"' ;
2018-03-18 04:28:54 +00:00
}
}
$field .= " > " ;
2020-03-28 13:34:14 +00:00
$field .= PHP_EOL . $this -> _t ( 3 ) . '<fields name="'
. $fieldAttributes [ 'name' ] . '_fields" label="">' ;
$field .= PHP_EOL . $this -> _t ( 4 )
. '<fieldset hidden="true" name="'
. $fieldAttributes [ 'name' ] . '_modal" repeat="true">' ;
2018-03-18 04:28:54 +00:00
if ( strpos ( $fieldAttributes [ 'fields' ], ',' ) !== false )
{
// mulitpal fields
2020-03-28 13:34:14 +00:00
$fieldsSets = ( array ) explode (
',' , $fieldAttributes [ 'fields' ]
);
2018-03-18 04:28:54 +00:00
}
elseif ( is_numeric ( $fieldAttributes [ 'fields' ]))
{
// single field
$fieldsSets [] = ( int ) $fieldAttributes [ 'fields' ];
}
// only continue if we have a field set
if ( ComponentbuilderHelper :: checkArray ( $fieldsSets ))
{
2018-10-01 02:16:24 +00:00
// set the resolver
$_resolverKey = $fieldAttributes [ 'name' ];
// load the field data
2020-03-28 13:34:14 +00:00
$fieldsSets = array_map (
function ( $id ) use (
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode , $_resolverKey
2020-03-28 13:34:14 +00:00
) {
// start field
$field = array ();
$field [ 'field' ] = $id ;
// set the field details
$this -> setFieldDetails (
2020-11-26 17:33:39 +00:00
$field , $nameSingleCode , $nameListCode ,
2020-03-28 13:34:14 +00:00
$_resolverKey
);
// return field
return $field ;
}, array_values ( $fieldsSets )
);
2018-10-01 02:16:24 +00:00
// start the build
foreach ( $fieldsSets as $fieldData )
2018-03-18 04:28:54 +00:00
{
2018-10-01 02:16:24 +00:00
// if we have settings continue
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkObject (
$fieldData [ 'settings' ]
))
2018-03-18 04:28:54 +00:00
{
2020-03-28 13:34:14 +00:00
$r_name = $this -> getFieldName (
2020-11-26 17:33:39 +00:00
$fieldData , $nameListCode , $_resolverKey
2020-03-28 13:34:14 +00:00
);
$r_typeName = $this -> getFieldType ( $fieldData );
$r_multiple = false ;
2018-03-18 04:28:54 +00:00
$r_langLabel = '' ;
// add the tabs needed
2018-05-26 10:03:08 +00:00
$r_taber = $this -> _t ( 3 );
2018-03-18 04:28:54 +00:00
// get field values
2020-03-28 13:34:14 +00:00
$r_fieldValues = $this -> setFieldAttributes (
$fieldData , $view , $r_name , $r_typeName ,
$r_multiple , $r_langLabel , $langView ,
2020-11-26 17:33:39 +00:00
$nameListCode , $nameSingleCode ,
2020-03-28 13:34:14 +00:00
$placeholders , true
);
2018-03-18 04:28:54 +00:00
// check if values were set
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkArray (
$r_fieldValues
))
2018-03-18 04:28:54 +00:00
{
//reset options array
$r_optionArray = array ();
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: fieldCheck (
$r_typeName , 'option'
))
2018-03-18 04:28:54 +00:00
{
// now add to the field set
2020-03-28 13:34:14 +00:00
$field .= $this -> setField (
'option' , $r_fieldValues , $r_name ,
$r_typeName , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode ,
2020-03-28 13:34:14 +00:00
$placeholders , $r_optionArray , null ,
$r_taber
);
2018-03-18 04:28:54 +00:00
}
2020-03-28 13:34:14 +00:00
elseif ( isset ( $r_fieldValues [ 'custom' ])
&& ComponentbuilderHelper :: checkArray (
$r_fieldValues [ 'custom' ]
))
2018-03-18 04:28:54 +00:00
{
// add to custom
$custom = $r_fieldValues [ 'custom' ];
unset ( $r_fieldValues [ 'custom' ]);
// now add to the field set
2020-03-28 13:34:14 +00:00
$field .= $this -> setField (
'custom' , $r_fieldValues , $r_name ,
$r_typeName , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode ,
2020-03-28 13:34:14 +00:00
$placeholders , $r_optionArray , null ,
$r_taber
);
2018-03-18 04:28:54 +00:00
// set lang (just incase)
2020-03-28 13:34:14 +00:00
$r_listLangName = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$r_name , true
);
2018-03-18 04:28:54 +00:00
// add to lang array
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
$this -> lang , $r_listLangName ,
ComponentbuilderHelper :: safeString (
$r_name , 'W'
)
);
2018-03-18 04:28:54 +00:00
// if label was set use instead
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkString (
$r_langLabel
))
2018-03-18 04:28:54 +00:00
{
$r_listLangName = $r_langLabel ;
}
// set the custom array
2020-03-28 13:34:14 +00:00
$data = array ( 'type' => $r_typeName ,
'code' => $r_name ,
'lang' => $r_listLangName ,
'custom' => $custom );
2018-03-18 04:28:54 +00:00
// set the custom field file
2020-03-28 13:34:14 +00:00
$this -> setCustomFieldTypeFile (
2020-11-26 17:33:39 +00:00
$data , $nameListCode ,
$nameSingleCode
2020-03-28 13:34:14 +00:00
);
2018-03-18 04:28:54 +00:00
}
2019-07-19 02:17:15 +00:00
else
{
// now add to the field set
2020-03-28 13:34:14 +00:00
$field .= $this -> setField (
'plain' , $r_fieldValues , $r_name ,
$r_typeName , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode ,
2020-03-28 13:34:14 +00:00
$placeholders , $r_optionArray , null ,
$r_taber
);
2019-07-19 02:17:15 +00:00
}
2018-03-18 04:28:54 +00:00
}
}
}
}
2018-05-26 10:03:08 +00:00
$field .= PHP_EOL . $this -> _t ( 4 ) . " </fieldset> " ;
$field .= PHP_EOL . $this -> _t ( 3 ) . " </fields> " ;
$field .= PHP_EOL . $this -> _t ( 2 ) . " </field> " ;
2018-03-18 04:28:54 +00:00
}
// set the subform fields (it is a repeatable without the modal)
elseif ( $typeName === 'subform' )
{
// now add to the field set
2020-03-28 13:34:14 +00:00
$field .= PHP_EOL . $this -> _t ( 2 ) . $taber . " <!-- "
. $this -> setLine ( __LINE__ ) . " " . ucfirst ( $name )
. " Field. Type: " . ComponentbuilderHelper :: safeString (
$typeName , 'F'
) . " . (joomla) --> " ;
$field .= PHP_EOL . $this -> _t ( 2 ) . $taber . " <field " ;
2018-03-18 04:28:54 +00:00
$fieldsSet = array ();
foreach ( $fieldAttributes as $property => $value )
{
if ( $property != 'fields' )
{
2020-03-28 13:34:14 +00:00
$field .= PHP_EOL . $this -> _t ( 3 ) . $taber . $property
. '="' . $value . '"' ;
2018-03-18 04:28:54 +00:00
}
}
$field .= " > " ;
2020-03-28 13:34:14 +00:00
$field .= PHP_EOL . $this -> _t ( 3 ) . $taber
. '<form hidden="true" name="list_'
. $fieldAttributes [ 'name' ] . '_modal" repeat="true">' ;
2018-03-18 04:28:54 +00:00
if ( strpos ( $fieldAttributes [ 'fields' ], ',' ) !== false )
{
// mulitpal fields
2020-03-28 13:34:14 +00:00
$fieldsSets = ( array ) explode (
',' , $fieldAttributes [ 'fields' ]
);
2018-03-18 04:28:54 +00:00
}
elseif ( is_numeric ( $fieldAttributes [ 'fields' ]))
{
// single field
$fieldsSets [] = ( int ) $fieldAttributes [ 'fields' ];
}
// only continue if we have a field set
if ( ComponentbuilderHelper :: checkArray ( $fieldsSets ))
{
2018-10-01 02:16:24 +00:00
// set the resolver
$_resolverKey = $fieldAttributes [ 'name' ];
// load the field data
2020-03-28 13:34:14 +00:00
$fieldsSets = array_map (
function ( $id ) use (
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode , $_resolverKey
2020-03-28 13:34:14 +00:00
) {
// start field
$field = array ();
$field [ 'field' ] = $id ;
// set the field details
$this -> setFieldDetails (
2020-11-26 17:33:39 +00:00
$field , $nameSingleCode , $nameListCode ,
2020-03-28 13:34:14 +00:00
$_resolverKey
);
// return field
return $field ;
}, array_values ( $fieldsSets )
);
2018-10-01 02:16:24 +00:00
// start the build
foreach ( $fieldsSets as $fieldData )
2018-03-18 04:28:54 +00:00
{
2018-10-01 02:16:24 +00:00
// if we have settings continue
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkObject (
$fieldData [ 'settings' ]
))
2018-03-18 04:28:54 +00:00
{
2020-03-28 13:34:14 +00:00
$r_name = $this -> getFieldName (
2020-11-26 17:33:39 +00:00
$fieldData , $nameListCode , $_resolverKey
2020-03-28 13:34:14 +00:00
);
$r_typeName = $this -> getFieldType ( $fieldData );
$r_multiple = false ;
2018-03-18 04:28:54 +00:00
$r_langLabel = '' ;
// add the tabs needed
2019-01-14 15:32:23 +00:00
$r_taber = $this -> _t ( 2 ) . $taber ;
2018-03-18 04:28:54 +00:00
// get field values
2020-03-28 13:34:14 +00:00
$r_fieldValues = $this -> setFieldAttributes (
$fieldData , $view , $r_name , $r_typeName ,
$r_multiple , $r_langLabel , $langView ,
2020-11-26 17:33:39 +00:00
$nameListCode , $nameSingleCode ,
2020-03-28 13:34:14 +00:00
$placeholders , true
);
2018-03-18 04:28:54 +00:00
// check if values were set
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkArray (
$r_fieldValues
))
2018-03-18 04:28:54 +00:00
{
//reset options array
$r_optionArray = array ();
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: fieldCheck (
$r_typeName , 'option'
))
2018-03-18 04:28:54 +00:00
{
// now add to the field set
2020-03-28 13:34:14 +00:00
$field .= $this -> setField (
'option' , $r_fieldValues , $r_name ,
$r_typeName , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode ,
2020-03-28 13:34:14 +00:00
$placeholders , $r_optionArray , null ,
$r_taber
);
2018-03-18 04:28:54 +00:00
}
2019-01-14 15:32:23 +00:00
elseif ( $r_typeName === 'subform' )
{
// set nested depth
if ( isset ( $fieldAttributes [ 'nested_depth' ]))
{
2020-03-28 13:34:14 +00:00
$r_fieldValues [ 'nested_depth' ]
= ++ $fieldAttributes [ 'nested_depth' ];
2019-01-14 15:32:23 +00:00
}
else
{
$r_fieldValues [ 'nested_depth' ] = 1 ;
}
// only continue if nest is bellow 20 (this should be a safe limit)
if ( $r_fieldValues [ 'nested_depth' ] <= 20 )
{
// now add to the field set
2020-03-28 13:34:14 +00:00
$field .= $this -> setField (
'special' , $r_fieldValues , $r_name ,
$r_typeName , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode ,
2020-03-28 13:34:14 +00:00
$placeholders , $r_optionArray , null ,
$r_taber
);
2019-01-14 15:32:23 +00:00
}
}
2020-03-28 13:34:14 +00:00
elseif ( isset ( $r_fieldValues [ 'custom' ])
&& ComponentbuilderHelper :: checkArray (
$r_fieldValues [ 'custom' ]
))
2018-03-18 04:28:54 +00:00
{
// add to custom
$custom = $r_fieldValues [ 'custom' ];
unset ( $r_fieldValues [ 'custom' ]);
// now add to the field set
2020-03-28 13:34:14 +00:00
$field .= $this -> setField (
'custom' , $r_fieldValues , $r_name ,
$r_typeName , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode ,
2020-03-28 13:34:14 +00:00
$placeholders , $r_optionArray , null ,
$r_taber
);
2018-03-18 04:28:54 +00:00
// set lang (just incase)
2020-03-28 13:34:14 +00:00
$r_listLangName = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$r_name , true
);
2018-03-18 04:28:54 +00:00
// add to lang array
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
$this -> lang , $r_listLangName ,
ComponentbuilderHelper :: safeString (
$r_name , 'W'
)
);
2018-03-18 04:28:54 +00:00
// if label was set use instead
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkString (
$r_langLabel
))
2018-03-18 04:28:54 +00:00
{
$r_listLangName = $r_langLabel ;
}
// set the custom array
2020-03-28 13:34:14 +00:00
$data = array ( 'type' => $r_typeName ,
'code' => $r_name ,
'lang' => $r_listLangName ,
'custom' => $custom );
2018-03-18 04:28:54 +00:00
// set the custom field file
2020-03-28 13:34:14 +00:00
$this -> setCustomFieldTypeFile (
2020-11-26 17:33:39 +00:00
$data , $nameListCode ,
$nameSingleCode
2020-03-28 13:34:14 +00:00
);
2018-03-18 04:28:54 +00:00
}
2019-07-19 02:17:15 +00:00
else
{
// now add to the field set
2020-03-28 13:34:14 +00:00
$field .= $this -> setField (
'plain' , $r_fieldValues , $r_name ,
$r_typeName , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode ,
2020-03-28 13:34:14 +00:00
$placeholders , $r_optionArray , null ,
$r_taber
);
2019-07-19 02:17:15 +00:00
}
2018-03-18 04:28:54 +00:00
}
}
}
}
2019-01-14 15:32:23 +00:00
$field .= PHP_EOL . $this -> _t ( 3 ) . $taber . " </form> " ;
$field .= PHP_EOL . $this -> _t ( 2 ) . $taber . " </field> " ;
2018-03-18 04:28:54 +00:00
}
}
elseif ( $setType === 'custom' )
{
// now add to the field set
2020-09-15 17:14:53 +00:00
$field .= PHP_EOL . $this -> _t ( 2 ) . $taber . " <!-- "
. $this -> setLine (
2020-03-28 13:34:14 +00:00
__LINE__
) . " " . ucfirst ( $name ) . " Field. Type: "
. ComponentbuilderHelper :: safeString ( $typeName , 'F' )
. " . (custom) --> " ;
2020-09-15 17:14:53 +00:00
$field .= PHP_EOL . $this -> _t ( 2 ) . $taber . " <field " ;
2020-07-07 15:13:04 +00:00
$optionSet = '' ;
2018-03-18 04:28:54 +00:00
foreach ( $fieldAttributes as $property => $value )
{
if ( $property != 'option' )
{
2020-03-28 13:34:14 +00:00
$field .= PHP_EOL . $this -> _t ( 2 ) . $taber . $this -> _t ( 1 )
. $property . '="' . $value . '"' ;
2018-03-18 04:28:54 +00:00
}
2017-02-01 13:17:04 +00:00
elseif ( $property === 'option' )
2016-03-01 18:44:13 +00:00
{
2020-07-07 15:13:04 +00:00
$optionSet = '' ;
2020-03-28 13:34:14 +00:00
if ( strtolower ( $typeName ) === 'groupedlist'
&& strpos (
$value , ','
) !== false
&& strpos ( $value , '@@' ) !== false )
2019-07-29 11:30:13 +00:00
{
// reset the group temp arrays
2020-03-28 13:34:14 +00:00
$groups_ = array ();
$grouped_ = array ( 'group' => array (),
'option' => array ());
$order_ = array ();
2019-07-29 11:30:13 +00:00
// mulitpal options
$options = explode ( ',' , $value );
foreach ( $options as $option )
{
if ( strpos ( $option , '@@' ) !== false )
{
// set the group label
$valueKeyArray = explode ( '@@' , $option );
if ( count (( array ) $valueKeyArray ) == 2 )
{
2020-03-28 13:34:14 +00:00
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$valueKeyArray [ 0 ], true
);
2019-07-29 11:30:13 +00:00
// add to lang array
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
$this -> lang , $langValue ,
$valueKeyArray [ 0 ]
);
2019-07-29 11:30:13 +00:00
// now add group label
2020-07-07 15:13:04 +00:00
$groups_ [ $valueKeyArray [ 1 ]] = PHP_EOL
. $this -> _t ( 1 ) . $taber . $this -> _t ( 2 )
. '<group label="' . $langValue . '">' ;
2019-07-29 11:30:13 +00:00
// set order
2020-03-28 13:34:14 +00:00
$order_ [ 'group' . $valueKeyArray [ 1 ]]
= $valueKeyArray [ 1 ];
2019-07-29 11:30:13 +00:00
}
}
elseif ( strpos ( $option , '|' ) !== false )
{
// has other value then text
$valueKeyArray = explode ( '|' , $option );
if ( count (( array ) $valueKeyArray ) == 3 )
{
2020-03-28 13:34:14 +00:00
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$valueKeyArray [ 1 ], true
);
2019-07-29 11:30:13 +00:00
// add to lang array
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
$this -> lang , $langValue ,
$valueKeyArray [ 1 ]
);
2019-07-29 11:30:13 +00:00
// now add to option set
2020-03-28 13:34:14 +00:00
$grouped_ [ 'group' ][ $valueKeyArray [ 2 ]][]
2020-07-07 15:13:04 +00:00
= PHP_EOL . $this -> _t ( 1 ) . $taber
. $this -> _t ( 3 ) . '<option value="'
. $valueKeyArray [ 0 ] . '">' . PHP_EOL
. $this -> _t ( 1 ) . $taber . $this -> _t ( 4 )
. $langValue . '</option>' ;
2020-03-28 13:34:14 +00:00
$optionArray [ $valueKeyArray [ 0 ]]
= $langValue ;
2019-07-29 11:30:13 +00:00
// set order
2020-03-28 13:34:14 +00:00
$order_ [ 'group' . $valueKeyArray [ 2 ]]
= $valueKeyArray [ 2 ];
2019-07-29 11:30:13 +00:00
}
else
{
2020-03-28 13:34:14 +00:00
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$valueKeyArray [ 1 ], true
);
2019-07-29 11:30:13 +00:00
// add to lang array
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
$this -> lang , $langValue ,
$valueKeyArray [ 1 ]
);
2019-07-29 11:30:13 +00:00
// now add to option set
2020-03-28 13:34:14 +00:00
$grouped_ [ 'option' ][ $valueKeyArray [ 0 ]]
2020-07-07 15:13:04 +00:00
= PHP_EOL . $this -> _t ( 1 ) . $taber
. $this -> _t ( 2 ) . '<option value="'
. $valueKeyArray [ 0 ] . '">' . PHP_EOL
. $this -> _t ( 1 ) . $taber . $this -> _t ( 3 )
. $langValue . '</option>' ;
2020-03-28 13:34:14 +00:00
$optionArray [ $valueKeyArray [ 0 ]]
= $langValue ;
2019-07-29 11:30:13 +00:00
// set order
2020-03-28 13:34:14 +00:00
$order_ [ 'option' . $valueKeyArray [ 0 ]]
= $valueKeyArray [ 0 ];
2019-07-29 11:30:13 +00:00
}
}
else
{
// text is also the value
2020-03-28 13:34:14 +00:00
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$option , true
);
2019-07-29 11:30:13 +00:00
// add to lang array
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
$this -> lang , $langValue , $option
);
2019-07-29 11:30:13 +00:00
// now add to option set
2020-07-07 15:13:04 +00:00
$grouped_ [ 'option' ][ $option ] = PHP_EOL
. $this -> _t ( 1 ) . $taber . $this -> _t ( 2 )
. '<option value="' . $option . '">'
. PHP_EOL . $this -> _t ( 1 ) . $taber
. $this -> _t ( 3 ) . $langValue . '</option>' ;
$optionArray [ $option ] = $langValue ;
2019-07-29 11:30:13 +00:00
// set order
$order_ [ 'option' . $option ] = $option ;
}
}
// now build the groups
foreach ( $order_ as $pointer_ => $_id )
{
// load the default key
$key_ = 'group' ;
if ( strpos ( $pointer_ , 'option' ) !== false )
{
// load the option field
$key_ = 'option' ;
}
// check if this is a group loader
2020-03-28 13:34:14 +00:00
if ( 'group' === $key_ && isset ( $groups_ [ $_id ])
&& isset ( $grouped_ [ $key_ ][ $_id ])
&& ComponentbuilderHelper :: checkArray (
$grouped_ [ $key_ ][ $_id ]
))
2019-07-29 11:30:13 +00:00
{
// set group label
2020-07-07 15:13:04 +00:00
$optionSet .= $groups_ [ $_id ];
2019-07-29 11:30:13 +00:00
foreach ( $grouped_ [ $key_ ][ $_id ] as $option_ )
{
2020-07-07 15:13:04 +00:00
$optionSet .= $option_ ;
2019-07-29 11:30:13 +00:00
}
unset ( $groups_ [ $_id ]);
unset ( $grouped_ [ $key_ ][ $_id ]);
2020-07-07 15:13:04 +00:00
// close the group
$optionSet .= PHP_EOL . $this -> _t ( 1 ) . $taber
. $this -> _t ( 2 ) . '</group>' ;
2019-07-29 11:30:13 +00:00
}
2020-03-28 13:34:14 +00:00
elseif ( isset ( $grouped_ [ $key_ ][ $_id ])
&& ComponentbuilderHelper :: checkString (
$grouped_ [ $key_ ][ $_id ]
))
2019-07-29 11:30:13 +00:00
{
2020-07-07 15:13:04 +00:00
$optionSet .= $grouped_ [ $key_ ][ $_id ];
2019-07-29 11:30:13 +00:00
}
}
}
elseif ( strpos ( $value , ',' ) !== false )
2016-03-01 18:44:13 +00:00
{
// mulitpal options
$options = explode ( ',' , $value );
foreach ( $options as $option )
{
if ( strpos ( $option , '|' ) !== false )
{
// has other value then text
list ( $v , $t ) = explode ( '|' , $option );
2020-03-28 13:34:14 +00:00
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$t , true
);
2016-03-01 18:44:13 +00:00
// add to lang array
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
$this -> lang , $langValue , $t
);
2019-07-29 11:30:13 +00:00
// now add to option set
2020-07-07 15:13:04 +00:00
$optionSet .= PHP_EOL . $this -> _t ( 1 )
. $taber . $this -> _t ( 2 ) . '<option value="'
. $v . '">' . PHP_EOL . $this -> _t ( 1 )
. $taber . $this -> _t ( 3 ) . $langValue
. '</option>' ;
2016-03-01 18:44:13 +00:00
$optionArray [ $v ] = $langValue ;
}
else
{
// text is also the value
2020-03-28 13:34:14 +00:00
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$option , true
);
2016-03-01 18:44:13 +00:00
// add to lang array
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
$this -> lang , $langValue , $option
);
2019-07-29 11:30:13 +00:00
// now add to option set
2020-07-07 15:13:04 +00:00
$optionSet .= PHP_EOL . $this -> _t ( 2 )
. $taber . $this -> _t ( 1 ) . '<option value="'
. $option . '">' . PHP_EOL . $this -> _t ( 2 )
. $taber . $this -> _t ( 2 ) . $langValue
. '</option>' ;
2016-03-01 18:44:13 +00:00
$optionArray [ $option ] = $langValue ;
}
}
}
else
{
// one option
if ( strpos ( $value , '|' ) !== false )
{
// has other value then text
list ( $v , $t ) = explode ( '|' , $value );
2020-03-28 13:34:14 +00:00
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$t , true
);
2016-03-01 18:44:13 +00:00
// add to lang array
2019-07-04 23:53:54 +00:00
$this -> setLangContent ( $this -> lang , $langValue , $t );
2019-07-29 11:30:13 +00:00
// now add to option set
2020-07-07 15:13:04 +00:00
$optionSet .= PHP_EOL . $this -> _t ( 2 ) . $taber
. $this -> _t ( 1 ) . '<option value="' . $v . '">'
. PHP_EOL . $this -> _t ( 2 ) . $taber . $this -> _t ( 2 )
. $langValue . '</option>' ;
2016-03-01 18:44:13 +00:00
$optionArray [ $v ] = $langValue ;
}
else
{
// text is also the value
2020-03-28 13:34:14 +00:00
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$value , true
);
2016-03-01 18:44:13 +00:00
// add to lang array
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
$this -> lang , $langValue , $value
);
2019-07-29 11:30:13 +00:00
// now add to option set
2020-07-07 15:13:04 +00:00
$optionSet .= PHP_EOL . $this -> _t ( 2 )
. $taber . $this -> _t ( 1 ) . '<option value="'
. $value . '">' . PHP_EOL . $this -> _t ( 2 )
. $taber . $this -> _t ( 2 ) . $langValue
. '</option>' ;
2016-03-01 18:44:13 +00:00
$optionArray [ $value ] = $langValue ;
}
}
}
}
2020-07-07 15:13:04 +00:00
// if options were found
if ( ComponentbuilderHelper :: checkString ( $optionSet ))
{
$field .= '>' ;
$field .= PHP_EOL . $this -> _t ( 3 ) . $taber . " <!-- "
. $this -> setLine ( __LINE__ ) . " Option Set. --> " ;
$field .= $optionSet ;
$field .= PHP_EOL . $this -> _t ( 2 ) . $taber . " </field> " ;
}
2019-03-05 07:51:52 +00:00
// if no options found and must have a list of options
2020-07-07 15:13:04 +00:00
elseif ( ComponentbuilderHelper :: fieldCheck ( $typeName , 'list' ))
2016-03-01 18:44:13 +00:00
{
2020-07-07 15:13:04 +00:00
$optionArray = false ;
$field .= PHP_EOL . $this -> _t ( 2 ) . $taber . " /> " ;
$field .= PHP_EOL . $this -> _t ( 2 ) . $taber . " <!-- "
. $this -> setLine ( __LINE__ )
. " No Manual Options Were Added In Field Settings. --> "
. PHP_EOL ;
2016-03-01 18:44:13 +00:00
}
2020-07-07 15:13:04 +00:00
else
2016-03-01 18:44:13 +00:00
{
2020-07-07 15:13:04 +00:00
$optionArray = false ;
$field .= PHP_EOL . $this -> _t ( 2 ) . $taber . " /> " ;
}
// incase the field is in the config and has not been set
2020-11-26 17:33:39 +00:00
if ( 'config' === $nameSingleCode && 'configs' === $nameListCode
|| ( strpos ( $nameSingleCode , 'P|uG!n' ) !== false
2020-07-07 15:13:04 +00:00
|| strpos (
2020-11-26 17:33:39 +00:00
$nameSingleCode , 'M0dU|3'
2020-07-07 15:13:04 +00:00
) !== false ))
{
// set lang (just incase)
$listLangName = $langView . '_'
. ComponentbuilderHelper :: safeString ( $name , 'U' );
// set the custom array
$data = array ( 'type' => $typeName , 'code' => $name ,
'lang' => $listLangName , 'custom' => $custom );
// set the custom field file
$this -> setCustomFieldTypeFile (
2020-11-26 17:33:39 +00:00
$data , $nameListCode , $nameSingleCode
2020-07-07 15:13:04 +00:00
);
2016-03-01 18:44:13 +00:00
}
}
2020-07-07 15:13:04 +00:00
// return field
return $field ;
}
/**
* set a field with simpleXMLElement class
*
2020-11-26 17:33:39 +00:00
* @ param string $setType The set of fields type
* @ param array $fieldAttributes The field values
* @ param string $name The field name
* @ param string $typeName The field type
* @ param string $langView The language string of the view
* @ param string $nameSingleCode The single view name
* @ param string $nameListCode The list view name
* @ param array $placeholders The place holder and replace values
* @ param string $optionArray The option bucket array used to set the field options if needed .
* @ param array $custom Used when field is from config
2020-07-07 15:13:04 +00:00
*
* @ return SimpleXMLElement The field in xml
*
*/
protected function simpleXMLSetField ( $setType , & $fieldAttributes , & $name ,
2020-11-26 17:33:39 +00:00
& $typeName , & $langView , & $nameSingleCode , & $nameListCode ,
2020-07-07 15:13:04 +00:00
$placeholders , & $optionArray , $custom = null
) {
$field = new stdClass ();
if ( $setType === 'option' )
2016-03-01 18:44:13 +00:00
{
// now add to the field set
2017-12-04 14:56:18 +00:00
$field -> fieldXML = new SimpleXMLElement ( '<field/>' );
2020-03-28 13:34:14 +00:00
$field -> comment = $this -> setLine ( __LINE__ ) . " " . ucfirst ( $name )
. " Field. Type: " . ComponentbuilderHelper :: safeString (
$typeName , 'F'
2020-07-07 15:13:04 +00:00
) . " . (joomla) " ;
2017-12-03 17:08:01 +00:00
2016-03-01 18:44:13 +00:00
foreach ( $fieldAttributes as $property => $value )
{
if ( $property != 'option' )
{
2017-12-04 14:56:18 +00:00
$field -> fieldXML -> addAttribute ( $property , $value );
2016-03-01 18:44:13 +00:00
}
2020-07-07 15:13:04 +00:00
elseif ( $property === 'option' )
2016-03-01 18:44:13 +00:00
{
2020-07-07 15:13:04 +00:00
ComponentbuilderHelper :: xmlComment (
$field -> fieldXML ,
$this -> setLine ( __LINE__ ) . " Option Set. "
2020-03-28 13:34:14 +00:00
);
2020-07-07 15:13:04 +00:00
if ( strtolower ( $typeName ) === 'groupedlist'
&& strpos (
$value , ','
) !== false
&& strpos ( $value , '@@' ) !== false )
2016-03-01 18:44:13 +00:00
{
2020-07-07 15:13:04 +00:00
// reset the group temp arrays
$groups_ = array ();
$grouped_ = array ( 'group' => array (),
'option' => array ());
$order_ = array ();
// mulitpal options
$options = explode ( ',' , $value );
foreach ( $options as $option )
2016-03-01 18:44:13 +00:00
{
2020-07-07 15:13:04 +00:00
if ( strpos ( $option , '@@' ) !== false )
2016-03-01 18:44:13 +00:00
{
2020-07-07 15:13:04 +00:00
// set the group label
$valueKeyArray = explode ( '@@' , $option );
if ( count (( array ) $valueKeyArray ) == 2 )
2016-03-01 18:44:13 +00:00
{
2020-07-07 15:13:04 +00:00
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$valueKeyArray [ 0 ], true
);
// add to lang array
$this -> setLangContent (
$this -> lang , $langValue ,
$valueKeyArray [ 0 ]
2020-03-28 13:34:14 +00:00
);
2020-07-07 15:13:04 +00:00
// now add group label
$groups_ [ $valueKeyArray [ 1 ]] = $langValue ;
// set order
$order_ [ 'group' . $valueKeyArray [ 1 ]]
= $valueKeyArray [ 1 ];
2016-03-01 18:44:13 +00:00
}
2020-07-07 15:13:04 +00:00
}
elseif ( strpos ( $option , '|' ) !== false )
{
// has other value then text
$valueKeyArray = explode ( '|' , $option );
if ( count (( array ) $valueKeyArray ) == 3 )
2016-03-01 18:44:13 +00:00
{
2020-07-07 15:13:04 +00:00
$langValue = $langView . '_'
2020-03-28 13:34:14 +00:00
. ComponentbuilderHelper :: safeFieldName (
2020-07-07 15:13:04 +00:00
$valueKeyArray [ 1 ], true
2020-03-28 13:34:14 +00:00
);
2016-03-01 18:44:13 +00:00
// add to lang array
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
2020-07-07 15:13:04 +00:00
$this -> lang , $langValue ,
$valueKeyArray [ 1 ]
2020-03-28 13:34:14 +00:00
);
2020-07-07 15:13:04 +00:00
// now add to option set
$grouped_ [ 'group' ][ $valueKeyArray [ 2 ]][]
= array ( 'value' => $valueKeyArray [ 0 ],
'text' => $langValue );
$optionArray [ $valueKeyArray [ 0 ]]
= $langValue ;
// set order
$order_ [ 'group' . $valueKeyArray [ 2 ]]
= $valueKeyArray [ 2 ];
2016-03-01 18:44:13 +00:00
}
2019-07-28 21:48:42 +00:00
else
{
2020-07-07 15:13:04 +00:00
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$valueKeyArray [ 1 ], true
);
// add to lang array
$this -> setLangContent (
$this -> lang , $langValue ,
$valueKeyArray [ 1 ]
2020-03-28 13:34:14 +00:00
);
2020-07-07 15:13:04 +00:00
// now add to option set
$grouped_ [ 'option' ][ $valueKeyArray [ 0 ]]
= array ( 'value' => $valueKeyArray [ 0 ],
'text' => $langValue );
$optionArray [ $valueKeyArray [ 0 ]]
= $langValue ;
// set order
$order_ [ 'option' . $valueKeyArray [ 0 ]]
= $valueKeyArray [ 0 ];
2019-07-28 21:48:42 +00:00
}
2016-03-01 18:44:13 +00:00
}
2020-07-07 15:13:04 +00:00
else
{
// text is also the value
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$option , true
);
// add to lang array
$this -> setLangContent (
$this -> lang , $langValue , $option
);
// now add to option set
$grouped_ [ 'option' ][ $option ]
= array ( 'value' => $option ,
'text' => $langValue );
$optionArray [ $option ] = $langValue ;
// set order
$order_ [ 'option' . $option ] = $option ;
}
2016-03-01 18:44:13 +00:00
}
2020-07-07 15:13:04 +00:00
// now build the groups
foreach ( $order_ as $pointer_ => $_id )
{
// load the default key
$key_ = 'group' ;
if ( strpos ( $pointer_ , 'option' ) !== false )
{
// load the option field
$key_ = 'option' ;
}
// check if this is a group loader
if ( 'group' === $key_ && isset ( $groups_ [ $_id ])
&& isset ( $grouped_ [ $key_ ][ $_id ])
&& ComponentbuilderHelper :: checkArray (
$grouped_ [ $key_ ][ $_id ]
))
{
// set group label
$groupXML = $field -> fieldXML -> addChild ( 'group' );
$groupXML -> addAttribute (
'label' , $groups_ [ $_id ]
);
2017-12-03 17:08:01 +00:00
2020-07-07 15:13:04 +00:00
foreach ( $grouped_ [ $key_ ][ $_id ] as $option_ )
{
$groupOptionXML = $groupXML -> addChild (
'option'
);
$groupOptionXML -> addAttribute (
'value' , $option_ [ 'value' ]
);
$groupOptionXML [] = $option_ [ 'text' ];
}
unset ( $groups_ [ $_id ]);
unset ( $grouped_ [ $key_ ][ $_id ]);
}
elseif ( isset ( $grouped_ [ $key_ ][ $_id ])
&& ComponentbuilderHelper :: checkString (
$grouped_ [ $key_ ][ $_id ]
))
{
$optionXML = $field -> fieldXML -> addChild (
'option'
);
$optionXML -> addAttribute (
'value' , $grouped_ [ $key_ ][ $_id ][ 'value' ]
);
$optionXML [] = $grouped_ [ $key_ ][ $_id ][ 'text' ];
}
}
}
elseif ( strpos ( $value , ',' ) !== false )
2017-06-18 07:37:48 +00:00
{
2020-07-07 15:13:04 +00:00
// mulitpal options
$options = explode ( ',' , $value );
foreach ( $options as $option )
{
$optionXML = $field -> fieldXML -> addChild ( 'option' );
if ( strpos ( $option , '|' ) !== false )
{
// has other value then text
list ( $v , $t ) = explode ( '|' , $option );
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$t , true
);
// add to lang array
$this -> setLangContent (
$this -> lang , $langValue , $t
);
// now add to option set
$optionXML -> addAttribute ( 'value' , $v );
$optionArray [ $v ] = $langValue ;
}
else
{
// text is also the value
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$option , true
);
// add to lang array
$this -> setLangContent (
$this -> lang , $langValue , $option
);
// now add to option set
$optionXML -> addAttribute ( 'value' , $option );
$optionArray [ $option ] = $langValue ;
}
$optionXML [] = $langValue ;
}
2017-12-03 18:09:04 +00:00
}
2020-07-07 15:13:04 +00:00
else
2017-12-03 18:09:04 +00:00
{
2020-07-07 15:13:04 +00:00
// one option
$optionXML = $field -> fieldXML -> addChild ( 'option' );
if ( strpos ( $value , '|' ) !== false )
{
// has other value then text
list ( $v , $t ) = explode ( '|' , $value );
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$t , true
);
// add to lang array
$this -> setLangContent ( $this -> lang , $langValue , $t );
// now add to option set
$optionXML -> addAttribute ( 'value' , $v );
$optionArray [ $v ] = $langValue ;
}
else
{
// text is also the value
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$value , true
);
// add to lang array
$this -> setLangContent (
$this -> lang , $langValue , $value
);
// now add to option set
$optionXML -> addAttribute ( 'value' , $value );
$optionArray [ $value ] = $langValue ;
}
$optionXML [] = $langValue ;
}
}
}
// if no options found and must have a list of options
if ( ! $field -> fieldXML -> count ()
&& ComponentbuilderHelper :: fieldCheck ( $typeName , 'list' ))
{
ComponentbuilderHelper :: xmlComment (
$field -> fieldXML , $this -> setLine ( __LINE__ )
. " No Manual Options Were Added In Field Settings. "
);
}
}
elseif ( $setType === 'plain' )
{
// now add to the field set
$field -> fieldXML = new SimpleXMLElement ( '<field/>' );
$field -> comment = $this -> setLine ( __LINE__ ) . " " . ucfirst ( $name )
. " Field. Type: " . ComponentbuilderHelper :: safeString (
$typeName , 'F'
) . " . (joomla) " ;
foreach ( $fieldAttributes as $property => $value )
{
if ( $property != 'option' )
{
$field -> fieldXML -> addAttribute ( $property , $value );
}
}
}
elseif ( $setType === 'spacer' )
{
// now add to the field set
$field -> fieldXML = new SimpleXMLElement ( '<field/>' );
$field -> comment = $this -> setLine ( __LINE__ ) . " " . ucfirst ( $name )
. " Field. Type: " . ComponentbuilderHelper :: safeString (
$typeName , 'F'
) . " . A None Database Field. (joomla) " ;
foreach ( $fieldAttributes as $property => $value )
{
if ( $property != 'option' )
{
$field -> fieldXML -> addAttribute ( $property , $value );
}
}
}
elseif ( $setType === 'special' )
{
// set the repeatable field
if ( $typeName === 'repeatable' )
{
// now add to the field set
$field -> fieldXML = new SimpleXMLElement ( '<field/>' );
$field -> comment = $this -> setLine ( __LINE__ ) . " " . ucfirst (
$name
) . " Field. Type: " . ComponentbuilderHelper :: safeString (
$typeName , 'F'
) . " . (depreciated) " ;
foreach ( $fieldAttributes as $property => $value )
{
if ( $property != 'fields' )
{
$field -> fieldXML -> addAttribute ( $property , $value );
}
}
$fieldsXML = $field -> fieldXML -> addChild ( 'fields' );
$fieldsXML -> addAttribute (
'name' , $fieldAttributes [ 'name' ] . '_fields'
);
$fieldsXML -> addAttribute ( 'label' , '' );
$fieldSetXML = $fieldsXML -> addChild ( 'fieldset' );
$fieldSetXML -> addAttribute ( 'hidden' , 'true' );
$fieldSetXML -> addAttribute (
'name' , $fieldAttributes [ 'name' ] . '_modal'
);
$fieldSetXML -> addAttribute ( 'repeat' , 'true' );
if ( strpos ( $fieldAttributes [ 'fields' ], ',' ) !== false )
{
// mulitpal fields
$fieldsSets = ( array ) explode (
',' , $fieldAttributes [ 'fields' ]
);
}
elseif ( is_numeric ( $fieldAttributes [ 'fields' ]))
{
// single field
$fieldsSets [] = ( int ) $fieldAttributes [ 'fields' ];
}
// only continue if we have a field set
if ( ComponentbuilderHelper :: checkArray ( $fieldsSets ))
{
// set the resolver
$_resolverKey = $fieldAttributes [ 'name' ];
// load the field data
$fieldsSets = array_map (
function ( $id ) use (
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode , $_resolverKey
2020-07-07 15:13:04 +00:00
) {
// start field
$field = array ();
$field [ 'field' ] = $id ;
// set the field details
$this -> setFieldDetails (
2020-11-26 17:33:39 +00:00
$field , $nameSingleCode , $nameListCode ,
2020-07-07 15:13:04 +00:00
$_resolverKey
);
// return field
return $field ;
}, array_values ( $fieldsSets )
);
// start the build
foreach ( $fieldsSets as $fieldData )
{
// if we have settings continue
if ( ComponentbuilderHelper :: checkObject (
$fieldData [ 'settings' ]
))
{
$r_name = $this -> getFieldName (
2020-11-26 17:33:39 +00:00
$fieldData , $nameListCode , $_resolverKey
2020-07-07 15:13:04 +00:00
);
$r_typeName = $this -> getFieldType ( $fieldData );
$r_multiple = false ;
$r_langLabel = '' ;
// get field values
$r_fieldValues = $this -> setFieldAttributes (
$fieldData , $view , $r_name , $r_typeName ,
$r_multiple , $r_langLabel , $langView ,
2020-11-26 17:33:39 +00:00
$nameListCode , $nameSingleCode ,
2020-07-07 15:13:04 +00:00
$placeholders , true
);
// check if values were set
if ( ComponentbuilderHelper :: checkArray (
$r_fieldValues
))
{
//reset options array
$r_optionArray = array ();
if ( ComponentbuilderHelper :: fieldCheck (
$r_typeName , 'option'
))
{
// now add to the field set
ComponentbuilderHelper :: xmlAppend (
$fieldSetXML , $this -> setField (
'option' , $r_fieldValues , $r_name ,
$r_typeName , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode ,
2020-07-07 15:13:04 +00:00
$placeholders , $r_optionArray
)
);
}
elseif ( isset ( $r_fieldValues [ 'custom' ])
&& ComponentbuilderHelper :: checkArray (
$r_fieldValues [ 'custom' ]
))
{
// add to custom
$custom = $r_fieldValues [ 'custom' ];
unset ( $r_fieldValues [ 'custom' ]);
// now add to the field set
ComponentbuilderHelper :: xmlAppend (
$fieldSetXML , $this -> setField (
'custom' , $r_fieldValues , $r_name ,
$r_typeName , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode ,
2020-07-07 15:13:04 +00:00
$placeholders , $r_optionArray
)
);
// set lang (just incase)
$r_listLangName = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$r_name , true
);
// add to lang array
$this -> setLangContent (
$this -> lang , $r_listLangName ,
ComponentbuilderHelper :: safeString (
$r_name , 'W'
)
);
// if label was set use instead
if ( ComponentbuilderHelper :: checkString (
$r_langLabel
))
{
$r_listLangName = $r_langLabel ;
}
// set the custom array
$data = array ( 'type' => $r_typeName ,
'code' => $r_name ,
'lang' => $r_listLangName ,
'custom' => $custom );
// set the custom field file
$this -> setCustomFieldTypeFile (
2020-11-26 17:33:39 +00:00
$data , $nameListCode ,
$nameSingleCode
2020-07-07 15:13:04 +00:00
);
}
else
{
// now add to the field set
ComponentbuilderHelper :: xmlAppend (
$fieldSetXML , $this -> setField (
'plain' , $r_fieldValues , $r_name ,
$r_typeName , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode ,
2020-07-07 15:13:04 +00:00
$placeholders , $r_optionArray
)
);
}
}
}
}
}
}
// set the subform fields (it is a repeatable without the modal)
elseif ( $typeName === 'subform' )
{
// now add to the field set
$field -> fieldXML = new SimpleXMLElement ( '<field/>' );
$field -> comment = $this -> setLine ( __LINE__ ) . " " . ucfirst (
$name
) . " Field. Type: " . ComponentbuilderHelper :: safeString (
$typeName , 'F'
) . " . (joomla) " ;
// add all properties
foreach ( $fieldAttributes as $property => $value )
{
if ( $property != 'fields' && $property != 'formsource' )
{
$field -> fieldXML -> addAttribute ( $property , $value );
}
}
// if we detect formsource we do not add the form
if ( isset ( $fieldAttributes [ 'formsource' ])
&& ComponentbuilderHelper :: checkString (
$fieldAttributes [ 'formsource' ]
))
{
$field -> fieldXML -> addAttribute (
'formsource' , $fieldAttributes [ 'formsource' ]
);
}
// add the form
else
{
$form = $field -> fieldXML -> addChild ( 'form' );
$attributes = array (
'hidden' => 'true' ,
'name' => 'list_' . $fieldAttributes [ 'name' ]
. '_modal' ,
'repeat' => 'true'
);
ComponentbuilderHelper :: xmlAddAttributes (
$form , $attributes
);
if ( strpos ( $fieldAttributes [ 'fields' ], ',' ) !== false )
{
// multiple fields
$fieldsSets = ( array ) explode (
',' , $fieldAttributes [ 'fields' ]
);
}
elseif ( is_numeric ( $fieldAttributes [ 'fields' ]))
{
// single field
$fieldsSets [] = ( int ) $fieldAttributes [ 'fields' ];
}
// only continue if we have a field set
if ( ComponentbuilderHelper :: checkArray ( $fieldsSets ))
{
// set the resolver
$_resolverKey = $fieldAttributes [ 'name' ];
// load the field data
$fieldsSets = array_map (
function ( $id ) use (
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode ,
2020-07-07 15:13:04 +00:00
$_resolverKey
) {
// start field
$field = array ();
$field [ 'field' ] = $id ;
// set the field details
$this -> setFieldDetails (
2020-11-26 17:33:39 +00:00
$field , $nameSingleCode , $nameListCode ,
2020-07-07 15:13:04 +00:00
$_resolverKey
);
// return field
return $field ;
}, array_values ( $fieldsSets )
);
// start the build
foreach ( $fieldsSets as $fieldData )
{
// if we have settings continue
if ( ComponentbuilderHelper :: checkObject (
$fieldData [ 'settings' ]
))
{
$r_name = $this -> getFieldName (
2020-11-26 17:33:39 +00:00
$fieldData , $nameListCode , $_resolverKey
2020-07-07 15:13:04 +00:00
);
$r_typeName = $this -> getFieldType ( $fieldData );
$r_multiple = false ;
$r_langLabel = '' ;
// get field values
$r_fieldValues = $this -> setFieldAttributes (
$fieldData , $view , $r_name , $r_typeName ,
$r_multiple , $r_langLabel , $langView ,
2020-11-26 17:33:39 +00:00
$nameListCode , $nameSingleCode ,
2020-07-07 15:13:04 +00:00
$placeholders , true
);
// check if values were set
if ( ComponentbuilderHelper :: checkArray (
$r_fieldValues
))
{
//reset options array
$r_optionArray = array ();
if ( ComponentbuilderHelper :: fieldCheck (
$r_typeName , 'option'
))
{
// now add to the field set
ComponentbuilderHelper :: xmlAppend (
$form , $this -> setField (
'option' , $r_fieldValues , $r_name ,
$r_typeName , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode ,
2020-07-07 15:13:04 +00:00
$placeholders , $r_optionArray
)
);
}
elseif ( $r_typeName === 'subform' )
{
// set nested depth
if ( isset ( $fieldAttributes [ 'nested_depth' ]))
{
$r_fieldValues [ 'nested_depth' ]
= ++ $fieldAttributes [ 'nested_depth' ];
}
else
{
$r_fieldValues [ 'nested_depth' ] = 1 ;
}
// only continue if nest is bellow 20 (this should be a safe limit)
if ( $r_fieldValues [ 'nested_depth' ]
<= 20 )
{
// now add to the field set
ComponentbuilderHelper :: xmlAppend (
$form , $this -> setField (
'special' , $r_fieldValues ,
$r_name , $r_typeName , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode ,
$nameListCode , $placeholders ,
2020-07-07 15:13:04 +00:00
$r_optionArray
)
);
}
}
elseif ( isset ( $r_fieldValues [ 'custom' ])
&& ComponentbuilderHelper :: checkArray (
$r_fieldValues [ 'custom' ]
))
{
// add to custom
$custom = $r_fieldValues [ 'custom' ];
unset ( $r_fieldValues [ 'custom' ]);
// now add to the field set
ComponentbuilderHelper :: xmlAppend (
$form , $this -> setField (
'custom' , $r_fieldValues , $r_name ,
$r_typeName , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode ,
2020-07-07 15:13:04 +00:00
$placeholders , $r_optionArray
)
);
// set lang (just incase)
$r_listLangName = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$r_name , true
);
// add to lang array
$this -> setLangContent (
$this -> lang , $r_listLangName ,
ComponentbuilderHelper :: safeString (
$r_name , 'W'
)
);
// if label was set use instead
if ( ComponentbuilderHelper :: checkString (
$r_langLabel
))
{
$r_listLangName = $r_langLabel ;
}
// set the custom array
$data = array ( 'type' => $r_typeName ,
'code' => $r_name ,
'lang' => $r_listLangName ,
'custom' => $custom );
// set the custom field file
$this -> setCustomFieldTypeFile (
2020-11-26 17:33:39 +00:00
$data , $nameListCode ,
$nameSingleCode
2020-07-07 15:13:04 +00:00
);
}
else
{
// now add to the field set
ComponentbuilderHelper :: xmlAppend (
$form , $this -> setField (
'plain' , $r_fieldValues , $r_name ,
$r_typeName , $langView ,
2020-11-26 17:33:39 +00:00
$nameSingleCode , $nameListCode ,
2020-07-07 15:13:04 +00:00
$placeholders , $r_optionArray
)
);
}
}
}
}
}
}
}
}
elseif ( $setType === 'custom' )
{
// now add to the field set
$field -> fieldXML = new SimpleXMLElement ( '<field/>' );
$field -> comment = $this -> setLine ( __LINE__ ) . " " . ucfirst ( $name )
. " Field. Type: " . ComponentbuilderHelper :: safeString (
$typeName , 'F'
) . " . (custom) " ;
foreach ( $fieldAttributes as $property => $value )
{
if ( $property != 'option' )
{
$field -> fieldXML -> addAttribute ( $property , $value );
}
elseif ( $property === 'option' )
{
ComponentbuilderHelper :: xmlComment (
$field -> fieldXML ,
$this -> setLine ( __LINE__ ) . " Option Set. "
);
if ( strtolower ( $typeName ) === 'groupedlist'
&& strpos (
$value , ','
) !== false
&& strpos ( $value , '@@' ) !== false )
{
// reset the group temp arrays
$groups_ = array ();
$grouped_ = array ( 'group' => array (),
'option' => array ());
$order_ = array ();
// mulitpal options
$options = explode ( ',' , $value );
foreach ( $options as $option )
{
if ( strpos ( $option , '@@' ) !== false )
{
// set the group label
$valueKeyArray = explode ( '@@' , $option );
if ( count (( array ) $valueKeyArray ) == 2 )
{
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$valueKeyArray [ 0 ], true
);
// add to lang array
$this -> setLangContent (
$this -> lang , $langValue ,
$valueKeyArray [ 0 ]
);
// now add group label
$groups_ [ $valueKeyArray [ 1 ]] = $langValue ;
// set order
$order_ [ 'group' . $valueKeyArray [ 1 ]]
= $valueKeyArray [ 1 ];
}
}
elseif ( strpos ( $option , '|' ) !== false )
{
// has other value then text
$valueKeyArray = explode ( '|' , $option );
if ( count (( array ) $valueKeyArray ) == 3 )
{
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$valueKeyArray [ 1 ], true
);
// add to lang array
$this -> setLangContent (
$this -> lang , $langValue ,
$valueKeyArray [ 1 ]
);
// now add to option set
$grouped_ [ 'group' ][ $valueKeyArray [ 2 ]][]
= array ( 'value' => $valueKeyArray [ 0 ],
'text' => $langValue );
$optionArray [ $valueKeyArray [ 0 ]]
= $langValue ;
// set order
$order_ [ 'group' . $valueKeyArray [ 2 ]]
= $valueKeyArray [ 2 ];
}
else
{
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$valueKeyArray [ 1 ], true
);
// add to lang array
$this -> setLangContent (
$this -> lang , $langValue ,
$valueKeyArray [ 1 ]
);
// now add to option set
$grouped_ [ 'option' ][ $valueKeyArray [ 0 ]]
= array ( 'value' => $valueKeyArray [ 0 ],
'text' => $langValue );
$optionArray [ $valueKeyArray [ 0 ]]
= $langValue ;
// set order
$order_ [ 'option' . $valueKeyArray [ 0 ]]
= $valueKeyArray [ 0 ];
}
}
else
{
// text is also the value
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$option , true
);
// add to lang array
$this -> setLangContent (
$this -> lang , $langValue , $option
);
// now add to option set
$grouped_ [ 'option' ][ $option ]
= array ( 'value' => $option ,
'text' => $langValue );
$optionArray [ $option ] = $langValue ;
// set order
$order_ [ 'option' . $option ] = $option ;
}
}
// now build the groups
foreach ( $order_ as $pointer_ => $_id )
{
// load the default key
$key_ = 'group' ;
if ( strpos ( $pointer_ , 'option' ) !== false )
{
// load the option field
$key_ = 'option' ;
}
// check if this is a group loader
if ( 'group' === $key_ && isset ( $groups_ [ $_id ])
&& isset ( $grouped_ [ $key_ ][ $_id ])
&& ComponentbuilderHelper :: checkArray (
$grouped_ [ $key_ ][ $_id ]
))
{
// set group label
$groupXML = $field -> fieldXML -> addChild ( 'group' );
$groupXML -> addAttribute (
'label' , $groups_ [ $_id ]
);
foreach ( $grouped_ [ $key_ ][ $_id ] as $option_ )
{
$groupOptionXML = $groupXML -> addChild (
'option'
);
$groupOptionXML -> addAttribute (
'value' , $option_ [ 'value' ]
);
$groupOptionXML [] = $option_ [ 'text' ];
}
unset ( $groups_ [ $_id ]);
unset ( $grouped_ [ $key_ ][ $_id ]);
}
elseif ( isset ( $grouped_ [ $key_ ][ $_id ])
&& ComponentbuilderHelper :: checkString (
$grouped_ [ $key_ ][ $_id ]
))
{
$optionXML = $field -> fieldXML -> addChild (
'option'
);
$optionXML -> addAttribute (
'value' , $grouped_ [ $key_ ][ $_id ][ 'value' ]
);
$optionXML [] = $grouped_ [ $key_ ][ $_id ][ 'text' ];
}
}
2017-12-03 18:09:04 +00:00
}
2020-07-07 15:13:04 +00:00
elseif ( strpos ( $value , ',' ) !== false )
2017-12-03 18:09:04 +00:00
{
2020-07-07 15:13:04 +00:00
// mulitpal options
$options = explode ( ',' , $value );
foreach ( $options as $option )
2017-06-18 07:37:48 +00:00
{
2020-07-07 15:13:04 +00:00
$optionXML = $field -> fieldXML -> addChild ( 'option' );
if ( strpos ( $option , '|' ) !== false )
2017-06-18 07:37:48 +00:00
{
2020-07-07 15:13:04 +00:00
// has other value then text
list ( $v , $t ) = explode ( '|' , $option );
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$t , true
);
// add to lang array
$this -> setLangContent (
$this -> lang , $langValue , $t
2020-03-28 13:34:14 +00:00
);
2020-07-07 15:13:04 +00:00
// now add to option set
$optionXML -> addAttribute ( 'value' , $v );
$optionArray [ $v ] = $langValue ;
}
else
{
// text is also the value
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$option , true
);
// add to lang array
$this -> setLangContent (
$this -> lang , $langValue , $option
2020-03-28 13:34:14 +00:00
);
2020-07-07 15:13:04 +00:00
// now add to option set
$optionXML -> addAttribute ( 'value' , $option );
$optionArray [ $option ] = $langValue ;
2017-06-18 07:37:48 +00:00
}
2020-07-07 15:13:04 +00:00
$optionXML [] = $langValue ;
2017-06-18 07:37:48 +00:00
}
}
2020-07-07 15:13:04 +00:00
else
{
// one option
$optionXML = $field -> fieldXML -> addChild ( 'option' );
if ( strpos ( $value , '|' ) !== false )
{
// has other value then text
list ( $v , $t ) = explode ( '|' , $value );
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$t , true
);
// add to lang array
$this -> setLangContent ( $this -> lang , $langValue , $t );
// now add to option set
$optionXML -> addAttribute ( 'value' , $v );
$optionArray [ $v ] = $langValue ;
}
else
{
// text is also the value
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$value , true
);
// add to lang array
$this -> setLangContent (
$this -> lang , $langValue , $value
);
// now add to option set
$optionXML -> addAttribute ( 'value' , $value );
$optionArray [ $value ] = $langValue ;
}
$optionXML [] = $langValue ;
}
2016-03-01 18:44:13 +00:00
}
}
2019-08-22 01:54:47 +00:00
// incase the field is in the config and has not been set (or is part of a plugin or module)
2020-11-26 17:33:39 +00:00
if (( 'config' === $nameSingleCode
&& 'configs' === $nameListCode )
|| ( strpos ( $nameSingleCode , 'P|uG!n' ) !== false
2020-03-28 13:34:14 +00:00
|| strpos (
2020-11-26 17:33:39 +00:00
$nameSingleCode , 'M0dU|3'
2020-03-28 13:34:14 +00:00
) !== false ))
2016-10-23 22:48:26 +00:00
{
// set lang (just incase)
2020-03-28 13:34:14 +00:00
$listLangName = $langView . '_'
. ComponentbuilderHelper :: safeString ( $name , 'U' );
2016-10-23 22:48:26 +00:00
// set the custom array
2020-03-28 13:34:14 +00:00
$data = array ( 'type' => $typeName , 'code' => $name ,
'lang' => $listLangName , 'custom' => $custom );
2016-10-23 22:48:26 +00:00
// set the custom field file
2020-03-28 13:34:14 +00:00
$this -> setCustomFieldTypeFile (
2020-11-26 17:33:39 +00:00
$data , $nameListCode , $nameSingleCode
2020-03-28 13:34:14 +00:00
);
2016-10-23 22:48:26 +00:00
}
2016-03-01 18:44:13 +00:00
}
2020-03-28 13:34:14 +00:00
2017-12-04 14:56:18 +00:00
return $field ;
2016-03-01 18:44:13 +00:00
}
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* set the layout builder
2017-12-03 17:08:01 +00:00
*
2020-11-26 17:33:39 +00:00
* @ param string $nameSingleCode The single edit view code name
* @ param string $tabName The tab code name
* @ param string $name The field code name
* @ param array $field The field details
2016-03-01 18:44:13 +00:00
*
* @ return void
2017-12-03 17:08:01 +00:00
*
2016-03-01 18:44:13 +00:00
*/
2020-11-26 17:33:39 +00:00
public function setLayoutBuilder ( & $nameSingleCode , & $tabName , & $name ,
2020-03-28 13:34:14 +00:00
& $field
) {
2017-08-12 11:47:25 +00:00
// first fix the zero order
// to insure it lands before all the other fields
// as zero is expected to behave
if ( $field [ 'order_edit' ] == 0 )
{
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> zeroOrderFix [ $nameSingleCode ]))
2017-08-12 11:47:25 +00:00
{
2020-11-26 17:33:39 +00:00
$this -> zeroOrderFix [ $nameSingleCode ] = array ();
2017-08-12 11:47:25 +00:00
}
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> zeroOrderFix [ $nameSingleCode ][( int ) $field [ 'tab' ]]))
2017-08-12 11:47:25 +00:00
{
2020-11-26 17:33:39 +00:00
$this -> zeroOrderFix [ $nameSingleCode ][( int ) $field [ 'tab' ]]
2020-03-28 13:34:14 +00:00
= - 999 ;
2017-08-12 11:47:25 +00:00
}
else
{
2020-11-26 17:33:39 +00:00
$this -> zeroOrderFix [ $nameSingleCode ][( int ) $field [ 'tab' ]] ++ ;
2017-08-12 11:47:25 +00:00
}
2020-03-28 13:34:14 +00:00
$field [ 'order_edit' ]
2020-11-26 17:33:39 +00:00
= $this -> zeroOrderFix [ $nameSingleCode ][( int ) $field [ 'tab' ]];
2017-08-12 11:47:25 +00:00
}
// now build the layout
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkString ( $tabName )
&& $tabName != 'publishing' )
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
$this -> tabCounter [ $nameSingleCode ][( int ) $field [ 'tab' ]]
2020-03-28 13:34:14 +00:00
= $tabName ;
2020-11-26 17:33:39 +00:00
if ( isset ( $this -> layoutBuilder [ $nameSingleCode ][ $tabName ][( int ) $field [ 'alignment' ]][( int ) $field [ 'order_edit' ]]))
2016-03-01 18:44:13 +00:00
{
2020-03-28 13:34:14 +00:00
$size = ( int ) count (
2020-11-26 17:33:39 +00:00
( array ) $this -> layoutBuilder [ $nameSingleCode ][ $tabName ][( int ) $field [ 'alignment' ]]
2020-03-28 13:34:14 +00:00
) + 1 ;
2020-11-26 17:33:39 +00:00
while ( isset ( $this -> layoutBuilder [ $nameSingleCode ][ $tabName ][( int ) $field [ 'alignment' ]][ $size ]))
2018-03-11 22:36:14 +00:00
{
$size ++ ;
}
2020-11-26 17:33:39 +00:00
$this -> layoutBuilder [ $nameSingleCode ][ $tabName ][( int ) $field [ 'alignment' ]][ $size ]
2020-03-28 13:34:14 +00:00
= $name ;
2016-03-01 18:44:13 +00:00
}
else
{
2020-11-26 17:33:39 +00:00
$this -> layoutBuilder [ $nameSingleCode ][ $tabName ][( int ) $field [ 'alignment' ]][( int ) $field [ 'order_edit' ]]
2020-03-28 13:34:14 +00:00
= $name ;
2016-03-01 18:44:13 +00:00
}
2019-07-01 16:10:28 +00:00
// check if default fields were over written
2016-06-02 16:18:49 +00:00
if ( in_array ( $name , $this -> defaultFields ))
{
// just to eliminate
2020-11-26 17:33:39 +00:00
$this -> movedPublishingFields [ $nameSingleCode ][ $name ] = $name ;
2016-06-02 16:18:49 +00:00
}
}
2017-12-03 17:08:01 +00:00
elseif ( $tabName === 'publishing' || $tabName === 'Publishing' )
2016-06-02 16:18:49 +00:00
{
if ( ! in_array ( $name , $this -> defaultFields ))
{
2020-11-26 17:33:39 +00:00
if ( isset ( $this -> newPublishingFields [ $nameSingleCode ][( int ) $field [ 'alignment' ]][( int ) $field [ 'order_edit' ]]))
2016-06-02 16:18:49 +00:00
{
2020-03-28 13:34:14 +00:00
$size = ( int ) count (
2020-11-26 17:33:39 +00:00
( array ) $this -> newPublishingFields [ $nameSingleCode ][( int ) $field [ 'alignment' ]]
2020-03-28 13:34:14 +00:00
) + 1 ;
2020-11-26 17:33:39 +00:00
while ( isset ( $this -> newPublishingFields [ $nameSingleCode ][( int ) $field [ 'alignment' ]][ $size ]))
2018-03-11 22:36:14 +00:00
{
$size ++ ;
}
2020-11-26 17:33:39 +00:00
$this -> newPublishingFields [ $nameSingleCode ][( int ) $field [ 'alignment' ]][ $size ]
2020-03-28 13:34:14 +00:00
= $name ;
2016-06-02 16:18:49 +00:00
}
else
{
2020-11-26 17:33:39 +00:00
$this -> newPublishingFields [ $nameSingleCode ][( int ) $field [ 'alignment' ]][( int ) $field [ 'order_edit' ]]
2020-03-28 13:34:14 +00:00
= $name ;
2016-06-02 16:18:49 +00:00
}
}
2016-03-01 18:44:13 +00:00
}
else
{
2020-11-26 17:33:39 +00:00
$this -> tabCounter [ $nameSingleCode ][ 1 ] = 'Details' ;
if ( isset ( $this -> layoutBuilder [ $nameSingleCode ][ 'Details' ][( int ) $field [ 'alignment' ]][( int ) $field [ 'order_edit' ]]))
2016-03-01 18:44:13 +00:00
{
2020-03-28 13:34:14 +00:00
$size = ( int ) count (
2020-11-26 17:33:39 +00:00
( array ) $this -> layoutBuilder [ $nameSingleCode ][ 'Details' ][( int ) $field [ 'alignment' ]]
2020-03-28 13:34:14 +00:00
) + 1 ;
2020-11-26 17:33:39 +00:00
while ( isset ( $this -> layoutBuilder [ $nameSingleCode ][ 'Details' ][( int ) $field [ 'alignment' ]][ $size ]))
2018-03-11 22:36:14 +00:00
{
$size ++ ;
}
2020-11-26 17:33:39 +00:00
$this -> layoutBuilder [ $nameSingleCode ][ 'Details' ][( int ) $field [ 'alignment' ]][ $size ]
2020-03-28 13:34:14 +00:00
= $name ;
2016-03-01 18:44:13 +00:00
}
else
{
2020-11-26 17:33:39 +00:00
$this -> layoutBuilder [ $nameSingleCode ][ 'Details' ][( int ) $field [ 'alignment' ]][( int ) $field [ 'order_edit' ]]
2020-03-28 13:34:14 +00:00
= $name ;
2016-03-01 18:44:13 +00:00
}
2019-07-01 16:10:28 +00:00
// check if default fields were over written
2016-06-02 16:18:49 +00:00
if ( in_array ( $name , $this -> defaultFields ))
{
// just to eliminate
2020-11-26 17:33:39 +00:00
$this -> movedPublishingFields [ $nameSingleCode ][ $name ] = $name ;
2016-06-02 16:18:49 +00:00
}
2016-03-01 18:44:13 +00:00
}
}
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* build the site field data needed
2017-12-03 17:08:01 +00:00
*
2020-03-28 13:34:14 +00:00
* @ param string $view The single edit view code name
* @ param string $field The field name
* @ param string $set The decoding set this field belongs to
* @ param string $type The field type
2016-03-01 18:44:13 +00:00
*
* @ return void
2017-12-03 17:08:01 +00:00
*
2016-03-01 18:44:13 +00:00
*/
2017-11-11 04:33:51 +00:00
public function buildSiteFieldData ( $view , $field , $set , $type )
2016-03-01 18:44:13 +00:00
{
2020-03-28 13:34:14 +00:00
$decode = array ( 'json' , 'base64' , 'basic_encryption' ,
'whmcs_encryption' , 'medium_encryption' ,
'expert_mode' );
2017-12-14 23:10:47 +00:00
$textareas = array ( 'textarea' , 'editor' );
2020-03-28 13:34:14 +00:00
if ( isset ( $this -> siteFields [ $view ][ $field ])
&& ComponentbuilderHelper :: checkArray (
$this -> siteFields [ $view ][ $field ]
))
2016-03-01 18:44:13 +00:00
{
2018-07-21 07:10:37 +00:00
foreach ( $this -> siteFields [ $view ][ $field ] as $codeString => $array )
2016-03-01 18:44:13 +00:00
{
2018-07-21 07:10:37 +00:00
// get the code array
$codeArray = explode ( '___' , $codeString );
// set the code
$code = trim ( $codeArray [ 0 ]);
2016-03-01 18:44:13 +00:00
// set the decoding methods
2017-12-14 23:10:47 +00:00
if ( in_array ( $set , $decode ))
2016-03-01 18:44:13 +00:00
{
2020-03-28 13:34:14 +00:00
if ( isset ( $this -> siteFieldData [ 'decode' ][ $array [ 'site' ]][ $code ][ $array [ 'as' ]][ $array [ 'key' ]])
&& isset ( $this -> siteFieldData [ 'decode' ][ $array [ 'site' ]][ $code ][ $array [ 'as' ]][ $array [ 'key' ]][ 'decode' ]))
2018-04-30 12:06:05 +00:00
{
2020-03-28 13:34:14 +00:00
if ( ! in_array (
$set ,
$this -> siteFieldData [ 'decode' ][ $array [ 'site' ]][ $code ][ $array [ 'as' ]][ $array [ 'key' ]][ 'decode' ]
))
2018-04-30 12:06:05 +00:00
{
2020-03-28 13:34:14 +00:00
$this -> siteFieldData [ 'decode' ][ $array [ 'site' ]][ $code ][ $array [ 'as' ]][ $array [ 'key' ]][ 'decode' ][]
= $set ;
2018-04-30 12:06:05 +00:00
}
}
else
{
2020-03-28 13:34:14 +00:00
$this -> siteFieldData [ 'decode' ][ $array [ 'site' ]][ $code ][ $array [ 'as' ]][ $array [ 'key' ]]
= array ( 'decode' => array ( $set ),
'type' => $type ,
'admin_view' => $view );
2018-04-30 12:06:05 +00:00
}
2016-03-01 18:44:13 +00:00
}
// set the uikit checker
2020-03-28 13:34:14 +00:00
if (( 2 == $this -> uikit || 1 == $this -> uikit )
&& in_array (
$type , $textareas
))
2016-03-01 18:44:13 +00:00
{
2020-03-28 13:34:14 +00:00
$this -> siteFieldData [ 'uikit' ][ $array [ 'site' ]][ $code ][ $array [ 'as' ]][ $array [ 'key' ]]
= $array ;
2016-03-01 18:44:13 +00:00
}
2017-12-10 19:17:26 +00:00
// set the textareas checker
if ( in_array ( $type , $textareas ))
{
2020-03-28 13:34:14 +00:00
$this -> siteFieldData [ 'textareas' ][ $array [ 'site' ]][ $code ][ $array [ 'as' ]][ $array [ 'key' ]]
= $array ;
2017-12-10 19:17:26 +00:00
}
2016-03-01 18:44:13 +00:00
}
}
}
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* set field attributes
2017-12-03 17:08:01 +00:00
*
2020-11-26 17:33:39 +00:00
* @ param array $field The field data
* @ param int $viewType The view type
* @ param string $name The field name
* @ param string $typeName The field type
* @ param boolean $multiple The switch to set multiple selection option
* @ param string $langLabel The language string for field label
* @ param string $langView The language string of the view
* @ param string $nameListCode The list view name
* @ param string $nameSingleCode The single view name
* @ param array $placeholders The place holder and replace values
* @ param boolean $repeatable The repeatable field switch
2016-03-01 18:44:13 +00:00
*
* @ return array The field attributes
2017-12-03 17:08:01 +00:00
*
2016-03-01 18:44:13 +00:00
*/
2020-03-28 13:34:14 +00:00
private function setFieldAttributes ( & $field , & $viewType , & $name , & $typeName ,
2020-11-26 17:33:39 +00:00
& $multiple , & $langLabel , $langView , $nameListCode , $nameSingleCode ,
2020-03-28 13:34:14 +00:00
$placeholders , $repeatable = false
) {
2017-12-04 14:56:18 +00:00
// reset array
2016-03-01 18:44:13 +00:00
$fieldAttributes = array ();
2020-03-28 13:34:14 +00:00
$setCustom = false ;
$setReadonly = false ;
2016-03-01 18:44:13 +00:00
// setup joomla default fields
2018-05-24 13:56:56 +00:00
if ( ! ComponentbuilderHelper :: fieldCheck ( $typeName ))
2016-03-01 18:44:13 +00:00
{
$fieldAttributes [ 'custom' ] = array ();
2018-09-24 14:37:51 +00:00
// is this an own custom field
2018-10-01 02:16:24 +00:00
if ( isset ( $field [ 'settings' ] -> own_custom ))
2018-09-24 14:37:51 +00:00
{
2020-03-28 13:34:14 +00:00
$fieldAttributes [ 'custom' ][ 'own_custom' ]
= $field [ 'settings' ] -> own_custom ;
2018-09-24 14:37:51 +00:00
}
2016-03-01 18:44:13 +00:00
$setCustom = true ;
}
// setup a default field
if ( ComponentbuilderHelper :: checkArray ( $field [ 'settings' ] -> properties ))
{
2018-10-29 16:38:00 +00:00
// we need a deeper php code search tracker
$phpTracker = array ();
2016-03-01 18:44:13 +00:00
foreach ( $field [ 'settings' ] -> properties as $property )
{
// reset
2020-03-28 13:34:14 +00:00
$xmlValue = '' ;
2016-03-01 18:44:13 +00:00
$langValue = '' ;
2017-02-01 13:17:04 +00:00
if ( $property [ 'name' ] === 'type' )
2016-03-01 18:44:13 +00:00
{
2018-03-11 02:44:43 +00:00
// get type name
$xmlValue = $typeName ;
2016-03-01 18:44:13 +00:00
// add to custom if it is custom
if ( $setCustom )
{
// set the type just to make sure.
$fieldAttributes [ 'custom' ][ 'type' ] = $typeName ;
}
}
2017-02-01 13:17:04 +00:00
elseif ( $property [ 'name' ] === 'name' )
2016-03-01 18:44:13 +00:00
{
2018-03-11 02:44:43 +00:00
// get the actual field name
$xmlValue = $this -> setPlaceholders ( $name , $placeholders );
2016-03-01 18:44:13 +00:00
}
2018-03-27 09:57:16 +00:00
elseif ( $property [ 'name' ] === 'validate' )
{
// check if we have validate (validation rule set)
2020-03-28 13:34:14 +00:00
$xmlValue = ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml , 'validate="' , '"'
);
2018-03-27 09:57:16 +00:00
if ( ComponentbuilderHelper :: checkString ( $xmlValue ))
{
2020-03-28 13:34:14 +00:00
$xmlValue = ComponentbuilderHelper :: safeString (
$xmlValue
);
2018-03-27 09:57:16 +00:00
}
}
2020-03-28 13:34:14 +00:00
elseif ( $property [ 'name' ] === 'extension'
|| $property [ 'name' ] === 'directory'
|| $property [ 'name' ] === 'formsource' )
2016-03-01 18:44:13 +00:00
{
2018-09-25 20:51:14 +00:00
// get value & replace the placeholders
2020-03-28 13:34:14 +00:00
$xmlValue = $this -> setPlaceholders (
ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml , $property [ 'name' ] . '="' ,
'"'
), $placeholders
);
2016-03-01 18:44:13 +00:00
}
2018-09-24 14:37:51 +00:00
// catch all PHP here
2020-03-28 13:34:14 +00:00
elseif ( strpos ( $property [ 'name' ], 'type_php' ) !== false
&& $setCustom )
2016-03-01 18:44:13 +00:00
{
// set the line number
2020-03-28 13:34:14 +00:00
$phpLine = ( int ) preg_replace (
'/[^0-9]/' , '' , $property [ 'name' ]
);
2018-09-24 14:37:51 +00:00
// set the type key
2020-03-28 13:34:14 +00:00
$phpKey = ( string ) trim (
str_replace (
'type_' , '' ,
preg_replace ( '/[0-9]+/' , '' , $property [ 'name' ])
), '_'
);
2016-03-01 18:44:13 +00:00
// load the php for the custom field file
2020-03-28 13:34:14 +00:00
$fieldAttributes [ 'custom' ][ $phpKey ][ $phpLine ]
= $this -> setDynamicValues (
ComponentbuilderHelper :: openValidBase64 (
ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml ,
$property [ 'name' ] . '="' , '"'
)
)
);
2018-10-29 16:38:00 +00:00
// load tracker
$phpTracker [ 'type_' . $phpKey ] = $phpKey ;
2016-03-01 18:44:13 +00:00
}
2018-02-20 21:23:35 +00:00
elseif ( $property [ 'name' ] === 'prime_php' && $setCustom )
{
// load the php for the custom field file
2020-03-28 13:34:14 +00:00
$fieldAttributes [ 'custom' ][ 'prime_php' ]
= ( int ) ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml , $property [ 'name' ] . '="' , '"'
);
2018-02-20 21:23:35 +00:00
}
2017-02-01 13:17:04 +00:00
elseif ( $property [ 'name' ] === 'extends' && $setCustom )
2016-03-01 18:44:13 +00:00
{
// load the class that is being extended
2020-03-28 13:34:14 +00:00
$fieldAttributes [ 'custom' ][ 'extends' ]
= ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml , 'extends="' , '"'
);
2016-03-01 18:44:13 +00:00
}
2017-02-01 13:17:04 +00:00
elseif ( $property [ 'name' ] === 'view' && $setCustom )
2016-03-01 18:44:13 +00:00
{
2018-09-25 20:51:14 +00:00
// load the view name & replace the placeholders
2020-03-28 13:34:14 +00:00
$fieldAttributes [ 'custom' ][ 'view' ]
= ComponentbuilderHelper :: safeString (
$this -> setPlaceholders (
ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml , 'view="' , '"'
), $placeholders
)
);
2016-03-01 18:44:13 +00:00
}
2017-02-01 13:17:04 +00:00
elseif ( $property [ 'name' ] === 'views' && $setCustom )
2016-03-01 18:44:13 +00:00
{
2018-09-25 20:51:14 +00:00
// load the views name & replace the placeholders
2020-03-28 13:34:14 +00:00
$fieldAttributes [ 'custom' ][ 'views' ]
= ComponentbuilderHelper :: safeString (
$this -> setPlaceholders (
ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml , 'views="' , '"'
), $placeholders
)
);
2016-03-01 18:44:13 +00:00
}
2017-02-01 13:17:04 +00:00
elseif ( $property [ 'name' ] === 'component' && $setCustom )
2016-03-01 18:44:13 +00:00
{
2018-09-25 20:51:14 +00:00
// load the component name & replace the placeholders
2020-03-28 13:34:14 +00:00
$fieldAttributes [ 'custom' ][ 'component' ]
= $this -> setPlaceholders (
ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml , 'component="' , '"'
), $placeholders
);
2016-03-01 18:44:13 +00:00
}
2017-02-01 13:17:04 +00:00
elseif ( $property [ 'name' ] === 'table' && $setCustom )
2016-03-01 18:44:13 +00:00
{
2018-09-25 20:51:14 +00:00
// load the main table that is queried & replace the placeholders
2020-03-28 13:34:14 +00:00
$fieldAttributes [ 'custom' ][ 'table' ]
= $this -> setPlaceholders (
ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml , 'table="' , '"'
), $placeholders
);
2016-03-01 18:44:13 +00:00
}
2017-02-01 13:17:04 +00:00
elseif ( $property [ 'name' ] === 'value_field' && $setCustom )
2016-03-01 18:44:13 +00:00
{
// load the text key
2020-03-28 13:34:14 +00:00
$fieldAttributes [ 'custom' ][ 'text' ]
= ComponentbuilderHelper :: safeString (
ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml , 'value_field="' , '"'
)
);
2016-03-01 18:44:13 +00:00
}
2017-02-01 13:17:04 +00:00
elseif ( $property [ 'name' ] === 'key_field' && $setCustom )
2016-03-01 18:44:13 +00:00
{
// load the id key
2020-03-28 13:34:14 +00:00
$fieldAttributes [ 'custom' ][ 'id' ]
= ComponentbuilderHelper :: safeString (
ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml , 'key_field="' , '"'
)
);
2016-03-01 18:44:13 +00:00
}
2020-03-28 13:34:14 +00:00
elseif ( $property [ 'name' ] === 'button' && $repeatable
&& $setCustom )
2016-03-01 18:44:13 +00:00
{
// dont load the button to repeatable
$xmlValue = 'false' ;
2018-03-30 07:58:24 +00:00
// do not add button
$fieldAttributes [ 'custom' ][ 'add_button' ] = 'false' ;
}
elseif ( $property [ 'name' ] === 'button' && $setCustom )
{
2019-05-25 20:20:12 +00:00
// load the button string value if found
2020-03-28 13:34:14 +00:00
$xmlValue = ( string ) ComponentbuilderHelper :: safeString (
ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml , 'button="' , '"'
)
);
2018-03-30 07:58:24 +00:00
// add to custom values
2020-03-28 13:34:14 +00:00
$fieldAttributes [ 'custom' ][ 'add_button' ]
= ( ComponentbuilderHelper :: checkString ( $xmlValue )
|| 1 == $xmlValue ) ? $xmlValue : 'false' ;
2016-03-01 18:44:13 +00:00
}
2020-03-28 13:34:14 +00:00
elseif ( $property [ 'name' ] === 'required'
&& 'repeatable' === $typeName )
2016-09-03 21:44:47 +00:00
{
2019-05-25 20:20:12 +00:00
// dont load the required to repeatable field type
2016-09-03 21:44:47 +00:00
$xmlValue = 'false' ;
}
2020-03-28 13:34:14 +00:00
elseif ( $viewType == 2
&& ( $property [ 'name' ] === 'readonly'
|| $property [ 'name' ] === 'disabled' ))
2016-03-01 18:44:13 +00:00
{
// set read only
$xmlValue = 'true' ;
2018-07-21 07:10:37 +00:00
// trip the switch for readonly
if ( $property [ 'name' ] === 'readonly' )
{
$setReadonly = true ;
}
2016-03-01 18:44:13 +00:00
}
2017-02-01 13:17:04 +00:00
elseif ( $property [ 'name' ] === 'multiple' )
2016-03-01 18:44:13 +00:00
{
2020-03-28 13:34:14 +00:00
$xmlValue = ( string ) ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml , $property [ 'name' ] . '="' , '"'
);
2016-03-01 18:44:13 +00:00
// add the multipal
2017-02-02 11:54:07 +00:00
if ( 'true' === $xmlValue )
2016-03-01 18:44:13 +00:00
{
$multiple = true ;
}
}
// make sure the name is added as a cless name for use in javascript
2020-03-28 13:34:14 +00:00
elseif ( $property [ 'name' ] === 'class'
&& ( $typeName === 'note'
|| $typeName === 'spacer' ))
2016-03-01 18:44:13 +00:00
{
2020-03-28 13:34:14 +00:00
$xmlValue = ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml , 'class="' , '"'
);
2016-03-01 18:44:13 +00:00
// add the type class
if ( ComponentbuilderHelper :: checkString ( $xmlValue ))
{
if ( strpos ( $xmlValue , $name ) === false )
{
$xmlValue = $xmlValue . ' ' . $name ;
}
}
else
{
$xmlValue = $name ;
}
}
else
{
// set the rest of the fields
2020-03-28 13:34:14 +00:00
$xmlValue = ( string ) $this -> setPlaceholders (
ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml , $property [ 'name' ] . '="' ,
'"'
), $placeholders
);
2016-03-01 18:44:13 +00:00
}
// check if translatable
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkString ( $xmlValue )
&& isset ( $property [ 'translatable' ])
&& $property [ 'translatable' ] == 1 )
2016-03-01 18:44:13 +00:00
{
2017-12-03 17:08:01 +00:00
// update label if field use multiple times
2017-03-06 12:06:51 +00:00
if ( $property [ 'name' ] === 'label' )
{
2020-03-28 13:34:14 +00:00
if ( isset ( $fieldAttributes [ 'name' ])
2020-11-26 17:33:39 +00:00
&& isset ( $this -> uniqueNames [ $nameListCode ][ 'names' ][ $fieldAttributes [ 'name' ]]))
2017-03-06 12:06:51 +00:00
{
2020-03-28 13:34:14 +00:00
$xmlValue .= ' ('
. ComponentbuilderHelper :: safeString (
2020-11-26 17:33:39 +00:00
$this -> uniqueNames [ $nameListCode ][ 'names' ][ $fieldAttributes [ 'name' ]]
2020-03-28 13:34:14 +00:00
) . ')' ;
2017-03-06 12:06:51 +00:00
}
}
2016-03-01 18:44:13 +00:00
// replace placeholders
2020-03-28 13:34:14 +00:00
$xmlValue = $this -> setPlaceholders (
$xmlValue , $placeholders
);
2016-03-01 18:44:13 +00:00
// insure custom lables dont get messed up
if ( $setCustom )
{
$customLabel = $xmlValue ;
}
// set lang key
2020-03-28 13:34:14 +00:00
$langValue = $langView . '_'
. ComponentbuilderHelper :: safeFieldName (
$name . ' ' . $property [ 'name' ], true
);
2016-03-01 18:44:13 +00:00
// add to lang array
2019-07-04 23:53:54 +00:00
$this -> setLangContent ( $this -> lang , $langValue , $xmlValue );
2016-03-01 18:44:13 +00:00
// use lang value
$xmlValue = $langValue ;
}
2020-03-28 13:34:14 +00:00
elseif ( isset ( $field [ 'alias' ]) && $field [ 'alias' ]
&& isset ( $property [ 'translatable' ])
&& $property [ 'translatable' ] == 1 )
2016-03-01 18:44:13 +00:00
{
2017-02-01 13:17:04 +00:00
if ( $property [ 'name' ] === 'label' )
2016-03-01 18:44:13 +00:00
{
$xmlValue = 'JFIELD_ALIAS_LABEL' ;
}
2017-02-01 13:17:04 +00:00
elseif ( $property [ 'name' ] === 'description' )
2016-03-01 18:44:13 +00:00
{
$xmlValue = 'JFIELD_ALIAS_DESC' ;
}
2017-02-01 13:17:04 +00:00
elseif ( $property [ 'name' ] === 'hint' )
2016-03-01 18:44:13 +00:00
{
$xmlValue = 'JFIELD_ALIAS_PLACEHOLDER' ;
}
}
2020-03-28 13:34:14 +00:00
elseif ( isset ( $field [ 'title' ]) && $field [ 'title' ]
&& isset ( $property [ 'translatable' ])
&& $property [ 'translatable' ] == 1 )
2016-03-01 18:44:13 +00:00
{
2017-02-01 13:17:04 +00:00
if ( $property [ 'name' ] === 'label' )
2016-03-01 18:44:13 +00:00
{
$xmlValue = 'JGLOBAL_TITLE' ;
}
}
// only load value if found or is mandatory
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkString ( $xmlValue )
|| ( isset ( $property [ 'mandatory' ])
&& $property [ 'mandatory' ] == 1
&& ! $setCustom ))
2016-03-01 18:44:13 +00:00
{
// make sure mantory fields are added
if ( ! ComponentbuilderHelper :: checkString ( $xmlValue ))
{
2020-03-28 13:34:14 +00:00
if ( isset ( $property [ 'example' ])
&& ComponentbuilderHelper :: checkString (
$property [ 'example' ]
))
2016-03-01 18:44:13 +00:00
{
$xmlValue = $property [ 'example' ];
}
}
// load to langBuilder down the line
2017-02-01 13:17:04 +00:00
if ( $property [ 'name' ] === 'label' )
2016-03-01 18:44:13 +00:00
{
if ( $setCustom )
{
$fieldAttributes [ 'custom' ][ 'label' ] = $customLabel ;
}
2017-03-06 12:06:51 +00:00
$langLabel = $xmlValue ;
2016-03-01 18:44:13 +00:00
}
2017-03-06 12:06:51 +00:00
// now set the value
$fieldAttributes [ $property [ 'name' ]] = $xmlValue ;
2016-03-01 18:44:13 +00:00
}
2018-09-24 14:37:51 +00:00
// validate that the default field is set
2020-03-28 13:34:14 +00:00
elseif ( $property [ 'name' ] === 'default'
&& ( $xmlValidateValue
= ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml , 'default="' , '"' , 'none-set'
)) !== 'none-set' )
2018-09-24 14:37:51 +00:00
{
// we must allow empty defaults
$fieldAttributes [ 'default' ] = $xmlValue ;
}
2016-03-01 18:44:13 +00:00
}
2018-10-29 16:38:00 +00:00
// check if all php is loaded using the tracker
if ( ComponentbuilderHelper :: checkArray ( $phpTracker ))
{
// litle search validation
2020-03-28 13:34:14 +00:00
$confirmation
= '8qvZHoyuFYQqpj0YQbc6F3o5DhBlmS-_-a8pmCZfOVSfANjkmV5LG8pCdAY2JNYu6cB' ;
2018-10-29 16:38:00 +00:00
foreach ( $phpTracker as $searchKey => $phpKey )
{
2020-07-13 02:52:06 +00:00
// we must search for more code in the xml just encase
2020-03-28 13:34:14 +00:00
foreach ( range ( 2 , 30 ) as $phpLine )
2018-10-29 16:38:00 +00:00
{
$get_ = $searchKey . '_' . $phpLine ;
2020-03-28 13:34:14 +00:00
if ( ! isset ( $fieldAttributes [ 'custom' ][ $phpKey ][ $phpLine ])
&& ( $value
= ComponentbuilderHelper :: getValueFromXMLstring (
$field [ 'settings' ] -> xml , $get_ , $confirmation
)) !== $confirmation )
2018-10-29 16:38:00 +00:00
{
2020-03-28 13:34:14 +00:00
$fieldAttributes [ 'custom' ][ $phpKey ][ $phpLine ]
= $this -> setDynamicValues (
ComponentbuilderHelper :: openValidBase64 ( $value )
);
2018-10-29 16:38:00 +00:00
}
}
}
}
2016-03-01 18:44:13 +00:00
// do some nice twigs beyond the default
if ( isset ( $fieldAttributes [ 'name' ]))
{
2018-02-27 12:17:38 +00:00
// check if we have class value for the list view of this field
2020-03-28 13:34:14 +00:00
$listclass = ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml , 'listclass="' , '"'
);
2018-02-27 12:17:38 +00:00
if ( ComponentbuilderHelper :: checkString ( $listclass ))
{
2020-11-26 17:33:39 +00:00
$this -> listFieldClass [ $nameListCode ][ $fieldAttributes [ 'name' ]]
2020-03-28 13:34:14 +00:00
= $listclass ;
2018-02-27 12:17:38 +00:00
}
2016-03-01 18:44:13 +00:00
// check if we find reason to remove this field from being escaped
2020-03-28 13:34:14 +00:00
$escaped = ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml , 'escape="' , '"'
);
2016-03-01 18:44:13 +00:00
if ( ComponentbuilderHelper :: checkString ( $escaped ))
{
2020-11-26 17:33:39 +00:00
$this -> doNotEscape [ $nameListCode ][]
2020-03-28 13:34:14 +00:00
= $fieldAttributes [ 'name' ];
2016-03-01 18:44:13 +00:00
}
2017-07-20 23:26:48 +00:00
// check if we have display switch for dynamic placment
2020-03-28 13:34:14 +00:00
$display = ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml , 'display="' , '"'
);
2017-07-20 23:26:48 +00:00
if ( ComponentbuilderHelper :: checkString ( $display ))
{
$fieldAttributes [ 'display' ] = $display ;
}
2018-03-27 09:57:16 +00:00
// make sure validation is set if found (even it not part of field properties)
if ( ! isset ( $fieldAttributes [ 'validate' ]))
{
// check if we have validate (validation rule set)
2020-03-28 13:34:14 +00:00
$validationRule = ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml , 'validate="' , '"'
);
2018-03-27 09:57:16 +00:00
if ( ComponentbuilderHelper :: checkString ( $validationRule ))
{
2020-03-28 13:34:14 +00:00
$fieldAttributes [ 'validate' ]
= ComponentbuilderHelper :: safeString (
$validationRule
);
2018-03-27 09:57:16 +00:00
}
}
2018-07-21 07:10:37 +00:00
// make sure ID is always readonly
if ( $fieldAttributes [ 'name' ] === 'id' && ! $setReadonly )
{
$fieldAttributes [ 'readonly' ] = 'true' ;
}
2016-03-01 18:44:13 +00:00
}
}
2020-03-28 13:34:14 +00:00
2016-03-01 18:44:13 +00:00
return $fieldAttributes ;
}
2016-03-04 00:01:43 +00:00
/**
2016-03-01 18:44:13 +00:00
* set Builders
2017-12-03 17:08:01 +00:00
*
2020-11-26 17:33:39 +00:00
* @ param string $langLabel The language string for field label
* @ param string $langView The language string of the view
* @ param string $nameSingleCode The single view name
* @ param string $nameListCode The list view name
* @ param string $name The field name
* @ param array $view The view data
* @ param array $field The field data
* @ param string $typeName The field type
* @ param boolean $multiple The switch to set multiple selection option
* @ param boolean $custom The custom field switch
* @ param boolean $options The options switch
2016-03-01 18:44:13 +00:00
*
* @ return void
2017-12-03 17:08:01 +00:00
*
2016-03-01 18:44:13 +00:00
*/
2020-11-26 17:33:39 +00:00
public function setBuilders ( $langLabel , $langView , $nameSingleCode ,
$nameListCode , $name , $view , $field , $typeName , $multiple ,
2020-03-28 13:34:14 +00:00
$custom = false , $options = false
) {
2021-05-19 15:44:14 +00:00
// check if this is a tag field
if ( $typeName === 'tag' )
{
// set tags for this view but don't load to DB
$this -> tagsBuilder [ $nameSingleCode ] = $nameSingleCode ;
}
2018-04-13 15:24:06 +00:00
// dbSwitch
$dbSwitch = true ;
if ( isset ( $field [ 'list' ]) && $field [ 'list' ] == 2 )
{
// do not add this field to the database
$dbSwitch = false ;
}
2018-04-23 00:42:41 +00:00
elseif ( isset ( $field [ 'settings' ] -> datatype ))
2016-03-01 18:44:13 +00:00
{
// insure default not none if number type
2020-03-28 13:34:14 +00:00
$numberKeys = array ( 'INT' , 'TINYINT' , 'BIGINT' , 'FLOAT' , 'DECIMAL' ,
'DOUBLE' );
2020-02-09 11:13:42 +00:00
// don't use these as index or uniqe keys
2020-03-28 13:34:14 +00:00
$textKeys = array ( 'TEXT' , 'TINYTEXT' , 'MEDIUMTEXT' , 'LONGTEXT' ,
'BLOB' , 'TINYBLOB' , 'MEDIUMBLOB' , 'LONGBLOB' );
2020-02-09 11:13:42 +00:00
// build the query values
2020-11-26 17:33:39 +00:00
$this -> queryBuilder [ $nameSingleCode ][ $name ][ 'type' ]
2020-03-28 13:34:14 +00:00
= $field [ 'settings' ] -> datatype ;
2020-02-09 11:13:42 +00:00
// check if this is a number
if ( in_array ( $field [ 'settings' ] -> datatype , $numberKeys ))
2016-03-01 18:44:13 +00:00
{
2017-02-01 13:17:04 +00:00
if ( $field [ 'settings' ] -> datadefault === 'Other' )
2016-03-01 18:44:13 +00:00
{
2020-02-09 11:13:42 +00:00
// setup the checking
$number_check = $field [ 'settings' ] -> datadefault_other ;
// Decimals in SQL needs some help
2020-03-28 13:34:14 +00:00
if ( 'DECIMAL' === $field [ 'settings' ] -> datatype
&& ! is_numeric ( $number_check ))
2020-02-09 11:13:42 +00:00
{
2020-03-28 13:34:14 +00:00
$number_check = str_replace (
',' , '.' , $field [ 'settings' ] -> datadefault_other
);
2020-02-09 11:13:42 +00:00
}
// check if we have a valid number value
if ( ! is_numeric ( $number_check ))
2016-03-01 18:44:13 +00:00
{
$field [ 'settings' ] -> datadefault_other = '0' ;
}
}
elseif ( ! is_numeric ( $field [ 'settings' ] -> datadefault ))
{
$field [ 'settings' ] -> datadefault = '0' ;
}
}
2020-02-09 11:13:42 +00:00
// check if this is not text
2017-12-03 17:08:01 +00:00
if ( ! in_array ( $field [ 'settings' ] -> datatype , $textKeys ))
2016-09-03 21:44:47 +00:00
{
2020-11-26 17:33:39 +00:00
$this -> queryBuilder [ $nameSingleCode ][ $name ][ 'lenght' ]
2020-03-28 13:34:14 +00:00
= $field [ 'settings' ] -> datalenght ;
2020-11-26 17:33:39 +00:00
$this -> queryBuilder [ $nameSingleCode ][ $name ][ 'lenght_other' ]
2020-03-28 13:34:14 +00:00
= $field [ 'settings' ] -> datalenght_other ;
2020-11-26 17:33:39 +00:00
$this -> queryBuilder [ $nameSingleCode ][ $name ][ 'default' ]
2020-03-28 13:34:14 +00:00
= $field [ 'settings' ] -> datadefault ;
2020-11-26 17:33:39 +00:00
$this -> queryBuilder [ $nameSingleCode ][ $name ][ 'other' ]
2020-03-28 13:34:14 +00:00
= $field [ 'settings' ] -> datadefault_other ;
2016-03-01 18:44:13 +00:00
}
2020-02-09 11:13:42 +00:00
// fall back unto EMPTY for text
2017-12-03 08:02:11 +00:00
else
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
$this -> queryBuilder [ $nameSingleCode ][ $name ][ 'default' ]
2020-03-28 13:34:14 +00:00
= 'EMPTY' ;
2017-12-03 17:08:01 +00:00
}
2017-06-29 21:03:53 +00:00
// to identify the field
2020-11-26 17:33:39 +00:00
$this -> queryBuilder [ $nameSingleCode ][ $name ][ 'ID' ]
2020-03-28 13:34:14 +00:00
= $field [ 'settings' ] -> id ;
2020-11-26 17:33:39 +00:00
$this -> queryBuilder [ $nameSingleCode ][ $name ][ 'null_switch' ]
2020-03-28 13:34:14 +00:00
= $field [ 'settings' ] -> null_switch ;
2016-03-01 18:44:13 +00:00
// set index types
2020-05-25 00:38:16 +00:00
$_guid = true ;
2020-03-28 13:34:14 +00:00
if ( $field [ 'settings' ] -> indexes == 1
&& ! in_array (
$field [ 'settings' ] -> datatype , $textKeys
))
2016-03-01 18:44:13 +00:00
{
// build unique keys of this view for db
2020-11-26 17:33:39 +00:00
$this -> dbUniqueKeys [ $nameSingleCode ][] = $name ;
2020-05-25 00:38:16 +00:00
// prevent guid from being added twice
if ( 'guid' === $name )
{
$_guid = false ;
}
2016-03-01 18:44:13 +00:00
}
2020-03-28 13:34:14 +00:00
elseif (( $field [ 'settings' ] -> indexes == 2
|| ( isset ( $field [ 'alias' ])
&& $field [ 'alias' ])
|| ( isset ( $field [ 'title' ]) && $field [ 'title' ])
|| $typeName === 'category' )
&& ! in_array ( $field [ 'settings' ] -> datatype , $textKeys ))
2016-03-01 18:44:13 +00:00
{
// build keys of this view for db
2020-11-26 17:33:39 +00:00
$this -> dbKeys [ $nameSingleCode ][] = $name ;
2016-03-01 18:44:13 +00:00
}
2020-05-25 00:38:16 +00:00
// special treatment for GUID
if ( 'guid' === $name && $_guid )
{
2020-11-26 17:33:39 +00:00
$this -> dbUniqueGuid [ $nameSingleCode ] = true ;
2020-05-25 00:38:16 +00:00
}
2016-03-01 18:44:13 +00:00
}
2018-05-24 13:56:56 +00:00
// set list switch
2020-03-28 13:34:14 +00:00
$listSwitch = ( isset ( $field [ 'list' ])
&& ( $field [ 'list' ] == 1
|| $field [ 'list' ] == 3
|| $field [ 'list' ] == 4 ));
2018-05-24 13:56:56 +00:00
// set list join
2020-03-28 13:34:14 +00:00
$listJoin
2020-11-26 17:33:39 +00:00
= ( isset ( $this -> listJoinBuilder [ $nameListCode ][( int ) $field [ 'field' ]]));
2016-03-01 18:44:13 +00:00
// add history to this view
2017-10-30 13:08:02 +00:00
if ( isset ( $view [ 'history' ]) && $view [ 'history' ])
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
$this -> historyBuilder [ $nameSingleCode ] = $nameSingleCode ;
2016-03-01 18:44:13 +00:00
}
// set Alias (only one title per view)
2020-03-28 13:34:14 +00:00
if ( $dbSwitch && isset ( $field [ 'alias' ]) && $field [ 'alias' ]
2020-11-26 17:33:39 +00:00
&& ! isset ( $this -> aliasBuilder [ $nameSingleCode ]))
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
$this -> aliasBuilder [ $nameSingleCode ] = $name ;
2016-03-01 18:44:13 +00:00
}
// set Titles (only one title per view)
2020-03-28 13:34:14 +00:00
if ( $dbSwitch && isset ( $field [ 'title' ]) && $field [ 'title' ]
2020-11-26 17:33:39 +00:00
&& ! isset ( $this -> titleBuilder [ $nameSingleCode ]))
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
$this -> titleBuilder [ $nameSingleCode ] = $name ;
2016-03-01 18:44:13 +00:00
}
// category name fix
2017-02-01 13:17:04 +00:00
if ( $typeName === 'category' )
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
if ( isset ( $this -> catOtherName [ $nameListCode ])
2020-03-28 13:34:14 +00:00
&& ComponentbuilderHelper :: checkArray (
2020-11-26 17:33:39 +00:00
$this -> catOtherName [ $nameListCode ]
2020-03-28 13:34:14 +00:00
))
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
$tempName = $this -> catOtherName [ $nameListCode ][ 'name' ];
2016-03-01 18:44:13 +00:00
}
else
{
2020-11-26 17:33:39 +00:00
$tempName = $nameListCode . ' categories' ;
2016-03-01 18:44:13 +00:00
}
// set lang
2020-03-28 13:34:14 +00:00
$listLangName = $langView . '_'
. ComponentbuilderHelper :: safeFieldName ( $tempName , true );
2020-11-30 03:59:45 +00:00
// set field name
$listFieldName = ComponentbuilderHelper :: safeString ( $tempName , 'W' );
2016-03-01 18:44:13 +00:00
// add to lang array
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
2020-11-30 03:59:45 +00:00
$this -> lang , $listLangName , $listFieldName
2020-03-28 13:34:14 +00:00
);
2016-03-01 18:44:13 +00:00
}
else
{
// if label was set use instead
if ( ComponentbuilderHelper :: checkString ( $langLabel ))
{
$listLangName = $langLabel ;
2021-01-30 13:36:03 +00:00
// get field label from the lang label
if ( isset ( $this -> langContent [ $this -> lang ][ $langLabel ]))
{
$listFieldName
= $this -> langContent [ $this -> lang ][ $langLabel ];
}
else
{
// get it from the field xml string
$listFieldName = ( string ) $this -> setPlaceholders (
ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml , 'label="' ,
'"'
), $this -> placeholders
);
}
// make sure there is no html in the list field name
$listFieldName = strip_tags ( $listFieldName );
}
else
{
// set lang (just in case)
$listLangName = $langView . '_'
. ComponentbuilderHelper :: safeFieldName ( $name , true );
// set field name
$listFieldName = ComponentbuilderHelper :: safeString ( $name , 'W' );
// add to lang array
$this -> setLangContent (
$this -> lang , $listLangName , $listFieldName
);
2016-03-01 18:44:13 +00:00
}
}
// build the list values
2020-03-28 13:34:14 +00:00
if (( $listSwitch || $listJoin ) && $typeName != 'repeatable'
&& $typeName != 'subform' )
2016-03-01 18:44:13 +00:00
{
// load to list builder
2018-05-24 13:56:56 +00:00
if ( $listSwitch )
{
2020-11-26 17:33:39 +00:00
$this -> listBuilder [ $nameListCode ][] = array (
2020-03-28 13:34:14 +00:00
'id' => ( int ) $field [ 'field' ],
'type' => $typeName ,
'code' => $name ,
'lang' => $listLangName ,
'title' => ( isset ( $field [ 'title' ]) && $field [ 'title' ])
? true : false ,
'alias' => ( isset ( $field [ 'alias' ]) && $field [ 'alias' ])
? true : false ,
'link' => ( isset ( $field [ 'link' ]) && $field [ 'link' ])
? true : false ,
'sort' => ( isset ( $field [ 'sort' ]) && $field [ 'sort' ])
? true : false ,
'custom' => $custom ,
2018-05-24 13:56:56 +00:00
'multiple' => $multiple ,
2020-03-28 13:34:14 +00:00
'options' => $options ,
'target' => ( int ) $field [ 'list' ]);
2018-05-24 13:56:56 +00:00
}
// build custom builder list
if ( $listSwitch || $listJoin )
{
2020-11-26 17:33:39 +00:00
$this -> customBuilderList [ $nameListCode ][] = $name ;
2018-05-24 13:56:56 +00:00
}
2016-03-01 18:44:13 +00:00
}
2018-05-26 10:03:08 +00:00
// load the list join builder
if ( $listJoin )
{
2020-11-26 17:33:39 +00:00
$this -> listJoinBuilder [ $nameListCode ][( int ) $field [ 'field' ]]
2020-03-28 13:34:14 +00:00
= array (
'type' => $typeName ,
'code' => $name ,
'lang' => $listLangName ,
'title' => ( isset ( $field [ 'title' ]) && $field [ 'title' ]) ? true
: false ,
'alias' => ( isset ( $field [ 'alias' ]) && $field [ 'alias' ]) ? true
: false ,
'link' => ( isset ( $field [ 'link' ]) && $field [ 'link' ]) ? true
: false ,
'sort' => ( isset ( $field [ 'sort' ]) && $field [ 'sort' ]) ? true
: false ,
'custom' => $custom ,
2018-05-26 10:03:08 +00:00
'multiple' => $multiple ,
2020-03-28 13:34:14 +00:00
'options' => $options );
2018-05-26 10:03:08 +00:00
}
// update the field relations
2020-11-26 17:33:39 +00:00
if ( isset ( $this -> fieldRelations [ $nameListCode ])
&& isset ( $this -> fieldRelations [ $nameListCode ][( int ) $field [ 'field' ]])
2020-03-28 13:34:14 +00:00
&& ComponentbuilderHelper :: checkArray (
2020-11-26 17:33:39 +00:00
$this -> fieldRelations [ $nameListCode ][( int ) $field [ 'field' ]]
2020-03-28 13:34:14 +00:00
))
2018-05-26 10:03:08 +00:00
{
2020-03-28 13:34:14 +00:00
foreach (
2020-11-26 17:33:39 +00:00
$this -> fieldRelations [ $nameListCode ][( int ) $field [ 'field' ]] as
2020-03-28 13:34:14 +00:00
$area => & $field_values
)
2018-07-21 07:10:37 +00:00
{
2020-03-28 13:34:14 +00:00
$field_values [ 'type' ] = $typeName ;
$field_values [ 'code' ] = $name ;
2018-07-21 07:10:37 +00:00
$field_values [ 'custom' ] = $custom ;
}
2018-05-26 10:03:08 +00:00
}
2016-03-01 18:44:13 +00:00
// set the hidden field of this view
2020-12-24 13:39:33 +00:00
if ( $dbSwitch && $typeName === 'hidden' )
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> hiddenFieldsBuilder [ $nameSingleCode ]))
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
$this -> hiddenFieldsBuilder [ $nameSingleCode ] = '' ;
2016-03-01 18:44:13 +00:00
}
2020-11-26 17:33:39 +00:00
$this -> hiddenFieldsBuilder [ $nameSingleCode ] .= ',"' . $name . '"' ;
2016-03-01 18:44:13 +00:00
}
// set all int fields of this view
2020-03-28 13:34:14 +00:00
if ( $dbSwitch && isset ( $field [ 'settings' ] -> datatype )
&& ( $field [ 'settings' ] -> datatype === 'INT'
|| $field [ 'settings' ] -> datatype === 'TINYINT'
|| $field [ 'settings' ] -> datatype === 'BIGINT' ))
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> intFieldsBuilder [ $nameSingleCode ]))
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
$this -> intFieldsBuilder [ $nameSingleCode ] = '' ;
2016-03-01 18:44:13 +00:00
}
2020-11-26 17:33:39 +00:00
$this -> intFieldsBuilder [ $nameSingleCode ] .= ',"' . $name . '"' ;
2016-03-01 18:44:13 +00:00
}
// set all dynamic field of this view
2020-12-24 13:39:33 +00:00
if ( $dbSwitch && $typeName != 'category' && $typeName != 'repeatable'
2020-03-28 13:34:14 +00:00
&& $typeName != 'subform'
&& ! in_array ( $name , $this -> defaultFields ))
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> dynamicfieldsBuilder [ $nameSingleCode ]))
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
$this -> dynamicfieldsBuilder [ $nameSingleCode ] = '' ;
2016-03-01 18:44:13 +00:00
}
2020-11-26 17:33:39 +00:00
if ( isset ( $this -> dynamicfieldsBuilder [ $nameSingleCode ])
2020-03-28 13:34:14 +00:00
&& ComponentbuilderHelper :: checkString (
2020-11-26 17:33:39 +00:00
$this -> dynamicfieldsBuilder [ $nameSingleCode ]
2020-03-28 13:34:14 +00:00
))
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
$this -> dynamicfieldsBuilder [ $nameSingleCode ] .= ',"' . $name
2020-03-28 13:34:14 +00:00
. '":"' . $name . '"' ;
2016-03-01 18:44:13 +00:00
}
else
{
2020-11-26 17:33:39 +00:00
$this -> dynamicfieldsBuilder [ $nameSingleCode ] .= '"' . $name
2020-03-28 13:34:14 +00:00
. '":"' . $name . '"' ;
2016-03-01 18:44:13 +00:00
}
}
// TODO we may need to add a switch instead (since now it uses the first editor field)
// set the main(biggest) text field of this view
2018-04-13 15:24:06 +00:00
if ( $dbSwitch && $typeName === 'editor' )
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> maintextBuilder [ $nameSingleCode ])
2020-03-28 13:34:14 +00:00
|| ! ComponentbuilderHelper :: checkString (
2020-11-26 17:33:39 +00:00
$this -> maintextBuilder [ $nameSingleCode ]
2020-03-28 13:34:14 +00:00
))
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
$this -> maintextBuilder [ $nameSingleCode ] = $name ;
2016-03-01 18:44:13 +00:00
}
}
// set the custom builder
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkArray ( $custom )
&& $typeName != 'category'
&& $typeName != 'repeatable'
&& $typeName != 'subform' )
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
$this -> customBuilder [ $nameListCode ][] = array ( 'type' => $typeName ,
'code' => $name ,
'lang' => $listLangName ,
'custom' => $custom ,
'method' => $field [ 'settings' ] -> store );
2016-03-01 18:44:13 +00:00
// set the custom fields needed in content type data
2020-11-26 17:33:39 +00:00
if ( ! isset ( $this -> customFieldLinksBuilder [ $nameSingleCode ]))
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
$this -> customFieldLinksBuilder [ $nameSingleCode ] = '' ;
2016-03-01 18:44:13 +00:00
}
2016-10-23 22:48:26 +00:00
// only load this if table is set
2020-03-28 13:34:14 +00:00
if ( isset ( $custom [ 'table' ])
&& ComponentbuilderHelper :: checkString (
$custom [ 'table' ]
))
2016-10-23 22:48:26 +00:00
{
2020-11-26 17:33:39 +00:00
$this -> customFieldLinksBuilder [ $nameSingleCode ] .= ',{"sourceColumn": "'
2020-03-28 13:34:14 +00:00
. $name . '","targetTable": "' . $custom [ 'table' ]
. '","targetColumn": "' . $custom [ 'id' ]
. '","displayColumn": "' . $custom [ 'text' ] . '"}' ;
2016-10-23 22:48:26 +00:00
}
2016-03-01 18:44:13 +00:00
// build script switch for user
2017-02-01 13:17:04 +00:00
if ( $custom [ 'extends' ] === 'user' )
2016-03-01 18:44:13 +00:00
{
$this -> setScriptUserSwitch [ $typeName ] = $typeName ;
}
}
2017-02-01 13:17:04 +00:00
if ( $typeName === 'media' )
2016-03-01 18:44:13 +00:00
{
$this -> setScriptMediaSwitch [ $typeName ] = $typeName ;
}
2020-05-30 18:49:13 +00:00
// setup category for this view
2018-04-13 15:24:06 +00:00
if ( $dbSwitch && $typeName === 'category' )
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
if ( isset ( $this -> catOtherName [ $nameListCode ])
2020-03-28 13:34:14 +00:00
&& ComponentbuilderHelper :: checkArray (
2020-11-26 17:33:39 +00:00
$this -> catOtherName [ $nameListCode ]
2020-03-28 13:34:14 +00:00
))
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
$otherViews = $this -> catOtherName [ $nameListCode ][ 'views' ];
$otherView = $this -> catOtherName [ $nameListCode ][ 'view' ];
2016-03-01 18:44:13 +00:00
}
else
{
2020-11-26 17:33:39 +00:00
$otherViews = $nameListCode ;
$otherView = $nameSingleCode ;
2016-03-01 18:44:13 +00:00
}
2019-05-06 01:05:15 +00:00
// get the xml extension name
2020-03-28 13:34:14 +00:00
$_extension = $this -> setPlaceholders (
ComponentbuilderHelper :: getBetween (
$field [ 'settings' ] -> xml , 'extension="' , '"'
), $this -> placeholders
);
2020-05-30 18:49:13 +00:00
// if they left out the extension for some reason
2019-06-09 21:19:34 +00:00
if ( ! ComponentbuilderHelper :: checkString ( $_extension ))
{
2020-03-28 13:34:14 +00:00
$_extension = 'com_' . $this -> componentCodeName . '.'
. $otherView ;
2019-06-09 21:19:34 +00:00
}
2020-05-30 18:49:13 +00:00
// check the context (does our target match)
if ( strpos ( $_extension , '.' ) !== false )
{
$target_view = trim ( explode ( '.' , $_extension )[ 1 ]);
// from my understanding the target extension view and the otherView must align
// so I will here check that it does, and if not raise an error message to fix this
if ( $target_view !== $otherView )
{
$target_extension = trim ( explode ( '.' , $_extension )[ 0 ]);
2020-07-07 15:13:04 +00:00
$correction = $target_extension . '.' . $otherView ;
2020-05-30 18:49:13 +00:00
$this -> app -> enqueueMessage (
2020-07-07 15:13:04 +00:00
JText :: sprintf (
' < hr />< h3 > Category targeting view mismatch </ h3 >
2020-08-13 01:03:56 +00:00
< p > The < a href = " index.php?option=com_componentbuilder&view=fields&task=field.edit&id=%s " target = " _blank " title = " open field " >
2020-05-30 18:49:13 +00:00
category field </ a > in < b > ( % s ) admin view </ b > has a mismatching target view .
< br /> To correct the mismatch , the < b > extension </ b > value < code >% s </ code > in the < a href = " index.php?option=com_componentbuilder&view=fields&task=field.edit&id=%s " target = " _blank " title = " open category field " >
field </ a > must be changed to < code >% s </ code >
for < a href = " https://github.com/vdm-io/Joomla-Component-Builder/issues/561 " target = " _blank " title = " view issue on gitHub " >
best category integration with Joomla </ a >.
< br />< b > Please watch < a href = " https://youtu.be/R4WQgcu6Xns " target = " _blank " title = " very important info on the topic " >
this tutorial </ a > before proceeding !!!</ b > ,
2020-07-07 15:13:04 +00:00
< a href = " https://gist.github.com/Llewellynvdm/e053dc39ae3b2bf769c76a3e62c75b95 " target = " _blank " title = " first watch the tutorial to understand how to use this code " > code fix </ a ></ p > ' ,
2020-11-26 17:33:39 +00:00
$field [ 'field' ], $nameSingleCode , $_extension ,
2020-07-07 15:13:04 +00:00
$field [ 'field' ], $correction
), 'Error'
2020-05-30 18:49:13 +00:00
);
}
}
// load the category builder - TODO must move all to single view
2020-11-26 17:33:39 +00:00
$this -> categoryBuilder [ $nameListCode ] = array ( 'code' => $name ,
'name' => $listLangName ,
2021-03-04 06:13:05 +00:00
'extension' => $_extension ,
'filter' => $field [ 'filter' ]);
2016-03-01 18:44:13 +00:00
// also set code name for title alias fix
2020-11-26 17:33:39 +00:00
$this -> catCodeBuilder [ $nameSingleCode ] = array ( 'code' => $name ,
'views' => $otherViews ,
'view' => $otherView );
2016-03-01 18:44:13 +00:00
}
// setup checkbox for this view
2020-03-28 13:34:14 +00:00
if ( $dbSwitch
&& ( $typeName === 'checkbox'
|| ( ComponentbuilderHelper :: checkArray ( $custom )
&& isset ( $custom [ 'extends' ])
&& $custom [ 'extends' ] === 'checkboxes' )))
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
$this -> checkboxBuilder [ $nameSingleCode ][] = $name ;
2016-03-01 18:44:13 +00:00
}
// setup checkboxes and other json items for this view
2020-03-28 13:34:14 +00:00
// if we have advance field modeling and the field is not being set in the DB
// this could mean that field is modeled manually (so we add it)
if (( $dbSwitch || $field [ 'settings' ] -> store == 6 )
&& (( $typeName === 'subform' || $typeName === 'checkboxes'
|| $multiple
|| $field [ 'settings' ] -> store != 0 )
&& $typeName != 'tag' ))
2016-03-01 18:44:13 +00:00
{
2018-04-30 12:06:05 +00:00
$subformJsonSwitch = true ;
2016-03-01 18:44:13 +00:00
switch ( $field [ 'settings' ] -> store )
{
case 1 :
// JSON_STRING_ENCODE
2020-11-26 17:33:39 +00:00
$this -> jsonStringBuilder [ $nameSingleCode ][] = $name ;
2016-03-01 18:44:13 +00:00
// Site settings of each field if needed
2020-03-28 13:34:14 +00:00
$this -> buildSiteFieldData (
2020-11-26 17:33:39 +00:00
$nameSingleCode , $name , 'json' , $typeName
2020-03-28 13:34:14 +00:00
);
2016-03-01 18:44:13 +00:00
break ;
case 2 :
// BASE_SIXTY_FOUR
2020-11-26 17:33:39 +00:00
$this -> base64Builder [ $nameSingleCode ][] = $name ;
2016-03-01 18:44:13 +00:00
// Site settings of each field if needed
2020-03-28 13:34:14 +00:00
$this -> buildSiteFieldData (
2020-11-26 17:33:39 +00:00
$nameSingleCode , $name , 'base64' , $typeName
2020-03-28 13:34:14 +00:00
);
2016-03-01 18:44:13 +00:00
break ;
case 3 :
// BASIC_ENCRYPTION_LOCALKEY
2020-11-26 17:33:39 +00:00
$this -> basicFieldModeling [ $nameSingleCode ][] = $name ;
2016-03-01 18:44:13 +00:00
// Site settings of each field if needed
2020-03-28 13:34:14 +00:00
$this -> buildSiteFieldData (
2020-11-26 17:33:39 +00:00
$nameSingleCode , $name , 'basic_encryption' , $typeName
2020-03-28 13:34:14 +00:00
);
2016-03-01 18:44:13 +00:00
break ;
case 4 :
2021-08-11 12:15:35 +00:00
// WHMCS_ENCRYPTION_VDMKEY (DUE REMOVAL)
2020-11-26 17:33:39 +00:00
$this -> whmcsFieldModeling [ $nameSingleCode ][] = $name ;
2018-03-06 02:28:44 +00:00
// Site settings of each field if needed
2020-03-28 13:34:14 +00:00
$this -> buildSiteFieldData (
2020-11-26 17:33:39 +00:00
$nameSingleCode , $name , 'whmcs_encryption' , $typeName
2020-03-28 13:34:14 +00:00
);
2018-03-06 02:28:44 +00:00
break ;
case 5 :
// MEDIUM_ENCRYPTION_LOCALFILE
2020-11-26 17:33:39 +00:00
$this -> mediumFieldModeling [ $nameSingleCode ][] = $name ;
2016-03-01 18:44:13 +00:00
// Site settings of each field if needed
2020-03-28 13:34:14 +00:00
$this -> buildSiteFieldData (
2020-11-26 17:33:39 +00:00
$nameSingleCode , $name , 'medium_encryption' , $typeName
2020-03-28 13:34:14 +00:00
);
2016-03-01 18:44:13 +00:00
break ;
2019-10-16 20:34:36 +00:00
case 6 :
// EXPERT_MODE
2020-03-28 13:34:14 +00:00
if ( isset ( $field [ 'settings' ] -> model_field ))
2019-10-16 20:34:36 +00:00
{
if ( isset ( $field [ 'settings' ] -> initiator_save_key ))
{
2020-11-26 17:33:39 +00:00
$this -> expertFieldModelInitiator [ $nameSingleCode ][ 'save' ][ $field [ 'settings' ] -> initiator_save_key ]
2019-10-16 20:34:36 +00:00
= $field [ 'settings' ] -> initiator_save ;
}
if ( isset ( $field [ 'settings' ] -> initiator_get_key ))
{
2020-11-26 17:33:39 +00:00
$this -> expertFieldModelInitiator [ $nameSingleCode ][ 'get' ][ $field [ 'settings' ] -> initiator_get_key ]
2019-10-16 20:34:36 +00:00
= $field [ 'settings' ] -> initiator_get ;
}
2020-11-26 17:33:39 +00:00
$this -> expertFieldModeling [ $nameSingleCode ][ $name ]
2020-03-28 13:34:14 +00:00
= $field [ 'settings' ] -> model_field ;
2019-10-16 20:34:36 +00:00
// Site settings of each field if needed
2020-03-28 13:34:14 +00:00
$this -> buildSiteFieldData (
2020-11-26 17:33:39 +00:00
$nameSingleCode , $name , 'expert_mode' , $typeName
2020-03-28 13:34:14 +00:00
);
2019-10-16 20:34:36 +00:00
}
break ;
2016-03-01 18:44:13 +00:00
default :
// JSON_ARRAY_ENCODE
2020-11-26 17:33:39 +00:00
$this -> jsonItemBuilder [ $nameSingleCode ][] = $name ;
2016-03-01 18:44:13 +00:00
// Site settings of each field if needed
2020-03-28 13:34:14 +00:00
$this -> buildSiteFieldData (
2020-11-26 17:33:39 +00:00
$nameSingleCode , $name , 'json' , $typeName
2020-03-28 13:34:14 +00:00
);
2018-04-30 12:06:05 +00:00
// no londer add the json again (already added)
$subformJsonSwitch = false ;
2016-03-01 18:44:13 +00:00
break ;
}
// just a heads-up for usergroups set to multiple
2017-02-01 13:17:04 +00:00
if ( $typeName === 'usergroup' )
2016-03-01 18:44:13 +00:00
{
2020-03-28 13:34:14 +00:00
$this -> buildSiteFieldData (
2020-11-26 17:33:39 +00:00
$nameSingleCode , $name , 'json' , $typeName
2020-03-28 13:34:14 +00:00
);
2016-03-01 18:44:13 +00:00
}
2019-11-08 16:07:08 +00:00
// load the model list display fix
2020-03-28 13:34:14 +00:00
if (( $listSwitch || $listJoin )
&& (( $typeName != 'repeatable'
&& $typeName != 'subform' )
|| $field [ 'settings' ] -> store == 6 ))
2016-03-01 18:44:13 +00:00
{
if ( ComponentbuilderHelper :: checkArray ( $options ))
{
2020-11-26 17:33:39 +00:00
$this -> getItemsMethodListStringFixBuilder [ $nameSingleCode ][]
2020-03-28 13:34:14 +00:00
= array ( 'name' => $name , 'type' => $typeName ,
'translation' => true , 'custom' => $custom ,
'method' => $field [ 'settings' ] -> store );
2016-03-01 18:44:13 +00:00
}
else
{
2020-11-26 17:33:39 +00:00
$this -> getItemsMethodListStringFixBuilder [ $nameSingleCode ][]
2020-03-28 13:34:14 +00:00
= array ( 'name' => $name , 'type' => $typeName ,
'translation' => false , 'custom' => $custom ,
'method' => $field [ 'settings' ] -> store );
2016-03-01 18:44:13 +00:00
}
}
2017-12-03 17:08:01 +00:00
2020-02-27 21:05:28 +00:00
// subform house keeping (only if not advance modeling)
if ( 'subform' === $typeName && $field [ 'settings' ] -> store != 6 )
2017-06-18 07:37:48 +00:00
{
2018-04-30 12:06:05 +00:00
// the values must revert to array
2020-11-26 17:33:39 +00:00
$this -> jsonItemBuilderArray [ $nameSingleCode ][] = $name ;
2018-04-30 12:06:05 +00:00
// should the json builder still be added
if ( $subformJsonSwitch )
{
// and insure the if is converted to json
2020-11-26 17:33:39 +00:00
$this -> jsonItemBuilder [ $nameSingleCode ][] = $name ;
2018-04-30 12:06:05 +00:00
// Site settings of each field if needed
2020-03-28 13:34:14 +00:00
$this -> buildSiteFieldData (
2020-11-26 17:33:39 +00:00
$nameSingleCode , $name , 'json' , $typeName
2020-03-28 13:34:14 +00:00
);
2018-04-30 12:06:05 +00:00
}
2017-06-18 07:37:48 +00:00
}
2016-03-01 18:44:13 +00:00
}
2017-02-01 13:17:04 +00:00
// build the data for the export & import methods $typeName === 'repeatable' ||
2020-03-28 13:34:14 +00:00
if ( $dbSwitch
&& (( $typeName === 'checkboxes' || $multiple
|| $field [ 'settings' ] -> store != 0 )
&& ! ComponentbuilderHelper :: checkArray ( $options )))
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
$this -> getItemsMethodEximportStringFixBuilder [ $nameSingleCode ][]
2020-03-28 13:34:14 +00:00
= array ( 'name' => $name , 'type' => $typeName ,
'translation' => false , 'custom' => $custom ,
'method' => $field [ 'settings' ] -> store );
2016-03-01 18:44:13 +00:00
}
// check if field should be added to uikit
2020-11-26 17:33:39 +00:00
$this -> buildSiteFieldData ( $nameSingleCode , $name , 'uikit' , $typeName );
2016-03-01 18:44:13 +00:00
// load the selection translation fix
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkArray ( $options )
&& ( $listSwitch
|| $listJoin )
&& $typeName != 'repeatable'
&& $typeName != 'subform' )
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
$this -> selectionTranslationFixBuilder [ $nameListCode ][ $name ]
2020-03-28 13:34:14 +00:00
= $options ;
2016-03-01 18:44:13 +00:00
}
2020-11-30 03:59:45 +00:00
// main lang filter prefix
$lang_filter_ = $this -> langPrefix . '_FILTER_' ;
2016-03-01 18:44:13 +00:00
// build the sort values
2020-03-28 13:34:14 +00:00
if ( $dbSwitch && ( isset ( $field [ 'sort' ]) && $field [ 'sort' ] == 1 )
&& ( $listSwitch || $listJoin )
&& ( ! $multiple && $typeName != 'checkbox'
&& $typeName != 'checkboxes'
&& $typeName != 'repeatable'
&& $typeName != 'subform' ))
2016-03-01 18:44:13 +00:00
{
2020-11-30 03:59:45 +00:00
// add the language only for new filter option
2020-11-30 15:30:10 +00:00
$filter_name_asc_lang = '' ;
2020-11-30 03:59:45 +00:00
$filter_name_desc_lang = '' ;
if ( isset ( $this -> adminFilterType [ $nameListCode ])
&& $this -> adminFilterType [ $nameListCode ] == 2 )
{
// set the language strings for ascending
$filter_name_asc = $listFieldName . ' ascending' ;
$filter_name_asc_lang = $lang_filter_
. ComponentbuilderHelper :: safeString (
$filter_name_asc , 'U'
);
// and to translation
$this -> setLangContent (
$this -> lang , $filter_name_asc_lang , $filter_name_asc
);
// set the language strings for descending
$filter_name_desc = $listFieldName . ' descending' ;
$filter_name_desc_lang = $lang_filter_
. ComponentbuilderHelper :: safeString (
$filter_name_desc , 'U'
);
// and to translation
$this -> setLangContent (
$this -> lang , $filter_name_desc_lang , $filter_name_desc
);
}
$this -> sortBuilder [ $nameListCode ][] = array ( 'type' => $typeName ,
'code' => $name ,
'lang' => $listLangName ,
'lang_asc' => $filter_name_asc_lang ,
'lang_desc' => $filter_name_desc_lang ,
'custom' => $custom ,
'options' => $options );
2016-03-01 18:44:13 +00:00
}
// build the search values
2018-04-13 15:24:06 +00:00
if ( $dbSwitch && isset ( $field [ 'search' ]) && $field [ 'search' ] == 1 )
2016-03-01 18:44:13 +00:00
{
2020-11-26 17:33:39 +00:00
$_list = ( isset ( $field [ 'list' ]))
2020-03-28 13:34:14 +00:00
? $field [ 'list' ] : 0 ;
2020-11-26 17:33:39 +00:00
$this -> searchBuilder [ $nameListCode ][] = array ( 'type' => $typeName ,
'code' => $name ,
'custom' => $custom ,
'list' => $_list );
2016-03-01 18:44:13 +00:00
}
// build the filter values
2020-11-17 04:06:34 +00:00
if ( $dbSwitch && ( isset ( $field [ 'filter' ]) && $field [ 'filter' ] >= 1 )
2020-03-28 13:34:14 +00:00
&& ( $listSwitch || $listJoin )
&& ( ! $multiple && $typeName != 'checkbox'
&& $typeName != 'checkboxes'
&& $typeName != 'repeatable'
&& $typeName != 'subform' ))
2016-03-01 18:44:13 +00:00
{
2020-11-29 00:00:20 +00:00
// this pains me... but to avoid collusion
$filter_type_code = ComponentbuilderHelper :: safeString (
2020-12-05 06:17:54 +00:00
$nameListCode . 'filter' . $name
2020-11-29 00:00:20 +00:00
);
$filter_type_code = preg_replace ( '/_+/' , '' , $filter_type_code );
$filter_function_name = ComponentbuilderHelper :: safeString (
$name , 'F'
);
2020-11-30 03:59:45 +00:00
// add the language only for new filter option
$filter_name_select_lang = '' ;
if ( isset ( $this -> adminFilterType [ $nameListCode ])
&& $this -> adminFilterType [ $nameListCode ] == 2 )
{
// set the language strings for selection
$filter_name_select = 'Select ' . $listFieldName ;
$filter_name_select_lang = $lang_filter_
. ComponentbuilderHelper :: safeString (
$filter_name_select , 'U'
);
// and to translation
$this -> setLangContent (
$this -> lang , $filter_name_select_lang , $filter_name_select
);
}
2020-11-29 00:00:20 +00:00
// add the filter details
$this -> filterBuilder [ $nameListCode ][] = array (
'id' => ( int ) $field [ 'field' ],
'type' => $typeName ,
'multi' => $field [ 'filter' ],
'code' => $name ,
'label' => $langLabel ,
'lang' => $listLangName ,
2020-11-30 03:59:45 +00:00
'lang_select' => $filter_name_select_lang ,
2020-11-29 00:00:20 +00:00
'database' => $nameSingleCode ,
'function' => $filter_function_name ,
'custom' => $custom ,
'options' => $options ,
'filter_type' => $filter_type_code
);
2016-03-01 18:44:13 +00:00
}
// build the layout
$tabName = '' ;
2020-03-28 13:34:14 +00:00
if ( isset ( $view [ 'settings' ] -> tabs )
&& isset ( $view [ 'settings' ] -> tabs [( int ) $field [ 'tab' ]]))
2016-03-01 18:44:13 +00:00
{
$tabName = $view [ 'settings' ] -> tabs [( int ) $field [ 'tab' ]];
}
2016-06-02 16:18:49 +00:00
elseif (( int ) $field [ 'tab' ] == 15 )
{
// set to publishing tab
$tabName = 'publishing' ;
}
2020-11-26 17:33:39 +00:00
$this -> setLayoutBuilder ( $nameSingleCode , $tabName , $name , $field );
2016-03-01 18:44:13 +00:00
}
2017-12-03 08:02:11 +00:00
2018-03-30 04:41:33 +00:00
/**
* set Custom Field Type File
*
2020-11-26 17:33:39 +00:00
* @ param array $data The field complete data set
* @ param string $nameListCode The list view code name
* @ param string $nameSingleCode The single view code name
2018-03-30 04:41:33 +00:00
*
* @ return void
*
*/
2020-11-26 17:33:39 +00:00
public function setCustomFieldTypeFile ( $data , $nameListCode ,
$nameSingleCode
2020-03-28 13:34:14 +00:00
) {
2018-02-20 21:23:35 +00:00
// make sure it is not already been build or if it is prime
2020-02-12 14:27:32 +00:00
if ( isset ( $data [ 'custom' ]) && isset ( $data [ 'custom' ][ 'extends' ])
2020-03-28 13:34:14 +00:00
&& (( isset ( $data [ 'custom' ][ 'prime_php' ])
&& $data [ 'custom' ][ 'prime_php' ] == 1 )
|| ! isset (
$this -> fileContentDynamic [ 'customfield_' . $data [ 'type' ]]
)
|| ! ComponentbuilderHelper :: checkArray (
$this -> fileContentDynamic [ 'customfield_' . $data [ 'type' ]]
)))
2016-03-01 18:44:13 +00:00
{
2019-07-19 02:17:15 +00:00
// set J prefix
$jprefix = 'J' ;
// check if this field has a dot in field type name
if ( strpos ( $data [ 'type' ], '.' ) !== false )
{
// so we have name spacing in custom field type name
$dotTypeArray = explode ( '.' , $data [ 'type' ]);
// set the J prefix
2019-09-05 21:12:56 +00:00
if ( count (( array ) $dotTypeArray ) > 1 )
2019-07-19 02:17:15 +00:00
{
$jprefix = strtoupper ( array_shift ( $dotTypeArray ));
}
// update the type name now
2020-03-28 13:34:14 +00:00
$data [ 'type' ] = implode ( '' , $dotTypeArray );
2019-07-19 02:17:15 +00:00
$data [ 'custom' ][ 'type' ] = $data [ 'type' ];
}
2016-03-01 18:44:13 +00:00
// set tab and break replacements
$tabBreak = array (
2018-05-26 10:03:08 +00:00
'\t' => $this -> _t ( 1 ),
2017-12-14 23:10:47 +00:00
'\n' => PHP_EOL
2016-03-01 18:44:13 +00:00
);
2018-09-24 14:37:51 +00:00
// set the [[[PLACEHOLDER]]] options
2016-03-01 18:44:13 +00:00
$replace = array (
2020-07-07 15:13:04 +00:00
$this -> bbb . 'JPREFIX' . $this -> ddd => $jprefix ,
2020-03-28 13:34:14 +00:00
$this -> bbb . 'TABLE'
2020-09-15 17:14:53 +00:00
. $this -> ddd => ( isset ( $data [ 'custom' ][ 'table' ]))
? $data [ 'custom' ][ 'table' ] : '' ,
2020-03-28 13:34:14 +00:00
$this -> bbb . 'ID'
2020-09-15 17:14:53 +00:00
. $this -> ddd => ( isset ( $data [ 'custom' ][ 'id' ]))
? $data [ 'custom' ][ 'id' ] : '' ,
2020-03-28 13:34:14 +00:00
$this -> bbb . 'TEXT'
2020-09-15 17:14:53 +00:00
. $this -> ddd => ( isset ( $data [ 'custom' ][ 'text' ]))
? $data [ 'custom' ][ 'text' ] : '' ,
$this -> bbb . 'CODE_TEXT'
. $this -> ddd => ( isset ( $data [ 'code' ], $data [ 'custom' ][ 'text' ]))
? $data [ 'code' ] . '_' . $data [ 'custom' ][ 'text' ] : '' ,
$this -> bbb . 'CODE' . $this -> ddd => ( isset ( $data [ 'code' ]))
? $data [ 'code' ] : '' ,
2020-11-26 17:33:39 +00:00
$this -> bbb . 'view_type' . $this -> ddd => $nameSingleCode
2020-03-28 13:34:14 +00:00
. '_' . $data [ 'type' ],
2020-09-15 17:14:53 +00:00
$this -> bbb . 'type' . $this -> ddd => ( isset ( $data [ 'type' ]))
? $data [ 'type' ] : '' ,
2020-03-28 13:34:14 +00:00
$this -> bbb . 'com_component'
2020-07-07 15:13:04 +00:00
. $this -> ddd => ( isset ( $data [ 'custom' ][ 'component' ])
2020-03-28 13:34:14 +00:00
&& ComponentbuilderHelper :: checkString (
$data [ 'custom' ][ 'component' ]
)) ? ComponentbuilderHelper :: safeString (
$data [ 'custom' ][ 'component' ]
) : 'com_' . $this -> componentCodeName ,
2018-09-24 14:37:51 +00:00
// set the generic values
2020-03-28 13:34:14 +00:00
$this -> bbb . 'component'
2020-07-07 15:13:04 +00:00
. $this -> ddd => $this -> componentCodeName ,
2020-03-28 13:34:14 +00:00
$this -> bbb . 'Component'
2020-07-07 15:13:04 +00:00
. $this -> ddd => $this -> fileContentStatic [ $this -> hhh
2020-03-28 13:34:14 +00:00
. 'Component' . $this -> hhh ],
$this -> bbb . 'view'
2020-07-07 15:13:04 +00:00
. $this -> ddd => ( isset ( $data [ 'custom' ][ 'view' ])
2020-03-28 13:34:14 +00:00
&& ComponentbuilderHelper :: checkString (
$data [ 'custom' ][ 'view' ]
)) ? ComponentbuilderHelper :: safeString (
$data [ 'custom' ][ 'view' ]
2020-11-26 17:33:39 +00:00
) : $nameSingleCode ,
2020-03-28 13:34:14 +00:00
$this -> bbb . 'views'
2020-07-07 15:13:04 +00:00
. $this -> ddd => ( isset ( $data [ 'custom' ][ 'views' ])
2020-03-28 13:34:14 +00:00
&& ComponentbuilderHelper :: checkString (
$data [ 'custom' ][ 'views' ]
)) ? ComponentbuilderHelper :: safeString (
$data [ 'custom' ][ 'views' ]
2020-11-26 17:33:39 +00:00
) : $nameListCode
2016-03-01 18:44:13 +00:00
);
2018-09-24 14:37:51 +00:00
// now set the ###PLACEHOLDER### options
foreach ( $replace as $replacekey => $replacevalue )
2016-03-01 18:44:13 +00:00
{
2018-09-24 14:37:51 +00:00
// update the key value
2020-03-28 13:34:14 +00:00
$replacekey = str_replace (
array ( $this -> bbb , $this -> ddd ),
array ( $this -> hhh , $this -> hhh ), $replacekey
);
2018-09-24 14:37:51 +00:00
// now set the value
$replace [ $replacekey ] = $replacevalue ;
}
2019-02-15 22:03:21 +00:00
// load the global placeholders
if ( ComponentbuilderHelper :: checkArray ( $this -> globalPlaceholders ))
{
2020-03-28 13:34:14 +00:00
foreach (
$this -> globalPlaceholders as $globalPlaceholder =>
$gloabalValue
)
2019-02-15 22:03:21 +00:00
{
$replace [ $globalPlaceholder ] = $gloabalValue ;
}
}
2018-09-24 14:37:51 +00:00
// start loading the field type
$this -> fileContentDynamic [ 'customfield_' . $data [ 'type' ]] = array ();
2020-11-29 00:00:20 +00:00
// JPREFIX <<<DYNAMIC>>>
2020-03-28 13:34:14 +00:00
$this -> fileContentDynamic [ 'customfield_' . $data [ 'type' ]][ $this -> hhh
. 'JPREFIX' . $this -> hhh ]
= $jprefix ;
2018-09-24 14:37:51 +00:00
// Type <<<DYNAMIC>>>
2020-03-28 13:34:14 +00:00
$this -> fileContentDynamic [ 'customfield_' . $data [ 'type' ]][ $this -> hhh
. 'Type' . $this -> hhh ]
= ComponentbuilderHelper :: safeString (
$data [ 'custom' ][ 'type' ], 'F'
);
2018-09-24 14:37:51 +00:00
// type <<<DYNAMIC>>>
2020-03-28 13:34:14 +00:00
$this -> fileContentDynamic [ 'customfield_' . $data [ 'type' ]][ $this -> hhh
. 'type' . $this -> hhh ]
= ComponentbuilderHelper :: safeString ( $data [ 'custom' ][ 'type' ]);
2018-09-24 14:37:51 +00:00
// is this a own custom field
if ( isset ( $data [ 'custom' ][ 'own_custom' ]))
{
// make sure the button option notice is set to notify the developer that the button option is not available in own custom field types
2020-03-28 13:34:14 +00:00
if ( isset ( $data [ 'custom' ][ 'add_button' ])
&& ( $data [ 'custom' ][ 'add_button' ] === 'true'
|| 1 == $data [ 'custom' ][ 'add_button' ]))
2018-09-24 14:37:51 +00:00
{
2018-09-25 20:02:48 +00:00
// set error
2020-03-28 13:34:14 +00:00
$this -> app -> enqueueMessage (
JText :: _ ( '<hr /><h3>Dynamic Button Error</h3>' ), 'Error'
);
$this -> app -> enqueueMessage (
JText :: _ (
'The option to add a dynamic button is not available in <b>own custom field types</b>, you will have to custom code it.'
), 'Error'
);
2018-09-24 14:37:51 +00:00
}
// load another file
$target = array ( 'admin' => 'customfield' );
2020-03-28 13:34:14 +00:00
$this -> buildDynamique (
$target , 'fieldcustom' , $data [ 'custom' ][ 'type' ]
);
2020-07-07 15:13:04 +00:00
// get the extends name
$JFORM_extends = ComponentbuilderHelper :: safeString (
$data [ 'custom' ][ 'extends' ]
);
// JFORM_TYPE_HEADER <<<DYNAMIC>>>
$add_default_header = true ;
$this -> fileContentDynamic [ 'customfield_'
. $data [ 'type' ]][ $this -> hhh . 'JFORM_TYPE_HEADER' . $this -> hhh ]
= " // " . $this -> setLine (
__LINE__
2020-09-15 17:14:53 +00:00
) . " Import the " . $JFORM_extends
. " field type classes needed " ;
2018-09-24 14:37:51 +00:00
// JFORM_extens <<<DYNAMIC>>>
2020-03-28 13:34:14 +00:00
$this -> fileContentDynamic [ 'customfield_'
. $data [ 'type' ]][ $this -> hhh . 'JFORM_extends' . $this -> hhh ]
2020-07-07 15:13:04 +00:00
= $JFORM_extends ;
2018-09-24 14:37:51 +00:00
// JFORM_EXTENDS <<<DYNAMIC>>>
2020-03-28 13:34:14 +00:00
$this -> fileContentDynamic [ 'customfield_'
. $data [ 'type' ]][ $this -> hhh . 'JFORM_EXTENDS' . $this -> hhh ]
= ComponentbuilderHelper :: safeString (
$data [ 'custom' ][ 'extends' ], 'F'
);
2018-09-24 14:37:51 +00:00
// JFORM_TYPE_PHP <<<DYNAMIC>>>
2020-03-28 13:34:14 +00:00
$this -> fileContentDynamic [ 'customfield_'
. $data [ 'type' ]][ $this -> hhh . 'JFORM_TYPE_PHP' . $this -> hhh ]
= PHP_EOL . PHP_EOL . $this -> _t ( 1 ) . " // " . $this -> setLine (
__LINE__
) . " A " . $data [ 'custom' ][ 'own_custom' ] . " Field " ;
2018-09-24 14:37:51 +00:00
// load the other PHP options
foreach ( ComponentbuilderHelper :: $phpFieldArray as $x )
{
// reset the php bucket
$phpBucket = '' ;
2020-08-13 01:03:56 +00:00
// only set if available
2020-03-28 13:34:14 +00:00
if ( isset ( $data [ 'custom' ][ 'php' . $x ])
&& ComponentbuilderHelper :: checkArray (
$data [ 'custom' ][ 'php' . $x ]
))
2016-03-01 18:44:13 +00:00
{
2018-09-24 14:37:51 +00:00
foreach ( $data [ 'custom' ][ 'php' . $x ] as $line => $code )
2016-03-01 18:44:13 +00:00
{
2018-09-24 14:37:51 +00:00
if ( ComponentbuilderHelper :: checkString ( $code ))
{
2020-03-28 13:34:14 +00:00
$phpBucket .= PHP_EOL . $this -> setPlaceholders (
$code , $tabBreak
);
2018-09-24 14:37:51 +00:00
}
2016-03-01 18:44:13 +00:00
}
2020-07-07 15:13:04 +00:00
// check if this is header text
2020-09-15 17:14:53 +00:00
if ( 'HEADER' === $x )
2020-07-07 15:13:04 +00:00
{
$this -> fileContentDynamic [ 'customfield_'
. $data [ 'type' ]][ $this -> hhh . 'JFORM_TYPE_HEADER'
. $this -> hhh ]
.= PHP_EOL . $this -> setPlaceholders (
$phpBucket , $replace
);
// stop default headers from loading
$add_default_header = false ;
}
else
{
// JFORM_TYPE_PHP <<<DYNAMIC>>>
$this -> fileContentDynamic [ 'customfield_'
. $data [ 'type' ]][ $this -> hhh . 'JFORM_TYPE_PHP'
. $this -> hhh ]
.= PHP_EOL . $this -> setPlaceholders (
$phpBucket , $replace
);
}
2016-03-01 18:44:13 +00:00
}
}
2020-07-07 15:13:04 +00:00
// check if we should add default header
if ( $add_default_header )
{
$this -> fileContentDynamic [ 'customfield_'
. $data [ 'type' ]][ $this -> hhh . 'JFORM_TYPE_HEADER'
. $this -> hhh ]
.= PHP_EOL . " jimport('joomla.form.helper'); " ;
$this -> fileContentDynamic [ 'customfield_'
. $data [ 'type' ]][ $this -> hhh . 'JFORM_TYPE_HEADER'
. $this -> hhh ]
.= PHP_EOL . " JFormHelper::loadFieldClass(' "
. $JFORM_extends . " '); " ;
}
// check the the JFormHelper::loadFieldClass(..) was set
elseif ( strpos (
$this -> fileContentDynamic [ 'customfield_'
. $data [ 'type' ]][ $this -> hhh . 'JFORM_TYPE_HEADER'
. $this -> hhh ], 'JFormHelper::loadFieldClass('
) === false )
{
$this -> fileContentDynamic [ 'customfield_'
. $data [ 'type' ]][ $this -> hhh . 'JFORM_TYPE_HEADER'
. $this -> hhh ]
.= PHP_EOL . " JFormHelper::loadFieldClass(' "
. $JFORM_extends . " '); " ;
}
2016-03-01 18:44:13 +00:00
}
else
{
2018-09-24 14:37:51 +00:00
// first build the custom field type file
$target = array ( 'admin' => 'customfield' );
2020-03-28 13:34:14 +00:00
$this -> buildDynamique (
$target , 'field' . $data [ 'custom' ][ 'extends' ],
$data [ 'custom' ][ 'type' ]
);
2018-09-24 14:37:51 +00:00
// make sure the value is reset
$phpCode = '' ;
// now load the php script
2020-03-28 13:34:14 +00:00
if ( isset ( $data [ 'custom' ][ 'php' ])
&& ComponentbuilderHelper :: checkArray (
$data [ 'custom' ][ 'php' ]
))
2016-03-01 18:44:13 +00:00
{
2018-09-24 14:37:51 +00:00
foreach ( $data [ 'custom' ][ 'php' ] as $line => $code )
2016-03-01 18:44:13 +00:00
{
if ( ComponentbuilderHelper :: checkString ( $code ))
{
if ( $line == 1 )
{
2020-03-28 13:34:14 +00:00
$phpCode .= $this -> setPlaceholders (
$code , $tabBreak
);
2016-03-01 18:44:13 +00:00
}
else
{
2020-03-28 13:34:14 +00:00
$phpCode .= PHP_EOL . $this -> _t ( 2 )
. $this -> setPlaceholders ( $code , $tabBreak );
2016-03-01 18:44:13 +00:00
}
}
}
// replace the placholders
2018-09-24 14:37:51 +00:00
$phpCode = $this -> setPlaceholders ( $phpCode , $replace );
2016-03-01 18:44:13 +00:00
}
2018-09-24 14:37:51 +00:00
// catch empty stuff
if ( ! ComponentbuilderHelper :: checkString ( $phpCode ))
2016-03-01 18:44:13 +00:00
{
2018-09-24 14:37:51 +00:00
$phpCode = 'return null;' ;
2016-03-01 18:44:13 +00:00
}
2018-09-24 14:37:51 +00:00
// some house cleaning for users
if ( $data [ 'custom' ][ 'extends' ] === 'user' )
2016-03-01 18:44:13 +00:00
{
2018-09-24 14:37:51 +00:00
// make sure the value is reset
$phpxCode = '' ;
// now load the php xclude script
2020-03-28 13:34:14 +00:00
if ( ComponentbuilderHelper :: checkArray (
$data [ 'custom' ][ 'phpx' ]
))
2018-09-24 14:37:51 +00:00
{
foreach ( $data [ 'custom' ][ 'phpx' ] as $line => $code )
{
if ( ComponentbuilderHelper :: checkString ( $code ))
{
if ( $line == 1 )
{
2020-03-28 13:34:14 +00:00
$phpxCode .= $this -> setPlaceholders (
$code , $tabBreak
);
2018-09-24 14:37:51 +00:00
}
else
{
2020-03-28 13:34:14 +00:00
$phpxCode .= PHP_EOL . $this -> _t ( 2 )
. $this -> setPlaceholders (
$code , $tabBreak
);
2018-09-24 14:37:51 +00:00
}
}
}
// replace the placholders
$phpxCode = $this -> setPlaceholders ( $phpxCode , $replace );
}
// catch empty stuff
if ( ! ComponentbuilderHelper :: checkString ( $phpxCode ))
{
$phpxCode = 'return null;' ;
}
// temp holder for name
$tempName = $data [ 'custom' ][ 'label' ] . ' Group' ;
// set lang
2020-03-28 13:34:14 +00:00
$groupLangName = $this -> langPrefix . '_'
. ComponentbuilderHelper :: safeFieldName (
$tempName , true
);
2018-09-24 14:37:51 +00:00
// add to lang array
2020-03-28 13:34:14 +00:00
$this -> setLangContent (
$this -> lang , $groupLangName ,
ComponentbuilderHelper :: safeString ( $tempName , 'W' )
);
2018-09-24 14:37:51 +00:00
// build the Group Control
$this -> setGroupControl [ $data [ 'type' ]] = $groupLangName ;
// JFORM_GETGROUPS_PHP <<<DYNAMIC>>>
2020-03-28 13:34:14 +00:00
$this -> fileContentDynamic [ 'customfield_'
. $data [ 'type' ]][ $this -> hhh . 'JFORM_GETGROUPS_PHP'
. $this -> hhh ]
= $phpCode ;
2018-09-24 14:37:51 +00:00
// JFORM_GETEXCLUDED_PHP <<<DYNAMIC>>>
2020-03-28 13:34:14 +00:00
$this -> fileContentDynamic [ 'customfield_'
. $data [ 'type' ]][ $this -> hhh . 'JFORM_GETEXCLUDED_PHP'
. $this -> hhh ]
= $phpxCode ;
2016-03-01 18:44:13 +00:00
}
2018-09-24 14:37:51 +00:00
else
{
// JFORM_GETOPTIONS_PHP <<<DYNAMIC>>>
2020-03-28 13:34:14 +00:00
$this -> fileContentDynamic [ 'customfield_'
. $data [ 'type' ]][ $this -> hhh . 'JFORM_GETOPTIONS_PHP'
. $this -> hhh ]
= $phpCode ;
2018-09-24 14:37:51 +00:00
}
// type <<<DYNAMIC>>>
2020-03-28 13:34:14 +00:00
$this -> fileContentDynamic [ 'customfield_'
. $data [ 'type' ]][ $this -> hhh . 'ADD_BUTTON' . $this -> hhh ]
= $this -> setAddButtonToListField ( $data [ 'custom' ]);
2016-03-01 18:44:13 +00:00
}
2018-03-30 04:41:33 +00:00
}
2019-08-22 01:54:47 +00:00
// if this field gets used in plugin or module we should track it so if needed we can copy it over
2020-11-26 17:33:39 +00:00
if (( strpos ( $nameSingleCode , 'P|uG!n' ) !== false
2020-03-28 13:34:14 +00:00
|| strpos (
2020-11-26 17:33:39 +00:00
$nameSingleCode , 'M0dU|3'
2020-03-28 13:34:14 +00:00
) !== false )
&& isset ( $data [ 'custom' ])
&& isset ( $data [ 'custom' ][ 'type' ]))
2019-08-22 01:54:47 +00:00
{
2020-03-28 13:34:14 +00:00
$this -> extentionCustomfields [ $data [ 'type' ]]
= $data [ 'custom' ][ 'type' ];
2019-08-22 01:54:47 +00:00
}
2018-03-30 04:41:33 +00:00
}
2020-11-29 00:00:20 +00:00
/**
* This is just to get the code .
* Don ' t use this to build the field
*
* @ param array $custom The field complete data set
*
* @ return array with the code
*
*/
public function getCustomFieldCode ( $custom )
{
// the code bucket
$code_bucket = array (
'JFORM_TYPE_HEADER' => '' ,
'JFORM_TYPE_PHP' => ''
);
// set tab and break replacements
$tabBreak = array (
'\t' => $this -> _t ( 1 ),
'\n' => PHP_EOL
);
// load the other PHP options
foreach ( ComponentbuilderHelper :: $phpFieldArray as $x )
{
// reset the php bucket
$phpBucket = '' ;
// only set if available
if ( isset ( $custom [ 'php' . $x ])
&& ComponentbuilderHelper :: checkArray (
$custom [ 'php' . $x ]
))
{
foreach ( $custom [ 'php' . $x ] as $line => $code )
{
if ( ComponentbuilderHelper :: checkString ( $code ))
{
$phpBucket .= PHP_EOL . $this -> setPlaceholders (
$code , $tabBreak
);
}
}
// check if this is header text
if ( 'HEADER' === $x )
{
$code_bucket [ 'JFORM_TYPE_HEADER' ]
.= PHP_EOL . $phpBucket ;
}
else
{
// JFORM_TYPE_PHP <<<DYNAMIC>>>
$code_bucket [ 'JFORM_TYPE_PHP' ]
.= PHP_EOL . $phpBucket ;
}
}
}
return $code_bucket ;
}
/**
* set the Filter Field set of a view
*
* @ param string $nameSingleCode The single view name
* @ param string $nameListCode The list view name
*
* @ return string The fields set in xml
*
*/
public function setFieldFilterSet ( & $nameSingleCode , & $nameListCode )
{
// check if this is the above/new filter option
if ( isset ( $this -> adminFilterType [ $nameListCode ])
2020-11-30 03:59:45 +00:00
&& $this -> adminFilterType [ $nameListCode ] == 2 )
2020-11-29 00:00:20 +00:00
{
// we first create the file
$target = array ( 'admin' => 'filter_' . $nameListCode );
$this -> buildDynamique (
$target , 'filter'
);
2020-11-30 03:59:45 +00:00
// the search language string
$lang_search = $this -> langPrefix . '_FILTER_SEARCH' ;
// and to translation
$this -> setLangContent (
$this -> lang , $lang_search , 'Search'
. ComponentbuilderHelper :: safeString ( $nameListCode , 'w' )
);
// the search description language string
$lang_search_desc = $this -> langPrefix . '_FILTER_SEARCH_'
. strtoupper ( $nameListCode );
// and to translation
$this -> setLangContent (
$this -> lang , $lang_search_desc , 'Search the '
. ComponentbuilderHelper :: safeString ( $nameSingleCode , 'w' )
. ' items. Prefix with ID: to search for an item by ID.'
);
2020-11-29 00:00:20 +00:00
// now build the XML
$field_filter_sets = array ();
$field_filter_sets [] = $this -> _t ( 1 ) . '<fields name="filter">' ;
// we first add the search
$field_filter_sets [] = $this -> _t ( 2 ) . '<field' ;
$field_filter_sets [] = $this -> _t ( 3 ) . 'type="text"' ;
$field_filter_sets [] = $this -> _t ( 3 ) . 'name="search"' ;
$field_filter_sets [] = $this -> _t ( 3 ) . 'inputmode="search"' ;
$field_filter_sets [] = $this -> _t ( 3 )
2020-11-30 03:59:45 +00:00
. 'label="' . $lang_search . '"' ;
2020-11-29 00:00:20 +00:00
$field_filter_sets [] = $this -> _t ( 3 )
2020-11-30 03:59:45 +00:00
. 'description="' . $lang_search_desc . '"' ;
2020-11-29 00:00:20 +00:00
$field_filter_sets [] = $this -> _t ( 3 ) . 'hint="JSEARCH_FILTER"' ;
$field_filter_sets [] = $this -> _t ( 2 ) . '/>' ;
// add the published filter if published is not set
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'published' ]))
{
2020-11-30 03:59:45 +00:00
// the published language string
$lang_published = $this -> langPrefix . '_FILTER_PUBLISHED' ;
// and to translation
$this -> setLangContent (
$this -> lang , $lang_published , 'Status'
);
// the published description language string
$lang_published_desc = $this -> langPrefix . '_FILTER_PUBLISHED_'
. strtoupper ( $nameListCode );
// and to translation
$this -> setLangContent (
$this -> lang , $lang_published_desc , 'Status options for '
. ComponentbuilderHelper :: safeString ( $nameListCode , 'w' )
);
2020-11-29 00:00:20 +00:00
$field_filter_sets [] = $this -> _t ( 2 ) . '<field' ;
$field_filter_sets [] = $this -> _t ( 3 ) . 'type="status"' ;
$field_filter_sets [] = $this -> _t ( 3 ) . 'name="published"' ;
$field_filter_sets [] = $this -> _t ( 3 )
2020-11-30 03:59:45 +00:00
. 'label="' . $lang_published . '"' ;
2020-11-29 00:00:20 +00:00
$field_filter_sets [] = $this -> _t ( 3 )
2020-11-30 03:59:45 +00:00
. 'description="' . $lang_published_desc . '"' ;
2020-11-29 00:00:20 +00:00
$field_filter_sets [] = $this -> _t ( 3 )
. 'onchange="this.form.submit();"' ;
$field_filter_sets [] = $this -> _t ( 2 ) . '>' ;
$field_filter_sets [] = $this -> _t ( 3 )
. '<option value="">JOPTION_SELECT_PUBLISHED</option>' ;
$field_filter_sets [] = $this -> _t ( 2 ) . '</field>' ;
}
2020-11-30 15:30:10 +00:00
// add the category if found
if ( isset ( $this -> categoryBuilder [ $nameListCode ])
&& ComponentbuilderHelper :: checkArray (
$this -> categoryBuilder [ $nameListCode ]
)
2021-03-04 06:13:05 +00:00
&& isset ( $this -> categoryBuilder [ $nameListCode ][ 'extension' ])
&& isset ( $this -> categoryBuilder [ $nameListCode ][ 'filter' ])
&& $this -> categoryBuilder [ $nameListCode ][ 'filter' ] >= 1 )
2020-11-30 15:30:10 +00:00
{
$field_filter_sets [] = $this -> _t ( 2 ) . '<field' ;
$field_filter_sets [] = $this -> _t ( 3 ) . 'type="category"' ;
$field_filter_sets [] = $this -> _t ( 3 ) . 'name="category_id"' ;
$field_filter_sets [] = $this -> _t ( 3 )
2020-12-05 06:17:54 +00:00
. 'label="' . $this -> categoryBuilder [ $nameListCode ][ 'name' ]
. '"' ;
2020-11-30 15:30:10 +00:00
$field_filter_sets [] = $this -> _t ( 3 )
. 'description="JOPTION_FILTER_CATEGORY_DESC"' ;
$field_filter_sets [] = $this -> _t ( 3 ) . 'multiple="true"' ;
$field_filter_sets [] = $this -> _t ( 3 )
. 'class="multipleCategories"' ;
$field_filter_sets [] = $this -> _t ( 3 ) . 'extension="'
. $this -> categoryBuilder [ $nameListCode ][ 'extension' ] . '"' ;
$field_filter_sets [] = $this -> _t ( 3 )
. 'onchange="this.form.submit();"' ;
// TODO NOT SURE IF THIS SHOULD BE STATIC
$field_filter_sets [] = $this -> _t ( 3 ) . 'published="0,1,2"' ;
$field_filter_sets [] = $this -> _t ( 2 ) . '/>' ;
}
2020-11-29 00:00:20 +00:00
// add the access filter if this view has access
// and if access manually is not set
if ( isset ( $this -> accessBuilder [ $nameSingleCode ])
&& ComponentbuilderHelper :: checkString (
$this -> accessBuilder [ $nameSingleCode ]
)
&& ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'access' ]))
{
$field_filter_sets [] = $this -> _t ( 2 ) . '<field' ;
$field_filter_sets [] = $this -> _t ( 3 ) . 'type="accesslevel"' ;
$field_filter_sets [] = $this -> _t ( 3 ) . 'name="access"' ;
$field_filter_sets [] = $this -> _t ( 3 )
2020-12-03 00:13:49 +00:00
. 'label="JFIELD_ACCESS_LABEL"' ;
2020-11-29 00:00:20 +00:00
$field_filter_sets [] = $this -> _t ( 3 )
2020-12-03 00:13:49 +00:00
. 'description="JFIELD_ACCESS_DESC"' ;
2020-11-29 00:00:20 +00:00
$field_filter_sets [] = $this -> _t ( 3 ) . 'multiple="true"' ;
$field_filter_sets [] = $this -> _t ( 3 )
. 'class="multipleAccessLevels"' ;
$field_filter_sets [] = $this -> _t ( 3 )
. 'onchange="this.form.submit();"' ;
$field_filter_sets [] = $this -> _t ( 2 ) . '/>' ;
}
// now add the dynamic fields
2020-11-30 03:59:45 +00:00
if ( isset ( $this -> filterBuilder [ $nameListCode ])
&& ComponentbuilderHelper :: checkArray (
$this -> filterBuilder [ $nameListCode ]
))
2020-11-29 00:00:20 +00:00
{
2020-11-30 03:59:45 +00:00
foreach ( $this -> filterBuilder [ $nameListCode ] as $r => & $filter )
2020-11-29 00:00:20 +00:00
{
2020-11-30 03:59:45 +00:00
if ( $filter [ 'type' ] != 'category' )
2020-11-29 00:00:20 +00:00
{
2020-11-30 03:59:45 +00:00
$field_filter_sets [] = $this -> _t ( 2 ) . '<field' ;
// if this is a custom field
if ( ComponentbuilderHelper :: checkArray (
$filter [ 'custom' ]
))
{
// we use the field type from the custom field
$field_filter_sets [] = $this -> _t ( 3 ) . 'type="'
. $filter [ 'type' ] . '"' ;
// set css classname of this field
$filter [ 'class' ] = ucfirst ( $filter [ 'type' ]);
}
else
{
// we use the filter field type that was build
$field_filter_sets [] = $this -> _t ( 3 ) . 'type="'
. $filter [ 'filter_type' ] . '"' ;
// set css classname of this field
$filter [ 'class' ] = ucfirst ( $filter [ 'filter_type' ]);
}
$field_filter_sets [] = $this -> _t ( 3 ) . 'name="'
. $filter [ 'code' ] . '"' ;
$field_filter_sets [] = $this -> _t ( 3 ) . 'label="'
. $filter [ 'label' ] . '"' ;
// if this is a multi field
if ( $filter [ 'multi' ] == 2 )
{
$field_filter_sets [] = $this -> _t ( 3 )
. 'class="multiple'
. $filter [ 'class' ] . '"' ;
$field_filter_sets [] = $this -> _t ( 3 )
. 'multiple="true"' ;
}
else
{
$field_filter_sets [] = $this -> _t ( 3 )
. 'multiple="false"' ;
}
2020-11-29 00:00:20 +00:00
$field_filter_sets [] = $this -> _t ( 3 )
2020-11-30 03:59:45 +00:00
. 'onchange="this.form.submit();"' ;
$field_filter_sets [] = $this -> _t ( 2 ) . '/>' ;
2020-11-29 00:00:20 +00:00
}
}
}
$field_filter_sets [] = $this -> _t ( 2 )
. '<input type="hidden" name="form_submited" value="1"/>' ;
$field_filter_sets [] = $this -> _t ( 1 ) . '</fields>' ;
// now update the file
return implode ( PHP_EOL , $field_filter_sets );
}
return '' ;
}
/**
* set the Filter List set of a view
*
* @ param string $nameSingleCode The single view name
* @ param string $nameListCode The list view name
*
* @ return string The fields set in xml
*
*/
public function setFieldFilterListSet ( & $nameSingleCode , & $nameListCode )
{
2020-11-30 03:59:45 +00:00
// check if this is the above/new filter option
if ( isset ( $this -> adminFilterType [ $nameListCode ])
&& $this -> adminFilterType [ $nameListCode ] == 2 )
{
// keep track of all fields already added
$donelist = array ( 'ordering' => true , 'id' => true );
// now build the XML
$list_sets = array ();
$list_sets [] = $this -> _t ( 1 ) . '<fields name="list">' ;
$list_sets [] = $this -> _t ( 2 ) . '<field' ;
$list_sets [] = $this -> _t ( 3 ) . 'name="fullordering"' ;
$list_sets [] = $this -> _t ( 3 ) . 'type="list"' ;
$list_sets [] = $this -> _t ( 3 )
. 'label="COM_CONTENT_LIST_FULL_ORDERING"' ;
$list_sets [] = $this -> _t ( 3 )
. 'description="COM_CONTENT_LIST_FULL_ORDERING_DESC"' ;
$list_sets [] = $this -> _t ( 3 ) . 'onchange="this.form.submit();"' ;
// add dynamic ordering (Admin view)
$default_ordering = $this -> getListViewDefaultOrdering (
$nameListCode
);
// set the default ordering
$list_sets [] = $this -> _t ( 3 ) . 'default="'
. $default_ordering [ 'name' ] . ' '
. $default_ordering [ 'direction' ] . '"' ;
$list_sets [] = $this -> _t ( 3 ) . 'validate="options"' ;
$list_sets [] = $this -> _t ( 2 ) . '>' ;
$list_sets [] = $this -> _t ( 3 )
. '<option value="">JGLOBAL_SORT_BY</option>' ;
$list_sets [] = $this -> _t ( 3 )
. '<option value="a.ordering ASC">JGRID_HEADING_ORDERING_ASC</option>' ;
$list_sets [] = $this -> _t ( 3 )
. '<option value="a.ordering DESC">JGRID_HEADING_ORDERING_DESC</option>' ;
// add the published filter if published is not set
if ( ! isset ( $this -> fieldsNames [ $nameSingleCode ][ 'published' ]))
{
// add to done list
$donelist [ 'published' ] = true ;
// add to xml :)
$list_sets [] = $this -> _t ( 3 )
. '<option value="a.published ASC">JSTATUS_ASC</option>' ;
$list_sets [] = $this -> _t ( 3 )
. '<option value="a.published DESC">JSTATUS_DESC</option>' ;
}
// add the rest of the set filters
if ( isset ( $this -> sortBuilder [ $nameListCode ])
&& ComponentbuilderHelper :: checkArray (
$this -> sortBuilder [ $nameListCode ]
))
{
foreach ( $this -> sortBuilder [ $nameListCode ] as $filter )
{
if ( ! isset ( $donelist [ $filter [ 'code' ]]))
{
if ( $filter [ 'type' ] === 'category' )
{
$list_sets [] = $this -> _t ( 3 )
. '<option value="category_title ASC">'
. $filter [ 'lang_asc' ] . '</option>' ;
$list_sets [] = $this -> _t ( 3 )
. '<option value="category_title DESC">'
. $filter [ 'lang_desc' ] . '</option>' ;
}
elseif ( ComponentbuilderHelper :: checkArray (
$filter [ 'custom' ]
))
{
$list_sets [] = $this -> _t ( 3 ) . '<option value="'
. $filter [ 'custom' ][ 'db' ] . '.'
. $filter [ 'custom' ][ 'text' ] . ' ASC">'
. $filter [ 'lang_asc' ] . '</option>' ;
$list_sets [] = $this -> _t ( 3 ) . '<option value="'
. $filter [ 'custom' ][ 'db' ] . '.'
. $filter [ 'custom' ][ 'text' ] . ' DESC">'
. $filter [ 'lang_desc' ] . '</option>' ;
}
else
{
$list_sets [] = $this -> _t ( 3 ) . '<option value="a.'
. $filter [ 'code' ] . ' ASC">'
. $filter [ 'lang_asc' ] . '</option>' ;
$list_sets [] = $this -> _t ( 3 ) . '<option value="a.'
. $filter [ 'code' ] . ' DESC">'
. $filter [ 'lang_desc' ] . '</option>' ;
}
// do not add again
$donelist [ $filter [ 'code' ]] = true ;
}
}
}
$list_sets [] = $this -> _t ( 3 )
. '<option value="a.id ASC">JGRID_HEADING_ID_ASC</option>' ;
$list_sets [] = $this -> _t ( 3 )
. '<option value="a.id DESC">JGRID_HEADING_ID_DESC</option>' ;
$list_sets [] = $this -> _t ( 2 ) . '</field>' . PHP_EOL ;
$list_sets [] = $this -> _t ( 2 ) . '<field' ;
$list_sets [] = $this -> _t ( 3 ) . 'name="limit"' ;
$list_sets [] = $this -> _t ( 3 ) . 'type="limitbox"' ;
$list_sets [] = $this -> _t ( 3 ) . 'label="COM_CONTENT_LIST_LIMIT"' ;
$list_sets [] = $this -> _t ( 3 )
. 'description="COM_CONTENT_LIST_LIMIT_DESC"' ;
$list_sets [] = $this -> _t ( 3 ) . 'class="input-mini"' ;
$list_sets [] = $this -> _t ( 3 ) . 'default="25"' ;
$list_sets [] = $this -> _t ( 3 ) . 'onchange="this.form.submit();"' ;
$list_sets [] = $this -> _t ( 2 ) . '/>' ;
$list_sets [] = $this -> _t ( 1 ) . '</fields>' ;
return implode ( PHP_EOL , $list_sets );
}
2020-11-29 00:00:20 +00:00
return '' ;
}
/**
* set Custom Field for Filter
*
* @ param string $getOptions The get options php string / code
* @ param array $filter The filter details
*
* @ return void
*
*/
public function setFilterFieldFile ( $getOptions , $filter )
{
// make sure it is not already been build
if ( ! isset (
$this -> fileContentDynamic [ 'customfilterfield_'
. $filter [ 'filter_type' ]]
)
|| ! ComponentbuilderHelper :: checkArray (
$this -> fileContentDynamic [ 'customfilterfield_'
. $filter [ 'filter_type' ]]
)
)
{
// start loading the field type
$this -> fileContentDynamic [ 'customfilterfield_'
. $filter [ 'filter_type' ]]
= array ();
// JPREFIX <<DYNAMIC>>>
$this -> fileContentDynamic [ 'customfilterfield_'
. $filter [ 'filter_type' ]][ $this -> hhh
. 'JPREFIX' . $this -> hhh ]
= 'J' ;
// Type <<<DYNAMIC>>>
$this -> fileContentDynamic [ 'customfilterfield_'
. $filter [ 'filter_type' ]][ $this -> hhh
. 'Type' . $this -> hhh ]
= ComponentbuilderHelper :: safeString (
$filter [ 'filter_type' ], 'F'
);
// type <<<DYNAMIC>>>
$this -> fileContentDynamic [ 'customfilterfield_'
. $filter [ 'filter_type' ]][ $this -> hhh
. 'type' . $this -> hhh ]
= ComponentbuilderHelper :: safeString ( $filter [ 'filter_type' ]);
// JFORM_GETOPTIONS_PHP <<<DYNAMIC>>>
$this -> fileContentDynamic [ 'customfilterfield_'
. $filter [ 'filter_type' ]][ $this -> hhh . 'JFORM_GETOPTIONS_PHP'
. $this -> hhh ]
= $getOptions ;
// ADD_BUTTON <<<DYNAMIC>>>
$this -> fileContentDynamic [ 'customfilterfield_'
. $filter [ 'filter_type' ]][ $this -> hhh . 'ADD_BUTTON' . $this -> hhh ]
= '' ;
// now build the custom filter field type file
$target = array ( 'admin' => 'customfilterfield' );
$this -> buildDynamique (
$target , 'fieldlist' ,
$filter [ 'filter_type' ]
);
}
}
2018-03-30 04:41:33 +00:00
/**
* set Add Button To List Field ( getInput tweak )
*
2020-03-28 13:34:14 +00:00
* @ param array $fieldData The field custom data
2018-03-30 04:41:33 +00:00
*
* @ return string of getInput class on success empty string otherwise
*
*/
protected function setAddButtonToListField ( $fieldData )
{
// make sure hte view values are set
2020-03-28 13:34:14 +00:00
if ( isset ( $fieldData [ 'add_button' ])
&& ( $fieldData [ 'add_button' ] === 'true'
|| 1 == $fieldData [ 'add_button' ])
&& isset ( $fieldData [ 'view' ])
&& isset ( $fieldData [ 'views' ])
&& ComponentbuilderHelper :: checkString ( $fieldData [ 'view' ])
&& ComponentbuilderHelper :: checkString ( $fieldData [ 'views' ]))
2018-05-11 04:08:14 +00:00
{
2018-08-19 20:15:43 +00:00
// set local component
2019-06-13 21:12:16 +00:00
$local_component = " com_ " . $this -> componentCodeName ;
2018-04-02 19:45:52 +00:00
// check that the component value is set
2020-03-28 13:34:14 +00:00
if ( ! isset ( $fieldData [ 'component' ])
|| ! ComponentbuilderHelper :: checkString (
$fieldData [ 'component' ]
))
2018-04-02 19:45:52 +00:00
{
2018-08-19 20:15:43 +00:00
$fieldData [ 'component' ] = $local_component ;
2018-04-02 19:45:52 +00:00
}
2021-05-04 20:34:23 +00:00
// check that the component has the com_ value in it
2020-03-28 13:34:14 +00:00
if ( strpos ( $fieldData [ 'component' ], 'com_' ) === false
|| strpos (
$fieldData [ 'component' ], '='
) !== false )
2018-04-02 19:45:52 +00:00
{
$fieldData [ 'component' ] = " com_ " . $fieldData [ 'component' ];
}
2018-05-22 19:01:36 +00:00
// make sure the component is update if # # # or [ [ [ component placeholder is used
2020-03-28 13:34:14 +00:00
if ( strpos ( $fieldData [ 'component' ], $this -> hhh ) !== false
|| strpos (
$fieldData [ 'component' ], $this -> bbb
) !== false ) // should not be needed... but
2018-04-02 19:45:52 +00:00
{
2020-03-28 13:34:14 +00:00
$fieldData [ 'component' ] = $this -> setPlaceholders (
$fieldData [ 'component' ], $this -> placeholders
);
2018-04-02 19:45:52 +00:00
}
2019-06-13 21:12:16 +00:00
// get core permissions
$coreLoad = false ;
// add ref tags
$refLoad = true ;
2018-08-19 20:15:43 +00:00
// fall back on the field component
$component = $fieldData [ 'component' ];
// check if we should add ref tags (since it only works well on local views)
if ( $local_component !== $component )
{
// do not add ref tags
$refLoad = false ;
}
2019-06-13 21:12:16 +00:00
// get core permisssions
2018-04-02 19:45:52 +00:00
if ( isset ( $this -> permissionCore [ $fieldData [ 'view' ]]))
{
// get the core permission naming array
$core = $this -> permissionCore [ $fieldData [ 'view' ]];
// set switch to activate easy update
$coreLoad = true ;
}
// start building the add buttons/s
2020-03-28 13:34:14 +00:00
$addButton = array ();
2018-05-26 10:03:08 +00:00
$addButton [] = PHP_EOL . PHP_EOL . $this -> _t ( 1 ) . " /** " ;
$addButton [] = $this -> _t ( 1 ) . " * Override to add new button " ;
$addButton [] = $this -> _t ( 1 ) . " * " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 1 )
. " * @return string The field input markup. " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 1 ) . " * " ;
$addButton [] = $this -> _t ( 1 ) . " * @since 3.2 " ;
$addButton [] = $this -> _t ( 1 ) . " */ " ;
$addButton [] = $this -> _t ( 1 ) . " protected function getInput() " ;
$addButton [] = $this -> _t ( 1 ) . " { " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 2 ) . " // " . $this -> setLine ( __LINE__ )
. " see if we should add buttons " ;
$addButton [] = $this -> _t ( 2 )
. " \$ set_button = \$ this->getAttribute('button'); " ;
$addButton [] = $this -> _t ( 2 ) . " // " . $this -> setLine ( __LINE__ )
. " get html " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 2 ) . " \$ html = parent::getInput(); " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 2 ) . " // " . $this -> setLine ( __LINE__ )
. " if true set button " ;
2019-06-13 21:12:16 +00:00
$addButton [] = $this -> _t ( 2 ) . " if ( \$ set_button === 'true') " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 2 ) . " { " ;
$addButton [] = $this -> _t ( 3 ) . " \$ button = array(); " ;
$addButton [] = $this -> _t ( 3 ) . " \$ script = array(); " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 3 )
. " \$ button_code_name = \$ this->getAttribute('name'); " ;
$addButton [] = $this -> _t ( 3 ) . " // " . $this -> setLine ( __LINE__ )
. " get the input from url " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 3 ) . " \$ app = JFactory::getApplication(); " ;
$addButton [] = $this -> _t ( 3 ) . " \$ jinput = \$ app->input; " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 3 ) . " // " . $this -> setLine ( __LINE__ )
. " get the view name & id " ;
$addButton [] = $this -> _t ( 3 )
. " \$ values = \$ jinput->getArray(array( " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 4 ) . " 'id' => 'int', " ;
2018-08-19 20:15:43 +00:00
$addButton [] = $this -> _t ( 4 ) . " 'view' => 'word' " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 3 ) . " )); " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 3 ) . " // " . $this -> setLine ( __LINE__ )
. " check if new item " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 3 ) . " \$ ref = ''; " ;
$addButton [] = $this -> _t ( 3 ) . " \$ refJ = ''; " ;
2018-04-02 19:45:52 +00:00
if ( $refLoad )
2018-03-30 04:41:33 +00:00
{
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 3 )
. " if (!is_null( \$ values['id']) && strlen( \$ values['view'])) " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 3 ) . " { " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 4 ) . " // " . $this -> setLine ( __LINE__ )
. " only load referral if not new item. " ;
$addButton [] = $this -> _t ( 4 )
. " \$ ref = '&ref=' . \$ values['view'] . '&refid=' . \$ values['id']; " ;
$addButton [] = $this -> _t ( 4 )
. " \$ refJ = '&ref=' . \$ values['view'] . '&refid=' . \$ values['id']; " ;
$addButton [] = $this -> _t ( 4 ) . " // " . $this -> setLine ( __LINE__ )
. " get the return value. " ;
$addButton [] = $this -> _t ( 4 )
. " \$ _uri = (string) JUri::getInstance(); " ;
$addButton [] = $this -> _t ( 4 )
. " \$ _return = urlencode(base64_encode( \$ _uri)); " ;
$addButton [] = $this -> _t ( 4 ) . " // " . $this -> setLine ( __LINE__ )
. " load return value. " ;
$addButton [] = $this -> _t ( 4 )
. " \$ ref .= '&return=' . \$ _return; " ;
$addButton [] = $this -> _t ( 4 )
. " \$ refJ .= '&return=' . \$ _return; " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 3 ) . " } " ;
2018-03-30 04:41:33 +00:00
}
else
{
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 3 )
. " if (!is_null( \$ values['id']) && strlen( \$ values['view'])) " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 3 ) . " { " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 4 ) . " // " . $this -> setLine ( __LINE__ )
. " only load field details if not new item. " ;
$addButton [] = $this -> _t ( 4 )
. " \$ ref = '&field=' . \$ values['view'] . '&field_id=' . \$ values['id']; " ;
$addButton [] = $this -> _t ( 4 )
. " \$ refJ = '&field=' . \$ values['view'] . '&field_id=' . \$ values['id']; " ;
$addButton [] = $this -> _t ( 4 ) . " // " . $this -> setLine ( __LINE__ )
. " get the return value. " ;
$addButton [] = $this -> _t ( 4 )
. " \$ _uri = (string) JUri::getInstance(); " ;
$addButton [] = $this -> _t ( 4 )
. " \$ _return = urlencode(base64_encode( \$ _uri)); " ;
$addButton [] = $this -> _t ( 4 ) . " // " . $this -> setLine ( __LINE__ )
. " load return value. " ;
$addButton [] = $this -> _t ( 4 )
. " \$ ref = '&return=' . \$ _return; " ;
$addButton [] = $this -> _t ( 4 )
. " \$ refJ = '&return=' . \$ _return; " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 3 ) . " } " ;
}
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 3 ) . " // " . $this -> setLine ( __LINE__ )
. " get button label " ;
$addButton [] = $this -> _t ( 3 )
. " \$ button_label = trim( \$ button_code_name); " ;
$addButton [] = $this -> _t ( 3 )
. " \$ button_label = preg_replace('/_+/', ' ', \$ button_label); " ;
$addButton [] = $this -> _t ( 3 )
. " \$ button_label = preg_replace('/ \ s+/', ' ', \$ button_label); " ;
$addButton [] = $this -> _t ( 3 )
. " \$ button_label = preg_replace( \" /[^A-Za-z ]/ \" , '', \$ button_label); " ;
$addButton [] = $this -> _t ( 3 )
. " \$ button_label = ucfirst(strtolower( \$ button_label)); " ;
$addButton [] = $this -> _t ( 3 ) . " // " . $this -> setLine ( __LINE__ )
. " get user object " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 3 ) . " \$ user = JFactory::getUser(); " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 3 ) . " // " . $this -> setLine ( __LINE__ )
. " only add if user allowed to create " . $fieldData [ 'view' ];
2018-03-30 04:41:33 +00:00
// check if the item has permissions.
2020-03-28 13:34:14 +00:00
if ( $coreLoad && isset ( $core [ 'core.create' ])
&& isset ( $this -> permissionBuilder [ 'global' ][ $core [ 'core.create' ]])
&& ComponentbuilderHelper :: checkArray (
$this -> permissionBuilder [ 'global' ][ $core [ 'core.create' ]]
)
&& in_array (
$fieldData [ 'view' ],
$this -> permissionBuilder [ 'global' ][ $core [ 'core.create' ]]
))
2018-03-30 04:41:33 +00:00
{
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 3 ) . " if ( \$ user->authorise(' "
. $core [ 'core.create' ] . " ', ' " . $component
. " ') && \$ app->isAdmin()) // TODO for now only in admin area. " ;
2018-03-30 04:41:33 +00:00
}
else
{
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 3 )
. " if ( \$ user->authorise('core.create', ' " . $component
. " ') && \$ app->isAdmin()) // TODO for now only in admin area. " ;
2018-05-26 10:03:08 +00:00
}
$addButton [] = $this -> _t ( 3 ) . " { " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 4 ) . " // " . $this -> setLine ( __LINE__ )
. " build Create button " ;
$addButton [] = $this -> _t ( 4 )
. " \$ button[] = '<a id= \" '. \$ button_code_name.'Create \" class= \" btn btn-small btn-success hasTooltip \" title= \" '.JText: "
. " :sprintf(' " . $this -> langPrefix
. " _CREATE_NEW_S', \$ button_label).' \" style= \" border-radius: 0px 4px 4px 0px; padding: 4px 4px 4px 7px; \" " ;
$addButton [] = $this -> _t ( 5 ) . " href= \" index.php?option= "
. $fieldData [ 'component' ] . " &view= " . $fieldData [ 'view' ]
. " &layout=edit'. \$ ref.' \" > " ;
$addButton [] = $this -> _t ( 5 )
. " <span class= \" icon-new icon-white \" ></span></a>'; " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 3 ) . " } " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 3 ) . " // " . $this -> setLine ( __LINE__ )
. " only add if user allowed to edit " . $fieldData [ 'view' ];
2018-03-30 04:41:33 +00:00
// check if the item has permissions.
2020-03-28 13:34:14 +00:00
if ( $coreLoad && isset ( $core [ 'core.edit' ])
&& isset ( $this -> permissionBuilder [ 'global' ][ $core [ 'core.edit' ]])
&& ComponentbuilderHelper :: checkArray (
$this -> permissionBuilder [ 'global' ][ $core [ 'core.edit' ]]
)
&& in_array (
$fieldData [ 'view' ],
$this -> permissionBuilder [ 'global' ][ $core [ 'core.edit' ]]
))
2018-03-30 04:41:33 +00:00
{
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 3 ) . " if ( \$ user->authorise(' "
. $core [ 'core.edit' ] . " ', ' " . $component
. " ') && \$ app->isAdmin()) // TODO for now only in admin area. " ;
2018-03-30 04:41:33 +00:00
}
else
{
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 3 )
. " if ( \$ user->authorise('core.edit', ' " . $component
. " ') && \$ app->isAdmin()) // TODO for now only in admin area. " ;
2018-05-26 10:03:08 +00:00
}
$addButton [] = $this -> _t ( 3 ) . " { " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 4 ) . " // " . $this -> setLine ( __LINE__ )
. " build edit button " ;
$addButton [] = $this -> _t ( 4 )
. " \$ button[] = '<a id= \" '. \$ button_code_name.'Edit \" class= \" btn btn-small hasTooltip \" title= \" '.JText: "
. " :sprintf(' " . $this -> langPrefix
. " _EDIT_S', \$ button_label).' \" style= \" display: none; padding: 4px 4px 4px 7px; \" href= \" # \" > " ;
$addButton [] = $this -> _t ( 5 )
. " <span class= \" icon-edit \" ></span></a>'; " ;
$addButton [] = $this -> _t ( 4 ) . " // " . $this -> setLine ( __LINE__ )
. " build script " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 4 ) . " \$ script[] = \" " ;
$addButton [] = $this -> _t ( 5 ) . " jQuery(document).ready(function() { " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 6 )
. " jQuery('#adminForm').on('change', '#jform_ \" . \$ button_code_name. \" ',function (e) { " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 7 ) . " e.preventDefault(); " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 7 )
. " var \" . \$ button_code_name. \" Value = jQuery('#jform_ \" . \$ button_code_name. \" ').val(); " ;
$addButton [] = $this -> _t ( 7 )
. " \" . \$ button_code_name. \" Button( \" . \$ button_code_name. \" Value); " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 6 ) . " }); " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 6 )
. " var \" . \$ button_code_name. \" Value = jQuery('#jform_ \" . \$ button_code_name. \" ').val(); " ;
$addButton [] = $this -> _t ( 6 )
. " \" . \$ button_code_name. \" Button( \" . \$ button_code_name. \" Value); " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 5 ) . " }); " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 5 )
. " function \" . \$ button_code_name. \" Button(value) { " ;
$addButton [] = $this -> _t ( 6 )
. " if (value > 0) { " ; // TODO not ideal since value may not be an (int)
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 7 ) . " // hide the create button " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 7 )
. " jQuery('# \" . \$ button_code_name. \" Create').hide(); " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 7 ) . " // show edit button " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 7 )
. " jQuery('# \" . \$ button_code_name. \" Edit').show(); " ;
$addButton [] = $this -> _t ( 7 ) . " var url = 'index.php?option= "
. $fieldData [ 'component' ] . " &view= " . $fieldData [ 'views' ]
. " &task= " . $fieldData [ 'view' ]
. " .edit&id='+value+' \" . \$ refJ. \" '; " ; // TODO this value may not be the ID
$addButton [] = $this -> _t ( 7 )
. " jQuery('# \" . \$ button_code_name. \" Edit').attr('href', url); " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 6 ) . " } else { " ;
$addButton [] = $this -> _t ( 7 ) . " // show the create button " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 7 )
. " jQuery('# \" . \$ button_code_name. \" Create').show(); " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 7 ) . " // hide edit button " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 7 )
. " jQuery('# \" . \$ button_code_name. \" Edit').hide(); " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 6 ) . " } " ;
$addButton [] = $this -> _t ( 5 ) . " } \" ; " ;
$addButton [] = $this -> _t ( 3 ) . " } " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 3 ) . " // " . $this -> setLine ( __LINE__ )
. " check if button was created for " . $fieldData [ 'view' ]
. " field. " ;
$addButton [] = $this -> _t ( 3 )
. " if (is_array( \$ button) && count( \$ button) > 0) " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 3 ) . " { " ;
2020-03-28 13:34:14 +00:00
$addButton [] = $this -> _t ( 4 ) . " // " . $this -> setLine ( __LINE__ )
. " Load the needed script. " ;
$addButton [] = $this -> _t ( 4 )
. " \$ document = JFactory::getDocument(); " ;
$addButton [] = $this -> _t ( 4 )
. " \$ document->addScriptDeclaration(implode(' ', \$ script)); " ;
$addButton [] = $this -> _t ( 4 ) . " // " . $this -> setLine ( __LINE__ )
. " return the button attached to input field. " ;
$addButton [] = $this -> _t ( 4 )
. " return '<div class= \" input-append \" >' . \$ html . implode('', \$ button).'</div>'; " ;
2018-05-26 10:03:08 +00:00
$addButton [] = $this -> _t ( 3 ) . " } " ;
$addButton [] = $this -> _t ( 2 ) . " } " ;
$addButton [] = $this -> _t ( 2 ) . " return \$ html; " ;
$addButton [] = $this -> _t ( 1 ) . " } " ;
2018-03-30 04:41:33 +00:00
return implode ( PHP_EOL , $addButton );
2016-03-01 18:44:13 +00:00
}
2020-03-28 13:34:14 +00:00
2018-03-30 04:41:33 +00:00
return '' ;
2016-03-01 18:44:13 +00:00
}
2017-12-03 19:12:56 +00:00
/**
* xmlPrettyPrint
*
2020-03-28 13:34:14 +00:00
* @ param SimpleXMLElement $xml The XML element containing a node to be output
* @ param string $nodename node name of the input xml element to print out . this is done to omit the < ? xml ... tag
2017-12-03 19:12:56 +00:00
*
* @ return string XML output
*
*/
2017-12-03 17:08:01 +00:00
public function xmlPrettyPrint ( $xml , $nodename )
{
2020-03-28 13:34:14 +00:00
$dom = dom_import_simplexml ( $xml ) -> ownerDocument ;
2017-12-03 17:08:01 +00:00
$dom -> formatOutput = true ;
2020-03-28 13:34:14 +00:00
$xmlString = $dom -> saveXML (
$dom -> getElementsByTagName ( $nodename ) -> item ( 0 )
);
2017-12-12 22:17:02 +00:00
// make sure Tidy is enabled
if ( $this -> tidy )
{
$tidy = new Tidy ();
2020-03-28 13:34:14 +00:00
$tidy -> parseString (
$xmlString , array ( 'indent' => true ,
'indent-spaces' => 8 , 'input-xml' => true ,
'output-xml' => true ,
'indent-attributes' => true ,
'wrap-attributes' => true , 'wrap' => false )
);
2017-12-12 22:17:02 +00:00
$tidy -> cleanRepair ();
2020-03-28 13:34:14 +00:00
2017-12-14 23:10:47 +00:00
return $this -> xmlIndent (( string ) $tidy , ' ' , 8 , true , false );
2017-12-12 22:17:02 +00:00
}
// set tidy waring atleast once
elseif ( ! $this -> setTidyWarning )
{
// set the warning only once
$this -> setTidyWarning = true ;
// now set the warning
2020-03-28 13:34:14 +00:00
$this -> app -> enqueueMessage (
JText :: _ ( '<hr /><h3>Tidy Error</h3>' ), 'Error'
);
$this -> app -> enqueueMessage (
JText :: _ (
'You must enable the <b>Tidy</b> extension in your php.ini file so we can tidy up your xml! If you need help please <a href="https://github.com/vdm-io/Joomla-Component-Builder/issues/197#issuecomment-351181754" target="_blank">start here</a>!'
), 'Error'
);
2017-12-12 22:17:02 +00:00
}
2020-03-28 13:34:14 +00:00
2017-12-12 22:17:02 +00:00
return $xmlString ;
2017-12-03 19:12:56 +00:00
}
2017-12-14 23:10:47 +00:00
2017-12-03 19:12:56 +00:00
/**
* xmlIndent
*
2020-03-28 13:34:14 +00:00
* @ param string $string The XML input
* @ param string $char Character or characters to use as the repeated indent
* @ param integer $depth number of times to repeat the indent character
* @ param boolean $skipfirst Skip the first line of the input .
* @ param boolean $skiplast Skip the last line of the input ;
2017-12-03 19:12:56 +00:00
*
* @ return string XML output
*
*/
2020-03-28 13:34:14 +00:00
public function xmlIndent ( $string , $char = ' ' , $depth = 0 ,
$skipfirst = false , $skiplast = false
) {
2017-12-03 19:12:56 +00:00
$output = array ();
2020-03-28 13:34:14 +00:00
$lines = explode ( " \n " , $string );
$first = true ;
$last = count ( $lines ) - 1 ;
2017-12-14 23:10:47 +00:00
foreach ( $lines as $i => $line )
2017-12-03 19:12:56 +00:00
{
2020-03-28 13:34:14 +00:00
$output [] = (( $first && $skipfirst ) || $i === $last && $skiplast )
? $line : str_repeat ( $char , $depth ) . $line ;
$first = false ;
2017-12-03 19:12:56 +00:00
}
2020-03-28 13:34:14 +00:00
2017-12-14 23:10:47 +00:00
return implode ( " \n " , $output );
2017-12-03 17:08:01 +00:00
}
2016-03-01 18:44:13 +00:00
}