Skip to:
Content

BuddyPress.org

Ticket #8213: 8213.patch

File 8213.patch, 18.8 KB (added by passoniate, 5 years ago)

Patch

  • src/bp-loader.php

     
    2626 * PHP supported by WordPress.
    2727 */
    2828
    29 // Exit if accessed directly
     29// Exit if accessed directly.
    3030defined( 'ABSPATH' ) || exit;
    3131
    3232// Required PHP version.
     
    8585        if ( defined( 'BUDDYPRESS_LATE_LOAD' ) ) {
    8686                add_action( 'plugins_loaded', 'buddypress', (int) BUDDYPRESS_LATE_LOAD );
    8787
    88         // "And now here's something we hope you'll really like!"
     88        // "And now here's something we hope you'll really like!".
    8989        } else {
    9090                $GLOBALS['bp'] = buddypress();
    9191        }
  • src/bp-templates/bp-nouveau/buddypress-functions.php

     
    170170                // We need to neutralize the BuddyPress core "bp_core_render_message()" once it has been added.
    171171                add_action( 'bp_actions', array( $this, 'neutralize_core_template_notices' ), 6 );
    172172
    173                 // Scripts
    174                 add_action( 'bp_enqueue_scripts', array( $this, 'register_scripts' ), 2 ); // Register theme JS
     173                // Scripts.
     174                add_action( 'bp_enqueue_scripts', array( $this, 'register_scripts' ), 2 ); // Register theme JS.
    175175                remove_action( 'bp_enqueue_scripts', 'bp_core_confirmation_js' );
    176                 add_action( 'bp_enqueue_scripts', array( $this, 'enqueue_styles' ) ); // Enqueue theme CSS
    177                 add_action( 'bp_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); // Enqueue theme JS
    178                 add_filter( 'bp_enqueue_scripts', array( $this, 'localize_scripts' ) ); // Enqueue theme script localization
     176                add_action( 'bp_enqueue_scripts', array( $this, 'enqueue_styles' ) ); // Enqueue theme CSS.
     177                add_action( 'bp_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); // Enqueue theme JS.
     178                add_filter( 'bp_enqueue_scripts', array( $this, 'localize_scripts' ) ); // Enqueue theme script localization.
    179179
    180                 // Body no-js class
     180                // Body no-js class.
    181181                add_filter( 'body_class', array( $this, 'add_nojs_body_class' ), 20, 1 );
    182182
    183                 // Ajax querystring
     183                // Ajax querystring.
    184184                add_filter( 'bp_ajax_querystring', 'bp_nouveau_ajax_querystring', 10, 2 );
    185185
    186                 // Register directory nav items
     186                // Register directory nav items.
    187187                add_action( 'bp_screens', array( $this, 'setup_directory_nav' ), 15 );
    188188
    189                 // Register the Default front pages Dynamic Sidebars
     189                // Register the Default front pages Dynamic Sidebars.
    190190                add_action( 'widgets_init', 'bp_nouveau_register_sidebars', 11 );
    191191
    192                 // Register the Primary Object nav widget
     192                // Register the Primary Object nav widget.
    193193                add_action( 'bp_widgets_init', array( 'BP_Nouveau_Object_Nav_Widget', 'register_widget' ) );
    194194
    195                 // Set the BP Uri for the Ajax customizer preview
     195                // Set the BP Uri for the Ajax customizer preview.
    196196                add_filter( 'bp_uri', array( $this, 'customizer_set_uri' ), 10, 1 );
    197197
    198198                /** Override **********************************************************/
     
    317317                        ),
    318318                ) );
    319319
    320                 // Bail if no scripts
     320                // Bail if no scripts.
    321321                if ( empty( $scripts ) ) {
    322322                        return;
    323323                }
     
    430430                        'object_nav_parent'   => '#buddypress',
    431431                );
    432432
    433                 // If the Object/Item nav are in the sidebar
     433                // If the Object/Item nav are in the sidebar.
    434434                if ( bp_nouveau_is_object_nav_in_sidebar() ) {
    435435                        $params['object_nav_parent'] = '.buddypress_object_nav';
    436436                }
     
    459459                        $supported_objects = array_merge( $supported_objects, array( 'group_members', 'group_requests' ) );
    460460                }
    461461
    462                 // Add components & nonces
     462                // Add components & nonces.
    463463                $params['objects'] = $supported_objects;
    464464                $params['nonces']  = $object_nonces;
    465465
    466                 // Used to transport the settings inside the Ajax requests
     466                // Used to transport the settings inside the Ajax requests.
    467467                if ( is_customize_preview() ) {
    468468                        $params['customizer_settings'] = bp_nouveau_get_temporary_setting( 'any' );
    469469                }
     
    602602                                continue;
    603603                        }
    604604
    605                         // Define the primary nav for the current component's directory
     605                        // Define the primary nav for the current component's directory.
    606606                        $this->directory_nav->add_nav( $nav_item );
    607607                }
    608608        }
  • src/bp-templates/bp-nouveau/js/buddypress-messages.js

     
    66
    77( function( exports, $ ) {
    88
    9         // Bail if not set
     9        // Bail if not set.
    1010        if ( typeof BP_Nouveau === 'undefined' ) {
    1111                return;
    1212        }
     
    4646                setupNav: function() {
    4747                        var self = this;
    4848
    49                         // First adapt the compose nav
     49                        // First adapt the compose nav.
    5050                        $( '#compose-personal-li' ).addClass( 'last' );
    5151
    52                         // Then listen to nav click and load the appropriate view
     52                        // Then listen to nav click and load the appropriate view.
    5353                        $( '#subnav a' ).on( 'click', function( event ) {
    5454                                event.preventDefault();
    5555
    5656                                var view_id = $( event.target ).prop( 'id' );
    5757
    58                                 // Remove the editor to be sure it will be added dynamically later
     58                                // Remove the editor to be sure it will be added dynamically later.
    5959                                self.removeTinyMCE();
    6060
    61                                 // The compose view is specific (toggle behavior)
     61                                // The compose view is specific (toggle behavior).
    6262                                if ( 'compose' === view_id ) {
    63                                         // If it exists, it means the user wants to remove it
     63                                        // If it exists, it means the user wants to remove it.
    6464                                        if ( ! _.isUndefined( self.views.get( 'compose' ) ) ) {
    6565                                                var form = self.views.get( 'compose' );
    6666                                                form.get( 'view' ).remove();
    6767                                                self.views.remove( { id: 'compose', view: form } );
    6868
    69                                                 // Back to inbox
     69                                                // Back to inbox.
    7070                                                if ( 'single' === self.box ) {
    7171                                                        self.box = 'inbox';
    7272                                                }
    7373
    74                                                 // Navigate back to current box
     74                                                // Navigate back to current box.
    7575                                                self.router.navigate( self.box + '/', { trigger: true } );
    7676
    77                                         // Otherwise load it
     77                                        // Otherwise load it.
    7878                                        } else {
    7979                                                self.router.navigate( 'compose/', { trigger: true } );
    8080                                        }
     
    132132                displayFeedback: function( message, type ) {
    133133                        var feedback;
    134134
    135                         // Make sure to remove the feedbacks
     135                        // Make sure to remove the feedbacks.
    136136                        this.removeFeedback();
    137137
    138138                        if ( ! message ) {
     
    150150                },
    151151
    152152                clearViews: function() {
    153                         // Clear views
     153                        // Clear views.
    154154                        if ( ! _.isUndefined( this.views.models ) ) {
    155155                                _.each( this.views.models, function( model ) {
    156156                                        model.get( 'view' ).remove();
     
    164164                        // Remove all existing views.
    165165                        this.clearViews();
    166166
    167                         // Create the loop view
     167                        // Create the loop view.
    168168                        var form = new bp.Views.messageForm( {
    169169                                model: new bp.Models.Message()
    170170                        } );
     
    175175                },
    176176
    177177                threadsView: function() {
    178                         // Activate the appropriate nav
     178                        // Activate the appropriate nav.
    179179                        $( '#subnav ul li' ).each( function( l, li ) {
    180180                                $( li ).removeClass( 'current selected' );
    181181                        } );
    182182                        $( '#subnav a#' + this.box ).closest( 'li' ).addClass( 'current selected' );
    183183
    184                         // Create the loop view
     184                        // Create the loop view.
    185185                        var threads_list = new bp.Views.userThreads( { collection: this.threads, box: this.box } );
    186186
    187187                        this.views.add( { id: 'threads', view: threads_list } );
     
    188188
    189189                        threads_list.inject( '.bp-messages-content' );
    190190
    191                         // Attach filters
     191                        // Attach filters.
    192192                        this.displayFilters( this.threads );
    193193                },
    194194
     
    195195                displayFilters: function( collection ) {
    196196                        var filters_view;
    197197
    198                         // Create the model
     198                        // Create the model.
    199199                        this.filters = new Backbone.Model( {
    200200                                'page'         : 1,
    201201                                'total_page'   : 0,
     
    203203                                'box'          : this.box
    204204                        } );
    205205
    206                         // Use it in the filters viex
     206                        // Use it in the filters viex.
    207207                        filters_view = new bp.Views.messageFilters( { model: this.filters, threads: collection } );
    208208
    209209                        this.views.add( { id: 'filters', view: filters_view } );
     
    217217
    218218                        this.box = 'single';
    219219
    220                         // Create the single thread view
     220                        // Create the single thread view.
    221221                        var single_thread = new bp.Views.userMessages( { collection: this.messages, thread: thread } );
    222222
    223223                        this.views.add( { id: 'single', view: single_thread } );
     
    310310                        options.context = this;
    311311                        options.data    = options.data || {};
    312312
    313                         // Add generic nonce
     313                        // Add generic nonce.
    314314                        options.data.nonce = BP_Nouveau.nonces.messages;
    315315
    316316                        if ( 'read' === method ) {
     
    393393                        options.context = this;
    394394                        options.data    = options.data || {};
    395395
    396                         // Add generic nonce
     396                        // Add generic nonce.
    397397                        options.data.nonce = BP_Nouveau.nonces.messages;
    398398
    399399                        if ( 'read' === method ) {
     
    447447                }
    448448        } );
    449449
    450         // Extend wp.Backbone.View with .prepare() and .inject()
     450        // Extend wp.Backbone.View with .prepare() and .inject().
    451451        bp.Nouveau.Messages.View = bp.Backbone.View.extend( {
    452452                inject: function( selector ) {
    453453                        this.render();
     
    464464                }
    465465        } );
    466466
    467         // Feedback view
     467        // Feedback view.
    468468        bp.Views.Feedback = bp.Nouveau.Messages.View.extend( {
    469469                tagName: 'div',
    470470                className: 'bp-messages bp-user-messages-feedback',
     
    478478                }
    479479        } );
    480480
    481         // Hook view
     481        // Hook view.
    482482        bp.Views.Hook = bp.Nouveau.Messages.View.extend( {
    483483                tagName: 'div',
    484484                template  : bp.template( 'bp-messages-hook' ),
     
    522522                },
    523523
    524524                initialize: function() {
    525                         // Clone the model to set the resetted one
     525                        // Clone the model to set the resetted one.
    526526                        this.resetModel = this.model.clone();
    527527
    528                         // Add the editor view
     528                        // Add the editor view.
    529529                        this.views.add( '#bp-message-content', new bp.Views.messageEditor() );
    530530
    531531                        this.model.on( 'change', this.resetFields, this );
    532532
    533                         // Activate bp_mentions
     533                        // Activate bp_mentions.
    534534                        this.on( 'ready', this.addMentions, this );
    535535                },
    536536
     
    538538                        var sendToInput = $( this.el ).find( '#send-to-input' ),
    539539                            mention = bp.Nouveau.getLinkParams( null, 'r' ) || null;
    540540
    541                         // Add autocomplete to send_to field
     541                        // Add autocomplete to send_to field.
    542542                        sendToInput.bp_mentions( {
    543543                                data: [],
    544544                                suffix: ' '
    545545                        } );
    546546
    547                         // Check for mention
     547                        // Check for mention.
    548548                        if ( ! _.isNull( mention ) ) {
    549549                                sendToInput.val( '@' + _.escape( mention ) + ' ' );
    550550                                sendToInput.focus();
     
    552552                },
    553553
    554554                resetFields: function( model ) {
    555                         // Clean inputs
     555                        // Clean inputs.
    556556                        _.each( model.previousAttributes(), function( value, input ) {
    557557                                if ( 'message_content' === input ) {
    558                                         // tinyMce
     558                                        // tinyMce.
    559559                                        if ( undefined !== tinyMCE.activeEditor && null !== tinyMCE.activeEditor ) {
    560560                                                tinyMCE.activeEditor.setContent( '' );
    561561                                        }
    562562
    563                                 // All except meta or empty value
     563                                // All except meta or empty value.
    564564                                } else if ( 'meta' !== input && false !== value ) {
    565565                                        $( 'input[name="' + input + '"]' ).val( '' );
    566566                                }
     
    576576
    577577                        bp.Nouveau.Messages.removeFeedback();
    578578
    579                         // Set the content and meta
     579                        // Set the content and meta.
    580580                        _.each( this.$el.serializeArray(), function( pair ) {
    581581                                pair.name = pair.name.replace( '[]', '' );
    582582
    583                                 // Group extra fields in meta
     583                                // Group extra fields in meta.
    584584                                if ( -1 === _.indexOf( ['send_to', 'subject', 'message_content'], pair.name ) ) {
    585585                                        if ( _.isUndefined( meta[ pair.name ] ) ) {
    586586                                                meta[ pair.name ] = pair.value;
     
    592592                                                meta[ pair.name ].push( pair.value );
    593593                                        }
    594594
    595                                 // Prepare the core model
     595                                // Prepare the core model.
    596596                                } else {
    597                                         // Send to
     597                                        // Send to.
    598598                                        if ( 'send_to' === pair.name ) {
    599599                                                var usernames = pair.value.match( /(^|[^@\w\-])@([a-zA-Z0-9_\-]{1,50})\b/g );
    600600
     
    613613                                                        this.model.set( 'send_to', usernames, { silent: true } );
    614614                                                }
    615615
    616                                         // Subject and content
     616                                        // Subject and content.
    617617                                        } else {
    618                                                 // Message content
     618                                                // Message content.
    619619                                                if ( 'message_content' === pair.name && undefined !== tinyMCE.activeEditor ) {
    620620                                                        pair.value = tinyMCE.activeEditor.getContent();
    621621                                                }
     
    640640                                return;
    641641                        }
    642642
    643                         // Set meta
     643                        // Set meta.
    644644                        this.model.set( 'meta', meta, { silent: true } );
    645645
    646646                        // Send the message.
    647647                        this.model.sendMessage().done( function( response ) {
    648                                 // Reset the model
     648                                // Reset the model.
    649649                                self.model.set( self.resetModel );
    650650
    651651                                bp.Nouveau.Messages.displayFeedback( response.feedback, response.type );
    652652
    653                                 // Remove tinyMCE
     653                                // Remove tinyMCE.
    654654                                bp.Nouveau.Messages.removeTinyMCE();
    655655
    656                                 // Remove the form view
     656                                // Remove the form view.
    657657                                var form = bp.Nouveau.Messages.views.get( 'compose' );
    658658                                form.get( 'view' ).remove();
    659659                                bp.Nouveau.Messages.views.remove( { id: 'compose', view: form } );
     
    690690                                this.views.add( view );
    691691                        }, this );
    692692
    693                         // Load threads for the active view
     693                        // Load threads for the active view.
    694694                        this.requestThreads();
    695695
    696696                        this.collection.on( 'reset', this.cleanContent, this );
     
    848848                singleSelect: function( event ) {
    849849                        var isChecked = $( event.currentTarget ).prop( 'checked' );
    850850
    851                         // To avoid infinite loops
     851                        // To avoid infinite loops.
    852852                        this.model.set( 'checked', isChecked, { silent: true } );
    853853
    854854                        var hasChecked = false;
     
    894894                },
    895895
    896896                render: function() {
    897                         // Only render if we have some content to render
     897                        // Only render if we have some content to render.
    898898                        if ( _.isUndefined( this.model ) || true !== this.model.get( 'active' ) ) {
    899899                                return;
    900900                        }
     
    944944
    945945                        mid = model.get( 'id' );
    946946
    947                         // Open the full conversation
     947                        // Open the full conversation.
    948948                        if ( 'view' === action ) {
    949949                                bp.Nouveau.Messages.router.navigate(
    950950                                        'view/' + mid + '/',
     
    973973                                bp.Nouveau.Messages.displayFeedback( response.feedback, response.type );
    974974
    975975                                if ( 'delete' === action || ( 'starred' === self.collection.options.box && 'unstar' === action ) ) {
    976                                         // Remove from the list of messages
     976                                        // Remove from the list of messages.
    977977                                        self.collection.remove( model.get( 'id' ) );
    978978
    979                                         // And Requery
     979                                        // And Requery.
    980980                                        self.collection.fetch( {
    981981                                                data : _.pick( self.collection.options, ['box', 'search_terms', 'page'] )
    982982                                        } );
     
    10491049                                return model.get( 'id' );
    10501050                        } );
    10511051
    1052                         // Default to thread ids
     1052                        // Default to thread ids.
    10531053                        ids = thread_ids;
    10541054
    1055                         // We need to get the starred ids
     1055                        // We need to get the starred ids.
    10561056                        if ( 'star' === action || 'unstar' === action ) {
    10571057                                ids = _.map( threads, function( model ) {
    10581058                                        return model.get( 'starred_id' );
     
    10641064                                        };
    10651065                                }
    10661066
    1067                                 // Map with first message starred in the thread
     1067                                // Map with first message starred in the thread.
    10681068                                attr = 'starred_id';
    10691069                        }
    10701070
    1071                         // Message id to Thread id
     1071                        // Message id to Thread id.
    10721072                        var m_tid = _.object( _.map( threads, function (model) {
    10731073                            return [model.get( attr ), model.get( 'id' )];
    10741074                        } ) );
     
    10841084                                bp.Nouveau.Messages.displayFeedback( response.feedback, response.type );
    10851085
    10861086                                if ( 'delete' === action || ( 'starred' === self.collection.options.box && 'unstar' === action ) ) {
    1087                                         // Remove from the list of messages
     1087                                        // Remove from the list of messages.
    10881088                                        self.collection.remove( thread_ids );
    10891089
    1090                                         // And Requery
     1090                                        // And Requery.
    10911091                                        self.collection.fetch( {
    10921092                                                data : _.pick( self.collection.options, ['box', 'search_terms', 'page'] )
    10931093                                        } );
    10941094                                } else if ( response.messages ) {
    1095                                         // Update each model attributes
     1095                                        // Update each model attributes.
    10961096                                        _.each( response.messages, function( updated, id ) {
    10971097                                                var model = self.collection.get( m_tid[id] );
    10981098                                                model.set( updated );
     
    12441244                                // Remove previous feedback.
    12451245                                bp.Nouveau.Messages.removeFeedback();
    12461246
    1247                                 // Display the feedback
     1247                                // Display the feedback.
    12481248                                bp.Nouveau.Messages.displayFeedback( response.feedback, response.type );
    12491249                        } ).fail( function( response ) {
    12501250                                // Remove previous feedback.
     
    12811281                template : bp.template( 'bp-messages-single' ),
    12821282
    12831283                initialize: function() {
    1284                         // Load Messages
     1284                        // Load Messages.
    12851285                        this.requestMessages();
    12861286
    1287                         // Init a reply
     1287                        // Init a reply.
    12881288                        this.reply = new bp.Models.messageThread();
    12891289
    12901290                        this.collection.on( 'add', this.addMessage, this );
    12911291
    1292                         // Add the editor view
     1292                        // Add the editor view.
    12931293                        this.views.add( '#bp-message-content', new bp.Views.messageEditor() );
    12941294                },
    12951295
     
    13661366                replySent: function( response ) {
    13671367                        var reply = this.collection.parse( response );
    13681368
    1369                         // Reset the form
     1369                        // Reset the form.
    13701370                        tinyMCE.activeEditor.setContent( '' );
    13711371                        this.reply.set( 'sending', false );
    13721372
     
    13991399                                return;
    14001400                        }
    14011401
    1402                         // Try to get the corresponding thread
     1402                        // Try to get the corresponding thread.
    14031403                        var thread = bp.Nouveau.Messages.threads.get( thread_id );
    14041404
    14051405                        if ( undefined === thread ) {
     
    14261426                }
    14271427        } );
    14281428
    1429         // Launch BP Nouveau Groups
     1429        // Launch BP Nouveau Groups.
    14301430        bp.Nouveau.Messages.start();
    14311431
    14321432} )( bp, jQuery );
  • src/bp-templates/bp-nouveau/js/buddypress-notifications.js

     
    44
    55( function( exports, $ ) {
    66
    7         // Bail if not set
     7        // Bail if not set.
    88        if ( typeof BP_Nouveau === 'undefined' ) {
    99                return;
    1010        }
     
    2424                start: function() {
    2525                        this.setupGlobals();
    2626
    27                         // Listen to events ("Add hooks!")
     27                        // Listen to events ("Add hooks!").
    2828                        this.addListeners();
    2929                },
    3030
     
    4747                        // Trigger Notifications order request.
    4848                        $( '#buddypress [data-bp-list="notifications"]' ).on( 'click', '[data-bp-notifications-order]', bp.Nouveau, this.sortNotifications );
    4949
    50                         // Enable the Apply Button once the bulk action is selected
     50                        // Enable the Apply Button once the bulk action is selected.
    5151                        $( '#buddypress [data-bp-list="notifications"]' ).on( 'change', '#notification-select', this.enableBulkSubmit );
    5252
    53                         // Select all displayed notifications
     53                        // Select all displayed notifications.
    5454                        $( '#buddypress [data-bp-list="notifications"]' ).on( 'click', '#select-all-notifications', this.selectAll );
    5555
    56                         // Reset The filter before unload
     56                        // Reset The filter before unload.
    5757                        $( window ).on( 'unload', this.resetFilter );
    5858                },
    5959
     
    7272                                $( '[data-bp-notifications-order="DESC"]' ).hide();
    7373                        }
    7474
    75                         // Make sure a 'Bulk Action' is selected before submitting the form
     75                        // Make sure a 'Bulk Action' is selected before submitting the form.
    7676                        $( '#notification-bulk-manage' ).prop( 'disabled', 'disabled' );
    7777                },
    7878
     
    134134                }
    135135        };
    136136
    137         // Launch BP Nouveau Notifications
     137        // Launch BP Nouveau Notifications.
    138138        bp.Nouveau.Notifications.start();
    139139
    140140} )( bp, jQuery );