a2f06decced2fd883c293cbb19406c0bfefabfff
[yaffs-website] / web / core / modules / node / tests / modules / node_test / node_test.module
1 <?php
2
3 /**
4  * @file
5  * A dummy module for testing node related hooks.
6  *
7  * This is a dummy module that implements node related hooks to test API
8  * interaction with the Node module.
9  */
10
11 use Drupal\Core\Entity\EntityInterface;
12 use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
13 use Drupal\Core\Form\FormStateInterface;
14 use Drupal\Core\Session\AccountInterface;
15 use Drupal\node\NodeInterface;
16
17 /**
18  * Implements hook_ENTITY_TYPE_view() for node entities.
19  */
20 function node_test_node_view(array &$build, NodeInterface $node, EntityViewDisplayInterface $display, $view_mode) {
21   if ($view_mode == 'rss') {
22     // Add RSS elements and namespaces when building the RSS feed.
23     $node->rss_elements[] = [
24       'key' => 'testElement',
25       'value' => t('Value of testElement RSS element for node @nid.', ['@nid' => $node->id()]),
26     ];
27
28     // Add content that should be displayed only in the RSS feed.
29     $build['extra_feed_content'] = [
30       '#markup' => '<p>' . t('Extra data that should appear only in the RSS feed for node @nid.', ['@nid' => $node->id()]) . '</p>',
31       '#weight' => 10,
32     ];
33   }
34
35   if ($view_mode != 'rss') {
36     // Add content that should NOT be displayed in the RSS feed.
37     $build['extra_non_feed_content'] = [
38       '#markup' => '<p>' . t('Extra data that should appear everywhere except the RSS feed for node @nid.', ['@nid' => $node->id()]) . '</p>',
39     ];
40   }
41 }
42
43 /**
44  * Implements hook_ENTITY_TYPE_build_defaults_alter() for node entities.
45  */
46 function node_test_node_build_defaults_alter(array &$build, NodeInterface &$node, $view_mode = 'full') {
47   if ($view_mode == 'rss') {
48     $node->rss_namespaces['xmlns:drupaltest'] = 'http://example.com/test-namespace';
49   }
50 }
51
52 /**
53  * Implements hook_node_grants().
54  */
55 function node_test_node_grants(AccountInterface $account, $op) {
56   // Give everyone full grants so we don't break other node tests.
57   // Our node access tests asserts three realms of access.
58   // See testGrantAlter().
59   return [
60     'test_article_realm' => [1],
61     'test_page_realm' => [1],
62     'test_alter_realm' => [2],
63   ];
64 }
65
66 /**
67  * Implements hook_node_access_records().
68  */
69 function node_test_node_access_records(NodeInterface $node) {
70   // Return nothing when testing for empty responses.
71   if (!empty($node->disable_node_access)) {
72     return;
73   }
74   $grants = [];
75   if ($node->getType() == 'article') {
76     // Create grant in arbitrary article_realm for article nodes.
77     $grants[] = [
78       'realm' => 'test_article_realm',
79       'gid' => 1,
80       'grant_view' => 1,
81       'grant_update' => 0,
82       'grant_delete' => 0,
83       'priority' => 0,
84     ];
85   }
86   elseif ($node->getType() == 'page') {
87     // Create grant in arbitrary page_realm for page nodes.
88     $grants[] = [
89       'realm' => 'test_page_realm',
90       'gid' => 1,
91       'grant_view' => 1,
92       'grant_update' => 0,
93       'grant_delete' => 0,
94       'priority' => 0,
95     ];
96   }
97   return $grants;
98 }
99
100 /**
101  * Implements hook_node_access_records_alter().
102  */
103 function node_test_node_access_records_alter(&$grants, NodeInterface $node) {
104   if (!empty($grants)) {
105     foreach ($grants as $key => $grant) {
106       // Alter grant from test_page_realm to test_alter_realm and modify the gid.
107       if ($grant['realm'] == 'test_page_realm' && $node->isPromoted()) {
108         $grants[$key]['realm'] = 'test_alter_realm';
109         $grants[$key]['gid'] = 2;
110       }
111     }
112   }
113 }
114
115 /**
116  * Implements hook_node_grants_alter().
117  */
118 function node_test_node_grants_alter(&$grants, AccountInterface $account, $op) {
119   // Return an empty array of grants to prove that we can alter by reference.
120   $grants = [];
121 }
122
123 /**
124  * Implements hook_ENTITY_TYPE_presave() for node entities.
125  */
126 function node_test_node_presave(NodeInterface $node) {
127   if ($node->getTitle() == 'testing_node_presave') {
128     // Sun, 19 Nov 1978 05:00:00 GMT
129     $node->setCreatedTime(280299600);
130     // Drupal 1.0 release.
131     $node->changed = 979534800;
132   }
133   // Determine changes.
134   if (!empty($node->original) && $node->original->getTitle() == 'test_changes') {
135     if ($node->original->getTitle() != $node->getTitle()) {
136       $node->title->value .= '_presave';
137     }
138   }
139 }
140
141 /**
142  * Implements hook_ENTITY_TYPE_update() for node entities.
143  */
144 function node_test_node_update(NodeInterface $node) {
145   // Determine changes on update.
146   if (!empty($node->original) && $node->original->getTitle() == 'test_changes') {
147     if ($node->original->getTitle() != $node->getTitle()) {
148       $node->title->value .= '_update';
149     }
150   }
151 }
152
153 /**
154  * Implements hook_entity_view_mode_alter().
155  */
156 function node_test_entity_view_mode_alter(&$view_mode, EntityInterface $entity, $context) {
157   // Only alter the view mode if we are on the test callback.
158   $change_view_mode = \Drupal::state()->get('node_test_change_view_mode') ?: '';
159   if ($change_view_mode) {
160     $view_mode = $change_view_mode;
161   }
162 }
163
164 /**
165  * Implements hook_ENTITY_TYPE_insert() for node entities.
166  *
167  * This tests saving a node on node insert.
168  *
169  * @see \Drupal\node\Tests\NodeSaveTest::testNodeSaveOnInsert()
170  */
171 function node_test_node_insert(NodeInterface $node) {
172   // Set the node title to the node ID and save.
173   if ($node->getTitle() == 'new') {
174     $node->setTitle('Node ' . $node->id());
175     $node->setNewRevision(FALSE);
176     $node->save();
177   }
178 }
179
180 /**
181  * Implements hook_form_alter().
182  */
183 function node_test_form_alter(&$form, FormStateInterface $form_state, $form_id) {
184   if (!$form_state->get('node_test_form_alter')) {
185     drupal_set_message('Storage is not set');
186     $form_state->set('node_test_form_alter', TRUE);
187   }
188   else {
189     drupal_set_message('Storage is set');
190   }
191 }