493 lines
14 KiB
Plaintext
493 lines
14 KiB
Plaintext
|
/**
|
||
|
* Admin views
|
||
|
*
|
||
|
* @var array
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected array $data;
|
||
|
|
||
|
/**
|
||
|
* Compiler Config
|
||
|
*
|
||
|
* @var Config
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected Config $config;
|
||
|
|
||
|
/**
|
||
|
* The compiler registry
|
||
|
*
|
||
|
* @var Registry
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected Registry $registry;
|
||
|
|
||
|
/**
|
||
|
* Compiler Event
|
||
|
*
|
||
|
* @var EventInterface
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected EventInterface $event;
|
||
|
|
||
|
/**
|
||
|
* Compiler Placeholder
|
||
|
*
|
||
|
* @var Placeholder
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected Placeholder $placeholder;
|
||
|
|
||
|
/**
|
||
|
* Compiler Customcode Dispenser
|
||
|
*
|
||
|
* @var Dispenser
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected Dispenser $dispenser;
|
||
|
|
||
|
/**
|
||
|
* The modelling customtabs
|
||
|
*
|
||
|
* @var Customtabs
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected Customtabs $customtabs;
|
||
|
|
||
|
/**
|
||
|
* The modelling tabs
|
||
|
*
|
||
|
* @var Tabs
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected Tabs $tabs;
|
||
|
|
||
|
/**
|
||
|
* The modelling fields
|
||
|
*
|
||
|
* @var Fields
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected Fields $fields;
|
||
|
|
||
|
/**
|
||
|
* The modelling admin view history
|
||
|
*
|
||
|
* @var Historyadminview
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected Historyadminview $history;
|
||
|
|
||
|
/**
|
||
|
* The modelling permissions
|
||
|
*
|
||
|
* @var Permissions
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected Permissions $permissions;
|
||
|
|
||
|
/**
|
||
|
* The modelling conditions
|
||
|
*
|
||
|
* @var Conditions
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected Conditions $conditions;
|
||
|
|
||
|
/**
|
||
|
* The modelling relations
|
||
|
*
|
||
|
* @var Relations
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected Relations $relations;
|
||
|
|
||
|
/**
|
||
|
* The modelling linked views
|
||
|
*
|
||
|
* @var Linkedviews
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected Linkedviews $linkedviews;
|
||
|
|
||
|
/**
|
||
|
* The modelling javascript
|
||
|
*
|
||
|
* @var Javascriptadminview
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected Javascriptadminview $javascript;
|
||
|
|
||
|
/**
|
||
|
* The modelling css
|
||
|
*
|
||
|
* @var Cssadminview
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected Cssadminview $css;
|
||
|
|
||
|
/**
|
||
|
* The modelling php admin view
|
||
|
*
|
||
|
* @var Phpadminview
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected Phpadminview $php;
|
||
|
|
||
|
/**
|
||
|
* The modelling custom buttons
|
||
|
*
|
||
|
* @var Custombuttons
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected Custombuttons $custombuttons;
|
||
|
|
||
|
/**
|
||
|
* The modelling custom import scripts
|
||
|
*
|
||
|
* @var Customimportscripts
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected Customimportscripts $customimportscripts;
|
||
|
|
||
|
/**
|
||
|
* The modelling ajax
|
||
|
*
|
||
|
* @var Ajaxadmin
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected Ajaxadmin $ajax;
|
||
|
|
||
|
/**
|
||
|
* The modelling custom alias
|
||
|
*
|
||
|
* @var Customalias
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected Customalias $customalias;
|
||
|
|
||
|
/**
|
||
|
* The modelling sql
|
||
|
*
|
||
|
* @var Sql
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected Sql $sql;
|
||
|
|
||
|
/**
|
||
|
* The modelling mysql settings
|
||
|
*
|
||
|
* @var Mysqlsettings
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
protected Mysqlsettings $mysqlsettings;
|
||
|
|
||
|
/**
|
||
|
* Database object to query local DB
|
||
|
*
|
||
|
* @var \JDatabaseDriver
|
||
|
* @since 3.2.0
|
||
|
**/
|
||
|
protected \JDatabaseDriver $db;
|
||
|
|
||
|
/**
|
||
|
* Constructor
|
||
|
*
|
||
|
* @param Config|null $config The compiler config object.
|
||
|
* @param Registry|null $registry The compiler registry object.
|
||
|
* @param EventInterface|null $event The compiler event api object.
|
||
|
* @param Placeholder|null $placeholder The compiler placeholder object.
|
||
|
* @param Dispenser|null $dispenser The compiler customcode dispenser object.
|
||
|
* @param Customtabs|null $customtabs The modelling customtabs object.
|
||
|
* @param Tabs|null $tabs The modelling tabs object.
|
||
|
* @param Fields|null $fields The modelling fields object.
|
||
|
* @param Historyadminview|null $history The modelling admin view history object.
|
||
|
* @param Permissions|null $permissions The modelling permissions object.
|
||
|
* @param Conditions|null $conditions The modelling conditions object.
|
||
|
* @param Relations|null $relations The modelling relations object.
|
||
|
* @param Linkedviews|null $linkedviews The modelling linked views object.
|
||
|
* @param Javascriptadminview|null $javascript The modelling javascript object.
|
||
|
* @param Cssadminview|null $css The modelling css object.
|
||
|
* @param Phpadminview|null $php The modelling php admin view object.
|
||
|
* @param Custombuttons|null $custombuttons The modelling custom buttons object.
|
||
|
* @param Customimportscripts|null $customimportscripts The modelling custom import scripts object.
|
||
|
* @param Ajaxadmin|null $ajax The modelling ajax object.
|
||
|
* @param Customalias|null $customalias The modelling custom alias object.
|
||
|
* @param Sql|null $sql The modelling sql object.
|
||
|
* @param Mysqlsettings|null $mysqlsettings The modelling mysql settings object.
|
||
|
* @param \JDatabaseDriver|null $db The database object.
|
||
|
*
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
public function __construct(?Config $config = null, ?Registry $registry = null,
|
||
|
?EventInterface $event = null, ?Placeholder $placeholder = null, ?Dispenser $dispenser = null,
|
||
|
?Customtabs $customtabs = null, ?Tabs $tabs = null, ?Fields $fields = null,
|
||
|
?Historyadminview $history = null, ?Permissions $permissions = null,
|
||
|
?Conditions $conditions = null, Relations $relations = null, ?Linkedviews $linkedviews = null,
|
||
|
?Javascriptadminview $javascript = null, ?Cssadminview $css = null, ?Phpadminview $php = null,
|
||
|
?Custombuttons $custombuttons = null, ?Customimportscripts $customimportscripts = null,
|
||
|
?Ajaxadmin $ajax = null, ?Customalias $customalias = null, ?Sql $sql = null,
|
||
|
?Mysqlsettings $mysqlsettings = null, ?\JDatabaseDriver $db = null)
|
||
|
{
|
||
|
$this->config = $config ?: Compiler::_('Config');
|
||
|
$this->registry = $registry ?: Compiler::_('Registry');
|
||
|
$this->event = $event ?: Compiler::_('Event');
|
||
|
$this->placeholder = $placeholder ?: Compiler::_('Placeholder');
|
||
|
$this->dispenser = $dispenser ?: Compiler::_('Customcode.Dispenser');
|
||
|
$this->customtabs = $customtabs ?: Compiler::_('Model.Customtabs');
|
||
|
$this->tabs = $tabs ?: Compiler::_('Model.Tabs');
|
||
|
$this->fields = $fields ?: Compiler::_('Model.Fields');
|
||
|
$this->history = $history ?: Compiler::_('Model.Historyadminview');
|
||
|
$this->permissions = $permissions ?: Compiler::_('Model.Permissions');
|
||
|
$this->conditions = $conditions ?: Compiler::_('Model.Conditions');
|
||
|
$this->relations = $relations ?: Compiler::_('Model.Relations');
|
||
|
$this->linkedviews = $linkedviews ?: Compiler::_('Model.Linkedviews');
|
||
|
$this->javascript = $javascript ?: Compiler::_('Model.Javascriptadminview');
|
||
|
$this->css = $css ?: Compiler::_('Model.Cssadminview');
|
||
|
$this->php = $php ?: Compiler::_('Model.Phpadminview');
|
||
|
$this->custombuttons = $custombuttons ?: Compiler::_('Model.Custombuttons');
|
||
|
$this->customimportscripts = $customimportscripts ?: Compiler::_('Model.Customimportscripts');
|
||
|
$this->ajax = $ajax ?: Compiler::_('Model.Ajaxadmin');
|
||
|
$this->customalias = $customalias ?: Compiler::_('Model.Customalias');
|
||
|
$this->sql = $sql ?: Compiler::_('Model.Sql');
|
||
|
$this->mysqlsettings = $mysqlsettings ?: Compiler::_('Model.Mysqlsettings');
|
||
|
$this->db = $db ?: Factory::getDbo();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get Admin View Data
|
||
|
*
|
||
|
* @param int $id The view ID
|
||
|
*
|
||
|
* @return object|null The view data
|
||
|
* @since 3.2.0
|
||
|
*/
|
||
|
public function get(int $id): ?object
|
||
|
{
|
||
|
if (!isset($this->data[$id]))
|
||
|
{
|
||
|
// Create a new query object.
|
||
|
$query = $this->db->getQuery(true);
|
||
|
|
||
|
$query->select('a.*');
|
||
|
$query->select(
|
||
|
$this->db->quoteName(
|
||
|
array(
|
||
|
'b.addfields',
|
||
|
'b.id',
|
||
|
'c.addconditions',
|
||
|
'c.id',
|
||
|
'r.addrelations',
|
||
|
't.tabs'
|
||
|
), array(
|
||
|
'addfields',
|
||
|
'addfields_id',
|
||
|
'addconditions',
|
||
|
'addconditions_id',
|
||
|
'addrelations',
|
||
|
'customtabs'
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
|
||
|
$query->from('#__componentbuilder_admin_view AS a');
|
||
|
$query->join(
|
||
|
'LEFT',
|
||
|
$this->db->quoteName('#__componentbuilder_admin_fields', 'b')
|
||
|
. ' ON (' . $this->db->quoteName('a.id') . ' = '
|
||
|
. $this->db->quoteName('b.admin_view') . ')'
|
||
|
);
|
||
|
|
||
|
$query->join(
|
||
|
'LEFT', $this->db->quoteName(
|
||
|
'#__componentbuilder_admin_fields_conditions', 'c'
|
||
|
) . ' ON (' . $this->db->quoteName('a.id') . ' = '
|
||
|
. $this->db->quoteName('c.admin_view') . ')'
|
||
|
);
|
||
|
|
||
|
$query->join(
|
||
|
'LEFT', $this->db->quoteName(
|
||
|
'#__componentbuilder_admin_fields_relations', 'r'
|
||
|
) . ' ON (' . $this->db->quoteName('a.id') . ' = '
|
||
|
. $this->db->quoteName('r.admin_view') . ')'
|
||
|
);
|
||
|
|
||
|
$query->join(
|
||
|
'LEFT', $this->db->quoteName(
|
||
|
'#__componentbuilder_admin_custom_tabs', 't'
|
||
|
) . ' ON (' . $this->db->quoteName('a.id') . ' = '
|
||
|
. $this->db->quoteName('t.admin_view') . ')'
|
||
|
);
|
||
|
|
||
|
$query->where($this->db->quoteName('a.id') . ' = ' . (int) $id);
|
||
|
|
||
|
// for plugin event TODO change event api signatures
|
||
|
$component_context = $this->config->component_context;
|
||
|
// Trigger Event: jcb_ce_onBeforeQueryViewData
|
||
|
$this->event->trigger(
|
||
|
'jcb_ce_onBeforeQueryViewData',
|
||
|
array(&$component_context, &$id, &$query, &$this->db)
|
||
|
);
|
||
|
|
||
|
// Reset the query using our newly populated query object.
|
||
|
$this->db->setQuery($query);
|
||
|
|
||
|
// Load the results as a list of stdClass objects (see later for more options on retrieving data).
|
||
|
$view = $this->db->loadObject();
|
||
|
|
||
|
// setup single view code names to use in storing the data
|
||
|
$view->name_single_code = 'oops_hmm_' . $id;
|
||
|
if (isset($view->name_single) && $view->name_single != 'null')
|
||
|
{
|
||
|
$view->name_single_code = StringHelper::safe(
|
||
|
$view->name_single
|
||
|
);
|
||
|
}
|
||
|
|
||
|
// setup list view code name to use in storing the data
|
||
|
$view->name_list_code = 'oops_hmmm_' . $id;
|
||
|
if (isset($view->name_list) && $view->name_list != 'null')
|
||
|
{
|
||
|
$view->name_list_code = StringHelper::safe(
|
||
|
$view->name_list
|
||
|
);
|
||
|
}
|
||
|
|
||
|
// check the length of the view name (+5 for com_ and _)
|
||
|
$name_length = $this->config->component_code_name_length + strlen(
|
||
|
(string) $view->name_single_code
|
||
|
) + 5;
|
||
|
// when the name is larger than 49 we need to add the assets' table name fix
|
||
|
if ($name_length > 49)
|
||
|
{
|
||
|
$this->config->set('add_assets_table_name_fix', true);
|
||
|
}
|
||
|
|
||
|
// setup token check
|
||
|
if (!isset($this->dispenser->hub['token']))
|
||
|
{
|
||
|
$this->dispenser->hub['token'] = [];
|
||
|
}
|
||
|
$this->dispenser->hub['token'][$view->name_single_code] = false;
|
||
|
$this->dispenser->hub['token'][$view->name_list_code] = false;
|
||
|
|
||
|
// set some placeholders
|
||
|
$this->placeholder->set('view', $view->name_single_code);
|
||
|
$this->placeholder->set('views', $view->name_list_code);
|
||
|
$this->placeholder->set('View', StringHelper::safe(
|
||
|
$view->name_single, 'F'
|
||
|
));
|
||
|
$this->placeholder->set('Views', StringHelper::safe(
|
||
|
$view->name_list, 'F'
|
||
|
));
|
||
|
$this->placeholder->set('VIEW', StringHelper::safe(
|
||
|
$view->name_single, 'U'
|
||
|
));
|
||
|
$this->placeholder->set('VIEWS', StringHelper::safe(
|
||
|
$view->name_list, 'U'
|
||
|
));
|
||
|
|
||
|
// for plugin event TODO change event api signatures
|
||
|
$placeholders = $this->placeholder->active;
|
||
|
$component_context = $this->config->component_context;
|
||
|
|
||
|
// Trigger Event: jcb_ce_onBeforeModelViewData
|
||
|
$this->event->trigger(
|
||
|
'jcb_ce_onBeforeModelViewData',
|
||
|
array(&$component_context, &$view, &$placeholders)
|
||
|
);
|
||
|
unset($placeholders);
|
||
|
|
||
|
// add the tables
|
||
|
$view->addtables = (isset($view->addtables)
|
||
|
&& JsonHelper::check($view->addtables))
|
||
|
? json_decode((string) $view->addtables, true) : null;
|
||
|
if (ArrayHelper::check($view->addtables))
|
||
|
{
|
||
|
$view->tables = array_values($view->addtables);
|
||
|
}
|
||
|
unset($view->addtables);
|
||
|
|
||
|
// set custom tabs
|
||
|
$this->customtabs->set($view);
|
||
|
|
||
|
// set the local tabs
|
||
|
$this->tabs->set($view);
|
||
|
|
||
|
// set permissions
|
||
|
$this->permissions->set($view);
|
||
|
|
||
|
// set fields
|
||
|
$this->fields->set($view);
|
||
|
|
||
|
// build update SQL
|
||
|
$this->history->set($view);
|
||
|
|
||
|
// set the conditions
|
||
|
$this->conditions->set($view);
|
||
|
|
||
|
// set the relations
|
||
|
$this->relations->set($view);
|
||
|
|
||
|
// set linked views
|
||
|
$this->linkedviews->set($view);
|
||
|
|
||
|
// set the lang target
|
||
|
$this->config->lang_target = 'admin';
|
||
|
if ($this->registry->get('builder.site_edit_view.' . $id, false))
|
||
|
{
|
||
|
$this->config->lang_target = 'both';
|
||
|
}
|
||
|
|
||
|
// set javascript
|
||
|
$this->javascript->set($view);
|
||
|
|
||
|
// set css
|
||
|
$this->css->set($view);
|
||
|
|
||
|
// set php
|
||
|
$this->php->set($view);
|
||
|
|
||
|
// set custom buttons
|
||
|
$this->custombuttons->set($view);
|
||
|
|
||
|
// set custom import scripts
|
||
|
$this->customimportscripts->set($view);
|
||
|
|
||
|
// set Ajax for this view
|
||
|
$this->ajax->set($view);
|
||
|
|
||
|
// activate alias builder
|
||
|
$this->customalias->set($view);
|
||
|
|
||
|
// set sql
|
||
|
$this->sql->set($view);
|
||
|
|
||
|
// set mySql Table Settings
|
||
|
$this->mysqlsettings->set($view);
|
||
|
|
||
|
// for plugin event TODO change event api signatures
|
||
|
$placeholders = $this->placeholder->active;
|
||
|
|
||
|
// Trigger Event: jcb_ce_onAfterModelViewData
|
||
|
$this->event->trigger(
|
||
|
'jcb_ce_onAfterModelViewData',
|
||
|
array(&$component_context, &$view, &$placeholders)
|
||
|
);
|
||
|
|
||
|
// clear placeholders
|
||
|
$this->placeholder->remove('view');
|
||
|
$this->placeholder->remove('views');
|
||
|
$this->placeholder->remove('View');
|
||
|
$this->placeholder->remove('Views');
|
||
|
$this->placeholder->remove('VIEW');
|
||
|
$this->placeholder->remove('VIEWS');
|
||
|
|
||
|
// store this view to class object
|
||
|
$this->data[$id] = $view;
|
||
|
}
|
||
|
|
||
|
// return the found view data
|
||
|
return $this->data[$id];
|
||
|
}
|