Skip to content
Snippets Groups Projects
Select Git revision
  • 6ab5a3aaa140cc982f082104807a4f27cf276b18
  • 11.x default protected
  • 11.2.x protected
  • 10.6.x protected
  • 10.5.x protected
  • 11.1.x protected
  • 10.4.x protected
  • 11.0.x protected
  • 10.3.x protected
  • 7.x protected
  • 10.2.x protected
  • 10.1.x protected
  • 9.5.x protected
  • 10.0.x protected
  • 9.4.x protected
  • 9.3.x protected
  • 9.2.x protected
  • 9.1.x protected
  • 8.9.x protected
  • 9.0.x protected
  • 8.8.x protected
  • 10.5.1 protected
  • 11.2.2 protected
  • 11.2.1 protected
  • 11.2.0 protected
  • 10.5.0 protected
  • 11.2.0-rc2 protected
  • 10.5.0-rc1 protected
  • 11.2.0-rc1 protected
  • 10.4.8 protected
  • 11.1.8 protected
  • 10.5.0-beta1 protected
  • 11.2.0-beta1 protected
  • 11.2.0-alpha1 protected
  • 10.4.7 protected
  • 11.1.7 protected
  • 10.4.6 protected
  • 11.1.6 protected
  • 10.3.14 protected
  • 10.4.5 protected
  • 11.0.13 protected
41 results

node_test.module

Blame
  • Alex Pott's avatar
    Issue #2715741 by Mile23, pfrenssen: Fix 'Drupal.Classes.FullyQualifiedNamespace' coding standard
    Alex Pott authored
    6ab5a3aa
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    node_test.module 5.19 KiB
    <?php
    
    /**
     * @file
     * A dummy module for testing node related hooks.
     *
     * This is a dummy module that implements node related hooks to test API
     * interaction with the Node module.
     */
    
    use Drupal\Core\Entity\EntityInterface;
    use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
    use Drupal\Core\Session\AccountInterface;
    use Drupal\node\NodeInterface;
    
    /**
     * Implements hook_ENTITY_TYPE_view() for node entities.
     */
    function node_test_node_view(array &$build, NodeInterface $node, EntityViewDisplayInterface $display, $view_mode) {
      if ($view_mode == 'rss') {
        // Add RSS elements and namespaces when building the RSS feed.
        $node->rss_elements[] = array(
          'key' => 'testElement',
          'value' => t('Value of testElement RSS element for node @nid.', array('@nid' => $node->id())),
        );
    
        // Add content that should be displayed only in the RSS feed.
        $build['extra_feed_content'] = array(
          '#markup' => '<p>' . t('Extra data that should appear only in the RSS feed for node @nid.', array('@nid' => $node->id())) . '</p>',
          '#weight' => 10,
        );
      }
    
      if ($view_mode != 'rss') {
        // Add content that should NOT be displayed in the RSS feed.
        $build['extra_non_feed_content'] = array(
          '#markup' => '<p>' . t('Extra data that should appear everywhere except the RSS feed for node @nid.', array('@nid' => $node->id())) . '</p>',
        );
      }
    }
    
    /**
     * Implements hook_ENTITY_TYPE_build_defaults_alter() for node entities.
     */
    function node_test_node_build_defaults_alter(array &$build, NodeInterface &$node, $view_mode = 'full') {
      if ($view_mode == 'rss') {
        $node->rss_namespaces['xmlns:drupaltest'] = 'http://example.com/test-namespace';
      }
    }
    
    /**
     * Implements hook_node_grants().
     */
    function node_test_node_grants(AccountInterface $account, $op) {
      // Give everyone full grants so we don't break other node tests.
      // Our node access tests asserts three realms of access.
      // See testGrantAlter().
      return array(
        'test_article_realm' => array(1),
        'test_page_realm' => array(1),
        'test_alter_realm' => array(2),
      );
    }
    
    /**
     * Implements hook_node_access_records().
     */
    function node_test_node_access_records(NodeInterface $node) {
      // Return nothing when testing for empty responses.
      if (!empty($node->disable_node_access)) {
        return;
      }
      $grants = array();
      if ($node->getType() == 'article') {
        // Create grant in arbitrary article_realm for article nodes.
        $grants[] = array(
          'realm' => 'test_article_realm',
          'gid' => 1,
          'grant_view' => 1,
          'grant_update' => 0,
          'grant_delete' => 0,
          'priority' => 0,
        );
      }
      elseif ($node->getType() == 'page') {
        // Create grant in arbitrary page_realm for page nodes.
        $grants[] = array(
          'realm' => 'test_page_realm',
          'gid' => 1,
          'grant_view' => 1,
          'grant_update' => 0,
          'grant_delete' => 0,
          'priority' => 0,
        );
      }
      return $grants;
    }
    
    /**
     * Implements hook_node_access_records_alter().
     */
    function node_test_node_access_records_alter(&$grants, NodeInterface $node) {
      if (!empty($grants)) {
        foreach ($grants as $key => $grant) {
          // Alter grant from test_page_realm to test_alter_realm and modify the gid.
          if ($grant['realm'] == 'test_page_realm' && $node->isPromoted()) {
            $grants[$key]['realm'] = 'test_alter_realm';
            $grants[$key]['gid'] = 2;
          }
        }
      }
    }
    
    /**
     * Implements hook_node_grants_alter().
     */
    function node_test_node_grants_alter(&$grants, AccountInterface $account, $op) {
      // Return an empty array of grants to prove that we can alter by reference.
      $grants = array();
    }
    
    /**
     * Implements hook_ENTITY_TYPE_presave() for node entities.
     */
    function node_test_node_presave(NodeInterface $node) {
      if ($node->getTitle() == 'testing_node_presave') {
        // Sun, 19 Nov 1978 05:00:00 GMT
        $node->setCreatedTime(280299600);
        // Drupal 1.0 release.
        $node->changed = 979534800;
      }
      // Determine changes.
      if (!empty($node->original) && $node->original->getTitle() == 'test_changes') {
        if ($node->original->getTitle() != $node->getTitle()) {
          $node->title->value .= '_presave';
        }
      }
    }
    
    /**
     * Implements hook_ENTITY_TYPE_update() for node entities.
     */
    function node_test_node_update(NodeInterface $node) {
      // Determine changes on update.
      if (!empty($node->original) && $node->original->getTitle() == 'test_changes') {
        if ($node->original->getTitle() != $node->getTitle()) {
          $node->title->value .= '_update';
        }
      }
    }
    
    /**
     * Implements hook_entity_view_mode_alter().
     */
    function node_test_entity_view_mode_alter(&$view_mode, EntityInterface $entity, $context) {
      // Only alter the view mode if we are on the test callback.
      $change_view_mode = \Drupal::state()->get( 'node_test_change_view_mode') ?: '';
      if ($change_view_mode) {
        $view_mode = $change_view_mode;
      }
    }
    
    /**
     * Implements hook_ENTITY_TYPE_insert() for node entities.
     *
     * This tests saving a node on node insert.
     *
     * @see \Drupal\node\Tests\NodeSaveTest::testNodeSaveOnInsert()
     */
    function node_test_node_insert(NodeInterface $node) {
      // Set the node title to the node ID and save.
      if ($node->getTitle() == 'new') {
        $node->setTitle('Node '. $node->id());
        $node->setNewRevision(FALSE);
        $node->save();
      }
    }