diff options
Diffstat (limited to 'includes/view-helpers')
-rw-r--r-- | includes/view-helpers/class-giglogadmin-concertform.php | 142 | ||||
-rw-r--r-- | includes/view-helpers/class-giglogadmin-concertstable.php | 452 | ||||
-rw-r--r-- | includes/view-helpers/class-giglogadmin-venueform.php | 52 | ||||
-rw-r--r-- | includes/view-helpers/select-field-helper.php (renamed from includes/view-helpers/select_field.php) | 14 |
4 files changed, 656 insertions, 4 deletions
diff --git a/includes/view-helpers/class-giglogadmin-concertform.php b/includes/view-helpers/class-giglogadmin-concertform.php new file mode 100644 index 0000000..5cc3a47 --- /dev/null +++ b/includes/view-helpers/class-giglogadmin-concertform.php @@ -0,0 +1,142 @@ +<?php +/** + * Class for adding/editing concerts. + * + * @package giglogadmin + * + * SPDX-FileCopyrightText: 2021 Andrea Chirulescu <andrea.chirulescu@gmail.com> + * SPDX-FileCopyrightText: 2021 Harald Eilertsen <haraldei@anduin.net> + * + * 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 = '<div class="concertform">'; + $content .= '<form method="POST" action="" class="concert" >' + . '<div class="concertitems"><strong>CONCERT DETAILS</strong><br><br><fieldset>' + . wp_nonce_field( 'edit-concert', 'nonce' ) + . '<input type="hidden" name="pid" value="' . esc_attr( $c->id() ) . '" />' + . '<label for="cname">Concert Name:</label>' + . '<textarea id="cname" name="cname" value="' . esc_attr( $c->cname() ) . '">' + . esc_textarea( $c->cname() ) + . '</textarea><br>' + . '<label for="venue">Venue:</label>' . $this->get_venue_selector( $c->venue() ) . '<br>' + // date has to be formatted else it is not red in the date field of html form + . '<label for="cdate">Date:</label>' + . '<input type="date" id="cdate" name="cdate" value="' . esc_attr( date( 'Y-m-d', strtotime( $c->cdate() ?? '' ) ) ) . '"><br>' + . '<label for="ticket">Tickets:</label>' + . '<input type="text" id="ticket" name="ticket" value="' . esc_url( $c->tickets() ) . '"><br>' + . '<label for="eventurl">Event link:</label>' + . '<input type="text" id="eventurl" name="eventurl" value="' . esc_url( $c->eventlink() ) . '"><br>' + . '</fieldset>'; + + // actions differ if we update or create a concert, hence two buttons needed + if ( $editing ) { + $content .= '<p><input type="submit" name="editconcert" value="Edit Concert"></p>'; + } else { + $content .= '<p><input type="submit" name="newconcert" value="Create New Concert"></p>'; + } + + $content .= '</div>'; + + $content .= '<div class="useritems"><strong>ASSIGNMENT DETAILS</strong><br><br><fieldset>' + . '<label for="photo1">Photo1:</label>' . $this->user_dropdown_for_role( $c, 'photo1' ) . '<br>' + . '<label for="photo2">Photo2:</label>' . $this->user_dropdown_for_role( $c, 'photo2' ) . '<br>' + . '<label for="rev1">Text1:</label>' . $this->user_dropdown_for_role( $c, 'rev1' ) . '<br>' + . '<label for="rev2">Text2:</label>' . $this->user_dropdown_for_role( $c, 'rev2' ) . '<br>'; + + $content .= '<fieldset></div></form></div>'; + + 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 '<script language="javascript">alert("You are missing a value, concert was not created"); </script>'; + } else { + if ( GiglogAdmin_Concert::create( $_POST['cname'], $_POST['selectvenueadmin'], $_POST['cdate'], $_POST['ticket'], $_POST['eventurl'] ) ) { + echo '<script language="javascript">alert("Yey, concert created"); </script>'; + } else { + echo '<script language="javascript">alert("Nay, concert was duplicated"); </script>'; + } + } + } + + 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 + } + } + } + } +} diff --git a/includes/view-helpers/class-giglogadmin-concertstable.php b/includes/view-helpers/class-giglogadmin-concertstable.php new file mode 100644 index 0000000..1288cbd --- /dev/null +++ b/includes/view-helpers/class-giglogadmin-concertstable.php @@ -0,0 +1,452 @@ +<?php +/** + * Class to render the concerts table. + * + * @package giglogadmin + * + * SPDX-FileCopyrightText: 2021 Andrea Chirulescu <andrea.chirulescu@gmail.com> + * SPDX-FileCopyrightText: 2021 Harald Eilertsen <haraldei@anduin.net> + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +if ( ! class_exists( 'GiglogAdmin_ConcertsTable' ) ) { + class GiglogAdmin_ConcertsTable { + + const STATUS_LABELS = array( + '', + 'Accred Requested', + 'Photo Approved', + 'Text Approved', + 'Photo and Text Approved', + 'Rejected', + ); + + const FILTER_KEYS = array( + 'city', + 'venue', + 'month', + 'only_mine', + ); + + private string $username; + private array $filter; + + private int $page_no = 1; + private int $total_no_of_pages = 1; + private int $previous_page = 0; + private int $next_page = 0; + + private string $nonce; + + public static function update() : void { + // + // Check that we get a nonce, and that it is valid to prevent CSRF attacks. + // + if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'concerts-table' ) ) { + wp_die( 'You are not allowed to do that.', 403 ); + exit(); + } + + if ( isset( $_POST['assignitem'] ) ) { + $concert = GiglogAdmin_Concert::get( intval( $_POST['cid'] ) ); + + if ( $concert ) { + $role = sanitize_text_field( $_POST['pid'] ); + self::assignconcert( $role, $concert ); + } + + return; + } + + if ( isset( $_POST['unassignitem'] ) ) { + $concert = GiglogAdmin_Concert::get( intval( $_POST['cid'] ) ); + + if ( $concert ) { + $role = sanitize_text_field( $_POST['pid'] ); + self::unassignconcert( $role, $concert ); + } + + return; + } + + // handle the status drop down + if ( isset( $_POST['selectstatus'] ) && ! empty( $_POST['selectstatus'] ) && ! empty( $_POST['cid'] ) ) { + if ( $_POST['selectstatus'] > 0 && $_POST['selectstatus'] < count( self::STATUS_LABELS ) ) { + $concert = GiglogAdmin_Concert::get( intval( $_POST['cid'] ) ); + if ( $concert ) { + $concert->set_status( intval( $_POST['selectstatus'] ) ); + $concert->save(); + self::emailuser( $concert, intval( $_POST['selectstatus'] ) ); + } + } + } + } + + static function assignconcert( string $p1, GiglogAdmin_Concert $concert ): void { + $username = wp_get_current_user()->user_login; + $concert->assign_role( $p1, $username ); + $concert->save(); + + $cuser = get_user_by( 'login', 'etadmin' ); + + if ( $cuser ) { + $dest = $cuser->user_email; + $subject = 'WP-GIGLOG ' . $username . ' has taken ' . $p1 . 'for concert ' . $concert->cname(); + $body = 'WP-GIGLOG ' . $username . ' has taken ' . $p1 . 'for concert ' . $concert->cname() . ', concert with ID ' . $concert->id(); + $headers = array( 'Content-Type: text/html; charset=UTF-8' ); + + wp_mail( $dest, $subject, $body ); + } + } + + static function unassignconcert( string $p1, GiglogAdmin_Concert $concert ): void { + $username = wp_get_current_user()->user_login; + $concert->remove_user_from_roles( $username ); + $concert->save(); + + $cuser = get_user_by( 'login', 'etadmin' ); + + if ( $cuser ) { + $dest = $cuser->user_email; + $subject = 'WP-GIGLOG ' . $username . ' has UNASSIGNED ' . $p1 . 'for concert ' . $concert->cname(); + $body = 'WP-GIGLOG ' . $username . ' has UNASSIGNED ' . $p1 . 'for concert ' . $concert->cname() . ', concert with ID ' . $concert->id(); + $headers = array( 'Content-Type: text/html; charset=UTF-8' ); + + wp_mail( $dest, $subject, $body ); + } + } + + static function emailuser( GiglogAdmin_Concert $concert, string $cstatus ): void { + $username = wp_get_current_user()->user_login; + $useremail = 'live@eternal-terror.com'; + $dest = ''; + $roles = $concert->roles(); + $x = ''; + + foreach ( $roles as $role ) { + if ( $role ) { + $cuser = get_user_by( 'login', $role ); + + if ( $cuser ) { + $dest .= $cuser->user_email . ','; + } + } + } + + $subject = 'Message from GIGLOG: Concert ' . $concert->cname() . ' has a new status ' . $cstatus . '.'; + $body = 'You receive this message because you have assigned one of the roles for Concert ' . $concert->cname() . '.'; + $body .= '\r\n This is to inform you that there is a new status for the acreditation ' . $cstatus . '.'; + $body .= '\r\n Should you no longer want to receive updates about this concert, please log in to Giglog and remove yourself from the concert. Thanks!'; + $headers = array( 'Content-Type: text/plain; charset=UTF-8' ); // it is text by default so no need for headers actually + + wp_mail( $dest, $subject, $body ); + } + + public function __construct() { + $this->username = wp_get_current_user()->user_login; + + // Set the nonce we use to check for CSRF attacks. + $this->nonce = wp_create_nonce( 'concerts-table' ); + $this->get_args(); + } + + public function render(): string { + return $this->render_filters() + . $this->render_concerts_table(); + } + + private function render_concert_table_header() : string { + $content = '<div style="overflow-x:auto;"><table class="assignit">'; + $content .= '<span style="font-size:0.8em;font-style: italic;">Note: the iCal link will download a file with extension .ical which can be used to add the event to your calendar. For convenience, we set all events with start time at 19:00 but please check the actual event for the correct time.</span>'; + + $content .= '<tr class="assignithrow">'; + $content .= '<th>CITY</th><th>DATE</th><th>NAME</th><th>VENUE</th>'; + + if ( ! is_admin() ) { + $content .= '<th>EVENT</th><th>TICKETS</th><th>Calendar</th>'; + } else { + $content .= '<th></th><th>PHOTO1</th><th>PHOTO2</th><th>TEXT1</th><th>TEXT2</th><th>STATUS</th>'; + if ( current_user_can( 'administrator' ) ) { + $content .= '<th>AdminOptions</th>'; + } + } + + $content .= '</tr>'; + + return $content; + } + + private function get_args() : void { + $this->filter = array(); + + // Use the submitted "city" if any. Otherwise, use the default/static value. + $cty = filter_input( INPUT_GET, 'city', FILTER_SANITIZE_SPECIAL_CHARS ); + if ( $cty ) { + $this->filter['city'] = $cty; + } + + $venue = filter_input( INPUT_GET, 'venue', FILTER_SANITIZE_SPECIAL_CHARS ); + if ( $venue ) { + $this->filter['venue_id'] = $venue; + } + + $smonth = filter_input( INPUT_GET, 'month', FILTER_SANITIZE_SPECIAL_CHARS ); + if ( $smonth ) { + $this->filter['month'] = $smonth; + } + + if ( isset( $_GET['only_mine'] ) && $_GET['only_mone'] == '1' ) { + $this->filter['currentuser'] = $this->username; + } + + if ( isset( $_GET['page_no'] ) && $_GET['page_no'] != '' && is_numeric( $_GET['page_no'] ) && isset( $_GET['page_no'] ) == $this->page_no ) { + $this->page_no = intval( $_GET['page_no'] ); + } else { + $this->page_no = 1; + } + } + + private function get_concerts() : ?array { + $total_records_per_page = 15; + + $total_concerts = GiglogAdmin_Concert::count( $this->filter ); + $this->total_no_of_pages = ceil( $total_concerts / $total_records_per_page ); + + // calculate OFFSET Value and SET other Variables + $offset = ( $this->page_no - 1 ) * $total_records_per_page; + $this->previous_page = $this->page_no - 1; + $this->next_page = $this->page_no + 1; + + if ( $this->page_no > $this->total_no_of_pages ) { + $this->page_no = 1; + } + + $this->filter['offset'] = $offset; + $this->filter['recperpage'] = $total_records_per_page; + + return GiglogAdmin_Concert::find_concerts( $this->filter ); + } + + private function get_filter( string $f ) : ?string { + return isset( $this->filter[ $f ] ) ? $this->filter[ $f ] : null; + } + + private function render_pagination() : string { + $content = + '<div id="pagtextbox" style="display:flex">' + . '<span class="alignleft" style="text-align:left;flex:auto;">'; + + if ( $this->page_no > 1 ) { + $content .= + '<span>' + . '<a href="' . add_query_arg( 'page_no', 1 ) . '">' + . 'First Page</a> -' + . '</span>' + . '<span>' + . '<a href="' . add_query_arg( 'page_no', $this->previous_page ) . '">' + . ' Previous</a></span>'; + } + + $content .= '</span>' + . '<span class="aligncenter" style="text-align:center;flex:auto">' + . '<strong>Page ' . $this->page_no . ' of ' . $this->total_no_of_pages . '</strong>' + . '</span>'; + + $content .= '<span class="alignright" style="text-align:right;flex:auto;float:none">'; + + if ( $this->page_no < $this->total_no_of_pages ) { + $content .= + '<span>' + . '<a href="' . add_query_arg( 'page_no', $this->next_page ) . '">' + . 'Next</a> - ' + . '</span>' + . '<span>' + . '<a href="' . add_query_arg( 'page_no', $this->total_no_of_pages ) . '">' + . 'Last Page</a>' + . '</span>'; + } + + $content .= + '</span>' + . '</div>'; + + return $content; + } + + private function render_concerts_table() : string { + $concerts = $this->get_concerts(); + + $last_city = ''; + + $content = $this->render_concert_table_header(); + + foreach ( $concerts as $concert ) { + $content .= '<tr class="assignitr"><td>'; + + if ( $last_city != $concert->venue()->city() ) { + $content .= $concert->venue()->city(); + } + + $content .= '</td>'; + + $content .= + '<td>' . date( 'd.M.Y', strtotime( $concert->cdate() ) ) . '</td>' + . '<td>' . strtoupper( esc_html( $concert->cname() ) ) . '</td>' + . '<td>' . esc_html( $concert->venue()->name() ) . '</td>'; + + if ( is_admin() ) { + $content .= '<td class="publishstatus">' . $this->mark_new_concert( $concert ) . '</td>'; + + foreach ( array( 'photo1', 'photo2', 'rev1', 'rev2' ) as $role ) { + $content .= '<td class="assigneduser">' + . $this->assign_role_for_user_form( $role, $concert ) + . '</td>'; + } + + $content .= '<td>' . self::STATUS_LABELS[ $concert->status() ] . '</td>'; + + if ( current_user_can( 'administrator' ) ) { + $content .= "<td class=\"adminbuttons\">{$this->adminactions( $concert )}</td>"; + } + } else { + $content .= '<td><a target="_blank" href="' . esc_url( $concert->eventlink() ) . '">Link</a></td>'; + $content .= '<td><a target="_blank" href="' . esc_url( $concert->tickets() ) . '">Tickets</a></td>'; + } + + $content .= '<td><a href="' . get_admin_url() . 'admin-ajax.php?action=giglog_export_ical&evid=' . $concert->id() . '">iCal</a></td>'; + $content .= '</tr>'; + $last_city = $concert->venue()->city(); + } + + $content .= '</table>'; + + $content .= $this->render_pagination(); + + // from main form that includes filters + $content .= '</div></form>'; + + // return the table + return $content; + } + + private function render_filters() : string { + global $wp_locale; + + $select = '<form method="GET" action="" class="filterclass">FILTER DATA: '; + + foreach ( $_GET as $name => $val ) { + if ( in_array( $name, self::FILTER_KEYS ) ) { + continue; + } + + $select .= '<input type="hidden" name="' . esc_attr( $name ) + . '" value="' . esc_attr( $val ) . '">'; + } + + $cty = $this->get_filter( 'city' ); + + $select .= \EternalTerror\ViewHelpers\select_field( + 'city', + array_map( fn( $city) => array( $city, $city ), GiglogAdmin_Venue::all_cities() ), + $cty, + 'Select city...' + ); + + if ( ! empty( $cty ) ) { + // second drop down for venue + $select .= \EternalTerror\ViewHelpers\select_field( + 'venue', + array_map( + fn( $venue) => array( $venue->id(), $venue->name() ), + GiglogAdmin_Venue::venues_in_city( $cty ) + ), + $this->get_filter( 'venue_id' ), + 'Select venue...' + ); + } + + $select .= \EternalTerror\ViewHelpers\select_field( + 'month', + array_map( + fn( $m) => array( $m, $wp_locale->get_month( $m ) ), + range( 1, 12 ) + ), + $this->get_filter( 'month' ), + 'Select month...' + ); + + if ( is_admin() ) { + // option to select own concerts only + $select .= '<input name="only_mine" class="ownconc" type="checkbox" value="1"' + . checked( $this->get_filter( 'current_user' ) ) + . '><label for="ownconcerts">Show own concerts only</label>'; + + } + // NOTE that I remvoed </form></p> and mvoed them up to render_concerts_table function + $select .= '<input class="applybutton" type="submit" value="Apply Filters">'; + + return $select; + } + + private function adminactions( GiglogAdmin_Concert $concert ) : string { + return '<form class="adminactions" method="POST" action="">' + . '<input type="hidden" name="nonce" value="' . $this->nonce . '">' + . '<input type="hidden" name="cid" value="' . $concert->id() . '" />' + . \EternalTerror\ViewHelpers\select_field( + 'selectstatus', + array_map( fn( $i) => array( $i, self::STATUS_LABELS[ $i ] ), range( 1, count( self::STATUS_LABELS ) - 1 ) ), + $concert->status() + ) + . '<input type="submit" value="SetStatus">' + . '<input type="submit" name ="edit" value="EDIT">' + . '</form>'; + } + + /** + * Display a mark on the concert if it is new. + * I.e. imported/created within the last ten days. + * + * @return null|string + */ + private function mark_new_concert( GiglogAdmin_Concert $concert ) : string { + $now = new DateTime(); + $new_entry = $now->diff( $concert->created() )->days <= 10; + if ( $new_entry ) { + return '<span style="color:green">NEW</span>'; + } else { + return ''; + } + } + + private function assign_role_for_user_form( string $role, GiglogAdmin_Concert $concert ) : ?string { + $roles = $concert->roles(); + $assigned_user = array_key_exists( $role, $roles ) ? $roles[ $role ] : null; + + // first check if current slot is taken by current user + if ( $assigned_user == $this->username ) { + $f = '<form class="unassign_concert" method="POST" action="">' + . ' <input type="hidden" name="nonce" value="' . $this->nonce . '">' + . ' <input type="hidden" name="cid" value="' . $concert->id() . '" />' + . ' <input type="hidden" name="pid" value="' . $role . '" />' + . ' <input type="submit" name="unassignitem" value=""/>' + . '</form>'; + } elseif ( $assigned_user ) { // check if slot is taken by another user + $f = '<span class="takenby">Taken</span>' + . '<div class="takenby">Taken by ' . $assigned_user . '</div>'; + } elseif ( array_search( $this->username, $roles ) ) { + // other slots for this concert are taken by user + $f = '<span class="taken_by_self">-</span>'; + } else { // not taken by anyone + $f = '<form class="assign_concert" method="POST" action="">' + . ' <input type="hidden" name="nonce" value="' . $this->nonce . '">' + . ' <input type="hidden" name="cid" value="' . $concert->id() . '" />' + . ' <input type="hidden" name="pid" value="' . $role . '" />' + . ' <input type="submit" name="assignitem" value=""/>' + . '</form>'; + } + + return $f; + } + } +} diff --git a/includes/view-helpers/class-giglogadmin-venueform.php b/includes/view-helpers/class-giglogadmin-venueform.php new file mode 100644 index 0000000..f837d73 --- /dev/null +++ b/includes/view-helpers/class-giglogadmin-venueform.php @@ -0,0 +1,52 @@ +<?php +/** + * Class to handle the form for adding venues. + * + * @package giglogadmin + * + * SPDX-FileCopyrightText: 2021 Andrea Chirulescu <andrea.chirulescu@gmail.com> + * SPDX-FileCopyrightText: 2021 Harald Eilertsen <haraldei@anduin.net> + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +if ( ! class_exists( 'GiglogAdmin_VenueForm' ) ) { + class GiglogAdmin_VenueForm { + + public function render() : string { + return '<div class="venueform">' + . '<p><strong>VENUE DETAILS</strong></p>' + . '<form method="POST" action="" class="venue">' + . ' <fieldset>' + . wp_nonce_field( 'edit-venue', 'nonce' ) + . ' <div class="field venue_name_field">' + . ' <label for="venue">Venue Name:</label>' + . ' <input type="text" id="venuename" name="venuename">' + . ' </div>' + . ' <div class="field venue_city_field">' + . ' <label for="venuecity">Venue City:</label>' + . ' <input type="text" id="venuecity" name="venuecity">' + . ' </div>' + . ' <div class="actions">' + . ' <input type="submit" name="newvenue" value="Create New Venue">' + . ' </div>' + . ' <fieldset>' + . '</form>' + . '</div>'; + } + + static function update() : void { + if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'edit-venue' ) ) { + header( "{$_SERVER['SERVER_PROTOCOL']} 403 Forbidden" ); + wp_die( 'CSRF validation failed.', 403 ); + } + + if ( empty( $_POST['venuename'] ) || empty( $_POST['venuecity'] ) ) { + echo '<script language="javascript">alert("You are missing a value, venue was not created"); </script>'; + } else { + GiglogAdmin_Venue::create( $_POST['venuename'], $_POST['venuecity'] ); + echo '<script language="javascript">alert("Yey, venue created"); </script>'; + } + } + } +} diff --git a/includes/view-helpers/select_field.php b/includes/view-helpers/select-field-helper.php index aa156d0..c25244b 100644 --- a/includes/view-helpers/select_field.php +++ b/includes/view-helpers/select-field-helper.php @@ -1,8 +1,14 @@ <?php -// SPDX-FileCopyrightText: 2021 Andrea Chirulescu <andrea.chirulescu@gmail.com> -// SPDX-FileCopyrightText: 2021 Harald Eilertsen <haraldei@anduin.net> -// -// SPDX-License-Identifier: AGPL-3.0-or-later +/** + * Select field implementation. + * + * @package giglogadmin + * + * SPDX-FileCopyrightText: 2021 Andrea Chirulescu <andrea.chirulescu@gmail.com> + * SPDX-FileCopyrightText: 2021 Harald Eilertsen <haraldei@anduin.net> + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ namespace EternalTerror\ViewHelpers; |