/** * @param TagTable[] $rows * @param Tags $stream * @param int $output 0: Normal, 1: Raw, 2: Inline, 3: Load , 4: Save * @param UserTable $user * @param UserTable $viewer * @param cbPluginHandler $plugin * @return null|string */ static public function showTags( $rows, $stream, $output, $user, $viewer, $plugin ) { global $_PLUGINS; CBActivity::loadHeaders( $output ); $sourceClean = htmlspecialchars( $stream->source() ); $tags = array(); $return = null; $_PLUGINS->trigger( 'activity_onBeforeDisplayTags', array( &$return, &$rows, $stream, $output ) ); if ( $rows ) foreach ( $rows as $row ) { $rowId = $sourceClean . 'Tag' . (int) $row->get( 'id' ); if ( is_numeric( $row->get( 'user' ) ) ) { $name = CBuser::getInstance( (int) $row->get( 'user' ), false )->getField( 'formatname', null, 'html', 'none', 'list', 0, true ); } else { $name = htmlspecialchars( $row->get( 'user' ) ); } if ( ! $name ) { continue; } $tags[] = '<span id="' . $rowId . '" class="streamTag">' . $name . '</span>'; } if ( $tags ) { $return .= ( ! in_array( $output, array( 1, 4 ) ) ? '<span class="' . $sourceClean . 'Tags streamTags">' : null ); if ( count( $tags ) > 2 ) { $tagOne = array_shift( $tags ); $tagTwo = array_shift( $tags ); $moreTooltip = cbTooltip( null, '<div class="streamTagRow">' . implode( '</div><div class="streamTagRow">', $tags ) . '</div>', null, 'auto', null, null, null, 'data-hascbtooltip="true" data-cbtooltip-position-my="bottom center" data-cbtooltip-position-at="top center" data-cbtooltip-open-event="click" data-cbtooltip-close-event="click unfocus" data-cbtooltip-button-hide="true"' ); $more = '<a href="javascript: void(0);"' . $moreTooltip . '>' . CBTxt::T( 'TAGS_MORE', '%%COUNT%% more', array( '%%COUNT%%' => count( $tags ) ) ) . '</a>'; $return .= CBTxt::T( 'TAGS_MORE_THAN_TWO', '[tag_1], [tag_2], and [more]', array( '[tag_1]' => $tagOne, '[tag_2]' => $tagTwo, '[more]' => $more ) ); } elseif ( count( $tags ) > 1 ) { $return .= CBTxt::T( 'TAGS_TWO', '[tag_1] and [tag_2]', array( '[tag_1]' => $tags[0], '[tag_2]' => $tags[1] ) ); } else { $return .= $tags[0]; } $return .= ( ! in_array( $output, array( 1, 4 ) ) ? '</span>' : null ); } $return .= CBActivity::reloadHeaders( $output ); $_PLUGINS->trigger( 'activity_onAfterDisplayTags', array( &$return, $rows, $stream, $output ) ); return $return; }
/** * @param ActivityTable[] $rows * @param Activity $stream * @param int $output 0: Normal, 1: Raw, 2: Inline, 3: Load, 4: Save * @param UserTable $user * @param UserTable $viewer * @param cbPluginHandler $plugin * @return null|string */ static public function showActivity( $rows, $stream, $output, $user, $viewer, $plugin ) { global $_CB_framework, $_PLUGINS; $showActions = (int) $stream->get( 'actions', 1 ); $showLocations = (int) $stream->get( 'locations', 1 ); $showLinks = (int) $stream->get( 'links', 1 ); $showTags = (int) $stream->get( 'tags', 1 ); CBActivity::loadHeaders( $output ); $_CB_framework->outputCbJQuery( "$( '.activityStream' ).cbactivity();" ); $canCreate = CBActivity::canCreate( $user, $viewer, $stream ); $cbModerator = CBActivity::isModerator( (int) $viewer->get( 'id' ) ); $sourceClean = htmlspecialchars( $stream->source() ); $newForm = null; $moreButton = null; if ( ( $output != 4 ) && $stream->get( 'paging' ) && $stream->get( 'limit' ) && $rows ) { $moreButton = '<a href="' . $stream->endpoint( 'show', array( 'limitstart' => ( $stream->get( 'limitstart' ) + $stream->get( 'limit' ) ), 'limit' => $stream->get( 'limit' ) ) ) . '" class="activityButton activityButtonMore streamMore btn btn-primary btn-sm btn-block">' . CBTxt::T( 'More' ) . '</a>'; } $return = null; $_PLUGINS->trigger( 'activity_onBeforeDisplayActivity', array( &$return, &$rows, $stream, $output ) ); if ( ! in_array( $output, array( 1, 4 ) ) ) { $return .= '<div class="' . $sourceClean . 'Activity activityStream streamContainer ' . ( $stream->direction() ? 'streamContainerUp' : 'streamContainerDown' ) . '" data-cbactivity-direction="' . (int) $stream->direction() . '">'; if ( ( $stream->source() != 'hidden' ) && ( ! $stream->get( 'id' ) ) && ( ! $stream->get( 'filter' ) ) ) { $newForm = self::showNew( $stream, $output, $user, $viewer, $plugin ); } } $return .= ( $stream->direction() ? $moreButton : $newForm ) . ( ! in_array( $output, array( 1, 4 ) ) ? '<div class="' . $sourceClean . 'ActivityItems activityStreamItems streamItems">' : null ); if ( $rows ) foreach ( $rows as $row ) { $rowId = $stream->id() . '_' . (int) $row->get( 'id' ); $rowOwner = ( $viewer->get( 'id' ) == $row->get( 'user_id' ) ); $typeClass = ( $row->get( 'type' ) ? ucfirst( strtolower( preg_replace( '/[^-a-zA-Z0-9_]/', '', $row->get( 'type' ) ) ) ) : null ); $subTypeClass = ( $row->get( 'subtype' ) ? ucfirst( strtolower( preg_replace( '/[^-a-zA-Z0-9_]/', '', $row->get( 'subtype' ) ) ) ) : null ); $isStatus = ( ( $row->get( 'type' ) == 'status' ) || ( $row->get( 'subtype' ) == 'status' ) ); $cbUser = CBuser::getInstance( (int) $row->get( 'user_id' ), false ); $title = ( $row->get( 'title' ) ? ( $isStatus ? htmlspecialchars( $row->get( 'title' ) ) : CBTxt::T( $row->get( 'title' ) ) ) : null ); $message = ( $row->get( 'message' ) ? ( $isStatus ? htmlspecialchars( $row->get( 'message' ) ) : CBTxt::T( $row->get( 'message' ) ) ) : null ); $date = null; $insert = null; $footer = null; $menu = array(); $extras = array(); $_PLUGINS->trigger( 'activity_onDisplayActivity', array( &$row, &$title, &$date, &$message, &$insert, &$footer, &$menu, &$extras, $stream, $output ) ); $title = $stream->parser( $title )->parse( array( 'linebreaks' ) ); $message = $stream->parser( $message )->parse(); if ( $isStatus ) { if ( ( in_array( $row->get( 'type' ), array( 'status', 'field' ) ) ) && $row->get( 'parent' ) && ( $row->get( 'parent' ) != $_CB_framework->displayedUser() ) && ( $row->get( 'parent' ) != $row->get( 'user_id' ) ) ) { $targetUser = CBuser::getInstance( (int) $row->get( 'parent' ) ); if ( $targetUser !== null ) { $title = ' <span class="fa fa-caret-right"></span> <strong>' . $targetUser->getField( 'formatname', null, 'html', 'none', 'list', 0, true ) . '</strong>'; } } $action = ( $showActions ? $stream->parser( $row->action() )->parse( array( 'linebreaks' ) ) : null ); $location = ( $showLocations ? $row->location() : null ); $tags = null; if ( $showTags && $row->get( '_tags' ) ) { $tagsStream = $row->tags( $stream->source() ); if ( $tagsStream && $tagsStream->data( true ) ) { $tags = trim( CBTxt::T( 'ACTIVITY_STATUS_TAGS', 'with [tags]', array( '[tags]' => $tagsStream->stream( true ) ) ) ); } } if ( $action || $location || $tags ) { $subContent = ( $action ? $action : null ) . ( $location ? ( $action ? ' ' : null ) . $location : null ) . ( $tags ? ( $action || $location ? ' ' : null ) . $tags : null ); if ( $title ) { $message .= '<div class="streamItemSubContent">— ' . $subContent . '</div>'; } else { $title = $subContent; } } } elseif ( $row->get( 'type' ) == 'activity' ) { if ( ! $row->get( 'item' ) ) { continue; } $row->set( '_comments', false ); $row->set( '_tags', false ); $row->set( '_links', false ); $title = CBTxt::T( 'ACTIVITY_OF_ACTIVITY_TITLE', '[title] [date]', array( '[title]' => $title, '[date]' => cbFormatDate( $row->get( 'date' ), true, 'timeago' ) ) ); $message = null; $footer = null; $subActivity = new Activity( 'activity', $cbUser->getUserData() ); CBActivity::loadStreamDefaults( $subActivity, $stream ); $subActivity->set( 'id', $row->get( 'item' ) ); if ( $row->get( 'subtype' ) == 'comment' ) { $subActivity->set( 'comments', 1 ); } elseif ( $row->get( 'subtype' ) == 'tag' ) { $subActivity->set( 'tags', 1 ); } $insert = $subActivity->stream( true ); if ( ! $insert ) { continue; } } else { $title = ( $title ? $cbUser->replaceUserVars( $title, false, false, $extras, false ) : null ); $message = ( $message ? $cbUser->replaceUserVars( $message, false, false, $extras, false ) : null ); } $links = array(); if ( ( ( $isStatus && $showLinks ) || ( ! $isStatus ) ) && ( $row->get( '_links' ) !== false ) ) { $links = $row->attachments(); } if ( ( $stream->source() != 'hidden' ) && $stream->get( 'comments' ) && ( $row->get( '_comments' ) !== false ) ) { $comments = $row->comments( 'activity', $cbUser->getUserData() ); if ( $comments ) { CBActivity::loadStreamDefaults( $comments, $stream, 'comments_' ); $footer .= $comments->stream( true, ( $row->get( '_comments' ) ? true : false ) ); } } $return .= '<div id="' . $rowId . '" class="streamItem streamPanel activityContainer' . ( $typeClass ? ' activityContainer' . $typeClass : null ) . ( $subTypeClass ? ' activityContainer' . $typeClass . $subTypeClass : null ) . ' panel panel-default" data-cbactivity-id="' . (int) $row->get( 'id' ) . '">' . '<div class="streamItemInner">' . '<div class="streamMedia streamPanelHeading activityContainerHeader media panel-heading clearfix">' . '<div class="streamMediaLeft activityContainerLogo media-left">' . $cbUser->getField( 'avatar', null, 'html', 'none', 'list', 0, true ) . '</div>' . '<div class="streamMediaBody activityContainerTitle media-body">' . '<div class="activityContainerTitleTop text-muted">' . '<strong>' . $cbUser->getField( 'formatname', null, 'html', 'none', 'list', 0, true ) . '</strong>' . ( $title ? ' ' . $title : null ) . '</div>' . '<div class="activityContainerTitleBottom text-muted small">' . cbFormatDate( $row->get( 'date' ), true, 'timeago' ) . ( $row->params()->get( 'modified' ) ? ' <span class="streamIconEdited fa fa-edit" title="' . htmlspecialchars( CBTxt::T( 'Edited' ) ) . '"></span>' : null ) . ( $date ? ' ' . $date : null ) . '</div>' . '</div>' . '</div>'; if ( $message ) { $return .= '<div class="streamPanelBody streamItemDisplay activityContainerContent panel-body">' . '<div class="activityContainerContentInner cbMoreLess">' . '<div class="streamItemContent cbMoreLessContent">' . $message . '</div>' . '<div class="cbMoreLessOpen fade-edge hidden">' . '<a href="javascript: void(0);" class="cbMoreLessButton">' . CBTxt::T( 'See More' ) . '</a>' . '</div>' . '</div>' . '</div>'; } $return .= ( $insert ? '<div class="streamItemDisplay streamItemDivider activityContainerInsert border-default">' . $insert . '</div>' : null ); if ( $links ) { $return .= '<div class="streamPanelBody streamItemDisplay streamItemDivider activityContainerAttachments panel-body border-default">' . '<div class="activityContainerAttachmentsInner">' . self::showAttachments( $row, $stream, $output, $user, $viewer, $plugin ) . '</div>' . '</div>'; } $return .= ( $footer ? '<div class="streamPanelFooter streamItemDisplay activityContainerFooter panel-footer">' . $footer . '</div>' : null ); if ( $isStatus && ( $cbModerator || $rowOwner ) && $canCreate ) { $return .= self::showEdit( $row, $stream, $output, $user, $viewer, $plugin ); } if ( $cbModerator || $rowOwner || ( $viewer->get( 'id' ) && ( ! $rowOwner ) ) || $menu ) { $menuItems = '<ul class="streamItemMenuItems activityMenuItems dropdown-menu" style="display: block; position: relative; margin: 0;">'; if ( $isStatus && ( $cbModerator || $rowOwner ) && $canCreate ) { $menuItems .= '<li class="streamItemMenuItem activityMenuItem"><a href="javascript: void(0);" class="activityMenuItemEdit streamItemEditDisplay" data-cbactivity-container="#' . $rowId . '"><span class="fa fa-edit"></span> ' . CBTxt::T( 'Edit' ) . '</a></li>'; } if ( $viewer->get( 'id' ) && ( ! $rowOwner ) ) { if ( $stream->source() == 'hidden' ) { $menuItems .= '<li class="streamItemMenuItem activityMenuItem"><a href="' . $stream->endpoint( 'unhide', array( 'id' => (int) $row->get( 'id' ) ) ) . '" class="activityMenuItemUnhide streamItemAction" data-cbactivity-container="#' . $rowId . '"><span class="fa fa-check"></span> ' . CBTxt::T( 'Unhide' ) . '</a></li>'; } else { $menuItems .= '<li class="streamItemMenuItem activityMenuItem"><a href="' . $stream->endpoint( 'hide', array( 'id' => (int) $row->get( 'id' ) ) ) . '" class="activityMenuItemHide streamItemAction" data-cbactivity-container="#' . $rowId . '" data-cbactivity-confirm="' . htmlspecialchars( CBTxt::T( 'Are you sure you want to hide this Activity?' ) ) . '" data-cbactivity-confirm-button="' . htmlspecialchars( CBTxt::T( 'Hide Activity' ) ) . '"><span class="fa fa-times"></span> ' . CBTxt::T( 'Hide' ) . '</a></li>'; } } if ( $cbModerator || $rowOwner ) { $menuItems .= '<li class="streamItemMenuItem activityMenuItem"><a href="' . $stream->endpoint( 'delete', array( 'id' => (int) $row->get( 'id' ) ) ) . '" class="activityMenuItemDelete streamItemAction" data-cbactivity-container="#' . $rowId . '" data-cbactivity-confirm="' . htmlspecialchars( CBTxt::T( 'Are you sure you want to delete this Activity?' ) ) . '" data-cbactivity-confirm-button="' . htmlspecialchars( CBTxt::T( 'Delete Activity' ) ) . '"><span class="fa fa-trash-o"></span> ' . CBTxt::T( 'Delete' ) . '</a></li>'; } if ( $menu ) { $menuItems .= '<li class="streamItemMenuItem activityMenuItem">' . implode( '</li><li class="streamItemMenuItem activityMenuItem">', $menu ) . '</li>'; } $menuItems .= '</ul>'; $menuAttr = cbTooltip( 1, $menuItems, null, 'auto', null, null, null, 'class="fa fa-chevron-down text-muted" data-cbtooltip-menu="true" data-cbtooltip-classes="qtip-nostyle" data-cbtooltip-open-classes="open"' ); $return .= '<div class="streamItemMenu activityContainerMenu">' . '<span ' . trim( $menuAttr ) . '></span>' . '</div>'; } $return .= '</div>' . '</div>'; } elseif ( $output != 2 ) { $return .= '<div class="streamItemEmpty text-center text-muted small">'; if ( $output == 1 ) { $return .= CBTxt::T( 'No more activity to display.' ); } else { $return .= CBTxt::T( 'No activity to display.' ); } $return .= '</div>'; } elseif ( ( $output == 2 ) && ( ! $newForm ) ) { return null; } $return .= ( ! in_array( $output, array( 1, 4 ) ) ? '</div>' : null ) . ( ! $stream->direction() ? $moreButton : $newForm ) . ( ! in_array( $output, array( 1, 4 ) ) ? '</div>' : null ) . CBActivity::reloadHeaders( $output ); $_PLUGINS->trigger( 'activity_onAfterDisplayActivity', array( &$return, $rows, $stream, $output ) ); return $return; }
/** * @param CommentTable[] $rows * @param Comments $stream * @param int $output 0: Normal, 1: Raw, 2: Inline, 3: Load, 4: Save * @param UserTable $user * @param UserTable $viewer * @param cbPluginHandler $plugin * @return null|string */ static public function showComments( $rows, $stream, $output, $user, $viewer, $plugin ) { global $_CB_framework, $_PLUGINS; CBActivity::loadHeaders( $output ); $_CB_framework->outputCbJQuery( "$( '.commentsStream' ).cbactivity();" ); $canCreate = CBActivity::canCreate( $user, $viewer, $stream ); $cbModerator = CBActivity::isModerator( (int) $viewer->get( 'id' ) ); $sourceClean = htmlspecialchars( $stream->source() ); $newForm = null; $moreButton = null; if ( ( $output != 4 ) && $stream->get( 'paging' ) && $stream->get( 'limit' ) && $rows ) { $moreButton = '<a href="' . $stream->endpoint( 'show', array( 'limitstart' => ( $stream->get( 'limitstart' ) + $stream->get( 'limit' ) ), 'limit' => $stream->get( 'limit' ) ) ) . '" class="commentButton commentButtonMore streamMore">' . ( $stream->get( 'type' ) == 'comment' ? CBTxt::T( 'Show more replies' ) : CBTxt::T( 'Show more comments' ) ) . '</a>'; } $return = null; $_PLUGINS->trigger( 'activity_onBeforeDisplayComments', array( &$return, &$rows, $stream, $output ) ); if ( ! in_array( $output, array( 1, 4 ) ) ) { $return .= '<div class="' . $sourceClean . 'Comments commentsStream streamContainer ' . ( $stream->direction() ? 'streamContainerUp' : 'streamContainerDown' ) . '" data-cbactivity-stream="' . base64_encode( (string) $stream ) . '" data-cbactivity-direction="' . (int) $stream->direction() . '">'; if ( ( $stream->source() != 'hidden' ) && ( ! $stream->get( 'id' ) ) && ( ! $stream->get( 'filter' ) ) ) { $newForm = self::showNew( $stream, $output, $user, $viewer, $plugin ); } } $return .= ( $stream->direction() ? $moreButton : $newForm ) . ( ! in_array( $output, array( 1, 4 ) ) ? '<div class="' . $sourceClean . 'CommentsItems commentsStreamItems streamItems">' : null ); if ( $rows ) foreach ( $rows as $row ) { $rowId = $stream->id() . '_' . (int) $row->get( 'id' ); $rowOwner = ( $viewer->get( 'id' ) == $row->get( 'user_id' ) ); $typeClass = ( $row->get( 'type' ) ? ucfirst( strtolower( preg_replace( '/[^-a-zA-Z0-9_]/', '', $row->get( 'type' ) ) ) ) : null ); $subTypeClass = ( $row->get( 'subtype' ) ? ucfirst( strtolower( preg_replace( '/[^-a-zA-Z0-9_]/', '', $row->get( 'subtype' ) ) ) ) : null ); $cbUser = CBuser::getInstance( (int) $row->get( 'user_id' ), false ); $message = ( $row->get( 'message' ) ? htmlspecialchars( $row->get( 'message' ) ) : null ); $date = null; $insert = null; $footer = null; $menu = array(); $extras = array(); $_PLUGINS->trigger( 'activity_onDisplayComment', array( &$row, &$message, &$insert, &$date, &$footer, &$menu, &$extras, $stream, $output ) ); $message = $stream->parser( $message )->parse( array( 'linebreaks' ) ); if ( ( $stream->source() != 'hidden' ) && $stream->get( 'replies' ) && ( $row->get( '_comments' ) !== false ) ) { if ( $newForm ) { $date .= ( $date ? ' ' : null ) . '<span class="streamToggle streamToggleReplies" data-cbactivity-toggle-target=".commentContainerNew" data-cbactivity-toggle-close="false" data-cbactivity-toggle-filter="false" data-cbactivity-toggle-active-classes="hidden">- <a href="javascript: void(0);">' . CBTxt::T( 'Reply' ) . '</a></span>'; } $replies = $row->replies( $stream->source(), $stream->user() ); if ( $replies ) { CBActivity::loadStreamDefaults( $replies, $stream ); $replies->set( 'replies', 0 ); $footer .= $replies->stream( true, ( $row->get( '_comments' ) ? true : false ) ); } } $return .= '<div id="' . $rowId . '" class="streamItem streamItemInline commentContainer' . ( $typeClass ? ' commentContainer' . $typeClass : null ) . ( $subTypeClass ? ' commentContainer' . $typeClass . $subTypeClass : null ) . '" data-cbactivity-id="' . (int) $row->get( 'id' ) . '">' . '<div class="streamItemInner streamMedia media clearfix">' . '<div class="streamMediaLeft commentContainerLogo media-left">' . $cbUser->getField( 'avatar', null, 'html', 'none', 'list', 0, true ) . '</div>' . '<div class="streamMediaBody streamItemDisplay commentContainerContent media-body">' . '<div class="commentContainerContentInner cbMoreLess text-small" data-cbmoreless-height="50">' . '<div class="streamItemContent cbMoreLessContent">' . '<strong>' . $cbUser->getField( 'formatname', null, 'html', 'none', 'list', 0, true ) . '</strong>' . ( $message ? ' ' . $message : null ) . '</div>' . '<div class="cbMoreLessOpen fade-edge hidden">' . '<a href="javascript: void(0);" class="cbMoreLessButton">' . CBTxt::T( 'See More' ) . '</a>' . '</div>' . '</div>' . ( $insert ? '<div class="commentContainerContentInsert">' . $insert . '</div>' : null ) . '<div class="commentContainerContentDate text-muted text-small">' . cbFormatDate( $row->get( 'date' ), true, 'timeago' ) . ( $row->params()->get( 'modified' ) ? ' <span class="streamIconEdited fa fa-edit" title="' . htmlspecialchars( CBTxt::T( 'Edited' ) ) . '"></span>' : null ) . ( $date ? ' ' . $date : null ) . '</div>' . ( $footer ? '<div class="commentContainerContentFooter">' . $footer . '</div>' : null ) . '</div>'; if ( ( $cbModerator || $rowOwner ) && $canCreate ) { $return .= self::showEdit( $row, $stream, $output, $user, $viewer, $plugin ); } if ( $cbModerator || $rowOwner || ( $viewer->get( 'id' ) && ( ! $rowOwner ) ) || $menu ) { $menuItems = '<ul class="streamItemMenuItems commentMenuItems dropdown-menu" style="display: block; position: relative; margin: 0;">'; if ( ( $cbModerator || $rowOwner ) && $canCreate ) { $menuItems .= '<li class="streamItemMenuItem commentMenuItem"><a href="javascript: void(0);" class="commentMenuItemEdit streamItemEditDisplay" data-cbactivity-container="#' . $rowId . '"><span class="fa fa-edit"></span> ' . CBTxt::T( 'Edit' ) . '</a></li>'; } if ( $viewer->get( 'id' ) && ( ! $rowOwner ) ) { if ( $stream->source() == 'hidden' ) { $menuItems .= '<li class="streamItemMenuItem commentMenuItem"><a href="' . $stream->endpoint( 'unhide', array( 'id' => (int) $row->get( 'id' ) ) ) . '" class="commentMenuItemUnhide streamItemAction" data-cbactivity-container="#' . $rowId . '"><span class="fa fa-check"></span> ' . CBTxt::T( 'Unhide' ) . '</a></li>'; } else { $menuItems .= '<li class="streamItemMenuItem commentMenuItem"><a href="' . $stream->endpoint( 'hide', array( 'id' => (int) $row->get( 'id' ) ) ) . '" class="commentMenuItemHide streamItemAction" data-cbactivity-container="#' . $rowId . '" data-cbactivity-confirm="' . htmlspecialchars( CBTxt::T( 'Are you sure you want to hide this Comment?' ) ) . '" data-cbactivity-confirm-button="' . htmlspecialchars( CBTxt::T( 'Hide Comment' ) ) . '"><span class="fa fa-times"></span> ' . CBTxt::T( 'Hide' ) . '</a></li>'; } } if ( $cbModerator || $rowOwner ) { $menuItems .= '<li class="streamItemMenuItem commentMenuItem"><a href="' . $stream->endpoint( 'delete', array( 'id' => (int) $row->get( 'id' ) ) ) . '" class="commentMenuItemDelete streamItemAction" data-cbactivity-container="#' . $rowId . '" data-cbactivity-confirm="' . htmlspecialchars( CBTxt::T( 'Are you sure you want to delete this Comment?' ) ) . '" data-cbactivity-confirm-button="' . htmlspecialchars( CBTxt::T( 'Delete Comment' ) ) . '"><span class="fa fa-trash-o"></span> ' . CBTxt::T( 'Delete' ) . '</a></li>'; } if ( $menu ) { $menuItems .= '<li class="streamItemMenuItem commentMenuItem">' . implode( '</li><li class="streamItemMenuItem commentMenuItem">', $menu ) . '</li>'; } $menuItems .= '</ul>'; $menuAttr = cbTooltip( 1, $menuItems, null, 'auto', null, null, null, 'class="fa fa-chevron-down text-muted" data-cbtooltip-menu="true" data-cbtooltip-classes="qtip-nostyle" data-cbtooltip-open-classes="open"' ); $return .= '<div class="streamItemMenu commentContainerMenu small">' . '<span ' . trim( $menuAttr ) . '></span>' . '</div>'; } $return .= '</div>' . '</div>'; } elseif ( $output != 2 ) { $return .= '<div class="streamItemEmpty text-center text-muted small">'; if ( $output == 1 ) { $return .= CBTxt::T( 'No more comments to display.' ); } else { $return .= CBTxt::T( 'No comments to display.' ); } $return .= '</div>'; } elseif ( ( $output == 2 ) && ( ! $newForm ) ) { return null; } $return .= ( ! in_array( $output, array( 1, 4 ) ) ? '</div>' : null ) . ( ! $stream->direction() ? $moreButton : $newForm ) . ( ! in_array( $output, array( 1, 4 ) ) ? '</div>' : null ) . CBActivity::reloadHeaders( $output ); $_PLUGINS->trigger( 'activity_onAfterDisplayComments', array( &$return, $rows, $stream, $output ) ); return $return; }