Changeset 13683 for sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-translation-events/includes/event/event-form-handler.php
- Timestamp:
- 05/09/2024 08:33:51 AM (19 months ago)
- 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 6 6 use DateTimeZone; 7 7 use Exception; 8 use GP;9 8 use WP_Error; 10 use Wporg\TranslationEvents\Attendee\Attendee; 11 use Wporg\TranslationEvents\Attendee\Attendee_Repository; 9 use Wporg\TranslationEvents\Notifications\Notifications_Schedule; 12 10 use Wporg\TranslationEvents\Stats\Stats_Calculator; 11 use Wporg\TranslationEvents\Urls; 13 12 14 13 class Event_Form_Handler { 15 14 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 ); 21 20 } 22 21 … … 25 24 wp_send_json_error( esc_html__( 'The user must be logged in.', 'gp-translation-events' ), 403 ); 26 25 } 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 ) ) { 32 29 wp_send_json_error( esc_html__( 'Invalid form name.', 'gp-translation-events' ), 403 ); 33 30 } 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'; 63 46 if ( isset( $form_data[ $nonce_name ] ) ) { 64 47 $nonce_value = sanitize_text_field( wp_unslash( $form_data[ $nonce_name ] ) ); … … 71 54 } 72 55 73 if ( 'delete_event' === $action ) { 74 // Delete event. 56 $response_message = ''; 57 if ( 'trash_event' === $action ) { 58 // Trash event. 75 59 $event_id = intval( sanitize_text_field( wp_unslash( $form_data['event_id'] ) ) ); 76 60 $event = $this->event_repository->get_event( $event_id ); … … 89 73 } 90 74 91 if ( false === $this->event_repository-> delete_event( $event ) ) {75 if ( false === $this->event_repository->trash_event( $event ) ) { 92 76 $response_message = esc_html__( 'Failed to delete event.', 'gp-translation-events' ); 93 77 $event_status = $event->status(); 94 78 } else { 95 79 $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 ); 97 82 } 98 83 } else { … … 135 120 } 136 121 $response_message = esc_html__( 'Event created successfully.', 'gp-translation-events' ); 122 $this->notifications_schedule->schedule_emails( $result ); 137 123 } 138 124 if ( 'edit_event' === $action ) { … … 159 145 } 160 146 $response_message = esc_html__( 'Event updated successfully', 'gp-translation-events' ); 147 $this->notifications_schedule->schedule_emails( $result ); 161 148 } 162 149 … … 165 152 } 166 153 167 list( $permalink, $post_name ) = get_sample_permalink( $event_id );168 $permalink = str_replace( '%pagename%', $post_name, $permalink );169 154 wp_send_json_success( 170 155 array( 171 'message' => $response_message,172 'eventId' => $event_id,173 'event Url' => str_replace( '%pagename%', $post_name, $permalink ),174 'event Status' => $event_status,175 'eventEditUrl' => esc_url( gp_url( '/events/edit/' . $event_id )),176 'event DeleteUrl' => 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. 177 162 ) 178 163 ); … … 201 186 202 187 $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 ) ) { 204 189 $event_status = sanitize_text_field( wp_unslash( $data['event_form_action'] ) ); 205 190 }
Note: See TracChangeset
for help on using the changeset viewer.