Skip to:
Content

BuddyPress.org

Changeset 9846


Ignore:
Timestamp:
05/06/2015 11:42:53 PM (11 years ago)
Author:
r-a-y
Message:

Messages: Introduce starring private messages feature.

This commit:

  • Registers the 'star' feature into the BP Messages component and dynamically loads the bp-messages-star.php file if the feature is active. By default, the feature is active, but can be disabled with the following snippet: 'bp_is_messages_star_active', '__return_false' );
  • Adds a 'Starred' box to the messages user subnav
  • Adds an icon to star or unstar a message in a message or message thread loop
  • Adds the 'Add star' and 'Remove star' options to the message thread 'Bulk Actions' dropdown menu
  • Adds accompanying CSS and JS to the bp-legacy template pack.

Fixes #6331.

Location:
trunk
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-messages/bp-messages-loader.php

    r9825 r9846  
    4040                        buddypress()->plugin_dir,
    4141                        array(
    42                                 'adminbar_myaccount_order' => 50
     42                                'adminbar_myaccount_order' => 50,
     43                                'features'                 => array( 'star' )
    4344                        )
    4445                );
     
    6869                );
    6970
     71                // Conditional includes
     72                if ( bp_is_active( $this->id, 'star' ) ) {
     73                        $includes[] = 'star';
     74                }
     75
    7076                parent::includes( $includes );
    7177        }
     
    167173                );
    168174
     175                if ( bp_is_active( $this->id, 'star' ) ) {
     176                        $sub_nav[] = array(
     177                                'name'            => __( 'Starred', 'buddypress' ),
     178                                'slug'            => bp_get_messages_starred_slug(),
     179                                'parent_url'      => $messages_link,
     180                                'parent_slug'     => $this->slug,
     181                                'screen_function' => 'bp_messages_star_screen',
     182                                'position'        => 11,
     183                                'user_has_access' => bp_core_can_edit_settings()
     184                        );
     185                }
     186
    169187                $sub_nav[] = array(
    170188                        'name'            => __( 'Sent', 'buddypress' ),
     
    243261                                'href'   => trailingslashit( $messages_link . 'inbox' )
    244262                        );
     263
     264                        // Starred
     265                        if ( bp_is_active( $this->id, 'star' ) ) {
     266                                $wp_admin_nav[] = array(
     267                                        'parent' => 'my-account-' . $this->id,
     268                                        'id'     => 'my-account-' . $this->id . '-starred',
     269                                        'title'  => __( 'Starred', 'buddypress' ),
     270                                        'href'   => trailingslashit( $messages_link . bp_get_messages_starred_slug() )
     271                                );
     272                        }
    245273
    246274                        // Sent Messages
  • trunk/src/bp-messages/bp-messages-template.php

    r9830 r9846  
    12911291                <option value="unread"><?php _e( 'Mark unread', 'buddypress' ); ?></option>
    12921292                <option value="delete"><?php _e( 'Delete', 'buddypress' ); ?></option>
     1293                <?php
     1294                        /**
     1295                         * Action to add additional options to the messages bulk management dropdown.
     1296                         *
     1297                         * @since BuddyPress (2.3.0)
     1298                         */
     1299                        do_action( 'bp_messages_bulk_management_dropdown' );
     1300                ?>
    12931301        </select>
    12941302        <input type="submit" id="messages-bulk-manage" class="button action" value="<?php esc_attr_e( 'Apply', 'buddypress' ); ?>">
  • trunk/src/bp-templates/bp-legacy/buddypress-functions.php

    r9838 r9846  
    177177                        'messages_send_reply'           => 'bp_legacy_theme_ajax_messages_send_reply',
    178178                );
     179
     180                // Conditional actions
     181                if ( bp_is_active( 'messages', 'star' ) ) {
     182                        $actions['messages_star'] = 'bp_legacy_theme_ajax_messages_star_handler';
     183                }
    179184
    180185                /**
     
    308313                        wp_enqueue_script( $asset['handle'] . '-password-verify', $asset['location'], $dependencies, $this->version);
    309314                }
     315
     316                // Star private messages
     317                if ( bp_is_active( 'messages', 'star' ) && bp_is_user_messages() ) {
     318                        wp_localize_script( $asset['handle'], 'BP_PM_Star', array(
     319                                'strings' => array(
     320                                        'text_unstar'  => __( 'Unstar', 'buddypress' ),
     321                                        'text_star'    => __( 'Star', 'buddypress' ),
     322                                        'title_unstar' => __( 'Starred', 'buddypress' ),
     323                                        'title_star'   => __( 'Not starred', 'buddypress' ),
     324                                        'title_unstar_thread' => __( 'Remove all starred messages in this thread', 'buddypress' ),
     325                                        'title_star_thread'   => __( 'Star the first message in this thread', 'buddypress' ),
     326                                ),
     327                                'is_single_thread' => (int) bp_is_messages_conversation(),
     328                                'star_counter'     => 0,
     329                                'unstar_counter'   => 0
     330                        ) );
     331                }
    310332        }
    311333
     
    16881710        exit;
    16891711}
     1712
     1713/**
     1714 * AJAX callback to set a message's star status.
     1715 *
     1716 * @since BuddyPress (2.3.0)
     1717 */
     1718function bp_legacy_theme_ajax_messages_star_handler() {
     1719        if ( false === bp_is_active( 'messages', 'star' ) || empty( $_POST['message_id'] ) ) {
     1720                return;
     1721        }
     1722
     1723        // Check nonce
     1724        check_ajax_referer( 'bp-messages-star-' . (int) $_POST['message_id'], 'nonce' );
     1725
     1726        // Check capability
     1727        if ( ! is_user_logged_in() || ! bp_core_can_edit_settings() ) {
     1728                return;
     1729        }
     1730
     1731        if ( true === bp_messages_star_set_action( array(
     1732                'action'     => $_POST['star_status'],
     1733                'message_id' => (int) $_POST['message_id'],
     1734                'bulk'       => ! empty( $_POST['bulk'] ) ? true : false
     1735         ) ) ) {
     1736                echo '1';
     1737                die();
     1738        }
     1739
     1740        echo '-1';
     1741        die();
     1742}
  • trunk/src/bp-templates/bp-legacy/buddypress/members/single/messages/messages-loop.php

    r9840 r9846  
    6262                                        do_action( 'bp_messages_inbox_list_header' ); ?>
    6363
     64                                        <?php if ( bp_is_active( 'messages', 'star' ) ) : ?>
     65                                                <th scope="col" class="thread-star"><span class="message-action-star"><span class="icon"></span> <span class="screen-reader-text"><?php _e( 'Star', 'buddypress' ); ?></span></span></th>
     66                                        <?php endif; ?>
     67
    6468                                        <th scope="col" class="thread-options"><?php _e( 'Actions', 'buddypress' ); ?></th>
    6569                                </tr>
     
    107111                                                 */
    108112                                                do_action( 'bp_messages_inbox_list_item' ); ?>
     113
     114                                                <?php if ( bp_is_active( 'messages', 'star' ) ) : ?>
     115                                                        <td class="thread-star">
     116                                                                <?php bp_the_message_star_action_link( array( 'thread_id' => bp_get_message_thread_id() ) ); ?>
     117                                                        </td>
     118                                                <?php endif; ?>
    109119
    110120                                                <td class="thread-options">
  • trunk/src/bp-templates/bp-legacy/buddypress/members/single/messages/single.php

    r9830 r9846  
    7070                                        <span class="activity"><?php bp_the_thread_message_time_since(); ?></span>
    7171
     72                                        <?php if ( bp_is_active( 'messages', 'star' ) ) : ?>
     73                                                <div class="message-star-actions">
     74                                                        <?php bp_the_message_star_action_link(); ?>
     75                                                </div>
     76                                        <?php endif; ?>
     77
    7278                                        <?php
    7379
  • trunk/src/bp-templates/bp-legacy/css/buddypress-rtl.css

    r9832 r9846  
    14491449}
    14501450
     1451.message-metadata {
     1452        position: relative;
     1453}
     1454.message-star-actions {
     1455        position: absolute;
     1456        left: 0;
     1457        top: 0;
     1458}
     1459a.message-action-star,
     1460a.message-action-unstar {
     1461        text-decoration: none;
     1462        outline: none;
     1463}
     1464a.message-action-star {
     1465        opacity: .7;
     1466}
     1467a.message-action-star:hover {
     1468        opacity: 1;
     1469}
     1470.message-action-star span.icon:before,
     1471.message-action-unstar span.icon:before {
     1472        font-family: dashicons;
     1473        font-size: 18px;
     1474}
     1475.message-action-star span.icon:before {
     1476        color: #aaa;
     1477        content: "\f154";
     1478}
     1479.message-action-unstar span.icon:before {
     1480        color: #FCDD77;
     1481        content: "\f155";
     1482}
     1483
    14511484/*--------------------------------------------------------------
    145214853.10 - Extended Profiles
  • trunk/src/bp-templates/bp-legacy/css/buddypress.css

    r9828 r9846  
    14491449}
    14501450
     1451.message-metadata {
     1452        position: relative;
     1453}
     1454.message-star-actions {
     1455        position: absolute;
     1456        right: 0;
     1457        top: 0;
     1458}
     1459a.message-action-star,
     1460a.message-action-unstar {
     1461        text-decoration: none;
     1462        outline: none;
     1463}
     1464a.message-action-star {
     1465        opacity: .7;
     1466}
     1467a.message-action-star:hover {
     1468        opacity: 1;
     1469}
     1470.message-action-star span.icon:before,
     1471.message-action-unstar span.icon:before {
     1472        font-family: dashicons;
     1473        font-size: 18px;
     1474}
     1475.message-action-star span.icon:before {
     1476        color: #aaa;
     1477        content: "\f154";
     1478}
     1479.message-action-unstar span.icon:before {
     1480        color: #FCDD77;
     1481        content: "\f155";
     1482}
     1483
    14511484/*--------------------------------------------------------------
    145214853.10 - Extended Profiles
  • trunk/src/bp-templates/bp-legacy/js/buddypress.js

    r9829 r9846  
    15781578                jq('#messages-bulk-manage').attr('disabled', jq(this).val().length <= 0);
    15791579        });
     1580
     1581        /* Star action function */
     1582        starAction = function() {
     1583                var link = jq(this);
     1584
     1585                jq.post( ajaxurl, {
     1586                        action: 'messages_star',
     1587                        'message_id': link.data('message-id'),
     1588                        'star_status': link.data('star-status'),
     1589                        'nonce': link.data('star-nonce'),
     1590                        'bulk': link.data('star-bulk')
     1591                },
     1592                function(response) {
     1593                        if ( 1 === parseInt( response, 10 ) ) {
     1594                                if ( 'unstar' === link.data('star-status') ) {
     1595                                        link.data('star-status', 'star');
     1596                                        link.removeClass('message-action-unstar').addClass('message-action-star');
     1597                                        link.find('.bp-screen-reader-text').text( BP_PM_Star.strings.text_star );
     1598
     1599                                        if ( 1 === BP_PM_Star.is_single_thread ) {
     1600                                                link.prop('title', BP_PM_Star.strings.title_star );
     1601                                        } else {
     1602                                                link.prop('title', BP_PM_Star.strings.title_star_thread );
     1603                                        }
     1604
     1605                                } else {
     1606                                        link.data('star-status', 'unstar');
     1607                                        link.removeClass('message-action-star').addClass('message-action-unstar');
     1608                                        link.find('.bp-screen-reader-text').text(BP_PM_Star.strings.text_unstar);
     1609
     1610                                        if ( 1 === BP_PM_Star.is_single_thread ) {
     1611                                                link.prop('title', BP_PM_Star.strings.title_unstar );
     1612                                        } else {
     1613                                                link.prop('title', BP_PM_Star.strings.title_unstar_thread );
     1614                                        }
     1615                                }
     1616                        }
     1617                });
     1618                return false;
     1619        };
     1620
     1621        /* Star actions */
     1622        jq('#message-threads').on('click', 'td.thread-star a', starAction );
     1623        jq('#message-thread').on('click', '.message-star-actions a', starAction );
     1624
     1625        /* Star bulk manage - Show only the valid action based on the starred item. */
     1626        jq('#message-threads td.bulk-select-check :checkbox').on('change', function() {
     1627                var box = jq(this),
     1628                        star = box.closest('tr').find('.thread-star a');
     1629
     1630                if ( box.prop('checked') ) {
     1631                        if( 'unstar' === star.data('star-status') ) {
     1632                                BP_PM_Star.star_counter++;
     1633                        } else {
     1634                                BP_PM_Star.unstar_counter++;
     1635                        }
     1636                } else {
     1637                        if( 'unstar' === star.data('star-status') ) {
     1638                                BP_PM_Star.star_counter--;
     1639                        } else {
     1640                                BP_PM_Star.unstar_counter--;
     1641                        }
     1642                }
     1643
     1644                if ( BP_PM_Star.star_counter > 0 && parseInt( BP_PM_Star.unstar_counter, 10 ) === 0 ) {
     1645                        jq('option[value="star"]').hide();
     1646                } else {
     1647                        jq('option[value="star"]').show();
     1648                }
     1649
     1650                if ( BP_PM_Star.unstar_counter > 0 && parseInt( BP_PM_Star.star_counter, 10 ) === 0 ) {
     1651                        jq('option[value="unstar"]').hide();
     1652                } else {
     1653                        jq('option[value="unstar"]').show();
     1654                }
     1655        });
     1656
     1657        /** Notifications **********************************************/
    15801658
    15811659        /* Selecting/Deselecting all notifications */
Note: See TracChangeset for help on using the changeset viewer.