Perforce Chronicle 2012.2/486814
API Documentation
|
Displays comments and a comment form. More...
Public Member Functions | |
comments ($path, array $options=null, $template= 'comments.phtml') | |
Render comments for the given path and show a comment form. |
Displays comments and a comment form.
Comments are organized by path; you must specified the path to the set of comments you want to display (e.g. 'content/123').
Comment_View_Helper_Comments::comments | ( | $ | path, |
array $ | options = null , |
||
$ | template = 'comments.phtml' |
||
) |
Render comments for the given path and show a comment form.
Options can influence whether or not comments are displayed and whether or not the comment form appears.
string | $path | the path to the set of comments to display |
array | $options | optional - options to control: allowComments - if new comments can be posted requireLoginPost - if login required to post comments requireApproval - if comments are to be pended first showComments - if existing comments are shown requireLoginView - if login required to view comments allowVoting - enable up/down voting of comments oneVotePerUser - limit users to one vote per comment (and no anonymous voting) |
string | $template | optional - name of template file to render to. |
{ // normalize options against default values. $options = Comment_Form_Content::getNormalizedOptions($options); // if we're not showing or allowing comments, nothing to do. if (!$options['allowComments'] && !$options['showComments']) { return; } // determine if we have an anonymous user // so that we can enforce require-login options. $anonymous = P4Cms_User::hasActive() ? P4Cms_User::fetchActive()->isAnonymous() : true; // determine if we should show comments. $showComments = $options['showComments']; if ($options['requireLoginView'] && $anonymous) { $showComments = false; } // determine if we should allow new comments. $allowComments = $options['allowComments']; if ($options['requireLoginPost'] && $anonymous) { $allowComments = false; } // determine if we should show/allow votes on comments. // if one vote per user, disallow anonymous voting. $showVotes = $options['allowVoting']; $allowVoting = $options['allowVoting']; $oneVotePerUser = $options['oneVotePerUser']; $votedCommentIds = array(); // if there is only one vote allowed per user, and we have // an authenticated user, build a list of all the comments // the user voted on -- if the user is anonymous, no voting. if ($oneVotePerUser && !$anonymous) { $votedComments = Comment_Model_Comment::fetchVotedComments( P4Cms_User::fetchActive()->getId(), $path ); $votedCommentIds = $votedComments->invoke('getId'); } else if ($oneVotePerUser) { $allowVoting = false; } // if we're showing comments, fetch them. $comments = null; if ($showComments) { $filter = new P4Cms_Record_Filter; $filter->add('status', Comment_Model_Comment::STATUS_APPROVED); $comments = Comment_Model_Comment::fetchAll( array( 'paths' => array($path . '/...'), 'filter' => $filter ) ); // comments with most votes first, post-time is the tie-breaker. $numeric = P4Cms_Model_Iterator::SORT_NUMERIC; $descending = P4Cms_Model_Iterator::SORT_DESCENDING; $ascending = P4Cms_Model_Iterator::SORT_ASCENDING; $comments->sortBy( array( 'votes' => array($numeric, $descending), 'postTime' => array($numeric, $ascending) ) ); } // render comments via template in private scope // to avoid polluting the primary view object. $view = $this->view; $view->addScriptPath(dirname(__DIR__) . '/scripts'); return $view->partial( $template, array( 'path' => $path, 'comments' => $comments, 'showComments' => $showComments, 'allowComments' => $allowComments, 'showVotes' => $showVotes, 'allowVoting' => $allowVoting, 'oneVotePerUser' => $oneVotePerUser, 'votedCommentIds' => $votedCommentIds ) ); }