comment.api.php 6.28 KB
Newer Older
1 2
<?php

3
use Drupal\Core\Entity\EntityInterface;
4

5 6 7 8 9 10 11 12 13 14
/**
 * @file
 * Hooks provided by the Comment module.
 */

/**
 * @addtogroup hooks
 * @{
 */

15
/**
16
 * Act on a comment being inserted or updated.
17
 *
18
 * This hook is invoked from $comment->save() before the comment is saved to the
19
 * database.
20
 *
21
 * @param \Drupal\comment\Comment $comment
22 23
 *   The comment object.
 */
24
function hook_comment_presave(Drupal\comment\Comment $comment) {
25
  // Remove leading & trailing spaces from the comment subject.
26
  $comment->subject->value = trim($comment->subject->value);
27 28
}

29
/**
30
 * Respond to creation of a new comment.
31
 *
32
 * @param \Drupal\comment\Comment $comment
33
 *   The comment object.
34
 */
35
function hook_comment_insert(Drupal\comment\Comment $comment) {
36
  // Reindex the node when comments are added.
37 38 39
  if ($comment->entity_type->value == 'node') {
    node_reindex_node_search($comment->entity_id->value);
  }
40 41 42
}

/**
43
 * Respond to updates to a comment.
44
 *
45
 * @param \Drupal\comment\Comment $comment
46
 *   The comment object.
47
 */
48
function hook_comment_update(Drupal\comment\Comment $comment) {
49
  // Reindex the node when comments are updated.
50 51 52
  if ($comment->entity_type->value == 'node') {
    node_reindex_node_search($comment->entity_id->value);
  }
53 54
}

55 56 57 58 59 60
/**
 * Act on a newly created comment.
 *
 * This hook runs after a new comment object has just been instantiated. It can
 * be used to set initial values, e.g. to provide defaults.
 *
61
 * @param \Drupal\comment\Entity\Comment $comment
62 63
 *   The comment object.
 */
64
function hook_comment_create(\Drupal\comment\Entity\Comment $comment) {
65 66 67 68 69
  if (!isset($comment->foo)) {
    $comment->foo = 'some_initial_value';
  }
}

70
/**
71
 * Act on comments being loaded from the database.
72
 *
73
 * @param array $comments
74 75
 *  An array of comment objects indexed by cid.
 */
76
function hook_comment_load(Drupal\comment\Comment $comments) {
77 78 79 80 81 82
  $result = db_query('SELECT cid, foo FROM {mytable} WHERE cid IN (:cids)', array(':cids' => array_keys($comments)));
  foreach ($result as $record) {
    $comments[$record->cid]->foo = $record->foo;
  }
}

83
/**
84
 * Act on a comment that is being assembled before rendering.
85
 *
86
 * @param \Drupal\comment\Entity\Comment $comment $comment
87
 *   Passes in the comment the action is being performed on.
88
 * @param \Drupal\entity\Entity\EntityDisplay $display
89 90
 *   The entity_display object holding the display options configured for the
 *   comment components.
91 92 93 94
 * @param $view_mode
 *   View mode, e.g. 'full', 'teaser'...
 * @param $langcode
 *   The language code used for rendering.
95 96
 *
 * @see hook_entity_view()
97
 */
98
function hook_comment_view(\Drupal\comment\Entity\Comment $comment, \Drupal\entity\Entity\EntityDisplay $display, $view_mode, $langcode) {
99 100 101 102 103 104 105 106 107
  // Only do the extra work if the component is configured to be displayed.
  // This assumes a 'mymodule_addition' extra field has been defined for the
  // node type in hook_field_extra_fields().
  if ($display->getComponent('mymodule_addition')) {
    $comment->content['mymodule_addition'] = array(
      '#markup' => mymodule_addition($comment),
      '#theme' => 'mymodule_my_additional_field',
    );
  }
108 109
}

110
/**
111
 * Alter the results of comment_view().
112
 *
113 114 115
 * This hook is called after the content has been assembled in a structured
 * array and may be used for doing processing which requires that the complete
 * comment content structure has been built.
116
 *
117 118
 * If the module wishes to act on the rendered HTML of the comment rather than
 * the structured content array, it may use this hook to add a #post_render
119
 * callback. Alternatively, it could also implement hook_preprocess_HOOK() for
120
 * comment.html.twig. See drupal_render() documentation for details.
121 122 123
 *
 * @param $build
 *   A renderable array representing the comment.
124
 * @param \Drupal\comment\Entity\Comment $comment
125
 *   The comment being rendered.
126
 * @param \Drupal\entity\Entity\EntityDisplay $display
127 128
 *   The entity_display object holding the display options configured for the
 *   comment components.
129
 *
130
 * @see comment_view()
131
 * @see hook_entity_view_alter()
132
 */
133
function hook_comment_view_alter(&$build, \Drupal\comment\Entity\Comment $comment, \Drupal\entity\Entity\EntityDisplay $display) {
134
  // Check for the existence of a field added by another module.
135
  if ($build['#view_mode'] == 'full' && isset($build['an_additional_field'])) {
136 137 138 139 140 141 142 143
    // Change its weight.
    $build['an_additional_field']['#weight'] = -10;
  }

  // Add a #post_render callback to act on the rendered HTML of the comment.
  $build['#post_render'][] = 'my_module_comment_post_render';
}

144
/**
145
 * Respond to a comment being published by a moderator.
146
 *
147
 * @param \Drupal\comment\Comment $comment
148
 *   The comment the action is being performed on.
149
 */
150
function hook_comment_publish(Drupal\comment\Comment $comment) {
151
  drupal_set_message(t('Comment: @subject has been published', array('@subject' => $comment->subject->value)));
152 153 154
}

/**
155
 * Respond to a comment being unpublished by a moderator.
156
 *
157
 * @param \Drupal\comment\Comment $comment
158
 *   The comment the action is being performed on.
159
 */
160
function hook_comment_unpublish(Drupal\comment\Comment $comment) {
161
  drupal_set_message(t('Comment: @subject has been unpublished', array('@subject' => $comment->subject->value)));
162 163 164
}

/**
165 166
 * Act before comment deletion.
 *
167 168
 * This hook is invoked from entity_delete_multiple() before field values are
 * deleted and before the comment is actually removed from the database.
169
 *
170
 * @param \Drupal\comment\Comment $comment
171 172 173 174 175
 *   The comment object for the comment that is about to be deleted.
 *
 * @see hook_comment_delete()
 * @see entity_delete_multiple()
 */
176
function hook_comment_predelete(Drupal\comment\Comment $comment) {
177 178
  // Delete a record associated with the comment in a custom table.
  db_delete('example_comment_table')
179
    ->condition('cid', $comment->id())
180 181 182 183 184 185
    ->execute();
}

/**
 * Respond to comment deletion.
 *
186 187
 * This hook is invoked from entity_delete_multiple() after field values are
 * deleted and after the comment has been removed from the database.
188
 *
189
 * @param \Drupal\comment\Comment $comment
190 191 192 193
 *   The comment object for the comment that has been deleted.
 *
 * @see hook_comment_predelete()
 * @see entity_delete_multiple()
194
 */
195
function hook_comment_delete(Drupal\comment\Comment $comment) {
196
  drupal_set_message(t('Comment: @subject has been deleted', array('@subject' => $comment->subject->value)));
197 198
}

199 200 201
/**
 * @} End of "addtogroup hooks".
 */