<!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][7942] trunk: Introduce blog- and group-create button functions, and use to build directory headers in bp-legacy</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/7942">7942</a></dd>
<dt>Author</dt> <dd>boonebgorges</dd>
<dt>Date</dt> <dd>2014-02-20 21:02:33 +0000 (Thu, 20 Feb 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Introduce blog- and group-create button functions, and use to build directory headers in bp-legacy

The new functions bp_get_blog_create_button() and bp_get_group_create_button()
standardize the treatment of these buttons by using bp_get_button(). They also
make life easier for themers, who will not need to build the buttons from
scratch.

In this changeset we modify the way that bp-legacy loads these buttons into the
titles of the directory pages. Previously, it was done directly in BP's theme
compat layer, with the result that all template packs had to follow the
questionable practice of embedding a button inside of a header element. Now,
the directory title is a string, but is filtered; bp-legacy then chooses to
add a button by using the new create-button functions + the new filters.

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

Props hnla, r-a-y</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkbpblogsbpblogsscreensphp">trunk/bp-blogs/bp-blogs-screens.php</a></li>
<li><a href="#trunkbpblogsbpblogstemplatephp">trunk/bp-blogs/bp-blogs-template.php</a></li>
<li><a href="#trunkbpgroupsbpgroupsscreensphp">trunk/bp-groups/bp-groups-screens.php</a></li>
<li><a href="#trunkbpgroupsbpgroupstemplatephp">trunk/bp-groups/bp-groups-template.php</a></li>
<li><a href="#trunkbptemplatesbplegacybuddypressfunctionsphp">trunk/bp-templates/bp-legacy/buddypress-functions.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkbpblogsbpblogsscreensphp"></a>
<div class="modfile"><h4>Modified: trunk/bp-blogs/bp-blogs-screens.php (7941 => 7942)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/bp-blogs/bp-blogs-screens.php      2014-02-20 20:32:44 UTC (rev 7941)
+++ trunk/bp-blogs/bp-blogs-screens.php 2014-02-20 21:02:33 UTC (rev 7942)
</span><span class="lines">@@ -141,12 +141,7 @@
</span><span class="cx">   */
</span><span class="cx">  public function directory_dummy_post() {
</span><span class="cx"> 
</span><del>-               // Title based on ability to create blogs
-               if ( is_user_logged_in() && bp_blog_signup_enabled() ) {
-                       $title = __( 'Sites', 'buddypress' ) . '&nbsp;<a class="button" href="' . trailingslashit( bp_get_root_domain() . '/' . bp_get_blogs_root_slug() . '/create' ) . '">' . __( 'Create a Sites', 'buddypress' ) . '</a>';
-               } else {
-                       $title = __( 'Sites', 'buddypress' );
-               }
</del><ins>+                $title = apply_filters( 'bp_blogs_directory_title', __( 'Sites', 'buddypress' ) );
</ins><span class="cx"> 
</span><span class="cx">          bp_theme_compat_reset_post( array(
</span><span class="cx">                  'ID'             => 0,
</span></span></pre></div>
<a id="trunkbpblogsbpblogstemplatephp"></a>
<div class="modfile"><h4>Modified: trunk/bp-blogs/bp-blogs-template.php (7941 => 7942)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/bp-blogs/bp-blogs-template.php     2014-02-20 20:32:44 UTC (rev 7941)
+++ trunk/bp-blogs/bp-blogs-template.php        2014-02-20 21:02:33 UTC (rev 7942)
</span><span class="lines">@@ -1149,6 +1149,43 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> /**
</span><ins>+ * Output the Create a Site button.
+ *
+ * @since BuddyPress (2.0.0)
+ */
+function bp_blog_create_button() {
+       echo bp_get_blog_create_button();
+}
+       /**
+        * Get the Create a Site button.
+        *
+        * @since BuddyPress (2.0.0)
+        *
+        * @return string
+        */
+       function bp_get_blog_create_button() {
+               if ( ! is_user_logged_in() ) {
+                       return false;
+               }
+
+               if ( ! bp_blog_signup_enabled() ) {
+                       return false;
+               }
+
+               $button_args = array(
+                       'id'         => 'create_blog',
+                       'component'  => 'blogs',
+                       'link_text'  => __( 'Create a Site', 'buddypress' ),
+                       'link_title' => __( 'Create a Site', 'buddypress' ),
+                       'link_class' => 'button blog-create bp-title-button',
+                       'link_href'  => trailingslashit( bp_get_root_domain() ) . trailingslashit( bp_get_blogs_root_slug() ) . trailingslashit( 'create' ),
+                       'wrapper'    => false,
+               );
+
+               return bp_get_button( $button_args );
+       }
+
+/**
</ins><span class="cx">  * Output button for visiting a blog in a loop.
</span><span class="cx">  *
</span><span class="cx">  * @see bp_get_blogs_visit_blog_button() for description of arguments.
</span></span></pre></div>
<a id="trunkbpgroupsbpgroupsscreensphp"></a>
<div class="modfile"><h4>Modified: trunk/bp-groups/bp-groups-screens.php (7941 => 7942)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/bp-groups/bp-groups-screens.php    2014-02-20 20:32:44 UTC (rev 7941)
+++ trunk/bp-groups/bp-groups-screens.php       2014-02-20 21:02:33 UTC (rev 7942)
</span><span class="lines">@@ -1021,12 +1021,7 @@
</span><span class="cx">   */
</span><span class="cx">  public function directory_dummy_post() {
</span><span class="cx"> 
</span><del>-               // Title based on ability to create groups
-               if ( is_user_logged_in() && bp_user_can_create_groups() ) {
-                       $title = __( 'Groups', 'buddypress' ) . '&nbsp;<a class="button bp-title-button" href="' . trailingslashit( bp_get_root_domain() . '/' . bp_get_groups_root_slug() . '/create' ) . '">' . __( 'Create a Group', 'buddypress' ) . '</a>';
-               } else {
-                       $title = __( 'Groups', 'buddypress' );
-               }
</del><ins>+                $title = apply_filters( 'bp_groups_directory_title', __( 'Groups', 'buddypress' ) );
</ins><span class="cx"> 
</span><span class="cx">          bp_theme_compat_reset_post( array(
</span><span class="cx">                  'ID'             => 0,
</span></span></pre></div>
<a id="trunkbpgroupsbpgroupstemplatephp"></a>
<div class="modfile"><h4>Modified: trunk/bp-groups/bp-groups-template.php (7941 => 7942)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/bp-groups/bp-groups-template.php   2014-02-20 20:32:44 UTC (rev 7941)
+++ trunk/bp-groups/bp-groups-template.php      2014-02-20 21:02:33 UTC (rev 7942)
</span><span class="lines">@@ -1854,6 +1854,43 @@
</span><span class="cx">  }
</span><span class="cx"> 
</span><span class="cx"> /**
</span><ins>+ * Output the Create a Group button.
+ *
+ * @since BuddyPress (2.0.0)
+ */
+function bp_group_create_button() {
+       echo bp_get_group_create_button();
+}
+       /**
+        * Get the Create a Group button.
+        *
+        * @since BuddyPress (2.0.0)
+        *
+        * @return string
+        */
+       function bp_get_group_create_button() {
+               if ( ! is_user_logged_in() ) {
+                       return false;
+               }
+
+               if ( ! bp_user_can_create_groups() ) {
+                       return false;
+               }
+
+               $button_args = array(
+                       'id'         => 'create_group',
+                       'component'  => 'groups',
+                       'link_text'  => __( 'Create a Group', 'buddypress' ),
+                       'link_title' => __( 'Create a Group', 'buddypress' ),
+                       'link_class' => 'button group-create bp-title-button',
+                       'link_href'  => trailingslashit( bp_get_root_domain() ) . trailingslashit( bp_get_groups_root_slug() ) . trailingslashit( 'create' ),
+                       'wrapper'    => false,
+               );
+
+               return bp_get_button( $button_args );
+       }
+
+/**
</ins><span class="cx">  * Prints a message if the group is not visible to the current user (it is a
</span><span class="cx">  * hidden or private group, and the user does not have access).
</span><span class="cx">  *
</span></span></pre></div>
<a id="trunkbptemplatesbplegacybuddypressfunctionsphp"></a>
<div class="modfile"><h4>Modified: trunk/bp-templates/bp-legacy/buddypress-functions.php (7941 => 7942)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/bp-templates/bp-legacy/buddypress-functions.php    2014-02-20 20:32:44 UTC (rev 7941)
+++ trunk/bp-templates/bp-legacy/buddypress-functions.php       2014-02-20 21:02:33 UTC (rev 7942)
</span><span class="lines">@@ -111,6 +111,8 @@
</span><span class="cx">                          add_action( 'bp_group_header_actions',     'bp_group_join_button',           5 );
</span><span class="cx">                          add_action( 'bp_group_header_actions',     'bp_group_new_topic_button',      20 );
</span><span class="cx">                          add_action( 'bp_directory_groups_actions', 'bp_group_join_button' );
</span><ins>+                               add_filter( 'bp_groups_directory_title',   'bp_legacy_theme_group_create_button' );
+                               add_filter( 'bp_blogs_directory_title',    'bp_legacy_theme_blog_create_button' );
</ins><span class="cx">                   }
</span><span class="cx"> 
</span><span class="cx">                  // Blog button
</span><span class="lines">@@ -420,6 +422,35 @@
</span><span class="cx"> endif;
</span><span class="cx"> 
</span><span class="cx"> /**
</span><ins>+ * Add the Create a Group button to the Groups directory title.
+ *
+ * bp-legacy puts the Create a Group button into the page title, to mimic
+ * the behavior of bp-default.
+ *
+ * @since BuddyPress (2.0.0)
+ *
+ * @param string $title Groups directory title.
+ * @return string
+ */
+function bp_legacy_theme_group_create_button( $title ) {
+       return $title . ' ' . bp_get_group_create_button();
+}
+
+/**
+ * Add the Create a Site button to the Sites directory title.
+ *
+ * bp-legacy puts the Create a Site button into the page title, to mimic
+ * the behavior of bp-default.
+ *
+ * @since BuddyPress (2.0.0)
+ *
+ * @param string $title Sites directory title.
+ * @return string
+ */
+function bp_legacy_theme_blog_create_button( $title ) {
+       return $title . ' ' . bp_get_blog_create_button();
+}
+/**
</ins><span class="cx">  * This function looks scarier than it actually is. :)
</span><span class="cx">  * Each object loop (activity/members/groups/blogs/forums) contains default
</span><span class="cx">  * parameters to show specific information based on the page we are currently
</span></span></pre>
</div>
</div>

</body>
</html>