diff options
Diffstat (limited to 'sites/all/modules/ctools/plugins/content_types/node_context/node_comment_wrapper.inc')
-rw-r--r-- | sites/all/modules/ctools/plugins/content_types/node_context/node_comment_wrapper.inc | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/sites/all/modules/ctools/plugins/content_types/node_context/node_comment_wrapper.inc b/sites/all/modules/ctools/plugins/content_types/node_context/node_comment_wrapper.inc new file mode 100644 index 000000000..8e25429f2 --- /dev/null +++ b/sites/all/modules/ctools/plugins/content_types/node_context/node_comment_wrapper.inc @@ -0,0 +1,117 @@ +<?php + +if (module_exists('comment')) { + /** + * Plugins are described by creating a $plugin array which will be used + * by the system that includes this file. + */ + $plugin = array( + 'single' => TRUE, + 'title' => t('Comments and comment form.'), + 'icon' => 'icon_node.png', + 'description' => t('The comments and comment form for the referenced node.'), + 'required context' => new ctools_context_required(t('Node'), 'node'), + 'category' => t('Node'), + 'defaults' => array( + 'mode' => variable_get('comment_default_mode', COMMENT_MODE_THREADED), + 'comments_per_page' => variable_get('comment_default_per_page', '50'), + ), + ); +} + +/** + * Render the node comments. + */ +function ctools_node_comment_wrapper_content_type_render($subtype, $conf, $panel_args, $context) { + $node = isset($context->data) ? clone($context->data) : NULL; + $block = new stdClass(); + $block->module = 'comments'; + $block->delta = $node->nid; + + $renderable = array( + '#theme' => 'comment_wrapper__node_' . $node->type, + '#node' => $node, + 'comments' => array(), + 'comment_form' => array(), + ); + + // Add in the comments. + if (($node->comment_count && user_access('access comments')) || user_access('administer comments')) { + $mode = variable_get('comment_default_mode_' . $node->type, COMMENT_MODE_THREADED); + $comments_per_page = variable_get('comment_default_per_page_' . $node->type, 50); + if ($cids = comment_get_thread($node, $mode, $comments_per_page)) { + $comments = comment_load_multiple($cids); + comment_prepare_thread($comments); + $build = comment_view_multiple($comments, $node); + $build['pager']['#theme'] = 'pager'; + $renderable['comments'] = $build; + } + } + + // Stuff in the comment form. + if ($node->comment == COMMENT_NODE_OPEN) { + if (user_access('post comments')) { + $comment = new stdClass(); + $comment->nid = $node->nid; + $comment->pid = NULL; + $form_state = array( + 'ctools comment alter' => TRUE, + 'node' => $node, + 'build_info' => array( + 'args' => array( + $comment, + ), + ), + ); + $renderable['comment_form'] = drupal_build_form('comment_node_' . $node->type . '_form', $form_state); + } + else if (!empty($conf['anon_links'])) { + $renderable['comment_form'] = theme('comment_post_forbidden', array('node' => $node)); + } + } + + $block->content = drupal_render($renderable); + + return $block; +} + +/** + * Returns an edit form for the comment wrapper. + */ +function ctools_node_comment_wrapper_content_type_edit_form($form, &$form_state) { + $conf = $form_state['conf']; + $form['mode'] = array( + '#type' => 'select', + '#title' => t('Mode'), + '#default_value' => $conf['mode'], + '#options' => _comment_get_modes(), + '#weight' => 1, + ); + foreach (_comment_per_page() as $i) { + $options[$i] = t('!a comments per page', array('!a' => $i)); + } + $form['comments_per_page'] = array('#type' => 'select', + '#title' => t('Pager'), + '#default_value' => $conf['comments_per_page'], + '#options' => $options, + '#weight' => 3, + ); + return $form; +} + +/** + * Submit handler for the comment wrapper settings form. + */ +function ctools_node_comment_wrapper_content_type_edit_form_submit($form, &$form_state) { + // Copy everything from our defaults. + foreach (array_keys($form_state['plugin']['defaults']) as $key) { + $form_state['conf'][$key] = $form_state['values'][$key]; + } +} + +/** + * Returns the administrative title. + */ +function ctools_node_comment_wrapper_content_type_admin_title($subtype, $conf, $context) { + return t('Comments and comment form'); +} |