Making WordPress.org


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