Skip to:
Content

BuddyPress.org

Changeset 12873


Ignore:
Timestamp:
03/23/2021 11:31:33 PM (7 months ago)
Author:
dcavins
Message:

BP_Invitation: Increment date_modified on key actions.

When an invitation is sent or accepted, the date_modified
should be updated. However, if a date_modified has been
specified in the invitation or request creation function
(as we do in our unit test functions), the date_modified
should be set to that, even if notices are sent (now) as
part of the creation process.

Ensure that BP_Invitation::get_query_clauses() handles specified date_modified data updates.

Fixes #8444.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-core/classes/class-bp-invitation-manager.php

    r12793 r12873  
    140140        // "Send" the invite if necessary.
    141141        if ( $invite_id && $r['send_invite'] ) {
    142             $sent = $this->send_invitation_by_id( $invite_id );
     142            $sent = $this->send_invitation_by_id( $invite_id, $r );
    143143            if ( ! $sent ) {
    144144                return false;
     
    155155     * @access public
    156156     *
    157      * @param int $invitation_id ID of invitation to send.
     157     * @param int   $invitation_id ID of invitation to send.
     158     * @param array $args          See BP_Invitation::mark_sent().
    158159     *
    159160     * @return int|bool The number of rows updated, or false on error.
    160161     */
    161     public function send_invitation_by_id( $invitation_id = 0 ) {
     162    public function send_invitation_by_id( $invitation_id = 0, $args = array() ) {
    162163        $updated = false;
    163164
     
    197198        $this->run_send_action( $invitation );
    198199
    199         $updated = BP_Invitation::mark_sent( $invitation->id );
     200        $updated = BP_Invitation::mark_sent( $invitation->id, $args );
    200201
    201202        return $updated;
     
    306307     * @access public
    307308     *
    308      * @param int $request_id ID of request to send.
     309     * @param int   $request_id ID of request to send.
     310     * @param array $args       See BP_Invitation::mark_sent().
    309311     *
    310312     * @return int|bool The number of rows updated, or false on error.
    311313     */
    312     public function send_request_notification_by_id( $request_id = 0 ) {
     314    public function send_request_notification_by_id( $request_id = 0, $args = array() ) {
    313315        $updated = false;
    314316
     
    326328         * A sent invitation + a request = acceptance.
    327329         */
    328         $args = array(
     330        $invite_args = array(
    329331            'user_id'           => $request->user_id,
    330332            'invitee_email'     => $request->invitee_email,
     
    333335            'invite_sent'       => 'sent'
    334336        );
    335         $invites = $this->invitation_exists( $args );
     337        $invites = $this->invitation_exists( $invite_args );
    336338
    337339        if ( ! empty( $invites ) ) {
    338340            // Accept the request.
    339             return $this->accept_invitation( $args );
     341            return $this->accept_invitation( $invite_args );
    340342        }
    341343
     
    343345        $this->run_send_action( $request );
    344346
    345         $updated = BP_Invitation::mark_sent( $request->id );
     347        $updated = BP_Invitation::mark_sent( $request->id, $args );
    346348
    347349        return $updated;
     
    453455     *      accepted update/where arguments.
    454456     *
    455      * @param array $update_args Associative array of fields to update,
    456      *              and the values to update them to. Of the format
    457      *              array( 'user_id' => 4 )
     457     * @param array $args {
     458     *     Invitation characteristics. Some basic info is required to accept an invitation,
     459     *     because we'll need to accept all similar invitations and requests.
     460     *
     461     *     @type int    $user_id           User ID of the invitee.
     462     *                                     Either 'user_id' or 'invitee_email' is required.
     463     *     @type string $invitee_email     Email address of the invitee.
     464     *                                     Either 'user_id' or 'invitee_email' is required.
     465     *     @type int    $item_id           Item ID of the invitation to accept.
     466     *     @type int    $secondary_item_id Optional. Secondary item ID if needed.
     467     *     @type string $invite_sent       Optional. Defaults to only allowing the
     468     *                                     acceptance of sent invitations.
     469     *     @type string $date_modified     Modified time in 'Y-m-d h:i:s' format, GMT.
     470     *                                     Defaults to current time if not specified.
     471     * }
    458472     *
    459473     * @return int|bool Number of rows updated on success, false on failure.
     
    461475     public function accept_invitation( $args = array() ) {
    462476
    463         /*
    464          * Some basic info is required to accept an invitation,
    465          * because we'll need to mark all similar invitations and requests.
    466          * The following, except the optional 'secondary_item_id', are required.
    467          */
    468477        $r = bp_parse_args( $args, array(
    469478            'user_id'           => 0,
     
    472481            'secondary_item_id' => null,
    473482            'invite_sent'       => 'sent',
     483            'date_modified'     => bp_core_current_time(),
    474484        ), 'accept_invitation' );
    475485        $r['class'] = $this->class_name;
     
    502512     *      accepted update/where arguments.
    503513     *
    504      * @param array $update_args Associative array of fields to update,
    505      *              and the values to update them to. Of the format
    506      *              array( 'user_id' => 4 )
     514     * @param array $args {
     515     *     Invitation characteristics. Some basic info is required to accept an invitation,
     516     *     because we'll need to accept all similar invitations and requests.
     517     *
     518     *     @type int    $user_id           User ID of the invitee.
     519     *     @type int    $item_id           Item ID of the invitation to accept.
     520     *     @type int    $secondary_item_id Optional. Secondary item ID if needed.
     521     *     @type string $date_modified     Modified time in 'Y-m-d h:i:s' format, GMT.
     522     *                                     Defaults to current time if not specified.
     523     * }
    507524     *
    508525     * @return bool Number of rows updated on success, false on failure.
    509526     */
    510527     public function accept_request( $args = array() ) {
    511         /*
    512          * Some basic info is required to accept an invitation,
    513          * because we'll need to accept all similar invitations and requests.
    514          * The following, except the optional 'secondary_item_id', are required.
    515          */
     528
    516529        $r = bp_parse_args( $args, array(
    517530            'user_id'           => 0,
    518531            'item_id'           => null,
    519532            'secondary_item_id' => null,
     533            'date_modified'     => bp_core_current_time(),
    520534        ), 'accept_request' );
    521535        $r['class'] = $this->class_name;
     
    619633     * @since 5.0.0
    620634     *
    621      * @param int $id The ID of the invitation to mark as sent.
     635     * @see BP_Invitation::mark_accepted()
     636     *      for a description of arguments.
    622637     * @return bool True on success, false on failure.
    623638     */
    624     public function mark_accepted_by_id( $id ) {
    625         return BP_Invitation::mark_accepted( $id );
     639    public function mark_accepted_by_id( $id, $args ) {
     640        return BP_Invitation::mark_accepted( $id, $args );
    626641    }
    627642
  • trunk/src/bp-core/classes/class-bp-invitation.php

    r12867 r12873  
    639639                $where_clauses['format'][] = '%d';
    640640            }
     641        }
     642
     643        // date_modified
     644        if ( ! empty( $args['date_modified'] ) ) {
     645            $where_clauses['data']['date_modified'] = $args['date_modified'];
     646            $where_clauses['format'][] = '%s';
    641647        }
    642648
     
    988994     * @since 5.0.0
    989995     *
    990      * @param int $id The ID of the invitation to mark as sent.
    991      */
    992     public static function mark_sent( $id = 0 ) {
     996     * @param int   $id   The ID of the invitation to mark as sent.
     997     * @param array $args {
     998     *     Optional. Invitation characteristics used
     999     *     to override certain sending behaviors.
     1000     *
     1001     *     @type string $date_modified Modified time in 'Y-m-d h:i:s' format, GMT.
     1002     *                                 Defaults to current time if not specified.
     1003     * }
     1004     * @return int|bool The number of rows updated, or false on error.
     1005     */
     1006    public static function mark_sent( $id = 0, $args = array() ) {
    9931007
    9941008        if ( ! $id ) {
     
    9981012        // Values to be updated.
    9991013        $update_args = array(
    1000             'invite_sent' => 'sent',
     1014            'invite_sent'   => 'sent',
     1015            'date_modified' => bp_core_current_time(),
    10011016        );
     1017        // Respect a specified `date-modified`.
     1018        if ( ! empty( $args['date_modified'] ) ) {
     1019            $update_args['date_modified'] = $args['date_modified'];
     1020        }
    10021021
    10031022        // WHERE clauses.
     
    10151034     * @since 5.0.0
    10161035     *
    1017      * @param array $args See BP_Invitation::update().
     1036     * @param array $args See BP_Invitation::update().
     1037     * @return int|bool The number of rows updated, or false on error.
    10181038     */
    10191039    public static function mark_sent_by_data( $args ) {
     
    10211041        // Values to be updated.
    10221042        $update_args = array(
    1023             'invite_sent' => 'sent',
     1043            'invite_sent'   => 'sent',
     1044            'date_modified' => bp_core_current_time(),
    10241045        );
     1046        // Respect a specified `date-modified`.
     1047        if ( ! empty( $args['date_modified'] ) ) {
     1048            $update_args['date_modified'] = $args['date_modified'];
     1049        }
    10251050
    10261051        return self::update( $update_args, $args );
     
    10341059     * @since 5.0.0
    10351060     *
    1036      * @param int $id The ID of the invitation to mark as sent.
    1037      */
    1038     public static function mark_accepted( $id = 0 ) {
     1061     * @param int   $id   The ID of the invitation to mark as sent.
     1062     * @param array $args {
     1063     *     Optional. Invitation characteristics used
     1064     *     to override certain sending behaviors.
     1065     *
     1066     *     @type string $date_modified Modified time in 'Y-m-d h:i:s' format, GMT.
     1067     *                                 Defaults to current time if not specified.
     1068     * }
     1069     * @return int|bool The number of rows updated, or false on error.
     1070     */
     1071    public static function mark_accepted( $id = 0, $args = array() ) {
    10391072
    10401073        if ( ! $id ) {
     
    10441077        // Values to be updated.
    10451078        $update_args = array(
    1046             'accepted' => 'accepted',
     1079            'accepted'      => 'accepted',
     1080            'date_modified' => bp_core_current_time(),
    10471081        );
     1082        // Respect a specified `date-modified`.
     1083        if ( ! empty( $args['date_modified'] ) ) {
     1084            $update_args['date_modified'] = $args['date_modified'];
     1085        }
    10481086
    10491087        // WHERE clauses.
     
    10611099     * @since 5.0.0
    10621100     *
    1063      * @param array $args See BP_Invitation::update().
     1101     * @param array $args See BP_Invitation::update().
     1102     * @return int|bool The number of rows updated, or false on error.
    10641103     */
    10651104    public static function mark_accepted_by_data( $args ) {
     
    10671106        // Values to be updated.
    10681107        $update_args = array(
    1069             'accepted' => 'accepted',
     1108            'accepted'      => 'accepted',
     1109            'date_modified' => bp_core_current_time(),
    10701110        );
     1111        // Respect a specified `date-modified`.
     1112        if ( ! empty( $args['date_modified'] ) ) {
     1113            $update_args['date_modified'] = $args['date_modified'];
     1114        }
    10711115
    10721116        return self::update( $update_args, $args );
  • trunk/src/bp-groups/bp-groups-functions.php

    r12852 r12873  
    20452045    // If a new request was created, send the emails.
    20462046    if ( $request_id && is_int( $request_id ) ) {
    2047         $invites_class->send_request_notification_by_id( $request_id );
     2047        $invites_class->send_request_notification_by_id( $request_id, $r );
    20482048        $admins = groups_get_group_admins( $r['group_id'] );
    20492049
  • trunk/tests/phpunit/testcases/core/invitations.php

    r12866 r12873  
    333333    }
    334334
     335    public function test_bp_invitations_add_request_with_date_modified() {
     336        $old_current_user = get_current_user_id();
     337
     338        $u1 = $this->factory->user->create();
     339        $this->set_current_user( $u1 );
     340
     341        $invites_class = new BPTest_Invitation_Manager_Extension();
     342
     343        $time = gmdate( 'Y-m-d H:i:s', time() - 100 );
     344        $args = array(
     345            'user_id'           => $u1,
     346            'item_id'           => 7,
     347            'date_modified'     => $time,
     348        );
     349        $r1 = $invites_class->add_request( $args );
     350
     351        $req = new BP_Invitation( $r1 );
     352        $this->assertEquals( $time, $req->date_modified );
     353
     354        $this->set_current_user( $old_current_user );
     355    }
     356
     357    public function test_bp_invitations_add_invite_with_date_modified() {
     358        $old_current_user = get_current_user_id();
     359
     360        $u1 = $this->factory->user->create();
     361        $u2 = $this->factory->user->create();
     362        $this->set_current_user( $u1 );
     363
     364        $invites_class = new BPTest_Invitation_Manager_Extension();
     365        $time = gmdate( 'Y-m-d H:i:s', time() - 100 );
     366
     367        // Create an invitation.
     368        $invite_args = array(
     369            'user_id'           => $u2,
     370            'inviter_id'        => $u1,
     371            'item_id'           => 1,
     372            'send_invite'       => 1,
     373            'date_modified'     => $time,
     374        );
     375        $i1 = $invites_class->add_invitation( $invite_args );
     376
     377        $inv = new BP_Invitation( $i1 );
     378        $this->assertEquals( $time, $inv->date_modified );
     379
     380        $this->set_current_user( $old_current_user );
     381    }
     382
    335383}
Note: See TracChangeset for help on using the changeset viewer.