/halogy/application/modules/events/controllers/events.php

https://bitbucket.org/haloweb/halogy-1.0/ · PHP · 397 lines · 244 code · 73 blank · 80 comment · 20 complexity · e75d6f94b821404968638860c8790f55 MD5 · raw file

  1. <?php
  2. /**
  3. * Halogy
  4. *
  5. * A user friendly, modular content management system for PHP 5.0
  6. * Built on CodeIgniter - http://codeigniter.com
  7. *
  8. * @package Halogy
  9. * @author Haloweb Ltd.
  10. * @copyright Copyright (c) 2008-2011, Haloweb Ltd.
  11. * @license http://halogy.com/license
  12. * @link http://halogy.com/
  13. * @since Version 1.0
  14. * @filesource
  15. */
  16. // ------------------------------------------------------------------------
  17. class Events extends Controller {
  18. var $partials = array();
  19. function Events()
  20. {
  21. parent::Controller();
  22. // get siteID, if available
  23. if (defined('SITEID'))
  24. {
  25. $this->siteID = SITEID;
  26. }
  27. // get site permissions and redirect if it don't have access to this module
  28. if (!$this->permission->sitePermissions)
  29. {
  30. show_error('You do not have permission to view this page');
  31. }
  32. if (!in_array($this->uri->segment(1), $this->permission->sitePermissions))
  33. {
  34. show_error('You do not have permission to view this page');
  35. }
  36. // load models and modules
  37. $this->load->library('tags');
  38. $this->load->library('calendar', array('show_next_prev' => TRUE, 'next_prev_url' => '/events'));
  39. $this->load->model('events_model', 'events');
  40. $this->load->module('pages');
  41. // load partials - archive
  42. if ($archive = $this->events->get_archive())
  43. {
  44. foreach($archive as $date)
  45. {
  46. $this->partials['events:archive'][] = array(
  47. 'archive:link' => site_url('/events/'.$date['year'].'/'.$date['month'].'/'),
  48. 'archive:title' => $date['dateStr'],
  49. 'archive:count' => $date['numEvents']
  50. );
  51. }
  52. }
  53. // load partials - latest
  54. if ($latest = $this->events->get_headlines())
  55. {
  56. foreach($latest as $event)
  57. {
  58. $this->partials['events:latest'][] = array(
  59. 'latest:link' => site_url('events/viewevent/'.$event['eventID']),
  60. 'latest:title' => $event['eventTitle'],
  61. 'latest:date' => dateFmt($event['eventDate'], ($this->site->config['dateOrder'] == 'MD') ? 'M jS Y' : 'jS M Y'),
  62. );
  63. }
  64. }
  65. // load partials - calendar
  66. $month = ($this->uri->segment(3) && intval($this->uri->segment(2))) ? $this->uri->segment(3) : date('m', time());
  67. $year = ($this->uri->segment(2) && intval($this->uri->segment(2))) ? $this->uri->segment(2) : date('Y', time());
  68. $monthEvents = array();
  69. if ($data['month'] = $this->events->get_month($month, $year))
  70. {
  71. foreach($data['month'] as $event)
  72. {
  73. $monthEvents[dateFmt($event['eventDate'], 'j')] = '/events/'.dateFmt($event['eventDate'], 'Y/m/d');
  74. }
  75. }
  76. @$this->partials['events:calendar'] = $this->calendar->generate($year, $month, $monthEvents);
  77. }
  78. function index()
  79. {
  80. // get partials
  81. $output = $this->partials;
  82. // get latest events
  83. $events = $this->events->get_events(10);
  84. $output['events:events'] = $this->_populate_events($events);
  85. // send events to page
  86. $data['events'] = $events;
  87. // set pagination
  88. $output['pagination'] = ($pagination = $this->pagination->create_links()) ? $pagination : '';
  89. // set title
  90. $output['page:title'] = $this->site->config['siteName'].' | Events';
  91. $output['page:heading'] = 'Upcoming Events';
  92. // display with cms layer
  93. $this->pages->view('events', $output, TRUE);
  94. }
  95. function featured()
  96. {
  97. // get partials
  98. $output = $this->partials;
  99. // get latest events
  100. $events = $this->events->get_featured_events();
  101. $output['events:featured'] = $this->_populate_events($events);
  102. // send events to page
  103. $data['events'] = $events;
  104. // set pagination
  105. $output['pagination'] = ($pagination = $this->pagination->create_links()) ? $pagination : '';
  106. // set title
  107. $output['page:title'] = $this->site->config['siteName'].' | Events';
  108. $output['page:heading'] = 'Featured Events';
  109. // display with cms layer
  110. $this->pages->view('events_featured', $output, TRUE);
  111. }
  112. function viewevent($eventID = '')
  113. {
  114. // get partials
  115. $output = $this->partials;
  116. // get event
  117. if ($event = $this->events->get_event($eventID))
  118. {
  119. // populate template
  120. $output['event:title'] = $event['eventTitle'];
  121. $output['event:link'] = site_url('events/viewevent/'.$event['eventID']);
  122. $output['event:location'] = $event['location'];
  123. $output['event:date'] = dateFmt($event['eventDate'], ($this->site->config['dateOrder'] == 'MD') ? 'M jS Y' : 'jS M Y').
  124. (($event['time']) ? ' ('.$event['time'].')' : '').
  125. (($event['eventEnd'] > 0) ? ' - '.dateFmt($event['eventEnd'], ($this->site->config['dateOrder'] == 'MD') ? 'M jS Y' : 'jS M Y') : '');
  126. $output['event:body'] = $this->template->parse_body($event['description']);
  127. $output['event:excerpt'] = $this->template->parse_body($event['excerpt']);
  128. $output['event:author'] = $this->events->lookup_user($event['userID'], TRUE);
  129. $output['event:author-id'] = $event['userID'];
  130. // set title
  131. $output['page:title'] = $this->site->config['siteName'].' Events - '.$event['eventTitle'];
  132. $output['keywords'] = $event['tags'];
  133. $data['event'] = $event;
  134. $data['tags'] = explode(' ', $event['tags']);
  135. // display with cms layer
  136. $this->pages->view('events_single', $output, TRUE);
  137. }
  138. else
  139. {
  140. show_404();
  141. }
  142. }
  143. function tag($tag = '')
  144. {
  145. // get partials
  146. $output = $this->partials;
  147. // get tags
  148. $events = $this->events->get_events_by_tag($tag);
  149. $output['events:events'] = $this->_populate_events($events);
  150. // set title
  151. $output['page:title'] = $this->site->config['siteName'].' | Events';
  152. $output['page:heading'] = 'Events on "'.$tag.'"';
  153. // set pagination
  154. $output['pagination'] = ($pagination = $this->pagination->create_links()) ? $pagination : '';
  155. // display with cms layer
  156. $this->pages->view('events', $output, TRUE);
  157. }
  158. function month()
  159. {
  160. // get partials
  161. $output = $this->partials;
  162. // get event based on uri
  163. $year = $this->uri->segment(2);
  164. $month = $this->uri->segment(3);
  165. // get tags
  166. $events = $this->events->get_events_by_date($year, $month);
  167. $output['events:events'] = $this->_populate_events($events);
  168. // set title
  169. $output['page:title'] = $this->site->config['siteName'].' | Events - '.date('F Y', mktime(0,0,0,$month,1,$year));
  170. $output['page:heading'] = date('F Y', mktime(0,0,0,$month,1,$year));
  171. // set pagination
  172. $output['pagination'] = ($pagination = $this->pagination->create_links()) ? $pagination : '';
  173. // display with cms layer
  174. $this->pages->view('events', $output, TRUE);
  175. }
  176. function year()
  177. {
  178. // get partials
  179. $output = $this->partials;
  180. // get event based on uri
  181. $year = $this->uri->segment(2);
  182. // get tags
  183. $events = $this->events->get_events_by_date($year);
  184. $output['events:events'] = $this->_populate_events($events);
  185. // set title
  186. $output['page:title'] = $this->site->config['siteName'].' | Events - '.date('Y', mktime(0,0,0,1,1,$year));
  187. $output['page:heading'] = date('Y', mktime(0,0,0,1,1,$year));
  188. // set pagination
  189. $output['pagination'] = ($pagination = $this->pagination->create_links()) ? $pagination : '';
  190. // display with cms layer
  191. $this->pages->view('events', $output, TRUE);
  192. }
  193. function day()
  194. {
  195. // get partials
  196. $output = $this->partials;
  197. // get event based on uri
  198. $year = $this->uri->segment(2);
  199. $month = $this->uri->segment(3);
  200. $day = $this->uri->segment(4);
  201. // get tags
  202. $events = $this->events->get_events_by_date($year, $month, $day);
  203. $output['events:events'] = $this->_populate_events($events);
  204. // set title
  205. $output['page:title'] = $this->site->config['siteName'].' | Events - '.date('D jS F Y', mktime(0,0,0,$month,$day,$year));
  206. $output['page:heading'] = date('D jS F Y', mktime(0,0,0,$month,$day,$year));
  207. // set pagination
  208. $output['pagination'] = ($pagination = $this->pagination->create_links()) ? $pagination : '';
  209. // display with cms layer
  210. $this->pages->view('events', $output, TRUE);
  211. }
  212. function search($query = '')
  213. {
  214. // get partials
  215. $output = $this->partials;
  216. // set tags
  217. $query = ($query) ? $query : $this->input->post('query');
  218. // get result from tags
  219. $objectIDs = $this->tags->search('events', $query);
  220. $events = $this->events->search_events($query, $objectIDs);
  221. $output['events:events'] = $this->_populate_events($events);
  222. $output['query'] = $query;
  223. // set title
  224. $output['page:title'] = $this->site->config['siteName'].' | Events - Searching Events for "'.$output['query'].'"';
  225. $output['page:heading'] = 'Search events for: "'.$output['query'].'"';
  226. // set pagination
  227. $output['pagination'] = ($pagination = $this->pagination->create_links()) ? $pagination : '';
  228. // display with cms layer
  229. $this->pages->view('events_search', $output, TRUE);
  230. }
  231. function ac_search()
  232. {
  233. $tags = strtolower($_POST["q"]);
  234. if (!$tags)
  235. {
  236. return FALSE;
  237. }
  238. if ($objectIDs = $this->tags->search('events', $tags))
  239. {
  240. // form dropdown and myql get countries
  241. if ($searches = $this->events->search_events($objectIDs))
  242. {
  243. // go foreach
  244. foreach($searches as $search)
  245. {
  246. $items[$search['tags']] = array('id' => $search['eventID'], 'name' => $search['eventTitle']);
  247. }
  248. foreach ($items as $key=>$value)
  249. {
  250. $id = $value['id'];
  251. $name = $value['name'];
  252. /* If you want to force the results to the query
  253. if (strpos(strtolower($key), $tags) !== false)
  254. {
  255. echo "$key|$id|$name\n";
  256. }*/
  257. $this->output->set_output("$key|$id|$name\n");
  258. }
  259. }
  260. }
  261. }
  262. function feed()
  263. {
  264. $tagdata = array();
  265. $this->load->helper('xml');
  266. $data['encoding'] = 'utf-8';
  267. $data['feed_name'] = $this->site->config['siteName'] . ' | Events RSS Feed';
  268. $data['feed_url'] = site_url('/events');
  269. $data['page_description'] = 'Events RSS Feed for '.$this->site->config['siteName'].'.';
  270. $data['page_language'] = 'en';
  271. $data['creator_email'] = $this->site->config['siteEmail'];
  272. $data['events'] = $this->events->get_events(10);
  273. $this->output->set_header('Content-Type: application/rss+xml');
  274. $this->load->view('rss', $data);
  275. }
  276. function _populate_events($events = '')
  277. {
  278. if ($events && is_array($events))
  279. {
  280. $x = 0;
  281. foreach($events as $event)
  282. {
  283. // set month
  284. //$months[dateFmt($event['eventDate'], 'n')] = dateFmt($event['eventDate'], 'F');
  285. // populate template array
  286. $data[$x] = array(
  287. 'event:link' => site_url('events/viewevent/'.$event['eventID']),
  288. 'event:title' => $event['eventTitle'],
  289. 'event:location' => $event['location'],
  290. 'event:date' => dateFmt($event['eventDate'], ($this->site->config['dateOrder'] == 'MD') ? 'M jS Y' : 'jS M Y').
  291. (($event['time']) ? ' ('.$event['time'].')' : '').
  292. (($event['eventEnd'] > 0) ? ' - '.dateFmt($event['eventEnd'], ($this->site->config['dateOrder'] == 'MD') ? 'M jS Y' : 'jS M Y') : ''),
  293. 'event:day' => dateFmt($event['eventDate'], 'd'),
  294. 'event:month' => dateFmt($event['eventDate'], 'M'),
  295. 'event:year' => dateFmt($event['eventDate'], 'y'),
  296. 'event:body' => $this->template->parse_body($event['description'], TRUE, site_url('events/viewevent/'.$event['eventID'])),
  297. 'event:excerpt' => $this->template->parse_body($event['excerpt'], TRUE, site_url('events/viewevent/'.$event['eventID'])),
  298. 'event:author' => $this->events->lookup_user($event['userID'], TRUE),
  299. 'event:author-id' => $event['userID']
  300. );
  301. // get tags
  302. if ($event['tags'])
  303. {
  304. $tags = explode(' ', $event['tags']);
  305. $i = 0;
  306. foreach ($tags as $tag)
  307. {
  308. $data[$x]['event:tags'][$i]['tag:link'] = site_url('blog/tag/'.$tag);
  309. $data[$x]['event:tags'][$i]['tag'] = $tag;
  310. $i++;
  311. }
  312. }
  313. // set month
  314. //$data[$x]['event:month'] = ($months[$x-1]['event:month'] != dateFmt($event['eventDate'], 'n')) ? dateFmt($event['eventDate'], 'F') : '';
  315. $x++;
  316. }
  317. return $data;
  318. }
  319. else
  320. {
  321. return FALSE;
  322. }
  323. }
  324. }