vendor/alnv/catalog-manager/library/alnv/CatalogFieldBuilder.php line 33

Open in your IDE?
  1. <?php
  2. namespace CatalogManager;
  3. class CatalogFieldBuilder extends CatalogController
  4. {
  5.     protected $strTable '';
  6.     protected $arrCatalog = [];
  7.     protected $blnActive true;
  8.     protected $arrCatalogFields = [];
  9.     public function __construct()
  10.     {
  11.         parent::__construct();
  12.         $this->import('Database');
  13.         $this->import('I18nCatalogTranslator');
  14.     }
  15.     public function initialize($strTablename$blnActive true)
  16.     {
  17.         $this->blnActive $blnActive;
  18.         $this->strTable $strTablename;
  19.         if (TL_MODE == 'BE' && !Toolkit::isEmpty(($GLOBALS['TL_CATALOG_MANAGER']['CATALOG_EXTENSIONS'][$strTablename] ?? ''))) {
  20.             $this->arrCatalog $GLOBALS['TL_CATALOG_MANAGER']['CATALOG_EXTENSIONS'][$strTablename];
  21.             return true;
  22.         } else {
  23.             $objCatalog $this->Database->prepare('SELECT * FROM tl_catalog WHERE `tablename` = ?')->limit(1)->execute($strTablename'1');
  24.             if ($objCatalog !== null) {
  25.                 if ($objCatalog->numRows) {
  26.                     $this->arrCatalog Toolkit::parseCatalog($objCatalog->row());
  27.                     return true;
  28.                 }
  29.             }
  30.         }
  31.         if (Toolkit::isCoreTable($strTablename)) {
  32.             $objDcExtractor = new \CatalogManager\CatalogDcExtractor();
  33.             $objDcExtractor->initialize($strTablename);
  34.             $this->arrCatalog Toolkit::parseCatalog($objDcExtractor->convertDataContainerToCatalog());
  35.             return true;
  36.         }
  37.         return false;
  38.     }
  39.     public function getCatalog()
  40.     {
  41.         return $this->arrCatalog;
  42.     }
  43.     public function getCatalogFields($blnDcFormat true$objModule null$blnExcludeDefaults false$blnVisible true)
  44.     {
  45.         $arrFields = [];
  46.         $blnIsCoreTable Toolkit::isCoreTable($this->strTable);
  47.         if ($blnIsCoreTable) {
  48.             $blnDcFormat true;
  49.             $arrFields $this->getCoreFields($blnDcFormat);
  50.         }
  51.         if (!$blnExcludeDefaults) {
  52.             foreach ($this->getDefaultCatalogFields() as $strFieldname => $arrField) {
  53.                 $arrFields[$strFieldname] = $arrField;
  54.             }
  55.         }
  56.         $objCatalogFields $this->Database->prepare('SELECT * FROM tl_catalog_fields WHERE `pid` = ( SELECT id FROM tl_catalog WHERE `tablename` = ? LIMIT 1 )' . ($blnVisible ' AND invisible != "1" ' '') . 'ORDER BY `sorting`')->execute($this->strTable);
  57.         if ($objCatalogFields !== null) {
  58.             if ($objCatalogFields->numRows) {
  59.                 while ($objCatalogFields->next()) {
  60.                     $arrField $objCatalogFields->row();
  61.                     if ($objCatalogFields->fieldname && in_array($objCatalogFields->fieldnameToolkit::customizeAbleFields())) {
  62.                         $arrOrigin $arrFields[$objCatalogFields->fieldname] ?? null;
  63.                         if (is_null($arrOrigin)) continue;
  64.                         unset($arrFields[$objCatalogFields->fieldname]);
  65.                     }
  66.                     $strFieldname $objCatalogFields->fieldname ?: ('f' $objCatalogFields->id);
  67.                     if (!$strFieldname) {
  68.                         continue;
  69.                     }
  70.                     $arrFields[$strFieldname] = $arrField;
  71.                 }
  72.             }
  73.         }
  74.         $this->arrCatalogFields $this->parseFieldsForDcFormat($arrFields$blnDcFormat$objModule$blnIsCoreTable);
  75.         return $this->arrCatalogFields;
  76.     }
  77.     public function getDcFormatOnly()
  78.     {
  79.         $arrReturn = [];
  80.         foreach ($this->arrCatalogFields as $strFieldname => $arrField) {
  81.             if (!empty($arrField['_dcFormat']) && is_array($arrField['_dcFormat'])) {
  82.                 $arrReturn[$strFieldname] = $arrField['_dcFormat'];
  83.             }
  84.         }
  85.         return $arrReturn;
  86.     }
  87.     public function parseFieldsForDcFormat($arrFields$blnDcFormat$objModule null$blnCoreTable false)
  88.     {
  89.         $arrReturn = [];
  90.         foreach ($arrFields as $strFieldname => $arrField) {
  91.             if (!isset($arrField['_dcFormat'])) $arrField['_dcFormat'] = null;
  92.             if ($blnDcFormat && Toolkit::isDcConformField($arrField) && !$arrField['_dcFormat']) $arrField['_dcFormat'] = $this->setDcFormatAttributes($arrField$objModule);
  93.             if ($arrField == null) continue;
  94.             $arrReturn[$strFieldname] = $this->prepareDefaultFields($arrField$strFieldname$blnCoreTable);
  95.         }
  96.         return $arrReturn;
  97.     }
  98.     public function setDcFormatAttributes($arrField$objModule null)
  99.     {
  100.         $strTlClass $arrField['tl_class'] ?? '';
  101.         $strCSSBackendClasses Toolkit::deserializeAndImplode($strTlClass' ');
  102.         if (Toolkit::isEmpty($strCSSBackendClasses)) $strCSSBackendClasses 'clr';
  103.         $arrDcField = [
  104.             'label' => $this->I18nCatalogTranslator->get('field'$arrField['fieldname'], ['table' => $this->strTable'title' => ($arrField['label'] ?? ''), 'description' => ($arrField['description'] ?? '')]),
  105.             'inputType' => Toolkit::setDcConformInputType($arrField['type']),
  106.             'eval' => [
  107.                 'tl_class' => $strCSSBackendClasses,
  108.                 'unique' => Toolkit::getBooleanByValue($arrField['isUnique'] ?? ''),
  109.                 'nospace' => Toolkit::getBooleanByValue($arrField['nospace'] ?? ''),
  110.                 'mandatory' => Toolkit::getBooleanByValue($arrField['mandatory'] ?? ''),
  111.                 'doNotCopy' => Toolkit::getBooleanByValue($arrField['doNotCopy'] ?? ''),
  112.                 'allowHtml' => Toolkit::getBooleanByValue($arrField['allowHtml'] ?? ''),
  113.                 'doNotSaveEmpty' => Toolkit::getBooleanByValue($arrField['doNotSaveEmpty'] ?? ''),
  114.                 'spaceToUnderscore' => Toolkit::getBooleanByValue($arrField['spaceToUnderscore'] ?? ''),
  115.             ],
  116.             'sorting' => Toolkit::getBooleanByValue($arrField['sort'] ?? ''),
  117.             'search' => Toolkit::getBooleanByValue($arrField['search'] ?? ''),
  118.             'filter' => Toolkit::getBooleanByValue($arrField['filter'] ?? ''),
  119.             'exclude' => Toolkit::getBooleanByValue($arrField['exclude'] ?? ''),
  120.             'sql' => Toolkit::getSqlDataType($arrField['statement'] ?? ''),
  121.         ];
  122.         if ($arrField['trailingSlash'] ?? '') {
  123.             $arrDcField['eval']['trailingSlash'] = true;
  124.         }
  125.         if ($arrField['statement'] == 'iNotNull10') {
  126.             $arrDcField['eval']['nullIfEmpty'] = true;
  127.         }
  128.         if ($arrField['type'] == 'date' && Toolkit::isEmpty($arrField['flag'])) {
  129.             $arrField['flag'] = 6;
  130.         }
  131.         if (!Toolkit::isEmpty($arrField['flag'] ?? '')) {
  132.             $arrDcField['flag'] = $arrField['flag'];
  133.         }
  134.         $arrDcField['_cssID'] = Toolkit::deserialize($arrField['cssID'] ?? '');
  135.         $arrDcField['_placeholder'] = $arrField['placeholder'] ?? '';
  136.         $arrDcField['_disableFEE'] = $arrField['disableFEE'] ?? '';
  137.         $arrDcField['_fieldname'] = $arrField['fieldname'] ?? '';
  138.         $arrDcField['_palette'] = $arrField['_palette'] ?? '';
  139.         $arrDcField['_type'] = $arrField['type'] ?? '';
  140.         if (isset($arrField['value']) && Toolkit::isDefined($arrField['value']) && is_string($arrField['value'])) {
  141.             $strDefaultValue \Controller::replaceInsertTags($arrField['value']);
  142.             if (Toolkit::isDefined($strDefaultValue)) {
  143.                 $arrDcField['default'] = $strDefaultValue;
  144.             }
  145.         }
  146.         if (isset($arrField['useIndex']) && Toolkit::isDefined($arrField['useIndex'])) {
  147.             $arrDcField['eval']['doNotCopy'] = true;
  148.             if ($arrField['useIndex'] == 'unique'$arrDcField['eval']['unique'] = true;
  149.         }
  150.         if (isset($this->arrCatalog['tablename']) && $this->arrCatalog['tablename'] == 'tl_member') {
  151.             $arrDcField['eval']['feEditable'] = true;
  152.             $arrDcField['eval']['feViewable'] = true;
  153.             $arrDcField['eval']['feGroup'] = 'personal';
  154.         }
  155.         switch ($arrField['type']) {
  156.             case 'text':
  157.                 $arrDcField Text::generate($arrDcField$arrFieldnull$this->blnActive);
  158.                 break;
  159.             case 'date':
  160.                 $arrDcField DateInput::generate($arrDcField$arrField);
  161.                 break;
  162.             case 'hidden':
  163.                 $arrDcField Hidden::generate($arrDcField$arrField);
  164.                 break;
  165.             case 'number':
  166.                 $arrDcField Number::generate($arrDcField$arrField);
  167.                 break;
  168.             case 'textarea':
  169.                 $arrDcField Textarea::generate($arrDcField$arrField);
  170.                 break;
  171.             case 'select':
  172.                 $arrDcField Select::generate($arrDcField$arrField$objModule$this->blnActive);
  173.                 break;
  174.             case 'radio':
  175.                 $arrDcField Radio::generate($arrDcField$arrField$objModule$this->blnActive);
  176.                 break;
  177.             case 'checkbox':
  178.                 $arrDcField Checkbox::generate($arrDcField$arrField$objModule$this->blnActive);
  179.                 break;
  180.             case 'upload':
  181.                 $arrDcField Upload::generate($arrDcField$arrField);
  182.                 break;
  183.             case 'message':
  184.                 $arrDcField MessageInput::generate($arrDcField$arrField);
  185.                 break;
  186.             case 'dbColumn':
  187.                 $arrDcField DbColumn::generate($arrDcField$arrField);
  188.                 break;
  189.         }
  190.         if (isset($GLOBALS['TL_HOOKS']['catalogManagerSetDcFormatAttributes']) && is_array($GLOBALS['TL_HOOKS']['catalogManagerSetDcFormatAttributes'])) {
  191.             foreach ($GLOBALS['TL_HOOKS']['catalogManagerSetDcFormatAttributes'] as $arrCallback) {
  192.                 if (is_array($arrCallback)) {
  193.                     $this->import($arrCallback[0]);
  194.                     $arrDcField $this->{$arrCallback[0]}->{$arrCallback[1]}($arrDcField$arrField$this->strTable$this->arrCatalog$this);
  195.                 }
  196.             }
  197.         }
  198.         return $arrDcField;
  199.     }
  200.     public function shouldBeUsedParentTable()
  201.     {
  202.         if (!isset($this->arrCatalog['pTable']) || !$this->arrCatalog['pTable']) {
  203.             return false;
  204.         }
  205.         if (isset($this->arrCatalog['isBackendModule']) && $this->arrCatalog['isBackendModule']) {
  206.             return false;
  207.         }
  208.         if (!in_array($this->arrCatalog['mode'], Toolkit::$arrRequireSortingModes)) {
  209.             return false;
  210.         }
  211.         return true;
  212.     }
  213.     protected function getDefaultCatalogFields($arrIncludeOnly = [])
  214.     {
  215.         $arrFields = [
  216.             'id' => [
  217.                 'type' => '',
  218.                 'sort' => '1',
  219.                 'search' => '1',
  220.                 'invisible' => '',
  221.                 'fieldname' => 'id',
  222.                 'statement' => 'i10',
  223.                 'disableFEE' => true,
  224.                 'title' => &$GLOBALS['TL_LANG']['catalog_manager']['fields']['id'][0],
  225.                 'placeholder' => &$GLOBALS['TL_LANG']['catalog_manager']['fields']['id'][0]
  226.             ],
  227.             'tstamp' => [
  228.                 'flag' => 6,
  229.                 'type' => '',
  230.                 'sort' => '1',
  231.                 'invisible' => '',
  232.                 '_isDate' => true,
  233.                 'statement' => 'i10',
  234.                 'disableFEE' => true,
  235.                 'fieldname' => 'tstamp',
  236.                 'title' => &$GLOBALS['TL_LANG']['catalog_manager']['fields']['tstamp'][0],
  237.                 'placeholder' => &$GLOBALS['TL_LANG']['catalog_manager']['fields']['tstamp'][0]
  238.             ],
  239.             'pid' => [
  240.                 'type' => '',
  241.                 'invisible' => '',
  242.                 'disableFEE' => true,
  243.                 'statement' => 'i10',
  244.                 'fieldname' => 'pid',
  245.                 'placeholder' => &$GLOBALS['TL_LANG']['catalog_manager']['fields']['pid'][0]
  246.             ],
  247.             'sorting' => [
  248.                 'type' => '',
  249.                 'invisible' => '',
  250.                 'statement' => 'i10',
  251.                 'disableFEE' => true,
  252.                 'fieldname' => 'sorting',
  253.                 'placeholder' => &$GLOBALS['TL_LANG']['catalog_manager']['fields']['sorting'][0]
  254.             ],
  255.             'title' => [
  256.                 'sort' => '1',
  257.                 'search' => '1',
  258.                 'type' => 'text',
  259.                 'exclude' => '1',
  260.                 'invisible' => '',
  261.                 'maxlength' => '255',
  262.                 'statement' => 'c256',
  263.                 'fieldname' => 'title',
  264.                 '_palette' => 'general_legend',
  265.                 'tl_class' => serialize(['w50']),
  266.                 'cssID' => serialize(['''title']),
  267.                 'dynValue' => $this->arrCatalog['titleDynValue'] ?? '',
  268.                 'mandatory' => isset($this->arrCatalog['titleIsMandatory']) && $this->arrCatalog['titleIsMandatory'] ? '1' '',
  269.                 'title' => &$GLOBALS['TL_LANG']['catalog_manager']['fields']['title'][0],
  270.                 'placeholder' => &$GLOBALS['TL_LANG']['catalog_manager']['fields']['title'][0]
  271.             ],
  272.             'alias' => [
  273.                 'search' => '1',
  274.                 'unique' => '1',
  275.                 'type' => 'text',
  276.                 'exclude' => '1',
  277.                 'rgxp' => 'alias',
  278.                 'invisible' => '',
  279.                 'doNotCopy' => '1',
  280.                 'maxlength' => '128',
  281.                 'statement' => 'c128',
  282.                 'fieldname' => 'alias',
  283.                 '_palette' => 'general_legend',
  284.                 'tl_class' => serialize(['w50']),
  285.                 'cssID' => serialize(['''alias']),
  286.                 'title' => &$GLOBALS['TL_LANG']['catalog_manager']['fields']['alias'][0],
  287.                 'placeholder' => &$GLOBALS['TL_LANG']['catalog_manager']['fields']['alias'][0]
  288.             ],
  289.             'invisible' => [
  290.                 'exclude' => '1',
  291.                 'multiple' => '',
  292.                 'invisible' => '',
  293.                 'statement' => 'c1',
  294.                 'placeholder' => '',
  295.                 'type' => 'checkbox',
  296.                 'fieldname' => 'invisible',
  297.                 '_palette' => 'invisible_legend',
  298.                 'cssID' => serialize(['''invisible']),
  299.                 'title' => &$GLOBALS['TL_LANG']['catalog_manager']['fields']['invisible'][0],
  300.             ],
  301.             'start' => [
  302.                 'flag' => 6,
  303.                 'sort' => '1',
  304.                 'type' => 'date',
  305.                 'exclude' => '1',
  306.                 'rgxp' => 'datim',
  307.                 'invisible' => '',
  308.                 'datepicker' => '1',
  309.                 'statement' => 'c16',
  310.                 'fieldname' => 'start',
  311.                 '_palette' => 'invisible_legend',
  312.                 'cssID' => serialize(['''start']),
  313.                 'tl_class' => serialize(['w50 wizard']),
  314.                 'title' => &$GLOBALS['TL_LANG']['catalog_manager']['fields']['start'][0],
  315.                 'placeholder' => &$GLOBALS['TL_LANG']['catalog_manager']['fields']['start'][0]
  316.             ],
  317.             'stop' => [
  318.                 'flag' => 6,
  319.                 'sort' => '1',
  320.                 'type' => 'date',
  321.                 'exclude' => '1',
  322.                 'rgxp' => 'datim',
  323.                 'invisible' => '',
  324.                 'datepicker' => '1',
  325.                 'statement' => 'c16',
  326.                 'fieldname' => 'stop',
  327.                 '_palette' => 'invisible_legend',
  328.                 'cssID' => serialize(['''stop']),
  329.                 'tl_class' => serialize(['w50 wizard']),
  330.                 'title' => &$GLOBALS['TL_LANG']['catalog_manager']['fields']['stop'][0],
  331.                 'placeholder' => &$GLOBALS['TL_LANG']['catalog_manager']['fields']['stop'][0]
  332.             ]
  333.         ];
  334.         $this->arrCatalog['mode'] = $this->arrCatalog['mode'] ?? '';
  335.         if ((!isset($this->arrCatalog['pTable']) || !$this->arrCatalog['pTable']) && !in_array($this->arrCatalog['mode'], Toolkit::$arrRequireSortingModes)) {
  336.             unset($arrFields['pid']);
  337.         }
  338.         if (isset($this->arrCatalog['operations']) && is_array($this->arrCatalog['operations'])) {
  339.             if (!in_array('invisible'$this->arrCatalog['operations'])) {
  340.                 unset($arrFields['stop']);
  341.                 unset($arrFields['start']);
  342.                 unset($arrFields['invisible']);
  343.             }
  344.             if (!in_array($this->arrCatalog['mode'], Toolkit::$arrRequireSortingModes) && !in_array('cut'$this->arrCatalog['operations'])) {
  345.                 unset($arrFields['sorting']);
  346.             }
  347.         }
  348.         if (isset($this->arrCatalog['type']) && $this->arrCatalog['type'] == 'modifier') {
  349.             unset($arrFields['id']);
  350.             unset($arrFields['pid']);
  351.             unset($arrFields['stop']);
  352.             unset($arrFields['start']);
  353.             unset($arrFields['tstamp']);
  354.             unset($arrFields['sorting']);
  355.             unset($arrFields['invisible']);
  356.         }
  357.         return $arrFields;
  358.     }
  359.     protected function prepareDefaultFields($arrField$strFieldname$blnCoreTable false)
  360.     {
  361.         if ($blnCoreTable) {
  362.             return $arrField;
  363.         }
  364.         switch ($strFieldname) {
  365.             case 'tstamp' :
  366.             case 'id' :
  367.                 $arrField['_dcFormat'] = [
  368.                     'sorting' => $arrField['_dcFormat']['sorting'] ?? false,
  369.                     'search' => $arrField['_dcFormat']['search'] ?? false,
  370.                     'label' => $arrField['_dcFormat']['label'] ?? [],
  371.                     'flag' => $arrField['_dcFormat']['flag'] ?? null,
  372.                     'sql' => $arrField['_dcFormat']['sql'] ?? ''
  373.                 ];
  374.                 return $arrField;
  375.             case 'pid' :
  376.                 if ($this->arrCatalog['pTable']) {
  377.                     $arrField['_dcFormat'] = [
  378.                         'label' => ($arrField['_dcFormat']['label']??[]),
  379.                         'sql' => "int(10) unsigned NOT NULL default '0'",
  380.                         'foreignKey' => sprintf('%s.id'$this->arrCatalog['pTable']),
  381.                         'relation' => [
  382.                             'type' => 'belongsTo',
  383.                             'load' => 'eager'
  384.                         ]
  385.                     ];
  386.                     return $arrField;
  387.                 }
  388.                 break;
  389.             case 'sorting' :
  390.                 if (in_array($this->arrCatalog['mode'], Toolkit::$arrRequireSortingModes)) {
  391.                     $arrField['_dcFormat'] = [
  392.                         'label' => ($arrField['_dcFormat']['label']??[]),
  393.                         'sql' => "int(10) unsigned NOT NULL default '0'"
  394.                     ];
  395.                     return $arrField;
  396.                 }
  397.                 break;
  398.             case 'alias':
  399.                 if (TL_MODE == 'FE') return $arrField;
  400.                 $arrField['_dcFormat']['save_callback'] = [function ($varValue\DataContainer $dc) {
  401.                     $objDcCallbacks = new DcCallbacks();
  402.                     return $objDcCallbacks->generateAlias($varValue$dc'title'$this->strTable);
  403.                 }];
  404.                 return $arrField;
  405.         }
  406.         return $arrField;
  407.     }
  408.     protected function getCoreFields($blnDcFormat)
  409.     {
  410.         \Controller::loadLanguageFile($this->strTable);
  411.         \Controller::loadDataContainer($this->strTable);
  412.         $arrReturn = [];
  413.         $arrFields $GLOBALS['TL_DCA'][$this->strTable]['fields'];
  414.         if (!empty($arrFields) && is_array($arrFields)) {
  415.             foreach ($arrFields as $strFieldname => $arrField) {
  416.                 if (!isset($arrField['eval'])) $arrField['eval'] = [];
  417.                 $arrOptions $arrField['options'] ?? [];
  418.                 $strType Toolkit::setCatalogConformInputType($arrField);
  419.                 $arrReturn[$strFieldname] = [
  420.                     '_core' => true,
  421.                     'type' => $strType,
  422.                     'fieldname' => $strFieldname,
  423.                     '_palette' => 'general_legend',
  424.                     'title' => $arrField['label'][0] ?? '',
  425.                     'rgxp' => $arrField['eval']['rgxp'] ?? '',
  426.                     'description' => $arrField['label'][1] ?? '',
  427.                     'exclude' => (isset($arrField['exclude']) && $arrField['exclude'] ? '1' ''),
  428.                     'cssID' => serialize([''$strFieldname]),
  429.                     '_dcFormat' => $blnDcFormat $arrField null,
  430.                     'tl_class' => $arrField['eval']['tl_class'] ?? '',
  431.                     'multiple' => (isset($arrField['eval']['multiple']) && $arrField['eval']['multiple'] ? '1' ''),
  432.                     'datepicker' => (isset($arrField['eval']['datepicker']) && $arrField['eval']['datepicker'] ? '1' '')
  433.                 ];
  434.                 if (!Toolkit::isEmpty($arrField['foreignKey'] ?? '')) {
  435.                     $arrForeignKeys explode('.'$arrField['foreignKey']);
  436.                     $arrReturn[$strFieldname]['optionsType'] = 'useForeignKey';
  437.                     $arrReturn[$strFieldname]['dbTable'] = $arrForeignKeys[0] ?: '';
  438.                     $arrReturn[$strFieldname]['dbTableValue'] = $arrForeignKeys[1] ?: '';
  439.                 }
  440.                 if (is_array($arrOptions) && !empty($arrOptions)) {
  441.                     $arrKeyValue Toolkit::flatter($arrOptions);
  442.                     $arrReturn[$strFieldname]['optionsType'] = 'useOptions';
  443.                     $arrReturn[$strFieldname]['options'] = serialize($arrKeyValue);
  444.                 }
  445.                 if ($strType == 'upload') {
  446.                     $strFileType $arrField['_fileType'] ?? '';
  447.                     $strExtensions $arrField['eval']['extensions'] ?? '';
  448.                     if ($strExtensions && !$strFileType) {
  449.                         $arrExtensions explode(','$strExtensions);
  450.                         if (empty(array_intersect($arrExtensionsToolkit::$arrFileExtensions))) {
  451.                             $strFileType = (isset($arrField['eval']['multiple']) && $arrField['eval']['multiple'] ? 'gallery' 'image');
  452.                         } else {
  453.                             $strFileType = (isset($arrField['eval']['multiple']) && $arrField['eval']['multiple'] ? 'files' 'file');
  454.                         }
  455.                     }
  456.                     $arrReturn[$strFieldname]['fileType'] = $strFileType;
  457.                     $arrReturn[$strFieldname]['extensions'] = $strExtensions;
  458.                     $arrReturn[$strFieldname]['filesOnly'] = ($arrField['eval']['filesOnly']??'') ? '1' '';
  459.                 }
  460.             }
  461.         }
  462.         return $arrReturn;
  463.     }
  464. }