/**
  * action list
  *
  * @return void
  */
 public function listAction()
 {
     if (!$this->div->isLoggedUserInGroup($this->settings['participantGroupId'])) {
         $this->addFlashMessage($this->div->translate('message.noParticipant', $this->extensionName), '', \TYPO3\CMS\Core\Messaging\AbstractMessage::ERROR);
         $this->redirect('list');
     }
     $oldestEventYear = $this->div->getOldestEventYear();
     $currentYear = date("Y");
     $index = 0;
     $statistics = array();
     for ($i = $currentYear; $i >= $oldestEventYear; $i--) {
         $year = $i;
         $statistics[$index]['year'] = $year;
         $statistics[$index]['activeEvents'] = $this->eventRepository->findEventsOfYearByActive($year, true)->count();
         $statistics[$index]['inactiveEvents'] = $this->eventRepository->findEventsOfYearByActive($year, false)->count();
         $averageAccepts = $this->eventRepository->calculateAverageAcceptsPerEventByYear($year, true);
         $statistics[$index]['averageAccepts'] = $averageAccepts["0"]["average"];
         $statistics[$index]['minimumAccepts'] = $averageAccepts["0"]["minimum"];
         $statistics[$index]['maximumAccepts'] = $averageAccepts["0"]["maximum"];
         $averageCancels = $this->eventRepository->calculateAverageAcceptsPerEventByYear($year, false);
         $statistics[$index]['averageCancels'] = $averageCancels["0"]["average"];
         $statistics[$index]['minimumCancels'] = $averageCancels["0"]["minimum"];
         $statistics[$index]['maximumCancels'] = $averageCancels["0"]["maximum"];
         $tops = $this->eventRepository->topParticipantsByYear($year);
         for ($j = 0; $j <= count($tops) - 1; $j++) {
             $statistics[$index]['tops'][$j]['participantName'] = $tops[$j]["participantName"];
             $statistics[$index]['tops'][$j]['eventsAccepted'] = $tops[$j]["eventsAccepted"];
         }
         $index++;
     }
     $this->view->assign('statistics', $statistics);
 }
 /**
  * action delete
  *
  * @param \PoiCom\PcEventScheduler\Domain\Model\Holiday $holiday
  * @return void
  */
 public function deleteAction(\PoiCom\PcEventScheduler\Domain\Model\Holiday $holiday)
 {
     if (!$this->div->isLoggedUserInGroup($this->settings['eventAdminGroupId'])) {
         $this->addFlashMessage($this->div->translate('message.noAdmin', $this->extensionName), '', \TYPO3\CMS\Core\Messaging\AbstractMessage::ERROR);
         $this->redirect('list');
     }
     $this->addFlashMessage($this->div->translate('message.holidayDeleted', $this->extensionName), '', \TYPO3\CMS\Core\Messaging\AbstractMessage::OK);
     $this->holidayRepository->remove($holiday);
     $this->redirect('list');
 }
 /**
  * Notifies participants for the next event
  *
  * @return void
  */
 public function notifyCommand()
 {
     $this->settings = $this->configurationManager->getConfiguration(ConfigurationManager::CONFIGURATION_TYPE_SETTINGS);
     $eventStartTime = $this->settings['eventStartTime'];
     $participantGroupId = $this->settings['participantGroupId'];
     $eventPageUid = $this->settings['eventPageUid'];
     $offset = 0;
     $eventStartDate = $this->div->nextEventDate($offset);
     $events = $this->eventRepository->findByStart($eventStartDate->format("Y-m-d H:i:s"));
     if ($events->count() == 0) {
         $this->div->createEvent($eventStartDate);
         $events = $this->eventRepository->findByStart($eventStartDate->format("Y-m-d H:i:s"));
     }
     if ($events->getFirst()->getActive()) {
         $this->initFrontend();
         $cObj = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Frontend\\ContentObject\\ContentObjectRenderer');
         $link = $cObj->typolink_URL(array('parameter' => "{$eventPageUid}", 'forceAbsoluteUrl' => 1));
         $acceptUrl = $link . "?&tx_pceventscheduler_pceventscheduler%5Baction%5D=accept";
         $cancelUrl = $link . "?&tx_pceventscheduler_pceventscheduler%5Baction%5D=cancel";
         $participantsUnknown = $this->participantRepository->findParticipantsUnknown($events->getFirst()->getUid(), $participantGroupId);
         if (isset($participantsUnknown)) {
             foreach ($participantsUnknown as $participantUnknown) {
                 $receiverEmail = $participantUnknown['email'];
                 $receiverName = $participantUnknown['name'];
                 $from = \TYPO3\CMS\Core\Utility\MailUtility::getSystemFrom();
                 $mail = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Mail\\MailMessage');
                 $mail->setFrom($from);
                 $mail->setSubject($this->settings['notifyMailSubject']);
                 $mail->setTo($receiverEmail);
                 $mail->setBody(str_replace(array('###name###', '###eventdate###', '###eventtime###', '###eventlocation###', '###acceptlink###', '###cancellink###'), array($receiverName, $events->getFirst()->getStart()->format("d.m.Y"), $eventStartTime, $events->getFirst()->getLocation(), $acceptUrl, $cancelUrl), $this->settings['notifyMailBody']), 'text/html');
                 $mail->send();
             }
         }
     }
     return true;
 }
 /**
  * action location
  *
  * @return void
  */
 public function locationAction()
 {
     if (!$this->div->isLoggedUserInGroup($this->settings['eventAdminGroupId'])) {
         $this->addFlashMessage($this->div->translate('message.noAdmin', $this->extensionName), '', \TYPO3\CMS\Core\Messaging\AbstractMessage::ERROR);
         $this->redirect('list');
     }
     $location = $this->request->getArgument('location');
     if ($this->request->hasArgument('offset')) {
         $offset = $this->request->getArgument('offset');
         if ($offset < 0) {
             $this->addFlashMessage($this->div->translate('message.pastEventError', $this->extensionName), '', \TYPO3\CMS\Core\Messaging\AbstractMessage::ERROR);
             $this->redirect('list', Null, Null, array('offset' => $offset));
         }
     }
     if (!$this->request->hasArgument('offset')) {
         $offset = 0;
     }
     $eventStartDate = $this->div->nextEventDate($offset);
     $events = $this->eventRepository->findByStart($eventStartDate->format("Y-m-d H:i:s"));
     $events->getFirst()->setLocation($location);
     $this->eventRepository->update($events->getFirst());
     $this->addFlashMessage($this->div->translate('message.setLocation', $this->extensionName) . ": {$location}", '', \TYPO3\CMS\Core\Messaging\AbstractMessage::OK);
     $this->redirect('list', Null, Null, array('offset' => $offset));
 }