/** * Serialize an entity and return its ID. * * @param EntityInterface $entity * * @return string */ public function serializeEntityId(EntityInterface $entity) { /** @var EntityAccessor $entityAccessor */ $entityAccessor = $GLOBALS['container']['doctrine.orm.entityAccessor']; $serializer = new IdSerializer(); $serializer->setDataProviderName($entity->entityTableName()); $serializer->setId($entityAccessor->getPrimaryKey($entity)); return $serializer->getSerialized(); }
protected function execute(Message $message, \BackendUser $user) { global $container; /** @var \Symfony\Component\EventDispatcher\EventDispatcher $eventDispatcher */ $eventDispatcher = $GLOBALS['container']['event-dispatcher']; $input = \Input::getInstance(); $user = $input->get('recipient_user'); /** @var \Doctrine\DBAL\Connection $connection */ $connection = $container['doctrine.connection.default']; $queryBuilder = $connection->createQueryBuilder(); /** @var \Doctrine\DBAL\Statement $statement */ $statement = $queryBuilder->select('u.*')->from('tl_user', 'u')->where('id=:id')->setParameter(':id', $user)->execute(); $userData = $statement->fetch(); if (!$userData) { $_SESSION['AVISOTA_SEND_PREVIEW_TO_USER_EMPTY'] = true; header('Location: ' . $url); exit; } $idSerializer = new IdSerializer(); $idSerializer->setDataProviderName('orm_avisota_message'); $idSerializer->setId($message->getId()); $pidSerializer = new IdSerializer(); $pidSerializer->setDataProviderName('orm_avisota_message_category'); $pidSerializer->setId($message->getCategory()->getId()); $environment = Environment::getInstance(); $url = sprintf('%scontao/main.php?do=avisota_newsletter&table=orm_avisota_message&act=preview&id=%s&pid=%s', $environment->base, $idSerializer->getSerialized(), $pidSerializer->getSerialized()); if ($message->getCategory()->getViewOnlinePage()) { $event = new LoadLanguageFileEvent('avisota_message'); $eventDispatcher->dispatch(ContaoEvents::SYSTEM_LOAD_LANGUAGE_FILE, $event); $viewOnlineLink = sprintf($GLOBALS['TL_LANG']['avisota_message']['viewOnline'], $url); } else { $viewOnlineLink = false; } $event = new \Avisota\Contao\Core\Event\CreateFakeRecipientEvent($message); $eventDispatcher->dispatch(\Avisota\Contao\Core\CoreEvents::CREATE_FAKE_RECIPIENT, $event); $recipient = $event->getRecipient(); $recipient->setEmail($userData['email']); $additionalData = array('view_online_link' => $viewOnlineLink); /** @var \Avisota\Contao\Message\Core\Renderer\MessageRendererInterface $renderer */ $renderer = $container['avisota.message.renderer']; $messageTemplate = $renderer->renderMessage($message); $messageMail = $messageTemplate->render($recipient, $additionalData); /** @var \Avisota\Transport\TransportInterface $transport */ $transport = $GLOBALS['container']['avisota.transport.' . $message->getQueue()->getTransport()->getId()]; $transport->send($messageMail); $event = new \ContaoCommunityAlliance\Contao\Bindings\Events\System\LoadLanguageFileEvent('avisota_message_preview'); $eventDispatcher->dispatch(\ContaoCommunityAlliance\Contao\Bindings\ContaoEvents::SYSTEM_LOAD_LANGUAGE_FILE, $event); $_SESSION['TL_CONFIRM'][] = sprintf($GLOBALS['TL_LANG']['avisota_message_preview']['previewSend'], $recipient->getEmail()); header('Location: ' . $url); exit; }
/** * Create the "new" button. * * @return CommandInterface|null */ protected function getCreateModelCommand() { $environment = $this->getEnvironment(); $definition = $environment->getDataDefinition(); $basicDefinition = $definition->getBasicDefinition(); $providerName = $environment->getDataDefinition()->getName(); $mode = $basicDefinition->getMode(); $config = $this->getEnvironment()->getController()->getBaseConfig(); $sorting = $this->getManualSortingProperty(); if ($serializedPid = $environment->getInputProvider()->getParameter('pid')) { $pid = IdSerializer::fromSerialized($serializedPid); } else { $pid = new IdSerializer(); } if ($basicDefinition->isClosed()) { return null; } $command = new Command(); $parameters = $command->getParameters(); $extra = $command->getExtra(); $extra['class'] = 'header_new'; $extra['accesskey'] = 'n'; $extra['attributes'] = 'onclick="Backend.getScrollOffset();"'; $command->setName('button_new')->setLabel($this->translate('new.0', $providerName))->setDescription($this->translate('new.1', $providerName)); $this->getPanel()->initialize($config); // Add new button. if ($mode == BasicDefinitionInterface::MODE_FLAT || $mode == BasicDefinitionInterface::MODE_PARENTEDLIST && !$sorting) { $parameters['act'] = 'create'; // Add new button. if ($pid->getDataProviderName() && $pid->getId()) { $parameters['pid'] = $pid->getSerialized(); } } elseif ($mode == BasicDefinitionInterface::MODE_PARENTEDLIST || $mode == BasicDefinitionInterface::MODE_HIERARCHICAL) { if ($environment->getClipboard()->isNotEmpty()) { return null; } $after = IdSerializer::fromValues($definition->getName(), 0); $parameters['act'] = 'paste'; $parameters['mode'] = 'create'; if ($mode == BasicDefinitionInterface::MODE_PARENTEDLIST) { $parameters['after'] = $after->getSerialized(); } if ($pid->getDataProviderName() && $pid->getId()) { $parameters['pid'] = $pid->getSerialized(); } } return $command; }