Files
cwsvJudo/homepage/participo/lib/participoLib/planer.php

248 lines
7.2 KiB
PHP

<?php
/**
* frame for a shiai
*/
class shiai
{
private $id = null; //< unique id
private $date = null; //< date of the shiai
private $name = null; //< name of the shiai as string
private $ageclasses = null; //< age classes as space separated Uxy in a string
private $place = null; //< place of the shiai as string
private $announcementUrl = null; //< url to the announcement
private $routeUrl = null; //< url to a routing planner
private $galleryUrl = null; //< url of the gallery to a gallery of the shiai
private $promoImgUrl = null; //< promotional image for the shiai (as url)
public function __construct($id, $date, $name, $ageclasses, $place, $announcementUrl, $routeUrl, $galleryUrl, $promoImgUrl)
{
//! @todo input validation and sanitation
$this->id = (int) $id;
$this->date = DateTime::createFromFormat('Y-m-d', $date);
$this->name = $name;
$this->ageclasses = $ageclasses;
$this->place = $place;
$this->announcementUrl = $announcementUrl;
$this->routeUrl = $routeUrl;
$this->galleryUrl = $galleryUrl;
$this->promoImgUrl = $promoImgUrl;
}
public function getId()
{
return $this->id;
}
public function getName()
{
return ($this->name != null ? $this->name : 'Wettkampf ohne Namen');
}
public function getHtmlDate()
{
return ($this->date != null ? $this->date->format('Y-m-d') : 'fehlendes Datum');
}
public function getAgeClasses()
{
return ($this->ageclasses != null ? $this->ageclasses : '-');
}
public function getPlace()
{
return ($this->place != null ? $this->place : '-');
}
public static function fromArray($member)
{
return new shiai(
$member['lfdeNr'] ?? null,
$member['Datum'] ?? null,
$member['Veranstaltung'] ?? '<fehlender Name>',
$member['Altersklassen'] ?? null,
$member['Ort'] ?? '<fehlender Ort>',
$member['Ausschreibung'] ?? null,
$member['Routenplaner'] ?? null,
$member['galleryLink'] ?? null,
$member['promoPic'] ?? null
);
}
/**
* shiai event as html code for displaying
*
* @return html formated string
*/
public function getHtml()
{
$retHtml = '';
$retHtml =
'<div>' .
'<h3>' . $this->getName() . '</h3>' .
'<dl>' .
'<dt>Datum:</dt><dd>' . $this->getHtmlDate() . '</dd>' .
'<dt>Altersklassen</dt><dd>' . $this->getAgeClasses() . '</dd>' .
'<dt>Ort</dt><dd>' . $this->getPlace() . '</dd>' .
'</dl>' .
'</div>';
return $retHtml;
}
} // end class shiai
class event
{
private $id = null; //< unique id of the event in the db
private $date = null; //< date for the event (@todo ranges?)
private $shiaiId = null; //< unique id of the shiai in the db (if appropriate)
private $deadline = null; //< until when one can register for the event
private $remarks = null; //< remarks to the event (special rules) or a json object for missing data (e.g. non-shiai events)
private $shiai = null;
public function __construct($id, $date, $shiaiId, $deadline, $remarks, $shiai)
{
//! @todo InputValidation
$this->id = (int) $id;
$this->date = DateTime::createFromFormat('Y-m-d', $date);
$this->shiaiId = (($shiaiId != null) ? ((int)$shiaiId) : (null));
$this->deadline = DateTime::createFromFormat('Y-m-d', $deadline);
$this->remarks = $remarks;
$this->shiai = $shiai;
}
public function asHtmlCard()
{
return
'<div class="card blue-grey darken-1">' .
'<div class="card-content white-text">' .
'<span class="card-title">' . $this->shiai->getName() . '</span>' .
'<dl>' .
'<dt>Datum</dt>' .
'<dd>' . $this->date->format('Y-m-d') . '</dd>' .
'<dt>Meldefrist</dt>' .
'<dd>' . $this->deadline->format('Y-m-d') . '</dd>' .
'<dt>Altersklassen</dt>' .
'<dd>' . $this->shiai->getAgeClasses() . '</dd>' .
'</div>' .
'</div>';
}
public function htmlTableRow()
{
return
'<tr>' .
'<td>' . $this->date->format('Y-m-d') . '</td>' .
'<td><a href="/pages/desktop/wkParticipo/showWkEvent.php?eventId=' . $this->id . '" >' . $this->shiai->getName() . '</a></td>' .
'<td><a class="waves-effect waves-light btn-floating modal-trigger" href="#event-modal-' . $this->id . '"><i class="material-icons">add</i></a></td>' .
'</tr>';
}
public function htmlModal()
{
return
'<div id="event-modal-' . $this->id . '" class="modal black-text">' .
'<div class="modal-content">' .
$this->shiai->getHtml() .
'</div>' . // end modal content
'<div class="modal-footer">' .
'<a href="/pages/desktop/wkParticipo/showWkEvent.php?eventId=' . $this->id . '" class="modal-close waves-effect waves-green btn-flat">Zum Event im Planer</a>' .
'<a href="#!" class="modal-close waves-effect waves-green btn-flat">Schließen</a>' .
'</div>' .
'</div>';
}
public static function fromArray($member)
{
$shiai = json_decode($member['bemerkungen'], true);
return new event(
$member['id'] ?? null,
$member['date'] ?? null,
$member['wkId'] ?? null,
$member['meldefrist'] ?? null,
$member['bemerkungen'] ?? null,
shiai::fromArray(($shiai != null) ? $shiai : $member)
);
}
} // end class event
class eventPlaner
{
private static $db = null;
// set the dbConnection (just setting, no establishing)
public static function setDbConnection($dbConnection)
{
if ($dbConnection instanceof PDO) {
self::$db = $dbConnection;
} else {
self::$db = null;
}
return;
}
public static function getCommingWkEvents($someOptions = [])
{
// wir befinden uns in der Übergangsphase:
// - als Standard wird das derzeitige Verhalten definiert (ISO-8859-1
// und die Konvertierung erfolgt ausserhalb)
// - wenn einmal alle mbConvertEncoding weg sind, kann der Standard auf
// das gewünschte Verhalten umgestellt werden
$dbCharset = $someOptions['dbCharset'] ?? 'ISO-8859-1';
// dbCharset = $someOptions['outCharset'] ?? "UTF-8";// das spätere, gewünschte Verhalten
$outCharset = $someOptions['outCharset'] ?? 'ISO-8859-1';
$query =
'SELECT ' .
'wkParticipo_Events.id, ' .
'wkParticipo_Events.date, ' .
'wkParticipo_Events.wkId, ' .
'wkParticipo_Events.meldefrist, ' .
'wkParticipo_Events.bemerkungen, ' .
'wkParticipo_Events.kvOptions, ' .
'wettkampfkalender.Datum, ' .
'wettkampfkalender.Veranstaltung, ' .
'wettkampfkalender.Altersklassen, ' .
'wettkampfkalender.Ort, ' .
'wettkampfkalender.Ausschreibung, ' .
'wettkampfkalender.Routenplaner ' .
'FROM wkParticipo_Events ' .
'LEFT JOIN wettkampfkalender ' .
'ON wettkampfkalender.lfdeNr = wkParticipo_Events.wkId ' .
'WHERE wkParticipo_Events.date >= CURDATE() ' .
'ORDER BY wkParticipo_Events.date;';
$ret = dbQuery(self::$db, $query);
$events = [];
foreach ($ret as $event) {
array_push($events, event::fromArray($event));
}
return $events;
}
public static function getHtmlEventTable($eventList)
{
$ret = '';
// initialize the modals
$ret .= '<script>';
$ret .= "document.addEventListener('DOMContentLoaded', function() {";
$ret .= "var elems = document.querySelectorAll('.modal');";
$ret .= 'var instances = M.Modal.init(elems, {';
$ret .= '});';
$ret .= '});';
$ret .= '</script>';
$ret .= '<table>';
foreach ($eventList as $event) {
$ret .= $event->htmlTableRow();
}
$ret .= '</table>';
foreach ($eventList as $event) {
$ret .= $event->htmlModal();
}
return $ret;
}
}