summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreaChirulescu <andrea.chirulescu@gmail.com>2021-09-04 17:28:26 +0200
committerAndreaChirulescu <andrea.chirulescu@gmail.com>2021-09-04 17:28:26 +0200
commitb92a2fc89ee23d20ac157fdf18e20861e6bd4c32 (patch)
tree9e998deb9a55df4b14a270cf78b097cd08753cf1
parenta479645ff6b092f72fa0add3dda6708214022200 (diff)
parent74fda7b89101ad47b77b486f4e38792db473cb00 (diff)
downloadgigologadmin-b92a2fc89ee23d20ac157fdf18e20861e6bd4c32.tar.gz
gigologadmin-b92a2fc89ee23d20ac157fdf18e20861e6bd4c32.tar.bz2
gigologadmin-b92a2fc89ee23d20ac157fdf18e20861e6bd4c32.zip
Merge branch 'dev' of https://code.volse.net/wordpress/plugins/gigologadmin.git into andreaschanges
-rw-r--r--giglogadmin.php15
-rw-r--r--includes/admin/register_db_tables.php122
-rw-r--r--includes/admin/views/giglog_admin_page.php233
-rw-r--r--includes/admin/views/giglog_import_gigs.php2
-rw-r--r--includes/band.php151
-rw-r--r--includes/concert.php177
-rw-r--r--includes/concertlogs.php115
-rw-r--r--includes/public/shortcodes/giglog_bands.php118
-rw-r--r--includes/public/shortcodes/giglog_display_unprocessed.php145
-rw-r--r--includes/public/shortcodes/giglog_photographers.php385
-rw-r--r--includes/public/shortcodes/giglog_process_files.php72
-rw-r--r--includes/venue.php35
-rw-r--r--includes/view-helpers/select_field.php2
-rwxr-xr-xrun-tests1
-rw-r--r--run-tests-windoze.bat1
-rw-r--r--tests/BandTest.php69
-rw-r--r--tests/ConcertTest.php202
17 files changed, 373 insertions, 1472 deletions
diff --git a/giglogadmin.php b/giglogadmin.php
index c35c470..e9adbe2 100644
--- a/giglogadmin.php
+++ b/giglogadmin.php
@@ -24,26 +24,19 @@
if ( !class_exists( 'GiglogAdmin_Plugin' ) ) {
- require_once __DIR__ . '/includes/public/shortcodes/giglog_bands.php';
- require_once __DIR__ . '/includes/public/shortcodes/giglog_display_unprocessed.php';
- require_once __DIR__ . '/includes/public/shortcodes/giglog_photographers.php';
- require_once __DIR__ . '/includes/public/shortcodes/giglog_process_files.php';
+
+ require_once __DIR__ . '/includes/admin/register_db_tables.php';
require_once __DIR__ . '/includes/admin/views/giglog_admin_page.php';
require_once __DIR__ . '/includes/admin/views/giglog_import_gigs.php';
require_once __DIR__ . '/includes/admin/helpfiles/instrunctions.php';
require_once __DIR__ . '/includes/admin/helpfiles/instr_reviewers.php';
require_once __DIR__ . '/includes/admin/helpfiles/instr_photog.php';
require_once __DIR__ . '/includes/view-helpers/select_field.php';
+ require_once __DIR__ . '/includes/roles.php';
class GiglogAdmin_Plugin
{
static public function init(): void {
- add_shortcode('giglog_cities', 'giglogadmin_getfilters');
- add_shortcode('giglog_bands', 'giglogadmin_getconcerts');
- add_shortcode('giglog_unprocessed', 'giglogadmin_display_unprocessed');
- add_shortcode('giglog_upload', 'giglogadmin_upload_files');
- add_shortcode('giglog_photog', 'giglogadmin_photographers');
-
add_action( 'admin_menu', array( 'GiglogAdmin_Plugin', 'add_admin_pages' ));
add_action( 'admin_menu', array( 'GiglogAdmin_Plugin', 'add_help_pages' ));
@@ -51,7 +44,6 @@ if ( !class_exists( 'GiglogAdmin_Plugin' ) ) {
}
static function activate(): void {
- require_once __DIR__ . '/includes/admin/register_db_tables.php';
}
static function deactivate(): void {
@@ -141,7 +133,6 @@ if ( !class_exists( 'GiglogAdmin_Plugin' ) ) {
register_activation_hook( __FILE__, array( 'GiglogAdmin_Plugin', 'activate' ));
register_deactivation_hook( __FILE__, array( 'GiglogAdmin_Plugin', 'deactivate' ));
-
GiglogAdmin_Plugin::init();
}
?>
diff --git a/includes/admin/register_db_tables.php b/includes/admin/register_db_tables.php
index 64123d9..8080578 100644
--- a/includes/admin/register_db_tables.php
+++ b/includes/admin/register_db_tables.php
@@ -259,35 +259,17 @@ if ( !function_exists( "giglog_register_db_tables") )
*/
function giglog_register_db_tables()
{
+ global $wpdb;
+
+ // Clean out obsolete tables if they exist.
+ $wpdb->query("DROP TABLE IF EXISTS "
+ . "wpg_bands, wpg_concertlogs, wpg_files, wpg_logchanges, wpg_pressstatus");
+
$db_version = get_option('giglogadmin_db_version');
- if ($db_version == 6) {
+ if ($db_version == 8) {
return;
}
- $bands_table =
- "CREATE TABLE IF NOT EXISTS `wpg_bands` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `wpgband_name` varchar(500) NOT NULL,
- `wpgband_country` varchar(4) DEFAULT 'NO',
- PRIMARY KEY (`id`),
- KEY `wpgband_country` (`wpgband_country`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
-
- $concertlogs_table =
- "CREATE TABLE IF NOT EXISTS `wpg_concertlogs` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `wpgcl_concertid` int(11) NOT NULL,
- `wpgcl_photo1` varchar(200) DEFAULT NULL,
- `wpgcl_photo2` varchar(200) DEFAULT NULL,
- `wpgcl_rev1` varchar(200) DEFAULT NULL,
- `wpgcl_rev2` varchar(200) DEFAULT NULL,
- `wpgcl_int` varchar(200) DEFAULT NULL,
- `wpgcl_status` int(11) DEFAULT 1,
- PRIMARY KEY (`id`),
- KEY `wpglog_status` (`wpgcl_status`),
- KEY `wpglog_concerts` (`wpgcl_concertid`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
-
$concerts_table =
"CREATE TABLE IF NOT EXISTS `wpg_concerts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
@@ -311,35 +293,6 @@ if ( !function_exists( "giglog_register_db_tables") )
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
- $files_table =
- "CREATE TABLE IF NOT EXISTS `wpg_files` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `filename` varchar(2000) NOT NULL,
- `filedate` datetime NOT NULL DEFAULT current_timestamp(),
- `rowid` int(11) NOT NULL,
- `rowcontent` text NOT NULL,
- `processed` char(1) NOT NULL DEFAULT 'N',
- `wpgc_id` int(11) NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
-
- $logchanges_table =
- "CREATE TABLE IF NOT EXISTS `wpg_logchanges` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `userid` varchar(500) NOT NULL,
- `action` varchar(500) NOT NULL,
- `actiondate` date NOT NULL DEFAULT current_timestamp(),
- `concertid` int(11) NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
-
- $pressstatus_table =
- "CREATE TABLE IF NOT EXISTS `wpg_pressstatus` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `wpgs_name` varchar(50) NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
-
$venues_table =
"CREATE TABLE IF NOT EXISTS `wpg_venues` (
`id` int(11) NOT NULL AUTO_INCREMENT,
@@ -350,15 +303,9 @@ if ( !function_exists( "giglog_register_db_tables") )
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
- global $wpdb;
$tables = array(
- $bands_table,
- $concertlogs_table,
$concerts_table,
$countries_table,
- $files_table,
- $logchanges_table,
- $pressstatus_table,
$venues_table);
foreach($tables as $tabledef) {
@@ -378,50 +325,12 @@ if ( !function_exists( "giglog_register_db_tables") )
(`id`,`wpgc_fullname`,`wpgcountry_name`,`wpgc_iso3`,`wpgc_numcode`);");
$wpdb->query(
- "ALTER TABLE `wpg_bands`
- ADD CONSTRAINT `wpgband_country`
- FOREIGN KEY (`wpgband_country`)
- REFERENCES `wpg_countries` (`id`) ON DELETE NO ACTION;");
-
- $wpdb->query(
- "ALTER TABLE `wpg_concertlogs`
- ADD CONSTRAINT `wpglog_concerts`
- FOREIGN KEY (`wpgcl_concertid`)
- REFERENCES `wpg_concerts` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION,
- ADD CONSTRAINT `wpglog_status`
- FOREIGN KEY (`wpgcl_status`)
- REFERENCES `wpg_pressstatus` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION;");
-
- $wpdb->query(
"ALTER TABLE `wpg_concerts`
- ADD CONSTRAINT `wpgconcert_band`
- FOREIGN KEY (`band`)
- REFERENCES `wpg_bands` (`id`) ON DELETE NO ACTION,
ADD CONSTRAINT `wpgconcert_venue`
FOREIGN KEY (`venue`)
REFERENCES `wpg_venues` (`id`) ON DELETE NO ACTION;");
}
- if ($db_version == NULL || $db_version < 2)
- {
- $wpdb->query(
- "INSERT INTO `wpg_pressstatus` (`id`, `wpgs_name`) VALUES
- (1, ' '),
- (2, 'Accred Requested'),
- (3, 'Photo Approved'),
- (4, 'Text Approved'),
- (5, 'Photo and Text approved'),
- (6, 'Rejected');");
- }
-
- if ($db_version == NULL || $db_version < 3)
- {
- $wpdb->query(
- "ALTER TABLE `wpg_concertlogs`
- ADD COLUMN IF NOT EXISTS
- `wpgcl_createddate` date NOT NULL DEFAULT current_timestamp();");
- }
-
if ($db_version == NULL || $db_version < 4)
{
$wpdb->query(
@@ -459,7 +368,22 @@ if ( !function_exists( "giglog_register_db_tables") )
wpgconcert_roles JSON CHECK (JSON_VALID(wpgconcert_roles)))");
}
- update_option("giglogadmin_db_version", 6);
+ if ($db_version == NULL || $db_version < 8)
+ {
+ // Add automatically updated `created` and `updated` colomns to keep
+ // track of creation time and modification times for a record.
+ $wpdb->query(
+ "ALTER TABLE `wpg_concerts` ADD COLUMN IF NOT ExISTS (
+ created TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)");
+
+ $wpdb->query(
+ "ALTER TABLE `wpg_venues` ADD COLUMN IF NOT ExISTS (
+ created TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)");
+ }
+
+ update_option("giglogadmin_db_version", 8);
}
giglog_register_db_tables();
diff --git a/includes/admin/views/giglog_admin_page.php b/includes/admin/views/giglog_admin_page.php
index 6c1f059..dfea3fd 100644
--- a/includes/admin/views/giglog_admin_page.php
+++ b/includes/admin/views/giglog_admin_page.php
@@ -11,6 +11,15 @@ if ( !class_exists( 'GiglogAdmin_AdminPage' ) ) {
class GiglogAdmin_AdminPage {
private string $username;
+ const STATUS_LABELS = [
+ '',
+ 'Accred Requested',
+ 'Photo Approved',
+ 'Text Approved',
+ 'Photo and Text Approved',
+ 'Rejected'
+ ];
+
public function __construct()
{
$this->username = wp_get_current_user()->user_login;
@@ -59,16 +68,18 @@ if ( !class_exists( 'GiglogAdmin_AdminPage' ) ) {
}
- private function get_user( ?int $cid, string $ctype): string
+ 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' ) ) ) );
- $current_user = $cid ? GiglogAdmin_Concertlogs::get_assigned_user( $cid, $ctype ) : null;
+ $roles = $concert->roles();
+
+ $current_user = array_key_exists($role, $roles) ? $roles[$role] : NULL;
return \EternalTerror\ViewHelpers\select_field(
- $ctype,
+ $role,
array_map( fn($user) => [ $user, $user ], $users ),
$current_user);
}
@@ -115,7 +126,7 @@ if ( !class_exists( 'GiglogAdmin_AdminPage' ) ) {
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();
+ $c = new GiglogAdmin_Concert((object)[]);
$content='<div><h3>Form to create/edit concerts and venues</h3><br></div><div class="editform"><div class="concertform">';
$content.='<form method="POST" action="" class="concert" >'
@@ -125,7 +136,7 @@ if ( !class_exists( 'GiglogAdmin_AdminPage' ) ) {
.'<label for="venue">Venue:</label>' . $this->get_venue_selector($c->venue()) . '<br>'
.'<label for="cdate">Date:</label><input type="date" id="cdate" name="cdate" value="'.$c->cdate().'"><br>'
.'<label for="ticket">Tickets:</label><input type="text" id="ticket" name="ticket" value="'.$c->tickets().'"><br>'
- .'<label for="eventurl">Event link:</label><input type="text" id="eventurl" name="eventurl" value="'.$c->eventlink().'"><br>'
+ .'<label for="eventurl">Event link:</label><input type="text" id="eventurl" name="eventurl" value="'.$c->eventlink().'"><br>'
.'</fieldset>';
// actions differ if we update or create a concert, hence two buttons needed
if ($editing)
@@ -134,11 +145,12 @@ if ( !class_exists( 'GiglogAdmin_AdminPage' ) ) {
$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->get_user($c->id(),'photo1').'<br>'
- .'<label for="photo2">Photo2:</label>'.$this->get_user($c->id(),'photo2').'<br>'
- .'<label for="rev1">Text1:</label>'.$this->get_user($c->id(),'rev1').'<br>'
- .'<label for="rev2">Text2:</label>'.$this->get_user($c->id(),'rev2').'<br>';
+ .'<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>';
$content.='<div class="venueform"><form method="POST" action="" class="venue" ><strong>VENUE DETAILS</strong><br><br>'
@@ -150,19 +162,15 @@ if ( !class_exists( 'GiglogAdmin_AdminPage' ) ) {
return $content;
}
- private function adminactions( int $concert_id ) : string
+ private function adminactions( GiglogAdmin_Concert $concert ) : string
{
- global $wpdb;
- $query = "SELECT id,wpgs_name from wpg_pressstatus" ;
- $statuses = $wpdb->get_results($query);
-
return
'<form method="POST" action="">'
- . '<input type="hidden" name="cid" value="' . $concert_id . '" />'
+ . '<input type="hidden" name="cid" value="' . $concert->id() . '" />'
. \EternalTerror\ViewHelpers\select_field(
'selectstatus',
- array_map(fn($status) => [ $status->id, $status->wpgs_name ], $statuses),
- GiglogAdmin_Concertlogs::get_status($concert_id))
+ array_map(fn($i) => [ $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>';
@@ -172,27 +180,21 @@ if ( !class_exists( 'GiglogAdmin_AdminPage' ) ) {
/**
* @return null|string
*/
- private function getpublishstatus(int $concert_id)
+ private function getpublishstatus(GiglogAdmin_Concert $concert) : string
{
- global $wpdb;
- $date1 = new DateTime("now");
- $dsql = "select wpgcl_createddate from wpg_concertlogs where wpgcl_concertid=".$concert_id;
- $results = $wpdb->get_results($dsql);
- foreach ( $results AS $row ) {
- //$x = strtotime($row -> filedate);
- $x= date('Y-m-d H:i:s', strtotime($row -> wpgcl_createddate));
- $date2 = new DateTime($x, new DateTimeZone('Europe/London'));
- $dd = $date2 -> diff($date1) ->format("%a");
+ $now = new DateTime();
+ $new_entry = $now->diff($concert->created())->days <= 10;
+ if ($new_entry) {
+ return '<span style="color:green">NEW</span>';
+ }
+ else {
+ return '';
}
-
- if ($dd <= 10) return ('<span style="color:green">NEW</span>');
}
private function get_concerts(): string
{
- global $wpdb;
-
$content = '<table class="assignit">';
// $content .= '</tr><th>CITY</th><th>ID</th><th>BAND</th><th>VENUE</th><th>DATE</th></tr>';
@@ -204,63 +206,56 @@ if ( !class_exists( 'GiglogAdmin_AdminPage' ) ) {
$content .= '<th>AdminOptions</th>';
$content .= '</tr>';
+ $filter = [];
+
// Use the submitted "city" if any. Otherwise, use the default/static value.
$cty = filter_input( INPUT_POST, 'selectcity', FILTER_SANITIZE_SPECIAL_CHARS );
- $cty = $cty ? $cty: 'ALL';
+ if ($cty) $filter['city'] = $cty;
$venue = filter_input( INPUT_POST, 'selectvenue', FILTER_SANITIZE_SPECIAL_CHARS );
- $venue = $venue ? $venue : '0';
+ if ($venue) $filter['venue_id'] = $venue;
+ $concerts = GiglogAdmin_Concert::find_concerts($filter);
- $query = "SELECT wpgc.id, wpgconcert_name, wpgv.wpgvenue_name as venue, wpgc.wpgconcert_date, wpgc.wpgconcert_tickets, wpgc.wpgconcert_event, wpgv.wpgvenue_city, wpgv.wpgvenue_webpage, wpgps.wpgs_name
- FROM wpg_concerts wpgc, wpg_venues wpgv, wpg_pressstatus wpgps, wpg_concertlogs wpgcl
- where wpgc.venue = wpgv.id
- and wpgconcert_date >= CURDATE()
- and wpgps.id = wpgcl.wpgcl_status
- and wpgcl.wpgcl_concertid=wpgc.id";
-
- $query .= ($cty == "ALL") ? "" : " and wpgv.wpgvenue_city='" .$cty ."'";
- $query .= ($venue == "0") ? "" : " and wpgv.id='" .$venue ."'";
- $query.= (empty($_POST['my_checkbox'])) ? "": " and (wpgcl_photo1 ='".$this->username."' or wpgcl_photo2 ='".$this->username."' or wpgcl_rev1 ='".$this->username."' or wpgcl_rev2 ='".$this->username."')";
- $query .=" order by wpgv.wpgvenue_city, wpgconcert_date, wpgc.id" ;
- $results = $wpdb->get_results($query);
$lastType = '';
- foreach ( $results AS $row ) {
+ foreach ( $concerts AS $concert ) {
$content .= '<tr class="assignitr">';
- if($lastType != '' && $lastType != $row->wpgvenue_city) {
- $content .= '<td>'.$row->wpgvenue_city.'</td></tr><tr>';
+ if ($lastType != '' && $lastType != $concert->venue()->city()) {
+ $content .= '<td>' . $concert->city() . '</td></tr><tr>';
}
if ($lastType == '' ) {
- $content .= '<td>'.$row->wpgvenue_city.'</td></tr><tr>';
+ $content .= '<td>' . $concert->venue()->city() . '</td></tr><tr>';
}
// Modify these to match the database structure
// $content .= '<td>' . $row->id. '</td>';
$content .= '<td></td>';
- $content .= '<td>' . $row->wpgconcert_name. '</td>';
- $content .= '<td>' . $row->venue. '</td>';
- $fdate = strtotime($row->wpgconcert_date);
+ $content .= '<td>' . $concert->cname() . '</td>';
+ $content .= '<td>' . $concert->venue()->name() . '</td>';
+ $fdate = strtotime($concert->cdate());
$newformat = date('d.M.Y',$fdate);
//$content .= DATE_FORMAT($fdate,'%d.%b.%Y');
- $content .= '<td>' .$newformat. '</td>';
- $content .= '<td>'.$this->getpublishstatus($row->id ).'</td>';
- $content .= '<td>'.$this->returnuser('photo1', $row->id ).'</td>';
- $content .= '<td>'.$this->returnuser('photo2', $row->id ).'</td>';
- $content .= '<td>'.$this->returnuser('rev1', $row->id ).'</td>';
- $content .= '<td>'.$this->returnuser('rev2', $row->id ).'</td>';
- $content .= '<td>'.$row -> wpgs_name.'</td>';
+ $content .= '<td>' . $newformat . '</td>';
+ $content .= '<td>' . $this->getpublishstatus($concert) . '</td>';
+
+ $content .= '<td>' . $this->assign_role_for_user_form('photo1', $concert) . '</td>';
+ $content .= '<td>' . $this->assign_role_for_user_form('photo2', $concert) . '</td>';
+ $content .= '<td>' . $this->assign_role_for_user_form('rev1', $concert) . '</td>';
+ $content .= '<td>' . $this->assign_role_for_user_form('rev2', $concert) . '</td>';
+
+ $content .= '<td>' . self::STATUS_LABELS[$concert->status()] . '</td>';
if (current_user_can('administrator')) {
$content .=
'<td class="adminbuttons">'
- . $this->adminactions($row->id)
+ . $this->adminactions($concert)
. '</td>';
}
$content .= '</tr>';
- $lastType = $row->wpgvenue_city;
+ $lastType = $concert->venue()->city();
}
$content .= '</table>';
@@ -274,8 +269,6 @@ if ( !class_exists( 'GiglogAdmin_AdminPage' ) ) {
*/
static function update()
{
- global $wpdb;
-
if ('POST' !== $_SERVER['REQUEST_METHOD'])
return;
@@ -288,7 +281,12 @@ if ( !class_exists( 'GiglogAdmin_AdminPage' ) ) {
if(isset($_POST['assignitem']))
{
- GiglogAdmin_AdminPage::assignconcert($_POST['pid'],$_POST['cid']);
+ $concert = GiglogAdmin_Concert::get(intval($_POST['cid']));
+ $role = sanitize_text_field($_POST['pid']);
+
+ if ($concert) {
+ GiglogAdmin_AdminPage::assignconcert($role, $concert);
+ }
$url2=$_SERVER['REQUEST_URI'];
header("Refresh: 1; URL=$url2"); //reload page
@@ -296,19 +294,23 @@ if ( !class_exists( 'GiglogAdmin_AdminPage' ) ) {
if(isset($_POST['unassignitem']))
{
- GiglogAdmin_AdminPage::unassignconcert($_POST['pid'],$_POST['cid']);
+ $concert = GiglogAdmin_Concert::get(intval($_POST['cid']));
+ $role = sanitize_text_field($_POST['pid']);
+
+ GiglogAdmin_AdminPage::unassignconcert($role, $concert);
$url3=$_SERVER['REQUEST_URI'];
header("Refresh: 1; URL=$url3"); //reload page
}
- //handling the admin drop down menu
- if(isset($_POST['selectstatus']) && (isset($_POST['edit']) && $_POST['edit']!="EDIT") && !empty($_POST['cid']))
+ // handle the status drop down
+ if (isset($_POST['selectstatus']) && !empty($_POST['selectstatus']) && !empty($_POST['cid']))
{
- $usql = "UPDATE wpg_concertlogs SET wpgcl_status=".$_POST['selectstatus']." WHERE wpgcl_concertid=".$_POST['cid'];
- $uresults = $wpdb->get_results($usql);
- //$url2=$_SERVER['REQUEST_URI']; //doesn't seem to be needed actually, leaving here just in case
- //header("Refresh: 1; URL=$url2"); //reload page
+ if ($_POST['selectstatus'] > 0 && $_POST['selectstatus'] < count(self::STATUS_LABELS)) {
+ $concert = GiglogAdmin_Concert::get(intval($_POST['cid']));
+ $concert->set_status(intval($_POST['selectstatus']));
+ $concert->save();
+ }
}
if(isset($_POST['newconcert'])) {
@@ -327,15 +329,31 @@ if ( !class_exists( 'GiglogAdmin_AdminPage' ) ) {
if(isset($_POST['editconcert']))
{
- 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 updated"); </script>';
- else
- {
- GiglogAdmin_Concert::update_concert($_POST['pid'],$_POST['cname'], $_POST['selectvenueadmin'], $_POST['cdate'], $_POST['ticket'], $_POST['eventurl']);
- GiglogAdmin_Concertlogs::update($_POST['pid'],$_POST['photo1'], $_POST['photo2'], $_POST['rev1'], $_POST['rev2']);
- echo '<script language="javascript">alert("Yay, concert updated"); </script>';
+ $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->update((object) $attributes)) {
+ // let user know the concert was updated.
+ // Look into admin_notices
}
-
}
@@ -351,59 +369,44 @@ if ( !class_exists( 'GiglogAdmin_AdminPage' ) ) {
}
}
- static function assignconcert($p1, $c): void
+ static function assignconcert($p1, GiglogAdmin_Concert $concert): void
{
- global $wpdb;
+ $username = wp_get_current_user()->user_login;
+ $concert->assign_role($p1, $username);
+ $concert->save();
$to = 'live@eternal-terror.com';
- $subject = $this->username.' has taken '.$p1. 'for a concert with id '.$c;
+ $subject = $username.' has taken '.$p1. 'for a concert with id '.$concert->id();
$body = 'The email body content';
$headers = array('Content-Type: text/html; charset=UTF-8');
- $usql = "UPDATE wpg_concertlogs SET wpgcl_".$p1."='".$this->username."' WHERE wpgcl_concertid=".$c;
- $uresults = $wpdb->get_results($usql);
- $wpdb->insert( 'wpg_logchanges', array (
- 'id' => '',
- 'userid' => $this->username,
- 'action' => 'assigned '.$p1,
- 'concertid' => $c));
- echo ($wpdb->last_error );
+
wp_mail( $to, $subject, $body, $headers );
}
- static function unassignconcert($p1, $c): void
+ static function unassignconcert($p1, GiglogAdmin_Concert $concert): void
{
- global $wpdb;
+ $username = wp_get_current_user()->user_login;
+ $concert->remove_user_from_roles($username);
+ $concert->save();
$to = 'live@eternal-terror.com';
- $subject = $this->username.' has UNASSINED '.$p1. 'for a concert with id '.$c;
+ $subject = $username.' has UNASSINED '.$p1. 'for a concert with id '.$concert->id();
$body = 'The email body content';
$headers = array('Content-Type: text/html; charset=UTF-8');
- $usql = "UPDATE wpg_concertlogs SET wpgcl_".$p1."='' WHERE wpgcl_concertid=".$c;
- $uresults = $wpdb->get_results($usql);
- $wpdb->insert( 'wpg_logchanges', array (
- 'id' => '',
- 'userid' => $this->username,
- 'action' => 'unassigned '.$p1,
- 'concertid' => $c));
- echo ($wpdb->last_error );
+
wp_mail( $to, $subject, $body, $headers );
}
- private function returnuser(string $p1, ?int $c) : ?string
+ private function assign_role_for_user_form(string $role, GiglogAdmin_Concert $concert) : ?string
{
- if (!$c) {
- return null;
- }
-
- $cl = GiglogAdmin_Concertlogs::get($c);
- $role = $cl->get_assigned_role( $this->username );
- $assigned_user = $cl->assigned_user( $p1 );
+ $roles = $concert->roles();
+ $assigned_user = array_key_exists($role, $roles) ? $roles[$role] : NULL;
//first check if current slot is taken by current user
- if ( $role == $p1 ) {
+ if ( $assigned_user == $this->username ) {
$f = '<form class="unassignit" method="POST" action="">'
- . ' <input type="hidden" name="cid" value="' . $c. '" />'
- . ' <input type="hidden" name="pid" value="' . $p1. '" />'
+ . ' <input type="hidden" name="cid" value="' . $concert->id() . '" />'
+ . ' <input type="hidden" name="pid" value="' . $role . '" />'
. ' <input type="submit" name="unassignitem" value="Your"/>'
. '</form>';
}
@@ -411,14 +414,14 @@ if ( !class_exists( 'GiglogAdmin_AdminPage' ) ) {
$f = '<span class="takenby">Taken</span>'
. '<div class="takenby">Taken by ' . $assigned_user . '</div>';
}
- elseif ( $role ) {
+ 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 method="POST" action="">'
- . ' <input type="hidden" name="cid" value="' . $c. '" />'
- . ' <input type="hidden" name="pid" value="' . $p1. '" />'
+ . ' <input type="hidden" name="cid" value="' . $concert->id() . '" />'
+ . ' <input type="hidden" name="pid" value="' . $role. '" />'
. ' <input type="submit" name="assignitem" value=""/>'
. '</form>';
}
diff --git a/includes/admin/views/giglog_import_gigs.php b/includes/admin/views/giglog_import_gigs.php
index aeaf974..4bd59da 100644
--- a/includes/admin/views/giglog_import_gigs.php
+++ b/includes/admin/views/giglog_import_gigs.php
@@ -6,9 +6,7 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
if ( !class_exists( 'GiglogAdmin_ImportGigsPage' ) ) {
- // require_once __DIR__ . '/../../band.php';
require_once __DIR__ . '/../../concert.php';
- require_once __DIR__ . '/../../concertlogs.php';
require_once __DIR__ . '/../../venue.php';
class GiglogAdmin_ImportGigsPage {
diff --git a/includes/band.php b/includes/band.php
deleted file mode 100644
index 3460acb..0000000
--- a/includes/band.php
+++ /dev/null
@@ -1,151 +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_Band') ) {
- class GiglogAdmin_Band
- {
- private $id;
- private $bandname;
- private $country;
-
- /*
- * Constructs a new band object from an array of attributes.
- * The attributes are expected to be named as in the database,
- * so this constructor can be used to construct the object
- * directly from the database row.
- */
- public function __construct($attrs = [])
- {
- $this->id = isset($attrs->id) ? $attrs->id : NULL;
- $this->bandname = isset($attrs->wpgband_name) ? $attrs->wpgband_name : NULL;
- $this->country = isset($attrs->wpgband_country) ? $attrs->wpgband_country : 'NO';
- }
-
- static function create($bandname, $country = 'NO'): self
- {
- $band = GiglogAdmin_Band::find($bandname, $country);
-
- if ( ! $band ) {
- $band = new GiglogAdmin_Band((object) [
- 'wpgband_name' => $bandname,
- 'wpgband_country' => $country,
- ]);
-
- $band->save();
-
- error_log( 'NEW BAND ADDED: '
- . ' ID: ' . $band->id()
- . ' BAND NAME ' . $band->bandname()
- . ', COUNTRY ' . $band->country());
- }
-
- return $band;
- }
-
- static function find($name, $country): ?self
- {
- global $wpdb;
-
- $q = 'SELECT * FROM wpg_bands '
- . 'WHERE upper(wpgband_name)="' . $name
- . '" and wpgband_country = "' . $country.'"';
-
- $results = $wpdb->get_results($q);
-
- if ($results) {
- return new GiglogAdmin_Band($results[0]);
- }
- else {
- return NULL;
- }
- }
-
-
- static function all_bands()
- {
- global $wpdb;
-
- $results = $wpdb->get_results("select id, wpgband_name as vname from wpg_bands order by wpgband_name");
-
- return ($results);
- }
-
- static function all_countries()
- {
- global $wpdb;
-
- $results = $wpdb->get_results("select id, wpgcountry_name as cname from wpg_countries order by id");
-
- return ($results);
- }
-
- /**
- * @return array|string
- *
- * @psalm-return array{0: mixed, 1: mixed}|string
- */
- static function get_band($bid)
- {
- global $wpdb;
- if(!empty($bid))
- {
-
- $results = $wpdb->get_results('select wpgband_name as bname, wpgband_country as cname from wpg_bands where wpg_bands.id = '.$bid );
-
- return array ($results[0]->bname,$results[0]->cname);
- }
- else return('');
- }
-
- static function update_band($bid,$bname,$bcountry)
- {
- global $wpdb;
-
- $res = $wpdb->update('wpg_bands', array(
- 'wpgband_name' => $bname,
- 'wpgband_country' => $bcountry
- ),
- array('id' => $bid)
- );
-
- if ( !$res ) {
- // exit( var_dump( $wpdb->last_query ) ); //for onscreen debugging when needed
- error_log( __CLASS__ . '::' . __FUNCTION__ . ": {$wpdb->last_error}");
- die;
- }
-
- return ($wpdb->last_error);
- }
-
- public function save(): void
- {
- global $wpdb;
-
- $wpdb->insert('wpg_bands', array(
- 'id' => '',
- 'wpgband_name' => $this->bandname,
- 'wpgband_country' => $this->country
- ));
-
- $this->id = $wpdb->insert_id;
- }
-
- public function id()
- {
- return $this->id;
- }
-
- public function bandname()
- {
- return $this->bandname;
- }
- public function country()
- {
- return $this->country;
- }
- }
-}
diff --git a/includes/concert.php b/includes/concert.php
index 88a20da..c0c13ee 100644
--- a/includes/concert.php
+++ b/includes/concert.php
@@ -5,26 +5,30 @@
//
// SPDX-License-Identifier: AGPL-3.0-or-later
+require_once __DIR__ . '/venue.php';
+
if ( !class_exists('GiglogAdmin_Concert') ) {
require_once __DIR__ . '/venue.php';
class GiglogAdmin_Concert
{
- private $id;
- private $cname;
- private $venue;
- private $cdate;
- private $tickets;
- private $eventlink;
- private int $status;
+ private ?int $id;
+ private ?string $cname;
+ private ?GiglogAdmin_Venue $venue;
+ private ?string $cdate;
+ private ?string $tickets;
+ private ?string $eventlink;
+ private ?int $status;
private array $roles;
+ private ?DateTimeImmutable $created;
+ private ?DateTimeImmutable $updated;
- public const STATUS_NONE = 1;
- public const STATUS_ACCRED_REQ = 2;
- public const STATUS_PHOTO_APPROVED = 3;
- public const STATUS_TEXT_APPROVED = 4;
- public const STATUS_ALL_APPROVED = 5;
- public const STATUS_REJECTED = 6;
+ public const STATUS_NONE = 0;
+ public const STATUS_ACCRED_REQ = 1;
+ public const STATUS_PHOTO_APPROVED = 2;
+ public const STATUS_TEXT_APPROVED = 3;
+ public const STATUS_ALL_APPROVED = 4;
+ public const STATUS_REJECTED = 5;
/*
* Constructs a new concert object from an array of attributes.
@@ -32,15 +36,17 @@ if ( !class_exists('GiglogAdmin_Concert') ) {
* so this constructor can be used to construct the object
* directly from the database row.
*/
- public function __construct($attrs = [])
+ public function __construct(object $attrs)
{
$this->id = isset($attrs->id) ? $attrs->id : NULL;
$this->cname = isset($attrs->wpgconcert_name) ? $attrs->wpgconcert_name : NULL;
$this->cdate = isset($attrs->wpgconcert_date) ? $attrs->wpgconcert_date : NULL;
$this->tickets = isset($attrs->wpgconcert_tickets) ? $attrs->wpgconcert_tickets : NULL;
$this->eventlink = isset($attrs->wpgconcert_event) ? $attrs->wpgconcert_event : NULL;
- $this->status = isset($attrs->wpgconcert_status) ? $attrs->wpgconcert_status : 1;
+ $this->status = isset($attrs->wpgconcert_status) ? $attrs->wpgconcert_status : 0;
$this->roles = isset($attrs->wpgconcert_roles) ? json_decode($attrs->wpgconcert_roles, true) : [];
+ $this->created = isset($attrs->created) ? new DateTimeImmutable($attrs->created) : NULL;
+ $this->updated = isset($attrs->updated) ? new DateTimeImmutable($attrs->updated) : NULL;
if ( isset( $attrs->venue ) ) {
if (isset($attrs->wpgvenue_name) && isset($attrs->wpgvenue_city)) {
@@ -56,6 +62,9 @@ if ( !class_exists('GiglogAdmin_Concert') ) {
$this->venue = GiglogAdmin_Venue::get($attrs->venue);
}
}
+ else {
+ $this->venue = NULL;
+ }
}
@@ -69,15 +78,18 @@ if ( !class_exists('GiglogAdmin_Concert') ) {
{
global $wpdb;
- $query = 'SELECT wpg_concerts.*, wpg_venues.wpgvenue_name, wpg_venues.wpgvenue_city '
- . 'FROM wpg_concerts '
+ $query = 'SELECT * FROM wpg_concerts '
. 'LEFT JOIN wpg_venues ON wpg_concerts.venue = wpg_venues.id '
. 'WHERE ' . $wpdb->prepare('wpg_concerts.id = %d', $id);
$results = $wpdb->get_results($query);
- var_dump($results);
- return $results ? new GiglogAdmin_Concert($results[0]) : NULL;
+ if ( !$results ) {
+ $wpdb->print_error( __METHOD__ );
+ return null;
+ }
+
+ return new GiglogAdmin_Concert($results[0]);
}
public static function create(string $name, $venue, string $date, string $ticketlink, string $eventlink): ?self
@@ -109,43 +121,55 @@ if ( !class_exists('GiglogAdmin_Concert') ) {
. ', Ticket LINK ' . $ticketlink
. ', Event LINK ' . $eventlink);
- GiglogAdmin_Concertlogs::add( $concert->id() );
- /*the last line can be replaced by a trigger
- CREATE TRIGGER `insertIntoPhotoLogs` AFTER INSERT ON `wpg_concerts`
- FOR EACH ROW INSERT INTO wpg_concertlogs (
- wpg_concertlogs.id,
- wpg_concertlogs.wpgcl_concertid,
- wpg_concertlogs.wpgcl_status)
-
- VALUES
- (null, new.id, 1)
- */
return $concert;
}
}
- public static function update_concert($id, $cname, $venue, $cdate, $ticketlink, $eventlink)
+ public function update(object $attrs) : bool
{
- global $wpdb;
+ $need_update = false;
- $res = $wpdb->update('wpg_concerts', array(
- 'wpgconcert_name' => $cname,
- 'venue' => $venue,
- 'wpgconcert_date' => $cdate,
- 'wpgconcert_tickets' => $ticketlink,
- 'wpgconcert_event' => $eventlink
- ),
- array('id' => $id)
- );
+ if (isset($attrs->wpgconcert_name) && $attrs->wpgconcert_name != $this->cname) {
+ $this->cname = $attrs->wpgconcert_name;
+ $need_update = true;
+ }
- if ( $res === false ) {
- // exit( var_dump( $wpdb->last_query ) ); //for onscreen debugging when needed
- error_log( __CLASS__ . '::' . __FUNCTION__ . ": {$wpdb->last_error}");
- die;
+ if (isset($attrs->wpgconcert_date) && $attrs->wpgconcert_date != $this->cdate) {
+ $this->cdate = $attrs->wpgconcert_date;
+ $need_update = true;
+ }
+
+ if (isset($attrs->wpgconcert_tickets) && $attrs->wpgconcert_tickets != $this->tickets) {
+ $this->tickets = $attrs->wpgconcert_tickets;
+ $need_update = true;
+ }
+
+ if (isset($attrs->wpgconcert_event) && $attrs->wpgconcert_event != $this->eventlink) {
+ $this->eventling = $attrs->wpgconcert_eventlink;
+ $need_update = true;
+ }
+
+ if (isset($attrs->wpgconcert_status) && $attrs->wpgconcert_status != $this->status) {
+ $this->status = $attrs->wpgconcert_status;
+ $need_update = true;
+ }
+
+ if (isset($attrs->wpgconcert_roles) && $attrs->wpgconcert_roles != $this->roles) {
+ $this->roles = $attrs->wpgconcert_roles;
+ $need_update = true;
+ }
+
+ if (isset($attrs->venue) && $attrs->venue != $this->venue()->id()) {
+ $this->venue = GiglogAdmin_Venue::get($attrs->venue);
+ $need_update = true;
}
- return ($wpdb->last_error);
+ if ($need_update) {
+ $this->save();
+ }
+
+ return $need_update;
}
public static function find($cname, $venue, $date)
@@ -176,8 +200,7 @@ if ( !class_exists('GiglogAdmin_Concert') ) {
{
global $wpdb;
- $query = 'SELECT wpg_concerts.*, wpg_venues.wpgvenue_name, wpg_venues.wpgvenue_city '
- . 'FROM wpg_concerts '
+ $query = 'SELECT * FROM wpg_concerts '
. 'INNER JOIN wpg_venues ON wpg_concerts.venue = wpg_venues.id ';
$where = [];
@@ -203,34 +226,27 @@ if ( !class_exists('GiglogAdmin_Concert') ) {
{
global $wpdb;
- if ( $this->id !== NULL ) {
- $res = $wpdb->update('wpg_concerts', array(
- 'id' => $this->id,
- 'wpgconcert_name' => $this->cname,
- 'venue' => $this->venue->id(),
- 'wpgconcert_date' => $this->cdate,
- 'wpgconcert_tickets' => $this->tickets,
- 'wpgconcert_event' => $this->eventlink,
- 'wpgconcert_status' => $this->status,
- ),
- array( 'id' => $this->id ) );
+ $columns = [
+ 'wpgconcert_name' => $this->cname,
+ 'venue' => $this->venue->id(),
+ 'wpgconcert_date' => $this->cdate,
+ 'wpgconcert_tickets' => $this->tickets,
+ 'wpgconcert_event' => $this->eventlink,
+ 'wpgconcert_status' => $this->status,
+ 'wpgconcert_roles' => wp_json_encode( $this->roles ),
+ ];
+ if ( $this->id !== NULL ) {
+ $res = $wpdb->update( 'wpg_concerts', $columns, [ 'id' => $this->id ] );
}
else {
- $res = $wpdb->insert('wpg_concerts', array(
- 'wpgconcert_name' => $this->cname,
- 'venue' => $this->venue->id(),
- 'wpgconcert_date' => $this->cdate,
- 'wpgconcert_tickets' => $this->tickets,
- 'wpgconcert_event' => $this->eventlink,
- 'wpgconcert_status' => $this->status,
- ));
+ $res = $wpdb->insert('wpg_concerts', $columns);
}
if ( $res === false ) {
$wpdb->print_error( __METHOD__ );
}
- else {
+ elseif ( $this->id === NULL ) {
$this->id = $wpdb->insert_id;
}
}
@@ -271,10 +287,33 @@ if ( !class_exists('GiglogAdmin_Concert') ) {
$this->status = $new_status;
}
- public function roles()
+ /**
+ * Return the roles defined for this concert.
+ *
+ * @return array<string, string>
+ */
+ public function roles() : array
{
return $this->roles;
}
+
+ public function assign_role( string $role, string $username ) : void
+ {
+ $this->roles[$role] = $username;
+ }
+
+ public function remove_user_from_roles( string $username ) : void
+ {
+ $this->roles = array_filter($this->roles, fn($u) => $u != $username);
+ }
+
+ public function created() : DateTimeImmutable {
+ return $this->created;
+ }
+
+ public function updated() : DateTimeImmutable {
+ return $this->updated;
+ }
}
}
?>
diff --git a/includes/concertlogs.php b/includes/concertlogs.php
deleted file mode 100644
index 8b1ca63..0000000
--- a/includes/concertlogs.php
+++ /dev/null
@@ -1,115 +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_Concertlogs' ) )
-{
- class GiglogAdmin_Concertlogs
- {
- private array $roles;
-
- private function __construct( $attr = [] )
- {
- $this->roles['photo1'] = $attr->{"wpgcl_photo1"};
- $this->roles['photo2'] = $attr->{"wpgcl_photo2"};
- $this->roles['rev1'] = $attr->{"wpgcl_rev1"};
- $this->roles['rev2'] = $attr->{"wpgcl_rev2"};
- }
-
- /**
- * Adds a default entry for the given concert id in the
- * concert logs table.
- *
- * @return void
- */
- public static function add($concert_id): void
- {
- global $wpdb;
-
- $q = $wpdb->prepare(
- "INSERT INTO wpg_concertlogs SET wpgcl_concertid = %d",
- intval($concert_id));
-
- $wpdb->query($q);
- }
-
- static function update($cid, $ph1, $ph2, $rev1, $rev2)
- {
- global $wpdb;
-
- $res = $wpdb->update('wpg_concertlogs', array(
- 'wpgcl_photo1' => $ph1,
- 'wpgcl_photo2' => $ph2,
- 'wpgcl_rev1' => $rev1,
- 'wpgcl_rev2' => $rev2
- ),
- array('wpgcl_concertid' => $cid)
- );
-
- if ( !$res ) {
- // exit( var_dump( $wpdb->last_query ) ); //for onscreen debugging when needed
- error_log( __CLASS__ . '::' . __FUNCTION__ . ": {$wpdb->last_error}");
- die;
- }
-
- return ($wpdb->last_error);
- }
-
- public static function get_status(int $concert_id) : ?int
- {
- global $wpdb;
-
- $q = $wpdb->prepare(
- 'select wpgcl_status from wpg_concertlogs where id = %d',
- $concert_id);
- $res = $wpdb->get_results($q);
-
- return $res ? $res[0]->wpgcl_status : null;
- }
-
- public static function get_assigned_user( int $concert_id, string $role ) : ?string
- {
- global $wpdb;
-
- if ( ! in_array( $role, [ 'photo1', 'photo2', 'rev1', 'rev2' ] ) ) {
- error_log(__METHOD__ . ": invalid \$role ({$role}) given.");
- return null;
- }
-
- $column = "wpgcl_{$role}";
- $q = $wpdb->prepare(
- "select {$column} from wpg_concertlogs where id = %d",
- $concert_id);
-
- $res = $wpdb->get_row($q, ARRAY_A);
-
- return array_shift( $res );
- }
-
- public static function get(int $concert_id) : ?self
- {
- global $wpdb;
-
- $q = $wpdb->prepare(
- "select * from wpg_concertlogs where id = %d",
- $concert_id);
-
- $res = $wpdb->get_row($q);
-
- return $res ? new self($res) : null;
- }
-
- public function get_assigned_role(string $username) : ?string
- {
- return array_search( $username, $this->roles ) || NULL;
- }
-
- public function assigned_user(string $role) : ?string
- {
- return $this->roles[$role];
- }
- }
-}
diff --git a/includes/public/shortcodes/giglog_bands.php b/includes/public/shortcodes/giglog_bands.php
deleted file mode 100644
index e4fe71d..0000000
--- a/includes/public/shortcodes/giglog_bands.php
+++ /dev/null
@@ -1,118 +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
-
-/*
- * code used for giglogadmin for the open page where everyone sees the list of
- * concerts. First function displays filters by city, venue and the second one
- * builds the table with concerts
- */
-
-function giglogadmin_getfilters(): string
-{
- global $wpdb;
-
- //echo (var_dump($_POST["selectvenue"]));
-
- $results = $wpdb->get_results('select distinct wpgvenue_city from wpg_venues');
- $select = '<form method="POST" action=""><select name="selectcity">';
- $select .= '<option value="ALL" ';
- if (isset($_POST["selectcity"]) && $_POST["selectcity"] == "ALL") {
- $select .= ' selected = "selected"';
- }
- $select .= '> All cities</option>';
- foreach ($results AS $row) {
- $select .= '<option value="' . $row->wpgvenue_city . '"';
- if (isset($_POST["selectcity"]) && $_POST["selectcity"] == $row->wpgvenue_city) {
- $select .= ' selected = "selected"';
- }
- $select .= ' >' . $row->wpgvenue_city . '</option>';
- }
-
- if (isset($_POST["selectcity"]) && $_POST["selectcity"] != "ALL") {
- $select .= '</select>';
- //second drop down for venue
-
- $vquery = "select id, wpgvenue_name from wpg_venues";
- $vquery .= " where wpgvenue_city='" . $_POST["selectcity"] . "'";
- $resultsv = $wpdb->get_results($vquery);
- $select .= '<select name="selectvenue">';
- $select .= '<option value="0" ';
- if (isset($_POST["selectvenue"]) && $_POST["selectvenue"] == "0") {
- $select .= ' selected = "selected"';
- }
- $select .= '> All venues</option>';
-
- foreach ($resultsv AS $rowv) {
- $select .= '<option value="' . $rowv->id . '"';
- if (isset($_POST["selectvenue"]) && $_POST["selectvenue"] == $rowv->id) {
- $select .= ' selected = "selected"';
- }
- $select .= ' >' . $rowv->wpgvenue_name . '</option>';
- }
- //end IF that checks if city was selected
- }
- $select .= '</select><input type="submit" value="Filter"></form>';
- return $select;
-}
-
-
-function giglogadmin_getconcerts(): string
-{
- global $wpdb;
- // Shortcodes RETURN content, so store in a variable to return
- $content = '<table class="concertstb">';
- // $content .= '</tr><th>CITY</th><th>ID</th><th>BAND</th><th>VENUE</th><th>DATE</th><th>TICKETS</th><th>EVENT</th></tr>';
- $content .= '<tr class="concertshrow"><th>CITY</th><th>TITLE</th><th>VENUE</th><th>DATE</th><th>TICKETS</th><th>EVENT</th></tr>';
- // Use the submitted "city" if any. Otherwise, use the default/static value.
- $cty = filter_input(INPUT_POST, 'selectcity');
- $cty = $cty ? $cty : 'ALL';
-
- $venue = filter_input(INPUT_POST, 'selectvenue');
- //echo($_POST['selectvenue']);
- $venue = $venue ? $venue : '0';
-
-
- $query = "SELECT wpgc.id, wpgc.wpgconcert_name ,wpgv.wpgvenue_name as venue ,wpgc.wpgconcert_date, wpgc.wpgconcert_tickets, wpgc.wpgconcert_event, wpgv.wpgvenue_city, wpgv.wpgvenue_webpage
- FROM wpg_concerts wpgc, wpg_venues wpgv
-where wpgc.venue = wpgv.id
-and wpgconcert_date >= CURDATE()";
- $query .= ($cty == "ALL") ? "" : " and wpgv.wpgvenue_city='" . $cty . "'";
- $query .= ($venue == "0") ? "" : " and wpgv.id='" . $venue . "'";
- $query .= " order by wpgv.wpgvenue_city, wpgconcert_date, wpgc.id";
- //echo($query);
- $results = $wpdb->get_results($query);
-
-
- $lastType = '';
- foreach ($results AS $row) {
- $content .= '<tr class="concertsrow">';
-
- if ($lastType != '' && $lastType != $row->wpgvenue_city) {
- $content .= '<td class="concertstd">' . $row->wpgvenue_city . '</td></tr><tr>';
- }
-
- if ($lastType == '') {
- $content .= '<td>' . $row->wpgvenue_city . '</td></tr><tr>';
- }
- // Modify these to match the database structure
- // $content .= '<td>' . $row->id. '</td>';
- $content .= '<td></td>';
- $content .= '<td>' . $row->wpgconcert_name . '</td>';
- $content .= '<td>' . $row->venue . '</td>';
- $fdate = strtotime($row->wpgconcert_date);
- $newformat = date('d.M.Y', $fdate);
-
- //$content .= DATE_FORMAT($fdate,'%d.%b.%Y');
- $content .= '<td>' . $newformat . '</td>';
- $content .= '<td><a href="' . $row->wpgconcert_tickets . '" target="_blank">Tickets</a></td>';
- $content .= '<td><a href="' . $row->wpgconcert_event . '" target="_blank">Event link</a></td>';
- $content .= '</tr>';
- $lastType = $row->wpgvenue_city;
- }
- $content .= '</table>';
- // return the table
- return $content;
-}
diff --git a/includes/public/shortcodes/giglog_display_unprocessed.php b/includes/public/shortcodes/giglog_display_unprocessed.php
deleted file mode 100644
index 90ef69f..0000000
--- a/includes/public/shortcodes/giglog_display_unprocessed.php
+++ /dev/null
@@ -1,145 +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
-
-/*
- * I kinda overloaded this snippet. Added comments for each function. But this
- * is used in the giglog admin page, which should only be available to admin
- * users. After the file is being uploaded into the concertlists folder, its
- * content is written into wpg_files. Then the content is split into lines and
- * each line is transformed intoa concert
- */
-
-/* this checks th wpg_files table to see if any file is uploaded but hasn't
- * gone through the processing process - aka fetching each line and
- * transforming it into a concert line
- */
-function giglogadmin_getunprocessed(): string
-{
- global $wpdb;
-
- $content = '<br /><h3> UNPROCESSED ROWS</h3><table class="concertstable">';
- $content .= '<tr class="concertsheaderrow"><th>Filerow</th><th>FILENAME</th><th>DATE</TH><th>UploadedContent</th>';
- $query = 'SELECT rowid,filename,filedate,rowcontent from wpg_files where processed="N"';
- $results = $wpdb->get_results($query);
- foreach ($results AS $row) {
- $content .= '<tr>';
- $content .= '<td>' . $row->rowid . '</td>';
- $content .= '<td>' . $row->filename . '</td>';
- $content .= '<td>' . $row->filedate . '</td>';
- $content .= '<td>' . $row->rowcontent . '</td>';
- $content .= '</tr>';
- }
- $content .= '</table>';
- return $content;
-}
-
-/* function that goes through each line of the unprocessed file. Each line is
- * checked against the concerts table. if it exists - concert and date and
- * venue - it does nothing with it. If it doesn't exist, it checks if band or
- * venue exists. If they don't, they get created, if they do, their ID from
- * their table is fetchd and used in concerts table
- */
-function giglogadmin_insertconcerts(): string
-{
- global $wpdb;
- $concertlist = '<p>Inserted the following:</p>';
- $newconcert= [];
- $query1 = 'SELECT id,rowid,filename,filedate,rowcontent from wpg_files where processed="N"';
- $cresults = $wpdb->get_results($query1);
- foreach ($cresults AS $row) {
- $rowfileid = $row->id;
- $resultArray = explode("\t", $row->rowcontent);
- $cname = $resultArray[0];
- $venue = $resultArray[1];
- $condate = date('Y-m-d', strtotime($resultArray[2]));
- $ticketlink = $resultArray[3];
- $eventlink = $resultArray[4];
- //first item in the row should be band $resultArray[0]; second should be venue $resultArray[1]; third should be concert date $resultArray[2];
- //fourth item is ticketlink $resultArray[3]; fifth item is eventlink $resultArray[4];
-
-
-
- //processing venue
- if (is_numeric($venue))
- $newconcert[1] = $venue;
- else {
- $venuesql = 'SELECT id FROM wpg_venues WHERE upper(wpgvenue_name)="' . $venue . '"';
- $results = $wpdb->get_results($venuesql);
- if ($results)
- $newconcert[1] = $results[0]->id;
- else {
- $wpdb->insert('wpg_venues', array(
- 'id' => '',
- 'wpgvenue_name' => $venue
- ));
- echo ($wpdb->last_error);
- $newconcert[1] = $wpdb->insert_id;
- }
- }
- //done processing venue
-
- //not sure how to check dates, hopefully manual verification of files will take care of it
-
- //check if concert already exists and return ID if it does. Not checking by date, to be considered
- $csql = 'SELECT id from wpg_concerts where wpgconcert_name = ' . $cname . ' and venue = ' . $newconcert[1] . ' and wpgconcert_date ="' . $condate . '"';
-
- $cresults = $wpdb->get_results($csql);
- if ($cresults) {
- $usql = 'UPDATE wpg_files SET processed="D", wpgc_id = ' . $cresults[0]->id . ' WHERE id = ' . $rowfileid;
-
- $uresults = $wpdb->get_results($usql);
- $concertlist .= 'DUPLICATE ROW detected Title ' . $cname . ' with band ID ' . $newconcert[0];
- $concertlist .= ', VENUE ' . $venue . ' with venue ID ' . $newconcert[1];
- $concertlist .= ', CONCERTDATE ' . $condate;
- $concertlist .= ' <br />';
- } else {
- $wpdb->insert('wpg_concerts', array(
- 'id' => '',
- 'wpgconcert_name' => cname,
- 'venue' => $newconcert[1],
- 'wpgconcert_date' => $condate,
- 'wpgconcert_tickets' => $ticketlink,
- 'wpgconcert_event' => $eventlink
- ));
- echo ($wpdb->last_error);
- $newconcertid = $wpdb->insert_id;
-
- $usql = 'UPDATE wpg_files SET processed="Y", wpgc_id = ' . $newconcertid . ' WHERE id = ' . $rowfileid;
-
- $uresults = $wpdb->get_results($usql);
- $concertlist .= 'name ' . $cname ;
- $concertlist .= ', VENUE ' . $venue . ' with venue ID ' . $newconcert[1];
- $concertlist .= ', CONCERTDATE ' . $condate . ', Ticket LINK ' . $ticketlink . ', event LINK' . $eventlink;
- $concertlist .= ' <br />';
-
- }
-
- //end check if concert exists
-
-
- //remember to add the concert ID when displaying
-
-
- } //end looping through unprocessed rows
-
- return $concertlist;
-}
-
-function giglogadmin_display_unprocessed(): string {
- $output = giglogadmin_getunprocessed();
-
- $output .= '<form method="POST" action=""><input type="submit" name="ProcessConcerts" value="ProcessConcerts"/></form>';
-
-
- if (isset($_POST['ProcessConcerts'])) {
- $output .= giglogadmin_insertconcerts();
-
- //$url2 = $_SERVER['REQUEST_URI'];
- //header("Refresh: 5; URL=$url2"); //reload page
- } //end if button for process concerts is pressed
-
- return $output;
-}
diff --git a/includes/public/shortcodes/giglog_photographers.php b/includes/public/shortcodes/giglog_photographers.php
deleted file mode 100644
index 829c53e..0000000
--- a/includes/public/shortcodes/giglog_photographers.php
+++ /dev/null
@@ -1,385 +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
-
-/*
- * code used for giglogadmin for the page where users such as photographers/concert reviewers
- * check what gigs are available and show interest for them
- * Admin users also control concert statuses here
- */
-
-function giglogadmin_assignconcert($p1, $c): void
-{
- global $wpdb;
-
- $hf_user = wp_get_current_user();
- $hf_username = $hf_user->user_login;
- $to = 'live@eternal-terror.com';
- $subject = $hf_username.' has taken '.$p1. 'for a concert with id '.$c;
- $body = 'The email body content';
- $headers = array('Content-Type: text/html; charset=UTF-8');
-
-
-
- if ($p1 == 'photo1') $usql = "UPDATE wpg_concertlogs SET wpgcl_photo1='".$hf_username."' WHERE wpgcl_concertid=".$c;
- if ($p1 == 'photo2') $usql = "UPDATE wpg_concertlogs SET wpgcl_photo2='".$hf_username."' WHERE wpgcl_concertid=".$c;
- if ($p1 == 'rev1') $usql = "UPDATE wpg_concertlogs SET wpgcl_rev1='".$hf_username."' WHERE wpgcl_concertid=".$c;
- if ($p1 == 'rev2') $usql = "UPDATE wpg_concertlogs SET wpgcl_rev2='".$hf_username."' WHERE wpgcl_concertid=".$c;
-
- $uresults = $wpdb->get_results($usql);
- $wpdb->insert( 'wpg_logchanges', array (
- 'id' => '',
- 'userid' => $hf_username,
- 'action' => 'assigned '.$p1,
- 'concertid' => $c));
- echo ($wpdb->last_error );
- wp_mail( $to, $subject, $body, $headers );
-
-
-}
-
-function giglogadmin_unassignconcert($p1, $c): void
-{
- global $wpdb;
-
- $hf_user = wp_get_current_user();
- $hf_username = $hf_user->user_login;
- $to = 'live@eternal-terror.com';
- $subject = $hf_username.' has UNASSINED '.$p1. 'for a concert with id '.$c;
- $body = 'The email body content';
- $headers = array('Content-Type: text/html; charset=UTF-8');
-
-
-
- if ($p1 == 'photo1') $usql = "UPDATE wpg_concertlogs SET wpgcl_photo1='' WHERE wpgcl_concertid=".$c;
- if ($p1 == 'photo2') $usql = "UPDATE wpg_concertlogs SET wpgcl_photo2='' WHERE wpgcl_concertid=".$c;
- if ($p1 == 'rev1') $usql = "UPDATE wpg_concertlogs SET wpgcl_rev1='' WHERE wpgcl_concertid=".$c;
- if ($p1 == 'rev2') $usql = "UPDATE wpg_concertlogs SET wpgcl_rev2='' WHERE wpgcl_concertid=".$c;
-
-
- $uresults = $wpdb->get_results($usql);
- $wpdb->insert( 'wpg_logchanges', array (
- 'id' => '',
- 'userid' => $hf_username,
- 'action' => 'unassigned '.$p1,
- 'concertid' => $c));
- echo ($wpdb->last_error );
- wp_mail( $to, $subject, $body, $headers );
-
-
-}
-
-/**
- * @return null|string
- */
-function giglogadmin_getpublishstatus ($c)
-{
- global $wpdb;
- $date1 = new DateTime("now");
- $dsql = "select filedate from wpg_files where wpgc_id=".$c;
- $results = $wpdb->get_results($dsql);
- foreach ( $results AS $row )
- { //$x = strtotime($row -> filedate);
- $x= date('Y-m-d H:i:s', strtotime($row -> filedate));
- $date2 = new DateTime($x, new DateTimeZone('Europe/London'));
- $dd = date_diff ($date1, $date2);
- $datediff = $dd ->format('%d');
- }
- if ($datediff <= 10) return ('<span style="color:green">NEW</span>');
-}
-
-
-/**
- * @return null|string
- */
-function giglogadmin_returnuser($p1, $c)
-{
- global $wpdb;
- $hf_user = wp_get_current_user();
- $hf_username = $hf_user->user_login;
-
- //PHOTO1
- if ($p1 == 'photo1')
- {
- //checking if taken
- $vquery0 = "select wpgcl_photo1 from wpg_concertlogs where wpgcl_concertid=".$c ;
- $results = $wpdb->get_results($vquery0);
- foreach ( $results AS $row ) $x= $row -> wpgcl_photo1;
- if ($x !='' and $x!=$hf_username) { return ('<span class="takenby">Taken</span><div class="takenby">Taken by '.$x.'</div>'); }
- else
- if ($x==$hf_username) //if current user
- return ('<form class="unassignit" method="POST" action=""> <input type="hidden" name="cid" value="' . $c. '" /><input type="hidden" name="pid" value="' . $p1. '" /><input type="submit" name="unassignitem" value=""/>
- </form>');
- else //not taken by anyone
- return ('<form method="POST" action=""> <input type="hidden" name="cid" value="' . $c. '" /><input type="hidden" name="pid" value="' . $p1. '" /><input type="submit" name="assignitem" value=""/>
- </form>');
- }
- //PHOTO2
- if ($p1 == 'photo2')
- {
- $vquery0 = "select wpgcl_photo2 from wpg_concertlogs where wpgcl_concertid=".$c ;
- $results = $wpdb->get_results($vquery0);
- foreach ( $results AS $row ) $x= $row -> wpgcl_photo2;
- if ($x !='' and $x!=$hf_username) { return ('<span class="takenby">Taken</span><div class="takenby">Taken by '.$x.'</div>'); }
- else
- if ($x==$hf_username) //if current user
- return ('<form class="unassignit" method="POST" action=""> <input type="hidden" name="cid" value="' . $c. '" /><input type="hidden" name="pid" value="' . $p1. '" /><input type="submit" name="unassignitem" value=""/>
- </form>');
-
- else //not taken by anyone
- return ('<form method="POST" action=""> <input type="hidden" name="cid" value="' . $c. '" /><input type="hidden" name="pid" value="' . $p1. '" /><input type="submit" name="assignitem" value=""/>
- </form>');
-
- }
- //TEXT1
- if ($p1 == 'rev1')
- {
- $vquery0 = "select wpgcl_rev1 from wpg_concertlogs where wpgcl_concertid=".$c ;
- $results = $wpdb->get_results($vquery0);
- foreach ( $results AS $row ) $x= $row -> wpgcl_rev1;
- if ($x !='' and $x!=$hf_username) { ('<span class="takenby">Taken</span><div class="takenby">Taken by '.$x.'</div>'); }
- else
- if ($x==$hf_username) //if current user
- return ('<form class="unassignit" method="POST" action=""> <input type="hidden" name="cid" value="' . $c. '" /><input type="hidden" name="pid" value="' . $p1. '" /><input type="submit" name="unassignitem" value=""/>
- </form>');
- else //not taken by anyone
- return ('<form method="POST" action=""> <input type="hidden" name="cid" value="' . $c. '" /><input type="hidden" name="pid" value="' . $p1. '" /><input type="submit" name="assignitem" value=""/>
- </form>');
-
- }
- //TEXT2
- if ($p1 == 'rev2')
- {
- $vquery0 = "select wpgcl_rev2 from wpg_concertlogs where wpgcl_concertid=".$c ;
- $results = $wpdb->get_results($vquery0);
- foreach ( $results AS $row ) $x= $row -> wpgcl_rev2;
- if ($x !='' and $x!=$hf_username) { ('<span class="takenby">Taken</span><div class="takenby">Taken by '.$x.'</div>'); }
- else
- if ($x==$hf_username) //if current user
- return ('<form class="unassignit" method="POST" action=""> <input type="hidden" name="cid" value="' . $c. '" /><input type="hidden" name="pid" value="' . $p1. '" /><input type="submit" name="unassignitem" value=""/>
- </form>');
- else //not taken by anyone
- return ('<form method="POST" action=""> <input type="hidden" name="cid" value="' . $c. '" /><input type="hidden" name="pid" value="' . $p1. '" /><input type="submit" name="assignitem" value=""/>
- </form>');
-
- }
-
-
-}
-
-
-function giglogadmin_getfiltersphotog(): string {
- global $wpdb;
-
- //echo (var_dump($_POST["selectvenue"]));
-
- $results = $wpdb->get_results('select distinct wpgvenue_city from wpg_venues');
- $select= '<form method="POST" action=""><select name="selectcity">';
- $select.='<option value="ALL" ';
- if(isset($_POST["selectcity"]) && $_POST["selectcity"] == "ALL")
- { $select.= ' selected = "selected"';}
- $select.='> All cities</option>';
- foreach ( $results AS $row )
- {
- $select.='<option value="'.$row->wpgvenue_city.'"';
- if(isset($_POST["selectcity"]) && $_POST["selectcity"] == $row->wpgvenue_city)
- { $select.= ' selected = "selected"';}
- $select.=' >'. $row->wpgvenue_city.'</option>';
- }
-
- if(isset($_POST["selectcity"]) && $_POST["selectcity"] != "ALL")
- {
- $select.='</select>';
- //second drop down for venue
-
- $vquery = "select id, wpgvenue_name from wpg_venues";
- $vquery.= " where wpgvenue_city='".$_POST["selectcity"]."'";
- $resultsv = $wpdb->get_results($vquery);
- $select.= '<select name="selectvenue">';
- $select.='<option value="0" ';
- if(isset($_POST["selectvenue"]) && $_POST["selectvenue"] == "0")
- { $select.= ' selected = "selected"';}
- $select.='> All venues</option>';
-
- foreach ( $resultsv AS $rowv )
- {
- $select.='<option value="'.$rowv->id.'"';
- if(isset($_POST["selectvenue"]) && $_POST["selectvenue"] == $rowv->id)
- { $select.= ' selected = "selected"';}
- $select.=' >'. $rowv->wpgvenue_name.'</option>';
- }
- //end IF that checks if city was selected
- }
- $select.='</select><input type="submit" value="Filter"></form>';
- return $select;
-}
-
-
-function giglogadmin_getconcertsphotog ( ): string {
- $hf_user = wp_get_current_user();
- $hf_username = $hf_user->user_login;
- $roles = ( array ) $hf_user->roles;
- global $wpdb;
-
- // Shortcodes RETURN content, so store in a variable to return
- $content = '<p>The available slots are marked with the green checkbox.
- If you click on it, it will be assigned to you and if you no longer
- wish to cover that concert, click on the red icon and you will be
- unassigned. A mail should be sent to the admin when this happens,
- but in order for the accreditation request to be sent, you have to
- mail live@eternal-terror.com with the template containing concert
- information. There might be some exceptions, but those are discussed
- case by case. So whenever you want a concert, assign yourself and send
- the template no later than 3 weeks before the concert.</p>
-
- <p>Admin will try to keep the concert status updated so that you know
- what the accreditation status is. You will get personal message if this
- is really close to the concert date.</p>';
-
- $content .= '<table class="assignit">';
- // $content .= '</tr><th>CITY</th><th>ID</th><th>BAND</th><th>VENUE</th><th>DATE</th></tr>';
-
- $content .= '<tr class="assignithrow">
- <th>CITY</th><th>TITLE</th><th>VENUE</th><th>DATE</th><th> </th>
- <th>PHOTO1</th><th>PHOTO2</th><th>TEXT1</th><th>TEXT2</th>
- <th>STATUS</th>';
- if (current_user_can('administrator')) //($hf_username == 'etadmin')
- $content .= '<th>AdminButtons</th>';
- $content .= '</tr>';
-
- // Use the submitted "city" if any. Otherwise, use the default/static value.
- $cty= filter_input( INPUT_POST, 'selectcity' );
- $cty= $cty? $cty: 'ALL';
-
- $venue= filter_input( INPUT_POST, 'selectvenue' );
- //echo($_POST['selectvenue']);
- $venue= $venue? $venue: '0';
-
-
- $query = "SELECT wpgc.id, wpgc.wpgconcert_name, wpgv.wpgvenue_name as venue, wpgc.wpgconcert_date, wpgc.wpgconcert_tickets, wpgc.wpgconcert_event, wpgv.wpgvenue_city, wpgv.wpgvenue_webpage, wpgps.wpgs_name
- FROM wpg_concerts wpgc, wpg_venues wpgv, wpg_pressstatus wpgps, wpg_concertlogs wpgcl
- where wpgc.venue = wpgv.id
- and wpgconcert_date >= CURDATE()
- and wpgps.id = wpgcl.wpgcl_status
- and wpgcl.wpgcl_concertid=wpgc.id";
-
- $query .= ($cty == "ALL") ? "" : " and wpgv.wpgvenue_city='" .$cty ."'";
- $query .= ($venue == "0") ? "" : " and wpgv.id='" .$venue ."'";
- $query .=" order by wpgv.wpgvenue_city, wpgconcert_date" ;
- //echo($query);
- $results = $wpdb->get_results($query);
-
-
- $lastType = '';
- foreach ( $results AS $row ) {
- $content .= '<tr class="assignitr">';
-
- if($lastType != '' && $lastType != $row->wpgvenue_city) {
- $content .= '<td>'.$row->wpgvenue_city.'</td></tr><tr>';
- }
-
- if ($lastType == '' )
- {$content .= '<td>'.$row->wpgvenue_city.'</td></tr><tr>';
- }
- // Modify these to match the database structure
- // $content .= '<td>' . $row->id. '</td>';
- $content .= '<td></td>';
- $content .= '<td>' . $row->wpgconcert_name. '</td>';
- $content .= '<td>' . $row->venue. '</td>';
- $fdate = strtotime($row->wpgconcert_date);
- $newformat = date('d.M.Y',$fdate);
-
- //$content .= DATE_FORMAT($fdate,'%d.%b.%Y');
- $content .= '<td>' .$newformat. '</td>';
- $content .= '<td>'.giglogadmin_getpublishstatus($row->id ).'</td>';
- $content .= '<td>'.giglogadmin_returnuser('photo1', $row->id ).'</td>';
- $content .= '<td>'.giglogadmin_returnuser('photo2', $row->id ).'</td>';
- $content .= '<td>'.giglogadmin_returnuser('rev1', $row->id ).'</td>';
- $content .= '<td>'.giglogadmin_returnuser('rev2', $row->id ).'</td>';
- $content .= '<td class="adminbuttons">'.$row -> wpgs_name;
- $content .= '</td>';
- if (current_user_can('administrator')) //($hf_username == 'etadmin')
- { $content .= '<td class="adminbuttons">';
- $content .= '<span><form method="POST" action=""> <input type="hidden" name="cid" value="' . $row->id. '" /><input type="submit" name="reqsent" value="REQSENT"/><input type="submit" name="phok" value="PHOK"/><input type="submit" name="txtok" value="TXOK"/><input type="submit" name="allok" value="ALLOK"/><input type="submit" name="rej" value="REJ"/>
- </form></span>';
- $content .= '</td>';
- }
- $content .= '</tr>';
- $lastType = $row->wpgvenue_city;
- }
- $content .= '</table>';
-
- if(isset($_POST['assignitem']))
- {
- echo (giglogadmin_assignconcert($_POST['pid'],$_POST['cid']));
-
- $url2=$_SERVER['REQUEST_URI'];
- header("Refresh: 1; URL=$url2"); //reload page
- }
-
- if(isset($_POST['unassignitem']))
- {
- echo (giglogadmin_unassignconcert($_POST['pid'],$_POST['cid']));
-
- $url3=$_SERVER['REQUEST_URI'];
- header("Refresh: 1; URL=$url3"); //reload page
- }
-
- if(isset($_POST['reqsent']))
- {
- echo (giglogadmin_assignconcert($_POST['pid'],$_POST['cid']));
- $usql = "UPDATE wpg_concertlogs SET wpgcl_status=2 WHERE wpgcl_concertid=".$_POST['cid'];
- $uresults = $wpdb->get_results($usql);
- $url2=$_SERVER['REQUEST_URI'];
- header("Refresh: 1; URL=$url2"); //reload page
- }
-
- if(isset($_POST['phok']))
- {
- $usql = "UPDATE wpg_concertlogs SET wpgcl_status=3 WHERE wpgcl_concertid=".$_POST['cid'];
- $uresults = $wpdb->get_results($usql);
-
- $url2=$_SERVER['REQUEST_URI'];
- header("Refresh: 1; URL=$url2"); //reload page
- }
-
- if(isset($_POST['txtok']))
- {
- $usql = "UPDATE wpg_concertlogs SET wpgcl_status=4 WHERE wpgcl_concertid=".$_POST['cid'];
- $uresults = $wpdb->get_results($usql);
-
- $url2=$_SERVER['REQUEST_URI'];
- header("Refresh: 1; URL=$url2"); //reload page
- }
-
- if(isset($_POST['allok']))
- {
- $usql = "UPDATE wpg_concertlogs SET wpgcl_status=5 WHERE wpgcl_concertid=".$_POST['cid'];
- $uresults = $wpdb->get_results($usql);
-
- $url2=$_SERVER['REQUEST_URI'];
- header("Refresh: 1; URL=$url2"); //reload page
- }
-
- if(isset($_POST['rej']))
- {
- $usql = "UPDATE wpg_concertlogs SET wpgcl_status=6 WHERE wpgcl_concertid=".$_POST['cid'];
- $uresults = $wpdb->get_results($usql);
-
- $url2=$_SERVER['REQUEST_URI'];
- header("Refresh: 1; URL=$url2"); //reload page
- }
-
- // return the table
- return $content;
-}
-
-function giglogadmin_photographers(): string
-{
- $output = giglogadmin_getfiltersphotog();
- $output .= giglogadmin_getconcertsphotog();
-
- return $output;
-}
diff --git a/includes/public/shortcodes/giglog_process_files.php b/includes/public/shortcodes/giglog_process_files.php
deleted file mode 100644
index 9443cda..0000000
--- a/includes/public/shortcodes/giglog_process_files.php
+++ /dev/null
@@ -1,72 +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
-
-/*
- * snippet used to upload files with concerts. File is tab delimited file.
- * Band Venue Date TicketLink Eventlink. The form is at the end of this snippet
- */
-
-function giglogadmin_upload_files(): string {
- global $wpdb;
- $output = "";
- $dir = wp_upload_dir()['basedir'].'/concertlists/'; //the basedir is from file uploader plugin, namely the uploads folder in which I created a concertlist folder
- if ( !file_exists($dir) ) {
- mkdir( $dir );
- }
-
- $cfiles = scandir($dir);
- foreach ($cfiles as $value) { //list all files in directory
- $my_id = 0; //reset my_id which is used to check if anything was inserted
- if (strlen($value) > 3 and (is_dir($dir . '/' . $value) == false)) {
- $output .= 'Filename: ' . $value . '<br />';
- $filecontent = file_get_contents($dir . '/' . $value);
- $listcontent = str_replace(array(
- "\r",
- "\n"
- ), '<br />', $filecontent); //tring to replace end of lines with brs for html
-
- $output .= '<b>FILE CONTENT</b><br />';
- $r = 1;
- //processing each line of the file into a new row in wpg_files table
- if (isset($_POST['InsertFileContent'])) {
- $lines = new SplFileObject($dir . '/' . $value);
- //and then execute a sql query here
- $table = 'wpg_files';
- foreach ($lines as $newconcert) {
- $output .= '<li> ' . $newconcert . '</li>';
- $wpdb->insert($table, array(
- 'id' => '',
- 'filename' => $value,
- 'rowid' => $r,
- 'rowcontent' => $newconcert
- ));
- $r++;
- //$wpdb->print_error();
- $output .= $wpdb->last_error;
- $my_id = $wpdb->insert_id;
- $output .= '<br />---------------<br />Inserted rowID ' . $my_id . '<br />';
- } //end processing each line
- } //end file processing
-
-
- } //end if that checks whether filename is longer than 3 and is actually a file
-
- if ($my_id > 0) //if anything was inserted, move file to handled
- {
- $output .= '<br />File <b><i> ' . $value . ' </i></b> will be movedto handled folder';
- rename($dir . '/' . $value, $dir . '/handled/' . $value);
- }
-
- } //end looping through all folder content
-
- if ($my_id > 0) {
- $url1 = $_SERVER['REQUEST_URI'];
- header("Refresh: 5; URL=$url1");
- } //reload page
-
- $output .= '<form method="POST" action=""><input type="submit" name="InsertFileContent" value="InsertFileContent"/></form>';
- return $output;
-}
diff --git a/includes/venue.php b/includes/venue.php
index aedb6a7..3ad0f06 100644
--- a/includes/venue.php
+++ b/includes/venue.php
@@ -7,11 +7,19 @@
if ( !class_exists('GiglogAdmin_Venue') ) {
class GiglogAdmin_Venue
{
- private $id;
- private $name;
- private $city;
- private $address;
- private $webpage;
+ private ?int $id;
+
+ /**
+ * @psalm-suppress PropertyNotSetInConstructor
+ */
+ private string $name;
+
+ /**
+ * @psalm-suppress PropertyNotSetInConstructor
+ */
+ private string $city;
+ private ?string $address;
+ private ?string $webpage;
/*
* Constructs a new venue object from an array of attributes.
@@ -19,11 +27,19 @@ if ( !class_exists('GiglogAdmin_Venue') ) {
* so this constructor can be used to construct the object
* directly from the database row.
*/
- public function __construct($attrs)
+ public function __construct(object $attrs)
{
$this->id = isset($attrs->id) ? $attrs->id : NULL;
- $this->name = isset($attrs->wpgvenue_name) ? $attrs->wpgvenue_name : NULL;
- $this->city = isset($attrs->wpgvenue_city) ? $attrs->wpgvenue_city : NULL;
+
+ if (isset($attrs->wpgvenue_name, $attrs->wpgvenue_city)) {
+ $this->name = $attrs->wpgvenue_name;
+ $this->city = $attrs->wpgvenue_city;
+ }
+ else {
+ error_log('Trying to construct a Venue without a name or a city');
+ wp_die();
+ }
+
$this->address = isset($attrs->wpgvenue_address) ? $attrs->wpgvenue_address : NULL;
$this->webpage = isset($attrs->wpgvenue_webpage) ? $attrs->wpgvenue_webpage : NULL;
}
@@ -108,8 +124,7 @@ if ( !class_exists('GiglogAdmin_Venue') ) {
static function venues_in_city(string $city): array
{
global $wpdb;
- $q = $wpdb->prepare(
- "select id, wpgvenue_name from wpg_venues where wpgvenue_city=%s", $city);
+ $q = $wpdb->prepare("select * from wpg_venues where wpgvenue_city=%s", $city);
$results = $wpdb->get_results($q);
return array_map(function ($r) { return new GiglogAdmin_Venue($r); }, $results);
diff --git a/includes/view-helpers/select_field.php b/includes/view-helpers/select_field.php
index 816f8ef..e72fc40 100644
--- a/includes/view-helpers/select_field.php
+++ b/includes/view-helpers/select_field.php
@@ -19,7 +19,7 @@ namespace EternalTerror\ViewHelpers;
*/
function select_field(
string $name,
- ?array $opts = [],
+ array $opts = [],
$selected = null,
string $blank = "Please select...") : string
{
diff --git a/run-tests b/run-tests
index 9f881d6..8c1eeb5 100755
--- a/run-tests
+++ b/run-tests
@@ -5,4 +5,5 @@
#
# SPDX-License-Identifier: CC0-1.0
+npm run wp-env clean
npm run wp-env run phpunit "phpunit -c /var/www/html/wp-content/plugins/giglogadmin/phpunit.xml $*"
diff --git a/run-tests-windoze.bat b/run-tests-windoze.bat
index 107f943..8654d40 100644
--- a/run-tests-windoze.bat
+++ b/run-tests-windoze.bat
@@ -5,4 +5,5 @@ REM SPDX-FileCopyrightText: 2021 Harald Eilertsen <haraldei@anduin.net>
REM
REM SPDX-License-Identifier: CC0-1.0
+npm run wp-env clean
npm run wp-env run phpunit "phpunit -c /var/www/html/wp-content/plugins/giglogadmin/phpunit.xml"
diff --git a/tests/BandTest.php b/tests/BandTest.php
deleted file mode 100644
index e4fccbe..0000000
--- a/tests/BandTest.php
+++ /dev/null
@@ -1,69 +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
-
-declare(strict_types=1);
-
-require __DIR__ . '/../includes/band.php';
-
-final class BandTest extends WP_UnitTestCase
-{
- /* This function runs _once_ before all the test cases.
- *
- * Use it to set up a common state that all test cases can
- * use
- */
- static function wpSetUpBeforeClass() : void
- {
- GiglogAdmin_Band::create("The Flamboyant Blasphemers");
- }
-
- public function testCreatingBandWithName() : void
- {
- $count = count(GiglogAdmin_Band::all_bands());
-
- $band = GiglogAdmin_Band::create("Tullerusk");
-
- $this->assertEquals("Tullerusk", $band->bandname());
- $this->assertEquals($count + 1, count(GiglogAdmin_Band::all_bands()));
- }
-
- public function testCreateExistingBand() : void
- {
- $count = count(GiglogAdmin_Band::all_bands());
-
- $existing_band = GiglogAdmin_Band::find("The Flamboyant Blasphemers", "NO");
- $new_band = GiglogAdmin_Band::create("The Flamboyant Blasphemers");
-
- $this->assertEquals($count, count(GiglogAdmin_Band::all_bands()));
- $this->assertEquals($existing_band->id(), $new_band->id());
- $this->assertEquals($existing_band->bandname(), $new_band->bandname());
- }
-
- public function testCreateBandsWithSameNameInDifferentCountry() : void
- {
- $existing_band = GiglogAdmin_Band::find("The Flamboyant Blasphemers", "NO");
- $new_band = GiglogAdmin_Band::create("The Flamboyant Blasphemers", "RO");
-
- $this->assertNotEquals($existing_band->id(), $new_band->id());
- }
-
- public function testFindExistingBandReturnsObject() : void
- {
- $found = GiglogAdmin_Band::find("The Flamboyant Blasphemers", "NO");
-
- $this->assertNotNull($found);
- $this->assertEquals("The Flamboyant Blasphemers", $found->bandname());
- }
-
- public function testFindNonExistingBandReturnsNULL() : void
- {
- // Nice, UK isn't in the country list, so let's move Venom to Azerbajan
- // for now...
- $found = GiglogAdmin_Band::find("Venom", "AZ");
-
- $this->assertNull($found);
- }
-}
diff --git a/tests/ConcertTest.php b/tests/ConcertTest.php
index 7edda46..5e6ebde 100644
--- a/tests/ConcertTest.php
+++ b/tests/ConcertTest.php
@@ -6,37 +6,84 @@
final class ConcertTest extends WP_UnitTestCase
{
- public function testCreateConcert() : void
+ const VENUES = [
+ [ "a venue", "Somewhere" ],
+ [ "Svene Bedehus", "Svene" ],
+ [ "Rockefeller Music Hall", "Oslo" ],
+ [ "Sentrum Scene", "Oslo" ],
+ [ "Revolver", "Oslo" ],
+ [ "Meieriet", "Sogndal" ],
+ ];
+
+ const CONCERTS = [
+ [ "a concert", 0, 1 ],
+ [ "Concert in Svene #", 1, 4 ],
+ [ "Concert at Rockefeller #", 2, 2 ],
+ [ "Concert at Sentrum Scene #", 3, 4 ],
+ [ "Concert at Revolver #", 4, 5 ],
+ [ "Concert at Meieriet #", 5, 5 ],
+ ];
+
+ private static $concerts = [];
+
+ /* This function runs _once_ before all the test cases.
+ *
+ * Use it to set up a common state that all test cases can
+ * use
+ */
+ static function wpSetUpBeforeClass() : void
{
- $venue = GiglogAdmin_Venue::create("a venue");
+ $created_venues = [];
+ foreach (self::VENUES as $venue) {
+ $created_venues[] = GiglogAdmin_Venue::find_or_create($venue[0], $venue[1]);
+ }
+
$today = date("Y-m-d");
- $concert = GiglogAdmin_Concert::create(
- "a concert",
- $venue->id(),
- $today,
- "https://example.com/tickets/42",
- "https://example.com/events/93");
+ foreach (self::CONCERTS as $concert) {
+ for ($i = 0; $i < $concert[2]; $i++) {
+ if ($concert[2] > 1) {
+ $concert_name = $concert[0] . ($i + 1);
+ }
+ else {
+ $concert_name = $concert[0];
+ }
+
+ self::$concerts[] = GiglogAdmin_Concert::create(
+ $concert_name,
+ $created_venues[$concert[1]]->id(),
+ $today,
+ "https://example.com/tickets/42",
+ "https://example.com/events/93");
+ }
+ }
+ }
+
+ /* This function runs _once_ after all the test cases in this class.
+ *
+ * It is needed to clean up changes in the database that we don't want
+ * to disturb any other tests.
+ */
+ static function wpTearDownAfterClass() : void
+ {
+ global $wpdb;
+
+ $tables = [
+ "wpg_concerts",
+ "wpg_venues",
+ "wpg_concertlogs",
+ ];
- $this->assertEquals("a concert", $concert->cname());
- $this->assertEquals($venue->id(), $concert->venue()->id());
- $this->assertEquals($today, $concert->cdate());
- $this->assertEquals("https://example.com/tickets/42", $concert->tickets());
- $this->assertEquals("https://example.com/events/93", $concert->eventlink());
+ foreach( $tables as $table ) {
+ $wpdb->query("DELETE FROM {$table}");
+ }
}
- public function testCreateExistingConcert() : void
+ public function testCreateExistingConcertShouldFail() : void
{
- $venue = GiglogAdmin_Venue::create("a venue");
+ $venue = GiglogAdmin_Venue::find_or_create("a venue", "Somewhere");
$today = date("Y-m-d");
- GiglogAdmin_Concert::create(
- "a concert",
- $venue->id(),
- $today,
- "https://example.com/tickets/42",
- "https://example.com/events/93");
-
$new = GiglogAdmin_Concert::create(
"a concert",
$venue->id(),
@@ -49,18 +96,11 @@ final class ConcertTest extends WP_UnitTestCase
public function testCreateExistingConcertVariableCase() : void
{
- $venue = GiglogAdmin_Venue::create("a venue");
+ $venue = GiglogAdmin_Venue::find_or_create("a venue", "Somewhere");
$today = date("Y-m-d");
- GiglogAdmin_Concert::create(
- "a concert123",
- $venue->id(),
- $today,
- "https://example.com/tickets/42",
- "https://example.com/events/93");
-
$new = GiglogAdmin_Concert::create(
- "a CoNceRt123",
+ "a CoNceRt",
$venue->id(),
$today,
"https://example.com/tickets/42",
@@ -71,65 +111,40 @@ final class ConcertTest extends WP_UnitTestCase
public function testGetConcertByIdReturnsFullConcertObject() : void
{
- $venue = GiglogAdmin_Venue::create("a venue");
- $today = date("Y-m-d");
-
- $gig = GiglogAdmin_Concert::create(
- "a concert123",
- $venue->id(),
- $today,
- "https://example.com/tickets/42",
- "https://example.com/events/93");
+ $id = self::$concerts[0]->id();
+ $fetched_gig = GiglogAdmin_Concert::get($id);
- $fetched_gig = GiglogAdmin_Concert::get($gig->id());
-
- $this->assertEquals($gig->id(), $fetched_gig->id());
- $this->assertEquals($gig->cname(), $fetched_gig->cname());
- $this->assertEquals($venue->id(), $fetched_gig->venue()->id());
+ $this->assertEquals($id, $fetched_gig->id());
+ $this->assertEquals("a concert", $fetched_gig->cname());
+ $this->assertEquals("a venue", $fetched_gig->venue()->name());
$this->assertEquals(GiglogAdmin_Concert::STATUS_NONE, $fetched_gig->status());
$this->assertEquals([], $fetched_gig->roles());
}
public function testSetConcertStatus() : void
{
- $venue = GiglogAdmin_Venue::create("a venue");
- $today = date("Y-m-d");
+ $id = self::$concerts[0]->id();
+ $fetched_gig = GiglogAdmin_Concert::get($id);
- $gig = GiglogAdmin_Concert::create(
- "a concert123",
- $venue->id(),
- $today,
- "https://example.com/tickets/42",
- "https://example.com/events/93");
-
- $fetched_gig = GiglogAdmin_Concert::get($gig->id());
$fetched_gig->set_status( GiglogAdmin_Concert::STATUS_ACCRED_REQ );
- $this->assertEquals( GiglogAdmin_Concert::STATUS_ACCRED_REQ, $fetched_gig->status() );
-
$fetched_gig->save();
- $fetched_gig_2 = GiglogAdmin_Concert::get($gig->id());
+ $fetched_gig_2 = GiglogAdmin_Concert::get($id);
$this->assertEquals( GiglogAdmin_Concert::STATUS_ACCRED_REQ, $fetched_gig_2->status() );
}
- public function testOnlyFetchConcertsFromGivenCity() : void
+ public function testAssignConcertRoles() : void
{
- $venue1 = GiglogAdmin_Venue::create("Svene Bedehus", "Svene");
- $venue2 = GiglogAdmin_Venue::create("Rockefeller Music Hall", "Oslo");
- $venue3 = GiglogAdmin_Venue::create("Meieriet", "Sogndal");
-
- for ($i = 0; $i < 4; $i++) {
- GiglogAdmin_Concert::create('Concert ' . $i, $venue1->id(), '', '', '');
- }
-
- for ($i = 4; $i < 6; $i++) {
- GiglogAdmin_Concert::create('Concert ' . $i, $venue2->id(), '', '', '');
- }
+ $gig = GiglogAdmin_Concert::get(self::$concerts[0]->id());
+ $gig->assign_role( 'photo1' , 'user1' );
+ $gig->save();
- for ($i = 6; $i < 11; $i++) {
- GiglogAdmin_Concert::create('Concert ' . $i, $venue3->id(), '', '', '');
- }
+ $fetched_gig = GiglogAdmin_Concert::get( self::$concerts[0]->id() );
+ $this->assertEquals( [ 'photo1' => 'user1' ], $fetched_gig->roles() );
+ }
+ public function testOnlyFetchConcertsFromGivenCity() : void
+ {
$gigs_in_svene = GiglogAdmin_Concert::find_concerts([ "city" => "Svene"]);
$this->assertEquals(4, count($gigs_in_svene));
@@ -137,10 +152,9 @@ final class ConcertTest extends WP_UnitTestCase
$this->assertEquals("Svene", $gig->venue()->city());
}
-
$gigs_in_oslo = GiglogAdmin_Concert::find_concerts(["city" => "Oslo"]);
- $this->assertEquals(2, count($gigs_in_oslo));
+ $this->assertEquals(11, count($gigs_in_oslo));
while ($gig = array_pop($gigs_in_oslo)) {
$this->assertEquals("Oslo", $gig->venue()->city());
}
@@ -155,22 +169,7 @@ final class ConcertTest extends WP_UnitTestCase
public function testOnlyFetchConcertsAtGivenVenue() : void
{
- $venue1 = GiglogAdmin_Venue::create("Sentrum Scene", "Oslo");
- $venue2 = GiglogAdmin_Venue::create("Rockefeller Music Hall", "Oslo");
- $venue3 = GiglogAdmin_Venue::create("Revolver", "Oslo");
-
- for ($i = 0; $i < 4; $i++) {
- GiglogAdmin_Concert::create('Concert ' . $i, $venue1->id(), '', '', '');
- }
-
- for ($i = 4; $i < 6; $i++) {
- GiglogAdmin_Concert::create('Concert ' . $i, $venue2->id(), '', '', '');
- }
-
- for ($i = 6; $i < 11; $i++) {
- GiglogAdmin_Concert::create('Concert ' . $i, $venue3->id(), '', '', '');
- }
-
+ $venue1 = GiglogAdmin_Venue::find_or_create("Sentrum Scene", "Oslo");
$gigs_at_ss = GiglogAdmin_Concert::find_concerts(["venue_id" => $venue1->id()]);
$this->assertEquals(4, count($gigs_at_ss));
@@ -178,6 +177,7 @@ final class ConcertTest extends WP_UnitTestCase
$this->assertEquals("Sentrum Scene", $gig->venue()->name());
}
+ $venue2 = GiglogAdmin_Venue::find_or_create("Rockefeller Music Hall", "Oslo");
$gigs_at_rmh = GiglogAdmin_Concert::find_concerts(["venue_id" => $venue2->id()]);
$this->assertEquals(2, count($gigs_at_rmh));
@@ -185,6 +185,7 @@ final class ConcertTest extends WP_UnitTestCase
$this->assertEquals("Rockefeller Music Hall", $gig->venue()->name());
}
+ $venue3 = GiglogAdmin_Venue::find_or_create("Revolver", "Oslo");
$gigs_at_r = GiglogAdmin_Concert::find_concerts(["venue_id" => $venue3->id()]);
$this->assertEquals(5, count($gigs_at_r));
@@ -195,24 +196,7 @@ final class ConcertTest extends WP_UnitTestCase
public function testFetchAllConcerts() : void
{
- $venue1 = GiglogAdmin_Venue::create("Svene Bedehus", "Svene");
- $venue2 = GiglogAdmin_Venue::create("Rockefeller Music Hall", "Oslo");
- $venue3 = GiglogAdmin_Venue::create("Meieriet", "Sogndal");
-
- for ($i = 0; $i < 4; $i++) {
- GiglogAdmin_Concert::create('Concert ' . $i, $venue1->id(), '', '', '');
- }
-
- for ($i = 4; $i < 6; $i++) {
- GiglogAdmin_Concert::create('Concert ' . $i, $venue2->id(), '', '', '');
- }
-
- for ($i = 6; $i < 11; $i++) {
- GiglogAdmin_Concert::create('Concert ' . $i, $venue3->id(), '', '', '');
- }
-
$gigs = GiglogAdmin_Concert::find_concerts();
-
- $this->assertEquals(11, count($gigs));
+ $this->assertEquals(count(self::$concerts), count($gigs));
}
}