(no commit message)
[eventlist:eventlist.git] / models / categoryevents.php
1 <?php
2 /**
3  * @version 0.9 $Id$
4  * @package Joomla
5  * @subpackage EventList
6  * @copyright (C) 2005 - 2007 Christoph Lukes
7  * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
8  */
9
10 // no direct access
11 defined('_JEXEC') or die('Restricted access');
12
13 jimport('joomla.application.component.model');
14
15 /**
16  * EventList Component Categoryevents Model
17  *
18  * @package Joomla
19  * @subpackage EventList
20  * @since               0.9
21  */
22 class EventListModelCategoryevents extends JModel
23 {
24         /**
25          * Events data array
26          *
27          * @var array
28          */
29         var $_data = null;
30
31         /**
32          * category data array
33          *
34          * @var array
35          */
36         var $_category = null;
37
38         /**
39          * Events total
40          *
41          * @var integer
42          */
43         var $_total = null;
44
45         /**
46          * Pagination object
47          *
48          * @var object
49          */
50         var $_pagination = null;
51
52         /**
53          * Constructor
54          *
55          * @since 0.9
56          */
57         function __construct()
58         {
59                 parent::__construct();
60
61                 global $mainframe, $option;
62
63                 $id = JRequest::getVar('categid', 0, '', 'int');
64                 $this->setId($id);
65
66                 // Get the paramaters of the active menu item
67                 $menu           =& JMenu::getInstance();
68                 $item           = $menu->getActive();
69                 $params         =& $menu->getParams($item->id);
70
71                 //get the number of events from database
72                 $limit                  = JRequest::getVar('limit', $params->get('display_num'), '', 'int');
73                 $limitstart             = JRequest::getVar('limitstart', 0, '', 'int');
74
75                 $this->setState('limit', $limit);
76                 $this->setState('limitstart', $limitstart);
77         }
78
79         /**
80          * Method to set the category id
81          *
82          * @access      public
83          * @param       int     category ID number
84          */
85         function setId($id)
86         {
87                 // Set new category ID and wipe data
88                 $this->_id                      = $id;
89                 $this->_data            = null;
90         }
91
92         /**
93          * Method to get the events
94          *
95          * @access public
96          * @return array
97          */
98         function &getData( )
99         {
100                 $pop    = JRequest::getVar('pop', 0, '', 'int');
101
102                 // Lets load the content if it doesn't already exist
103                 if (empty($this->_data))
104                 {
105                         $query = $this->_buildQuery();
106
107                         if ($pop) {
108                                 $this->_data = $this->_getList( $query );
109                         } else {
110                                 $this->_data = $this->_getList( $query, $this->getState('limitstart'), $this->getState('limit') );
111                         }
112                 }
113
114                 return $this->_data;
115         }
116
117         /**
118          * Total nr of events
119          *
120          * @access public
121          * @return integer
122          */
123         function getTotal()
124         {
125                 // Lets load the total nr if it doesn't already exist
126                 if (empty($this->_total))
127                 {
128                         $query = $this->_buildQuery();
129                         $this->_total = $this->_getListCount($query);
130                 }
131
132                 return $this->_total;
133         }
134
135         /**
136          * Method to get a pagination object for the events
137          *
138          * @access public
139          * @return integer
140          */
141         function getPagination()
142         {
143                 // Lets load the content if it doesn't already exist
144                 if (empty($this->_pagination))
145                 {
146                         jimport('joomla.html.pagination');
147                         $this->_pagination = new JPagination( $this->getTotal(), $this->getState('limitstart'), $this->getState('limit') );
148                 }
149
150                 return $this->_pagination;
151         }
152
153         /**
154          * Build the query
155          *
156          * @access private
157          * @return string
158          */
159         function _buildQuery()
160         {
161                 // Get the WHERE and ORDER BY clauses for the query
162                 $where          = $this->_buildContentWhere();
163                 $orderby        = $this->_buildContentOrderBy();
164
165                 //Get Events from Database
166                 $query = 'SELECT a.id, a.dates, a.enddates, a.times, a.endtimes, a.title, a.locid, a.datdescription, l.club, l.city, l.state, l.url, c.catname, c.id AS catid, '
167                                 . ' CASE WHEN CHAR_LENGTH(a.title) THEN CONCAT_WS(\':\', a.id, a.title) ELSE a.id END as slug'
168                                 . ' FROM #__eventlist_events AS a'
169                                 . ' LEFT JOIN #__eventlist_venues AS l ON l.id = a.locid'
170                                 . ' LEFT JOIN #__eventlist_categories AS c ON c.id = a.catsid'
171                                 . $where
172                                 . $orderby
173                                 ;
174
175                 return $query;
176         }
177
178         /**
179          * Build the order clause
180          *
181          * @access private
182          * @return string
183          */
184         function _buildContentOrderBy()
185         {
186                 global $mainframe, $option;
187
188                 $filter_order           = $mainframe->getUserStateFromRequest( $option.'.venueevents.filter_order',             'filter_order',         'a.dates' );
189                 $filter_order_Dir       = $mainframe->getUserStateFromRequest( $option.'.venueevents.filter_order_Dir', 'filter_order_Dir',     '' );
190
191                 $orderby        = ' ORDER BY '.$filter_order.' '.$filter_order_Dir.', a.dates, a.times';
192
193                 return $orderby;
194         }
195
196         /**
197          * Method to build the WHERE clause
198          *
199          * @access private
200          * @return array
201          */
202         function _buildContentWhere( )
203         {
204                 $user           =& JFactory::getUser();
205                 $gid            = (int) $user->get('aid');
206
207                 // Get the paramaters of the active menu item
208                 $menu           =& JMenu::getInstance();
209                 $item           = $menu->getActive();
210                 $params         =& $menu->getParams($item->id);
211
212                 $task           = JRequest::getVar('task', '', '', 'string');
213
214                 // First thing we need to do is to select only the requested events
215                 if ($task == 'catarchive') {
216                         $where = ' WHERE a.published = -1 && a.catsid = '.$this->_id;
217                 } else {
218                         $where = ' WHERE a.published = 1 && a.catsid = '.$this->_id;
219                 }
220
221                 // Second is to only select events assigned to category the user has access to
222                 $where .= ' AND c.access <= '.$gid;
223
224                 /*
225                  * If we have a filter, and this is enabled... lets tack the AND clause
226                  * for the filter onto the WHERE clause of the content item query.
227                  */
228                 if ($params->get('filter'))
229                 {
230                         $filter                 = JRequest::getVar('filter', '', 'request');
231                         $filter_type    = JRequest::getVar('filter_type', '', 'request');
232
233                         if ($filter)
234                         {
235                                 // clean filter variables
236                                 $filter                 = JString::strtolower($filter);
237                                 $filter_type    = JString::strtolower($filter_type);
238
239                                 switch ($filter_type)
240                                 {
241                                         case 'title' :
242                                                 $where .= ' AND LOWER( a.title ) LIKE "%'.$filter.'%"';
243                                                 break;
244
245                                         case 'venue' :
246                                                 $where .= ' AND LOWER( l.club ) LIKE "%'.$filter.'%"';
247                                                 break;
248
249                                         case 'city' :
250                                                 $where .= ' AND LOWER( l.city ) LIKE "%'.$filter.'%"';
251                                                 break;
252                                 }
253                         }
254                 }
255                 return $where;
256         }
257
258         /**
259          * Method to get the Category
260          *
261          * @access public
262          * @return integer
263          */
264         function getCategory( )
265         {
266                 $query = 'SELECT * FROM #__eventlist_categories WHERE id = '.$this->_id;
267
268                 $this->_db->setQuery( $query );
269
270                 $_category = $this->_db->loadObject();
271
272                 return $_category;
273         }
274 }
275 ?>