getInvokeArg('bootstrap'); $this->config = $bootstrap->getOptions(); $this->pbs2host = $this->config['pbs2']['host']; $this->pbs2Api = new Poolctrl_Pbs2Api($this->config); $this->gearmanServerHost = $this->config['gearman']['server']['host']; $this->gearmanServerPort = $this->config['gearman']['server']['port']; $this->gearmanWorkerWaitTime = $this->config['gearman']['worker']['waitTime']; $this->gearmanWorkerUpdateRate = $this->config['gearman']['worker']['updateRate']; $this->gearmanClient = new GearmanClient(); $this->gearmanClient->addServer($this->gearmanServerHost); $this->eventMapper = new Application_Model_EventMapper(); $this->eventcategoryMapper = new Application_Model_EventcategoryMapper(); $actionName = $this->getRequest()->getActionName(); if($actionName == "report" || $actionName == "run") { $this->userIDsNamespace = Zend_Session::namespaceGet('userIDs'); if(isset($this->userIDsNamespace['apikey'])) { $apikey = $this->userIDsNamespace['apikey']; } else { $apikey = $this->_request->getParam('apikey'); } if($apikey != ""){ $this->acl = new Poolctrl_Acl($this->pbs2host, $this->config['pbs2']['checkright'] . $apikey, 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); } else { header('HTTP/1.0 401 No apikey is set'); die(); } } else if (Zend_Auth::getInstance()->hasIdentity()) { $this->userIDsNamespace = Zend_Session::namespaceGet('userIDs'); if(isset($this->userIDsNamespace['apikey'])) { $this->acl = new Poolctrl_Acl($this->pbs2host, $this->config['pbs2']['checkright'] . $this->userIDsNamespace['apikey'], 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); } if(!$this->userIDsNamespace['membershipID'] !='') { $this->_helper->redirector('selectmembership', 'person'); return; } } else { $this->_helper->redirector('login', 'auth'); return; } } public function indexAction() { if(!$this->acl->checkRight('eo')) { $this->_redirect('/'); } if(isset($this->userIDsNamespace['poolID'])) { $this->view->poolID = $this->userIDsNamespace['poolID']; } } public function addAction() { if(!$this->acl->checkRight('ec')) { $this->_redirect('/'); } $eventcategorylist = $this->eventcategoryMapper->fetchAll(); $this->poolVal = $this->getRequest()->getParam('poolSelectBoxVal'); $bootoslist = array(); $configlist = array(); $this->pbs2Api->getBootos($bootoslist, $configlist); if(!isset($this->userIDsNamespace['poolID'])) { $poollist = array(); $this->pbs2Api->getPool($poollist); } $repeatendMapper = new Application_Model_RepeatendMapper(); $repeatendlist = $repeatendMapper->fetchAll(); $repeattypeMapper = new Application_Model_RepeattypeMapper(); $repeattypelist = $repeattypeMapper->fetchAll(); $add = $this->getRequest()->getParam("add"); if($this->getRequest()->getParam('start')) { $start = date ('m/d/Y h:i a', strtotime($this->getRequest()->getParam('start'))); } else if($this->getRequest()->getParam('evstart')) { $start = date ('m/d/Y h:i a', strtotime(substr($this->getRequest()->getParam('evstart'), 0, 24))); } else {$start = 'mm/dd/yyyy h:min';} if($this->getRequest()->getParam('end')) { $end = date ('m/d/Y h:i a', strtotime($this->getRequest()->getParam('end'))); } else if($this->getRequest()->getParam('evend')) { $end = date ('m/d/Y h:i a', strtotime(substr($this->getRequest()->getParam('evend'), 0, 24))); } else {$end = 'mm/dd/yyyy h:min';} if (!isset($add)){ $defaultEventCategory = $this->config['event']['category']['default']; foreach($eventcategorylist as $eventcategory) { if($eventcategory->getTitle() == $defaultEventCategory) { $defaultEventCategoryID = $eventcategory->getID(); break; } } if(isset($this->userIDsNamespace['poolID'])) { $addForm = new Application_Form_EventAdd(array('eventcategorylist' => $eventcategorylist, 'bootoslist' => $bootoslist, 'configlist' => $configlist, 'repeatendlist' => $repeatendlist, 'repeattypelist' => $repeattypelist, 'start' => $start, 'end' => $end, 'defaultEventCategoryID' => $defaultEventCategoryID, 'poolID' => $this->userIDsNamespace['poolID'])); } else { $addForm = new Application_Form_EventAdd(array('eventcategorylist' => $eventcategorylist, 'bootoslist' => $bootoslist, 'configlist' => $configlist, 'repeatendlist' => $repeatendlist, 'repeattypelist' => $repeattypelist, 'poollist' => $poollist, 'start' => $start, 'end' => $end, 'defaultEventCategoryID' => $defaultEventCategoryID)); } } else { if(isset($this->userIDsNamespace['poolID'])) { $addForm = new Application_Form_EventAdd(array('eventcategorylist' => $eventcategorylist, 'bootoslist' => $bootoslist, 'configlist' => $configlist, 'repeatendlist' => $repeatendlist, 'repeattypelist' => $repeattypelist, 'start' => $start, 'end' => $end, 'poolID' => $this->userIDsNamespace['poolID'], $this->getRequest()->getParams())); } else { $addForm = new Application_Form_EventAdd(array('eventcategorylist' => $eventcategorylist, 'bootoslist' => $bootoslist, 'configlist' => $configlist, 'repeatendlist' => $repeatendlist, 'repeattypelist' => $repeattypelist, 'poollist' => $poollist, 'start' => $start, 'end' => $end, $this->getRequest()->getParams())); } $params = $this->getRequest()->getParams(); if(!isset($params['pbs_poolID'])) { $params['pbs_poolID'] = $this->userIDsNamespace['poolID']; } if ($addForm->isValid($params)) { $configName = 'pbs_configID_' . $params['pbs_bootosID']; if(isset($params[$configName]) && $params[$configName] != 'default') { $params['pbs_configID'] = $params[$configName]; unset($params[$configName]); } else { unset($params[$configName]); unset($params['pbs_configID']); } if($params['immediate']) { $params['start'] = date ('Y-m-d H:i', strtotime($this->getRequest()->getParam('start'))); unset($params['end']); unset($params['repeatEnd']); $params['repeat'] = 0; } else { $params['start'] = date ('Y-m-d H:i', strtotime($params['start'])); if(isset($params['end'])) { $params['end'] = date ('Y-m-d H:i', strtotime($params['end'])); } else { unset($params['end']); } if(!isset($params['repeattype'])) { unset($params['repeattype']); } if(!isset($params['repeatend'])) { unset($params['repeatend']); } if(isset($params['repeatdate'])) { $params['repeatdate'] = date ('Y-m-d H:i', strtotime($params['repeatdate'])); } else { unset($params['repeatdate']); } if(!isset($params['repeatings'])) { unset($params['repeatings']); } if($params['participants'] <= 0) { unset($params['participants']); } } $event = new Application_Model_Event($params); $event->setPbs_membershipID($this->userIDsNamespace['membershipID']); $result = $this->eventcategoryMapper->findBy(array('title' => 'Shutdown')); $shutdownCategory = $result[0]; if($event->getCategory() != $shutdownCategory->getID()) { if($event->getPbs_configID()) { $bootmenuID = $this->pbs2Api->addBootmenu($event->getTitle(), $event->getPbs_bootosID(), $event->getPbs_configID()); } else { $bootmenuID = $this->pbs2Api->addBootmenu($event->getTitle(), $event->getPbs_bootosID()); } $event->setPbs_bootmenuID($bootmenuID); $filterID = $this->pbs2Api->addFilter($event->getTitle(), $event->getPbs_bootmenuID()); $event->setPbs_filterID($filterID); $startTime = date('H:i', strtotime($event->getStart())); if($event->getEnd()) { $endTime = date('H:i', strtotime($event->getEnd())); } else { $endTime = date('H:i', strtotime($event->getStart()) + 900); } $filterentriesID1 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 7, $startTime, $endTime); $filterentriesID2 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 3, $event->getPbs_poolID(), ''); if(!$event->getRepeat()) { $startDate = date('d.m.Y', strtotime($event->getStart())); if($event->getEnd()) { $endDate = date('d.m.Y', strtotime($event->getEnd())); } else { $endDate = date('d.m.Y', strtotime($event->getStart())); } $filterentriesID3 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 11, strtotime($startDate), strtotime($endDate)); } } if($event->getImmediate()) { $result = $this->eventcategoryMapper->fetchAll(); $eventcategories = array(); foreach($result as $category) { $eventcategories[$category->getID()] = $category->getTitle(); } $eventCategory = $eventcategories[$event->getCategory()]; $runningtypeMapper = new Application_Model_RunningtypeMapper(); $runningtype = $runningtypeMapper->findBy(array("title" => $eventCategory)); $event->setRunning(1); $event->setRunningtype($runningtype[0]->getID()); } else { $event->setRunning(0); } $event->setCreated(time()); if(!$event->getParticipants()) { $event->setParticipants(null); } if(!$event->getEnd()) { $event->setEnd(null); } if(!$event->getNote()) { $event->setNote(null); } if(!$event->getPbs_bootosID()) { $event->setPbs_bootosID(null); } if(!$event->getPbs_configID()) { $event->setPbs_configID(null); } if(!$event->getPbs_filterID()) { $event->setPbs_filterID(null); } if(!$event->getPbs_bootmenuID()) { $event->setPbs_bootmenuID(null); } if(!$event->getRepeattype()) { $event->setRepeattype(null); } if(!$event->getRepeatend()) { $event->setRepeatend(null); } if(!$event->getRepeatdate()) { $event->setRepeatdate(null); } if(!$event->getRepeatings()) { $event->setRepeatings(null); } if(!$event->getRunningtype()) { $event->setRunningtype(null); } $overlapping = 0; if($event->repeat) { $overlapping = $this->repeatEvent($event); } else { try { $eventID = $this->eventMapper->save($event); } catch(Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } $event->setID($eventID); } if($event->getImmediate()) { $this->runEvent($event, $this->userIDsNamespace['apikey']); } $this->_redirect('/event/index/overlapping/' . $overlapping); } } $params = $this->getRequest()->getParams(); $this->view->params = $params; $this->view->addForm = $addForm; } public function deleteAction() { if(!$this->acl->checkRight('ed')) { $this->_redirect('/'); } $this->_helper->viewRenderer->setNoRender(); $eventID = $this->_request->getParam('eventID'); if(isset($eventID)) { $event = new Application_Model_Event(); $this->eventMapper->find($eventID, $event); if($event->getPbs_membershipID() != $this->userIDsNamespace['membershipID']) { if(!$this->acl->checkRight('edo')) { $this->_redirect('/'); } } if($event->getPbs_bootmenuID() && $event->getRepeat() != 1) { $this->pbs2Api->deleteBootmenu($event->getPbs_bootmenuID()); } if($event->getPbs_filterID() && $event->getRepeat() != 1) { $this->pbs2Api->deleteFilter($event->getPbs_filterID()); } try { $this->eventMapper->delete($event); } catch(Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } $this->_redirect('/event/'); } else { $this->_redirect('/event/'); return; } } public function editAction() { if(!$this->acl->checkRight('ee')) { $this->_redirect('/'); } $eventID = $this->_request->getParam('eventID'); if(!isset($eventID)) { $this->_helper->redirector('add', 'event'); return; } else { $event = new Application_Model_Event(); $this->eventMapper->find($eventID, $event); $oldEvent = new Application_Model_Event(); $this->eventMapper->find($eventID, $oldEvent); if($event->getImmediate()) { $this->_redirect('/event/'); exit; } $eventcategorylist = $this->eventcategoryMapper->fetchAll(); $bootoslist = array(); $configlist = array(); $this->pbs2Api->getBootos($bootoslist, $configlist); $poollist = array(); $this->pbs2Api->getPool($poollist); if($event->getPbs_membershipID() != $this->userIDsNamespace['membershipID']) { if(!$this->acl->checkRight('eeo')) { $this->_redirect('/'); } } $repeatendMapper = new Application_Model_RepeatendMapper(); $repeatendlist = $repeatendMapper->fetchAll(); $repeattypeMapper = new Application_Model_RepeattypeMapper(); $repeattypelist = $repeattypeMapper->fetchAll(); $save = $this->getRequest()->getParam("save"); if (isset($save)){ $params = $this->getRequest()->getParams(); $editForm = new Application_Form_EventEdit(array('eventcategorylist' => $eventcategorylist, 'bootoslist' => $bootoslist, 'configlist' => $configlist, 'poollist' => $poollist, 'repeattypelist' => $repeattypelist, 'repeatendlist' => $repeatendlist, 'oldtitle' => $event->getTitle(), 'params' => $params)); if ($editForm->isValid($params)) { $configName = 'pbs_configID_' . $params['pbs_bootosID']; if(isset($params[$configName]) && $params[$configName] != 'default') { $params['pbs_configID'] = $params[$configName]; unset($params[$configName]); } else { unset($params[$configName]); $event->setPbs_configID(null); } $params['start'] = date ('Y-m-d H:i:s', strtotime($params['start'])); if(isset($params['end'])) { $params['end'] = date ('Y-m-d H:i:s', strtotime($params['end'])); } else { unset($params['end']); $event->setEnd(null); } if(!isset($params['repeat'])) { unset($params['repeat']); } if(!isset($params['repeattype'])) { unset($params['repeattype']); } if(!isset($params['repeatend'])) { unset($params['repeatend']); } if(isset($params['repeatdate'])) { $params['repeatdate'] = date ('Y-m-d H:i:s', strtotime($params['repeatdate'])); } else { unset($params['repeatdate']); } if(!isset($params['repeatings'])) { unset($params['repeatings']); } if(!isset($params['participants'])) { unset($params['participants']); $event->setParticipants(null); } $params['immediate'] = 0; $event->setOptions($params); $event->setID($eventID); if(!$event->getParticipants()) { $event->setParticipants(null); } if(!$event->getEnd()) { $event->setEnd(null); } if(!$event->getNote()) { $event->setNote(null); } if(!$event->getPbs_bootosID()) { $event->setPbs_bootosID(null); } if(!$event->getPbs_configID()) { $event->setPbs_configID(null); } if(!$event->getPbs_filterID()) { $event->setPbs_filterID(null); } if(!$event->getPbs_bootmenuID()) { $event->setPbs_bootmenuID(null); } if(!$event->getRepeattype()) { $event->setRepeattype(null); } if(!$event->getRepeatend()) { $event->setRepeatend(null); } if(!$event->getRepeatdate()) { $event->setRepeatdate(null); } if(!$event->getRepeatings()) { $event->setRepeatings(null); } if(!$event->getRunningtype()) { $event->setRunningtype(null); } if(!$event->getCreated()) { $event->setCreated(null); } $overlapping = 0; if($event->getRepeat() == 1 && $params['wdh'] != 1) { $event->setRepeat(2); } if($event->getRepeat() == 0 || $event->getRepeat() == 2) { $overlappingEvents = $this->eventMapper->getOverlappingEvents(date('Y-m-d H:i:s', strtotime($event->getStart())), date('Y-m-d H:i:s', strtotime($event->getEnd())), $event->getPbs_PoolID(), $event); if(count($overlappingEvents) > 0 ) { $overlapping = 1; } if(!$overlapping) { $result = $this->eventcategoryMapper->findBy(array('title' => 'Shutdown')); $shutdownCategory = $result[0]; if($event->getCategory() != $shutdownCategory->getID()) { $diff = $this->eventMapper->compare($oldEvent, $event); if(isset($diff['pbs_bootosID']) || isset($diff['title']) || isset($diff['pbs_configID'])) { if($event->getPbs_configID()) { $this->pbs2Api->changeBootmenu($event->getTitle(), $event->getPbs_bootosID(), $event->getPbs_configID()); } else { $this->pbs2Api->changeBootmenu($event->getTitle(), $event->getPbs_bootosID()); } } if(isset($diff['title'])) { $this->pbs2Api->changeFilter($event->getPbs_filterID(), $event->getTitle()); } if(isset($diff['start']) || isset($diff['end']) || isset($diff['pbs_poolID'])) { if($event->getRepeat() != 2) { $this->pbs2Api->deleteFilter($event->getPbs_filterID()); } $filterID = $this->pbs2Api->addFilter($event->getTitle(), $event->getPbs_bootmenuID()); $event->setPbs_filterID($filterID); $startTime = date('H:i', strtotime($event->getStart())); if($event->getEnd()) { $endTime = date('H:i', strtotime($event->getEnd())); } else { $endTime = date('H:i', strtotime($event->getStart()) + 900); } $filterentriesID1 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 7, $startTime, $endTime); $filterentriesID2 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 3, $event->getPbs_poolID(), ''); $startDate = date('d.m.Y', strtotime($event->getStart())); if($event->getEnd()) { $endDate = date('d.m.Y', strtotime($event->getEnd())); } else { $endDate = date('d.m.Y', strtotime($event->getStart())); } $filterentriesID3 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 11, strtotime($startDate), strtotime($endDate)); } } } } if(!$overlapping) { if($event->getRepeat() == 1) { $overlapping = $this->editRepeatEvent($oldEvent, $event); } else { try { $this->eventMapper->save($event); } catch(Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } } } $this->_redirect('/event/index/overlapping/' . $overlapping); } } else { $this->getRequest()->setParam('title', $event->getTitle()); $this->getRequest()->setParam('immediate', $event->getImmediate()); $this->getRequest()->setParam('start', $event->getStart()); if($event->getEnd()) { $this->getRequest()->setParam('end', $event->getEnd()); } $this->getRequest()->setParam('repeat', $event->getRepeat()); if($event->getRepeattype()) { $this->getRequest()->setParam('repeattype', $event->getRepeattype()); } if($event->getRepeatend()) { $this->getRequest()->setParam('repeatend', $event->getRepeatend()); } if($event->getRepeatdate()) { $this->getRequest()->setParam('repeatdate', $event->getRepeatdate()); } if($event->getRepeatings()) { $this->getRequest()->setParam('repeatings', $event->getRepeatings()); } $this->getRequest()->setParam('participants', $event->getParticipants()); $this->getRequest()->setParam('category', $event->getCategory()); $eventCategory = new Application_Model_Eventcategory(); $this->eventcategoryMapper->find($event->getCategory(), $eventCategory); $this->getRequest()->setParam('categoryLabel', $eventCategory->getTitle()); $this->getRequest()->setParam('note', $event->getNote()); $this->getRequest()->setParam('pbs_poolID', $event->getPbs_poolID()); $this->getRequest()->setParam('pbs_bootosID', $event->getPbs_bootosID()); $this->getRequest()->setParam('pbs_configID_' . $event->getPbs_bootosID(), $event->getPbs_configID()); $this->getRequest()->setParam('pbs_membershipID', $event->getPbs_membershipID()); $this->getRequest()->setParam('force', $event->getForce()); $params = $this->getRequest()->getParams(); $editForm = new Application_Form_EventEdit(array('eventcategorylist' => $eventcategorylist, 'bootoslist' => $bootoslist, 'configlist' => $configlist, 'poollist' => $poollist, 'repeattypelist' => $repeattypelist, 'repeatendlist' => $repeatendlist, 'oldtitle' => $event->getTitle(), 'params' => $params)); } $this->view->editForm = $editForm; $this->view->params = $params; } } public function deleteallAction() { if (!$this->acl->checkRight('ed')) { $this->_redirect('/'); } $this->_helper->viewRenderer->setNoRender(); $eventTitle = $this->_request->getParam('eventTitle'); if (isset ($eventTitle)) { $event = new Application_Model_Event(); $events = $this->eventMapper->findBy(array("title" => $eventTitle)); if ($events[0]->getPbs_membershipID() != $this->userIDsNamespace['membershipID']) { if (!$this->acl->checkRight('edo')) { $this->_redirect('/'); } } try { foreach($events as $event) { if($event->getPbs_bootmenuID()) { $this->pbs2Api->deleteBootmenu($event->getPbs_bootmenuID()); } if($event->getPbs_filterID()) { $this->pbs2Api->deleteFilter($event->getPbs_filterID()); } if($event->getRunning() == 0) { $this->eventMapper->delete($event); } } } catch (Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } $this->_redirect('/event/'); } else { $this->_redirect('/event/'); return; } } /* * ---------------------------------- * START - SPECIAL CALENDAR FUNCTIONS * ---------------------------------- */ public function getpoollistAction() { if(!$this->acl->checkRight('eo')) { $this->_redirect('/'); } $this->_helper->layout->disableLayout(); $poollist = array(); $this->pbs2Api->getPool($poollist); if(isset($this->userIDsNamespace['poolID'])) { $this->view->poolID = $this->userIDsNamespace['poolID']; } $this->view->poollist = $poollist; } public function checkoverlapdropAction() { if(!$this->acl->checkRight('eo')) { $this->_redirect('/'); } $this->_helper->layout->disableLayout(); $eventID = $this->getRequest()->getParam('eventID'); $date = intval(strtotime(substr($this->getRequest()->getParam('date'), 0, 24))); $poolID = $this->getRequest()->getParam('poolID'); $events['withrepeat'] = $this->eventMapper->getDraggingEvents($eventID); $events['withoutrepeat'] = $this->eventMapper->getDraggingEvent($eventID); // Calculate time shift $diff=0; foreach($events['withrepeat'] as $e) { if($e['eventID'] == $eventID) { $diff = $date - strtotime($e['start']); break; } } // Check for overlap with repeat $overlapswithrepeat = array(); $cfeventswithrepeat = array(); foreach($events['withrepeat'] as $e) { $evstartTime = intval(strtotime($e['start'])) + $diff; if($e['running'] == 0 && $e['repeat'] == 1 && $evstartTime < time()) { $this->view->past = true; } $enewstart = date('Y-m-d H:i:s', $this->checkTimeChange(strtotime($e['start']), strtotime($e['start']) + $diff)); if(!isset($e['end'])) { $e['end'] = date('Y-m-d H:i:s', strtotime($e['start']) + 300); $e['endSet'] = true; } else { $e['endSet'] = false; } $enewend = date('Y-m-d H:i:s', $this->checkTimeChange(strtotime($e['end']), strtotime($e['end']) + $diff)); $cfv = true; $event = new Application_Model_Event($e); $event->setID($e['eventID']); // overlap events if($e['running'] == 0 ) { $results = $this->eventMapper->getOverlappingEvents($enewstart, $enewend, $poolID, $event, true); if(count($results) > 0) { foreach($results as $result) { if($result->getID() != $eventID) { $overlapswithrepeat[] = $result->toArray(); $cfv = false; } } } } // conflict free events with repeat if($cfv) { if($e['endSet']) { unset($e['end']); unset($e['endSet']); } else { unset($e['endSet']); } $evt['eventID'] = $e['eventID']; $evt['title'] = $e['title']; $cfeventswithrepeat[] = $e; } } // Check for overlap without repeat $overlapswithoutrepeat = array(); $cfeventswithoutrepeat = array(); $cfv = true; if(isset($events['withoutrepeat'])) { $e = $events['withoutrepeat']; $event = new Application_Model_Event($e); $event->setID($e['eventID']); // Calculate time shift $diff=0; $diff = $date - strtotime($e['start']); $enewstart = date('Y-m-d H:i:s', strtotime($e['start']) + $diff); if(!isset($e['end'])) { $e['end'] = date('Y-m-d H:i:s', strtotime($e['start']) + 300); $e['endSet'] = true; } else { $e['endSet'] = false; } $enewend = date('Y-m-d H:i:s', strtotime($e['end']) + $diff); // overlap events $results = $this->eventMapper->getOverlappingEvents($enewstart, $enewend, $poolID, $event); if(count($results) > 0) { foreach($results as $result) { if($result->getID() != $eventID) { $overlapswithoutrepeat[] = $result->toArray(); $cfv = false; } } } // conflict free events without repeat if($cfv) { if($e['endSet']) { unset($e['end']); unset($e['endSet']); } else { unset($e['endSet']); } $cfeventswithoutrepeat[] = $e; } } $this->view->overlapswithrepeat = $overlapswithrepeat; $this->view->cfeventswithrepeat = $cfeventswithrepeat; $this->view->overlapswithoutrepeat = $overlapswithoutrepeat; $this->view->cfeventswithoutrepeat = $cfeventswithoutrepeat; } public function checkoverlapselectAction() { if(!$this->acl->checkRight('eo')) { $this->_redirect('/'); } $this->_helper->layout->disableLayout(); $poolID = $this->getRequest()->getParam('poolID'); $startDate = date("Y-m-d H:i:s", intval(strtotime(substr($this->getRequest()->getParam('startDate'), 0, 24)))); $endDate = date("Y-m-d H:i:s", intval(strtotime(substr($this->getRequest()->getParam('endDate'), 0, 24)))); $overlaps = array(); $results = $this->eventMapper->getOverlappingEvents($startDate, $endDate, $poolID); if(count($results) > 0) { foreach($results as $result) { $overlaps[] = $result->toArray(); } } $this->view->overlaps = $overlaps; } public function checkoverlapresizeAction() { if(!$this->acl->checkRight('eo')) { $this->_redirect('/'); } $this->_helper->layout->disableLayout(); $poolID = $this->getRequest()->getParam('poolID'); $eventID = $this->getRequest()->getParam('eventID'); $minuteDelta = intval($this->getRequest()->getParam('minuteDelta')*60); $dayDelta = intval($this->getRequest()->getParam('dayDelta')*24*60*60); $diffDelta = intval($minuteDelta + $dayDelta); $events['withrepeat'] = $this->eventMapper->getDraggingEvents($eventID); $events['withoutrepeat'] = $this->eventMapper->getDraggingEvent($eventID); // Check for overlap with repeat $overlapswithrepeat = array(); $cfeventswithrepeat = array(); foreach($events['withrepeat'] as $e) { $enewstart = date("Y-m-d H:i:s", strtotime($e['start'])); $enewend = date("Y-m-d H:i:s", strtotime($e['end']) + $diffDelta); $cfv = true; // overlap events if($e['running'] == 0 ) { $event = new Application_Model_Event($e); $event->setID($e['eventID']); $results = $this->eventMapper->getOverlappingEvents($enewstart, $enewend, $poolID, $event); if(count($results) > 0) { foreach($results as $result) { if($result->getID() != $eventID) { $overlapswithrepeat[] = $result->toArray(); $cfv = false; } } } } // conflict free events with repeat if($cfv) { $cfeventswithrepeat[] = $e; } } // Check for overlap without repeat $overlapswithoutrepeat = array(); $cfeventswithoutrepeat = array(); $e = $events['withoutrepeat']; $event = new Application_Model_Event($e); $event->setID($e['eventID']); $enewstart = date('Y-m-d H:i:s', strtotime($e['start'])); $enewend = date('Y-m-d H:i:s', $this->checkTimeChange(strtotime($e['end']), strtotime($e['end']) + $diffDelta)); $cfv = true; // overlap events $results = $this->eventMapper->getOverlappingEvents($enewstart, $enewend, $poolID, $event); if(count($results) > 0) { foreach($results as $result) { if($result->getID() != $eventID) { $overlapswithoutrepeat[] = $result->toArray(); $cfv = false; } } } // conflict free events without repeat if($cfv) { $cfeventswithoutrepeat[] = $e; } $this->view->overlapswithrepeat = $overlapswithrepeat; $this->view->cfeventswithrepeat = $cfeventswithrepeat; $this->view->overlapswithoutrepeat = $overlapswithoutrepeat; $this->view->cfeventswithoutrepeat = $cfeventswithoutrepeat; } public function eventmoveAction() { if(!$this->acl->checkRight('eo')) { $this->_redirect('/'); } $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $event = new Application_Model_Event(); $oldEvent = new Application_Model_Event(); $evid = $this->getRequest()->getParam('evid'); $evstart = $this->getRequest()->getParam('evstart'); $evend = $this->getRequest()->getParam('evend'); if ($evid!="null") { $this->eventMapper->find($evid,$event); //locate the event in the DB $this->eventMapper->find($evid,$oldEvent); if($event->getRepeat() == 1) { $event->setRepeat(2); } $oldStartTime = date('H:i', strtotime($event->getStart())); $oldStartDate = date('d.m.Y', strtotime($event->getStart())); $evstartTime = intval(strtotime(substr($evstart, 0, 24))); $newStartTime = date('H:i', $evstartTime); $newStartDate = date('d.m.Y', $evstartTime); $event->setStart(date('Y-m-d H:i:s', $evstartTime)); if($event->getEnd()){ $oldEndTime = date('H:i', strtotime($event->getEnd())); $oldEndDate = date('d.m.Y', strtotime($event->getEnd())); $evendTime = intval(strtotime(substr($evend, 0, 24))); $newEndTime = date('H:i', $evendTime); $newEndDate = date('d.m.Y', $evendTime); $event->setEnd(date('Y-m-d H:i:s', $evendTime)); } $result = $this->eventcategoryMapper->findBy(array('title' => 'Shutdown')); $shutdownCategory = $result[0]; if($event->getCategory() != $shutdownCategory->getID()) { if($event->getPbs_filterID()) { if($oldEvent->getRepeat() == 0 || $oldEvent->getRepeat() == 2) { $this->pbs2Api->deleteFilter($oldEvent->getPbs_filterID()); } $filterID = $this->pbs2Api->addFilter($event->getTitle(), $event->getPbs_bootmenuID()); $event->setPbs_filterID($filterID); $startTime = date('H:i', strtotime($event->getStart())); if($event->getEnd()) { $endTime = date('H:i', strtotime($event->getEnd())); } else { $endTime = date('H:i', strtotime($event->getStart()) + 900); } $filterentriesID1 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 7, $startTime, $endTime); $filterentriesID2 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 3, $event->getPbs_poolID(), ''); $startDate = date('d.m.Y', strtotime($event->getStart())); if($event->getEnd()) { $endDate = date('d.m.Y', strtotime($event->getEnd())); } else { $endDate = date('d.m.Y', strtotime($event->getStart())); } $filterentriesID3 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 11, strtotime($startDate), strtotime($endDate)); } } try { $this->eventMapper->save($event); //save the event with the new data } catch (Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } } } public function eventmoveallAction() { if(!$this->acl->checkRight('eo')) { $this->_redirect('/'); } $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $event = new Application_Model_Event(); $eventTitle = $this->getRequest()->getParam('eventTitle'); $evmindelta = $this->getRequest()->getParam('evmindelta'); $evdaydelta = $this->getRequest()->getParam('evdaydelta'); $poolID = $this->getRequest()->getParam('poolID'); if ($eventTitle!=null) { $events = $this->eventMapper->findBy(array("title" => $eventTitle)); if ($events[0]->getPbs_membershipID() != $this->userIDsNamespace['membershipID']) { if (!$this->acl->checkRight('edo')) { $this->_redirect('/'); } } $count = 1; foreach($events as $event) { if($event->getRunning() == 0 && $event->getRepeat() == 1) { //1min = 60sec, 1d = 86400sec $oldStartTime = date('H:i', strtotime($event->getStart())); $oldStartDate = date('d.m.Y', strtotime($event->getStart())); $evstartTime = $this->checkTimeChange(strtotime($event->getStart()), strtotime($event->getStart()) + intval($evmindelta*60) + intval($evdaydelta*86400)); $newStartTime = date('H:i', $evstartTime); $newStartDate = date('d.m.Y', $evstartTime); $eventStart = date('Y-m-d H:i:s', $evstartTime); $event->setStart($eventStart); if($event->getEnd()) { $oldEndTime = date('H:i', strtotime($event->getEnd())); $oldEndDate = date('d.m.Y', strtotime($event->getEnd())); $evendTime = $this->checkTimeChange(strtotime($event->getEnd()), strtotime($event->getEnd()) + intval($evmindelta*60) + intval($evdaydelta*86400)); $newEndTime = date('H:i', $evendTime); $newEndDate = date('d.m.Y', $evendTime); $eventEnd = date('Y-m-d H:i:s', $evendTime); $event->setEnd($eventEnd); } $event->setPbs_poolID($poolID); $result = $this->eventcategoryMapper->findBy(array('title' => 'Shutdown')); $shutdownCategory = $result[0]; if($event->getCategory() != $shutdownCategory->getID()) { if($event->getPbs_filterID()) { $repeattypeMapper = new Application_Model_RepeattypeMapper(); $repeattype = new Application_Model_Repeattype(); $repeattypeMapper->find($event->getRepeattype(), $repeattype); if($repeattype == "Once a week") { if($count == 1) { $oldStartDate = date("N", strototime($oldStartDate)); $oldEndDate = ''; $newStartDate = date("N", strototime($newStartDate)); $newEndDate = ''; $filterentriesQuerie = "filterid=" . $event->getPbs_filterID() . "&oldvalue1=" . strtotime($oldStartDate) . "&oldvalue2=" . strtotime($oldEndDate) . "&value1=" . strtotime($newStartDate) . "&value2=" . strtotime($newEndDate); $this->pbs2Api->changeFilterentry($event->getPbs_filterID(), strtotime($oldStartDate), strtotime($oldEndDate), strtotime($newStartDate), strtotime($newEndDate)); } } else { $this->pbs2Api->changeFilterentry($event->getPbs_filterID(), strtotime($oldStartDate), strtotime($oldEndDate), strtotime($newStartDate), strtotime($newEndDate)); } if($count == 1) { $this->pbs2Api->changeFilterentry($event->getPbs_filterID(), $oldStartTime, $oldEndTime, $newStartTime, $newEndTime); } } } try { $this->eventMapper->save($event); //save the event with the new data } catch (Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } } $count++; } $this->_redirect('/event/'); } else { $this->_redirect('/event/'); return; } } public function eventmovecfAction() { if(!$this->acl->checkRight('eo')) { $this->_redirect('/'); } $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $cfevents = $this->getRequest()->getParam('cfevents'); $cfeventsJSON = Zend_Json::decode($cfevents); $evmindelta = $this->getRequest()->getParam('evmindelta'); $evdaydelta = $this->getRequest()->getParam('evdaydelta'); $poolID = $this->getRequest()->getParam('poolID'); $events = null; if($cfeventsJSON!=null) { foreach($cfeventsJSON as $e) { $event = new Application_Model_Event(); $this->eventMapper->find($e['eventID'], $event); $events[] = $event; $eventIDs[] = $event->getID(); } } $otherEvents = $this->eventMapper->getOtherRepeatEvents($events[0]->getTitle(), $eventIDs); foreach($otherEvents as $event) { $event->setRepeat(2); $filterID = $this->pbs2Api->addFilter($event->getTitle(), $event->getPbs_bootmenuID()); $event->setPbs_filterID($filterID); $startTime = date('H:i', strtotime($event->getStart())); if($event->getEnd()) { $endTime = date('H:i', strtotime($event->getEnd())); } else { $endTime = date('H:i', strtotime($event->getStart()) + 900); } $filterentriesID1 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 7, $startTime, $endTime); $filterentriesID2 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 3, $event->getPbs_poolID(), ''); $startDate = date('d.m.Y', strtotime($event->getStart())); if($event->getEnd()) { $endDate = date('d.m.Y', strtotime($event->getEnd())); } else { $endDate = date('d.m.Y', strtotime($event->getStart())); } $filterentriesID3 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 11, strtotime($startDate), strtotime($endDate)); try { $this->eventMapper->save($event); //save the event with the new data } catch (Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } } if ($events!=null) { if ($events[0]->getPbs_membershipID() != $this->userIDsNamespace['membershipID']) { if (!$this->acl->checkRight('edo')) { $this->_redirect('/'); } } $count = 1; foreach($events as $event) { if($event->getRunning() == 0 && $event->getRepeat() == 1) { //1min = 60sec, 1d = 86400sec $oldStartTime = date('H:i', strtotime($event->getStart())); $oldStartDate = date('d.m.Y', strtotime($event->getStart())); $evstartTime = $this->checkTimeChange(strtotime($event->getStart()), strtotime($event->getStart()) + intval($evmindelta*60) + intval($evdaydelta*86400)); $newStartTime = date('H:i', $evstartTime); $newStartDate = date('d.m.Y', $evstartTime); $eventStart = date('Y-m-d H:i:s', $evstartTime); $event->setStart($eventStart); if($event->getEnd()) { $oldEndTime = date('H:i', strtotime($event->getEnd())); $oldEndDate = date('d.m.Y', strtotime($event->getEnd())); $evendTime = $this->checkTimeChange(strtotime($event->getEnd()), strtotime($event->getEnd()) + intval($evmindelta*60) + intval($evdaydelta*86400)); $newEndTime = date('H:i', $evendTime); $newEndDate = date('d.m.Y', $evendTime); $eventEnd = date('Y-m-d H:i:s', $evendTime); $event->setEnd($eventEnd); } $event->setPbs_poolID($poolID); $result = $this->eventcategoryMapper->findBy(array('title' => 'Shutdown')); $shutdownCategory = $result[0]; if($event->getCategory() != $shutdownCategory->getID()) { if($event->getPbs_filterID()) { $repeattypeMapper = new Application_Model_RepeattypeMapper(); $repeattype = new Application_Model_Repeattype(); $repeattypeMapper->find($event->getRepeattype(), $repeattype); if($repeattype == "Once a week") { if($count == 1) { $oldStartDate = date("N", strototime($oldStartDate)); $oldEndDate = ''; $newStartDate = date("N", strototime($newStartDate)); $newEndDate = ''; $filterentriesQuerie = "filterid=" . $event->getPbs_filterID() . "&oldvalue1=" . strtotime($oldStartDate) . "&oldvalue2=" . strtotime($oldEndDate) . "&value1=" . strtotime($newStartDate) . "&value2=" . strtotime($newEndDate); $this->pbs2Api->changeFilterentry($event->getPbs_filterID(), strtotime($oldStartDate), strtotime($oldEndDate), strtotime($newStartDate), strtotime($newEndDate)); } } else { $this->pbs2Api->changeFilterentry($event->getPbs_filterID(), strtotime($oldStartDate), strtotime($oldEndDate), strtotime($newStartDate), strtotime($newEndDate)); } if($count == 1) { $this->pbs2Api->changeFilterentry($event->getPbs_filterID(), $oldStartTime, $oldEndTime, $newStartTime, $newEndTime); } } } try { $this->eventMapper->save($event); //save the event with the new data } catch (Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } } $count++; } $this->_redirect('/event/'); } else { $this->_redirect('/event/'); return; } } public function eventresizeAction() { if(!$this->acl->checkRight('eo')) { $this->_redirect('/'); } $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $event = new Application_Model_Event(); $oldEvent = new Application_Model_Event(); $evid = $this->getRequest()->getParam('evid'); $evend = $this->getRequest()->getParam('evend'); $poolID = $this->getRequest()->getParam('poolID'); if ($evid!=null) { $this->eventMapper->find($evid,$event); //locate the event in the DB $this->eventMapper->find($evid,$oldEvent); if($event->getRepeat() == 1) { $event->setRepeat(2); } $oldStartTime = date('H:i', strtotime($event->getStart())); $newStartTime = $oldStartTime; $oldEndTime = date('H:i', strtotime($event->getEnd())); $newEndTime = date('H:i', strtotime(substr($evend, 0, 24))); $event->setEnd(date('Y-m-d H:i:s', strtotime(substr($evend, 0, 24)))); $event->setPbs_poolID($poolID); $result = $this->eventcategoryMapper->findBy(array('title' => 'Shutdown')); $shutdownCategory = $result[0]; if($event->getCategory() != $shutdownCategory->getID()) { if($event->getPbs_filterID()) { if($oldEvent->getRepeat() == 0 || $oldEvent->getRepeat() == 2) { $this->pbs2Api->deleteFilter($oldEvent->getPbs_filterID()); } $filterID = $this->pbs2Api->addFilter($event->getTitle(), $event->getPbs_bootmenuID()); $event->setPbs_filterID($filterID); $startTime = date('H:i', strtotime($event->getStart())); if($event->getEnd()) { $endTime = date('H:i', strtotime($event->getEnd())); } else { $endTime = date('H:i', strtotime($event->getStart()) + 900); } $filterentriesID1 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 7, $startTime, $endTime); $filterentriesID2 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 3, $event->getPbs_poolID(), ''); $startDate = date('d.m.Y', strtotime($event->getStart())); if($event->getEnd()) { $endDate = date('d.m.Y', strtotime($event->getEnd())); } else { $endDate = date('d.m.Y', strtotime($event->getStart())); } $filterentriesID3 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 11, strtotime($startDate), strtotime($endDate));date('d.m.Y', strtotime($event->getStart())); } } $this->eventMapper->save($event); //save the event with the new data } } public function eventresizeallAction() { if(!$this->acl->checkRight('eo')) { $this->_redirect('/'); } $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $event = new Application_Model_Event(); $eventTitle = $this->getRequest()->getParam('eventTitle'); $evmindelta = $this->getRequest()->getParam('evmindelta'); $poolID = $this->getRequest()->getParam('poolID'); if ($eventTitle!=null) { $events = $this->eventMapper->findBy(array("title" => $eventTitle)); if ($events[0]->getPbs_membershipID() != $this->userIDsNamespace['membershipID']) { if (!$this->acl->checkRight('edo')) { $this->_redirect('/'); } } $count = 1; foreach($events as $event) { if($event->getRunning() == 0 && $event->getRepeat() == 1) { $evendTime = $this->checkTimeChange(strtotime($event->getEnd()), strtotime($event->getEnd()) + intval($evmindelta*60)); $eventEnd = date('Y-m-d H:i:s', $evendTime); $event->setPbs_poolID($poolID); if($count == 1) { $oldStartTime = date('H:i', strtotime($event->getStart())); $newStartTime = $oldStartTime; $oldEndTime = date('H:i', strtotime($event->getEnd())); $newEndTime = date('H:i', $evendTime); $result = $this->eventcategoryMapper->findBy(array('title' => 'Shutdown')); $shutdownCategory = $result[0]; if($event->getCategory() != $shutdownCategory->getID()) { if($event->getPbs_filterID()) { $this->pbs2Api->changeFilterentry($event->getPbs_filterID(), $oldStartTime, $oldEndTime, $newStartTime, $newEndTime); } } } $event->setEnd($eventEnd); try { $this->eventMapper->save($event); //save the event with the new data } catch (Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } } $count++; } $this->_redirect('/event/'); } else { $this->_redirect('/event/'); return; } } public function eventresizecfAction() { if(!$this->acl->checkRight('eo')) { $this->_redirect('/'); } $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $cfevents = $this->getRequest()->getParam('cfevents'); $cfeventsJSON = Zend_Json::decode($cfevents); $evmindelta = $this->getRequest()->getParam('evmindelta'); $poolID = $this->getRequest()->getParam('poolID'); $events = null; if($cfeventsJSON!=null) { foreach($cfeventsJSON as $e) { $event = new Application_Model_Event($e); $event->setID($e['eventID']); $events[] = $event; } } $otherEvents = $this->eventMapper->getOtherRepeatEvents($events[0]->getTitle(), $eventIDs); foreach($otherEvents as $event) { $event->setRepeat(2); $filterID = $this->pbs2Api->addFilter($event->getTitle(), $event->getPbs_bootmenuID()); $event->setPbs_filterID($filterID); $startTime = date('H:i', strtotime($event->getStart())); if($event->getEnd()) { $endTime = date('H:i', strtotime($event->getEnd())); } else { $endTime = date('H:i', strtotime($event->getStart()) + 900); } $filterentriesID1 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 7, $startTime, $endTime); $filterentriesID2 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 3, $event->getPbs_poolID(), ''); $startDate = date('d.m.Y', strtotime($event->getStart())); if($event->getEnd()) { $endDate = date('d.m.Y', strtotime($event->getEnd())); } else { $endDate = date('d.m.Y', strtotime($event->getStart())); } $filterentriesID3 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 11, strtotime($startDate), strtotime($endDate)); try { $this->eventMapper->save($event); //save the event with the new data } catch (Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } } if ($events!=null) { if ($events[0]->getPbs_membershipID() != $this->userIDsNamespace['membershipID']) { if (!$this->acl->checkRight('edo')) { $this->_redirect('/'); } } // event resize to the past - check $count = 1; foreach($events as $event) { if($event->getRunning() == 0) { $evendTime = $this->checkTimeChange(strtotime($event->getEnd()), strtotime($event->getEnd()) + intval($evmindelta*60)); $eventEnd = date('Y-m-d H:i:s', $evendTime); $event->setPbs_poolID($poolID); if($count == 1) { $oldStartTime = date('H:i', strtotime($event->getStart())); $newStartTime = $oldStartTime; $oldEndTime = date('H:i', strtotime($event->getEnd())); $newEndTime = date('H:i', strtotime($event->getEnd())) + intval($evmindelta*60); $result = $this->eventcategoryMapper->findBy(array('title' => 'Shutdown')); $shutdownCategory = $result[0]; if($event->getCategory() != $shutdownCategory->getID()) { if($event->getPbs_filterID()) { $this->pbs2Api->changeFilterentry($event->getPbs_filterID(), $oldStartTime, $oldEndTime, $newStartTime, $newEndTime); } } } $event->setEnd($eventEnd); try { $this->eventMapper->save($event); //save the event with the new data } catch (Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } } $count++; } $this->_redirect('/event/'); } else { $this->_redirect('/event/'); return; } } public function eventlistAction() { if(!$this->acl->checkRight('eo')) { $this->_redirect('/'); } $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $poolID = $this->getRequest()->getParam('poolID'); $userIDsSession = new Zend_Session_Namespace('userIDs'); $userIDsSession->poolID = $poolID; if($this->acl->checkRight('eoo')) { $eventList = $this->eventMapper->fetchAll(); } else { $eventList = $this->eventMapper->findBy(array("pbs_membershipID", $this->userIDsNamespace['membershipID'])); } foreach ($eventList as $event){ if($event->getPbs_poolID() == 2) {$textColor = 'black';} else $textColor = 'white'; $events[] = array( $events[] = array( 'id' => $event->getID(), 'title' => $event->getTitle(), 'start' => $event->getStart(), 'end' => $event->getEnd(), 'category' => $this->eventcategoryMapper->getCategoryTitle($event->getCategory()), 'participants' => $event->getParticipants(), 'note' => $event->getNote(), 'poolID' => $event->getPbs_poolID(), 'bootosID' => $event->getPbs_bootosID(), 'allDay' => false, 'color' => $this->eventcategoryMapper->getCategoryColor($poolID, $event->getCategory()), 'textColor' => $textColor, 'borderColor' => $this->eventcategoryMapper->getCategoryColor($poolID, $event->getCategory()), 'selected' => false, 'repeat' => $event->getRepeat(), 'opacity' => 1, 'immediate' => $event->getImmediate(), 'running' => $event->getRunning(), ) ); } echo json_encode($events); } public function checkrightAction() { $this->_helper->layout->disableLayout(); $rightShortcut = $this->_request->getParam("rightShortcut"); $this->view->right = $this->acl->checkRight($rightShortcut); } /* * -------------------------------- * END - SPECIAL CALENDAR FUNCTIONS * -------------------------------- */ public function runAction() { if(!$this->acl->checkRight('er')) { header('HTTP/1.0 403 No Right to run events'); die(); } $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $lookbacktime = $this->config['event']['lookbacktime']; $startTime = time() - $lookbacktime * 60; $updatePeriod = $this->config['event']['updatePeriod']; $endTime = $startTime + $lookbacktime * 60 + $updatePeriod * 60; $eventlist = $this->eventMapper->fetchAll(); $result = $this->eventcategoryMapper->fetchAll(); foreach($result as $category) { $eventcategories[$category->getTitle()] = $category->getID(); } if(isset($this->userIDsNamespace['apikey'])) { $apikey = $this->userIDsNamespace['apikey']; } else { $apikey = $this->_request->getParam('apikey'); } $runningtypeMapper = new Application_Model_RunningtypeMapper(); $results = array(); foreach($eventlist as $event) { $run = false; $boot = false; $shutdown = false; $eventStart = strtotime($event->getStart()); $eventEnd = strtotime($event->getEnd()); if($event->getRunning()) { continue; } switch($event->getCategory()) { case $eventcategories['Boot']: if($eventStart >= $startTime && $eventStart <= $endTime) { $run = true; $boot = true; } break; case $eventcategories['Shutdown']: if($eventStart >= $startTime && $eventStart <= $endTime) { $run = true; $shutdown = true; } break; case $eventcategories['Lecture']: if($eventStart >= $startTime && $eventStart <= $endTime) { $run = true; $boot = true; } else if($eventEnd >= $startTime && $eventEnd <= $endTime) { $run = true; $shutdown = true; } break; case $eventcategories['Maintenance']: if($eventStart >= $startTime && $eventStart <= $endTime) { $run = true; $boot = true; } else if($eventEnd >= $startTime && $eventEnd <= $endTime) { $run = true; $shutdown = true; } break; } if($run) { $runningEvents = $this->eventMapper->findBy(array('pbs_poolID' => $event->getPbs_PoolID(), 'running' => 1)); if(count($runningEvents) > 0) { if($boot) { $newStart = date('Y-m-d H:i:s', $eventStart + $updatePeriod * 60); $event->setStart($newStart); } if($shutdown) { $newEnd = date('Y-m-d H:i:s', $eventEnd + $updatePeriod * 60); $event->setEnd($newEnd); } try { $this->eventMapper->save($event); } catch(Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } continue; } $data = array( 'eventName' => $event->getTitle(), ); if($event->getForce()) { $data['force'] = true; } else { $data['force'] = false; } $clients = array(); $this->pbs2Api->getPoolClients($clients, $event->getPbs_poolID()); $data['clients'] = $clients; if($boot) { $bootoslist = array(); $configlist = array(); $this->pbs2Api->getBootos($bootoslist, $configlist); $bootos = $bootoslist[0]; $data['eventOS'] = $bootos->getDistro() . " " . $bootos->getDistroversion(); $dataString = json_encode($data); $result = $this->gearmanClient->do("boot", $dataString, 'boot' . $event->getTitle()); if (! $this->gearmanClient->runTasks()) { echo "ERROR " . $gmc->error() . "\n"; exit; } $results[$event->getTitle()] = $result; $result = $runningtypeMapper->findBy(array("title" => "boot")); $runningtypeBoot = $result[0]; $event->setRunning(1); $event->setRunningtype($runningtypeBoot->getID()); try { $this->eventMapper->save($event); } catch(Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } } else if($shutdown) { $dataString = json_encode($data); $result = $this->gearmanClient->do("shutdown", $dataString, 'shutdown' . $event->getTitle()); if (! $this->gearmanClient->runTasks()) { echo "ERROR " . $gmc->error() . "\n"; exit; } $results[$event->getTitle()] = $result; $result = $runningtypeMapper->findBy(array("title" => "shutdown")); $runningtypeShutdown = $result[0]; $event->setRunning(1); $event->setRunningtype($runningtypeShutdown->getID()); try { $this->eventMapper->save($event); } catch(Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } } } } if(count($results) <= 0) { $results = array("No current events to run available"); } $resultString = json_encode($results); header('Content-Type: application/json'); header('Content-Disposition: inline; filename="result.json"'); header('Pragma: no-cache'); header('Expires: 0'); echo $resultString; } public function reportAction() { if(!$this->acl->checkRight('er')) { header('HTTP/1.0 403 No Right to run events'); die(); } $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $eventreportMapper = new Application_Model_EventreportMapper(); $runningtypeMapper = new Application_Model_RunningtypeMapper(); $eventBootNames = array(); $eventShutdownNames = array(); $results = array(); $result1 = $runningtypeMapper->findBy(array("title" => "boot")); $result2 = $runningtypeMapper->findBy(array("title" => "shutdown")); $runningtypeBoot = $result1[0]; $runningtypeShutdown = $result2[0]; $resultShortcutName = 'result shortcut'; $errorsName = 'clients errors'; $events = $this->eventMapper->findBy(array('running' => 1)); foreach($events as $event) { if($event->getRunningtype() == $runningtypeBoot->getID()) { $eventBootNames[] = $event->getTitle(); } else if($event->getRunningtype() == $runningtypeShutdown->getID()) { $eventShutdownNames[] = $event->getTitle(); } } if(count($eventBootNames) > 0) { $data = array( 'type' => 'getBootState', 'events' => $eventBootNames, ); $dataString = json_encode($data); $bootResult = $this->gearmanClient->do("status", $dataString, 'bootStatus'); if (! $this->gearmanClient->runTasks()) { echo "ERROR " . $gmc->error() . "\n"; exit; } $bootResultDecode = json_decode($bootResult); $results['boot results'] = $bootResultDecode; if(count($bootResultDecode) > 0) { foreach($bootResultDecode as $k => $eventResult) { $eventResult->$resultShortcutName = sprintf('%s', $eventResult->$resultShortcutName); if($eventResult->$resultShortcutName == "not finished") { continue; } else if($eventResult->$resultShortcutName == 'not founded') { $event->setRunning(0); $event->setRunningtype(null); try { $this->eventMapper->save($event); } catch(Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } continue; } $result = $this->eventMapper->findBy(array("title" => $k)); $event = $result[0]; $eventreport = new Application_Model_Eventreport(); $eventreport->setEventID($event->getID()); $eventreport->setResult($eventResult->$resultShortcutName); $eventreport->setCreated(time()); if($eventResult->$resultShortcutName == "failed") { $eventreport->setErrors(json_encode($eventResult->$errorsName)); $event->setRunning(3); } else { $event->setRunning(2); } $eventreport->setType($runningtypeBoot->getID()); try { $eventreportMapper->save($eventreport); } catch(Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } if($event->getEnd()) { $event->setRunning(0); } $event->setRunningtype(null); try { $this->eventMapper->save($event); } catch(Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } } } } if(count($eventShutdownNames) > 0) { $data = array( 'type' => 'getShutdownState', 'events' => $eventShutdownNames, ); $dataString = json_encode($data); $shutdownResult = $this->gearmanClient->do("status", $dataString, 'shutdownStatus'); if (! $this->gearmanClient->runTasks()) { echo "ERROR " . $gmc->error() . "\n"; exit; } $shutdownResultDecode = json_decode($shutdownResult); $results['shutdown results'] = $shutdownResultDecode; foreach($shutdownResultDecode as $k => $eventResult) { $eventResult->$resultShortcutName = sprintf('%s', $eventResult->$resultShortcutName); if($eventResult->$resultShortcutName == "not finished") { continue; } else if($eventResult->$resultShortcutName == 'not founded') { $event->setRunning(0); $event->setRunningtype(null); try { $this->eventMapper->save($event); } catch(Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } continue; } $result = $this->eventMapper->findBy(array("title" => $k)); $event = $result[0]; $eventreport = new Application_Model_Eventreport(); $eventreport->setEventID($event->getID()); $eventreport->setResult($eventResult->$resultShortcutName); $eventreport->setCreated(time()); if($eventResult->$resultShortcutName == "failed") { $eventreport->setErrors(json_encode($eventResult->$errorsName)); $event->setRunning(3); } else { $event->setRunning(2); } $eventreport->setType($runningtypeShutdown->getID()); try { $eventreportMapper->save($eventreport); } catch(Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } $event->setRunningtype(null); try { $this->eventMapper->save($event); } catch(Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } } } if(count($results) <= 0) { $results = array("No current events to report available"); } $resultString = json_encode($results); header('Content-Type: application/json'); header('Content-Disposition: inline; filename="result.json"'); header('Pragma: no-cache'); header('Expires: 0'); echo $resultString; } public function showreportsAction() { if(!$this->acl->checkRight('er')) { header('HTTP/1.0 403 No Right to run events'); die(); } $eventID = $this->_request->getParam("eventID"); if($eventID) { $event = new Application_Model_Event(); $this->eventMapper->find($eventID, $event); $eventreportMapper = new Application_Model_EventreportMapper(); $reportlist = $eventreportMapper->findBy(array("eventID" => $eventID), false, array('created' => 'DESC')); $runningtypeMapper = new Application_Model_RunningtypeMapper(); $runningtypes = array(); $result = $runningtypeMapper->fetchAll(); if(count($result) > 0) { foreach($result as $type) { $runningtypes[$type->getID()] = $type->getTitle(); } } for($i = 0; $i < count($reportlist); $i++) { $reportType = $runningtypes[$reportlist[$i]->getType()]; $reportlist[$i]->setType($reportType); } $clientlist = array(); $this->pbs2Api->getPoolClients($clientlist, $event->getPbs_poolID()); foreach($clientlist as $client) { $clients[$client->getID()] = $client; } $this->view->eventTitle = $event->getTitle(); $this->view->clients = $clients; $this->view->reportlist = $reportlist; // Pagination $pagination = new Poolctrl_Pagination(); $pagination->setPerPage(5); $pagination->setElement($this->view->reportlist); $pagination->setRequestPage($this->_request->getParam('page')); $pagination->setPageUrl('/event/showreports/eventID/' . $eventID); $this->view->reportlist = $pagination->getElements(); $this->view->pagination = $pagination->pagination(); } else { $this->_redirect('/event/'); exit; } } public function deletereportAction() { if(!$this->acl->checkRight('er')) { $this->_redirect('/'); } $this->_helper->viewRenderer->setNoRender(); $reportID = $this->_request->getParam('reportID'); if(isset($reportID)) { $eventreportMapper = new Application_Model_EventreportMapper(); $report = new Application_Model_Eventreport(); $eventreportMapper->find($reportID, $report); $eventID = $report->getEventID(); try { $eventreportMapper->delete($report); } catch(Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } $this->_redirect('/event/showreports/eventID/' . $eventID); } else { $this->_redirect('/event/'); exit; } } private function runEvent(Application_Model_Event $event, $apikey) { $data = array( 'eventName' => $event->getTitle(), ); if($event->getForce()) { $data['force'] = true; } else { $data['force'] = false; } $clients = array(); $this->pbs2Api->getPoolClients($clients, $event->getPbs_poolID()); $data['clients'] = $clients; $result = $this->eventcategoryMapper->fetchAll(); foreach($result as $category) { $eventcategories[$category->getTitle()] = $category->getID(); } $boot = false; $shutdown = false; switch($event->getCategory()) { case $eventcategories['Boot']: $boot = true; break; case $eventcategories['Shutdown']: $shutdown = true; break; } $runningEvents = $this->eventMapper->findBy(array('pbs_poolID' => $event->getPbs_PoolID(), 'running' => 1)); if(count($runningEvents) > 1) { $updatePeriod = $this->config['event']['updatePeriod']; if($boot) { $newStart = date('Y-m-d H:i:s', strtotime($event->getStart()) + $updatePeriod * 60); $event->setStart($newStart); } if($shutdown) { $newEnd = date('Y-m-d H:i:s', strtotime($event->getEnd()) + $updatePeriod * 60); $event->setEnd($newEnd); } try { $this->eventMapper->save($event); } catch(Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } return; } $runningtypeMapper = new Application_Model_RunningtypeMapper(); if($boot) { $bootoslist = array(); $configlist = array(); $this->pbs2Api->getBootos($bootoslist, $configlist); $bootos = $bootoslist[0]; $data['eventOS'] = $bootos->getDistro() . " " . $bootos->getDistroversion(); $dataString = json_encode($data); $result = $this->gearmanClient->do("boot", $dataString, 'boot' . $event->getTitle()); if (! $this->gearmanClient->runTasks()) { echo "ERROR " . $gmc->error() . "\n"; exit; } $results[$event->getTitle()] = $result; $result = $runningtypeMapper->findBy(array("title" => "boot")); $runningtypeBoot = $result[0]; $event->setRunning(1); $event->setRunningtype($runningtypeBoot->getID()); try { $this->eventMapper->save($event); } catch(Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } } else if($shutdown) { $dataString = json_encode($data); $result = $this->gearmanClient->do("shutdown", $dataString, 'shutdown' . $event->getTitle()); if (! $this->gearmanClient->runTasks()) { echo "ERROR " . $gmc->error() . "\n"; exit; } $results[$event->getTitle()] = $result; $result = $runningtypeMapper->findBy(array("title" => "shutdown")); $runningtypeShutdown = $result[0]; $event->setRunning(1); $event->setRunningtype($runningtypeShutdown->getID()); try { $this->eventMapper->save($event); } catch(Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } } } private function repeatEvent(Application_Model_Event $event) { $events[0] = $event; $repeattypeMapper = new Application_Model_RepeattypeMapper(); $repeattype = new Application_Model_Repeattype(); $repeattypeMapper->find($event->getRepeattype(), $repeattype); $repeatendMapper = new Application_Model_RepeatendMapper(); $repeatend = new Application_Model_Repeatend(); $repeatendMapper->find($event->getRepeatend(), $repeatend); $newEvent = clone $event; $startDate = date('d.m.Y', strtotime($event->getStart())); if($event->getEnd()) { $endDate = date('d.m.Y', strtotime($event->getEnd())); } else { $endDate = date('d.m.Y', strtotime($event->getStart())); } $result = $this->eventcategoryMapper->findBy(array('title' => 'Shutdown')); $shutdownCategory = $result[0]; switch($repeattype->getTitle()) { case 'Daily': if($newEvent->getCategory() != $shutdownCategory->getID()) { $filterentriesID3 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 11, strtotime($startDate), strtotime($endDate)); } $onedaytime = 24 * 60 * 60; $newStartTime = $this->checkTimeChange(strtotime($newEvent->getStart()), strtotime($newEvent->getStart()) + $onedaytime); if($newEvent->getEnd()) { $newEndTime = $this->checkTimeChange(strtotime($newEvent->getEnd()), strtotime($newEvent->getEnd()) + $onedaytime); } if($repeatend->getTitle() == 'After') { $repeatings = intval($newEvent->getRepeatings()); for($i = 0; $i < $repeatings; $i++) { $newEvent->setStart(date('Y-m-d H:i', $newStartTime)); $newStartTime = $this->checkTimeChange($newStartTime, $newStartTime + $onedaytime); if(isset($newEndTime)) { $newEvent->setEnd(date('Y-m-d H:i', $newEndTime)); $newEndTime = $this->checkTimeChange($newEndTime, $newEndTime + $onedaytime); } $events[$i + 1] = $newEvent; if($newEvent->getCategory() != $shutdownCategory->getID()) { $startDate = date('d.m.Y', strtotime($newEvent->getStart())); if($newEvent->getEnd()) { $endDate = date('d.m.Y', strtotime($newEvent->getEnd())); } else { $endDate = date('d.m.Y', strtotime($newEvent->getStart())); } $filterentriesID = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 11, strtotime($startDate), strtotime($endDate)); } $newEvent = clone $newEvent; } } else if($repeatend->getTitle() == 'Date') { $repeatendtime = strtotime($newEvent->getRepeatdate()); $i = 1; while($newStartTime <= $repeatendtime) { $newEvent->setStart(date('Y-m-d H:i', $newStartTime)); $newStartTime = $this->checkTimeChange($newStartTime, $newStartTime + $onedaytime); if(isset($newEndTime)) { $newEvent->setEnd(date('Y-m-d H:i', $newEndTime)); $newEndTime = $this->checkTimeChange($newEndTime, $newEndTime + $onedaytime); } $events[$i] = $newEvent; if($newEvent->getCategory() != $shutdownCategory->getID()) { $startDate = date('d.m.Y', strtotime($newEvent->getStart())); if($newEvent->getEnd()) { $endDate = date('d.m.Y', strtotime($newEvent->getEnd())); } else { $endDate = date('d.m.Y', strtotime($newEvent->getStart())); } $filterentriesID3 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 11, strtotime($startDate), strtotime($endDate)); } $newEvent = clone $newEvent; $i++; } } break; case 'Once a week': if($newEvent->getCategory() != $shutdownCategory->getID()) { $weekday = date('N', strtotime($newEvent->getStart())); $filterentriesID3 = $this->pbs2Api->addFilterentry($newEvent->getPbs_filterID(), 10, $weekday, $weekday); } $oneweektime = 7 * 24 * 60 * 60; $newStartTime = $this->checkTimeChange(strtotime($newEvent->getStart()), strtotime($newEvent->getStart()) + $oneweektime); if($newEvent->getEnd()) { $newEndTime = $this->checkTimeChange(strtotime($newEvent->getStart()), strtotime($newEvent->getEnd()) + $oneweektime); } if($repeatend->getTitle() == 'After') { $repeatings = intval($newEvent->getRepeatings()); for($i = 0; $i < $repeatings; $i++) { $newEvent->setStart(date('Y-m-d H:i', $newStartTime)); $newStartTime = $this->checkTimeChange($newStartTime, $newStartTime + $oneweektime); if(isset($newEndTime)) { $newEvent->setEnd(date('Y-m-d H:i', $newEndTime)); $newEndTime = $this->checkTimeChange($newEndTime, $newEndTime + $oneweektime); } $events[$i + 1] = $newEvent; $newEvent = clone $newEvent; } } else if($repeatend->getTitle() == 'Date') { $repeatendtime = strtotime($newEvent->getRepeatdate()); $i = 1; while($newStartTime <= $repeatendtime) { $newEvent->setStart(date('Y-m-d H:i', $newStartTime)); $newStartTime = $this->checkTimeChange($newStartTime, $newStartTime + $oneweektime); if(isset($newEndTime)) { $newEvent->setEnd(date('Y-m-d H:i', $newEndTime)); $newEndTime = $this->checkTimeChange($newEndTime, $newEndTime + $oneweektime); } $events[$i] = $newEvent; $newEvent = clone $newEvent; $i++; } } break; case 'Every couple of weeks': if($newEvent->getCategory() != $shutdownCategory->getID()) { $filterentriesID3 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 11, strtotime($startDate), strtotime($endDate)); } $twoweekstime = 14 * 24 * 60 * 60; $newStartTime = $this->checkTimeChange(strtotime($newEvent->getStart()), strtotime($newEvent->getStart()) + $twoweekstime); if($newEvent->getEnd()) { $newEndTime = $this->checkTimeChange(strtotime($newEvent->getEnd()), strtotime($newEvent->getEnd()) + $twoweekstime); } if($repeatend->getTitle() == 'After') { $repeatings = intval($newEvent->getRepeatings()); for($i = 0; $i < $repeatings; $i++) { $newEvent->setStart(date('Y-m-d H:i', $newStartTime)); $newStartTime = $this->checkTimeChange($newStartTime, $newStartTime + $twoweekstime); if(isset($newEndTime)) { $newEvent->setEnd(date('Y-m-d H:i', $newEndTime)); $newEndTime = $this->checkTimeChange($newEndTime, $newEndTime + $twoweekstime); } $events[$i + 1] = $newEvent; if($newEvent->getCategory() != $shutdownCategory->getID()) { $startDate = date('d.m.Y', strtotime($newEvent->getStart())); if($newEvent->getEnd()) { $endDate = date('d.m.Y', strtotime($newEvent->getEnd())); } else { $endDate = date('d.m.Y', strtotime($newEvent->getStart())); } $filterentriesID3 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 11, strtotime($startDate), strtotime($endDate)); } $newEvent = clone $newEvent; } } else if($repeatend->getTitle() == 'Date') { $repeatendtime = strtotime($newEvent->getRepeatdate()); $i = 1; while($newStartTime <= $repeatendtime) { $newEvent->setStart(date('Y-m-d H:i', $newStartTime)); $newStartTime = $this->checkTimeChange($newStartTime, $newStartTime + $twoweekstime); if(isset($newEndTime)) { $newEvent->setEnd(date('Y-m-d H:i', $newEndTime)); $newEndTime = $this->checkTimeChange($newEndTime, $newEndTime + $twoweekstime); } $events[$i] = $newEvent; if($newEvent->getCategory() != $shutdownCategory->getID()) { $startDate = date('d.m.Y', strtotime($newEvent->getStart())); if($newEvent->getEnd()) { $endDate = date('d.m.Y', strtotime($newEvent->getEnd())); } else { $endDate = date('d.m.Y', strtotime($newEvent->getStart())); } $filterentriesID3 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 11, strtotime($startDate), strtotime($endDate)); } $newEvent = clone $newEvent; $i++; } } break; case 'Every month': if($newEvent->getCategory() != $shutdownCategory->getID()) { $filterentriesID3 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 11, strtotime($startDate), strtotime($endDate)); } $startMonth = date('m', strtotime($newEvent->getStart())) + 1; $startDay = date('d', strtotime($newEvent->getStart())); $startYear = date('Y', strtotime($newEvent->getStart())); if($startMonth == 13) { $startMonth = 1; $startYear++; } while(!checkdate($startMonth, $startDay, $startYear)) { $startMonth++; if($repeatend->getTitle() == 'After') { $newEvent->setRepeatings($newEvent->getRepeatings() - 1); } if($startMonth == 13) { $startMonth = 1; $startYear++; } } $newStartDate = $startYear . "-" . $startMonth . "-" . $startDay . " " . date('H:i', strtotime($newEvent->getStart())); $newStartTime = strtotime($newStartDate); if($newEvent->getEnd()) { $endMonth = date('m', strtotime($newEvent->getEnd())) + 1; $endDay = date('d', strtotime($newEvent->getEnd())); $endYear = date('Y', strtotime($newEvent->getEnd())); if($endMonth == 13) { $endMonth = 1; $endYear++; } while(!checkdate($endMonth, $endDay, $endYear)) { $endMonth++; if($endMonth == 13) { $endMonth = 1; $endYear++; } } $newEndDate = $endYear . "-" . $endMonth . "-" . $endDay . " " . date('H:i', strtotime($newEvent->getEnd())); $newEndTime = strtotime($newEndDate); } if($repeatend->getTitle() == 'After') { $repeatings = intval($newEvent->getRepeatings()); for($i = 0; $i < $repeatings; $i++) { $newEvent->setStart($newStartDate); $startMonth = date('m', $newStartTime) + 1; $startDay = date('d', $newStartTime); $startYear = date('Y', $newStartTime); if($startMonth == 13) { $startMonth = 1; $startYear++; } while(!checkdate($startMonth, $startDay, $startYear)) { $startMonth++; $i++; if($startMonth == 13) { $startMonth = 1; $startYear++; } } $newStartDate = $startYear . "-" . $startMonth . "-" . $startDay . " " . date('H:i', $newStartTime); $newStartTime = strtotime($newStartDate); if($newEvent->getEnd()) { $newEvent->setEnd($newEndDate); $endMonth = date('m', $newEndTime) + 1; $endDay = date('d', $newEndTime); $endYear = date('Y', $newEndTime); if($endMonth == 13) { $endMonth = 1; $endYear++; } while(!checkdate($endMonth, $endDay, $endYear)) { $endMonth++; if($endMonth == 13) { $endMonth = 1; $endYear++; } } $newEndDate = $endYear . "-" . $endMonth . "-" . $endDay . " " . date('H:i', $newEndTime); $newEndTime = strtotime($newEndDate); } $events[$i + 1] = $newEvent; if($newEvent->getCategory() != $shutdownCategory->getID()) { $startDate = date('d.m.Y', strtotime($newEvent->getStart())); if($newEvent->getEnd()) { $endDate = date('d.m.Y', strtotime($newEvent->getEnd())); } else { $endDate = date('d.m.Y', strtotime($newEvent->getStart())); } $filterentriesID3 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 11, strtotime($startDate), strtotime($endDate)); } $newEvent = clone $newEvent; } } else if($repeatend->getTitle() == 'Date') { $i = 1; $repeatendtime = strtotime($newEvent->getRepeatdate()); while($newStartTime <= $repeatendtime) { $newEvent->setStart($newStartDate); $startMonth = date('m', $newStartTime) + 1; $startDay = date('d', $newStartTime); $startYear = date('Y', $newStartTime); if($startMonth == 13) { $startMonth = 1; $startYear++; } while(!checkdate($startMonth, $startDay, $startYear)) { $startMonth++; if($startMonth == 13) { $startMonth = 1; $startYear++; } } $newStartDate = $startYear . "-" . $startMonth . "-" . $startDay . " " . date('H:i', $newStartTime); $newStartTime = strtotime($newStartDate); if($newEvent->getEnd()) { $newEvent->setEnd($newEndDate); $endMonth = date('m', $newEndTime) + 1; $endDay = date('d', $newEndTime); $endYear = date('Y', $newEndTime); if($endMonth == 13) { $endMonth = 1; $endYear++; } while(!checkdate($endMonth, $endDay, $endYear)) { $endMonth++; if($endMonth == 13) { $endMonth = 1; $endYear++; } } $newEndDate = $endYear . "-" . $endMonth . "-" . $endDay . " " . date('H:i', $newEndTime); $newEndTime = strtotime($newEndDate); } $events[$i] = $newEvent; if($newEvent->getCategory() != $shutdownCategory->getID()) { $startDate = date('d.m.Y', strtotime($newEvent->getStart())); if($newEvent->getEnd()) { $endDate = date('d.m.Y', strtotime($newEvent->getEnd())); } else { $endDate = date('d.m.Y', strtotime($newEvent->getStart())); } $filterentriesID3 = $this->pbs2Api->addFilterentry($event->getPbs_filterID(), 11, strtotime($startDate), strtotime($endDate)); } $newEvent = clone $newEvent; $i++; } } break; } $overlapping = 0; $overlappingEvents = array(); foreach($events as $evt) { $overlappingEvents = $this->eventMapper->getOverlappingEvents(date('Y-m-d H:i:s', strtotime($evt->getStart())), date('Y-m-d H:i:s', strtotime($evt->getEnd())), $evt->getPbs_PoolID(), $event, true); if(count($overlappingEvents) > 0 ) { $overlapping = 1; break; } } if(!$overlapping) { $evt = null; foreach($events as $evt) { try { $eventID = $this->eventMapper->save($evt); $evt->setID($eventID); } catch(Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } } } else { if($events[0]->getPbs_bootmenuID()) { $this->pbs2Api->deleteBootmenu($event->getPbs_bootmenuID()); } if($events[0]->getPbs_filterID()) { $this->pbs2Api->deleteFilter($event->getPbs_filterID()); } } return $overlapping; } private function editRepeatEvent(Application_Model_Event $oldEvent, Application_Model_Event $newEvent) { $overlapping = false; $result = $this->eventcategoryMapper->findBy(array('title' => 'Shutdown')); $shutdownCategory = $result[0]; $repeattypeMapper = new Application_Model_RepeattypeMapper(); $repeattype = new Application_Model_Repeattype(); $repeattypeMapper->find($newEvent->getRepeattype(), $repeattype); $diff = $this->eventMapper->compare($newEvent, $oldEvent); if(isset($diff['start']) || isset($diff['end'])) { if(isset($diff['start'])) { $diffStart = intval(strtotime($newEvent->getStart())) - intval(strtotime($oldEvent->getStart())); unset($diff['start']); } if(isset($diff['end'])) { $diffEnd = intval(strtotime($newEvent->getEnd())) - intval(strtotime($oldEvent->getEnd())); unset($diff['end']); } $events = $this->eventMapper->findBy(array('poolctrl_event.repeat' => 1, 'title' => $oldEvent->getTitle())); if(count($events) > 0) { foreach($events as $event) { if($event->getRunning() == 0 && $event->getRepeat() == 1) { $event->setOptions($diff); if(isset($diffStart)) { $newStart = date('Y-m-d H:i:s', $this->checkTimeChange(strtotime($event->getStart()), strtotime($event->getStart()) + $diffStart)); $event->setStart($newStart); } if(isset($diffEnd)) { $newEnd = date('Y-m-d H:i:s', $this->checkTimeChange(strtotime($event->getEnd()), strtotime($event->getEnd()) + $diffEnd)); $event->setEnd($newEnd); } } } foreach($events as $event) { $overlappingEvents = $this->eventMapper->getOverlappingEvents(date('Y-m-d H:i:s', strtotime($event->getStart())), date('Y-m-d H:i:s', strtotime($event->getEnd())), $event->getPbs_PoolID(), $event, true); if(count($overlappingEvents) > 0 ) { $overlapping = true; break; } } if(!$overlapping) { if($newEvent->getCategory() != $shutdownCategory->getID()) { if(isset($diff['pbs_bootosID']) || isset($diff['title']) || isset($diff['pbs_configID'])) { $bootmenuquery = "bootmenuid=" . $newEvent->getPbs_bootmenuID() . "&bootosID=" . $newEvent->getPbs_bootosID() . "&startcounter=0&title=Poolctrl-Bootmenu for " . $newEvent->getTitle() . "&defaultbootmenu=0&order=0&kcl=0&changeentry=1"; if($newEvent->getPbs_configID()) { $this->pbs2Api->changeBootmenu($oldEvent->getPbs_bootmenuID(), $newEvent->getTitle(), $newEvent->getPbs_bootosID(), $newEvent->getPbs_configID()); } else { $this->pbs2Api->changeBootmenu($oldEvent->getPbs_bootmenuID(), $newEvent->getTitle(), $newEvent->getPbs_bootosID()); } } $this->pbs2Api->deleteFilter($oldEvent->getPbs_filterID()); $filterID = $this->pbs2Api->addFilter($newEvent->getTitle(), $newEvent->getPbs_bootmenuID()); $newEvent->setPbs_filterID($filterID); $startTime = date('H:i', strtotime($newEvent->getStart())); if($newEvent->getEnd()) { $endTime = date('H:i', strtotime($newEvent->getEnd())); } else { $endTime = date('H:i', strtotime($newEvent->getStart()) + 900); } $filterentriesID1 = $this->pbs2Api->addFilterentry($newEvent->getPbs_filterID(), 7, $startTime, $endTime); $filterentriesID2 = $this->pbs2Api->addFilterentry($newEvent->getPbs_filterID(), 3, $event->getPbs_poolID(), ''); if($repeattype == "Once a week") { $weekday = date('N', strtotime($diff['start'])); $filterentriesID3 = $this->pbs2Api->addFilterentry($newEvent->getPbs_filterID(), 10, $weekday, $weekday); } } foreach($events as $event) { $event->setPbs_filterID($newEvent->getPbs_filterID()); if($repeattype != "Once a week" && $event->getCategory() != $shutdownCategory->getID()) { $startDate = date('d.m.Y', strtotime($event->getStart())); if($newEvent->getEnd()) { $endDate = date('d.m.Y', strtotime($event->getEnd())); } else { $endDate = date('d.m.Y', strtotime($event->getStart())); } $filterentriesID3 = $this->pbs2Api->addFilterentry($newEvent->getPbs_filterID(), 11, strtotime($startDate), strtotime($endDate)); } try { $this->eventMapper->save($event); } catch(Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; return; } } } } } else { if($newEvent->getCategory() != $shutdownCategory->getID()) { if(isset($diff['pbs_bootosID']) || isset($diff['title']) || isset($diff['pbs_configID'])) { $bootmenuquery = "bootmenuid=" . $newEvent->getPbs_bootmenuID() . "&bootosID=" . $newEvent->getPbs_bootosID() . "&startcounter=0&title=Poolctrl-Bootmenu for " . $newEvent->getTitle() . "&defaultbootmenu=0&order=0&kcl=0&changeentry=1"; if($newEvent->getPbs_configID()) { $this->pbs2Api->changeBootmenu($oldEvent->getPbs_bootmenuID(), $newEvent->getTitle(), $newEvent->getPbs_bootosID(), $newEvent->getPbs_configID()); } else { $this->pbs2Api->changeBootmenu($oldEvent->getPbs_bootmenuID(), $newEvent->getTitle(), $newEvent->getPbs_bootosID()); } } if(isset($diff['title'])) { $this->pbs2Api->changeFilter($newEvent->getPbs_filterID(), $newEvent->getTitle()); } $newFilter = false; if(isset($diff['pbs_poolID'])) { $this->pbs2Api->deleteFilter($oldEvent->getPbs_filterID()); $filterID = $this->pbs2Api->addFilter($newEvent->getTitle(), $newEvent->getPbs_bootmenuID()); $newEvent->setPbs_filterID($filterID); $startTime = date('H:i', strtotime($newEvent->getStart())); if($newEvent->getEnd()) { $endTime = date('H:i', strtotime($newEvent->getEnd())); } else { $endTime = date('H:i', strtotime($newEvent->getStart()) + 900); } $filterentriesID1 = $this->pbs2Api->addFilterentry($newEvent->getPbs_filterID(), 7, $startTime, $endTime); $filterentriesID2 = $this->pbs2Api->addFilterentry($newEvent->getPbs_filterID(), 3, $event->getPbs_poolID(), ''); if($repeattype == "Once a week") { $weekday = date('N', strtotime($diff['start'])); $filterentriesID3 = $this->pbs2Api->addFilterentry($newEvent->getPbs_filterID(), 10, $weekday, $weekday); } $newFilter = true; } } $events = $this->eventMapper->findBy(array('poolctrl_event.repeat' => $oldEvent->getRepeat(), 'title' => $oldEvent->getTitle())); try { foreach($events as $event) { $event->setOptions($diff); if($newFilter) { $event->setPbs_filterID($newEvent->getPbs_filterID()); if($repeattype != "Once a week" && $event->getCategory() != $shutdownCategory->getID() && isset($diff['pbs_poolID'])) { $startDate = date('d.m.Y', strtotime($event->getStart())); if($event->getEnd()) { $endDate = date('d.m.Y', strtotime($event->getEnd())); } else { $endDate = date('d.m.Y', strtotime($event->getStart())); } $filterentriesID3 = $this->pbs2Api->addFilterentry($newEvent->getPbs_filterID(), 11, strtotime($startDate), strtotime($endDate)); } } if(!$event->getParticipants()) { $event->setParticipants(null); } $this->eventMapper->save($event); } } catch (Zend_Exception $e) { echo "Caught exception: " . get_class($e) . "
"; echo "Message: " . $e->getMessage() . "
"; } } return $overlapping; } private function checkTimeChange($oldTime, $newTime) { if(date('I', $oldTime)) { if(!date('I', $newTime)) { return $newTime + 3600; } } else { if(date('I', $newTime)) { return $newTime - 3600; } } } }