319 lines
7.5 KiB
Plaintext
319 lines
7.5 KiB
Plaintext
/**
|
|
* Compiler Config
|
|
*
|
|
* @var Config
|
|
* @since 3.2.0
|
|
*/
|
|
protected Config $config;
|
|
|
|
/**
|
|
* The compiler registry
|
|
*
|
|
* @var Registry
|
|
* @since 3.2.0
|
|
*/
|
|
protected Registry $registry;
|
|
|
|
/**
|
|
* Compiler Component Joomla Version Settings
|
|
*
|
|
* @var Settings
|
|
* @since 3.2.0
|
|
*/
|
|
protected Settings $settings;
|
|
|
|
/**
|
|
* Compiler Component
|
|
*
|
|
* @var Component
|
|
* @since 3.2.0
|
|
**/
|
|
protected Component $component;
|
|
|
|
/**
|
|
* Compiler Model Createdate
|
|
*
|
|
* @var Createdate
|
|
* @since 3.2.0
|
|
**/
|
|
protected Createdate $createdate;
|
|
|
|
/**
|
|
* Compiler Model Modifieddate
|
|
*
|
|
* @var Modifieddate
|
|
* @since 3.2.0
|
|
**/
|
|
protected Modifieddate $modifieddate;
|
|
|
|
/**
|
|
* Compiler Utility to Build Structure
|
|
*
|
|
* @var Structure
|
|
* @since 3.2.0
|
|
**/
|
|
protected Structure $structure;
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @param Config|null $config The compiler config object.
|
|
* @param Registry|null $registry The compiler registry object.
|
|
* @param Settings|null $settings The compiler component Joomla version settings object.
|
|
* @param Component|null $component The component class.
|
|
* @param Createdate|null $createdate The compiler model to get create date class.
|
|
* @param Modifieddate|null $modifieddate The compiler model to get modified date class.
|
|
* @param Structure|null $structure The compiler structure to build dynamic folder and files class.
|
|
*
|
|
* @since 3.2.0
|
|
*/
|
|
public function __construct(?Config $config = null, ?Registry $registry = null,
|
|
?Settings $settings = null, ?Component $component = null,
|
|
?Createdate $createdate = null, ?Modifieddate $modifieddate = null,
|
|
?Structure $structure = null)
|
|
{
|
|
$this->config = $config ?: Compiler::_('Config');
|
|
$this->registry = $registry ?: Compiler::_('Registry');
|
|
$this->settings = $settings ?: Compiler::_('Component.Settings');
|
|
$this->component = $component ?: Compiler::_('Component');
|
|
$this->createdate = $createdate ?: Compiler::_('Model.Createdate');
|
|
$this->modifieddate = $modifieddate ?: Compiler::_('Model.Modifieddate');
|
|
$this->structure = $structure ?: Compiler::_('Utilities.Structure');
|
|
}
|
|
|
|
/**
|
|
* Build the Multiple Files & Folders
|
|
*
|
|
* @return bool
|
|
* @since 3.2.0
|
|
*/
|
|
public function build(): bool
|
|
{
|
|
$success = false;
|
|
|
|
if ($this->settings->exists())
|
|
{
|
|
$success = $this->admin();
|
|
$success = $this->site() || $success;
|
|
$success = $this->custom() || $success;
|
|
}
|
|
|
|
return $success;
|
|
}
|
|
|
|
/**
|
|
* Build the Dynamic Admin Files & Folders
|
|
*
|
|
* @return bool
|
|
* @since 3.2.0
|
|
*/
|
|
protected function admin(): bool
|
|
{
|
|
if (!$this->component->isArray('admin_views'))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
// check if we have a dynamic dashboard
|
|
if (!$this->registry->get('build.dashboard'))
|
|
{
|
|
// setup the default dashboard
|
|
$target = ['admin' => $this->component->get('name_code')];
|
|
$this->structure->build($target, 'dashboard');
|
|
}
|
|
|
|
$config = [];
|
|
$checkin = false;
|
|
|
|
foreach ($this->component->get('admin_views') as $view)
|
|
{
|
|
if (!$this->isValidAdminView($view, $config))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
$this->buildAdminView($view, $config);
|
|
|
|
// quick set of checkin once
|
|
if (!$checkin && isset($view['checkin']) && $view['checkin'] == 1)
|
|
{
|
|
// switch to add checking to config
|
|
$checkin = true;
|
|
$this->config->set('add_checkin', $checkin);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Build the Dynamic Site Files & Folders
|
|
*
|
|
* @return bool
|
|
* @since 3.2.0
|
|
*/
|
|
protected function site(): bool
|
|
{
|
|
if (!$this->component->isArray('site_views'))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
$config = [];
|
|
|
|
foreach ($this->component->get('site_views') as $view)
|
|
{
|
|
if (!$this->isValidView($view, $config))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
$this->buildView($view, $config, 'site');
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Build the Dynamic Custom Admin Files & Folders
|
|
*
|
|
* @return bool
|
|
* @since 3.2.0
|
|
*/
|
|
protected function custom(): bool
|
|
{
|
|
if (!$this->component->isArray('custom_admin_views'))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
$config = [];
|
|
|
|
foreach ($this->component->get('custom_admin_views') as $view)
|
|
{
|
|
if (!$this->isValidView($view, $config))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
$this->buildView($view, $config, 'custom_admin');
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Check if the view is a valid view
|
|
*
|
|
* @param array $view
|
|
* @param array $config
|
|
*
|
|
* @return bool
|
|
* @since 3.2.0
|
|
*/
|
|
private function isValidAdminView(array $view, array &$config): bool
|
|
{
|
|
if (!isset($view['settings']) || !ObjectHelper::check($view['settings'])
|
|
|| ((!isset($view['settings']->name_list) || $view['settings']->name_list == 'null')
|
|
&& (!isset($view['settings']->name_single) || $view['settings']->name_single == 'null')))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
$created = $this->createdate->get($view);
|
|
$modified = $this->modifieddate->get($view);
|
|
|
|
$config = [
|
|
Placefix::_h('CREATIONDATE') => $created,
|
|
Placefix::_h('BUILDDATE') => $modified,
|
|
Placefix::_h('VERSION') => $view['settings']->version
|
|
];
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Check if the view is a valid view
|
|
*
|
|
* @param array $view
|
|
* @param array $config
|
|
*
|
|
* @return bool
|
|
* @since 3.2.0
|
|
*/
|
|
private function isValidView(array $view, array &$config): bool
|
|
{
|
|
if (!isset($view['settings']) || !ObjectHelper::check($view['settings'])
|
|
|| !isset($view['settings']->main_get)
|
|
|| !ObjectHelper::check($view['settings']->main_get)
|
|
|| !isset($view['settings']->main_get->gettype)
|
|
|| ($view['settings']->main_get->gettype != 1 && $view['settings']->main_get->gettype != 2))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
$created = $this->createdate->get($view);
|
|
$modified = $this->modifieddate->get($view);
|
|
|
|
$config = [
|
|
Placefix::_h('CREATIONDATE') => $created,
|
|
Placefix::_h('BUILDDATE') => $modified,
|
|
Placefix::_h('VERSION') => $view['settings']->version
|
|
];
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Build the admin view
|
|
*
|
|
* @param array $view
|
|
* @param array $config
|
|
*
|
|
* @return void
|
|
* @since 3.2.0
|
|
*/
|
|
private function buildAdminView(array $view, array $config)
|
|
{
|
|
// build the admin edit view
|
|
if ($view['settings']->name_single != 'null')
|
|
{
|
|
$target = ['admin' => $view['settings']->name_single];
|
|
$this->structure->build($target, 'single', false, $config);
|
|
|
|
// build the site edit view (of this admin view)
|
|
if (isset($view['edit_create_site_view'])
|
|
&& is_numeric($view['edit_create_site_view'])
|
|
&& $view['edit_create_site_view'] > 0)
|
|
{
|
|
// setup the front site edit-view files
|
|
$target = ['site' => $view['settings']->name_single];
|
|
$this->structure->build($target, 'edit', false, $config);
|
|
}
|
|
}
|
|
|
|
// build the list view
|
|
if ($view['settings']->name_list != 'null')
|
|
{
|
|
$target = ['admin' => $view['settings']->name_list];
|
|
$this->structure->build($target, 'list', false, $config);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Build the custom view
|
|
*
|
|
* @param array $view
|
|
* @param array $config
|
|
* @param string $type
|
|
*
|
|
* @return void
|
|
* @since 3.2.0
|
|
*/
|
|
private function buildView(array $view, array $config, string $type)
|
|
{
|
|
$target = [$type => $view['settings']->code];
|
|
$view_type = ($view['settings']->main_get->gettype == 1) ? 'single' : 'list';
|
|
|
|
$this->structure->build($target, $view_type, false, $config);
|
|
} |