Your IP : 216.73.216.182


Current Path : /var/www/html/administrator/components/com_jchat/View/Messages/
Upload File :
Current File : /var/www/html/administrator/components/com_jchat/View/Messages/HtmlView.php

<?php
namespace JExtstore\Component\JChat\Administrator\View\Messages;
/** 
 * @package JCHAT::MESSAGES::administrator::components::com_jchat
 * @subpackage views
 * @subpackage messages
 * @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\Pagination\Pagination;
use Joomla\Filter\OutputFilter;
use JExtstore\Component\JChat\Administrator\Framework\Helpers\Toolbars as ToolbarHelper;
use JExtstore\Component\JChat\Administrator\Framework\Helpers\Messages as JChatHelpersMessages;
use JExtstore\Component\JChat\Administrator\Framework\View as JChatView;

define ( 'INDEX_TO', 'receiver_name');
define ( 'INDEX_SENT', 'sent');
define ( 'INDEX_READ', 'read');
define ( 'INDEX_MESSAGE', 'message');

/**
 * User messages view implementation
 *
 * @package JCHAT::MESSAGES::administrator::components::com_jchat
 * @subpackage views
 * @since 1.0
 */
class HtmlView extends JChatView {
	// Template view variables
	protected $pagination;
	protected $order;
	protected $searchword;
	protected $lists;
	protected $orders;
	protected $items;
	protected $dates;
	protected $componentParams;
	protected $defaultFlagsPath;
	protected $defaultTranslateToLanguage;
	protected $record;
	
	/**
	 * Add the page title and toolbar.
	 *
	 * @since	1.6
	 */
	protected function addShowEntityToolbar() {
		$doc = $this->app->getDocument();
		ToolbarHelper::title( Text::_('COM_JCHAT_MAINTITLE_TOOLBAR') . Text::_('COM_JCHAT_MESSAGE_DETAILS' ), 'jchat' );
		ToolbarHelper::custom('messages.display', 'arrow-left-2', 'arrow-left-2', 'COM_JCHAT_BACK_TO_LIST_MESSAGES', false);
	}
	
	/**
	 * Add the page title and toolbar.
	 *
	 * @since	1.6
	 */
	protected function addDisplayToolbar() {
		$doc = $this->app->getDocument();
		ToolbarHelper::title( Text::_('COM_JCHAT_MAINTITLE_TOOLBAR') . Text::_('COM_JCHAT_LIST_MESSAGES' ), 'jchat' );
		ToolbarHelper::editList('messages.showentity', 'COM_JCHAT_VIEW_MESSAGE_DETAILS');
		ToolbarHelper::deleteList('COM_JCHAT_DELETE_MESSAGES', 'messages.deleteEntity');
		ToolbarHelper::custom('messages.exportMessages', 'download', 'download', 'COM_JCHAT_EXPORT_MSG', false);
		ToolbarHelper::custom('messages.deleteEntities', 'trash', 'trash', 'COM_JCHAT_DELETE_ALL_MESSAGES', false);
		ToolbarHelper::custom('messages.deleteOldestEntities', 'trash', 'trash', 'COM_JCHAT_DELETE_ALL_OLDEST_MESSAGES', false);
		ToolbarHelper::custom('cpanel.display', 'home', 'home', 'COM_JCHAT_CPANEL', false);
	}

