* @version SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $ */ class eventsActions extends sfActions { public function executeList(sfWebRequest $request) { $this->filter = new EventFormFilter(); if($request->hasParameter($this->filter->getName())) { $data = $request->getParameter($this->filter->getName()); } else { $data = array(); } if($date = $request->getParameter('date', false)) { $data['date_from'] = $date; $data['date_to'] = $date; } if($profile_id = $request->getParameter('profile_id', false)) { $data['profile_id'] = $profile_id; } $this->filter->bind($data); if($this->filter->isValid()) { $query = $this->filter->getQuery(); } else { $query = Doctrine::getTable('Event')->createQuery('r')->addWhere('id = 0'); } $category_ids = $this->filter->getValue('categories_list'); if(count($category_ids)) { $this->categories = Doctrine::getTable('JobCategory')->createQuery() ->whereIn('id', $category_ids) ->execute(); } else { $this->categories = Doctrine::getTable('JobCategory')->createQuery() ->where('id != ?', 6) ->execute(); } $query->orderBy('r.date_from ASC'); $this->pager = new sfDoctrinePager( 'Event', 0 ); $this->pager->setQuery($query); $this->pager->setPage($request->getParameter('page', 1)); $this->pager->init(); } public function executeCreate(sfWebRequest $request) { $this->forward404Unless($this->getUser()->isSuperAdmin() || $this->getUser()->getProfile()->isEventer()); $this->form = new FrontendEventForm(null, array('profile' => $this->getUser()->getProfile())); if($request->isMethod('post')) { $this->processForms($request); } $this->setTemplate('edit'); } public function executeUpdate(sfWebRequest $request) { $this->forward404Unless($this->getUser()->isSuperAdmin() || $this->getUser()->getProfile()->isEventer()); $this->forward404Unless($this->event = $this->getRoute()->getObject()); $this->forwardUnless($this->event->hasPermissions($this->getUser()), 'sfGuardAuth', 'secure'); $this->form = new FrontendEventForm($this->event); if($request->isMethod('put')) { $this->processForms($request); } $this->setTemplate('edit'); } protected function processForms(sfWebRequest $request) { $this->form->bind($request->getParameter($this->form->getName()), $request->getFiles($this->form->getName())); if($this->form->isValid()) { $event = $this->form->save(); $this->getUser()->addMessage(__('Událost uložena')); $this->redirect($this->generateUrl('events_list', array('profile_id' => $this->getUser()->getProfile()->getId()))); } } public function executeDelete(sfWebRequest $request) { $this->forward404Unless($this->getUser()->getProfile()->isEventer()); $this->forward404Unless($this->event = $this->getRoute()->getObject()); $this->forwardUnless($this->event->hasPermissions($this->getUser()), 'sfGuardAuth', 'secure'); $this->event->delete(); $this->getUser()->addMessage(__('Událost smazána')); $this->redirect($request->getReferer()); } public function executeRead(sfWebRequest $request) { $this->forward404Unless($this->event = $this->getRoute()->getObject()); } public function executeGetEventsJson(sfWebRequest $request) { sfApplicationConfiguration::getActive()->loadHelpers('Date'); $from = date('Y-m-d', $request->getParameter('start', time())); $to = date('Y-m-d', $request->getParameter('end', time())); $days = Doctrine::getTable('Event')->getDaysWithEvents($from, $to); // var_dump($days); // die(); $data = array(); foreach($days as $day) { $class = 'fullcalentar_event-'.count($day['categories']); $day_num = $this->getDayNum($from, $to, $day['date']); foreach($day['categories'] as $i => $cat) { $data[] = array( 'id' => $day['date'].'-'.$cat->getId(), 'title' => $cat->getId(), 'tooltip' => 'xa', 'className' => $class.'-'.($i+1).'', 'start' => $day['date'], 'end' => $day['date'], 'url' => $this->generateUrl('events_list', array('date' => $day['date'])), 'color' => $cat->getColor(), 'week' => floor($day_num/7), 'day' => $day_num ); } } echo json_encode($data); die(); } protected function getDayNum($from, $to, $date) { $tmp = $from; $num = 0; for($i = 0 ; $i < 50; $i++) { $tmp = date("Y-m-d", strtotime('+'.$num.' day', strtotime($from))); if($tmp == $date) { return $num; } $num = $i; } return $num; } }