Skip to:
Content

BuddyPress.org

Ticket #2432: bp-core-messages.patch

File bp-core-messages.patch, 3.9 KB (added by aesqe, 14 years ago)

adds support for adding and displaying multiple success/error/etc messages

  • bp-core.php

     
    12341234 *
    12351235 * Adds a feedback (error/success) message to the WP cookie so it can be displayed after the page reloads.
    12361236 *
     1237 * supported arguments variants:
     1238 * bp_core_add_message( $message, $type )
     1239 * bp_core_add_message( array('content' => $message, 'type' => $type) )
     1240 * bp_core_add_message( array( array('content' => $message, 'type' => $type), array('content' => $message, 'type' => $type) ) )
     1241 *
    12371242 * @package BuddyPress Core
    12381243 */
    1239 function bp_core_add_message( $message, $type = false ) {
     1244function bp_core_add_message( $message, $type = 'success' ) {
    12401245        global $bp;
     1246       
     1247        $messages = array();
    12411248
    1242         if ( !$type )
    1243                 $type = 'success';
     1249        if( ! is_array($message) )/* Case 1: not an array, single message */
     1250                $messages[] = array('content' => $message, 'type' => $type);
     1251        elseif( ! is_array($message[key($message)]) )/* Case 2: single array message */
     1252                $messages[] = array('content' => $message[0], 'type' => $message[1] );
     1253        else/* Case 3: presumably, an array containing multiple messages, each as an array */
     1254                $messages = $message;
     1255       
     1256        /* This is to prevent problems with cookies handling serialized strings */
     1257        $messages = base64_encode( serialize($messages) );
    12441258
    12451259        /* Send the values to the cookie for page reload display */
    1246         @setcookie( 'bp-message', $message, time()+60*60*24, COOKIEPATH );
     1260        @setcookie( 'bp-message', $messages, time()+60*60*24, COOKIEPATH );
    12471261        @setcookie( 'bp-message-type', $type, time()+60*60*24, COOKIEPATH );
    1248 
     1262       
    12491263        /***
    12501264         * Send the values to the $bp global so we can still output messages
    12511265         * without a page reload
    12521266         */
    1253         $bp->template_message = $message;
     1267        $bp->template_message = $messages;
    12541268        $bp->template_message_type = $type;
    12551269}
    12561270
     
    12701284 */
    12711285function bp_core_setup_message() {
    12721286        global $bp;
     1287       
     1288        if( ! isset($_COOKIE['bp-message']) )
     1289                $_COOKIE['bp-message'] = "";
    12731290
    1274         if ( empty( $bp->template_message ) )
     1291        if( empty($bp->template_message) )
    12751292                $bp->template_message = $_COOKIE['bp-message'];
    12761293
    1277         if ( empty( $bp->template_message_type ) )
    1278                 $bp->template_message_type = $_COOKIE['bp-message-type'];
     1294        add_action('template_notices', 'bp_core_render_message');
    12791295
    1280         add_action( 'template_notices', 'bp_core_render_message' );
    1281 
    1282         @setcookie( 'bp-message', false, time() - 1000, COOKIEPATH );
    1283         @setcookie( 'bp-message-type', false, time() - 1000, COOKIEPATH );
     1296        @setcookie('bp-message', false, time() - 1000, COOKIEPATH);
     1297        @setcookie('bp-message-type', false, time() - 1000, COOKIEPATH);
    12841298}
    1285 add_action( 'bp_init', 'bp_core_setup_message' );
     1299add_action('bp_init', 'bp_core_setup_message');
    12861300
    12871301
    12881302/**
     
    12971311function bp_core_render_message() {
    12981312        global $bp;
    12991313
    1300         if ( $bp->template_message ) {
    1301                 $type = ( 'success' == $bp->template_message_type ) ? 'updated' : 'error';
     1314        if( $bp->template_message )
     1315        {
     1316                do_action('bp_core_pre_render_message');
     1317               
     1318                /* Check if it's really a base64 encoded string using regex; try to decode it */
     1319                if( preg_match('%^[a-zA-Z0-9/+]*={0,2}$%', $bp->template_message) && $b64 = imap_base64($bp->template_message) )
     1320                        $bp->template_message = unserialize($b64);
     1321                else
     1322                        $bp->template_message = array( array('content' => $bp->template_message, 'type' => $bp->template_message_type) );
     1323               
     1324                echo '<div id="message">';
     1325               
     1326                foreach( (array) $bp->template_message as $message )
     1327                {
     1328                        if( ! $message['type'] )
     1329                                $message['type'] = 'success';
    13021330        ?>
    1303                 <div id="message" class="<?php echo $type; ?>">
    1304                         <p><?php echo stripslashes( attribute_escape( $bp->template_message ) ); ?></p>
    1305                 </div>
     1331                        <p class="<?php echo $message['type']; ?>"><?php echo stripslashes( attribute_escape($message['content']) ); ?></p>
    13061332        <?php
    1307                 do_action( 'bp_core_render_message' );
     1333                }
     1334               
     1335                echo '</div>';
     1336               
     1337                do_action('bp_core_render_message');
    13081338        }
    13091339}
    13101340