jcb-compiler/src/20cf1825-29d0-4c6c-8fe9-a1e.../code.php

389 lines
12 KiB
PHP

<?php
/**
* @package Joomla.Component.Builder
*
* @created 4th September, 2022
* @author Llewellyn van der Merwe <https://dev.vdm.io>
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace VDM\Joomla\Componentbuilder\Compiler\Creator;
use VDM\Joomla\Componentbuilder\Compiler\Config;
use VDM\Joomla\Componentbuilder\Compiler\Component;
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\EventInterface as Event;
use VDM\Joomla\Componentbuilder\Compiler\Placeholder;
use VDM\Joomla\Componentbuilder\Compiler\Component\Placeholder as CPlaceholder;
use VDM\Joomla\Componentbuilder\Compiler\Builder\ExtensionsParams;
use VDM\Joomla\Componentbuilder\Compiler\Builder\ConfigFieldsetsCustomfield as Customfield;
use VDM\Joomla\Componentbuilder\Compiler\Creator\FieldAsString;
use VDM\Joomla\Componentbuilder\Compiler\Creator\ConfigFieldsetsGlobal;
use VDM\Joomla\Componentbuilder\Compiler\Creator\ConfigFieldsetsSiteControl;
use VDM\Joomla\Componentbuilder\Compiler\Creator\ConfigFieldsetsGroupControl;
use VDM\Joomla\Componentbuilder\Compiler\Creator\ConfigFieldsetsUikit;
use VDM\Joomla\Componentbuilder\Compiler\Creator\ConfigFieldsetsGooglechart;
use VDM\Joomla\Componentbuilder\Compiler\Creator\ConfigFieldsetsEmailHelper;
use VDM\Joomla\Componentbuilder\Compiler\Creator\ConfigFieldsetsEncryption;
use VDM\Joomla\Componentbuilder\Compiler\Creator\ConfigFieldsetsCustomfield;
use VDM\Joomla\Utilities\StringHelper;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Placefix;
use VDM\Joomla\Utilities\GetHelper;
use VDM\Joomla\Utilities\ArrayHelper;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line;
use VDM\Joomla\Utilities\MathHelper;
/**
* Config Fieldsets Creator Class
*
* @since 3.2.0
*/
final class ConfigFieldsets
{
/**
* The Config Class.
*
* @var Config
* @since 3.2.0
*/
protected Config $config;
/**
* The Component Class.
*
* @var Component
* @since 3.2.0
*/
protected Component $component;
/**
* The EventInterface Class.
*
* @var Event
* @since 3.2.0
*/
protected Event $event;
/**
* The Placeholder Class.
*
* @var Placeholder
* @since 3.2.0
*/
protected Placeholder $placeholder;
/**
* The Placeholder Class.
*
* @var CPlaceholder
* @since 3.2.0
*/
protected CPlaceholder $cplaceholder;
/**
* The ExtensionsParams Class.
*
* @var ExtensionsParams
* @since 3.2.0
*/
protected ExtensionsParams $extensionsparams;
/**
* The ConfigFieldsetsCustomfield Class.
*
* @var Customfield
* @since 3.2.0
*/
protected Customfield $customfield;
/**
* The FieldAsString Class.
*
* @var FieldAsString
* @since 3.2.0
*/
protected FieldAsString $fieldasstring;
/**
* The ConfigFieldsetsGlobal Class.
*
* @var ConfigFieldsetsGlobal
* @since 3.2.0
*/
protected ConfigFieldsetsGlobal $configfieldsetsglobal;
/**
* The ConfigFieldsetsSiteControl Class.
*
* @var ConfigFieldsetsSiteControl
* @since 3.2.0
*/
protected ConfigFieldsetsSiteControl $configfieldsetssitecontrol;
/**
* The ConfigFieldsetsGroupControl Class.
*
* @var ConfigFieldsetsGroupControl
* @since 3.2.0
*/
protected ConfigFieldsetsGroupControl $configfieldsetsgroupcontrol;
/**
* The ConfigFieldsetsUikit Class.
*
* @var ConfigFieldsetsUikit
* @since 3.2.0
*/
protected ConfigFieldsetsUikit $configfieldsetsuikit;
/**
* The ConfigFieldsetsGooglechart Class.
*
* @var ConfigFieldsetsGooglechart
* @since 3.2.0
*/
protected ConfigFieldsetsGooglechart $configfieldsetsgooglechart;
/**
* The ConfigFieldsetsEmailHelper Class.
*
* @var ConfigFieldsetsEmailHelper
* @since 3.2.0
*/
protected ConfigFieldsetsEmailHelper $configfieldsetsemailhelper;
/**
* The ConfigFieldsetsEncryption Class.
*
* @var ConfigFieldsetsEncryption
* @since 3.2.0
*/
protected ConfigFieldsetsEncryption $configfieldsetsencryption;
/**
* The ConfigFieldsetsCustomfield Class.
*
* @var ConfigFieldsetsCustomfield
* @since 3.2.0
*/
protected ConfigFieldsetsCustomfield $configfieldsetscustomfield;
/**
* Constructor.
*
* @param Config $config The Config Class.
* @param Component $component The Component Class.
* @param Event $event The EventInterface Class.
* @param Placeholder $placeholder The Placeholder Class.
* @param CPlaceholder $cplaceholder The Placeholder Class.
* @param ExtensionsParams $extensionsparams The ExtensionsParams Class.
* @param Customfield $customfield The ConfigFieldsetsCustomfield Class.
* @param FieldAsString $fieldasstring The FieldAsString Class.
* @param ConfigFieldsetsGlobal $configfieldsetsglobal The ConfigFieldsetsGlobal Class.
* @param ConfigFieldsetsSiteControl $configfieldsetssitecontrol The ConfigFieldsetsSiteControl Class.
* @param ConfigFieldsetsGroupControl $configfieldsetsgroupcontrol The ConfigFieldsetsGroupControl Class.
* @param ConfigFieldsetsUikit $configfieldsetsuikit The ConfigFieldsetsUikit Class.
* @param ConfigFieldsetsGooglechart $configfieldsetsgooglechart The ConfigFieldsetsGooglechart Class.
* @param ConfigFieldsetsEmailHelper $configfieldsetsemailhelper The ConfigFieldsetsEmailHelper Class.
* @param ConfigFieldsetsEncryption $configfieldsetsencryption The ConfigFieldsetsEncryption Class.
* @param ConfigFieldsetsCustomfield $configfieldsetscustomfield The ConfigFieldsetsCustomfield Class.
*
* @since 3.2.0
*/
public function __construct(Config $config, Component $component, Event $event,
Placeholder $placeholder, CPlaceholder $cplaceholder,
ExtensionsParams $extensionsparams,
Customfield $customfield, FieldAsString $fieldasstring,
ConfigFieldsetsGlobal $configfieldsetsglobal,
ConfigFieldsetsSiteControl $configfieldsetssitecontrol,
ConfigFieldsetsGroupControl $configfieldsetsgroupcontrol,
ConfigFieldsetsUikit $configfieldsetsuikit,
ConfigFieldsetsGooglechart $configfieldsetsgooglechart,
ConfigFieldsetsEmailHelper $configfieldsetsemailhelper,
ConfigFieldsetsEncryption $configfieldsetsencryption,
ConfigFieldsetsCustomfield $configfieldsetscustomfield)
{
$this->config = $config;
$this->component = $component;
$this->event = $event;
$this->placeholder = $placeholder;
$this->cplaceholder = $cplaceholder;
$this->extensionsparams = $extensionsparams;
$this->customfield = $customfield;
$this->fieldasstring = $fieldasstring;
$this->configfieldsetsglobal = $configfieldsetsglobal;
$this->configfieldsetssitecontrol = $configfieldsetssitecontrol;
$this->configfieldsetsgroupcontrol = $configfieldsetsgroupcontrol;
$this->configfieldsetsuikit = $configfieldsetsuikit;
$this->configfieldsetsgooglechart = $configfieldsetsgooglechart;
$this->configfieldsetsemailhelper = $configfieldsetsemailhelper;
$this->configfieldsetsencryption = $configfieldsetsencryption;
$this->configfieldsetscustomfield = $configfieldsetscustomfield;
}
/**
* Set Config Fieldsets
*
* @param int $timer
*
* @since 1.0
*/
public function set(int $timer = 0): void
{
// main lang prefix
$lang = $this->config->lang_prefix . '_CONFIG';
if (1 == $timer) // this is before the admin views are build
{
// start loading Global params
$autorName = StringHelper::html(
$this->component->get('author')
);
$autorEmail = StringHelper::html(
$this->component->get('email')
);
$this->extensionsparams->add('component', '"autorName":"' . $autorName
. '","autorEmail":"' . $autorEmail . '"');
// set the custom fields
if ($this->component->isArray('config'))
{
// set component code name
$component = $this->config->component_code_name;
$nameSingleCode = 'config';
$nameListCode = 'configs';
// set place holders
$placeholders = [];
$placeholders[Placefix::_h('component')]
= $this->config->component_code_name;
$placeholders[Placefix::_h('Component')]
= StringHelper::safe(
$this->component->get('name_code'), 'F'
);
$placeholders[Placefix::_h('COMPONENT')]
= StringHelper::safe(
$this->component->get('name_code'), 'U'
);
$placeholders[Placefix::_h('view')]
= $nameSingleCode;
$placeholders[Placefix::_h('views')]
= $nameListCode;
$placeholders[Placefix::_('component')]
= $this->config->component_code_name;
$placeholders[Placefix::_('Component')]
= $placeholders[Placefix::_h('Component')];
$placeholders[Placefix::_('COMPONENT')]
= $placeholders[Placefix::_h('COMPONENT')];
$placeholders[Placefix::_('view')]
= $nameSingleCode;
$placeholders[Placefix::_('views')]
= $nameListCode;
// load the global placeholders
foreach ($this->cplaceholder->get() as $globalPlaceholder => $gloabalValue)
{
$placeholders[$globalPlaceholder] = $gloabalValue;
}
$view = [];
$viewType = 0;
// set the custom table key
$dbkey = 'g';
// Trigger Event: jcb_ce_onBeforeSetConfigFieldsets
$this->event->trigger(
'jcb_ce_onBeforeSetConfigFieldsets', [&$timer]
);
// build the config fields
foreach ($this->component->get('config') as $field)
{
// get the xml string
$xmlField = $this->fieldasstring->get(
$field, $view, $viewType, $lang, $nameSingleCode,
$nameListCode, $placeholders, $dbkey, false
);
// make sure the xml is set and a string
if (isset($xmlField) && StringHelper::check($xmlField))
{
$this->customfield->add($field['tabname'], $xmlField, true);
// set global params to db on install
$fieldName = StringHelper::safe(
$this->placeholder->update(
GetHelper::between(
$xmlField, 'name="', '"'
), $placeholders
)
);
$fieldDefault = $this->placeholder->update(
GetHelper::between(
$xmlField, 'default="', '"'
), $placeholders
);
if (isset($field['custom_value'])
&& StringHelper::check(
$field['custom_value']
))
{
// add array if found
if ((strpos((string) $field['custom_value'], '["') !== false)
&& (strpos((string) $field['custom_value'], '"]')
!== false))
{
// load the Global checkin defautls
$this->extensionsparams->add('component', '"' . $fieldName
. '":' . $field['custom_value']);
}
else
{
// load the Global checkin defautls
$this->extensionsparams->add('component', '"' . $fieldName
. '":"' . $field['custom_value'] . '"');
}
}
elseif (StringHelper::check($fieldDefault))
{
// load the Global checkin defautls
$this->extensionsparams->add('component', '"' . $fieldName . '":"'
. $fieldDefault . '"');
}
}
}
}
// first run we must set the global
$this->configfieldsetsglobal->set($lang, $autorName, $autorEmail);
$this->configfieldsetssitecontrol->set($lang);
}
elseif (2 == $timer) // this is after the admin views are build
{
// Trigger Event: jcb_ce_onBeforeSetConfigFieldsets
$this->event->trigger(
'jcb_ce_onBeforeSetConfigFieldsets', [&$timer]
);
// these field sets can only be added after admin view is build
$this->configfieldsetsgroupcontrol->set($lang);
// these can be added anytime really (but looks best after groups
$this->configfieldsetsuikit->set($lang);
$this->configfieldsetsgooglechart->set($lang);
$this->configfieldsetsemailhelper->set($lang);
$this->configfieldsetsencryption->set($lang);
// these are the custom settings
$this->configfieldsetscustomfield->set($lang);
}
// Trigger Event: jcb_ce_onAfterSetConfigFieldsets
$this->event->trigger(
'jcb_ce_onAfterSetConfigFieldsets', [&$timer]
);
}
}