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