Making WordPress.org


Ignore:
Timestamp:
04/15/2024 01:37:55 PM (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/routes/event/edit.php

    r13298 r13529  
    33namespace Wporg\TranslationEvents\Routes\Event;
    44
    5 use DateTime;
    6 use DateTimeZone;
    7 use Exception;
     5use Wporg\TranslationEvents\Attendee\Attendee;
     6use Wporg\TranslationEvents\Attendee\Attendee_Repository;
     7use Wporg\TranslationEvents\Event\Event_Repository_Interface;
    88use Wporg\TranslationEvents\Routes\Route;
    99use Wporg\TranslationEvents\Stats_Calculator;
     
    1414 */
    1515class Edit_Route extends Route {
     16        private Event_Repository_Interface $event_repository;
     17        private Attendee_Repository $attendee_repository;
     18
     19        public function __construct() {
     20                parent::__construct();
     21                $this->event_repository    = Translation_Events::get_event_repository();
     22                $this->attendee_repository = Translation_Events::get_attendee_repository();
     23        }
     24
    1625        public function handle( int $event_id ): void {
    1726                global $wp;
     
    2029                        exit;
    2130                }
    22                 $event = get_post( $event_id );
    23                 if ( ! $event || Translation_Events::CPT !== $event->post_type || ! ( current_user_can( 'edit_post', $event->ID ) || intval( $event->post_author ) === get_current_user_id() ) ) {
     31                $event    = $this->event_repository->get_event( $event_id );
     32                $attendee = $this->attendee_repository->get_attendee( $event->id(), get_current_user_id() );
     33
     34                if ( ! $event || ! ( ( $attendee instanceof Attendee && $attendee->is_host() ) || current_user_can( 'edit_post', $event->id() ) || $event->author_id() === get_current_user_id() ) ) {
    2435                        $this->die_with_error( esc_html__( 'Event does not exist, or you do not have permission to edit it.', 'gp-translation-events' ), 403 );
    2536                }
    26                 if ( 'trash' === $event->post_status ) {
     37                if ( 'trash' === $event->status() ) {
    2738                        $this->die_with_error( esc_html__( 'You cannot edit a trashed event', 'gp-translation-events' ), 403 );
    2839                }
    2940
    3041                include ABSPATH . 'wp-admin/includes/post.php';
    31                 $event_form_title              = 'Edit Event';
     42                $event_page_title              = 'Edit Event';
    3243                $event_form_name               = 'edit_event';
    3344                $css_show_url                  = '';
    34                 $event_title                   = $event->post_title;
    35                 $event_description             = $event->post_content;
    36                 $event_status                  = $event->post_status;
    37                 list( $permalink, $post_name ) = get_sample_permalink( $event_id );
     45                $event_title                   = $event->title();
     46                $event_description             = $event->description();
     47                $event_status                  = $event->status();
     48                list( $permalink, $post_name ) = get_sample_permalink( $event->id() );
    3849                $permalink                     = str_replace( '%pagename%', $post_name, $permalink );
    3950                $event_url                     = get_site_url() . gp_url( wp_make_link_relative( $permalink ) );
    40                 $event_timezone                = get_post_meta( $event_id, '_event_timezone', true ) ?: '';
     51                $event_timezone                = $event->timezone();
     52                $event_start                   = $event->start();
     53                $event_end                     = $event->end();
    4154                $create_delete_button          = false;
    4255                $visibility_delete_button      = 'inline-flex';
    4356
     57                if ( $event->end()->is_in_the_past() ) {
     58                        $this->die_with_error( esc_html__( 'You cannot edit a past event.', 'gp-translation-events' ), 403 );
     59                }
     60
    4461                $stats_calculator = new Stats_Calculator();
    45                 if ( ! $stats_calculator->event_has_stats( $event ) ) {
     62
     63                if ( $stats_calculator->event_has_stats( $event->id() ) ) {
     64                        $this->die_with_error( esc_html__( 'You cannot edit an event with translations.', 'gp-translation-events' ), 403 );
     65                }
     66
     67                if ( ! $stats_calculator->event_has_stats( $event->id() ) ) {
    4668                        $current_user = wp_get_current_user();
    47                         if ( $current_user->ID === $event->post_author || current_user_can( 'manage_options' ) ) {
     69                        if ( ( $current_user->ID === $event->author_id() || ( $attendee instanceof Attendee && $attendee->is_host() ) || current_user_can( 'manage_options' ) ) && ! $event->end()->is_in_the_past() ) {
    4870                                $create_delete_button = true;
    4971                        }
    5072                }
    5173
    52                 try {
    53                         $event_start = self::convertToTimezone( get_post_meta( $event_id, '_event_start', true ), $event_timezone );
    54                         $event_end   = self::convertToTimezone( get_post_meta( $event_id, '_event_end', true ), $event_timezone );
    55                 } catch ( Exception $e ) {
    56                         // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
    57                         error_log( $e );
    58                         $this->die_with_error( esc_html__( 'Something is wrong.', 'gp-translation-events' ) );
    59                 }
    60 
    6174                $this->tmpl( 'events-form', get_defined_vars() );
    6275        }
    63 
    64         /**
    65          * Convert date time stored in UTC to a date time in a time zone.
    66          *
    67          * @param string $date_time The date time in UTC.
    68          * @param string $time_zone The time zone.
    69          *
    70          * @return string The date time in the time zone.
    71          * @throws Exception When date is invalid.
    72          */
    73         private static function convertToTimezone( string $date_time, string $time_zone ): string {
    74                 return ( new DateTime( $date_time, new DateTimeZone( 'UTC' ) ) )->setTimezone( new DateTimeZone( $time_zone ) )->format( 'Y-m-d H:i:s' );
    75         }
    7676}
Note: See TracChangeset for help on using the changeset viewer.