Your IP : 216.73.216.224


Current Path : /var/www/html/administrator/components/com_jchat/Controller/
Upload File :
Current File : /var/www/html/administrator/components/com_jchat/Controller/MessagesController.php

<?php
namespace JExtstore\Component\JChat\Administrator\Controller;
/**
 *
 * @package JCHAT::MESSAGES::administrator::components::com_jchat
 * @subpackage controllers
 * @author Joomla! Extensions Store
 * @copyright (C) 2024 - Joomla! Extensions Store
 * @license GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html 
 */
defined ( '_JEXEC' ) or die ( 'Restricted access' );
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;
use Joomla\CMS\Component\ComponentHelper;
use JExtstore\Component\JChat\Administrator\Framework\Controller as JChatController;

/**
 * User messages concrete implementation
 *
 * @package JCHAT::MESSAGES::administrator::components::com_jchat
 * @subpackage controllers
 * @since 1.0
 */
class MessagesController extends JChatController { 
	/**
	 * Setta il model state a partire dallo userstate di sessione
	 * @access protected
	 * @param string $scope
	 * @param boolean $ordering
	 * @return object
	 */
	protected function setModelState($scope = 'default', $ordering = true): object {
		$option = $this->option;
		
		$fromPeriod = $this->getUserStateFromRequest( "$option.$scope.fromperiod", 'fromperiod');
		$toPeriod = $this->getUserStateFromRequest( "$option.$scope.toperiod", 'toperiod');
		$msgType = $this->getUserStateFromRequest( "$option.$scope.msg_type", 'msg_type');
		$msgStatus = $this->getUserStateFromRequest( "$option.$scope.msg_status", 'msg_status');
		$roomsFilter = $this->getUserStateFromRequest( "$option.$scope.rooms_filter", 'rooms_filter');
		$filter_order = $this->getUserStateFromRequest("$option.$scope.filter_order", 'filter_order', 'a.sent', 'cmd');
		$filter_order_Dir = $this->getUserStateFromRequest("$option.$scope.filter_order_Dir", 'filter_order_Dir', 'desc', 'word');
		
		$defaultModel = parent::setModelState('messages');
		
		// Set model state  
		$defaultModel->setState('fromPeriod', $fromPeriod);
		$defaultModel->setState('toPeriod', $toPeriod);
		$defaultModel->setState('msgType', $msgType);
		$defaultModel->setState('msgStatus', $msgStatus);
		$defaultModel->setState('roomsFilter', $roomsFilter);
		$defaultModel->setState('order', $filter_order);
		$defaultModel->setState('order_dir', $filter_order_Dir);
		
		return $defaultModel;
	}
	
	/**
	 * Default listEntities
	 * 
	 * @access public
	 * @return void
	 */
	public function display($cachable = false, $urlparams = false) {
		// Set model state 
		$defaultModel = $this->setModelState('messages');
		
		// Parent construction and view display
		parent::display($cachable);
	}

	/**
	 * Mostra il dettaglio dell'entity
	 * 
	 * @access public
	 * @return void
	 */
	public function showEntity() {
		$cid = $this->app->getInput()->get ( 'cid', array (
				0 
		), 'array' );
		$idEntity = (int) $cid[0];
		$model = $this->getModel();
		$model->setState('option', $this->option);
		
		// Try to load record from model
		if(!$record = $model->loadEntity($idEntity)) {
			// Model set exceptions for something gone wrong, so enqueue exceptions and levels on application object then set redirect and exit
			$modelExceptions = $model->getExceptions();
			foreach ($modelExceptions as $exception) {
				$this->app->enqueueMessage($exception->getMessage(), $exception->getExceptionLevel());
			}
			$this->setRedirect ( 'index.php?option=' . $this->option . '&task=messages.display');
			return false;
		}
 
		// Get view and pushing model
		$viewType = $this->document->getType();
		$viewName = $this->input->get('view', $this->default_view);
		$viewLayout = $this->input->get('layout', 'default', 'string');
		$view = $this->getView($viewName, $viewType, '', array('base_path' => $this->basePath, 'layout' => $viewLayout));
		$view->setModel ( $model, true );
		
		$view->showEntity($record); 
	}
 
