/**
  * check if any events of categories below are present and free for booking
  *
  * @param Tx_WoehrlSeminare_Domain_Model_Category $category
  * @return boolean
  * @api
  */
 public function render(Tx_WoehrlSeminare_Domain_Model_Category $category)
 {
     $events = $this->eventRepository->findAllGbByCategory($category);
     $categories = $this->categoryRepository->findCurrentBranch($category);
     $showLink = FALSE;
     if (count($categories) == 0 || count($events) == 0) {
         foreach ($events as $event) {
             $showLink = TRUE;
             if ($this->subscriberRepository->countAllByEvent($event) >= $event->getMaxSubscriber()) {
                 $showLink = FALSE;
             }
             // event is cancelled
             if ($event->getCancelled()) {
                 $showLink = FALSE;
             }
             // deadline reached....
             if (is_object($event->getSubEndDateTime())) {
                 if ($event->getSubEndDateTime()->getTimestamp() < time()) {
                     $showLink = FALSE;
                 }
             }
             // if any event exists and is valid, break here and return TRUE
             if ($showLink) {
                 break;
             }
         }
     }
     //~ else
     //~ return TRUE;
     return $showLink;
 }
 /**
  * Calculate the free places for a given event.
  *
  * @param Tx_WoehrlSeminare_Domain_Model_Event $event
  * @return int
  * @author Alexander Fuchs <*****@*****.**>
  * @api
  */
 public function render(Tx_WoehrlSeminare_Domain_Model_Event $event = NULL)
 {
     if ($event != NULL) {
         $free = $event->getMaxSubscriber() - $this->subscriberRepository->countAllByEvent($event);
     } else {
         $free = 0;
     }
     return $free > 0 ? $free : 0;
 }
 /**
  * Return the number of subscribers for a given event
  *
  * @param Tx_WoehrlSeminare_Domain_Model_Event $event
  * @return int
  * @author Alexander Fuchs <*****@*****.**>
  * @api
  */
 public function render(Tx_WoehrlSeminare_Domain_Model_Event $event = NULL)
 {
     if ($event != NULL) {
         $booked = $this->subscriberRepository->countAllByEvent($event);
     } else {
         $booked = 0;
     }
     return $booked;
 }
 /**
  * Render the supplied DateTime object as a formatted date.
  *
  * @param Tx_WoehrlSeminare_Domain_Model_Event $event
  * @return boolean
  * @author Alexander Fuchs <*****@*****.**>
  * @api
  */
 public function render($event)
 {
     $showLink = TRUE;
     // limit reached already --> overbooked
     if ($this->subscriberRepository->countAllByEvent($event) >= $event->getMaxSubscriber()) {
         $showLink = FALSE;
     }
     // event is cancelled
     if ($event->getCancelled()) {
         $showLink = FALSE;
     }
     // deadline reached....
     if (is_object($event->getSubEndDateTime())) {
         if ($event->getSubEndDateTime()->getTimestamp() < time()) {
             $showLink = FALSE;
         }
     }
     return $showLink;
 }
 /**
  * Validation of given Params
  *
  * @param $event
  * @return bool
  */
 public function isValid($event)
 {
     // limit reached already --> overbooked
     if ($this->subscriberRepository->countAllByEvent($event) + 1 > $event->getMaxSubscriber()) {
         $this->isValid = FALSE;
         $this->addError('val_event_overbooked', 1200);
     }
     // event is cancelled
     if ($event->getCancelled()) {
         $this->isValid = FALSE;
         $this->addError('val_event_cancelled', 1300);
     }
     // deadline reached....
     if (is_object($event->getSubEndDateTime())) {
         if ($event->getSubEndDateTime()->getTimestamp() < time()) {
             $this->isValid = FALSE;
             $this->addError('val_event_reacheddeadline', 1400);
         }
     }
     return $this->isValid;
 }
 /**
  * Validation of given Params
  *
  * @param Tx_WoehrlSeminare_Domain_Model_Subscriber $newSubscriber
  * @return bool
  */
 public function isValid($newSubscriber)
 {
     if (strlen($newSubscriber->getName()) < 3) {
         $error = $this->objectManager->get('Tx_Extbase_Error_Error', 'val_name', 1000);
         $this->result->forProperty('name')->addError($error);
         // usually $this->addError is enough but this doesn't set the CSS errorClass in the form-viewhelper :-(
         //			$this->addError('val_name', 1000);
         $this->isValid = FALSE;
     }
     if (!t3lib_div::validEmail($newSubscriber->getEmail())) {
         $error = $this->objectManager->get('Tx_Extbase_Error_Error', 'val_email', 1100);
         $this->result->forProperty('email')->addError($error);
         //			$this->addError('val_email', 1100);
         $this->isValid = FALSE;
     }
     if (strlen($newSubscriber->getCustomerid()) > 0 && filter_var($newSubscriber->getCustomerid(), FILTER_VALIDATE_INT) === FALSE) {
         $error = $this->objectManager->get('Tx_Extbase_Error_Error', 'val_customerid', 1110);
         $this->result->forProperty('customerid')->addError($error);
         //			$this->addError('val_customerid', 1110);
         $this->isValid = FALSE;
     }
     if (strlen($newSubscriber->getNumber()) == 0 || filter_var($newSubscriber->getNumber(), FILTER_VALIDATE_INT) === FALSE || $newSubscriber->getNumber() < 1) {
         $error = $this->objectManager->get('Tx_Extbase_Error_Error', 'val_number', 1120);
         $this->result->forProperty('number')->addError($error);
         //			$this->addError('val_number', 1120);
         $this->isValid = FALSE;
     } else {
         $event = $newSubscriber->getEvent();
         // limit reached already --> overbooked
         if ($this->subscriberRepository->countAllByEvent($event) + $newSubscriber->getNumber() > $event->getMaxSubscriber()) {
             $error = $this->objectManager->get('Tx_Extbase_Error_Error', 'val_number', 1130);
             $this->result->forProperty('number')->addError($error);
             //			    $this->addError('val_number', 1130);
             $this->isValid = FALSE;
         }
     }
     if ($newSubscriber->getEditcode() != $this->getSessionData('editcode')) {
         $error = $this->objectManager->get('Tx_Extbase_Error_Error', 'val_editcode', 1140);
         $this->result->forProperty('editcode')->addError($error);
         //			$this->addError('val_editcode', 1140);
         $this->isValid = FALSE;
     }
     return $this->isValid;
 }
 public function checkEvent($params, $obj)
 {
     $this->initializeAction();
     $frameworkConfiguration = $this->configurationManager->getConfiguration(Tx_Extbase_Configuration_ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK, 'woehrlSeminare', 'Eventlist');
     //~ t3lib_utility_Debug::debug($params, 'addInformation: params: ');
     $gp = t3lib_div::_GP('tx_powermail_pi1');
     $formUid = $gp['form'];
     $form = $this->formsRepository->findByUid($formUid);
     if (!method_exists($form, 'getPages')) {
         return $this->isValid = FALSE;
     }
     foreach ($form->getPages() as $page) {
         // every page in current form
         foreach ($page->getFields() as $field) {
             // every field in current page
             switch ($field->getMarker()) {
                 case 'action':
                     $action = $params[$field->getUid()];
                     break;
                 case 'editcode':
                     $editcode = $params[$field->getUid()];
                     break;
                 case 'event':
                     $formIdEvent = $field->getUid();
                     $eventId = $params[$formIdEvent];
                     break;
                 case 'eventtitle':
                     $formIdEventtitle = $field->getUid();
                     break;
             }
         }
     }
     //~ t3lib_utility_Debug::debug($editcode, 'checkEvent: editcode... ');
     switch ($action) {
         case 'delete':
             //~ $subscriber = $this->subscriberRepository->findAllByFeuser($frameworkConfiguration['persistence']['storagePid'])->getFirst();
             $subscriber = $this->subscriberRepository->findAllByEditcode($editcode, $frameworkConfiguration['persistence']['storagePid'])->getFirst();
             if (empty($subscriber)) {
                 t3lib_utility_Debug::debug($subscriber, 'checkEvent: NO subscriber found... ');
                 $obj->isValid = FALSE;
                 // we have to use the language labels of powermail :-(
                 // --> for validationerror_validation:
                 $obj->setError('validation', $idEventTitle);
                 break;
             }
             //~ t3lib_utility_Debug::debug($subscriber, 'saveSubscription: delete... ');
             $event = $this->eventRepository->findByUid($eventId);
             if (empty($event)) {
                 $obj->isValid = FALSE;
                 // we have to use the language labels of powermail :-(
                 // --> for validationerror_validation:
                 $obj->setError('validation', $idEventTitle);
                 break;
             }
             $event->removeSubscriber($subscriber);
             break;
         case 'new':
             if ($eventId > 0) {
                 $event = $this->eventRepository->findByUid($eventId);
                 // limit reached already --> overbooked
                 if (count($event->getSubscribers()) >= $event->getMaxSubscriber()) {
                     $obj->isValid = FALSE;
                     // we have to use the language labels of powermail :-(
                     // --> for validationerror_validation:
                     $obj->setError('validation', $idEventTitle);
                 }
             }
             break;
         default:
             return;
     }
     return;
     //~ t3lib_utility_Debug::debug($eventId  , 'checkEvent: eventId');
     if ($eventId > 0) {
         $event = $this->eventRepository->findByUid($eventId);
         // limit reached already --> overbooked
         if (count($event->getSubscribers()) >= $event->getMaxSubscriber()) {
             $obj->isValid = FALSE;
             // we have to use the language labels of powermail :-(
             // --> for validationerror_validation:
             $obj->setError('validation', $idEventTitle);
         }
     }
     return;
 }
 /**
  * checkForSubscriptionEndCommand
  *
  * @param int stroagePid
  * @param string senderEmailAddress
  * @return void
  */
 public function checkForSubscriptionEndCommand($storagePid, $senderEmailAddress = '')
 {
     // do some init work...
     $this->initializeAction();
     // abort if no storagePid is found
     if (!t3lib_utility_Math::canBeInterpretedAsInteger($storagePid)) {
         echo 'NO storagePid given. Please enter the storagePid in the scheduler task.';
         exit(1);
     }
     // abort if no senderEmailAddress is found
     if (empty($senderEmailAddress)) {
         echo 'NO senderEmailAddress given. Please enter the senderEmailAddress in the scheduler task.';
         exit(1);
     }
     // set storagePid to point extbase to the right repositories
     $configurationArray = array('persistence' => array('storagePid' => $storagePid));
     $this->configurationManager->setConfiguration($configurationArray);
     // start the work...
     // 1. get events in future which reached the subscription deadline
     $allevents = $this->eventRepository->findAllSubscriptionEnded();
     foreach ($allevents as $event) {
         // startDateTime may never be empty
         $helper['start'] = $event->getStartDateTime()->getTimestamp();
         // endDateTime may be empty
         if ($event->getEndDateTime() instanceof DateTime && $event->getStartDateTime() != $event->getEndDateTime()) {
             $helper['end'] = $event->getEndDateTime()->getTimestamp();
         } else {
             $helper['end'] = $helper['start'];
         }
         if ($event->isAllDay()) {
             $helper['allDay'] = 1;
         }
         $helper['now'] = time();
         $helper['nameto'] = strtolower(str_replace(array(',', ' '), array('', '-'), $event->getContact()->getName()));
         $helper['description'] = $this->foldline($event->getDescription());
         // location may be empty...
         if (is_object($event->getLocation())) {
             $helper['location'] = $event->getLocation()->getName();
             $helper['locationics'] = $this->foldline($event->getLocation()->getName());
         }
         // check if we have to cancel the event
         if ($this->subscriberRepository->countAllByEvent($event) < $event->getMinSubscriber()) {
             // --> ok, we have to cancel the event because not enough subscriber were found
             // email to all subscribers
             foreach ($event->getSubscribers() as $subscriber) {
                 $cronLog .= 'Absage an Teilnehmer: ' . $event->getTitle() . ': ' . strftime('%x %H:%M', $event->getStartDateTime()->getTimestamp()) . ' --> ' . $subscriber->getEmail() . "\n";
                 $out = $this->sendTemplateEmail(array($subscriber->getEmail() => $subscriber->getName()), array($event->getContact()->getEmail() => $event->getContact()->getName()), 'Absage der Veranstaltung: ' . $event->getTitle(), 'CancellEvent', array('event' => $event, 'subscribers' => '', 'helper' => $helper, 'attachIcs' => TRUE));
             }
             $cronLog .= 'Absage an Veranstalter: ' . $event->getTitle() . ': ' . strftime('%x %H:%M', $event->getStartDateTime()->getTimestamp()) . ' --> ' . $event->getContact()->getEmail() . "\n";
             // email to event owner
             $out = $this->sendTemplateEmail(array($event->getContact()->getEmail() => $event->getContact()->getName()), array($senderEmailAddress => 'WÖHRL Akademie - noreply'), 'Absage der Veranstaltung: ' . $event->getTitle(), 'CancellEvent', array('event' => $event, 'subscribers' => $event->getSubscribers(), 'helper' => $helper, 'attachCsv' => TRUE, 'attachIcs' => TRUE));
             if ($out >= 1) {
                 $event->setSubEndDateInfoSent(TRUE);
                 $event->setCancelled(TRUE);
             }
         } else {
             // event takes place but subscription is not possible anymore...
             // email to event owner
             $cronLog .= 'Anmeldefrist abgelaufen an Veranstalter: ' . $event->getTitle() . ': ' . strftime('%x %H:%M', $event->getStartDateTime()->getTimestamp()) . ' --> ' . $event->getContact()->getEmail() . "\n";
             $out = $this->sendTemplateEmail(array($event->getContact()->getEmail() => $event->getContact()->getName()), array($senderEmailAddress => 'WÖHRL Akademie - noreply'), 'Veranstaltung Anmeldefrist abgelaufen: ' . $event->getTitle(), 'DeadlineReached', array('event' => $event, 'subscribers' => $event->getSubscribers(), 'helper' => $helper, 'attachCsv' => TRUE, 'attachIcs' => TRUE));
             if ($out == 1) {
                 $event->setSubEndDateInfoSent(TRUE);
             }
         }
     }
     echo $cronLog;
     return;
 }