dialog_comment.module in Dialog 6
Same filename and directory in other branches
Provides Dialog integration for the core comment module. NOTE: In order for the edit, delete and reply links on comments to work, you must patch the Drupal 6 comment module with the patch from http://drupal.org/node/374463#comment-2393592.
File
modules/dialog_comment/dialog_comment.moduleView source
<?php
/**
* @file
* Provides Dialog integration for the core comment module.
* NOTE: In order for the edit, delete and reply links on comments to work,
* you must patch the Drupal 6 comment module with the patch from
* http://drupal.org/node/374463#comment-2393592.
*/
/**
* Implementation of hook_menu().
*/
function dialog_comment_menu() {
$items['comment/%ctools_js/delete/%'] = array(
'title' => 'Delete comment',
'page callback' => 'dialog_comment_delete',
'page arguments' => array(
3,
1,
),
'access arguments' => array(
'administer comments',
),
'type' => MENU_CALLBACK,
);
$items['comment/%ctools_js/edit/%'] = array(
'title' => 'Edit comment',
'page callback' => 'dialog_comment_edit',
'page arguments' => array(
3,
1,
),
'access arguments' => array(
'post comments',
),
'type' => MENU_CALLBACK,
);
$items['comment/%ctools_js/reply/%node'] = array(
'title' => 'Reply to comment',
'page callback' => 'dialog_comment_reply',
'page arguments' => array(
3,
1,
),
'access callback' => 'node_access',
'access arguments' => array(
'view',
3,
),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implementation of hook_link_alter().
*/
function dialog_comment_link_alter(&$links, $node) {
foreach ($links as $id => $link) {
switch ($id) {
case 'comment_add':
case 'comment_reply':
dialog_add_js();
$links[$id]['href'] = str_replace('comment/reply', 'comment/nojs/reply', $link['href']);
$links[$id]['attributes']['class'] = 'ctools-use-dialog';
break;
case 'comment_edit':
dialog_add_js();
$links[$id]['href'] = str_replace('comment/edit', 'comment/nojs/edit', $link['href']);
$links[$id]['attributes']['class'] = 'ctools-use-dialog';
break;
case 'comment_delete':
dialog_add_js();
$links[$id]['href'] = str_replace('comment/delete', 'comment/nojs/delete', $link['href']);
$links[$id]['attributes']['class'] = 'ctools-use-dialog';
break;
}
}
}
/**
* Implementation of hook_form_comment_form_alter().
*/
function dialog_comment_form_comment_form_alter(&$form, $form_state) {
// Mark submit and preview buttons to be used as Dialog buttons.
if (!empty($form_state['ajax'])) {
if (isset($form['submit'])) {
$form['submit']['#attributes']['class'] = 'ctools-dialog-button';
}
if (isset($form['preview'])) {
$form['preview']['#attributes']['class'] = 'ctools-dialog-button';
}
}
// comment_form will hard-code the #action to a comment/reply path.
// This will break our form, so replace with comment/%ctools_js/reply path.
if (isset($form['#action'])) {
$js = !empty($form_state['ajax']) ? 'ajax' : 'nojs';
$form['#action'] = str_replace('comment/reply', "comment/{$js}/reply", $form['#action']);
}
}
/**
* Menu page callback for comment/%ctools_js/reply/%node
*/
function dialog_comment_reply($node, $ajax = FALSE, $pid = NULL) {
if (!$ajax) {
module_load_include('inc', 'comment', 'comment.pages');
return comment_reply($node);
}
// TODO: comment_reply does a whole bunch of access checking and other
// stuff. Not sure how much we should do here, beyond the user_access below
if (!user_access('post comments')) {
// TODO: maybe we should have a dialog_access_denied().
$commands = array();
$commands[] = dialog_command_display(t('Access denied'), t('You are not authorized to access this page.'));
ctools_ajax_render($commands);
// implicit exit();
}
ctools_include('ajax');
$form_state = array(
'ajax' => TRUE,
'title' => t('Reply to %title', array(
'%title' => $node->title,
)),
'args' => array(
array(
'pid' => $pid,
'nid' => $node->nid,
),
),
);
$output = dialog_form_wrapper('comment_form', $form_state);
if (empty($output)) {
$output[] = dialog_command_display(t('Comment submitted'), t('Reloading...'));
$output[] = ctools_ajax_command_reload();
}
ctools_ajax_render($output);
}
/**
* Menu page callback for comment/%ctools_js/edit/%
*/
function dialog_comment_edit($cid, $ajax = FALSE) {
if (!$ajax) {
module_load_include('inc', 'comment', 'comment.pages');
return comment_edit($cid);
}
$comment = db_fetch_object(db_query('SELECT c.*, u.uid, u.name AS registered_name, u.data FROM {comments} c INNER JOIN {users} u ON c.uid = u.uid WHERE c.cid = %d', $cid));
$comment = drupal_unpack($comment);
$comment->name = $comment->uid ? $comment->registered_name : $comment->name;
ctools_include('ajax');
if (!comment_access('edit', $comment)) {
$commands = array();
$commands[] = dialog_command_display(t('Access denied'), t('You are not authorized to access this page.'));
ctools_ajax_render($commands);
// implicit exit();
}
$form_state = array(
'ajax' => TRUE,
'title' => t('Edit comment'),
'args' => array(
(array) $comment,
),
);
$output = dialog_form_wrapper('comment_form', $form_state);
if (empty($output)) {
$output[] = dialog_command_display(t('Comment submitted'), t('Reloading...'));
$output[] = ctools_ajax_command_reload();
}
ctools_ajax_render($output);
}
/**
* Menu page callback for comment/%ctools_js/delete/%
*/
function dialog_comment_delete($cid, $ajax = FALSE) {
module_load_include('inc', 'comment', 'comment.admin');
if (!$ajax) {
return comment_delete($cid);
}
$comment = db_fetch_object(db_query('SELECT c.*, u.name AS registered_name, u.uid FROM {comments} c INNER JOIN {users} u ON u.uid = c.uid WHERE c.cid = %d', $cid));
$comment->name = $comment->uid ? $comment->registered_name : $comment->name;
ctools_include('ajax');
$form_state = array(
'ajax' => TRUE,
'title' => t('Edit comment'),
'args' => array(
$comment,
),
);
$output = dialog_form_wrapper('comment_confirm_delete', $form_state);
if (empty($output)) {
$output[] = dialog_command_display(t('Comment deleted'), t('Reloading...'));
$output[] = ctools_ajax_command_reload();
}
ctools_ajax_render($output);
}
Functions
Name | Description |
---|---|
dialog_comment_delete | Menu page callback for comment/%ctools_js/delete/% |
dialog_comment_edit | Menu page callback for comment/%ctools_js/edit/% |
dialog_comment_form_comment_form_alter | Implementation of hook_form_comment_form_alter(). |
dialog_comment_link_alter | Implementation of hook_link_alter(). |
dialog_comment_menu | Implementation of hook_menu(). |
dialog_comment_reply | Menu page callback for comment/%ctools_js/reply/%node |