annotate modules/comment/comment.admin.inc @ 13:134d4b2e75f6

updated quicktabs and google analytics modules
author danieleb <danielebarchiesi@me.com>
date Tue, 29 Oct 2013 13:48:59 +0000
parents ff03f76ab3fe
children
rev   line source
danielebarchiesi@0 1 <?php
danielebarchiesi@0 2
danielebarchiesi@0 3 /**
danielebarchiesi@0 4 * @file
danielebarchiesi@0 5 * Admin page callbacks for the comment module.
danielebarchiesi@0 6 */
danielebarchiesi@0 7
danielebarchiesi@0 8 /**
danielebarchiesi@0 9 * Menu callback; present an administrative comment listing.
danielebarchiesi@0 10 */
danielebarchiesi@0 11 function comment_admin($type = 'new') {
danielebarchiesi@0 12 $edit = $_POST;
danielebarchiesi@0 13
danielebarchiesi@0 14 if (isset($edit['operation']) && ($edit['operation'] == 'delete') && isset($edit['comments']) && $edit['comments']) {
danielebarchiesi@0 15 return drupal_get_form('comment_multiple_delete_confirm');
danielebarchiesi@0 16 }
danielebarchiesi@0 17 else {
danielebarchiesi@0 18 return drupal_get_form('comment_admin_overview', $type);
danielebarchiesi@0 19 }
danielebarchiesi@0 20 }
danielebarchiesi@0 21
danielebarchiesi@0 22 /**
danielebarchiesi@0 23 * Form builder for the comment overview administration form.
danielebarchiesi@0 24 *
danielebarchiesi@0 25 * @param $arg
danielebarchiesi@0 26 * Current path's fourth component: the type of overview form ('approval' or
danielebarchiesi@0 27 * 'new').
danielebarchiesi@0 28 *
danielebarchiesi@0 29 * @ingroup forms
danielebarchiesi@0 30 * @see comment_admin_overview_validate()
danielebarchiesi@0 31 * @see comment_admin_overview_submit()
danielebarchiesi@0 32 * @see theme_comment_admin_overview()
danielebarchiesi@0 33 */
danielebarchiesi@0 34 function comment_admin_overview($form, &$form_state, $arg) {
danielebarchiesi@0 35 // Build an 'Update options' form.
danielebarchiesi@0 36 $form['options'] = array(
danielebarchiesi@0 37 '#type' => 'fieldset',
danielebarchiesi@0 38 '#title' => t('Update options'),
danielebarchiesi@0 39 '#attributes' => array('class' => array('container-inline')),
danielebarchiesi@0 40 );
danielebarchiesi@0 41
danielebarchiesi@0 42 if ($arg == 'approval') {
danielebarchiesi@0 43 $options['publish'] = t('Publish the selected comments');
danielebarchiesi@0 44 }
danielebarchiesi@0 45 else {
danielebarchiesi@0 46 $options['unpublish'] = t('Unpublish the selected comments');
danielebarchiesi@0 47 }
danielebarchiesi@0 48 $options['delete'] = t('Delete the selected comments');
danielebarchiesi@0 49
danielebarchiesi@0 50 $form['options']['operation'] = array(
danielebarchiesi@0 51 '#type' => 'select',
danielebarchiesi@0 52 '#title' => t('Operation'),
danielebarchiesi@0 53 '#title_display' => 'invisible',
danielebarchiesi@0 54 '#options' => $options,
danielebarchiesi@0 55 '#default_value' => 'publish',
danielebarchiesi@0 56 );
danielebarchiesi@0 57 $form['options']['submit'] = array(
danielebarchiesi@0 58 '#type' => 'submit',
danielebarchiesi@0 59 '#value' => t('Update'),
danielebarchiesi@0 60 );
danielebarchiesi@0 61
danielebarchiesi@0 62 // Load the comments that need to be displayed.
danielebarchiesi@0 63 $status = ($arg == 'approval') ? COMMENT_NOT_PUBLISHED : COMMENT_PUBLISHED;
danielebarchiesi@0 64 $header = array(
danielebarchiesi@0 65 'subject' => array('data' => t('Subject'), 'field' => 'subject'),
danielebarchiesi@0 66 'author' => array('data' => t('Author'), 'field' => 'name'),
danielebarchiesi@0 67 'posted_in' => array('data' => t('Posted in'), 'field' => 'node_title'),
danielebarchiesi@0 68 'changed' => array('data' => t('Updated'), 'field' => 'c.changed', 'sort' => 'desc'),
danielebarchiesi@0 69 'operations' => array('data' => t('Operations')),
danielebarchiesi@0 70 );
danielebarchiesi@0 71
danielebarchiesi@0 72 $query = db_select('comment', 'c')->extend('PagerDefault')->extend('TableSort');
danielebarchiesi@0 73 $query->join('node', 'n', 'n.nid = c.nid');
danielebarchiesi@0 74 $query->addField('n', 'title', 'node_title');
danielebarchiesi@0 75 $query->addTag('node_access');
danielebarchiesi@0 76 $result = $query
danielebarchiesi@0 77 ->fields('c', array('cid', 'subject', 'name', 'changed'))
danielebarchiesi@0 78 ->condition('c.status', $status)
danielebarchiesi@0 79 ->limit(50)
danielebarchiesi@0 80 ->orderByHeader($header)
danielebarchiesi@0 81 ->execute();
danielebarchiesi@0 82
danielebarchiesi@0 83 $cids = array();
danielebarchiesi@0 84
danielebarchiesi@0 85 // We collect a sorted list of node_titles during the query to attach to the
danielebarchiesi@0 86 // comments later.
danielebarchiesi@0 87 foreach ($result as $row) {
danielebarchiesi@0 88 $cids[] = $row->cid;
danielebarchiesi@0 89 $node_titles[] = $row->node_title;
danielebarchiesi@0 90 }
danielebarchiesi@0 91 $comments = comment_load_multiple($cids);
danielebarchiesi@0 92
danielebarchiesi@0 93 // Build a table listing the appropriate comments.
danielebarchiesi@0 94 $options = array();
danielebarchiesi@0 95 $destination = drupal_get_destination();
danielebarchiesi@0 96
danielebarchiesi@0 97 foreach ($comments as $comment) {
danielebarchiesi@0 98 // Remove the first node title from the node_titles array and attach to
danielebarchiesi@0 99 // the comment.
danielebarchiesi@0 100 $comment->node_title = array_shift($node_titles);
danielebarchiesi@0 101 $comment_body = field_get_items('comment', $comment, 'comment_body');
danielebarchiesi@0 102 $options[$comment->cid] = array(
danielebarchiesi@0 103 'subject' => array(
danielebarchiesi@0 104 'data' => array(
danielebarchiesi@0 105 '#type' => 'link',
danielebarchiesi@0 106 '#title' => $comment->subject,
danielebarchiesi@0 107 '#href' => 'comment/' . $comment->cid,
danielebarchiesi@0 108 '#options' => array('attributes' => array('title' => truncate_utf8($comment_body[0]['value'], 128)), 'fragment' => 'comment-' . $comment->cid),
danielebarchiesi@0 109 ),
danielebarchiesi@0 110 ),
danielebarchiesi@0 111 'author' => theme('username', array('account' => $comment)),
danielebarchiesi@0 112 'posted_in' => array(
danielebarchiesi@0 113 'data' => array(
danielebarchiesi@0 114 '#type' => 'link',
danielebarchiesi@0 115 '#title' => $comment->node_title,
danielebarchiesi@0 116 '#href' => 'node/' . $comment->nid,
danielebarchiesi@0 117 ),
danielebarchiesi@0 118 ),
danielebarchiesi@0 119 'changed' => format_date($comment->changed, 'short'),
danielebarchiesi@0 120 'operations' => array(
danielebarchiesi@0 121 'data' => array(
danielebarchiesi@0 122 '#type' => 'link',
danielebarchiesi@0 123 '#title' => t('edit'),
danielebarchiesi@0 124 '#href' => 'comment/' . $comment->cid . '/edit',
danielebarchiesi@0 125 '#options' => array('query' => $destination),
danielebarchiesi@0 126 ),
danielebarchiesi@0 127 ),
danielebarchiesi@0 128 );
danielebarchiesi@0 129 }
danielebarchiesi@0 130
danielebarchiesi@0 131 $form['comments'] = array(
danielebarchiesi@0 132 '#type' => 'tableselect',
danielebarchiesi@0 133 '#header' => $header,
danielebarchiesi@0 134 '#options' => $options,
danielebarchiesi@0 135 '#empty' => t('No comments available.'),
danielebarchiesi@0 136 );
danielebarchiesi@0 137
danielebarchiesi@0 138 $form['pager'] = array('#theme' => 'pager');
danielebarchiesi@0 139
danielebarchiesi@0 140 return $form;
danielebarchiesi@0 141 }
danielebarchiesi@0 142
danielebarchiesi@0 143 /**
danielebarchiesi@0 144 * Validate comment_admin_overview form submissions.
danielebarchiesi@0 145 */
danielebarchiesi@0 146 function comment_admin_overview_validate($form, &$form_state) {
danielebarchiesi@0 147 $form_state['values']['comments'] = array_diff($form_state['values']['comments'], array(0));
danielebarchiesi@0 148 // We can't execute any 'Update options' if no comments were selected.
danielebarchiesi@0 149 if (count($form_state['values']['comments']) == 0) {
danielebarchiesi@0 150 form_set_error('', t('Select one or more comments to perform the update on.'));
danielebarchiesi@0 151 }
danielebarchiesi@0 152 }
danielebarchiesi@0 153
danielebarchiesi@0 154 /**
danielebarchiesi@0 155 * Process comment_admin_overview form submissions.
danielebarchiesi@0 156 *
danielebarchiesi@0 157 * Execute the chosen 'Update option' on the selected comments, such as
danielebarchiesi@0 158 * publishing, unpublishing or deleting.
danielebarchiesi@0 159 */
danielebarchiesi@0 160 function comment_admin_overview_submit($form, &$form_state) {
danielebarchiesi@0 161 $operation = $form_state['values']['operation'];
danielebarchiesi@0 162 $cids = $form_state['values']['comments'];
danielebarchiesi@0 163
danielebarchiesi@0 164 if ($operation == 'delete') {
danielebarchiesi@0 165 comment_delete_multiple($cids);
danielebarchiesi@0 166 }
danielebarchiesi@0 167 else {
danielebarchiesi@0 168 foreach ($cids as $cid => $value) {
danielebarchiesi@0 169 $comment = comment_load($value);
danielebarchiesi@0 170
danielebarchiesi@0 171 if ($operation == 'unpublish') {
danielebarchiesi@0 172 $comment->status = COMMENT_NOT_PUBLISHED;
danielebarchiesi@0 173 }
danielebarchiesi@0 174 elseif ($operation == 'publish') {
danielebarchiesi@0 175 $comment->status = COMMENT_PUBLISHED;
danielebarchiesi@0 176 }
danielebarchiesi@0 177 comment_save($comment);
danielebarchiesi@0 178 }
danielebarchiesi@0 179 }
danielebarchiesi@0 180 drupal_set_message(t('The update has been performed.'));
danielebarchiesi@0 181 $form_state['redirect'] = 'admin/content/comment';
danielebarchiesi@0 182 cache_clear_all();
danielebarchiesi@0 183 }
danielebarchiesi@0 184
danielebarchiesi@0 185 /**
danielebarchiesi@0 186 * List the selected comments and verify that the admin wants to delete them.
danielebarchiesi@0 187 *
danielebarchiesi@0 188 * @param $form_state
danielebarchiesi@0 189 * An associative array containing the current state of the form.
danielebarchiesi@0 190 * @return
danielebarchiesi@0 191 * TRUE if the comments should be deleted, FALSE otherwise.
danielebarchiesi@0 192 * @ingroup forms
danielebarchiesi@0 193 * @see comment_multiple_delete_confirm_submit()
danielebarchiesi@0 194 */
danielebarchiesi@0 195 function comment_multiple_delete_confirm($form, &$form_state) {
danielebarchiesi@0 196 $edit = $form_state['input'];
danielebarchiesi@0 197
danielebarchiesi@0 198 $form['comments'] = array(
danielebarchiesi@0 199 '#prefix' => '<ul>',
danielebarchiesi@0 200 '#suffix' => '</ul>',
danielebarchiesi@0 201 '#tree' => TRUE,
danielebarchiesi@0 202 );
danielebarchiesi@0 203 // array_filter() returns only elements with actual values.
danielebarchiesi@0 204 $comment_counter = 0;
danielebarchiesi@0 205 foreach (array_filter($edit['comments']) as $cid => $value) {
danielebarchiesi@0 206 $comment = comment_load($cid);
danielebarchiesi@0 207 if (is_object($comment) && is_numeric($comment->cid)) {
danielebarchiesi@0 208 $subject = db_query('SELECT subject FROM {comment} WHERE cid = :cid', array(':cid' => $cid))->fetchField();
danielebarchiesi@0 209 $form['comments'][$cid] = array('#type' => 'hidden', '#value' => $cid, '#prefix' => '<li>', '#suffix' => check_plain($subject) . '</li>');
danielebarchiesi@0 210 $comment_counter++;
danielebarchiesi@0 211 }
danielebarchiesi@0 212 }
danielebarchiesi@0 213 $form['operation'] = array('#type' => 'hidden', '#value' => 'delete');
danielebarchiesi@0 214
danielebarchiesi@0 215 if (!$comment_counter) {
danielebarchiesi@0 216 drupal_set_message(t('There do not appear to be any comments to delete, or your selected comment was deleted by another administrator.'));
danielebarchiesi@0 217 drupal_goto('admin/content/comment');
danielebarchiesi@0 218 }
danielebarchiesi@0 219 else {
danielebarchiesi@0 220 return confirm_form($form,
danielebarchiesi@0 221 t('Are you sure you want to delete these comments and all their children?'),
danielebarchiesi@0 222 'admin/content/comment', t('This action cannot be undone.'),
danielebarchiesi@0 223 t('Delete comments'), t('Cancel'));
danielebarchiesi@0 224 }
danielebarchiesi@0 225 }
danielebarchiesi@0 226
danielebarchiesi@0 227 /**
danielebarchiesi@0 228 * Process comment_multiple_delete_confirm form submissions.
danielebarchiesi@0 229 */
danielebarchiesi@0 230 function comment_multiple_delete_confirm_submit($form, &$form_state) {
danielebarchiesi@0 231 if ($form_state['values']['confirm']) {
danielebarchiesi@0 232 comment_delete_multiple(array_keys($form_state['values']['comments']));
danielebarchiesi@0 233 cache_clear_all();
danielebarchiesi@0 234 $count = count($form_state['values']['comments']);
danielebarchiesi@0 235 watchdog('content', 'Deleted @count comments.', array('@count' => $count));
danielebarchiesi@0 236 drupal_set_message(format_plural($count, 'Deleted 1 comment.', 'Deleted @count comments.'));
danielebarchiesi@0 237 }
danielebarchiesi@0 238 $form_state['redirect'] = 'admin/content/comment';
danielebarchiesi@0 239 }
danielebarchiesi@0 240
danielebarchiesi@0 241 /**
danielebarchiesi@0 242 * Page callback for comment deletions.
danielebarchiesi@0 243 */
danielebarchiesi@0 244 function comment_confirm_delete_page($cid) {
danielebarchiesi@0 245 if ($comment = comment_load($cid)) {
danielebarchiesi@0 246 return drupal_get_form('comment_confirm_delete', $comment);
danielebarchiesi@0 247 }
danielebarchiesi@0 248 return MENU_NOT_FOUND;
danielebarchiesi@0 249 }
danielebarchiesi@0 250
danielebarchiesi@0 251 /**
danielebarchiesi@0 252 * Form builder; Builds the confirmation form for deleting a single comment.
danielebarchiesi@0 253 *
danielebarchiesi@0 254 * @ingroup forms
danielebarchiesi@0 255 * @see comment_confirm_delete_submit()
danielebarchiesi@0 256 */
danielebarchiesi@0 257 function comment_confirm_delete($form, &$form_state, $comment) {
danielebarchiesi@0 258 $form['#comment'] = $comment;
danielebarchiesi@0 259 // Always provide entity id in the same form key as in the entity edit form.
danielebarchiesi@0 260 $form['cid'] = array('#type' => 'value', '#value' => $comment->cid);
danielebarchiesi@0 261 return confirm_form(
danielebarchiesi@0 262 $form,
danielebarchiesi@0 263 t('Are you sure you want to delete the comment %title?', array('%title' => $comment->subject)),
danielebarchiesi@0 264 'node/' . $comment->nid,
danielebarchiesi@0 265 t('Any replies to this comment will be lost. This action cannot be undone.'),
danielebarchiesi@0 266 t('Delete'),
danielebarchiesi@0 267 t('Cancel'),
danielebarchiesi@0 268 'comment_confirm_delete');
danielebarchiesi@0 269 }
danielebarchiesi@0 270
danielebarchiesi@0 271 /**
danielebarchiesi@0 272 * Process comment_confirm_delete form submissions.
danielebarchiesi@0 273 */
danielebarchiesi@0 274 function comment_confirm_delete_submit($form, &$form_state) {
danielebarchiesi@0 275 $comment = $form['#comment'];
danielebarchiesi@0 276 // Delete the comment and its replies.
danielebarchiesi@0 277 comment_delete($comment->cid);
danielebarchiesi@0 278 drupal_set_message(t('The comment and all its replies have been deleted.'));
danielebarchiesi@0 279 watchdog('content', 'Deleted comment @cid and its replies.', array('@cid' => $comment->cid));
danielebarchiesi@0 280 // Clear the cache so an anonymous user sees that his comment was deleted.
danielebarchiesi@0 281 cache_clear_all();
danielebarchiesi@0 282
danielebarchiesi@0 283 $form_state['redirect'] = "node/$comment->nid";
danielebarchiesi@0 284 }