/** * Reacts on the given event and invokes configured reaction rules. * * @param \Symfony\Component\EventDispatcher\Event $event * The event object containing context for the event. * @param string $event_name * The event name. */ public function onRulesEvent(Event $event, $event_name) { // Load reaction rule config entities by $event_name. $storage = $this->entityManager->getStorage('rules_reaction_rule'); // @todo Only load active reaction rules here. $configs = $storage->loadByProperties(['event' => $event_name]); // Loop over all rules and execute them. foreach ($configs as $rules_config) { $reaction_rule = $rules_config->getExpression(); $context_names = array_keys($reaction_rule->getContextDefinitions()); foreach ($context_names as $context_name) { // If this is a GenericEvent get the context for the rule from the event // arguments. if ($event instanceof GenericEvent) { $reaction_rule->setContextValue($context_name, $event->getArgument($context_name)); } } $reaction_rule->execute(); } }
public function getData(Event $event) { $institutionMedicalCenter = $event->getSubject(); $institution = $institutionMedicalCenter->getInstitution(); $router = $this->container->get('router'); $urlCenter = $router->generate('institution_medicalCenter_view', array('imcId' => $institutionMedicalCenter->getId()), true); $to = $event->getArgument('userEmail'); $inquiriesEmail = $institutionMedicalCenter->getContactEmail(); if (empty($inquiriesEmail)) { if (!($inquiriesEmail = $institution->getContactEmail())) { $inquiriesEmail = $this->container->get('services.institution')->getAccountOwner($institution)->getEmail(); } } $bcc = array('*****@*****.**' => 'Jason Coppage', '*****@*****.**' => 'Greg Mogab', '*****@*****.**' => 'Kimberly Damlani', '*****@*****.**' => 'Harold Modesto'); $data = array('clinic_name' => $institutionMedicalCenter->getName(), 'institution_name' => $institution->getName(), 'to' => $to, 'bcc' => $bcc, 'email' => array('inquiries' => $inquiriesEmail), 'url' => array('center' => $urlCenter, 'add_centers' => $router->generate('institution_medicalCenter_index', array(), true), 'center_gallery' => $router->generate('institution_mediaGallery_index', array(), true), 'center_treatments' => $urlCenter . '#specializations', 'center_doctors' => $urlCenter . '#doctors', 'contact_info' => $urlCenter . '#contact-details')); $accountOwnerEmail = $this->container->get('services.institution')->getAccountOwner($institution)->getEmail(); if (strtolower($to) != strtolower($accountOwnerEmail)) { $data['cc'] = $accountOwnerEmail; } return $data; }
/** * Reacts on the given event and invokes configured reaction rules. * * @param \Symfony\Component\EventDispatcher\Event $event * The event object containing context for the event. * @param string $event_name * The event name. */ public function onRulesEvent(Event $event, $event_name) { // Load reaction rule config entities by $event_name. $storage = $this->entityTypeManager->getStorage('rules_reaction_rule'); // @todo Only load active reaction rules here. $configs = $storage->loadByProperties(['event' => $event_name]); // Set up an execution state with the event context. $event_definition = $this->eventManager->getDefinition($event_name); $state = ExecutionState::create(); foreach ($event_definition['context'] as $context_name => $context_definition) { // If this is a GenericEvent get the context for the rule from the event // arguments. if ($event instanceof GenericEvent) { $value = $event->getArgument($context_name); } else { $value = $event->{$context_name}; } $state->setVariable($context_name, $context_definition, $value); } // Loop over all rules and execute them. foreach ($configs as $config) { /** @var \Drupal\rules\Entity\ReactionRuleConfig $config */ $config->getExpression()->executeWithState($state); } $state->autoSave(); }
/** * Get detailed error message * * @param Event $event * @return string error message */ protected function getVerboseError(Event $event) { $errorTrace = $event->getArgument('exception')->getTraceAsString(); $error = sprintf("\nBacktrace:\n%s", $errorTrace); $jsonRequest = $event->getArgument('request'); if (isset($jsonRequest)) { $jsonRequest = json_encode($jsonRequest); $error .= sprintf("\nRequest:\n%s", $jsonRequest); } return $error; }