// SPDX-FileCopyrightText: 2021 Harald Eilertsen // // SPDX-License-Identifier: AGPL-3.0-or-later require_once __DIR__ . '/../../view-helpers/select_field.php'; if (!class_exists("GiglogAdmin_EditConcertForm")) { class GiglogAdmin_EditConcertForm { private function get_venue_selector( ?GiglogAdmin_Venue $invenue ): string { return \EternalTerror\ViewHelpers\select_field( "selectvenueadmin", array_map(fn($venue) => [$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) => [ $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)[]); } $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( ['photo1', 'photo1', 'rev1', 'rev2'], function($roles, $r) { if (isset($_POST[$r])) { $roles[$r] = sanitize_user($_POST[$r]); } return $roles; }, [] ); $attributes = [ '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 } } } } }