Skip to:
Content

BuddyPress.org

Ticket #8505: 8505.1.patch

File 8505.1.patch, 10.7 KB (added by dcavins, 5 years ago)
  • Introduce bp_messages_dismiss_sitewide_notice() as centralized function to dismiss a notice for a user. * Watch for requests to {user_profile}/messages/notices/dismiss. * Introduce bp_get_message_notice_dismiss_link() to generate nonced link to the dismiss action URI. * Use new URI for dismissal link in Legacy and Nouveau sitewide notice templates (replacing JS-only button dismissal). * Update Legacy CSS for dismissal link. Nouveau looks OK.
  • src/bp-messages/actions/notices.php

    diff --git src/bp-messages/actions/notices.php src/bp-messages/actions/notices.php
    index 8a70e56cb..d39a3811a 100644
    function bp_messages_action_edit_notice() { 
    9191
    9292        bp_core_redirect( $redirect_to );
    9393}
    94 add_action( 'bp_actions', 'bp_messages_action_edit_notice' );
    95  No newline at end of file
     94add_action( 'bp_actions', 'bp_messages_action_edit_notice' );
     95
     96/**
     97 * Handle user dismissal of sitewide notices.
     98 *
     99 * @since 9.0.0
     100 *
     101 * @return bool False on failure.
     102 */
     103function bp_messages_action_dismiss_notice() {
     104
     105        // Bail if not viewing a notice dismissal URL.
     106        if ( ! bp_is_messages_component() || ! bp_is_current_action( 'notices' ) || 'dismiss' !== sanitize_key( bp_action_variable( 0 ) ) ) {
     107                return false;
     108        }
     109
     110        // Bail if the current user isn't logged in.
     111        if ( ! is_user_logged_in() ) {
     112                return false;
     113        }
     114
     115        // Check the nonce.
     116        check_admin_referer( 'messages_dismiss_notice' );
     117
     118        // Dismiss the notice.
     119        $success = bp_messages_dismiss_sitewide_notice();
     120
     121        // User feedback.
     122        if ( $success ) {
     123                $feedback = __( 'Notice has been dismissed.', 'buddypress' );
     124                $type     = 'success';
     125        } else {
     126                $feedback = __( 'There was a problem dismissing the notice.', 'buddypress');
     127                $type     = 'error';
     128        }
     129
     130        // Add feedback message.
     131        bp_core_add_message( $feedback, $type );
     132
     133        // Redirect.
     134        $redirect_to = trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() );
     135
     136        bp_core_redirect( $redirect_to );
     137}
     138add_action( 'bp_actions', 'bp_messages_action_dismiss_notice' );
  • src/bp-messages/bp-messages-functions.php

    diff --git src/bp-messages/bp-messages-functions.php src/bp-messages/bp-messages-functions.php
    index 5cd08b510..07b45fb3b 100644
    function bp_messages_personal_data_exporter( $email_address, $page ) { 
    739739                'done' => true,
    740740        );
    741741}
     742
     743/**
     744 * Dismiss a sitewide notice for a user.
     745 *
     746 * @since 9.0.0
     747 *
     748 * @param int $user_id   ID of the user to dismiss the notice for.
     749 *                       Defaults to the logged-in user.
     750 * @param int $notice_id ID of the notice to be dismissed.
     751 *                       Defaults to the currently active notice.
     752 * @return bool False on failure, true if notice is dismissed
     753 *              (or was already dismissed).
     754 */
     755function bp_messages_dismiss_sitewide_notice( $user_id = 0, $notice_id = 0 ) {
     756        $retval = false;
     757        if ( ! $user_id ) {
     758                $user_id = bp_loggedin_user_id();
     759        }
     760        // Bail if no user is set.
     761        if ( ! $user_id ) {
     762                return $retval;
     763        }
     764
     765        if ( $notice_id ) {
     766                $notice = new BP_Messages_Notice( $notice_id );
     767        } else {
     768                $notice = BP_Messages_Notice::get_active();
     769        }
     770        // Bail if no notice is set.
     771        if ( empty( $notice->id ) ) {
     772                return $retval;
     773        }
     774
     775        // Fetch the user's closed notices and add the new item.
     776        $closed_notices = bp_get_user_meta( $user_id, 'closed_notices', true );
     777        if ( empty( $closed_notices ) || ! is_array( $closed_notices ) ) {
     778                $closed_notices = array();
     779        }
     780
     781        if ( in_array( (int) $notice->id, $closed_notices, true ) ) {
     782                // The notice has already been dismissed, so there's nothing to do.
     783                $retval = true;
     784        } else {
     785                // Add the notice to the closed_notices meta.
     786                $closed_notices[] = (int) $notice->id;
     787                $closed_notices   = array_map( 'absint', array_unique( $closed_notices ) );
     788                $success          = bp_update_user_meta( $user_id, 'closed_notices', $closed_notices );
     789                // The return value from update_user_meta() could be an integer or a boolean.
     790                $retval = (bool) $success;
     791        }
     792
     793        return $retval;
     794}
  • src/bp-messages/bp-messages-template.php

    diff --git src/bp-messages/bp-messages-template.php src/bp-messages/bp-messages-template.php
    index d6971563f..28fd25e9d 100644
    function bp_message_activate_deactivate_text() { 
    13101310                return apply_filters( 'bp_message_activate_deactivate_text', $text );
    13111311        }
    13121312
     1313/**
     1314 * Output the URL for dismissing the current notice for the current user.
     1315 *
     1316 * @since 9.0.0
     1317 * @return string URL for dismissing the current notice for the current user.
     1318 */
     1319function bp_message_notice_dismiss_link() {
     1320        echo esc_url( bp_get_message_notice_dismiss_link() );
     1321}
     1322        /**
     1323         * Get the URL for dismissing the current notice for the current user.
     1324         *
     1325         * @since 9.0.0
     1326         * @return string URL for dismissing the current notice for the current user.
     1327         */
     1328        function bp_get_message_notice_dismiss_link() {
     1329
     1330                $link = wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/notices/dismiss/' ), 'messages_dismiss_notice' );
     1331
     1332                /**
     1333                 * Filters the URL for dismissing the current notice for the current user.
     1334                 *
     1335                 * @since 9.0.0
     1336                 *
     1337                 * @param string $link URL for dismissing the current notice.
     1338                 */
     1339                return apply_filters( 'bp_get_message_notice_dismiss_link', $link );
     1340        }
     1341
    13131342/**
    13141343 * Output the messages component slug.
    13151344 *
    function bp_message_get_notices() { 
    13591388                        ?>
    13601389                        <div id="message" class="info notice" rel="n-<?php echo esc_attr( $notice->id ); ?>">
    13611390                                <strong><?php bp_message_notice_subject( $notice ); ?></strong>
    1362                                 <button type="button" id="close-notice" class="bp-tooltip" data-bp-tooltip="<?php esc_attr_e( 'Dismiss this notice', 'buddypress' ) ?>"><span class="bp-screen-reader-text"><?php _e( 'Dismiss this notice', 'buddypress' ) ?></span> <span aria-hidden="true">&Chi;</span></button>
     1391                                <a href="<?php bp_message_notice_dismiss_link(); ?>" id="close-notice" class="bp-tooltip button" data-bp-tooltip="<?php esc_attr_e( 'Dismiss this notice', 'buddypress' ) ?>"><span class="bp-screen-reader-text"><?php _e( 'Dismiss this notice', 'buddypress' ) ?></span> <span aria-hidden="true">&Chi;</span></a>
    13631392                                <?php bp_message_notice_text( $notice ); ?>
    13641393                                <?php wp_nonce_field( 'bp_messages_close_notice', 'close-notice-nonce' ); ?>
    13651394                        </div>
  • src/bp-templates/bp-legacy/buddypress-functions.php

    diff --git src/bp-templates/bp-legacy/buddypress-functions.php src/bp-templates/bp-legacy/buddypress-functions.php
    index c27a6597d..2316ab487 100644
    function bp_legacy_theme_ajax_close_notice() { 
    16231623                echo "-1<div id='message' class='error'><p>" . __( 'There was a problem closing the notice.', 'buddypress' ) . '</p></div>';
    16241624
    16251625        } else {
    1626                 $user_id    = get_current_user_id();
    1627                 $notice_ids = bp_get_user_meta( $user_id, 'closed_notices', true );
    1628                 if ( ! is_array( $notice_ids ) ) {
    1629                         $notice_ids = array();
    1630                 }
    1631 
    1632                 $notice_ids[] = (int) $_POST['notice_id'];
    1633 
    1634                 bp_update_user_meta( $user_id, 'closed_notices', $notice_ids );
     1626                bp_messages_dismiss_sitewide_notice( bp_loggedin_user_id(), (int) $_POST['notice_id'] );
    16351627        }
    16361628
    16371629        exit;
  • src/bp-templates/bp-legacy/css/buddypress-rtl.css

    diff --git src/bp-templates/bp-legacy/css/buddypress-rtl.css src/bp-templates/bp-legacy/css/buddypress-rtl.css
    index df05d6fc6..d99591d63 100644
    fieldset.create-site label { 
    14281428}
    14291429
    14301430.bp-site-wide-message #message button,
    1431 .admin-bar-on #message button {
     1431.bp-site-wide-message #message a.button,
     1432.admin-bar-on #message button,
     1433.admin-bar-on #message a.button {
    14321434        font-size: 0.8em;
    14331435        padding: 2px 4px;
    14341436        position: absolute;
    fieldset.create-site label { 
    14361438        top: 0;
    14371439}
    14381440
    1439 .admin-bar-on #message button {
     1441.admin-bar-on #message button,
     1442.admin-bar-on #message a.button {
    14401443        left: 10px;
    14411444        top: 7px;
    14421445}
  • src/bp-templates/bp-legacy/css/buddypress.css

    diff --git src/bp-templates/bp-legacy/css/buddypress.css src/bp-templates/bp-legacy/css/buddypress.css
    index 32d669fe9..be7270d71 100644
    fieldset.create-site label { 
    14281428}
    14291429
    14301430.bp-site-wide-message #message button,
    1431 .admin-bar-on #message button {
     1431.bp-site-wide-message #message a.button,
     1432.admin-bar-on #message button,
     1433.admin-bar-on #message a.button {
    14321434        font-size: 0.8em;
    14331435        padding: 2px 4px;
    14341436        position: absolute;
    fieldset.create-site label { 
    14361438        top: 0;
    14371439}
    14381440
    1439 .admin-bar-on #message button {
     1441.admin-bar-on #message button,
     1442.admin-bar-on #message a.button {
    14401443        right: 10px;
    14411444        top: 7px;
    14421445}
  • src/bp-templates/bp-nouveau/buddypress/common/notices/template-notices.php

    diff --git src/bp-templates/bp-nouveau/buddypress/common/notices/template-notices.php src/bp-templates/bp-nouveau/buddypress/common/notices/template-notices.php
    index 61912fb9b..92164cf80 100644
     
    1212
    1313        <?php if ( bp_nouveau_has_dismiss_button() ) : ?>
    1414
    15                 <button type="button" class="bp-tooltip" data-bp-tooltip="<?php echo esc_attr_x( 'Close', 'button', 'buddypress' ); ?>" aria-label="<?php esc_attr_e( 'Close this notice', 'buddypress' ); ?>" data-bp-close="<?php bp_nouveau_dismiss_button_type(); ?>"><span class="dashicons dashicons-dismiss" aria-hidden="true"></span></button>
     15                <a href="<?php bp_message_notice_dismiss_link(); ?>" class="bp-tooltip" data-bp-tooltip="<?php echo esc_attr_x( 'Close', 'button', 'buddypress' ); ?>" aria-label="<?php esc_attr_e( 'Close this notice', 'buddypress' ); ?>" data-bp-close="<?php bp_nouveau_dismiss_button_type(); ?>"><span class="dashicons dashicons-dismiss" aria-hidden="true"></span></a>
    1616
    1717        <?php endif; ?>
    1818</aside>
  • src/bp-templates/bp-nouveau/includes/messages/ajax.php

    diff --git src/bp-templates/bp-nouveau/includes/messages/ajax.php src/bp-templates/bp-nouveau/includes/messages/ajax.php
    index 7c5f396f8..1ab7b4259 100644
    function bp_nouveau_ajax_dismiss_sitewide_notice() { 
    766766        }
    767767
    768768        // Mark the active notice as closed.
    769         $notice = BP_Messages_Notice::get_active();
    770 
    771         if ( ! empty( $notice->id ) ) {
    772                 $user_id = bp_loggedin_user_id();
    773 
    774                 $closed_notices = bp_get_user_meta( $user_id, 'closed_notices', true );
    775 
    776                 if ( empty( $closed_notices ) ) {
    777                         $closed_notices = array();
    778                 }
    779 
    780                 // Add the notice to the array of the user's closed notices.
    781                 $closed_notices[] = (int) $notice->id;
    782                 bp_update_user_meta( $user_id, 'closed_notices', array_map( 'absint', array_unique( $closed_notices ) ) );
     769        $success = bp_messages_dismiss_sitewide_notice();
    783770
     771        if ( $success ) {
    784772                wp_send_json_success( array(
    785773                        'feedback' => '<div class="bp-feedback info"><span class="bp-icon" aria-hidden="true"></span><p>' . __( 'Sitewide notice dismissed', 'buddypress' ) . '</p></div>',
    786774                        'type'     => 'success',
    787775                ) );
     776        } else {
     777                wp_send_json_error( array(
     778                        'feedback' => '<div class="bp-feedback info"><span class="bp-icon" aria-hidden="true"></span><p>' . __( 'There was a problem dismissing that sitewide notice', 'buddypress' ) . '</p></div>',
     779                        'type'     => 'error',
     780                ) );
    788781        }
    789782}