* SPDX-FileCopyrightText: 2021 Harald Eilertsen * * SPDX-License-Identifier: AGPL-3.0-or-later */ if ( ! class_exists( 'GiglogAdmin_ConcertForm' ) ) { class GiglogAdmin_ConcertForm { private function get_venue_selector( ?GiglogAdmin_Venue $invenue ): string { return \EternalTerror\ViewHelpers\select_field( 'selectvenueadmin', array_map( fn( $venue) => array( $venue->id(), $venue->name() ), GiglogAdmin_Venue::all_venues() ), $invenue ? $invenue->id() : null ); } private function user_dropdown_for_role( GiglogAdmin_Concert $concert, string $role ): string { $users = array_map( fn( $usr): string => $usr->user_login, get_users( array( 'fields' => array( 'user_login' ) ) ) ); $roles = $concert->roles(); $current_user = array_key_exists( $role, $roles ) ? $roles[ $role ] : null; return \EternalTerror\ViewHelpers\select_field( $role, array_map( fn( $user) => array( $user, $user ), $users ), $current_user ); } public function render() : string { $cid = filter_input( INPUT_POST, 'cid' ); $editing = filter_input( INPUT_POST, 'edit' ) == 'EDIT'; if ( $editing && ! empty( $cid ) ) { $c = GiglogAdmin_Concert::get( $cid ); if ( ! $c ) { wp_die( 'Invalid request!', 400 ); } } else { $c = new GiglogAdmin_Concert( (object) array() ); } $content = '
'; $content .= '
' . '
CONCERT DETAILS

' . wp_nonce_field( 'edit-concert', 'nonce' ) . '' . '' . '
' . '' . $this->get_venue_selector( $c->venue() ) . '
' // date has to be formatted else it is not red in the date field of html form . '' . '
' . '' . '
' . '' . '
' . '
'; // actions differ if we update or create a concert, hence two buttons needed if ( $editing ) { $content .= '

'; } else { $content .= '

'; } $content .= '
'; $content .= '
ASSIGNMENT DETAILS

' . '' . $this->user_dropdown_for_role( $c, 'photo1' ) . '
' . '' . $this->user_dropdown_for_role( $c, 'photo2' ) . '
' . '' . $this->user_dropdown_for_role( $c, 'rev1' ) . '
' . '' . $this->user_dropdown_for_role( $c, 'rev2' ) . '
'; $content .= '
'; return $content; } static function update() : void { if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'edit-concert' ) ) { wp_die( 'CSRF validation failed.', 403 ); } if ( isset( $_POST['newconcert'] ) ) { if ( empty( $_POST['cname'] ) || empty( $_POST['selectvenueadmin'] ) || empty( $_POST['cdate'] ) || empty( $_POST['ticket'] ) || empty( $_POST['eventurl'] ) ) { echo ''; } else { if ( GiglogAdmin_Concert::create( $_POST['cname'], $_POST['selectvenueadmin'], $_POST['cdate'], $_POST['ticket'], $_POST['eventurl'] ) ) { echo ''; } else { echo ''; } } } if ( isset( $_POST['editconcert'] ) ) { $roles = array_reduce( array( 'photo1', 'photo1', 'rev1', 'rev2' ), function( $roles, $r ) { if ( isset( $_POST[ $r ] ) ) { $roles[ $r ] = sanitize_user( $_POST[ $r ] ); } return $roles; }, array() ); $attributes = array( 'wpgconcert_name' => sanitize_text_field( $_POST['cname'] ), 'venue' => intval( $_POST['selectvenueadmin'] ), 'wpgconcert_date' => sanitize_text_field( $_POST['cdate'] ), 'wpgconcert_ticket' => esc_url_raw( $_POST['ticket'] ), 'wpgconcert_event' => esc_url_raw( $_POST['eventurl'] ), 'wpgconcert_roles' => $roles, ); $concert = GiglogAdmin_Concert::get( intval( $_POST['pid'] ) ); if ( $concert && $concert->update( (object) $attributes ) ) { // let user know the concert was updated. // Look into admin_notices } } } } }