Making WordPress.org


Ignore:
Timestamp:
05/09/2024 08:33:51 AM (19 months 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.