Your IP : 216.73.216.172


Current Path : /var/www/html/libraries/noboss/src/Component/
Upload File :
Current File : /var/www/html/libraries/noboss/src/Component/NbViewEditComponent.php

<?php
/**
 * @package			No Boss Extensions
 * @subpackage  	No Boss Library
 * @author			No Boss Technology <contact@nobosstechnology.com>
 * @copyright		Copyright (C) 2026 No Boss Technology. All rights reserved.
 * @license			GNU Lesser General Public License version 3 or later; see <https://www.gnu.org/licenses/lgpl-3.0.en.html>
 */

namespace Noboss\Library\Component;

use Joomla\CMS\Factory;
use Joomla\CMS\MVC\View\HtmlView;
use Joomla\CMS\MVC\View\GenericDataException;
use Noboss\Library\Util\NbLoadextensionAssetsUtil;
use Noboss\Library\Component\NbViewToolbarComponent;

// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects

/**
 *  Classe a ser estendida em componentes para view de edicao de registros
 *  @author  Johnny Salazar Reidel
 * 
 *  Observacao: o funcionamento desta classe tem como requisito que o componente seja desenvolvido no modelo No Boss
 */
class NbViewEditComponent extends HtmlView {
    /**
     * O objeto Form
     *
     * @var  \Joomla\CMS\Form\Form
     */
    public $form;

    /**
     * O item ativo
     *
     * @var  object
     */
    public $item;

    /**
     * O estado modelo
     *
     * @var  \Joomla\Registry\Registry
     */
    public $state;

    /**
     * Sinalizar se uma associacao existe
     *
     * @var  boolean
     */
    public $assoc;

    /**
     * As ações que o usuario esta autorizado a executar
     *
     * @var    \Joomla\Registry\Registry
     */
    public $canDo;

    /**
     * Matriz de fieldsets a nao exibir
     *
     * @var    string[]
     */
    public $ignore_fieldsets = [];

    /**
     * Constructor
     *
     * @param   array  $config  An optional associative array of configuration settings.
     *
     * @since   6.0.0
     */
    /*public function __construct(array $config)
    {
        parent::__construct($config);
    }*/

    /**
     * Prepare view data
     *
     * @return  void
     *
     * @since   6.0.0
     */
    /*protected function initializeView()
    {
        parent::initializeView();
    }*/

    /**
     * Metodo que exibe a tmpl
     *
     * @param   string  $tpl  O nome do arquivo tmpl a ser carregado
     *
     * @return  void
     */
	public function display($tpl = null) {
		$app = Factory::getApplication();
		$input = $app->input;

        // Model da view
        $this->model = $this->getModel();

        // Só chama os métodos se existirem
        $this->form  = method_exists($this->model, 'getForm') ? $this->model->getForm() : null;
        $this->item  = method_exists($this->model, 'getItem') ? $this->model->getItem() : null;
        $this->state = method_exists($this->model, 'getState') ? $this->model->getState() : null;

        // Verifica erros
        if (!empty($errors = $this->model->getErrors())) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        // Nome da view
        $this->viewName = $this->_name;

        // Alias do componente (ex: 'com_nobossfaq') que esta definido no arquivo principal do componente
        $this->componentAlias = $input->get('option');

        // Nome dos fields de titulo e alias que sao exibidos no topo da pagina (qnd existir)
        $this->fieldName = $input->get('fieldName');
        $this->fieldAlias = $input->get('fieldAlias');

        // Alias do campo de id do componente
        $this->recordIdAlias = $input->get('recordIdAlias');

        $id = isset($this->item->{$this->recordIdAlias}) ? (int)$this->item->{$this->recordIdAlias} : 0;

        // Url do post do formulario
        $this->actionForm = (empty($this->actionForm)) ? "index.php?option={$this->componentAlias}&view={$this->viewName}&layout=edit&{$this->recordIdAlias}=".$id : $this->actionForm;

        // Existe valor em fieldsetsIgnore: converte para novo field utilizado para indicar fieldsets a nao ser exibidos
        if(!empty($this->fieldsetsIgnore)){
            // Variavel fieldsetsIgnore havia sido criado pela noboss, mas depois o Joomla lancou ignore_fieldsets com mesmo proposito
            $this->ignore_fieldsets = $this->fieldsetsIgnore;
            $this->fieldsetsIgnore = '';
        }

        // Carrega arquivo traducao da library
		$assetsObject = new NbLoadextensionAssetsUtil('lib_noboss');
		$extensionPath = $assetsObject->getDirectoryExtension(false);
		Factory::getApplication()->getLanguage()->load("lib_noboss", $extensionPath);

        // Carrega barra de navegacao padrao
        $this->addToolbar();        

        // Executa funcao para tratamentos especificos desta view
        if(method_exists($this, 'specificTreatments')){
            $this->specificTreatments();
        }

        // Executa funcao para carregar CSS e JS
        if(method_exists($this, 'loadExtensionAssets')){
            $this->loadExtensionAssets();
        }

        $this->useCoreUI = true;

		parent::display($tpl);
	}

