From f6c0270d40f6730fe1e1820f2866b08792df1db6 Mon Sep 17 00:00:00 2001 From: MaZderMind Date: Sat, 10 Dec 2016 18:22:34 +0100 Subject: rewrite data-model so that every configuration option is accessed through the conference --- model/Conferences.php | 67 +++++++++++++++++++++------------------------------ 1 file changed, 28 insertions(+), 39 deletions(-) (limited to 'model/Conferences.php') diff --git a/model/Conferences.php b/model/Conferences.php index 461186f..4919345 100644 --- a/model/Conferences.php +++ b/model/Conferences.php @@ -4,27 +4,38 @@ class Conferences extends ModelBase { const MANDATOR_DIR = 'configs/conferences/'; + public static function listConferences() { + $directories = scandir(forceslash(Conferences::MANDATOR_DIR)); + $conferences = array_filter($directories, function($dirname) { + return $dirname[0] != '.'; + }); + + return $conferences; + } + public static function getConferences() { $conferences = []; - foreach(scandir(forceslash(Conferences::MANDATOR_DIR)) as $el) + foreach(Conferences::listConferences() as $conference) { - if($el[0] == '.') - continue; - - $conferences[$el] = Conferences::getConferenceInformation($el); + try { + $conferences[$conference] = Conferences::getConference($conference); + } + catch(Exception $e) { + // ignore unloadable conferences + } } return $conferences; } public static function getConferencesCount() { - return count(Conferences::getConferences()); + return count(Conferences::listConferences()); } public static function getActiveConferences() { return array_values(array_filter( Conferences::getConferences(), - function($info) { - return $info['active']; + function($conference) { + return !$conference->isClosed(); } )); } @@ -37,7 +48,7 @@ class Conferences extends ModelBase $sorted = Conferences::getConferences(); usort($sorted, function($a, $b) { - return @$b['CONFIG']['CONFERENCE']['STARTS_AT'] - @$a['CONFIG']['CONFERENCE']['STARTS_AT']; + return $b->startsAt() - $a->endsAt(); }); return $sorted; @@ -47,7 +58,7 @@ class Conferences extends ModelBase $sorted = Conferences::getConferencesSorted(); $finished = array_values(array_filter($sorted, function($c) { - return @$c['CONFIG']['CONFERENCE']['ENDS_AT'] < time(); + return $c->hasEnded(); })); return $finished; @@ -58,33 +69,16 @@ class Conferences extends ModelBase } public static function exists($mandator) { - return array_key_exists($mandator, Conferences::getConferences()); + return in_array($mandator, Conferences::listConferences()); } - public static function getConferenceInformation($mandator) { - if(isset($GLOBALS['CONFIG'])) - $saved_config = $GLOBALS['CONFIG']; - - Conferences::load($mandator); - $conf = new Conference(); - $info = [ - 'slug' => $mandator, - 'link' => forceslash($mandator).url_params(), - 'active' => !$conf->isClosed(), - 'title' => $conf->getTitle(), - 'description' => $conf->getDescription(), - - 'relive' => $conf->hasRelive() ? forceslash($mandator).$conf->getReliveUrl() : null, - 'releases' => $conf->hasReleases() ? $conf->getReleasesUrl() : null, - - 'CONFIG' => $GLOBALS['CONFIG'], - ]; - unset($GLOBALS['CONFIG']); - - if(isset($saved_config)) - $GLOBALS['CONFIG'] = $saved_config; + public static function loadConferenceConfig($mandator) { + $config = forceslash(Conferences::MANDATOR_DIR).forceslash($mandator).'config.php'; + return include($config); + } - return $info; + public static function getConference($mandator) { + return new Conference(Conferences::loadConferenceConfig($mandator), $mandator); } public static function hasCustomStyles($mandator) { @@ -96,9 +90,4 @@ class Conferences extends ModelBase public static function getCustomStylesDir($mandator) { return forceslash(Conferences::MANDATOR_DIR).forceslash($mandator); } - - public static function load($mandator) { - include(forceslash(Conferences::MANDATOR_DIR).forceslash($mandator).'config.php'); - return isset($GLOBALS['CONFIG']); - } } -- cgit v1.3.1 From a38a7fcc85c99fa8bd17dd591a5dcad07577c306 Mon Sep 17 00:00:00 2001 From: MaZderMind Date: Sun, 11 Dec 2016 19:56:36 +0100 Subject: conferences does not use ModelBase --- model/Conferences.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'model/Conferences.php') diff --git a/model/Conferences.php b/model/Conferences.php index 4919345..77069ad 100644 --- a/model/Conferences.php +++ b/model/Conferences.php @@ -1,6 +1,6 @@ set(array( - 'baseurl' => forceslash(baseurl()), - 'route' => $route, - 'canonicalurl' => joinpath([baseurl(), $mandator, $route]), - 'conference_assets' => forceslash($mandator), - - 'conference' => $conference, - 'feedback' => $conference->getFeedback(), - 'schedule' => $conference->getSchedule(), - 'subtitles' => $conference->getSubtitles(), -)); - ob_start(); try { + $conference = Conferences::getConference($mandator); + + // update template information + $tpl->set(array( + 'baseurl' => forceslash(baseurl()), + 'route' => $route, + 'canonicalurl' => joinpath([baseurl(), $mandator, $route]), + 'conference_assets' => forceslash($mandator), + + 'conference' => $conference, + 'feedback' => $conference->getFeedback(), + 'schedule' => $conference->getSchedule(), + 'subtitles' => $conference->getSubtitles(), + )); // ALWAYS AVAILABLE ROUTES if($route == 'feedback/read') diff --git a/lib/Exceptions.php b/lib/Exceptions.php index 2e9109b..83bd380 100644 --- a/lib/Exceptions.php +++ b/lib/Exceptions.php @@ -10,3 +10,4 @@ set_error_handler("exception_error_handler"); class NotFoundException extends Exception {} class ScheduleException extends Exception {} +class ConfigException extends Exception {} diff --git a/model/Conferences.php b/model/Conferences.php index 77069ad..2dc9f35 100644 --- a/model/Conferences.php +++ b/model/Conferences.php @@ -73,8 +73,14 @@ class Conferences } public static function loadConferenceConfig($mandator) { - $config = forceslash(Conferences::MANDATOR_DIR).forceslash($mandator).'config.php'; - return include($config); + $configfile = forceslash(Conferences::MANDATOR_DIR).forceslash($mandator).'config.php'; + $config = include($configfile); + + if(!is_array($config)) { + throw new ConfigException("Loading $configfile did not return an array. Maybe it's missing a return-statement?"); + } + + return $config; } public static function getConference($mandator) { -- cgit v1.3.1 From 8beec6fda376b842a9ddb7a2425829690f0a8b48 Mon Sep 17 00:00:00 2001 From: MaZderMind Date: Sun, 11 Dec 2016 20:27:35 +0100 Subject: use DateTime objects for ends/startsAt --- command/download.php | 32 +++++++++++++++++++++++++------- config.php | 2 +- model/Conference.php | 16 ++++++++++++---- model/Conferences.php | 2 +- 4 files changed, 39 insertions(+), 13 deletions(-) (limited to 'model/Conferences.php') diff --git a/command/download.php b/command/download.php index 8cc2f53..cb0987d 100644 --- a/command/download.php +++ b/command/download.php @@ -15,14 +15,32 @@ if(isset($conf['REQUIRE_USER'])) } } -foreach (Conferences::getConferences() as $conference) +$conferences = Conferences::getConferences(); + +if(isset($conf['MAX_CONFERENCE_AGE'])) { - stdout('== %s ==', $conference->getSlug()); + $months = intval($conf['MAX_CONFERENCE_AGE']); + $conferencesAfter = new DateTime(); + $conferencesAfter->sub(new DateInterval('P'.$months.'D')); - if(isset($conf['MAX_CONFERENCE_AGE'])) - { - date_diff() - return time() >= $this->endsAt(); - } + stdout('Filtering before %s', $conferencesAfter->format('Y-m-d')); + $conferences = array_filter($conferences, function($conference) use ($conferencesAfter) { + $isBefore = $conference->endsAt() < $conferencesAfter; + + if($isBefore) { + stdout( + ' %s: %s', + $conference->endsAt()->format('Y-m-d'), + $conference->getSlug() + ); + } + return !$isBefore; + }); +} + +stdout(''); +foreach ($conferences as $conference) +{ + stdout('== %s ==', $conference->getSlug()); } diff --git a/config.php b/config.php index 57be966..1b5e84f 100644 --- a/config.php +++ b/config.php @@ -61,5 +61,5 @@ $GLOBALS['CONFIG']['DOWNLOAD'] = [ * * Auskommentieren, um alle Konferenzen zu beachten */ - 'MAX_CONFERENCE_AGE' => 30 /* Tage */, + 'MAX_CONFERENCE_AGE' => 14 /* Tage */, ]; diff --git a/model/Conference.php b/model/Conference.php index 07d72dd..ae5ab41 100644 --- a/model/Conference.php +++ b/model/Conference.php @@ -33,11 +33,17 @@ class Conference extends ModelBase } public function startsAt() { - return $this->get('CONFERENCE.STARTS_AT'); + if(!$this->has('CONFERENCE.STARTS_AT')) + return null; + + return DateTime::createFromFormat('U', $this->get('CONFERENCE.STARTS_AT')); } public function endsAt() { - return $this->get('CONFERENCE.ENDS_AT'); + if(!$this->has('CONFERENCE.ENDS_AT')) + return null; + + return DateTime::createFromFormat('U', $this->get('CONFERENCE.ENDS_AT')); } public function hasBegun() { @@ -62,7 +68,8 @@ class Conference extends ModelBase } if($this->has('CONFERENCE.STARTS_AT')) { - return time() >= $this->get('CONFERENCE.STARTS_AT'); + $now = new DateTime('now'); + return $now >= $this->startsAt(); } else { return true; } @@ -84,7 +91,8 @@ class Conference extends ModelBase } if($this->has('CONFERENCE.ENDS_AT')) { - return time() >= $this->get('CONFERENCE.ENDS_AT'); + $now = new DateTime('now'); + return $now >= $this->endsAt(); } else { return false; } diff --git a/model/Conferences.php b/model/Conferences.php index 2dc9f35..8de4029 100644 --- a/model/Conferences.php +++ b/model/Conferences.php @@ -48,7 +48,7 @@ class Conferences $sorted = Conferences::getConferences(); usort($sorted, function($a, $b) { - return $b->startsAt() - $a->endsAt(); + return $b->startsAt() > $a->endsAt() ? 1 : -1; }); return $sorted; -- cgit v1.3.1 From 4c9cc1f8e6bcb8c68e5106437fcb41bbbc380885 Mon Sep 17 00:00:00 2001 From: MaZderMind Date: Sun, 11 Dec 2016 20:27:58 +0100 Subject: list conferences sorted on startpage --- model/Conferences.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'model/Conferences.php') diff --git a/model/Conferences.php b/model/Conferences.php index 8de4029..f930e32 100644 --- a/model/Conferences.php +++ b/model/Conferences.php @@ -33,7 +33,7 @@ class Conferences public static function getActiveConferences() { return array_values(array_filter( - Conferences::getConferences(), + Conferences::getConferencesSorted(), function($conference) { return !$conference->isClosed(); } -- cgit v1.3.1