<!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][13304] trunk: Start using a new strategy about deprecated functions management</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/13304">13304</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/13304","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>2022-07-26 13:31:07 +0000 (Tue, 26 Jul 2022)</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'>Start using a new strategy about deprecated functions management

The main goal of this commit is to change the way we load the files containing deprecated functions. This files are located into the `src/bp-core/deprecated/` directory and there's one file for each version of BuddyPress we created to store the deprecate functions.

We noticed that these files were not necessarily loaded although they should have. This case happens to all users who firstly installed BuddyPress when its version was upper than 2.7.

>From now on, here's how deprecated code will eventually load into your BuddyPress installation:
- First installs won't load deprecated code.
- Updated installs will load the **2 latest BuddyPress versions deprecated code**.
- Defining the `BP_IGNORE_DEPRECATED` constant to `true` will change the 2 above points behavior ignoring any BuddyPress versions deprecated code.
- Defining the `BP_IGNORE_DEPRECATED` constant to `false` will change the 2 first points behavior loading **all** BuddyPress versions deprecated code.

Props djpaul, dcavins.

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

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcbpcorebpcorefunctionsphp">trunk/src/bp-core/bp-core-functions.php</a></li>
<li><a href="#trunksrcbpcorebpcoreupdatephp">trunk/src/bp-core/bp-core-update.php</a></li>
<li><a href="#trunksrcclassbuddypressphp">trunk/src/class-buddypress.php</a></li>
<li><a href="#trunktestsphpunittestcasescorefunctionsphp">trunk/tests/phpunit/testcases/core/functions.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcbpcorebpcorefunctionsphp"></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/bp-core-functions.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/bp-core/bp-core-functions.php   2022-07-22 12:54:40 UTC (rev 13303)
+++ trunk/src/bp-core/bp-core-functions.php     2022-07-26 13:31:07 UTC (rev 13304)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -71,6 +71,62 @@
</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">+ * Output a BuddyPress major version.
+ *
+ * @since 11.0.0
+ *
+ * @param string $version BuddyPress version.
+ */
+function bp_major_version( $version = '' ) {
+       echo bp_get_major_version( $version );
+}
+
+       /**
+        * Return a BuddyPress major version.
+        *
+        * @since 11.0.0
+        *
+        * @param string $version BuddyPress version.
+        * @return string The corresponding BuddyPress major version.
+        */
+       function bp_get_major_version( $version = '' ) {
+               if ( ! $version ) {
+                       $version = bp_get_version();
+               }
+
+               $last_wp_like_major_versions = '2.9';
+               $float_version               = (float) $version;
+
+               if ( 1 !== version_compare( $version, $last_wp_like_major_versions ) ) {
+                       $major_version = (string) $float_version;
+               } else {
+                       $major_version = (int) $float_version . '.0';
+               }
+
+               return $major_version;
+       }
+
+/**
+ * Output the BuddyPress version used for its first install.
+ *
+ * @since 11.0.0
+ */
+function bp_initial_version() {
+       echo bp_get_initial_version();
+}
+
+       /**
+        * Return the BuddyPress version used for its first install.
+        *
+        * @since 11.0.0
+        *
+        * @return string The BuddyPress version used for its first install.
+        */
+       function bp_get_initial_version() {
+               return bp_get_option( '_bp_initial_major_version', '0' );
+       }
+
+/**
</ins><span class="cx" style="display: block; padding: 0 10px">  * Check whether the current version of WP exceeds a given version.
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * @since 7.0.0
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4674,3 +4730,122 @@
</span><span class="cx" style="display: block; padding: 0 10px">        $optout_class = new BP_Optout();
</span><span class="cx" style="display: block; padding: 0 10px">        return $optout_class::delete_by_id( $id );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+/**
+ * Get the list of versions needing their deprecated functions to be loaded.
+ *
+ * @since 11.0.0
+ *
+ * @return array The list of versions needing their deprecated functions to be loaded.
+ */
+function bp_get_deprecated_functions_versions() {
+       $ignore_deprecated = null;
+       if ( defined( 'BP_IGNORE_DEPRECATED' ) ) {
+               $ignore_deprecated = (bool) BP_IGNORE_DEPRECATED;
+       }
+
+       /*
+        * Respect the site owner's choice to ignore deprecated functions.
+        * Return an empty array to inform no deprecated version files should be loaded.
+        */
+       if ( true === $ignore_deprecated ) {
+               return array();
+       }
+
+       // List of versions containing deprecated functions.
+       $deprecated_functions_versions = array(
+               '1.2',
+               '1.5',
+               '1.6',
+               '1.7',
+               '1.9',
+               '2.0',
+               '2.1',
+               '2.2',
+               '2.3',
+               '2.4',
+               '2.5',
+               '2.6',
+               '2.7',
+               '2.8',
+               '2.9',
+               '3.0',
+               '4.0',
+               '6.0',
+               '7.0',
+               '8.0',
+               '9.0',
+               '10.0',
+               '11.0',
+       );
+
+       /*
+        * Respect the site owner's choice to load all deprecated functions.
+        * Return an empty array to inform no deprecated version files should be loaded.
+        */
+       if ( false === $ignore_deprecated ) {
+               return $deprecated_functions_versions;
+       }
+
+       /*
+        * Unless the `BP_IGNORE_DEPRECATED` constant is used & set to false, the development
+        * version of BuddyPress do not load deprecated functions.
+        */
+       if ( defined( 'BP_SOURCE_SUBDIRECTORY' ) && BP_SOURCE_SUBDIRECTORY === 'src' ) {
+               return array();
+       }
+
+       /*
+        * If the constant is not defined, put our logic in place so that only the
+        * 2 last versions deprecated functions will be loaded for upgraded installs.
+        */
+       $initial_version        = (float) bp_get_initial_version();
+       $current_version        = (float) bp_get_version();
+       $load_latest_deprecated = $initial_version < $current_version;
+
+       // We don't load deprecated functions for new installs.
+       if ( ! $load_latest_deprecated ) {
+               // Run some additional checks if PHPUnit is running.
+               if ( defined( 'BP_TESTS_DIR' ) ) {
+                       $deprecated_files = array_filter(
+                               array_map(
+                                       function( $file ) {
+                                               if ( false !== strpos( $file, '.php' ) ) {
+                                                       return str_replace( '.php', '', $file );
+                                               };
+                                       },
+                                       scandir( buddypress()->plugin_dir . 'bp-core/deprecated' )
+                               )
+                       );
+
+                       if ( array_diff( $deprecated_files, $deprecated_functions_versions ) ) {
+                               return false;
+                       }
+               }
+               return array();
+       }
+
+       // Try to get the first major version that was in used when BuddyPress was fist installed.
+       $first_major = '';
+       if ( $initial_version ) {
+               $first_major = bp_get_major_version( $initial_version );
+       }
+
+       $index_first_major = array_search( $first_major, $deprecated_functions_versions, true );
+       if ( false === $index_first_major ) {
+               return array_splice( $deprecated_functions_versions, -2 );
+       }
+
+       $latest_deprecated_functions_versions = array_splice( $deprecated_functions_versions, $index_first_major );
+
+       if ( 2 <= count( $latest_deprecated_functions_versions ) ) {
+               $latest_deprecated_functions_versions = array_splice( $latest_deprecated_functions_versions, -2 );
+       }
+
+       $index_initial_version = array_search( $first_major, $latest_deprecated_functions_versions, true );
+       if ( false !== $index_initial_version ) {
+               unset( $latest_deprecated_functions_versions[ $index_initial_version ] );
+       }
+
+       return $latest_deprecated_functions_versions;
+}
</ins></span></pre></div>
<a id="trunksrcbpcorebpcoreupdatephp"></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/bp-core-update.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/bp-core/bp-core-update.php      2022-07-22 12:54:40 UTC (rev 13303)
+++ trunk/src/bp-core/bp-core-update.php        2022-07-26 13:31:07 UTC (rev 13304)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -205,6 +205,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        // Install BP schema and activate only Activity and XProfile.
</span><span class="cx" style="display: block; padding: 0 10px">        if ( bp_is_install() ) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                // Set the first BP major version the plugin was installed.
+               bp_update_option( '_bp_initial_major_version', bp_get_major_version() );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                // Apply schema and set Activity and XProfile components as active.
</span><span class="cx" style="display: block; padding: 0 10px">                bp_core_install( $default_components );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -761,6 +763,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">  * @since 11.0.0
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> function bp_update_to_11_0() {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        bp_delete_option( '_bp_ignore_deprecated_code' );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        add_filter( 'bp_email_get_schema', 'bp_core_get_11_0_upgrade_email_schema' );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span></span></pre></div>
<a id="trunksrcclassbuddypressphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/class-buddypress.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/class-buddypress.php    2022-07-22 12:54:40 UTC (rev 13303)
+++ trunk/src/class-buddypress.php      2022-07-26 13:31:07 UTC (rev 13304)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -463,6 +463,15 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 * @param string $value Email type taxonomy slug.
</span><span class="cx" style="display: block; padding: 0 10px">                 */
</span><span class="cx" style="display: block; padding: 0 10px">                $this->email_taxonomy_type = apply_filters( 'bp_email_tax_type', 'bp-email-type' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+               /**
+                * Are PHPUnit tests running?
+                *
+                * @since 11.0.0
+                *
+                * @param bool $value True if PHPUnit tests are running, false otherwise.
+                */
+               $this->is_phpunit_running = function_exists( 'tests_add_filter' );
</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">@@ -484,11 +493,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( ! defined( 'BP_DB_VERSION' ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        define( 'BP_DB_VERSION', $this->db_version );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
-               // Define if deprecated functions should be ignored.
-               if ( ! defined( 'BP_IGNORE_DEPRECATED' ) ) {
-                       define( 'BP_IGNORE_DEPRECATED', true );
-               }
</del><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">@@ -535,33 +539,19 @@
</span><span class="cx" style="display: block; padding: 0 10px">                require $this->plugin_dir . 'bp-core/bp-core-rest-api.php';
</span><span class="cx" style="display: block; padding: 0 10px">                require $this->plugin_dir . 'bp-core/bp-core-blocks.php';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                // Maybe load deprecated functionality (this double negative is proof positive!).
-               if ( ! bp_get_option( '_bp_ignore_deprecated_code', ! $this->load_deprecated ) ) {
-                       require $this->plugin_dir . 'bp-core/deprecated/1.2.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/1.5.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/1.6.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/1.7.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/1.9.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/2.0.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/2.1.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/2.2.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/2.3.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/2.4.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/2.5.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/2.6.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/2.7.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/2.8.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/2.9.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/3.0.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/4.0.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/6.0.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/7.0.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/8.0.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/9.0.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/10.0.php';
-                       require $this->plugin_dir . 'bp-core/deprecated/11.0.php';
-               }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Get the list of versions needing their deprecated functions to be loaded.
+               $deprecated_functions_versions = bp_get_deprecated_functions_versions();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                // Maybe load deprecated functionality.
+               if ( $deprecated_functions_versions && ! $this->is_phpunit_running ) {
+                       $this->load_deprecated = true;
+
+                       foreach ( $deprecated_functions_versions as $deprecated_functions_version ) {
+                               // Load all or last 2 deprecated versions.
+                               require $this->plugin_dir . sprintf( 'bp-core/deprecated/%s.php', $deprecated_functions_version );
+                       }
+               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 // Load wp-cli module if PHP 5.6+.
</span><span class="cx" style="display: block; padding: 0 10px">                if (
</span><span class="cx" style="display: block; padding: 0 10px">                        defined( 'WP_CLI' )
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -720,7 +710,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if (
</span><span class="cx" style="display: block; padding: 0 10px">                        ! in_array( $component, array( 'core', 'members' ), true ) &&
</span><span class="cx" style="display: block; padding: 0 10px">                        ! bp_is_active( $component ) &&
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        ! function_exists( 'tests_add_filter' )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 ! $this->is_phpunit_running
</ins><span class="cx" style="display: block; padding: 0 10px">                 ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span></span></pre></div>
<a id="trunktestsphpunittestcasescorefunctionsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/testcases/core/functions.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/testcases/core/functions.php  2022-07-22 12:54:40 UTC (rev 13303)
+++ trunk/tests/phpunit/testcases/core/functions.php    2022-07-26 13:31:07 UTC (rev 13304)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -5,6 +5,8 @@
</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"> class BP_Tests_Core_Functions extends BP_UnitTestCase {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        protected $bp_initial_version;
+
</ins><span class="cx" style="display: block; padding: 0 10px">         /**
</span><span class="cx" style="display: block; padding: 0 10px">         * @group bp_esc_sql_order
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -875,4 +877,41 @@
</span><span class="cx" style="display: block; padding: 0 10px">        public function add_newcomponent_page_title( $page_default_titles = array() ) {
</span><span class="cx" style="display: block; padding: 0 10px">                return array_merge( $page_default_titles, array( 'newcomponent' => 'NewComponent' ) );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+       public function override_initial_version() {
+               return $this->bp_initial_version;
+       }
+
+       /**
+        * @ticket BP8687
+        */
+       public function test_bp_get_deprecated_functions_versions() {
+               $current_version = (float) bp_get_version();
+               $versions        = bp_get_deprecated_functions_versions();
+
+               // When current version is the initial version, we shouldn't load deprecated functions files.
+               $this->assertTrue( is_array( $versions ) && ! $versions, 'Please check the list of `$deprecated_functions_versions` in `bp_get_deprecated_functions_versions()`. There should be one for each file of the `/src/bp-core/deprecated` directory.' );
+
+               // We should load the 2 lasts deprecated functions files.
+               $this->bp_initial_version = '8.0';
+
+               add_filter( 'pre_option__bp_initial_major_version', array( $this, 'override_initial_version' ), 10, 0 );
+
+               $versions = bp_get_deprecated_functions_versions();
+
+               remove_filter( 'pre_option__bp_initial_major_version', array( $this, 'override_initial_version' ), 10, 0 );
+
+               $this->assertTrue( 2 === count( $versions ) );
+
+               // Even if this version does not exist in deprecated functions files, we should load the 2 lasts.
+               $this->bp_initial_version = '1.0';
+
+               add_filter( 'pre_option__bp_initial_major_version', array( $this, 'override_initial_version' ), 10, 0 );
+
+               $versions = bp_get_deprecated_functions_versions();
+
+               remove_filter( 'pre_option__bp_initial_major_version', array( $this, 'override_initial_version' ), 10, 0 );
+
+               $this->assertTrue( 2 === count( $versions ) );
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span></span></pre>
</div>
</div>

</body>
</html>