summaryrefslogtreecommitdiffstats
path: root/includes/admin
diff options
context:
space:
mode:
authorHarald Eilertsen <haraldei@anduin.net>2023-01-20 20:22:06 +0100
committerHarald Eilertsen <haraldei@anduin.net>2023-01-20 20:22:06 +0100
commit277fedffc624f55c6ecc8bd80ed8db370134e47e (patch)
treeac22560f978c3789a63c80284fbd314e11d0b396 /includes/admin
parentf499d9e657fe79e4413eec9e20ae13d616fac6f5 (diff)
downloadgigologadmin-277fedffc624f55c6ecc8bd80ed8db370134e47e.tar.gz
gigologadmin-277fedffc624f55c6ecc8bd80ed8db370134e47e.tar.bz2
gigologadmin-277fedffc624f55c6ecc8bd80ed8db370134e47e.zip
Rename and reorganize more source files.
Diffstat (limited to 'includes/admin')
-rw-r--r--includes/admin/register_db_tables.php55
-rw-r--r--includes/admin/views/_concerts_table.php448
-rw-r--r--includes/admin/views/_edit_concert_form.php138
-rw-r--r--includes/admin/views/_new_venue_form.php46
-rw-r--r--includes/admin/views/class-giglogadmin-adminpage.php (renamed from includes/admin/views/giglog_admin_page.php)29
-rw-r--r--includes/admin/views/class-giglogadmin-importgigspage.php (renamed from includes/admin/views/giglog_import_gigs.php)15
6 files changed, 27 insertions, 704 deletions
diff --git a/includes/admin/register_db_tables.php b/includes/admin/register_db_tables.php
deleted file mode 100644
index 5f83e25..0000000
--- a/includes/admin/register_db_tables.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?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
-
-if ( ! function_exists( 'giglog_register_db_tables' ) ) {
- /**
- * Registers the tables used by the GiglogAdmin plugin
- */
- function giglog_register_db_tables() : void {
- global $wpdb;
-
- $tables = array();
- $tables[] =
- "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}giglogadmin_venues` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `wpgvenue_name` VARCHAR(500) NOT NULL,
- `wpgvenue_city` VARCHAR(250) DEFAULT NULL,
- `wpgvenue_address` VARCHAR(2000) DEFAULT NULL,
- `wpgvenue_webpage` VARCHAR(200) DEFAULT NULL,
- `created` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- `updated` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
-
- $tables[] =
- "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}giglogadmin_concerts` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `wpgconcert_name` VARCHAR(2000) NOT NULL,
- `venue` int(11) NOT NULL,
- `wpgconcert_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `wpgconcert_tickets` VARCHAR(2000) DEFAULT NULL,
- `wpgconcert_event` VARCHAR(2000) DEFAULT NULL,
- `wpgconcert_type` INT NOT NULL DEFAULT '1' COMMENT '1 concert, 2 festival',
- `wpgconcert_status` INT DEFAULT 1,
- `wpgconcert_roles` JSON CHECK (JSON_VALID(wpgconcert_roles)),
- `created` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- `updated` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- CONSTRAINT `wpgconcert_venue`
- FOREIGN KEY (`venue`)
- REFERENCES `{$wpdb->prefix}giglogadmin_venues` (`id`) ON DELETE NO ACTION
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
-
- foreach ( $tables as $tabledef ) {
- $result = $wpdb->query( $tabledef );
- if ( $result === false ) {
- error_log( 'Registering table failed.' );
- }
- }
- }
-
- giglog_register_db_tables();
-}
diff --git a/includes/admin/views/_concerts_table.php b/includes/admin/views/_concerts_table.php
deleted file mode 100644
index 4f9b3c9..0000000
--- a/includes/admin/views/_concerts_table.php
+++ /dev/null
@@ -1,448 +0,0 @@
-<?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
-
-require_once __DIR__ . '/../../view-helpers/select_field.php';
-
-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&amp;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/admin/views/_edit_concert_form.php b/includes/admin/views/_edit_concert_form.php
deleted file mode 100644
index 1a2e5a6..0000000
--- a/includes/admin/views/_edit_concert_form.php
+++ /dev/null
@@ -1,138 +0,0 @@
-<?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
-
-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) => 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/admin/views/_new_venue_form.php b/includes/admin/views/_new_venue_form.php
deleted file mode 100644
index 39eb1b2..0000000
--- a/includes/admin/views/_new_venue_form.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?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
-
-if ( ! class_exists( 'GiglogAdmin_NewVenueForm' ) ) {
- class GiglogAdmin_NewVenueForm {
-
- 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/admin/views/giglog_admin_page.php b/includes/admin/views/class-giglogadmin-adminpage.php
index acd0172..23a0a85 100644
--- a/includes/admin/views/giglog_admin_page.php
+++ b/includes/admin/views/class-giglogadmin-adminpage.php
@@ -1,15 +1,20 @@
<?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
+/**
+ * Class representing the main GiglogAdmin admin page.
+ *
+ * @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_AdminPage' ) ) {
require_once __DIR__ . '/../../class-giglogadmin-venue.php';
- require_once __DIR__ . '/_concerts_table.php';
- require_once __DIR__ . '/_edit_concert_form.php';
- require_once __DIR__ . '/_new_venue_form.php';
+ require_once __DIR__ . '/../../view-helpers/class-giglogadmin-concertstable.php';
+ require_once __DIR__ . '/../../view-helpers/class-giglogadmin-concertform.php';
+ require_once __DIR__ . '/../../view-helpers/class-giglogadmin-venueform.php';
class GiglogAdmin_AdminPage {
@@ -51,8 +56,8 @@ if ( ! class_exists( 'GiglogAdmin_AdminPage' ) ) {
</div>
<?php
if ( current_user_can( 'administrator' ) ) {
- $edit_form = new GiglogAdmin_EditConcertForm();
- $venue_form = new GiglogAdmin_NewVenueForm();
+ $edit_form = new GiglogAdmin_ConcertForm();
+ $venue_form = new GiglogAdmin_VenueForm();
?>
<div>
<h3>Form to create/edit concerts and venues</h3>
@@ -78,12 +83,12 @@ if ( ! class_exists( 'GiglogAdmin_AdminPage' ) ) {
}
if ( isset( $_POST['newconcert'] ) || isset( $_POST['editconcert'] ) ) {
- GiglogAdmin_EditConcertForm::update();
+ GiglogAdmin_ConcertForm::update();
return;
}
if ( isset( $_POST['newvenue'] ) ) {
- GiglogAdmin_NewVenueForm::update();
+ GiglogAdmin_VenueForm::update();
return;
}
}
diff --git a/includes/admin/views/giglog_import_gigs.php b/includes/admin/views/class-giglogadmin-importgigspage.php
index 758981e..5dcf939 100644
--- a/includes/admin/views/giglog_import_gigs.php
+++ b/includes/admin/views/class-giglogadmin-importgigspage.php
@@ -1,9 +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
+/**
+ * Class representing the page for importing gigs.
+ *
+ * @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_ImportGigsPage' ) ) {
require_once __DIR__ . '/../../class-giglogadmin-concert.php';