<!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][13998] trunk: Make sure `12.0` deprecated code is loaded until version 15.0</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/13998">13998</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/13998","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>2024-08-07 14:08:06 +0000 (Wed, 07 Aug 2024)</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'>Make sure `12.0` deprecated code is loaded until version 15.0
Version 12.0 changed BuddyPress a lot with the introduction of the BP Rewrites API. To give more time to advanced users, BP plugin or theme developers so that they make their code ready for this API, unlike how we deal with deprecated code since <a href="http://buddypress.trac.wordpress.org/changeset/13304">r13304</a> & for the 2 following major releases (14.0 & 15.0), we will carry on loading it to prevent potential errors.
Props emaralive, espellcaste.
See <a href="http://buddypress.trac.wordpress.org/ticket/9210">#9210</a> (trunk)
Closes https://github.com/buddypress/buddypress/pull/352</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcbpcorebpcorefunctionsphp">trunk/src/bp-core/bp-core-functions.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 2024-08-07 12:36:18 UTC (rev 13997)
+++ trunk/src/bp-core/bp-core-functions.php 2024-08-07 14:08:06 UTC (rev 13998)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -5012,27 +5012,20 @@
</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><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- // Only load 12.0 deprecated functions.
- return array( 12.0 );
- }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // Load 12.0 deprecated functions only when BP was installed with 12.0, 14.0 or 15.0.
+ if ( in_array( $initial_version, array( 12.0, 14.0, 15.0 ), true ) ) {
+ return array( 12.0 );
+ }
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $index_first_major = array_search( $initial_version, $deprecated_functions_versions, true );
- if ( false === $index_first_major ) {
- return array_splice( $deprecated_functions_versions, -2 );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return array();
</ins><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">- $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 );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $keep_last = 2;
+ if ( (float) 15 >= $initial_version ) {
+ $keep_last = count( $deprecated_functions_versions ) - array_search( 12.0, $deprecated_functions_versions, true );
</ins><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">- $index_initial_version = array_search( $initial_version, $latest_deprecated_functions_versions, true );
- if ( false !== $index_initial_version && 12.0 !== $initial_version ) {
- unset( $latest_deprecated_functions_versions[ $index_initial_version ] );
- }
-
- return $latest_deprecated_functions_versions;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return array_splice( $deprecated_functions_versions, -$keep_last );
</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></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 2024-08-07 12:36:18 UTC (rev 13997)
+++ trunk/tests/phpunit/testcases/core/functions.php 2024-08-07 14:08:06 UTC (rev 13998)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -878,59 +878,85 @@
</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">+ * This test acts like a reminder: $deprecated_functions_versions needs to include each versions of the `/src/bp-core/deprecated` directory.
+ *
+ * eg: if `/src/bp-core/deprecated/15.0.php` exists, then $deprecated_functions_versions should include `15.0`.
+ *
+ * @group bp_get_deprecated_functions_versions
+ * @ticket BP9210
+ */
+ public function test_bp_get_deprecated_functions_versions_array_is_consistent_with_deprecated_files() {
+ // When current major version is the initial version, we shouldn't load any deprecated functions file.
+ $this->assertTrue( false !== bp_get_deprecated_functions_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.' );
+ }
+
+ /**
+ * @group bp_get_deprecated_functions_versions
</ins><span class="cx" style="display: block; padding: 0 10px"> * @ticket BP8687
</span><span class="cx" style="display: block; padding: 0 10px"> * @ticket BP9075
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * @ticket BP9210
</ins><span class="cx" style="display: block; padding: 0 10px"> */
</span><span class="cx" style="display: block; padding: 0 10px"> public function test_bp_get_deprecated_functions_versions() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $current_version = bp_get_version();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $current_version = (float) bp_get_version();
</ins><span class="cx" style="display: block; padding: 0 10px"> $versions = bp_get_deprecated_functions_versions();
</span><span class="cx" style="display: block; padding: 0 10px"> $bp = buddypress();
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- // When current major version is the initial version, we should only load 12.0 deprecated functions file.
- $this->assertSame( $versions, array( 12.0 ), '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.' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ add_filter( 'pre_option__bp_initial_major_version', array( $this, 'override_initial_version' ), 10, 0 );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $bp->version = '12.1.1';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // Fresh install.
+ $this->bp_initial_version = $current_version;
+ $expected_versions = array();
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- // We should load the 2 lasts deprecated functions files.
- $this->bp_initial_version = '12.0';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // Include 12.0 until version 15.0.
+ if ( $current_version <= (float) 15 ) {
+ $expected_versions = array( 12.0 );
+ }
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- add_filter( 'pre_option__bp_initial_major_version', array( $this, 'override_initial_version' ), 10, 0 );
-
</del><span class="cx" style="display: block; padding: 0 10px"> $versions = bp_get_deprecated_functions_versions();
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $this->assertContains( 12.0, $versions, '12.0 deprecated functions should be loaded when 12.1.1 was the first installed version.' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $this->assertSame( $versions, $expected_versions, 'Deprecated functions are not loaded for fresh installs.' );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $this->bp_initial_version = '9.0';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // BuddyPress updated from previous versions.
+ $expected_versions = array( $current_version - 1, $current_version ); // The 2 last deprecated function files.
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // First BuddyPress installed version is older than 11.0. In this case, the initial version is 0.
+ // See https://buddypress.trac.wordpress.org/changeset/13304
+ $this->bp_initial_version = 0;
+
</ins><span class="cx" style="display: block; padding: 0 10px"> $versions = bp_get_deprecated_functions_versions();
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $this->assertContains( 12.0, $versions, '12.0 deprecated functions should be loaded when 12.0 was updated for a minor release' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // Include 12.0 until version 15.0.
+ if ( $current_version <= (float) 15 ) {
+ $this->assertContains( 12.0, $versions, '12.0 deprecated functions should be loaded when first installed version is <= 15.0' );
+ } else {
+ $this->assertSame( $versions, $expected_versions, 'The last deprecated function files are loaded for updated BuddyPress.' );
+ }
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- remove_filter( 'pre_option__bp_initial_major_version', array( $this, 'override_initial_version' ), 10, 0 );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // Testing with previous major version.
+ $this->bp_initial_version = $current_version - 1;
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $bp->version = $current_version;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $versions = bp_get_deprecated_functions_versions();
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- // We should load the 2 lasts deprecated functions files.
- $this->bp_initial_version = '8.0';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // Include 12.0 until version 15.0.
+ if ( $current_version <= (float) 15 ) {
+ $this->assertContains( 12.0, $versions, '12.0 deprecated functions should be loaded when first installed version is <= 15.0' );
+ } else {
+ $this->assertSame( $versions, $expected_versions, 'The last deprecated function files are loaded for updated BuddyPress.' );
+ }
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- add_filter( 'pre_option__bp_initial_major_version', array( $this, 'override_initial_version' ), 10, 0 );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // Testing with 2 versions older.
+ $this->bp_initial_version = (float) 15 === $current_version ? (float) 12 : $current_version - 2;
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> $versions = bp_get_deprecated_functions_versions();
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- remove_filter( 'pre_option__bp_initial_major_version', array( $this, 'override_initial_version' ), 10, 0 );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // Include 12.0 until version 15.0.
+ if ( $current_version <= (float) 15 ) {
+ $this->assertContains( 12.0, $versions, '12.0 deprecated functions should be loaded when first installed version is <= 15.0' );
+ } else {
+ $this->assertSame( $versions, $expected_versions, 'The last deprecated function files are loaded for updated BuddyPress.' );
+ }
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $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();
-
</del><span class="cx" style="display: block; padding: 0 10px"> remove_filter( 'pre_option__bp_initial_major_version', array( $this, 'override_initial_version' ), 10, 0 );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
- $this->assertTrue( 2 === count( $versions ) );
</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></pre>
</div>
</div>
</body>
</html>