Your IP : 216.73.216.240
<?php
/*
* @package Tech Fry Library
* @license https://www.gnu.org/licenses/gpl-3.0.en.html
*/
namespace TechFry\Library;
defined('_JEXEC') or die;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Application\CMSApplicationInterface;
use Joomla\Input\Input;
use Joomla\CMS\Factory;
// Extension and Dispatcher Helper Class
class TExtension
{
public $app;
public $extension;
public $ext_type;
public $ext_name;
public $component;
public $mvcfactory;
// Controller, Model, View, Table
public function __construct($extension = '')
{
$input = Factory::getApplication()->input;
if (empty($extension))
{
$extension = $input->get('option', '');
}
$this->extension = $extension;
$parts = explode('_', $extension);
$this->ext_type = $parts[0]; // com, mod, plg, tpl, lib
$this->ext_name = $parts[1];
$this->app = Factory::getApplication();
}
public function get_components()
{
// id, option, enabled
return ComponentHelper::getComponents();
}
public function get_params($option = null)
{
$component = $option ?? $this->extension;
return ComponentHelper::getParams($component);
}
public function boot_component()
{
$this->component = Factory::getApplication()->bootComponent($this->extension);
$this->mvcfactory = $this->component->getMVCFactory();
}
// Create controller
public function get_controller($name = 'display', $client = 'administrator')
{
$this->boot_component();
$config = array();
$app = Factory::getApplication();
$input = $app->getInput();
$controller = $this->mvcfactory->createController($name, $client, $config, $app, $input);
$model = $controller->getModel();
$table = $model->getTable();
/*
option=com_example&view=viewname
<namespace>\Controller\DisplayController
<namespace>\View\Viewname\HtmlView
<namespace>\Model\ViewnameModel
<namespace>\Table\ViewnameTable
*/
// Controller can get Model and View
// Model can get Table
// Controller config: name, base_path, default_task (display), model_path, view_path, default_view
// What controller does? setRedirect(), checkToken(), setMessage(), redirect(), getView(), getModel(), execute(), display()
$return = array(
'name' => $controller->getName(),
'tasks' => $controller->getTasks(),
'task' => $controller->getTask(),
'model_name' => $model->getName(),
'table_name' => $table->getTableName(),
);
return $return;
}
public function get_view($name, $prefix = 'administrator', $type = 'html')
{
// $prefix is $client
$this->boot_component();
$view = $this->mvcfactory->createView($name, $prefix, $type);
// What View Does? setLayout(), setDocumentTitle(), display()
$return = array(
'name' => $view->getName(),
'layout' => $view->getLayout(),
'tpl' => $view->getLayoutTemplate(),
);
return $return;
}
// Get Model
public function get_model($name, $client = 'administrator')
{
// BaseModel, BaseDatabaseModel, ListModel, ItemModel, AdminModel
$this->boot_component();
$model = $this->mvcfactory->createModel($name, $client, ['ignore_request' => true]);
// What Model does? getName(), getTable()
// List - getActiveFilters(), getItems(), getPagination(), getTotal(), getStart(), getFilterForm()
// Item - getItem()
// Form - getItem(), publish(), save()
if (!$model)
{
$this->app->enqueueMessage(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'), 'error');
return;
}
return $model;
}
public function get_table($name, $prefix = 'administrator')
{
$this->boot_component();
$table = $this->mvcfactory->createTable($name, $prefix);
// What Table does? getFields(), getTableName(), getKeyName(), getId(), bind(), load(), check(), store(), delete(), hit(), publish()
// save() - combination of bind(), check(), store()
return $table;
}
public function boot_module($application = 'site')
{
// $module: mod_example; $application: site or administrator
// Default Extension Class: libraries/src/Extension/Module.php
$module = Factory::getApplication()->bootModule($this->extension, $application);
return $module;
}
}