	/**
	 * Default listEntities
	 * @access public
	 */
	public function display($tpl = 'list') {
		$doc = $this->app->getDocument ();
		$this->loadJQuery($doc);
		$this->loadJQueryUI($doc); // Required for draggable feature
		$this->loadBootstrap($doc);
		
		// Model state cparams
		$cParams = $this->getModel()->getState('cparams');
		$keepDays = $cParams->get('keep_latest_msgs', 7);
		$doc->getWebAssetManager()->addInlineScript("
			Joomla.submitbutton = function(pressbutton) {
				Joomla.submitform( pressbutton );
				if (pressbutton == 'messages.exportMessages') {
					jQuery('#adminForm input[name=task]').val('messages.display');
				}
				return true;
			}
	
			// Always enable the 'Delete all metainfo' button
			jQuery(function($){
				$('joomla-toolbar-button[task*=deleteEntities]').attr('confirm-message', '" . Text::_('COM_JCHAT_DELETE_ALL_MESSAGES_CONFIRM', true) . "');
				$('joomla-toolbar-button[task*=deleteOldestEntities]').attr('confirm-message', '" . Text::sprintf('COM_JCHAT_DELETE_ALL_OLDEST_MESSAGES_CONFIRM', $keepDays, array('jsSafe'=>true)) . "');
			});
		");
		$doc->getWebAssetManager()->addInlineStyle('@media (max-width: 1200px) and (min-width: 768px) { body.admin.com_jchat { min-width: 1200px; }}
													@media (max-width: 640px) { body.admin.com_jchat { min-width: 640px; }}');
		
		// Get main records
		$model = $this->getModel();
		$rows = $model->getData();
		$total = $model->getTotal();
		$lists = $model->getFilters();
		
		$orders = array();
		$orders['order'] = $this->getModel()->getState('order');
		$orders['order_Dir'] = $this->getModel()->getState('order_dir');
		// Pagination view object model state populated
		$pagination = new Pagination( $total, $this->getModel()->getState('limitstart'), $this->getModel()->getState('limit') );
		$dates = array('start'=>$this->getModel()->getState('fromPeriod'), 'to'=>$this->getModel()->getState('toPeriod'));
		 
		$this->pagination = $pagination;
		$this->order = $this->getModel()->getState('order');
		$this->searchword = $this->getModel()->getState('searchword');
		$this->lists = $lists;
		$this->orders = $orders;
		$this->items = $rows;
		$this->option = $this->getModel()->getState('option');
		$this->dates = $dates; 
		$this->componentParams = $this->getModel()->getComponentParams();
		$this->defaultFlagsPath = 'media/mod_languages/images/';
		$this->defaultTranslateToLanguage = $this->componentParams->get('default_to_language', 'en');
		if(in_array($this->defaultTranslateToLanguage, array('ha', 'ig', 'yo'))) {
			$this->defaultFlagsPath = 'components/com_jchat/images/flags/';
		}
		
		// Add toolbar
		$this->addDisplayToolbar();
		
		parent::display($tpl);
	}

	/**
	 * Mostra la visualizzazione dettaglio del record singolo
	 * @param Object& $row
	 * @access public
	 */
	public function showEntity($row) {
		// Sanitize HTML Object2Form
		OutputFilter::objectHTMLSafe( $row, ENT_QUOTES, 'message');
		
		// Add toolbar
		$this->addShowEntityToolbar();
		
		$doc = $this->app->getDocument ();
		$this->loadJQuery($doc);
		$this->loadBootstrap($doc);
		
		$this->option = $this->getModel()->getState('option');
		$this->record = $row;
		
		parent::display('edit');
	}
	 
	/**
	 * Effettua l'output view del file in attachment al browser
	 * 
	 * @access public
	 * @param string $contents
	 * @param int $size
	 * @param array& $fieldsFunctionTransformation
	 * @return void
	 */
public function sendCSVMessages($data, &$fieldsFunctionTransformation) {
		$delimiter = ';';
		$enclosure = '"';
		$componentConfig = $this->getModel()->getState('cparams');
		// Clean dirty buffer
		ob_end_clean();
		// Open buffer
		ob_start();
		// Open out stream
		$outstream = fopen("php://output", "w");
		// Funzione di scrittura nell'output stream
		function __outputCSV(&$vals, $key, $userData) {
			// Fields value transformations 
			if(isset($vals[INDEX_SENT]) && (int)$vals[INDEX_SENT]) {
				$vals[INDEX_SENT] = date('Y-m-d H:i:s', $vals[INDEX_SENT]);
			}
			if(isset($vals[INDEX_READ]) && (int)$vals[INDEX_READ]) {
				$vals[INDEX_READ] = Text::_('COM_JCHAT_YESREAD');
			} else {
				if(!$userData[3]) {
					$vals[INDEX_READ] = $vals[INDEX_TO] ? Text::_('COM_JCHAT_NOREAD') : Text::_('COM_JCHAT_MULTIPLE_RECEIVER_USERS');
				}
			}
			if(isset($vals[INDEX_MESSAGE])) {
				$vals[INDEX_MESSAGE] = JChatHelpersMessages::purifyMessage($vals[INDEX_MESSAGE], $userData[4]);
			}
			fputcsv($userData[0], $vals, $userData[1], $userData[2], "\\"); // add parameters if you want
		}
		// Echo delle intestazioni
		__outputCSV($fieldsFunctionTransformation, null, array($outstream, $delimiter, $enclosure, true, $componentConfig));
		// Output di tutti i records
		array_walk($data, "\JExtstore\Component\JChat\Administrator\View\Messages\__outputCSV", array($outstream, $delimiter, $enclosure, false, $componentConfig));
		fclose($outstream);
		// Recupero output buffer content
		$contents = ob_get_clean();
		$size = strlen($contents);
		
		
		header ( 'Pragma: public' );
		header ( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' );
		header ( 'Expires: ' . gmdate ( 'D, d M Y H:i:s' ) . ' GMT' );
		header ( 'Content-Disposition: attachment; filename="messages.csv"' );
		header ( 'Content-Type: text/plain' );
		header ( "Content-Length: " . $size );
		echo $contents;
			
		exit ();
	}
}
?>