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'] ?? '', $member['Altersklassen'] ?? null, $member['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 = '
' . '

' . $this->getName() . '

' . '
' . '
Datum:
' . $this->getHtmlDate() . '
' . '
Altersklassen
' . $this->getAgeClasses() . '
' . '
Ort
' . $this->getPlace() . '
' . '
' . '
'; return $retHtml; } } // end class shiai /** * Framework for a event */ 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; //< a place to load the linked shiai to (if loaded) /** * constructor * * @param int $id id in the database * @param string $date date of the event as string in the format "YYYY-MM-DD" * @param int $shiaiId id of the linked shiai or null if not appropriate * @param string $deadline deadline for sign ins in the format "YYYY-MM-DD" * @param string $remarks (json formatted) string with meta information * @param Shiai $shiai if the shiai is loaded anyway it can be placed here. */ 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; } /** * Representation of an event as (materializeCss) card * * @return string string with the html code of the event */ public function asHtmlCard() { return '
' . '
' . '' . $this->shiai->getName() . '' . '
' . '
Datum
' . '
' . $this->date->format('Y-m-d') . '
' . '
Meldefrist
' . '
' . $this->deadline->format('Y-m-d') . '
' . '
Altersklassen
' . '
' . $this->shiai->getAgeClasses() . '
' . '
' . '
'; } public function htmlTableRow() { return '' . '' . $this->date->format('Y-m-d') . '' . '' . $this->shiai->getName() . '' . 'zoom_in ' . ''; } public function htmlModal() { return ''; } 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) ); } /// Einen Starter per userId mit typeId zu einem Event per eventId hinzufügen /// Es erfolgt keine Überprüfung der Meldeberechtigung! public static function addStarter($dbConnection, $starter) { $retMessage = []; $query = 'INSERT INTO `wkParticipo_Starter` (eventId, userId, type) values (:eventId, :userId, :typeId);'; $params = [ ':eventId' => ['value' => $starter->getEventId(), 'data_type' => PDO::PARAM_INT], ':userId' => ['value' => $starter->getUserId(), 'data_type' => PDO::PARAM_INT], ':typeId' => ['value' => $starter->getTypeId(), 'data_type' => PDO::PARAM_INT] ]; return dbConnector::query($query, $params); } } // end class event abstract class StartingType { const __default = null; const Fighter = 1; const Audience = 2; const NoParticipation = 3; /** * convert a variable into a StartingType * * @param [int] $type starting type candidate * @return int representation of the StartingType if successful converted, otherwise null */ public static function toStartingType($type) { return filter_var($type, FILTER_VALIDATE_INT, ['options' => ['default' => null, 'min_range' => 1, 'max_range' => 3]]); } /** * string representations of the starting type * * @var array array of StartingType=> its string representation */ public static $AsString = [1 => 'Kämpfer', 2 => 'Zuschauer', 3 => 'keine Teilnahme']; } class Starter { private $id = null; //< id of the event in the database private $eventId = null; //< dbId of the event one is starting private $typeId = null; //< type(id) of the starter private $userId = null; //< id of the starting user private $rideId = null; //< id of the ride where the starter can car pool private $mass = null; //< mass in kg on the scale private $result = null; //< result of the start (array of places if multi start) // Getter for the member public function getId() { return $this->id; } public function getEventId() { return $this->eventId; } public function getTypeId() { return $this->typeId; } public function getUserId() { return $this->userId; } public function getRideId() { return $this->rideId; } public function getMass() { return $this->mass; } public function getResult() { return $this->result; } /** * Construtor * * @todo Document * @todo Rethink validation: filter_var is supposed to return the converted value in case of success. But the reference didn't say anything about not success... */ public function __construct($id, $eventId, $typeId, $userId, $rideId, $mass, $result) { $this->id = filter_var($id, FILTER_VALIDATE_INT, ['options' => ['default' => null, 'min_range' => 1]]); $this->eventId = filter_var($id, FILTER_VALIDATE_INT, ['options' => ['default' => null, 'min_range' => 1]]); $this->typeId = StartingType::toStartingType($type); $this->userId = filter_var($id, FILTER_VALIDATE_INT, ['options' => ['default' => null, 'min_range' => 1]]); $this->rideId = filter_var($id, FILTER_VALIDATE_INT, ['options' => ['default' => null, 'min_range' => 1]]); $this->mass = filter_var($mass, FILTER_VALIDATE_FLOAT, ['options' => ['default' => null, 'min_range' => 0.0]]); if (is_iterable($result)) { $this->result = []; foreach ($result as $r) { $r = filter_var($r, FILTER_VAR_INT, ['options' => ['default' => null, 'min_range' => 0]]); if ($r) { array_push($this->result, $r); } } } else { $this->$result = filter_var($r, FILTER_VAR_INT, ['options' => ['default' => null, 'min_range' => 0]]); } } // create starter from assoc array public static function create($parameter) { $id = $parameter['id'] ?? null; //< id of the event in the database $eventId = $parameter['eventId'] ?? null; //< dbId of the event one is starting $typeId = $parameter['typeId'] ?? null; //< type(id) of the starter $userId = $parameter['userId'] ?? null; //< id of the starting user $rideId = $parameter['rideId'] ?? null; //< id of the ride where the starter can car pool $mass = $parameter['mass'] ?? null; //< mass in kg on the scale $result = $parameter['result'] ?? null; //< result of the start (array of places if multi start) return new Starter($id, $eventId, $typeId, $userId, $rideId, $mass, $result); } } 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 = ''; foreach ($eventList as $event) { $ret .= $event->htmlTableRow(); } $ret .= '
'; foreach ($eventList as $event) { $ret .= $event->htmlModal(); } return $ret; } }