/** * Helper function to setup the faq question. * * @param array &$data * Array reference to store display data in. * @param \Drupal\node\NodeInterface $node * The node object. * @param string $path * The path/url which the question should link to if links are disabled. * @param string $anchor * Link anchor to use in question links. */ public static function viewQuestion(&$data, \Drupal\node\NodeInterface $node, $path = NULL, $anchor = NULL) { $faq_settings = \Drupal::config('faq.settings'); $disable_node_links = $faq_settings->get('disable_node_links'); $question = ''; // Don't link to faq node, instead provide no link, or link to current page. if ($disable_node_links) { if (empty($path) && empty($anchor)) { $question = $node->getTitle(); } elseif (empty($path)) { // Can't seem to use l() function with empty string as screen-readers // don't like it, so create anchor name manually. $question = '<a id="' . $anchor . '"></a>' . $node->getTitle(); } else { $options = array(); if ($anchor) { $options['attributes'] = array('id' => $anchor); } $question = l($node->getTitle(), $path, $options); } } else { $node_id = $node->id(); if (empty($anchor)) { $question = l($node->getTitle(), "node/{$node_id})"); } else { $question = l($node->getTitle(), "node/{$node_id}", array("attributes" => array("id" => "{$anchor}"))); } } $question = '<span datatype="" property="dc:title">' . $question . '</span>'; $detailed_question = $node->get('field_detailed_question')->value; if ($faq_settings->get('display') != 'hide_answer' && !empty($detailed_question) && $faq_settings->get('question_length') == 'both') { $question .= '<div class="faq-detailed-question">' . $detailed_question . '</div>'; } $data['question'] = SafeMarkup::set($question); }
/** * {@inheritdoc} */ public function getDescription() { $component_type = $this->node->webform['components'][$this->component['cid']]['type']; if (webform_component_feature($component_type, 'group')) { return $this->t('This will immediately delete the %name @type component and all nested components within %name from the %webform webform. This cannot be undone.', ['%name' => $this->node->webform['components'][$this->component['cid']]['name'], '@type' => webform_component_property($component_type, 'label'), '%webform' => $this->node->getTitle()]); } else { return $this->t('This will immediately delete the %name component from the %webform webform. This cannot be undone.', ['%name' => $this->node->webform['components'][$this->component['cid']]['name'], '%webform' => $this->node->getTitle()]); } }
/** * Tests the presence of expected cache tags with referenced entities. */ public function testSearchTagsBubbling() { // Install field UI and entity reference modules. $this->container->get('module_installer')->install(['field_ui', 'entity_reference']); $this->resetAll(); // Creates a new content type that will have an entity reference. $type_name = 'entity_reference_test'; $type = $this->drupalCreateContentType(['name' => $type_name, 'type' => $type_name]); $bundle_path = 'admin/structure/types/manage/' . $type->id(); // Create test user. $admin_user = $this->drupalCreateUser(['access content', 'create ' . $type_name . ' content', 'administer node fields', 'administer node display']); $this->drupalLogin($admin_user); // First step: 'Add new field' on the 'Manage fields' page. $this->drupalGet($bundle_path . '/fields/add-field'); $this->drupalPostForm(NULL, ['label' => 'Test label', 'field_name' => 'test__ref', 'new_storage_type' => 'entity_reference'], t('Save and continue')); // Second step: 'Field settings' form. $this->drupalPostForm(NULL, [], t('Save field settings')); // Create a new node of our newly created node type and fill in the entity // reference field. $edit = ['title[0][value]' => 'Llama shop', 'field_test__ref[0][target_id]' => $this->node->getTitle()]; $this->drupalPostForm('node/add/' . $type->id(), $edit, t('Save')); // Test that the value of the entity reference field is shown. $this->drupalGet('node/2'); $this->assertText('bike shed shop'); // Refresh the search index. $this->container->get('plugin.manager.search')->createInstance('node_search')->updateIndex(); search_update_totals(); // Log in with searching user again. $this->drupalLogin($this->searchingUser); // Default search cache tags. $default_search_tags = ['config:search.page.node_search', 'search_index', 'search_index:node_search', 'rendered', 'node_list']; // Node search results for shop, should return node:1 (bike shed shop) and // node:2 (Llama shop). The related authors cache tags should be visible as // well. $edit = array(); $edit['keys'] = 'shop'; $this->drupalPostForm('search/node', $edit, t('Search')); $this->assertText('bike shed shop'); $this->assertText('Llama shop'); $expected_cache_tags = Cache::mergeTags($default_search_tags, ['node:1', 'user:2', 'node:2', 'user:3', 'node_view', 'config:filter.format.plain_text']); $cache_tags = $this->drupalGetHeader('X-Drupal-Cache-Tags'); $this->assertEqual(explode(' ', $cache_tags), $expected_cache_tags); // Only get the new node in the search results, should result in node:1, // node:2 and user:3 as cache tags even though only node:1 is shown. This is // because node:2 is reference in node:1 as an entity reference. $edit = array(); $edit['keys'] = 'Llama'; $this->drupalPostForm('search/node', $edit, t('Search')); $this->assertText('Llama shop'); $expected_cache_tags = Cache::mergeTags($default_search_tags, ['node:1', 'node:2', 'user:3', 'node_view']); $cache_tags = $this->drupalGetHeader('X-Drupal-Cache-Tags'); $this->assertEqual(explode(' ', $cache_tags), $expected_cache_tags); }
/** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state, NodeInterface $node = NULL) { $config = \Drupal::config('simplenews.settings'); // Handling the multi-newsletters options. $subscriber_count = 0; $backupsi = array(); foreach ($node->simplenews_issue as $simplenews_issue) { $backupsi[] = $simplenews_issue->target_id; } $subscribers = db_select('simplenews_subscriber__subscriptions', 'r')->fields('r', array('entity_id'))->condition('subscriptions_target_id', $backupsi, 'in')->condition('subscriptions_status', 1)->groupBy('entity_id'); $subscribers->addExpression('count(subscriptions_target_id)', 'entitycount'); $subscriber_count = $subscribers->countQuery()->execute()->fetchField(); $status = $node->simplenews_issue->status; $form['#title'] = t('<em>Newsletter issue</em> @title', array('@title' => $node->getTitle())); // We will need the node. $form_state->set('node', $node); // Show newsletter sending options if newsletter has not been send yet. // If send a notification is shown. if ($status == SIMPLENEWS_STATUS_SEND_NOT) { $form['test'] = array('#type' => 'details', '#open' => TRUE, '#title' => t('Test')); $form['test']['test_address'] = array('#type' => 'textfield', '#title' => t('Test email addresses'), '#description' => t('A comma-separated list of email addresses to be used as test addresses.'), '#default_value' => \Drupal::currentUser()->getEmail(), '#size' => 60, '#maxlength' => 128); $form['test']['submit'] = array('#type' => 'submit', '#value' => t('Send test newsletter issue'), '#name' => 'send_test', '#submit' => array('::submitTestMail'), '#validate' => array('::validateTestAddress')); $form['send'] = array('#type' => 'details', '#open' => TRUE, '#title' => t('Send')); $default_handler = isset($form_state->getValue('simplenews')['recipient_handler']) ? $form_state->getValue('simplenews')['recipient_handler'] : $node->simplenews_issue->handler; $recipient_handler_manager = \Drupal::service('plugin.manager.simplenews_recipient_handler'); $options = $recipient_handler_manager->getOptions(); $form['send']['recipient_handler'] = array('#type' => 'select', '#title' => t('Recipients'), '#description' => t('Please select to configure who to send the email to.'), '#options' => $options, '#default_value' => $default_handler, '#access' => count($options) > 1, '#ajax' => array('callback' => '::ajaxUpdateRecipientHandlerSettings', 'wrapper' => 'recipient-handler-settings', 'method' => 'replace', 'effect' => 'fade')); // Get the handler class. $handler_definitions = $recipient_handler_manager->getDefinitions(); $handler = $handler_definitions[$default_handler]; $class = $handler['class']; $settings = $node->simplenews_issue->handler_settings; if (method_exists($class, 'settingsForm')) { $element = array('#parents' => array('simplenews', 'recipient_handler_settings'), '#prefix' => '<div id="recipient-handler-settings">', '#suffix' => '</div>'); $form['send']['recipient_handler_settings'] = $class::settingsForm($element, $settings); } else { $form['send']['recipient_handler']['#suffix'] = '<div id="recipient-handler-settings"></div>'; } // Add some text to describe the send situation. $form['send']['count'] = array('#type' => 'item', '#markup' => t('Send newsletter issue to @count subscribers.', array('@count' => $subscriber_count))); if (!$config->get('mail.use_cron')) { $send_text = t('Mails will be sent immediately.'); } else { $send_text = t('Mails will be sent when cron runs.'); } $form['send']['method'] = array('#type' => 'item', '#markup' => $send_text); if ($node->isPublished()) { $form['send']['send_now'] = array('#type' => 'submit', '#button_type' => 'primary', '#value' => t('Send now'), '#submit' => array('::submitForm', '::submitSendNow')); } else { $form['send']['send_on_publish'] = array('#type' => 'submit', '#button_type' => 'primary', '#value' => t('Send on publish'), '#submit' => array('::submitForm', '::submitSendLater')); } } else { $form['status'] = array('#type' => 'item'); if ($status == SIMPLENEWS_STATUS_SEND_READY) { $form['status']['#title'] = t('This newsletter issue has been sent to @count subscribers', array('@count' => $node->simplenews_issue->sent_count)); } else { if ($status == SIMPLENEWS_STATUS_SEND_PUBLISH) { $form['status']['#title'] = t('The newsletter issue will be sent when the content is published.'); } else { $form['status']['#title'] = t('This newsletter issue is pending, @count of @total mails already sent.', array('@count' => (int) $node->simplenews_issue->sent_count, '@total' => \Drupal::service('simplenews.spool_storage')->countMails(['entity_type' => 'node', 'entity_id' => $node->id()]))); } $form['actions'] = array('#type' => 'actions'); $form['actions']['stop'] = array('#type' => 'submit', '#submit' => array('::submitStop'), '#value' => t('Stop sending')); } } return $form; }
/** * Show. * * @return string * Return Hello string. */ public function show(NodeInterface $node) { return ['#type' => 'markup', '#markup' => $this->t('Product title: $title', array('$title' => $node->getTitle()))]; }
/** * Return the 'Hello World Node' page. * * @return string * A render array containing the title of a node pased has argument. */ public function helloWorldNode(NodeInterface $node) { $output = array(); $output['hello_world'] = array('#markup' => $node->getTitle()); return $output; }