<!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>[12412] sites/trunk/wordpress.org/public_html/wp-content/plugins: Support Forums: Check intent before updating user preferences.</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://meta.trac.wordpress.org/changeset/12412">12412</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"http://meta.trac.wordpress.org/changeset/12412","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>Clorith</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2023-02-22 00:54:20 +0000 (Wed, 22 Feb 2023)</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'>Support Forums: Check intent before updating user preferences.

The bbPress profile page may be triggered by various scenarios that do not have the full context of a profile edit included.

By introducing a hidden input field in the form areas which need a "yes or no" type response, indicated by checkboxes, we can ensure that these are not unintentionally cleared or set from profile modifications made without the options even being presented to the user.

Props zoonini.
Fixes <a href="http://meta.trac.wordpress.org/ticket/6509">#6509</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginssupportforumsincclassblocksphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/support-forums/inc/class-blocks.php</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginswporgbbpalsoviewingwporgbbpalsoviewingphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-bbp-also-viewing/wporg-bbp-also-viewing.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginssupportforumsincclassblocksphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/plugins/support-forums/inc/class-blocks.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/support-forums/inc/class-blocks.php      2023-02-21 05:52:23 UTC (rev 12411)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/support-forums/inc/class-blocks.php        2023-02-22 00:54:20 UTC (rev 12412)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -159,6 +159,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                printf(
</span><span class="cx" style="display: block; padding: 0 10px">                        '<p>
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                <input type="hidden" name="can_update_block_editor_preference" value="true">
</ins><span class="cx" style="display: block; padding: 0 10px">                                 <input name="block_editor" id="block_editor" type="checkbox" value="disabled" %s />
</span><span class="cx" style="display: block; padding: 0 10px">                                <label for="block_editor">%s</label>
</span><span class="cx" style="display: block; padding: 0 10px">                        </p>',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -174,6 +175,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * Save the user option to enable/disable.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function bbp_profile_update( $user_id ) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                // Catch profile updates that should not be able to include the "Disable Block Editor" preference, and return early.
+               if ( ! isset( $_REQUEST['can_update_block_editor_preference'] ) ) {
+                       return;
+               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 $disabled = ! empty( $_REQUEST['block_editor'] ) && 'disabled' === $_REQUEST['block_editor'];
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                if ( $disabled ) {
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginswporgbbpalsoviewingwporgbbpalsoviewingphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-bbp-also-viewing/wporg-bbp-also-viewing.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-bbp-also-viewing/wporg-bbp-also-viewing.php        2023-02-21 05:52:23 UTC (rev 12411)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-bbp-also-viewing/wporg-bbp-also-viewing.php  2023-02-22 00:54:20 UTC (rev 12412)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -72,9 +72,9 @@
</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">  * Whether Also Viewing is enabled for the current user.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * 
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *
</ins><span class="cx" style="display: block; padding: 0 10px">  * @param int $user_id The user ID to check for.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * 
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *
</ins><span class="cx" style="display: block; padding: 0 10px">  * @return bool
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> function enabled( $user_id = 0 ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -87,9 +87,9 @@
</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">  * Whether Also Viewing is able to be activated for the current user.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * 
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *
</ins><span class="cx" style="display: block; padding: 0 10px">  * @param int $user_id The user ID to check for.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * 
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *
</ins><span class="cx" style="display: block; padding: 0 10px">  * @return bool
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> function allowed_for_user( $user_id = 0 ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -109,9 +109,9 @@
</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">  * The current page "slug"/"path" for refering to the current request.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * 
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *
</ins><span class="cx" style="display: block; padding: 0 10px">  * This uses the WordPress.org SEO plugin for the canonical url, or falls back to REQUEST_URI.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * 
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *
</ins><span class="cx" style="display: block; padding: 0 10px">  * @return string The path for the current page, eg. 'view/no-replies'
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> function current_page() {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -130,9 +130,9 @@
</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">  * Sanitizes a given string/url/path to the format used for uniquely identifying pages.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * 
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *
</ins><span class="cx" style="display: block; padding: 0 10px">  * @param string $page The strng/url/path
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * 
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *
</ins><span class="cx" style="display: block; padding: 0 10px">  * @return string The sanitized $page.
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> function sanitize_page_url_for_db( $page ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -193,6 +193,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        printf(
</span><span class="cx" style="display: block; padding: 0 10px">                '<p>
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                <input type="hidden" name="can_update_also_viewing_preference" value="true">
</ins><span class="cx" style="display: block; padding: 0 10px">                 <input name="also_viewing" id="also_viewing_toggle" type="checkbox" value="yes" %s>
</span><span class="cx" style="display: block; padding: 0 10px">                <label for="also_viewing_toggle">%s</label>
</span><span class="cx" style="display: block; padding: 0 10px">                </p>',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -208,6 +209,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">  * Save the user option to enable/disable.
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> function bbp_profile_update( $user_id ) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        // Catch profile updates that should not be able to include the Also Viewing preference, and return early.
+       if ( ! isset( $_REQUEST['can_update_also_viewing_preference'] ) ) {
+               return;
+       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">         $enabled = ! empty( $_REQUEST['also_viewing'] ) && 'yes' === $_REQUEST['also_viewing'];
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        update_user_meta( $user_id, USER_OPTION, (int) $enabled );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -221,9 +227,9 @@
</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">  * Get the list of users who are currently viewing a page.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * 
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *
</ins><span class="cx" style="display: block; padding: 0 10px">  * @param string $page The page to get the userse for.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * 
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *
</ins><span class="cx" style="display: block; padding: 0 10px">  * @return array Array of user names + if they're typing.
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> function get_currently_viewing( $page ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -267,9 +273,9 @@
</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">  * Get the list of OTHER users who are currently viewing a page.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * 
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *
</ins><span class="cx" style="display: block; padding: 0 10px">  * @param string $page The page to get the userse for.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * 
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *
</ins><span class="cx" style="display: block; padding: 0 10px">  * @return array Array of user names + if they're typing.
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> function get_others_currently_viewing( $page ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -285,11 +291,11 @@
</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">  * Mark a user as currently viewing/typing on the current page.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * 
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *
</ins><span class="cx" style="display: block; padding: 0 10px">  * @param string $page    The page being viewed. Default current page.
</span><span class="cx" style="display: block; padding: 0 10px">  * @param bool   $typing  If the current user is typing. Default false.
</span><span class="cx" style="display: block; padding: 0 10px">  * @param int    $user_id The user ID who is viewing/typing.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * 
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *
</ins><span class="cx" style="display: block; padding: 0 10px">  * @return bool
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> function user_viewing( $page = false, $typing = false, $user_id = false ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -332,7 +338,7 @@
</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">  * Mark a user as no longer viewing a page.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * 
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *
</ins><span class="cx" style="display: block; padding: 0 10px">  * @param string $page    The page to no longer view. Defaults to clearing all pages.
</span><span class="cx" style="display: block; padding: 0 10px">  * @param int    $user_id The user ID no longer viewing the page. Default current user.
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -429,7 +435,7 @@
</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">  * The table name used for storing the state of users.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * 
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *
</ins><span class="cx" style="display: block; padding: 0 10px">  * @return string
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> function get_table() {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -440,7 +446,7 @@
</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">  * Maybe create the database table used for this plugin.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * 
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ *
</ins><span class="cx" style="display: block; padding: 0 10px">  * This only runs once per site, ever.
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> function maybe_create_table() {
</span></span></pre>
</div>
</div>

</body>
</html>