	/**
	 * Delete a db table entity
	 *
	 * @access public
	 * @return bool
	 */
	public function deleteEntity(): bool {
		$cids = $this->app->getInput()->get ( 'cid', array (), 'array' );
		$option = $this->option;
		
		// Load della model e checkin before exit
		$model = $this->getModel ();
		
		$oldest = $this->task == 'deleteOldestEntities' ? true : false;
		if ($this->task == 'deleteEntity') {
			$result = $model->deleteEntity ( $cids );
		} elseif (in_array ( $this->task, array (
				'deleteEntities',
				'deleteOldestEntities' 
		) )) {
			$result = $model->deleteEntities ( $oldest );
		}
		
		if (! $result) {
			// Model set exceptions for something gone wrong, so enqueue exceptions and levels on application object then set redirect and exit
			$modelException = $model->getException ( null, false );
			$this->app->enqueueMessage ( $modelException->getMessage (), $modelException->getExceptionLevel () );
			$this->setRedirect ( "index.php?option=$option&task=messages.display", Text::_ ( 'COM_JCHAT_ERROR_DELETE' ) );
			return false;
		}
		
		$this->setRedirect ( "index.php?option=$option&task=messages.display", Text::_ ( 'COM_JCHAT_SUCCESS_DELETE' ) );
		
		return true;
	}
	
	/**
	 * Avvia il processo di esportazione records
	 *
	 * @access public
	 * @return void
	 */
	public function exportMessages() { 
		// Set model state 
		$this->setModelState();
		// Mapping fields to load to column header
		$fieldsToLoadArray = array(	'a.actualfrom AS sender_name'=>Text::_('COM_JCHAT_SENDER_NAME'),
									'a.actualto AS receiver_name'=>Text::_('COM_JCHAT_RECEIVER_NAME'),
									'a.message'=>Text::_('COM_JCHAT_MESSAGE'),
									'a.sent'=>Text::_('COM_JCHAT_SENT'),
									'a.read'=>Text::_('COM_JCHAT_READ'),
									'a.type'=>Text::_('COM_JCHAT_TYPE'),
									'a.ipaddress'=>Text::_('COM_JCHAT_IPADDRESS')); 
		$fieldsFunctionTransformation = array();
		
		$model = $this->getModel();
		$model->setState('cparams', ComponentHelper::getParams('com_jchat'));
		
		$data = $model->exportMessages($fieldsToLoadArray, $fieldsFunctionTransformation);
		
		if(!$data) {
			$this->setRedirect('index.php?option=' . $this->option . '&task=messages.display', Text::_('COM_JCHAT_NODATA_EXPORT'));
			return false;
		}
		
		// Get view
		$viewType = $this->document->getType();
		$viewName = $this->input->get('view', $this->default_view);
		$viewLayout = $this->input->get('layout', 'default', 'string');
		$view = $this->getView($viewName, $viewType, '', array('base_path' => $this->basePath, 'layout' => $viewLayout));
		$view->setModel($model, true);
		$view->sendCSVMessages($data, $fieldsFunctionTransformation);
	}  
	
	/**
	 * Constructor.
	 *
	 * @access protected
	 * @param
	 *       	 array An optional associative array of configuration settings.
	 *       	 Recognized key values include 'name', 'default_task',
	 *       	 'model_path', and
	 *       	 'view_path' (this list is not meant to be comprehensive).
	 * @since 1.5
	 */
	public function __construct($config = array(), ?MVCFactoryInterface $factory = null, $app = null, $input = null) {
		parent::__construct($config, $factory, $app, $input);
		
		$this->registerTask('deleteEntities', 'deleteEntity');
		$this->registerTask('deleteOldestEntities', 'deleteEntity');
	}
}