Making WordPress.org


Ignore:
Timestamp:
05/09/2024 08:33:51 AM (2 years ago)
Author:
amieiro
Message:

Translate: Sync "Translation Events" from GitHub

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-translation-events/includes/event/event-form-handler.php

    r13541 r13683  
    66use DateTimeZone;
    77use Exception;
    8 use GP;
    98use WP_Error;
    10 use Wporg\TranslationEvents\Attendee\Attendee;
    11 use Wporg\TranslationEvents\Attendee\Attendee_Repository;
     9use Wporg\TranslationEvents\Notifications\Notifications_Schedule;
    1210use Wporg\TranslationEvents\Stats\Stats_Calculator;
     11use Wporg\TranslationEvents\Urls;
    1312
    1413class Event_Form_Handler {
    1514        private Event_Repository_Interface $event_repository;
    16         private Attendee_Repository $attendee_repository;
    17 
    18         public function __construct( Event_Repository_Interface $event_repository, Attendee_Repository $attendee_repository ) {
    19                 $this->event_repository    = $event_repository;
    20                 $this->attendee_repository = $attendee_repository;
     15        private Notifications_Schedule $notifications_schedule;
     16
     17        public function __construct( Event_Repository_Interface $event_repository ) {
     18                $this->event_repository       = $event_repository;
     19                $this->notifications_schedule = new Notifications_Schedule( $this->event_repository );
    2120        }
    2221
     
    2524                        wp_send_json_error( esc_html__( 'The user must be logged in.', 'gp-translation-events' ), 403 );
    2625                }
    27                 $action           = isset( $form_data['form_name'] ) ? sanitize_text_field( wp_unslash( $form_data['form_name'] ) ) : '';
    28                 $response_message = '';
    29                 $is_nonce_valid   = false;
    30                 $nonce_name       = '_event_nonce';
    31                 if ( ! in_array( $action, array( 'create_event', 'edit_event', 'delete_event' ), true ) ) {
     26
     27                $action = isset( $form_data['form_name'] ) ? sanitize_text_field( wp_unslash( $form_data['form_name'] ) ) : '';
     28                if ( ! in_array( $action, array( 'create_event', 'edit_event', 'trash_event' ), true ) ) {
    3229                        wp_send_json_error( esc_html__( 'Invalid form name.', 'gp-translation-events' ), 403 );
    3330                }
    34                 /**
    35                  * Filter the ability to create, edit, or delete an event.
    36                  *
    37                  * @param bool $can_crud_event Whether the user can create, edit, or delete an event.
    38                  */
    39                 $can_crud_event = apply_filters( 'gp_translation_events_can_crud_event', GP::$permission->current_user_can( 'admin' ) );
    40                 if ( 'create_event' === $action && ( ! $can_crud_event ) ) {
    41                         wp_send_json_error( esc_html__( 'The user does not have permission to create an event.', 'gp-translation-events' ), 403 );
    42                 }
    43                 if ( 'edit_event' === $action ) {
    44                         $event_id = isset( $form_data['event_id'] ) ? sanitize_text_field( wp_unslash( $form_data['event_id'] ) ) : '';
    45                         $event    = $this->event_repository->get_event( $event_id );
    46                         $attendee = $this->attendee_repository->get_attendee( $event->id(), get_current_user_id() );
    47                         if ( ! ( $can_crud_event || ( $attendee instanceof Attendee && $attendee->is_host() ) || current_user_can( 'edit_post', $event_id ) || $event->author_id() === get_current_user_id() ) ) {
    48                                 wp_send_json_error( esc_html__( 'The user does not have permission to edit or delete the event.', 'gp-translation-events' ), 403 );
    49                         }
    50                 }
    51                 if ( 'delete_event' === $action ) {
    52                         $event_id         = isset( $form_data['event_id'] ) ? sanitize_text_field( wp_unslash( $form_data['event_id'] ) ) : '';
    53                         $event            = $this->event_repository->get_event( $event_id );
    54                         $attendee         = $this->attendee_repository->get_attendee( $event->id(), get_current_user_id() );
    55                         $stats_calculator = new Stats_Calculator();
    56                         if ( $stats_calculator->event_has_stats( $event->id() ) ) {
    57                                 wp_send_json_error( esc_html__( 'The event has stats so it cannot be deleted.', 'gp-translation-events' ), 422 );
    58                         }
    59                         if ( ! ( $can_crud_event || ( $attendee instanceof Attendee && $attendee->is_host() ) || current_user_can( 'delete_post', $event_id ) || get_current_user_id() === $event->author_id() ) ) {
    60                                 wp_send_json_error( esc_html__( 'You do not have permission to delete this event.', 'gp-translation-events' ), 403 );
    61                         }
    62                 }
     31
     32                $event_id = isset( $form_data['event_id'] ) ? sanitize_text_field( wp_unslash( $form_data['event_id'] ) ) : 0;
     33
     34                if ( 'create_event' === $action && ( ! current_user_can( 'create_translation_event' ) ) ) {
     35                        wp_send_json_error( esc_html__( 'You do not have permissions to create events.', 'gp-translation-events' ), 403 );
     36                }
     37                if ( 'edit_event' === $action && ( ! current_user_can( 'edit_translation_event', $event_id ) ) ) {
     38                        wp_send_json_error( esc_html__( 'You do not have permissions to edit this event.', 'gp-translation-events' ), 403 );
     39                }
     40                if ( 'trash_event' === $action && ( ! current_user_can( 'trash_translation_event', $event_id ) ) ) {
     41                        wp_send_json_error( esc_html__( 'You do not have permissions to delete this event.', 'gp-translation-events' ), 403 );
     42                }
     43
     44                $is_nonce_valid = false;
     45                $nonce_name     = '_event_nonce';
    6346                if ( isset( $form_data[ $nonce_name ] ) ) {
    6447                        $nonce_value = sanitize_text_field( wp_unslash( $form_data[ $nonce_name ] ) );
     
    7154                }
    7255
    73                 if ( 'delete_event' === $action ) {
    74                         // Delete event.
     56                $response_message = '';
     57                if ( 'trash_event' === $action ) {
     58                        // Trash event.
    7559                        $event_id = intval( sanitize_text_field( wp_unslash( $form_data['event_id'] ) ) );
    7660                        $event    = $this->event_repository->get_event( $event_id );
     
    8973                        }
    9074
    91                         if ( false === $this->event_repository->delete_event( $event ) ) {
     75                        if ( false === $this->event_repository->trash_event( $event ) ) {
    9276                                $response_message = esc_html__( 'Failed to delete event.', 'gp-translation-events' );
    9377                                $event_status     = $event->status();
    9478                        } else {
    9579                                $response_message = esc_html__( 'Event deleted successfully.', 'gp-translation-events' );
    96                                 $event_status     = 'deleted';
     80                                $event_status     = 'trashed';
     81                                $this->notifications_schedule->delete_scheduled_emails( $event_id );
    9782                        }
    9883                } else {
     
    135120                                }
    136121                                $response_message = esc_html__( 'Event created successfully.', 'gp-translation-events' );
     122                                $this->notifications_schedule->schedule_emails( $result );
    137123                        }
    138124                        if ( 'edit_event' === $action ) {
     
    159145                                }
    160146                                $response_message = esc_html__( 'Event updated successfully', 'gp-translation-events' );
     147                                $this->notifications_schedule->schedule_emails( $result );
    161148                        }
    162149
     
    165152                }
    166153
    167                 list( $permalink, $post_name ) = get_sample_permalink( $event_id );
    168                 $permalink                     = str_replace( '%pagename%', $post_name, $permalink );
    169154                wp_send_json_success(
    170155                        array(
    171                                 'message'        => $response_message,
    172                                 'eventId'        => $event_id,
    173                                 'eventUrl'       => str_replace( '%pagename%', $post_name, $permalink ),
    174                                 'eventStatus'    => $event_status,
    175                                 'eventEditUrl'   => esc_url( gp_url( '/events/edit/' . $event_id ) ),
    176                                 'eventDeleteUrl' => esc_url( gp_url( '/events/my-events/' ) ),
     156                                'message'       => $response_message,
     157                                'eventId'       => $event_id,
     158                                'eventStatus'   => $event_status,
     159                                'eventUrl'      => Urls::event_details_absolute( $event_id ),
     160                                'eventEditUrl'  => Urls::event_edit( $event_id ),
     161                                'eventTrashUrl' => Urls::my_events(), // The URL the user is redirected to after trashing.
    177162                        )
    178163                );
     
    201186
    202187                $event_status = '';
    203                 if ( isset( $data['event_form_action'] ) && in_array( $data['event_form_action'], array( 'draft', 'publish', 'delete' ), true ) ) {
     188                if ( isset( $data['event_form_action'] ) && in_array( $data['event_form_action'], array( 'draft', 'publish', 'trash' ), true ) ) {
    204189                        $event_status = sanitize_text_field( wp_unslash( $data['event_form_action'] ) );
    205190                }
Note: See TracChangeset for help on using the changeset viewer.