Your IP : 216.73.216.240


Current Path : /home/juvelize/saulnois/tmp/install_695d2cf0b4957/src/
Upload File :
Current File : /home/juvelize/saulnois/tmp/install_695d2cf0b4957/src/TExtension.php

<?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;
    }
}