/** * Shows a list of all registration of the current frontend user * * @return void */ public function listAction() { $demand = $this->createUserRegistrationDemandObjectFromSettings($this->settings); $demand->setUser($this->registrationService->getCurrentFeUserObject()); $registrations = $this->registrationRepository->findRegistrationsByUserRegistrationDemand($demand); $this->view->assign('registrations', $registrations); }
/** * Checks if the registration can be cancelled and returns an array of variables * * @param int $reguid UID of registration * @param string $hmac HMAC for parameters * * @return array */ public function checkCancelRegistration($reguid, $hmac) { /* @var $registration Registration */ $registration = NULL; $failed = FALSE; $messageKey = 'event.message.cancel_successful'; $titleKey = 'cancelRegistration.title.successful'; if (!$this->hashService->validateHmac('reg-' . $reguid, $hmac)) { $failed = TRUE; $messageKey = 'event.message.cancel_failed_wrong_hmac'; $titleKey = 'cancelRegistration.title.failed'; } else { $registration = $this->registrationRepository->findByUid($reguid); } if (!$failed && is_null($registration)) { $failed = TRUE; $messageKey = 'event.message.cancel_failed_registration_not_found_or_cancelled'; $titleKey = 'cancelRegistration.title.failed'; } if (!$failed && $registration->getEvent()->getEnableCancel() === FALSE) { $failed = TRUE; $messageKey = 'event.message.confirmation_failed_cancel_disabled'; $titleKey = 'cancelRegistration.title.failed'; } if (!$failed && $registration->getEvent()->getCancelDeadline() > 0 && $registration->getEvent()->getCancelDeadline() < new \DateTime()) { $failed = TRUE; $messageKey = 'event.message.cancel_failed_deadline_expired'; $titleKey = 'cancelRegistration.title.failed'; } return array($failed, $registration, $messageKey, $titleKey); }
/** * Test if ignoreNotifications is respected * * @test */ public function findNotificationRegistrationsRespectsIgnoreNotificationsForEventUid3() { $event = $this->getMock('DERHANSEN\\SfEventMgt\\Domain\\Model\\Event', array(), array(), '', FALSE); $event->expects($this->once())->method('getUid')->will($this->returnValue(3)); $registrations = $this->registrationRepository->findNotificationRegistrations($event, NULL); $this->assertEquals(1, $registrations->count()); }
/** * Returns all Registrations for the given eventUid as a CSV string * * @param int $eventUid EventUid * @param array $settings Settings * * @throws \RuntimeException RuntimeException * @return string */ public function exportRegistrationsCsv($eventUid, $settings = array()) { $fieldsArray = array_map('trim', explode(',', $settings['fields'])); $registrations = $this->registrationRepository->findByEvent($eventUid); $exportedRegistrations = Utility\GeneralUtility::csvValues($fieldsArray, $settings['fieldDelimiter'], $settings['fieldQuoteCharacter']) . chr(10); foreach ($registrations as $registration) { $exportedRegistration = array(); foreach ($fieldsArray as $field) { if ($registration->_hasProperty($field)) { $exportedRegistration[] = $registration->_getCleanProperty($field); } else { throw new RuntimeException('Field ' . $field . ' is not a Property of Model Registration, please check your TS configuration', 1475590002); } } $exportedRegistrations .= Utility\GeneralUtility::csvValues($exportedRegistration, $settings['fieldDelimiter'], $settings['fieldQuoteCharacter']) . chr(10); } return $exportedRegistrations; }
/** * Confirms all depending registrations based on the given main registration * * @param \DERHANSEN\SfEventMgt\Domain\Model\Registration $registration Registration * * @return void */ public function confirmDependingRegistrations($registration) { $registrations = $this->registrationRepository->findByMainRegistration($registration); foreach ($registrations as $foundRegistration) { /** @var \DERHANSEN\SfEventMgt\Domain\Model\Registration $foundRegistration */ $foundRegistration->setConfirmed(TRUE); $this->registrationRepository->update($foundRegistration); } }
/** * Sends a custom notification defined by the given customNotification key * to all confirmed users of the event * * @param \DERHANSEN\SfEventMgt\Domain\Model\Event $event Event * @param string $customNotification CustomNotification * @param array $settings Settings * * @return int Number of notifications sent */ public function sendCustomNotification($event, $customNotification, $settings) { if (is_null($event) || $customNotification == '' || $settings == '' || !is_array($settings)) { return 0; } $count = 0; $constraints = $settings['notification']['customNotifications'][$customNotification]['constraints']; $registrations = $this->registrationRepository->findNotificationRegistrations($event, $constraints); foreach ($registrations as $registration) { /** @var \DERHANSEN\SfEventMgt\Domain\Model\Registration $registration */ if ($registration->isConfirmed() && !$registration->isIgnoreNotifications()) { $result = $this->sendUserMessage($event, $registration, $settings, MessageType::CUSTOM_NOTIFICATION, $customNotification); if ($result) { $count += 1; } } } return $count; }
/** * Test if findRegistrationsByUserRegistrationDemand respects order direction constraint * * @test */ public function findRegistrationsByUserRegistrationDemandRespectsOrderDirection() { /** @var \TYPO3\CMS\Extbase\Domain\Repository\frontendUserRepository $feUserRepository */ $feUserRepository = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Domain\\Repository\\FrontendUserRepository'); $feUser = $feUserRepository->findByUid(1); /** @var \DERHANSEN\SfEventMgt\Domain\Model\Dto\UserRegistrationDemand $demand */ $demand = $this->objectManager->get('DERHANSEN\\SfEventMgt\\Domain\\Model\\Dto\\UserRegistrationDemand'); $demand->setDisplayMode('all'); $demand->setStoragePage(7); $demand->setUser($feUser); $demand->setOrderField('event.startdate'); $demand->setOrderDirection('desc'); $registrations = $this->registrationRepository->findRegistrationsByUserRegistrationDemand($demand); $this->assertEquals(32, $registrations->getFirst()->getUid()); }
/** * @param \DERHANSEN\SfEventMgt\Domain\Model\Registration $registration * @param string $hmac */ public function notifyAction($registration, $hmac) { $this->validateHmacForAction($registration, $hmac, $this->actionMethodName); $this->proceedWithAction($registration, $this->actionMethodName); $values = ['html' => '']; $paymentMethod = $registration->getPaymentmethod(); /** * Initialize update-flag * * If true, the externally called ProcessNotify method requested, that the registration should be updated */ $updateRegistration = false; $this->signalSlotDispatcher->dispatch(__CLASS__, __FUNCTION__ . 'ProcessNotify' . ucfirst($paymentMethod), [&$values, &$updateRegistration, $registration, GeneralUtility::_GET(), $this]); if ($updateRegistration) { $this->registrationRepository->update($registration); } $this->view->assign('result', $values); }
/** * Confirms the registration if possible and sends e-mails to admin and user * * @param int $reguid UID of registration * @param string $hmac HMAC for parameters * * @return void */ public function confirmRegistrationAction($reguid, $hmac) { /* @var $registration Registration */ $registration = NULL; $failed = FALSE; $messageKey = 'event.message.confirmation_successful'; $titleKey = 'confirmRegistration.title.successful'; if (!$this->hashService->validateHmac('reg-' . $reguid, $hmac)) { $failed = TRUE; $messageKey = 'event.message.confirmation_failed_wrong_hmac'; $titleKey = 'confirmRegistration.title.failed'; } else { $registration = $this->registrationRepository->findByUid($reguid); } if (!$failed && is_null($registration)) { $failed = TRUE; $messageKey = 'event.message.confirmation_failed_registration_not_found'; $titleKey = 'confirmRegistration.title.failed'; } if (!$failed && $registration->getConfirmationUntil() < new \DateTime()) { $failed = TRUE; $messageKey = 'event.message.confirmation_failed_confirmation_until_expired'; $titleKey = 'confirmRegistration.title.failed'; } if (!$failed && $registration->getConfirmed() === TRUE) { $failed = TRUE; $messageKey = 'event.message.confirmation_failed_already_confirmed'; $titleKey = 'confirmRegistration.title.failed'; } if ($failed === FALSE) { $registration->setConfirmed(TRUE); $this->registrationRepository->update($registration); // Send notifications to user and admin $this->notificationService->sendUserMessage($registration->getEvent(), $registration, $this->settings, MessageType::REGISTRATION_CONFIRMED); $this->notificationService->sendAdminMessage($registration->getEvent(), $registration, $this->settings, MessageType::REGISTRATION_CONFIRMED); // Confirm registrations depending on main registration if necessary if ($registration->getAmountOfRegistrations() > 1) { $this->registrationService->confirmDependingRegistrations($registration); } } $this->view->assign('messageKey', $messageKey); $this->view->assign('titleKey', $titleKey); }
/** * Cancels the registration if possible and sends e-mails to admin and user * * @param int $reguid UID of registration * @param string $hmac HMAC for parameters * * @return void */ public function cancelRegistrationAction($reguid, $hmac) { /* @var $registration Registration */ list($failed, $registration, $messageKey, $titleKey) = $this->registrationService->checkCancelRegistration($reguid, $hmac); if ($failed === false) { // Send notifications (must run before cancelling the registration) $this->notificationService->sendUserMessage($registration->getEvent(), $registration, $this->settings, MessageType::REGISTRATION_CANCELLED); $this->notificationService->sendAdminMessage($registration->getEvent(), $registration, $this->settings, MessageType::REGISTRATION_CANCELLED); // First cancel depending registrations if ($registration->getAmountOfRegistrations() > 1) { $this->registrationService->cancelDependingRegistrations($registration); } // Finally cancel registration $this->registrationRepository->remove($registration); // Clear cache for configured pages $this->utilityService->clearCacheForConfiguredUids($this->settings); } $this->view->assign('messageKey', $messageKey); $this->view->assign('titleKey', $titleKey); }
/** * Returns if the given e-mail is registered to the given event * * @param \DERHANSEN\SfEventMgt\Domain\Model\Event $event * @param string $email * @return bool */ protected function emailNotUnique($event, $email) { $registrations = $this->registrationRepository->findEventRegistrationsByEmail($event, $email); return $registrations->count() >= 1; }