<!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][13163] trunk/src/bp-core: Add a tab to the WP Admin Add Plugin screen to easily get BP Add-ons</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 { white-space: pre-line; 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" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="http://buddypress.trac.wordpress.org/changeset/13163">13163</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"http://buddypress.trac.wordpress.org/changeset/13163","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>imath</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2021-12-10 01:22:58 +0000 (Fri, 10 Dec 2021)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Add a tab to the WP Admin Add Plugin screen to easily get BP Add-ons

BuddyPress Add-ons are features as Plugins or Blocks maintained by the BuddyPress development team & hosted on the WordPress.org plugins directory. Thanks to this new tab, Admins will be able to find these Add-ons faster and will eventually contribute to beta features early to give the BuddyPress development team their feedbacks.

Props johnjamesjacoby

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

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcbpcoreadmincsscommonrtlcss">trunk/src/bp-core/admin/css/common-rtl.css</a></li>
<li><a href="#trunksrcbpcoreadmincsscommoncss">trunk/src/bp-core/admin/css/common.css</a></li>
<li><a href="#trunksrcbpcoreclassesclassbpadminphp">trunk/src/bp-core/classes/class-bp-admin.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcbpcoreadmincsscommonrtlcss"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/bp-core/admin/css/common-rtl.css</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/bp-core/admin/css/common-rtl.css        2021-12-10 00:40:38 UTC (rev 13162)
+++ trunk/src/bp-core/admin/css/common-rtl.css  2021-12-10 01:22:58 UTC (rev 13163)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -589,11 +589,21 @@
</span><span class="cx" style="display: block; padding: 0 10px">        line-height: 1.3;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-.buddypress-title-section h1 .bp-badge {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.buddypress-title-section h1 .bp-badge,
+.buddypress .welcome-panel-content h2 .bp-badge {
</ins><span class="cx" style="display: block; padding: 0 10px">         font-size: 32px;
</span><span class="cx" style="display: block; padding: 0 10px">        vertical-align: top;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.buddypress .welcome-panel-content h2 {
+       line-height: 32px;
+       margin-bottom: 1em;
+}
+
+.buddypress .welcome-panel-content p {
+       padding-bottom: 23px;
+}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> .buddypress-tabs-wrapper {
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /* IE 11 */
</span></span></pre></div>
<a id="trunksrcbpcoreadmincsscommoncss"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/bp-core/admin/css/common.css</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/bp-core/admin/css/common.css    2021-12-10 00:40:38 UTC (rev 13162)
+++ trunk/src/bp-core/admin/css/common.css      2021-12-10 01:22:58 UTC (rev 13163)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -589,11 +589,22 @@
</span><span class="cx" style="display: block; padding: 0 10px">        line-height: 1.3;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-.buddypress-title-section h1 .bp-badge {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.buddypress-title-section h1 .bp-badge,
+.buddypress .welcome-panel-content h2 .bp-badge {
</ins><span class="cx" style="display: block; padding: 0 10px">         font-size: 32px;
</span><span class="cx" style="display: block; padding: 0 10px">        vertical-align: top;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.buddypress .welcome-panel-content h2 {
+       line-height: 32px;
+       margin-bottom: 1em;
+}
+
+.buddypress .welcome-panel-content p {
+       padding-bottom: 23px;
+       font-size: 14px;
+}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> .buddypress-tabs-wrapper {
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /* IE 11 */
</span></span></pre></div>
<a id="trunksrcbpcoreclassesclassbpadminphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/bp-core/classes/class-bp-admin.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/bp-core/classes/class-bp-admin.php      2021-12-10 00:40:38 UTC (rev 13162)
+++ trunk/src/bp-core/classes/class-bp-admin.php        2021-12-10 01:22:58 UTC (rev 13163)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -203,6 +203,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                // BuddyPress Types administration.
</span><span class="cx" style="display: block; padding: 0 10px">                add_action( 'load-edit-tags.php', array( 'BP_Admin_Types', 'register_types_admin' ) );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                // Official BuddyPress supported Add-ons.
+               add_action( 'install_plugins_bp-add-ons', array( $this, 'display_addons_table' ) );
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 /* Filters ***********************************************************/
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                // Add link to settings page.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -215,6 +218,10 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                // Emails
</span><span class="cx" style="display: block; padding: 0 10px">                add_filter( 'bp_admin_menu_order', array( $this, 'emails_admin_menu_order' ), 20 );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+               // Official BuddyPress supported Add-ons.
+               add_filter( 'install_plugins_tabs', array( $this, 'addons_tab' ) );
+               add_filter( 'install_plugins_table_api_args_bp-add-ons', array( $this,'addons_args' ) );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1356,5 +1363,77 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+       /**
+        * Add a "BuddyPress Add-ons" tab to the Add Plugins Admin screen.
+        *
+        * @since 10.0.0
+        *
+        * @param array $tabs The list of "Add Plugins" Tabs (Featured, Recommended, etc..).
+        * @return array      The same list including the "BuddyPress Add-ons" tab.
+        */
+       public function addons_tab( $tabs = array() ) {
+               $keys  = array_keys( $tabs );
+               $index = array_search( 'favorites', $keys, true );
+
+               // Makes sure the "BuddyPress Add-ons" tab is right after the "Favorites" one.
+               $new_tabs = array_merge(
+                       array_slice( $tabs, 0, $index + 1, true ),
+                       array(
+                               'bp-add-ons' => __( 'BuddyPress Add-ons', 'buddypress' ),
+                       ),
+                       $tabs
+               );
+
+               return $new_tabs;
+       }
+
+       /**
+        * Customize the Plugins API query arguments.
+        *
+        * The most important argument is the $user one which is set to "buddypress".
+        * Using this key and value will fetch the plugins the w.org "buddypress" user favorited.
+        *
+        * @since 10.0.0
+        *
+        * @global int        $paged The current page of the Plugin results.
+        * @param false|array $args  `false` by default.
+        * @return array             The "BuddyPress add-ons" args.
+        */
+       public function addons_args( $args = false ) {
+               global $paged;
+
+               return array(
+                       'page'     => $paged,
+                       'per_page' => 10,
+                       'locale'   => get_user_locale(),
+                       'user'     => 'buddypress',
+               );
+       }
+
+       /**
+        * Displays the list of "BuddyPress Add-ons".
+        *
+        * @todo we should have a page on the BuddyPress codex to explain feature plugins like this one:
+        *       https://make.wordpress.org/core/features/
+        *
+        * @since 10.0.0
+        */
+       public function display_addons_table() {
+               ?>
+               <div id="welcome-panel" class="welcome-panel">
+                       <a class="welcome-panel-close" href="#" aria-label="Dismiss the welcome panel"><?php esc_html_e( 'Dismiss', 'buddypress' ); ?></a>
+                       <div class="welcome-panel-content">
+                               <h2><span class="bp-badge"></span> <?php esc_html_e( 'Hello BuddyPress Add-ons!', 'buddypress' ); ?></h2>
+                               <p class="about-description">
+                                       <?php esc_html_e( 'Add-ons are features as Plugins or Blocks maintained by the BuddyPress development team & hosted on the WordPress.org plugins directory.', 'buddypress' ); ?>
+                                       <?php esc_html_e( 'Thanks to this new tab inside your Dashboard screen to add plugins, you’ll be able to find them faster and eventually contribute to beta features early to give the BuddyPress development team your feedbacks.', 'buddypress' ); ?>
+                               </p>
+                       </div>
+               </div>
+               <?php
+               // Display the "buddypress" favorites ;)
+               display_plugins_table();
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> endif; // End class_exists check.
</span></span></pre>
</div>
</div>

</body>
</html>