Skip to:
Content

BuddyPress.org

Ticket #8444: 8444.patch

File 8444.patch, 11.0 KB (added by imath, 7 months ago)
  • src/bp-core/classes/class-bp-invitation-manager.php

    diff --git src/bp-core/classes/class-bp-invitation-manager.php src/bp-core/classes/class-bp-invitation-manager.php
    index a8bb047ce..aca7b6089 100644
    abstract class BP_Invitation_Manager { 
    139139
    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, $args );
    143143                        if ( ! $sent ) {
    144144                                return false;
    145145                        }
    abstract class BP_Invitation_Manager { 
    154154         * @since 5.0.0
    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          Invitation characteristics used
     159         *                             to override certain sending behaviors.
    158160         *
    159161         * @return int|bool The number of rows updated, or false on error.
    160162         */
    161         public function send_invitation_by_id( $invitation_id = 0 ) {
     163        public function send_invitation_by_id( $invitation_id = 0, $args = array() ) {
    162164                $updated = false;
    163165
    164166                $invitation = new BP_Invitation( $invitation_id );
    abstract class BP_Invitation_Manager { 
    196198                // Perform the send action.
    197199                $this->run_send_action( $invitation );
    198200
    199                 $updated = BP_Invitation::mark_sent( $invitation->id );
     201                $updated = BP_Invitation::mark_sent( $invitation->id, $args );
    200202
    201203                return $updated;
    202204        }
    abstract class BP_Invitation_Manager { 
    305307         * @since 5.0.0
    306308         * @access public
    307309         *
    308          * @param int $request_id ID of request to send.
     310         * @param int   $request_id ID of request to send.
     311         * @param array $args       Invitation characteristics used
     312         *                          to override certain sending behaviors.
    309313         *
    310314         * @return int|bool The number of rows updated, or false on error.
    311315         */
    312         public function send_request_notification_by_id( $request_id = 0 ) {
     316        public function send_request_notification_by_id( $request_id = 0, $args = array() ) {
    313317                $updated = false;
    314318
    315319                $request = new BP_Invitation( $request_id );
    abstract class BP_Invitation_Manager { 
    342346                // Perform the send action.
    343347                $this->run_send_action( $request );
    344348
    345                 $updated = BP_Invitation::mark_sent( $request->id );
     349                $updated = BP_Invitation::mark_sent( $request->id, $args );
    346350
    347351                return $updated;
    348352        }
    abstract class BP_Invitation_Manager { 
    485489                $success = $this->run_acceptance_action( 'invite', $r );
    486490                if ( $success ) {
    487491                        // Mark invitations & requests to this item for this user.
    488                         $this->mark_accepted( $r );
     492                        $this->mark_accepted( $r, $args );
    489493
    490494                        // Allow plugins an opportunity to act on the change.
    491495                        do_action( 'bp_invitations_accepted_invite', $r );
    abstract class BP_Invitation_Manager { 
    531535                $success = $this->run_acceptance_action( 'request', $r );
    532536                if ( $success ) {
    533537                        // Update/Delete all related invitations & requests to this item for this user.
    534                         $this->mark_accepted( $r );
     538                        $this->mark_accepted( $r, $args );
    535539
    536540                        // Allow plugins an opportunity to act on the change.
    537541                        do_action( 'bp_invitations_accepted_request', $r );
    abstract class BP_Invitation_Manager { 
    618622         *
    619623         * @since 5.0.0
    620624         *
    621          * @param int $id The ID of the invitation to mark as sent.
     625         * @see BP_Invitation::mark_accepted()
     626         *      for a description of arguments.
    622627         * @return bool True on success, false on failure.
    623628         */
    624         public function mark_accepted_by_id( $id ) {
    625                 return BP_Invitation::mark_accepted( $id );
     629        public function mark_accepted_by_id( $id, $args ) {
     630                return BP_Invitation::mark_accepted( $id, $args );
    626631        }
    627632
    628633        /**
    abstract class BP_Invitation_Manager { 
    635640         * @see BP_Invitation::mark_accepted_by_data()
    636641         *      for a description of arguments.
    637642         */
    638         public function mark_accepted( $args ) {
     643        public function mark_accepted( $args, $passed_args ) {
    639644                $args['class'] = $this->class_name;
    640                 return BP_Invitation::mark_accepted_by_data( $args );
     645                return BP_Invitation::mark_accepted_by_data( $args, $passed_args );
    641646        }
    642647
    643648        /** Delete ********************************************************************/
  • src/bp-core/classes/class-bp-invitation.php

    diff --git src/bp-core/classes/class-bp-invitation.php src/bp-core/classes/class-bp-invitation.php
    index b7ca0d7eb..f8a2f7226 100644
    class BP_Invitation { 
    640640                        }
    641641                }
    642642
     643                // date_modified
     644                if ( ! empty( $args['date_modified'] ) ) {
     645                        $where_clauses['data']['date_modified'] = $args['date_modified'];
     646                        $where_clauses['format'][] = '%s';
     647                }
     648
    643649                return $where_clauses;
    644650        }
    645651
    class BP_Invitation { 
    987993         *
    988994         * @since 5.0.0
    989995         *
    990          * @param int $id The ID of the invitation to mark as sent.
     996         * @param int   $id   The ID of the invitation to mark as sent.
     997         * @param array $args Invitation characteristics used
     998         *                    to override certain sending behaviors.
    991999         */
    992         public static function mark_sent( $id = 0 ) {
     1000        public static function mark_sent( $id = 0, $args = array() ) {
    9931001
    9941002                if ( ! $id ) {
    9951003                        return false;
    class BP_Invitation { 
    9971005
    9981006                // Values to be updated.
    9991007                $update_args = array(
    1000                         'invite_sent' => 'sent',
     1008                        'invite_sent'   => 'sent',
     1009                        'date_modified' => bp_core_current_time(),
    10011010                );
     1011                // Respect a specified `date-modified`
     1012                if ( ! empty( $args['date_modified'] ) ) {
     1013                        $update_args['date_modified'] = $args['date_modified'];
     1014                }
    10021015
    10031016                // WHERE clauses.
    10041017                $where_args = array(
    class BP_Invitation { 
    10141027         *
    10151028         * @since 5.0.0
    10161029         *
    1017          * @param array $args See BP_Invitation::update().
     1030         * @param array $args        See BP_Invitation::update().
     1031         * @param array $passed_args Invitation characteristics used
     1032         *                           to override certain sending behaviors.
    10181033         */
    1019         public static function mark_sent_by_data( $args ) {
     1034        public static function mark_sent_by_data( $args, $passed_args = array() ) {
    10201035
    10211036                // Values to be updated.
    10221037                $update_args = array(
    1023                         'invite_sent' => 'sent',
     1038                        'invite_sent'   => 'sent',
     1039                        'date_modified' => bp_core_current_time(),
    10241040                );
     1041                // Respect a specified `date-modified`
     1042                if ( ! empty( $passed_args['date_modified'] ) ) {
     1043                        $update_args['date_modified'] = $passed_args['date_modified'];
     1044                }
    10251045
    10261046                return self::update( $update_args, $args );
    10271047        }
    class BP_Invitation { 
    10331053         *
    10341054         * @since 5.0.0
    10351055         *
    1036          * @param int $id The ID of the invitation to mark as sent.
     1056         * @param int   $id   The ID of the invitation to mark as sent.
     1057         * @param array $args Invitation characteristics used
     1058         *                    to override certain acceptance behaviors.
    10371059         */
    1038         public static function mark_accepted( $id = 0 ) {
     1060        public static function mark_accepted( $id = 0, $args = array() ) {
    10391061
    10401062                if ( ! $id ) {
    10411063                        return false;
    class BP_Invitation { 
    10431065
    10441066                // Values to be updated.
    10451067                $update_args = array(
    1046                         'accepted' => 'accepted',
     1068                        'accepted'      => 'accepted',
     1069                        'date_modified' => bp_core_current_time(),
    10471070                );
     1071                // Respect a specified `date-modified`
     1072                if ( ! empty( $args['date_modified'] ) ) {
     1073                        $update_args['date_modified'] = $args['date_modified'];
     1074                }
    10481075
    10491076                // WHERE clauses.
    10501077                $where_args = array(
    class BP_Invitation { 
    10601087         *
    10611088         * @since 5.0.0
    10621089         *
    1063          * @param array $args See BP_Invitation::update().
     1090         * @param array $args        See BP_Invitation::update().
     1091         * @param array $passed_args Invitation characteristics used
     1092         *                           to override certain acceptance behaviors.
    10641093         */
    1065         public static function mark_accepted_by_data( $args ) {
     1094        public static function mark_accepted_by_data( $args, $passed_args = array() ) {
    10661095
    10671096                // Values to be updated.
    10681097                $update_args = array(
    1069                         'accepted' => 'accepted',
     1098                        'accepted'      => 'accepted',
     1099                        'date_modified' => bp_core_current_time(),
    10701100                );
     1101                // Respect a specified `date-modified`
     1102                if ( ! empty( $args['date_modified'] ) ) {
     1103                        $update_args['date_modified'] = $args['date_modified'];
     1104                }
    10711105
    10721106                return self::update( $update_args, $args );
    10731107        }
  • src/bp-groups/bp-groups-functions.php

    diff --git src/bp-groups/bp-groups-functions.php src/bp-groups/bp-groups-functions.php
    index d1af9ad1f..e8c5639b0 100644
    function groups_send_membership_request( ...$args ) { 
    20442044
    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, $args );
    20482048                $admins = groups_get_group_admins( $r['group_id'] );
    20492049
    20502050                /**
  • src/bp-groups/classes/class-bp-groups-invitation-manager.php

    diff --git src/bp-groups/classes/class-bp-groups-invitation-manager.php src/bp-groups/classes/class-bp-groups-invitation-manager.php
    index 76d4e13c7..874aa0d25 100644
    class BP_Groups_Invitation_Manager extends BP_Invitation_Manager { 
    140140         *
    141141         * @param array $args.
    142142         */
    143         public function mark_accepted( $args ) {
     143        public function mark_accepted( $args, $passed_args ) {
    144144                // Delete all existing invitations/requests to this group for this user.
    145145                $this->delete( array(
    146146                        'user_id' => $args['user_id'],
  • tests/phpunit/testcases/core/invitations.php

    diff --git tests/phpunit/testcases/core/invitations.php tests/phpunit/testcases/core/invitations.php
    index 0646557a4..d8f1f4efb 100644
    include_once BP_TESTS_DIR . 'assets/invitations-extensions.php'; 
    332332                $this->set_current_user( $old_current_user );
    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}