/** * @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 string $source * @param null|UserTable $user * @return Tags|null */ public function tags( $source = 'stream', $user = null ) { $params = $this->params()->subTree( 'tags' ); if ( ! $params->get( 'display', 1 ) ) { return null; } /** @var Tags[] $cache */ static $cache = array(); if ( $this->get( 'item' ) && $params->get( 'source', 1 ) ) { $id = $this->get( 'type' ) . $this->get( 'subtype' ) . $this->get( 'item' ) . $this->get( 'parent' ); } else { $id = $this->get( 'id' ); } $id = md5( $id . $source . ( $user ? $user->get( 'id' ) : null ) . Application::MyUser()->getUserId() ); if ( ! isset( $cache[$id] ) ) { $stream = new Tags( $source, $user ); if ( $this->get( 'item' ) && $params->get( 'source', 1 ) ) { $stream->set( 'type', $this->get( 'type' ) ); $stream->set( 'subtype', $this->get( 'subtype' ) ); $stream->set( 'item', $this->get( 'item' ) ); $stream->set( 'parent', $this->get( 'parent' ) ); } else { $stream->set( 'type', 'activity' ); $stream->set( 'item', (int) $this->get( 'id' ) ); } $object = array( 'source' => 'activity', 'id' => (int) $this->get( 'id' ), 'user_id' => (int) $this->get( 'user_id' ), 'type' => $this->get( 'type' ), 'subtype' => $this->get( 'subtype' ), 'item' => $this->get( 'item' ), 'parent' => $this->get( 'parent' ) ); $stream->set( 'object', $object ); $cache[$id] = $stream; } return $cache[$id]; }
/** * Displays tags stream * * @param int $id * @param Tags $stream * @param int $output * @param bool $data * @param UserTable $user * @param UserTable $viewer */ private function showTags( $id, $stream, $output, $data, $user, $viewer ) { CBActivity::getTemplate( 'tags', false, false ); if ( $id ) { $stream->set( 'id', $id ); $rows = $stream->data(); } else { if ( $data ) { $count = $stream->data( true ); if ( ! $count ) { $rows = array(); } else { $rows = $stream->data(); } } else { $rows = array(); } } if ( $rows ) { CBActivity::preFetchUsers( $rows ); } echo HTML_cbactivityTags::showTags( $rows, $stream, $output, $user, $viewer, $this ); }