<?php
/**
* This is the template that displays a single comment
*
* This file is not meant to be called directly.
*
* b2evolution - {@link http://b2evolution.net/}
* Released under GNU GPL License - {@link http://b2evolution.net/about/gnu-gpl-license}
* @copyright (c)2003-2020 by Francois Planque - {@link http://fplanque.com/}
*
* @package evoskins
*/
if( !defined('EVO_MAIN_INIT') ) die( 'Please, do not access this page directly.' );
global $cat;
// Default params:
$params = array_merge( array(
'comment_start' => '<article class="evo_comment panel panel-default">',
'comment_end' => '</article>',
'comment_post_display' => true, // Do we want ot display the title of the post we're referring to?
'comment_post_before' => '<br /><h4 class="evo_comment_post_title ellipsis">',
'comment_post_after' => '</h4>',
'comment_title_before' => '<div class="panel-heading posts_panel_title_wrapper"><div class="cell1 ellipsis"><h4 class="evo_comment_title panel-title">',
'comment_status_before' => '</h4></div>',
'comment_title_after' => '</div>',
'comment_body_before' => '<div class="panel-body">',
'comment_body_after' => '</div>',
'comment_avatar_before' => '<span class="evo_comment_avatar'.( $Skin->get_setting( 'voting_place' ) == 'under_content' ? ' col-md-1 col-sm-2' : '' ).'">',
'comment_avatar_after' => '</span>',
'comment_rating_before' => '<div class="evo_comment_rating">',
'comment_rating_after' => '</div>',
'comment_text_before' => '<div class="evo_comment_text'.( $Skin->get_setting( 'voting_place' ) == 'under_content' ? ' col-md-11 col-sm-10' : '' ).'">',
'comment_text_after' => '</div>',
'link_to' => 'userurl>userpage', // 'userpage' or 'userurl' or 'userurl>userpage' or 'userpage>userurl'
'author_link_text' => 'auto', // avatar_name | avatar_login | only_avatar | name | login | nickname | firstname | lastname | fullname | preferredname
'before_image' => '<figure class="evo_image_block raised">',
'before_image_legend' => '<figcaption class="evo_image_legend">',
'after_image_legend' => '</figcaption>',
'after_image' => '</figure>',
'image_size' => 'fit-1280x720',
'image_class' => 'img-responsive',
'Comment' => NULL, // This object MUST be passed as a param!
'display_vote_helpful' => true,
), $params );
// In this skin, it makes no sense to navigate in any different mode than "same category"
// Use the category from param
$current_cat = param( 'cat', 'integer', 0 );
if( $current_cat == 0 )
{ // Use main category by default because the category wasn't set
$current_cat = $Item->main_cat_ID;
}
// Increase a number, because Item has 1st number:
$comment_order_shift = ( $disp == 'single' || $disp == 'page' ) ? 1 : 0;
/**
* @var Comment
*/
$Comment = & $params['Comment'];
/**
* @var Item
*/
$commented_Item = & $Comment->get_Item();
// Load comment's Item object:
$Comment->get_Item();
$Comment->anchor();
echo update_html_tag_attribs( $params['comment_start'], array(
'class' =>
// Add style class for proper comment status:
'vs_'.$Comment->status.( $Comment->is_meta() ? ' evo_comment__meta' : '' ).' '.
// Add style for voting place mode:
'evo_voting_layout__'.$Skin->get_setting( 'voting_place' ),
'id' => 'comment_'.$Comment->ID // Add id to know what comment is used on AJAX status changing
), array( 'id' => 'skip' ) );
// Title
echo $params['comment_title_before'];
switch( $Comment->get( 'type' ) )
{
// ON *DISP = COMMENTS* SHOW THE FOLLOWING TITLE FOR EACH COMMENT
case $disp == 'comments': // Display a comment:
?><a href="<?php echo $Comment->get_permanent_url(); ?>" class="badge badge-primary"><?php echo $Comment->get_inlist_order() + $comment_order_shift; ?></a> <?php
if( empty($Comment->ID) )
{ // PREVIEW comment
echo '<span class="evo_comment_type_preview">'.T_('PREVIEW Comment from:').'</span> ';
}
else
{ // Normal comment
$Comment->permanent_link( array(
'before' => '',
'after' => '',
'text' => '',
'class' => 'evo_comment_type',
'nofollow' => true,
) );
}
$Comment->author2( array(
'before' => ' ',
'after' => '#',
'before_user' => '',
'after_user' => '#',
'format' => 'htmlbody',
'link_to' => $params['link_to'], // 'userpage' or 'userurl' or 'userurl>userpage' or 'userpage>userurl'
'link_text' => $params['author_link_text'],
) );
echo ' <span class="text-muted">';
$Comment->date( locale_extdatefmt().' '.locale_shorttimefmt() );
echo '</span>';
// Post title
if( $params['comment_post_display'] )
{
echo $params['comment_post_before'];
echo ' '.T_('in response to').': ';
$Comment->Item->title( array(
'link_type' => 'permalink',
) );
echo $params['comment_post_after'];
}
if( ! $Comment->get_author_User() )
{ // Display action icon to message only if this comment is from a visitor
$Comment->msgform_link( $Blog->get( 'msgformurl' ) );
}
break;
// ON *DISP = SINGLE* SHOW THE FOLLOWING TITLE FOR EACH COMMENT
case 'comment': // Display a comment:
case 'meta': // Display an internal comment:
if( $Comment->is_meta() )
{ // Internal comment:
$permalink_text = $Comment->get_inlist_order();
$permalink_class = 'badge badge-info';
}
else
{ // Normal comment:
$permalink_text = $Comment->get_inlist_order() + $comment_order_shift;
$permalink_class = 'badge badge-primary';
}
if( empty($Comment->ID) )
{ // PREVIEW comment
echo '<span class="evo_comment_type_preview">'.T_('PREVIEW Comment from:').'</span> ';
}
else
{ // Normal comment
$Comment->permanent_link( array(
'before' => '',
'after' => ' ',
'text' => $permalink_text,
'class' => $permalink_class,
'nofollow' => true,
) );
}
$Comment->author2( array(
'before' => ' ',
'after' => '#',
'before_user' => '',
'after_user' => '#',
'format' => 'htmlbody',
'link_to' => $params['link_to'], // 'userpage' or 'userurl' or 'userurl>userpage' or 'userpage>userurl'
'link_text' => $params['author_link_text'],
) );
echo ' <span class="text-muted">';
$Comment->date( locale_extdatefmt().' '.locale_shorttimefmt() );
echo '</span>';
if( ! $Comment->get_author_User() )
{ // Display action icon to message only if this comment is from a visitor
$Comment->msgform_link( $Blog->get( 'msgformurl' ) );
}
break;
case 'trackback': // Display a trackback:
$Comment->permanent_link( array(
'before' => '',
'after' => ' '.T_('from:').' ',
'text' => T_('Trackback'),
'class' => 'evo_comment_type',
'nofollow' => true,
) );
$Comment->author( '', '#', '', '#', 'htmlbody', true, $params['author_link_text'] );
break;
case 'pingback': // Display a pingback:
$Comment->permanent_link( array(
'before' => '',
'after' => ' '.T_('from:').' ',
'text' => T_('Pingback'),
'class' => 'evo_comment_type',
'nofollow' => true,
) );
$Comment->author( '', '#', '', '#', 'htmlbody', true, $params['author_link_text'] );
break;
case 'webmention': // Display a webmention:
$Comment->permanent_link( array(
'before' => '',
'after' => ' '.T_('from:').' ',
'text' => T_('Webmention'),
'class' => 'evo_comment_type',
'nofollow' => true,
) );
$Comment->author( '', '#', '', '#', 'htmlbody', true, $params['author_link_text'] );
break;
}
echo $params['comment_status_before'];
// Status banners
if( $Skin->enabled_status_banner( $Comment->status ) && $Comment->ID > 0 )
{ // Don't display status for previewed comments
echo '<div class="cell2">';
$Comment->format_statuses( array(
'template' => '<div class="evo_status evo_status__$status$ badge pull-right" data-toggle="tooltip" data-placement="top" title="$tooltip_title$">$status_title$</div>',
) );
echo '</div>';
$legend_statuses[] = $Comment->status;
}
echo $params['comment_title_after'];
echo $params['comment_body_before'];
// Avatar:
echo $params['comment_avatar_before'];
if( $Skin->get_setting( 'voting_place' ) == 'left_score' && ! $Comment->is_meta() )
{ // Display voting panel instead of author avatar:
$Skin->display_comment_voting_panel( $Comment, 'left_score' );
}
else
{ // Display author avatar:
$Comment->author2( array(
'link_text' => 'only_avatar',
'thumb_size' => 'crop-top-80x80',
'after_user' => '', // After registered user
'after' => '', // After anonymous user
) );
}
echo $params['comment_avatar_after'];
// Rating:
$Comment->rating( array(
'before' => $params['comment_rating_before'],
'after' => $params['comment_rating_after'],
) );
// Text:
echo $params['comment_text_before'];
$Comment->content( 'htmlbody', false, true, $params );
echo $params['comment_text_after'];
echo $params['comment_body_after'];
/* ======================== START OF COMMENT FOOTER ======================== */
?>
<div class="panel-footer small clearfix">
<a href="<?php
if( $disp == 'comments' )
{ // We are displaying a comment in the Latest comments page:
echo $Blog->get('lastcommentsurl');
}
else
{ // We are displaying a comment under a post/topic:
echo $Item->get_permanent_url();
}
?>#skin_wrapper" class="to_top"><?php echo T_('Back to top'); ?></a>
<?php
// Check if BBcode plugin is enabled for current blog
$bbcode_plugin_is_enabled = false;
if( class_exists( 'bbcode_plugin' ) )
{ // Plugin exists
global $Plugins;
$bbcode_Plugin = & $Plugins->get_by_classname( 'bbcode_plugin' );
if( $bbcode_Plugin->status == 'enabled' && $bbcode_Plugin->get_coll_setting( 'coll_apply_comment_rendering', $Blog ) != 'never' )
{ // Plugin is enabled and activated for comments
$bbcode_plugin_is_enabled = true;
}
}
if( $bbcode_plugin_is_enabled && $commented_Item && $commented_Item->can_comment( NULL ) )
{ // Display button to quote this comment
echo '<a href="'.$commented_Item->get_permanent_url().'?quote_comment='.$Comment->ID.'#form_p'.$commented_Item->ID.'" title="'.format_to_output( T_('Reply with quote'), 'htmlattr' ).'" class="'.button_class( 'text' ).' pull-left quote_button">'.get_icon( 'comments', 'imgtag', array( 'title' => T_('Reply with quote') ) ).' '.T_('Quote').'</a>';
}
$Comment->reply_link( ' ', ' ', '#', '#', 'pull-left' ); /* Link for replying to the Comment */
if( $params['display_vote_helpful'] )
{ // Display a voting panel for comment:
$Skin->display_comment_voting_panel( $Comment, 'under_content' );
}
// Display Spam Voting system
$Comment->vote_spam( '', '', '&', true, true );
echo '<span class="pull-left">';
$comment_redirect_url = $Comment->get_permanent_url();
$Comment->edit_link( ' ', '', '#', T_('Edit this reply'), button_class( 'text' ).' comment_edit_btn', '&', true, $comment_redirect_url ); /* Link for editing */
echo '</span>';
echo '<div class="action_btn_group">';
$Comment->edit_link( ' ', '', '#', T_('Edit this reply'), button_class( 'text' ).' comment_edit_btn', '&', true, $comment_redirect_url ); /* Link for editing */
echo '<span class="'.button_class( 'group' ).'">';
$delete_button_is_displayed = check_user_perm( 'comment!CURSTATUS', 'delete', false, $Comment );
$Comment->moderation_links( array(
'ajax_button' => true,
'class' => button_class( 'text' ),
'redirect_to' => $comment_redirect_url,
'detect_last' => !$delete_button_is_displayed,
) );
$Comment->delete_link( '', '', '#', T_('Delete this reply'), button_class( 'text' ), false, '&', true, false, '#', $commented_Item->get_permanent_url() ); /* Link to backoffice for deleting */
echo '</span>';
echo '</div>';
?>
</div>
<?php echo $params['comment_end'];
?>