| Current Path : /var/www/html/components/com_jdownloads/src/Model/ |
| Current File : /var/www/html/components/com_jdownloads/src/Model/LogsModel.php |
<?php
/*
* @package Joomla
* @copyright Copyright (C) 2005 Open Source Matters. All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.txt
*
* @component jDownloads
* @version 2.0
* @copyright (C) 2007 - 2011 - Arno Betz - www.jdownloads.com
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.txt
*
* jDownloads is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
namespace JDownloads\Component\JDownloads\Site\Model;
\defined('_JEXEC') or die;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use JDownloads\Component\JDownloads\Administrator\Extension\JDownloadsComponent;
class LogsModel extends ListModel
{
/**
* Constructor.
*
* @param array An optional associative array of configuration settings.
* @see JController
*/
public function __construct($config = array())
{
if (empty($config['filter_fields'])) {
$config['filter_fields'] = array(
'id', 'a.id',
'type', 'a.type',
'log_file_id', 'a.log_file_id',
'log_file_size', 'a.log_file_size',
'log_file_name', 'a.log_file_name',
'log_title', 'a.log_title',
'log_ip', 'a.log_ip',
'log_datetime', 'a.log_datetime',
'log_user', 'a.log_user',
'log_browser', 'a.log_browser',
'language', 'a.language',
'ordering', 'a.ordering',
);
}
parent::__construct($config);
}
/**
* Method to auto-populate the model state.
*
* Note. Calling getState in this method will result in recursion.
*
*/
protected function populateState($ordering = null, $direction = null)
{
// Initialise variables.
$app = Factory::getApplication();
// Load the filter state.
$search = $this->getUserStateFromRequest($this->context.'.filter.search', 'filter_search', '', 'string');
$this->setState('filter.search', $search);
// Load the type state.
$type = $this->getUserStateFromRequest($this->context.'.filter.type', 'filter_type', '');
$this->setState('filter.type', $type);
// Load the parameters.
$params = ComponentHelper::getParams('com_jdownloads');
$this->setState('params', $params);
// List state information.
$limit = 0;
$default_ordering = 'a.log_datetime';
$default_direction = 'desc';
// Receive & set list options
$default_limit = (int)$app->getUserStateFromRequest('global.list.limit', 'limit', $app->get('list_limit'), 'uint');
if ($list = $app->getUserStateFromRequest($this->context . '.list', 'list', array(), 'array')){
if (isset($list['limit'])){
$limit = (int)$list['limit'];
} else {
$limit = $default_limit;
}
} else {
$limit = $default_limit;
}
$this->setState('list.limit', $limit);
// Check if the ordering field is in the white list, otherwise use the incoming value.
$value = $app->getUserStateFromRequest($this->context . '.ordercol', 'filter_order', $default_ordering);
if (!in_array($value, $this->filter_fields)){
$value = $default_ordering;
$app->setUserState($this->context . '.ordercol', $value);
}
$this->setState('list.ordering', $value);
// Check if the ordering direction is valid, otherwise use the incoming value.
$value = $app->getUserStateFromRequest($this->context . '.orderdirn', 'filter_order_Dir', $default_direction);
if (!in_array(strtoupper($value), array('ASC', 'DESC', ''))){
$value = $direction;
$app->setUserState($this->context . '.orderdirn', $value);
}
$this->setState('list.direction', $value);
$value = (int)$app->getUserStateFromRequest($this->context . '.limitstart', 'limitstart', 0);
$limitstart = ($limit != 0 ? (floor($value / $limit) * $limit) : 0);
$this->setState('list.start', $limitstart);
}
/**
* Method to get a store id based on model configuration state.
*
* 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 = '')
{
// Compile the store id.
$id.= ':' . $this->getState('filter.search');
$id.= ':' . $this->getState('filter.state');
$id.= ':' . $this->getState('filter.type');
return parent::getStoreId($id);
}
/**
* Build an SQL query to load the list data.
*
* @return JDatabaseQuery
*/
protected function getListQuery()
{
// Create a new query object.
$db = $this->getDatabase();
$query = $db->getQuery(true);
$user = Factory::getApplication()->getIdentity();
$params = ComponentHelper::getParams('com_jdownloads');
// Select the required fields from the table.
$query->select(
$this->getState(
'list.select',
'a.id, a.type, a.log_file_id, a.log_file_size, a.log_file_name, a.log_title, a.log_ip, a.log_datetime, a.log_user, a.log_browser, ' .
'a.language, a.ordering'
)
);
$query->from('`#__jdownloads_logs` AS a');
// Join over the users to get the user name.
if ($params->get('use_real_user_name_in_frontend')){
$query->select('uc.name AS username');
} else {
$query->select('uc.username AS username');
}
$query->join('LEFT', '#__users AS uc on uc.id = a.log_user');
// Filter by search in title
$search = $this->getState('filter.search');
if (!empty($search)) {
if (stripos($search, 'id:') === 0) {
$query->where('a.id = '.(int) substr($search, 3));
} else {
$where = array();
$where2 = array();
$search = $db->Quote('%'.$db->escape($search, true).'%');
$query->where(" LOWER (a.log_title) LIKE $search OR LOWER (a.log_file_name) LIKE $search OR LOWER (uc.name) LIKE $search");
}
}
// Filter by log type
$type = $this->getState('filter.type');
if (is_numeric($type)) {
if ($type > 0) {
$query->where('a.type = '.(int) $type);
} else {
$query->where('(a.type IN (1, 2))');
}
}
// Add the list ordering clause.
$orderCol = $this->state->get('list.ordering', 'a.log_datetime');
$orderDirn = $this->state->get('list.direction', 'desc');
$query->order($db->escape($orderCol.' '.$orderDirn));
return $query;
}
}
?>