Your IP : 216.73.216.224


Current Path : /var/www/html/administrator/components/com_nobosstestimonials/models/
Upload File :
Current File : /var/www/html/administrator/components/com_nobosstestimonials/models/testimonials.php

<?php
/**
 * @package			No Boss Extensions
 * @subpackage  	com_nobosstestimonials
 * @author			No Boss Technology <contact@nobosstechnology.com>
 * @copyright		Copyright (C) 2021 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>
 */

defined('_JEXEC') or die;

/**
 *  Modelo default de model de listagem compativel com J3 e J4
 *  @author  Johnny Salazar Reidel
 * 
 * - Estamos utilizando NobossComponentsModelList da library da No Boss como Trait.
 *      * Traits servem apenas para reuso de codigo, mas nao para heranca. Ou seja, nao eh possivel estender funcoes definidas em NobossComponentsModelList.
 *      * Se houver necessidade de estender alguma funcao de NobossComponentsModelList, copie a funcao original para ca e edite conforme necessario. Neste caso, a funcao executada sera a desta classe e nao mais a definida no trait NobossComponentsModelList
 * 
 *  Orientacao para edicoes minimas necessarias: 
 *      - Edite o nome da classe
 *      - Edite as colunas para ordenacao no metodo '__construct' e informe a ordenacao default da listagem
 *      - Edite a consulta SQL que lista os registros no metodo 'getListQuery'
 */

jimport('noboss.components.model.list');

class NobosstestimonialsModelTestimonials extends JModelList {
    use NobossComponentsModelList;

	/**
	 * Construtor
	 *
	 * @param   array  $config  An optional associative array of configuration settings.
     * 
	 */
	public function __construct($config = array()) {
		if (empty($config['filter_fields'])) {
            /**
             * Declare cada coluna do banco que permitira ordenacao na listagem
             * Para cada coluna voce ira declarar:
             *     - Na primeira posicao do array apenas o alias da coluna
             *     - Na segunda posicao do array o prefixo da tabela declarado na consulta SQL + '.' + o alias da coluna
             *     - OBS: se for uma coluna renomeada com alias, informe o alias declarado em apenas uma posicao do array
             */
			$config['filter_fields'] = array(
				'id', 'a.id',
				'author_name', 'a.author_name',
				'text_testimonial', 'a.text_testimonial',
                'name_testimonials_group', 'testimonial_group.name_testimonials_group',
				'state', 'a.state',
				'ordering', 'a.ordering',
            );
		}

        // Defina a coluna padrao para ordenacao dos registros (informe o prefixo da tabela declarado na consulta SQL + '.' + o alias da coluna)
        $this->orderingDefault = 'a.id';
    
        // Defina a direcao da ordenacao informando 'asc' ou 'desc'
        $this->directionDefault = 'desc'; 

		parent::__construct($config);
	}

    /**
	 * Metodo para obter um id com base no state da configuracao da model.
	 *
	 * This is necessary because the model is used by the component and
	 * different modules that might need different sets of data or different
	 * ordering requirements.
	 *
	 * @param   string  $id  A prefix for the store id.
	 *
	 * @return  string  A store id.
	 */
	protected function getStoreId($id = '') {
		$id	.= ':'.$this->getState('filter.search');
		$id	.= ':'.$this->getState('filter.state');

		return parent::getStoreId($id);
	}

	/**
	 * Metodo para montar a consulta SQL que busca os dados que devem ser listados
	 *
	 * @return  JDatabaseQuery
	 */
	protected function getListQuery() {
		$db = $this->getDbo();
		$query = $db->getQuery(true);

		// Define os campos de retorno da tabela.
		$query->select(
			$this->getState(
				'list.select',
				'a.id,
				a.author_name,
				a.id_testimonials_group,
				testimonial_group.name_testimonials_group,
				a.text_testimonial,
				a.video_id,
				a.display_type,
				a.state,
				a.created_by,
				a.created,
				a.modified_by,
				a.modified,
				a.ordering,
				a.checked_out,
				a.checked_out_time'
			)
		);
		$query->from($db->quoteName('#__noboss_testimonial') . ' AS a');

		// Join com tabela de grupos de depoimentos
		$query
			->join('LEFT', '#__noboss_testimonial_group AS testimonial_group ON testimonial_group.id_testimonials_group=a.id_testimonials_group');

		// Obtem opcao selecionada no filtro de status (caso definido)
		$state = $this->getState('filter.state');

        // Usuario filtrou por um status na listagem
		if (is_numeric($state)) {
			$query->where('a.state = '.(int) $state);
		}
        // Nao tem filtro de status definido: traz todos status, menos status de lixeira
        else {
			$query->where('(a.state IN (-1,0,1,2))');
		}

        // Obtem opcao selecionada no filtro de idioma (caso definido)
		$language = $this->getState('filter.language');
		if (!empty($language)) {
			$query->where('language = ' . $db->quote($language));
		}

        // Obtem grupo de depoimento filtrado (caso definido)
		$groupId = $this->getState('filter.testimonials_group');
		if (is_numeric($groupId)){
			$query->where('a.id_testimonials_group = ' . (int) $groupId);
		}

        // Obtem texto pesquisado (caso definido)
		$search = $this->getState('filter.search');
		if (!empty($search)) {
            // Realiza a pesquisa do texto em colunas especificas do banco
            $search = $db->Quote('%'.$db->escape($search, true).'%');
            $query->where("UPPER(author_name) LIKE " . $search);
            $query->orWhere("UPPER(text_testimonial) LIKE " . $search);
		}

        // Seta ordenacao conforme solicitado pelo usuario na listagem
        $orderCol  = $this->state->get('list.ordering', 'ordering');
        $orderDirn = $this->state->get('list.direction', 'ASC');
        $query->order($db->escape($orderCol.' '.$orderDirn));

		return $query;
	}

    /**
	 * Metodo para saber se existe ao menos um grupo de modulo publicado
	 *
	 * @return  boolean     true se existir algum publicado ou false
	 */
    public function isGroupPublished(){
        $db = $this->getDbo();
		$query = $db->getQuery(true);

        $query
			->select('*')
			->from($db->quoteName('#__noboss_testimonial_group'))
			->where($db->quoteName('state') . ' = 1');
		$db->setQuery($query);
		$db->execute();
        
        // Nao existem grupos de modulos de faq cadastrados
		if(!$db->getNumRows()){
            return false;
        }

        return true;
    }

    /**
	 * Metodo que busca todos os testimonials pendentes de moderação.
	 *
	 * @return 	Object|null Retorna array com registros encontrados ou null caso nenhum seja encontrado.
	 */
	public static function getPendingTestimonials(){
		$db = JFactory::getDBO();
		$query = $db->getQuery(true);

		$query
   			->select("*")
   			->from("#__noboss_testimonial AS testimonials")
    		->where("((modified IS NULL) OR (modified = '0000-00-00 00:00:00'))")
            ->where("state = 0");
    	$db->setQuery($query);

		return $db->loadObjectList();
	}
}