/** * #lazy_builder callback; builds a support ticket's links. * * @param string $support_ticket_entity_id * The support ticket entity ID. * @param string $view_mode * The view mode in which the support ticket entity is being viewed. * @param string $langcode * The language in which the support ticket entity is being viewed. * * @return array * A renderable array representing the support ticket links. */ public static function renderLinks($support_ticket_entity_id, $view_mode, $langcode) { $links = array('#theme' => 'links__support_ticket', '#pre_render' => array('drupal_pre_render_links'), '#attributes' => array('class' => array('links', 'inline'))); $entity = SupportTicket::load($support_ticket_entity_id)->getTranslation($langcode); $links['support_ticket'] = static::buildLinks($entity, $view_mode); // Allow other modules to alter the support_ticket links. $hook_context = array('view_mode' => $view_mode, 'langcode' => $langcode); \Drupal::moduleHandler()->alter('support_ticket_links', $links, $entity, $hook_context); return $links; }
/** * {@inheritdoc} */ public function getRuntimeContexts(array $unqualified_context_ids) { $result = []; $context_definition = new ContextDefinition('entity:support_ticket', NULL, FALSE); $value = NULL; if (($route_object = $this->routeMatch->getRouteObject()) && ($route_contexts = $route_object->getOption('parameters')) && isset($route_contexts['support_ticket'])) { if ($support_ticket = $this->routeMatch->getParameter('support_ticket')) { $value = $support_ticket; } } elseif ($this->routeMatch->getRouteName() == 'support_ticket.add') { $support_ticket_type = $this->routeMatch->getParameter('support_ticket_type'); $value = SupportTicket::create(array('type' => $support_ticket_type->id())); } $cacheability = new CacheableMetadata(); $cacheability->setCacheContexts(['route']); $context = new Context($context_definition, $value); $context->addCacheableDependency($cacheability); $result['support_ticket'] = $context; return $result; }
/** * Tests support_ticket presave and static support_ticket load cache. * * This test determines changes in hook_ENTITY_TYPE_presave() and verifies * that the static support_ticket load cache is cleared upon save. */ function testDeterminingChanges() { // Initial creation. $support_ticket = entity_create('support_ticket', array('uid' => $this->webUser->id(), 'support_ticket_type' => 'ticket', 'title' => 'test_changes')); $support_ticket->save(); // Update the support_ticket without applying changes. $support_ticket->save(); $this->assertEqual($support_ticket->label(), 'test_changes', 'No changes have been determined.'); // Apply changes. $support_ticket->title = 'updated'; $support_ticket->save(); // The hook implementations support_ticket_test_support_ticket_presave() and // support_ticket_test_support_ticket_update() determine changes and change the title. $this->assertEqual($support_ticket->label(), 'updated_presave_update', 'Changes have been determined.'); // Test the static support_ticket load cache to be cleared. $support_ticket = SupportTicket::load($support_ticket->id()); $this->assertEqual($support_ticket->label(), 'updated_presave', 'Static cache has been cleared.'); }