<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[BuddyPress][8194] trunk/bp-activity/bp-activity-admin.php: Activity dashboard: Check if activity item can be replied to.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://buddypress.trac.wordpress.org/changeset/8194">8194</a></dd>
<dt>Author</dt> <dd>r-a-y</dd>
<dt>Date</dt> <dd>2014-03-28 23:35:24 +0000 (Fri, 28 Mar 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Activity dashboard: Check if activity item can be replied to.

If activity commenting is enabled for blog posts, in the activity
dashboard, we have to check whether or not the activity item can be
replied to.

This commit adds the class method - BP_Activity_List_Table::can_comment() -
to check the current activity item in the activity list table.

See <a href="http://buddypress.trac.wordpress.org/ticket/5130">#5130</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkbpactivitybpactivityadminphp">trunk/bp-activity/bp-activity-admin.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkbpactivitybpactivityadminphp"></a>
<div class="modfile"><h4>Modified: trunk/bp-activity/bp-activity-admin.php (8193 => 8194)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/bp-activity/bp-activity-admin.php  2014-03-28 23:19:00 UTC (rev 8193)
+++ trunk/bp-activity/bp-activity-admin.php     2014-03-28 23:35:24 UTC (rev 8194)
</span><span class="lines">@@ -1381,7 +1381,11 @@
</span><span class="cx"> 
</span><span class="cx">          // Reply - javascript only; implemented by AJAX.
</span><span class="cx">          if ( 'spam' != $item_status ) {
</span><del>-                       $actions['reply'] = sprintf( '<a href="#" class="reply hide-if-no-js">%s</a>', __( 'Reply', 'buddypress' ) );
</del><ins>+                        if ( $this->can_comment( $item ) ) {
+                               $actions['reply'] = sprintf( '<a href="#" class="reply hide-if-no-js">%s</a>', __( 'Reply', 'buddypress' ) );
+                       } else {
+                               $actions['reply'] = sprintf( '<span class="form-input-tip" title="%s">%s</span>', __( 'Replies are disabled for this activity item', 'buddypress' ), __( 'Replies disabled', 'buddypress' ) );
+                       }
</ins><span class="cx"> 
</span><span class="cx">                  // Edit
</span><span class="cx">                  $actions['edit'] = sprintf( '<a href="%s">%s</a>', $edit_url, __( 'Edit', 'buddypress' ) );
</span><span class="lines">@@ -1488,6 +1492,65 @@
</span><span class="cx">  }
</span><span class="cx"> 
</span><span class="cx">  /**
</span><ins>+        * Checks if an activity item can be replied to.
+        *
+        * This method merges functionality from {@link bp_activity_can_comment()} and
+        * {@link bp_blogs_disable_activity_commenting()}.  This is done because the activity
+        * list table doesn't use a BuddyPress activity loop, which prevents those
+        * functions from working as intended.
+        *
+        * @since BuddyPress (2.0.0)
+        *
+        * @param array $item An array version of the BP_Activity_Activity object.
+        * @return bool
+        */
+       protected function can_comment( $item  ) {
+               $can_comment = true;
+
+               if ( $this->disable_blogforum_comments ) {
+                       switch ( $item['type'] ) {
+                               case 'new_blog_post' :
+                               case 'new_blog_comment' :
+                               case 'new_forum_topic' :
+                               case 'new_forum_post' :
+                                       $can_comment = false;
+                                       break;
+                       }
+
+               // activity comments supported
+               } else {
+                       // activity comment
+                       if ( 'activity_comment' == $item['type'] ) {
+                               // blogs
+                               if ( bp_is_active( 'blogs' ) ) {
+                                       // grab the parent activity entry
+                                       $parent_activity = new BP_Activity_Activity( $item['item_id'] );
+
+                                       // fetch blog post comment depth and if the blog post's comments are open
+                                       bp_blogs_setup_activity_loop_globals( $parent_activity );
+
+                                       // check if the activity item can be replied to
+                                       if ( false === bp_blogs_can_comment_reply( true, $item ) ) {
+                                               $can_comment = false;
+                                       }
+                               }
+
+                       // blog post
+                       } elseif ( 'new_blog_post' == $item['type'] ) {
+                               if ( bp_is_active( 'blogs' ) ) {
+                                       bp_blogs_setup_activity_loop_globals( (object) $item );
+
+                                       if ( empty( buddypress()->blogs->allow_comments[$item['id']] ) ) {
+                                               $can_comment = false;
+                                       }
+                               }
+                       }
+               }
+
+               return apply_filters( 'bp_activity_list_table_can_comment', $can_comment );
+       }
+
+       /**
</ins><span class="cx">    * Flatten the activity array.
</span><span class="cx">   *
</span><span class="cx">   * In some cases, BuddyPress gives us a structured tree of activity
</span></span></pre>
</div>
</div>

</body>
</html>