From 612333f06158fa2d7ab6eb60b33a6889e36e98f2 Mon Sep 17 00:00:00 2001 From: marko Date: Tue, 18 Apr 2023 20:05:30 +0200 Subject: [PATCH] add offered rided count to event overview --- homepage/participo/lib/participoLib/event.php | 64 +++-- homepage/participo/lib/participoLib/ride.php | 267 ++++++++++-------- homepage/participo/lib/participoLib/shiai.php | 2 +- 3 files changed, 186 insertions(+), 147 deletions(-) diff --git a/homepage/participo/lib/participoLib/event.php b/homepage/participo/lib/participoLib/event.php index 89b9a37..7d71195 100644 --- a/homepage/participo/lib/participoLib/event.php +++ b/homepage/participo/lib/participoLib/event.php @@ -74,17 +74,17 @@ class Event } /** Getter for the linked Shiai - * + * * - lazy loading: only load if not already loaded (overridable by the $forceLoading param) * - * @param boolean $forceLoading if true, the loading is enforced even if there already is a shiai linked - * + * @param boolean $forceLoading if true, the loading is enforced even if there already is a shiai linked + * * @return Shiai reference to the linked Shiai */ public function shiai($forceLoading = false) { // We want to load if it isn't loaded yet or we want to enforce it. But in either case we need an id to load - if( (!isset($this->shiai) || $forceLoading) && isset($this->shiaiId) ){ + if ((!isset($this->shiai) || $forceLoading) && isset($this->shiaiId)) { $this->shiai = Shiai::loadFromDb($this->shiaiId); } return $this->shiai; @@ -123,7 +123,7 @@ class Event '
' . $this->deadline->format('Y-m-d') . '
' . '
Altersklassen
' . '
' . $this->shiai->getAgeClasses() . '
' . - ''. + '' . '' . ''; } @@ -150,19 +150,17 @@ class Event . $this->getHtmlStarterList(); $kids = participo::getKids(); $modal .= '
'; - $modal .= '
Deadline zum Eintragen: '.$this->deadline->format('Y-m-d').'
'; - + $modal .= '
Deadline zum Eintragen: ' . $this->deadline->format('Y-m-d') . '
'; + $today = new DateTime(); - if( + if ( (isset($this->deadline) && ($today <= $this->deadline)) || participo::isUserAdmin($userData['id']) - ){ + ) { foreach ($kids as $k) { - $modal .= $this->getHtmlAddStarterForm($k, ['returnToUrl'=>'/participo/events#' . $this->id]); + $modal .= $this->getHtmlAddStarterForm($k, ['returnToUrl' => '/participo/events#' . $this->id]); } - } - else{ - + } else { $modal .= '
Es ist leider zu spät noch jemanden einzutragen!
'; } $modal .= '
'; @@ -187,7 +185,7 @@ class Event foreach ($listOfStarter as $start) { $startingUser = $start->loadStarter(); $starterList .= '
' - . '
' . $startingUser->getName() . ', ' . $startingUser->getFirstname() . ' ('.StartingType::$AsString[$start->getTypeId()].'):
' + . '
' . $startingUser->getName() . ', ' . $startingUser->getFirstname() . ' (' . StartingType::$AsString[$start->getTypeId()] . '):
' . '
' . $start->getHtmlFormRemove() . '
' . '
'; } @@ -236,14 +234,21 @@ class Event return intval($response[0]['starterCount']); } - public function getHtmlStarterStatistic(){ + public function getSeatCount() + { + return self::getSeatCountOf($this->id); + } + + public function getHtmlStarterStatistic() + { $retHtml = '
'; - foreach([StartingType::Fighter, StartingType::NoParticipation, StartingType::Audience] as $type){ + foreach ([StartingType::Fighter, StartingType::NoParticipation, StartingType::Audience] as $type) { $count = $this->getStarterCount($type); - if($count > 0){ - $retHtml .= '
'.StartingType::$AsString[$type].'
'.$count.'
'; + if ($count > 0) { + $retHtml .= '
' . StartingType::$AsString[$type] . '
' . $count . '
'; } } + $retHtml .= '
Mitfahrgelegenheiten
' . $this->getSeatCount() . '
'; $retHtml .= '
'; return $retHtml; } @@ -266,8 +271,6 @@ class Event /// 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], @@ -278,12 +281,23 @@ class Event return dbConnector::query($query, $params); } + public static function getSeatCountOf(int $id) + { + $query = 'SELECT SUM(plaetze) AS sumSeats FROM `cwsvjudo`.`wkParticipo_Fahrten` WHERE eventId = :eventId;'; + $params = [ + 'eventId' => ['value' => $id, 'data_type' => PDO::PARAM_INT] + ]; + $response = dbConnector::query($query, $params); + $sumSeats = filterCount($response[0]['sumSeats']); + return $sumSeats; + } + public function getHtmlAddStarterForm($user, $options = []) { $defaults = [ - 'formClass' =>'card col s12 m6 l3', - 'inputClass' =>'input-field', - 'buttonClass'=>'btn' + 'formClass' => 'card col s12 m6 l3', + 'inputClass' => 'input-field', + 'buttonClass' => 'btn' ]; $options = array_merge($defaults, $options); @@ -292,7 +306,7 @@ class Event $key = isset($_SESSION['apiKey']) ? $_SESSION['apiKey'] : null; $form = - '
' + '' . '' . '' . '' @@ -304,7 +318,7 @@ class Event . '' . '' . '' - . '' + . '' . '
'; return $form; diff --git a/homepage/participo/lib/participoLib/ride.php b/homepage/participo/lib/participoLib/ride.php index 46b9f3f..9d6941e 100644 --- a/homepage/participo/lib/participoLib/ride.php +++ b/homepage/participo/lib/participoLib/ride.php @@ -3,145 +3,170 @@ require_once 'participoLib/participo.php'; /** Frame for a variable synced with a db*/ -class PdoCellValue{ - public function __construct(string $name, $value, $type){ - $this->name = $name; - $this->value = $value; - $this->type = $type; - } - static public function collect(array $row){ - $names = []; - foreach($row as $entry){ - if(isset($entry->name)){ - $names[] = $entry->name; - } - } - return $names; - } - public function value(){return $this->value;} - public function setValue($value){$this->value = $value;} - private string $name = null; - private $value = null; - private int $data_type = null; +class PdoCellValue +{ + public function __construct(string $name, $value, $type) + { + $this->name = $name; + $this->value = $value; + $this->type = $type; + } + + public static function collect(array $row) + { + $names = []; + foreach ($row as $entry) { + if (isset($entry->name)) { + $names[] = $entry->name; + } + } + return $names; + } + + public function value() + { + return $this->value; + } + + public function setValue($value) + { + $this->value = $value; + } + + // private member variables + private ?string $name = null; + private $value = null; + private ?int $type = null; } -class Ride{ - /** Constructor - * - * - filters/sanitizes all inputs - * - sets all members - * - * @param mixed $id setValue for the id - * @param mixed $eventId setValue for the eventId - * @param mixed $driverId setValue for the driverId - * @param mixed $seats setValue for the seats - * @param string $passengerIds string of comma separated values - */ - public function __construct($id, $eventId, $driverId, $seats, string $passengerIds){ - $this->id = new PdoCellValue('id', filterId($id), PDO::PARAM_INT); - $this->eventId = new PdoCellValue('eventId', filterId($eventId), PDO::PARAM_INT); - $this->driverId = new PdoCellValue('fahrerId', filterId($driverId), PDO::PARAM_INT); - $this->seats= new PdoCellValue('plaetze', filterCount($seats), PDO::PARAM_INT); - $this->passengerIds = new PdoCellValue('mitfahrer', filterCsv($passengerIds, filterId), PDO::PARAM_STRING); - } +class Ride +{ + /** Constructor + * + * - filters/sanitizes all inputs + * - sets all members + * + * @param mixed $id setValue for the id + * @param mixed $eventId setValue for the eventId + * @param mixed $driverId setValue for the driverId + * @param mixed $seats setValue for the seats + * @param string $passengerIds string of comma separated values + */ + public function __construct($id, $eventId, $driverId, $seats, string $passengerIds) + { + $this->id = new PdoCellValue('id', filterId($id), PDO::PARAM_INT); + $this->eventId = new PdoCellValue('eventId', filterId($eventId), PDO::PARAM_INT); + $this->driverId = new PdoCellValue('fahrerId', filterId($driverId), PDO::PARAM_INT); + $this->seats = new PdoCellValue('plaetze', filterCount($seats), PDO::PARAM_INT); + $this->passengerIds = new PdoCellValue('mitfahrer', filterCsv($passengerIds, filterId), PDO::PARAM_STRING); + } - /** parse and sanitize a csvFormatted string */ - function filterCsv(string $list, $callback, string $separator=',', bool $dontTrim = false){ - $list = explode($separator, $list); - foreach($list as &$element){ - $element = $callback($element); - if(!$dontTrim){ - $element = trim($element); - } - } - return $list; - } + /** parse and sanitize a csvFormatted string */ + public function filterCsv(string $list, $callback, string $separator = ',', bool $dontTrim = false) + { + $list = explode($separator, $list); + foreach ($list as &$element) { + $element = $callback($element); + if (!$dontTrim) { + $element = trim($element); + } + } + return $list; + } //// // private functions //// // DbInterface - private static $dbName = 'cwsvjudo'; - private static $dbTableName = 'wkParticipo_Fahrten'; - private static $dbFullTableNameString = '`'.$dbName.'`.`'.$dbTableName.'`'; + private const dbName = 'cwsvjudo'; + private const dbTableName = 'wkParticipo_Fahrten'; + private const dbFullTableNameString = '`' . self::dbName . '`.`' . self::dbTableName . '`'; - /** Slice a list of arrays 'horizontal' through a specific key - * - * - iterate through a list of arrays and collect the values under a specific key - * - if the key doesn't exist nothing (not even null) will be collected - * - * @param array $array source array - * @param mixed $key key to collect - * @return array list of array entries - */ - function sliceArrayByKey(array $array, $key){ - $sliced = []; - foreach($array as $entry){ - if(isset($entry[$key])){ - $sliced[] = $entry[$key]; - } - } - return $sliced; - } + /** Slice a list of arrays 'horizontal' through a specific key + * + * - iterate through a list of arrays and collect the values under a specific key + * - if the key doesn't exist nothing (not even null) will be collected + * + * @param array $array source array + * @param mixed $key key to collect + * @return array list of array entries + */ + public function sliceArrayByKey(array $array, $key) + { + $sliced = []; + foreach ($array as $entry) { + if (isset($entry[$key])) { + $sliced[] = $entry[$key]; + } + } + return $sliced; + } - private static function dbSelect(){} - private static function dbInsert(array $values){ - $names = []; - $binds = []; - $params = []; - foreach($values as $value){ - $names[] = $value->name; - $binds[] = ':'.$value->name; - $params[':'.$value->name] = [ - 'value' => $value->name - , 'data_type' => $value->type - ]; - } + private static function dbSelect() + { + } - $query = 'INSERT INTO '.$dbFullTableNameString.' ('.implode(',', $names).') values ('.implode(',', $binds).');'; + private static function dbInsert(array $values) + { + $names = []; + $binds = []; + $params = []; + foreach ($values as $value) { + $names[] = $value->name; + $binds[] = ':' . $value->name; + $params[':' . $value->name] = [ + 'value' => $value->name, 'data_type' => $value->type + ]; + } - // @todo remove ignoreErrors again - // @todo Inserting-Starter-Statement returns false on execution: Why? It seems to succeed! - $response = dbConnector::query($query, $params, ['ignoreErrors'=>true]); + $query = 'INSERT INTO ' . $dbFullTableNameString . ' (' . implode(',', $names) . ') values (' . implode(',', $binds) . ');'; + + // @todo remove ignoreErrors again + // @todo Inserting-Starter-Statement returns false on execution: Why? It seems to succeed! + $response = dbConnector::query($query, $params, ['ignoreErrors' => true]); return dbConnector::getLastInsertId(); - } - private static function dbDelete(){} - private static function dbUpdate(){} + } - private + private static function dbDelete() + { + } + + private static function dbUpdate() + { + } //// // private variables //// - /** Unique Identifier for the Ride - * - * @var int > 0 - */ - private $id=null; - /** Id of the event for the ride - * - * @var int > 0 - */ - private $eventId = null; - /** Id of the user who offered the drive - * - * @var int > 0 - */ - private $driverId = null; - /** number of seats the drive offers - * - * @var int > 0 - */ - private $seats = null; - /** List of Ids of the users this ride chauffeurs - * - * @var array(int > 0) - */ - private $passengerIds = null; + /** Unique Identifier for the Ride + * + * @var int > 0 + */ + private $id = null; + /** Id of the event for the ride + * + * @var int > 0 + */ + private $eventId = null; + /** Id of the user who offered the drive + * + * @var int > 0 + */ + private $driverId = null; + /** number of seats the drive offers + * + * @var int > 0 + */ + private $seats = null; + /** List of Ids of the users this ride chauffeurs + * + * @var array(int > 0) + */ + private $passengerIds = null; - private $event = null; - private $driver = null; - private $passengers = null; -} \ No newline at end of file + private $event = null; + private $driver = null; + private $passengers = null; +} diff --git a/homepage/participo/lib/participoLib/shiai.php b/homepage/participo/lib/participoLib/shiai.php index 8d11037..bf685df 100644 --- a/homepage/participo/lib/participoLib/shiai.php +++ b/homepage/participo/lib/participoLib/shiai.php @@ -98,7 +98,7 @@ class Shiai $retHtml = '
' . '

' . $this->getHtmlName() . '

' . - '
' . + '
'. '
Datum:
' . $this->getHtmlDate() . '
' . '
Altersklassen
' . $this->getAgeClasses() . '
' . '
Ort
' . $this->getPlace() . '
' .