<!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][7088] trunk/bp-groups/bp-groups-admin.php: Add sortable column support for the Groups Administration Dashboard panel</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/7088">7088</a></dd>
<dt>Author</dt> <dd>boonebgorges</dd>
<dt>Date</dt> <dd>2013-05-19 00:26:47 +0000 (Sun, 19 May 2013)</dd>
</dl>

<h3>Log Message</h3>
<pre>Add sortable column support for the Groups Administration Dashboard panel

The columns have been marked sortable since they were originall introduced, but
the sorting did not work because of limitations in how bp_has_groups() worked.
As of <a href="http://buddypress.trac.wordpress.org/changeset/7087">r7087</a>, bp_has_groups() supports 'order' and 'orderby' params, which
allows us to fix this broken feature.

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

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

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkbpgroupsbpgroupsadminphp"></a>
<div class="modfile"><h4>Modified: trunk/bp-groups/bp-groups-admin.php (7087 => 7088)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/bp-groups/bp-groups-admin.php      2013-05-19 00:09:30 UTC (rev 7087)
+++ trunk/bp-groups/bp-groups-admin.php 2013-05-19 00:26:47 UTC (rev 7088)
</span><span class="lines">@@ -982,25 +982,28 @@
</span><span class="cx">          // Set per page from the screen options
</span><span class="cx">          $per_page = $this->get_items_per_page( str_replace( '-', '_', "{$screen->id}_per_page" ) );
</span><span class="cx"> 
</span><del>-               // Sort order. Note: not supported in bp_has_groups()
-               $order = 'ASC';
</del><ins>+                // Sort order.
+               $order = 'DESC';
</ins><span class="cx">           if ( !empty( $_REQUEST['order'] ) ) {
</span><span class="cx">                  $order = ( 'desc' == strtolower( $_REQUEST['order'] ) ) ? 'DESC' : 'ASC';
</span><span class="cx">          }
</span><span class="cx"> 
</span><span class="cx">          // Order by - default to newest
</span><del>-               $type = 'newest';
-               if ( !empty( $_REQUEST['orderby'] ) ) {
</del><ins>+                $orderby = 'last_activity';
+               if ( ! empty( $_REQUEST['orderby'] ) ) {
</ins><span class="cx">                   switch ( $_REQUEST['orderby'] ) {
</span><span class="cx">                          case 'name' :
</span><del>-                                       $type = 'alphabetical';
</del><ins>+                                        $orderby = 'name';
</ins><span class="cx">                                   break;
</span><span class="cx">                          case 'id' :
</span><del>-                                       $type = 'newest';
</del><ins>+                                        $orderby = 'date_created';
</ins><span class="cx">                                   break;
</span><span class="cx">                          case 'members' :
</span><del>-                                       $type = 'popular';
</del><ins>+                                        $orderby = 'total_member_count';
</ins><span class="cx">                                   break;
</span><ins>+                               case 'last_active' :
+                                       $orderby = 'last_activity';
+                                       break;
</ins><span class="cx">                   }
</span><span class="cx">          }
</span><span class="cx"> 
</span><span class="lines">@@ -1040,7 +1043,7 @@
</span><span class="cx">                          'include'  => $include,
</span><span class="cx">                          'per_page' => $per_page,
</span><span class="cx">                          'page'     => $page,
</span><del>-                               'type'     => $type,
</del><ins>+                                'orderby'  => $orderby,
</ins><span class="cx">                           'order'    => $order
</span><span class="cx">                  );
</span><span class="cx"> 
</span><span class="lines">@@ -1192,15 +1195,24 @@
</span><span class="cx">  /**
</span><span class="cx">   * Get the column names for sortable columns
</span><span class="cx">   *
</span><ins>+        * Note: It's not documented in WP, but the second item in the
+        * nested arrays below is $desc_first. Normally, we would set
+        * last_active to be desc_first (since you're generally interested in
+        * the *most* recently active group, not the *least*). But because
+        * the default sort for the Groups admin screen is DESC by last_active,
+        * we want the first click on the Last Active column header to switch
+        * the sort order - ie, to make it ASC. Thus last_active is set to
+        * $desc_first = false.
+        *
</ins><span class="cx">    * @return array
</span><span class="cx">   * @since BuddyPress (1.7)
</span><span class="cx">   */
</span><span class="cx">  function get_sortable_columns() {
</span><span class="cx">          return array(
</span><del>-                       'gid'         => array( 'gid',         false ),
-                       'comment'     => array( 'name',        false ),
-                       'members'     => array( 'members',     false ),
-                       'last_active' => array( 'last_active', false )
</del><ins>+                        'gid'         => array( 'gid', false ),
+                       'comment'     => array( 'name', false ),
+                       'members'     => array( 'members', false ),
+                       'last_active' => array( 'last_active', false ),
</ins><span class="cx">           );
</span><span class="cx">  }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>