/
styles.php
155 lines (133 loc) · 4.32 KB
/
styles.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
<?php
/**
* @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
// No direct access.
defined('_JEXEC') or die;
jimport('joomla.application.component.modellist');
/**
* Methods supporting a list of template style records.
*
* @package Joomla.Administrator
* @subpackage com_templates
* @since 1.6
*/
class TemplatesModelStyles extends JModelList
{
/**
* Constructor.
*
* @param array An optional associative array of configuration settings.
* @see JController
* @since 1.6
*/
public function __construct($config = array())
{
if (empty($config['filter_fields'])) {
$config['filter_fields'] = array(
'id', 'a.id',
'title', 'a.title',
'client_id', 'a.client_id',
'template', 'a.template',
'home', 'a.home',
);
}
parent::__construct($config);
}
/**
* Method to auto-populate the model state.
*
* Note. Calling getState in this method will result in recursion.
*
* @since 1.6
*/
protected function populateState($ordering = null, $direction = null)
{
// Initialise variables.
$app = JFactory::getApplication('administrator');
// Load the filter state.
$search = $this->getUserStateFromRequest($this->context.'.filter.search', 'filter_search');
$this->setState('filter.search', $search);
$template = $this->getUserStateFromRequest($this->context.'.filter.template', 'filter_template', '0', 'cmd');
$this->setState('filter.template', $template);
$clientId = $this->getUserStateFromRequest($this->context.'.filter.client_id', 'filter_client_id', null);
$this->setState('filter.client_id', $clientId);
// Load the parameters.
$params = JComponentHelper::getParams('com_templates');
$this->setState('params', $params);
// List state information.
parent::populateState('a.template', 'asc');
}
/**
* 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.template');
$id .= ':'.$this->getState('filter.client_id');
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->getDbo();
$query = $db->getQuery(true);
// Select the required fields from the table.
$query->select(
$this->getState(
'list.select',
'a.id, a.template, a.title, a.home, a.client_id, l.title AS language_title, l.image as image'
)
);
$query->from($db->quoteName('#__template_styles').' AS a');
// Join on menus.
$query->select('COUNT(m.template_style_id) AS assigned');
$query->leftjoin('#__menu AS m ON m.template_style_id = a.id');
$query->group('a.id, a.template, a.title, a.home, a.client_id, l.title, l.image, e.extension_id');
// Join over the language
$query->join('LEFT', '#__languages AS l ON l.lang_code = a.home');
// Filter by extension enabled
$query->select('extension_id AS e_id');
$query->join('LEFT', '#__extensions AS e ON e.element = a.template');
$query->where('e.enabled = 1');
// Filter by template.
if ($template = $this->getState('filter.template')) {
$query->where('a.template = '.$db->quote($template));
}
// Filter by client.
$clientId = $this->getState('filter.client_id');
if (is_numeric($clientId)) {
$query->where('a.client_id = '.(int) $clientId);
}
// 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 {
$search = $db->Quote('%'.$db->escape($search, true).'%');
$query->where('a.template LIKE '.$search.' OR a.title LIKE '.$search);
}
}
// Add the list ordering clause.
$query->order($db->escape($this->getState('list.ordering', 'a.title')).' '.$db->escape($this->getState('list.direction', 'ASC')));
//echo nl2br(str_replace('#__','jos_',$query));
return $query;
}
}