    /**
     * Metodo para exibir barra de navegacao padrao
     * 
     * OBS: para carregar uma barra personalizada no template, basta declarar esse mesma funcao dentro da view do componente e colocar o codigo personalizado
     */
    public function addToolbar(){
        $id = isset($this->item->{$this->recordIdAlias}) ? (int)$this->item->{$this->recordIdAlias} : 0;

        // Novo registro
        if($id == 0){
            // Constante para parte do titulo 'novo registro' nao definido: pega default da library
            if(empty($this->pageSubtitleNew)){
                $this->pageSubtitle = 'NOBOSS_COMPONENT_VIEW_EDIT_SUBTITLE_NEW';
            }
            else{
                $this->pageSubtitle = $this->pageSubtitleNew;
            }
        }
        // Edicao de registro
        else{
            // Constante para parte do titulo 'edicao de registro' nao definido: pega default da library
            if(empty($this->pageSubtitleEdit)){
                $this->pageSubtitle = 'NOBOSS_COMPONENT_VIEW_EDIT_SUBTITLE_EDIT';
            }
            else{
                $this->pageSubtitle = $this->pageSubtitleEdit;
            }
        }

        // Joomla 4
        if(version_compare(JVERSION, '5', '<')){
            $toolbar = \Joomla\CMS\Toolbar\Toolbar::getInstance('toolbar');
        }
        // Joomla 5 em diante
        else{
            $toolbar = $this->getDocument()->getToolbar();
        }

        // Carrega barra de navegacao
        NbViewToolbarComponent::addToolbarEditView($this->pageTitle, $this->pageSubtitle, $this->pageIcon, $this->recordIdAlias, $this->componentAlias, $this->viewName, $this->item, $toolbar);
    }
    /**
     * Funcao para carregamento de variaveis e arquivos JS e CSS no padrao No Boss
     * 
     * Nota: depreciated para formato do Joomla 5. No Joomla 5 passamos a ter essas chamadas direto no componente, podendo dai especificar o nome do arquivo que vamos carregar.
     * 
     * OBS: essa funcao soh eh executada se for chamada pela funcao display do componente
     */
    public function loadExtensionAssets(){       
        // Instancia objeto para carregamento de CSS e JS da extensao
        $assetsObject = new NbLoadextensionAssetsUtil($this->componentAlias);

        // Adiciona jquery, variaveis JS (baseNameUrl, majorVersionJoomla, completeVersionJoomla) e carrega arquivo JS da extensao (caso esteja definido um no caminho default. Ex: '/administrator/components/com_nobossfaq/assets/admin/js/com_nobossfaq.min.js')
        $assetsObject->loadJs(true, '', true, true, true);

        // Carrega arquivo CSS da extensao (caso esteja definido um no caminho default. Ex: '/administrator/components/com_nobossfaq/assets/admin/css/com_nobossfaq.min.css')
        $assetsObject->loadCss(true, '', true);
    }
}