From 15bf6674a36582d2ae736bfec651239884b9cab5 Mon Sep 17 00:00:00 2001 From: Harald Eilertsen Date: Sat, 4 Sep 2021 20:56:59 +0200 Subject: Move the concerts table and edit form out of AdminPage. Currently the AdminPage is still responsible for updating changes to any of the concerts, but I'd like to get that into their respective classes too. That way the AdminPage will just be a simple class to handle the layout of the page, while all the specific functionality is in their own classes. This is also the first step to be able to reuse the concerts table on the public end of the site. --- includes/admin/views/_edit_concert_form.php | 82 +++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 includes/admin/views/_edit_concert_form.php (limited to 'includes/admin/views/_edit_concert_form.php') diff --git a/includes/admin/views/_edit_concert_form.php b/includes/admin/views/_edit_concert_form.php new file mode 100644 index 0000000..32ca762 --- /dev/null +++ b/includes/admin/views/_edit_concert_form.php @@ -0,0 +1,82 @@ + +// SPDX-FileCopyrightText: 2021 Harald Eilertsen +// +// SPDX-License-Identifier: AGPL-3.0-or-later + +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) => $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)) //A bit overdoing with the checks if concert ID is empty both here and in find_cid. But based on that, things are NULL or not. Better ideas? + $c = GiglogAdmin_Concert::get($cid); + else + $c = new GiglogAdmin_Concert((object)[]); + + $content='

Form to create/edit concerts and venues


'; + $content.='
' + .'
CONCERT DETAILS

' + .'' + .'
' + .'' . $this->get_venue_selector($c->venue()) . '
' + .'
' + .'
' + .'
' + .'
'; + // 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.='
'; + $content.='
VENUE DETAILS

' + .'

' + .'
' + .'

' + .'
'; + $content.='
'; + return $content; + } + } +} -- cgit v1.2.3