Merge branch 'homepage' of https://gitea.cwsvjudo.dedyn.io/marko/cwsvJudo into homepage
This commit is contained in:
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 57 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 127 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 57 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 176 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 112 KiB |
Binary file not shown.
@@ -13,31 +13,44 @@
|
|||||||
</style>
|
</style>
|
||||||
<h2 style="text-align:center;">Herzlich Willkommen auf der offiziellen Homepage des Chemnitzer Freizeit- und
|
<h2 style="text-align:center;">Herzlich Willkommen auf der offiziellen Homepage des Chemnitzer Freizeit- und
|
||||||
Wohngebietssportverein e. V.</h2>
|
Wohngebietssportverein e. V.</h2>
|
||||||
<!-- Eine kleiner Bereich für aktuelle Neuigkeiten-->
|
<!-- Eine kleiner Bereich für aktuelle Neuigkeiten--> <!-- Nicht zu vieles, aktuell halten!!!-->
|
||||||
<!-- Nicht zu vieles, aktuell halten!!!-->
|
|
||||||
<!-- Idee: jede News ist eine h4-Überschrift und ein center-Element in einer div-->
|
<!-- Idee: jede News ist eine h4-Überschrift und ein center-Element in einer div-->
|
||||||
<!-- Idee: nur centerElement, wenn es nur ein Bild ist. Text sollte linksbündig sein.-->
|
<!-- Idee: nur centerElement, wenn es nur ein Bild ist. Text sollte linksbündig sein.-->
|
||||||
<!--Verleihung des Ehren-Chemmys-->
|
<!-- Gewinner Sportvereinswettbewerb -->
|
||||||
<div class="newsBox">
|
<div class="newsBox">
|
||||||
<h4>Normaler Trainingsbetrieb</h4>
|
<h4>Gewinner Sportvereinswettbewerb</h4>
|
||||||
<hr />
|
<hr />
|
||||||
<center> Der Trainingsbetrieb findet derzeit ohne Einschränkungen statt. </center>
|
<center>Der Chemnitzer Freizeit- und Wohngebietssportverein ist Gewinner im <a
|
||||||
|
href="https://www.so-geht-saechsisch.de/gewinner-vereinssportwettbewerb">Sportvereinswettbewerb des
|
||||||
|
Landessportbundes Sachsen</a></center>
|
||||||
|
<div style="text-align:center;">
|
||||||
|
<a href="https://www.so-geht-saechsisch.de/gewinner-vereinssportwettbewerb">
|
||||||
|
<img src="https://img.webme.com/pic/c/cwsv-sport/preisverleihung-sportvereinswettbewerb-2023.jpg"
|
||||||
|
title="Ehrung Chemnitzer WSV Sportvereinswettbewerb 2023" style="width:100%;"
|
||||||
|
alt="Ehrung Chemnitzer WSV Sportvereinswettbewerb 2023" hspace="25" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div style="text-align:center;">
|
||||||
|
<a href="https://www.so-geht-saechsisch.de/gewinner-vereinssportwettbewerb">
|
||||||
|
<img src="https://img.webme.com/pic/c/cwsv-sport/sportvereinswettbewerb-2023.png"
|
||||||
|
title="Gewinner Sportvereinswettbewerb 2023" style="width:100%;"
|
||||||
|
alt="Gewinner Sportvereinswettbewerb 2023" hspace="25" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
<!-- Spenden Button-->
|
<!-- Spenden Button--> <!-- Sollte vlt. nach corona nicht mehr so präsent mittig plaziert werden -->
|
||||||
<!-- Sollte vlt. nach corona nicht mehr so präsent mittig plaziert werden -->
|
|
||||||
<div style="display: flex;justify-content: center;" align="center">
|
<div style="display: flex;justify-content: center;" align="center">
|
||||||
<form action="https://www.paypal.com/donate" method="post" target="_top">
|
<form action="https://www.paypal.com/donate" method="post" target="_top">
|
||||||
<input type="hidden" name="hosted_button_id" value="8RYJXHP5X53LA" /> <input type="image"
|
<input type="hidden" name="hosted_button_id" value="8RYJXHP5X53LA" /> <input type="image"
|
||||||
src="
https://www.paypalobjects.com/de_DE/DE/i/btn/btn_donateCC_LG.gif" name="submit"
|
src="
https://www.paypalobjects.com/de_DE/DE/i/btn/btn_donateCC_LG.gif" name="submit"
|
||||||
title="PayPal - The safer, easier way to pay
online!" alt="Donate with PayPal button" border="0" /> <img
|
title="PayPal - The safer, easier way to pay
online!" alt="Donate with PayPal button" border="0" /> <img
|
||||||
alt="" src="https://www.paypal.com/de_DE/i/scr/pixel.gif" style="display: none !important;" x3i433pnl=""
|
alt="" src="https://www.paypal.com/de_DE/i/scr/pixel.gif" style="display: none !important;" x3i433pnl=""
|
||||||
d22q4wuy3="" xmqo9fcaa="" width="1" hidden="" height="1" border="0" />
|
d22q4wuy3="" xmqo9fcaa="" pv56i2hu5="" width="1" hidden="" height="1" border="0" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<h3 style="text-align:center;">CWSV e.V. - Sport für jedermann</h3>
|
<h3 style="text-align:center;">CWSV e.V. - Sport für jedermann</h3>
|
||||||
<div style="text-align:center;">
|
<div style="text-align:center;"><!--Automatisches Weihnachts- und Sylvesterlogo-->
|
||||||
<!--Automatisches Weihnachts- und Sylvesterlogo-->
|
|
||||||
<script language="JavaScript">
|
<script language="JavaScript">
|
||||||
function getSeasonBanner() {
|
function getSeasonBanner() {
|
||||||
var curDateTime = new Date()
|
var curDateTime = new Date()
|
||||||
@@ -52,8 +65,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
document.write(getSeasonBanner())
|
document.write(getSeasonBanner())
|
||||||
</script>
|
</script> <!--Standardlogo, falls kein JavaScript verfügbar ist--> <noscript>
|
||||||
<!--Standardlogo, falls kein JavaScript verfügbar ist--> <noscript>
|
|
||||||
<img src="//img.webme.com/pic/c/cwsv-sport/cwsvLogo.x300.png" height="300" hspace="25" alt="CWSV e. V." />
|
<img src="//img.webme.com/pic/c/cwsv-sport/cwsvLogo.x300.png" height="300" hspace="25" alt="CWSV e. V." />
|
||||||
</noscript> <a href="http://www.integration-durch-sport.de"> <img
|
</noscript> <a href="http://www.integration-durch-sport.de"> <img
|
||||||
src="//img.webme.com/pic/c/cwsv-sport/IntegrationDurchSport-2022.png"
|
src="//img.webme.com/pic/c/cwsv-sport/IntegrationDurchSport-2022.png"
|
||||||
|
|||||||
@@ -44,4 +44,4 @@ participo::init($cwsvJudoConfig);
|
|||||||
</main>
|
</main>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,33 +1,32 @@
|
|||||||
<?php
|
<?php
|
||||||
setlocale (LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge');
|
setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge');
|
||||||
set_include_path(get_include_path() . PATH_SEPARATOR . "./lib/");
|
set_include_path(get_include_path() . PATH_SEPARATOR . './lib/');
|
||||||
|
|
||||||
require_once("participoLib/participo.php");
|
require_once 'participoLib/participo.php';
|
||||||
require_once("participoLib/planer.php");
|
require_once 'participoLib/planer.php';
|
||||||
|
|
||||||
require_once("config/participo.php");
|
require_once 'config/participo.php';
|
||||||
|
|
||||||
require_once("./local/dbConf.php");
|
require_once './local/dbConf.php';
|
||||||
require_once("./local/cwsvJudo.php");
|
require_once './local/cwsvJudo.php';
|
||||||
|
|
||||||
require_once("./lib/db.php");
|
require_once './lib/db.php';
|
||||||
require_once("./lib/api.php");
|
require_once './lib/api.php';
|
||||||
|
|
||||||
require_once($config['basePath']."/config/cwsvJudo.config.php");
|
require_once $config['basePath'] . '/config/cwsvJudo.config.php';
|
||||||
|
|
||||||
dbConnector::connect(
|
dbConnector::connect(
|
||||||
$cwsvJudoConfig["db"]["host"],
|
$cwsvJudoConfig['db']['host'],
|
||||||
$cwsvJudoConfig["db"]["name"],
|
$cwsvJudoConfig['db']['name'],
|
||||||
$cwsvJudoConfig["db"]["user"],
|
$cwsvJudoConfig['db']['user'],
|
||||||
$cwsvJudoConfig["db"]["password"]
|
$cwsvJudoConfig['db']['password']
|
||||||
);
|
);
|
||||||
|
|
||||||
participo::authentificate();
|
participo::authentificate();
|
||||||
|
|
||||||
$userData = getUserData(dbConnector::getDbConnection(), $_SESSION['user']['userId']);
|
$userData = getUserData(dbConnector::getDbConnection(), $_SESSION['user']['userId']);
|
||||||
|
|
||||||
$meta = array(
|
$meta = [
|
||||||
'title' => "Event Planer",
|
'title' => 'Event Planer',
|
||||||
'description' => "Planung von (Nicht-)Teilnahmen an Wettkämpfen und anderen Veranstaltungen"
|
'description' => 'Planung von (Nicht-)Teilnahmen an Wettkämpfen und anderen Veranstaltungen'
|
||||||
);
|
];
|
||||||
?>
|
|
||||||
|
|||||||
@@ -2,16 +2,14 @@
|
|||||||
<div>
|
<div>
|
||||||
<nav class="indigo darken-4">
|
<nav class="indigo darken-4">
|
||||||
<div class="nav-wrapper">
|
<div class="nav-wrapper">
|
||||||
<div class="col s12">
|
<a href="http://cwsvjudo.bplaced.net/participo" class="breadcrumb">cwsvJudo-Apps</a>
|
||||||
<a href="http://cwsvjudo.bplaced.net/participo" class="breadcrumb">cwsvJudo-Apps</a>
|
<a href="http://cwsvjudo.bplaced.net/participo/events" class="breadcrumb">
|
||||||
<a href="http://cwsvjudo.bplaced.net/participo/events" class="breadcrumb">
|
<?php echo($meta['title']); ?>
|
||||||
<?php echo($meta['title']); ?>
|
</a>
|
||||||
</a>
|
<a class="right top-nav sidenav-trigger waves-effect waves-light hide-on-large-only" href="#"
|
||||||
<a class="right top-nav sidenav-trigger waves-effect waves-light hide-on-large-only" href="#"
|
data-target="nav-mobile">
|
||||||
data-target="nav-mobile">
|
<i class="material-icons">menu</i>
|
||||||
<i class="material-icons">menu</i>
|
</a>
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a class="right top-nav sidenav-trigger waves-effect waves-light hide-on-large-only" href="#"
|
<a class="right top-nav sidenav-trigger waves-effect waves-light hide-on-large-only" href="#"
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
function createDb($dbConnection){
|
function createDb($dbConnection){
|
||||||
<<<SQL
|
<<<SQL
|
||||||
CREATE TABLE `cwsvjudo`.`anwesenheit` (
|
CREATE TABLE `cwsvjudo`.`anwesenheit` (
|
||||||
|
|||||||
@@ -93,10 +93,32 @@ class Event
|
|||||||
return $this->shiai;
|
return $this->shiai;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function loadFromDb(int $id)
|
/** load the Event by id from the db
|
||||||
|
*
|
||||||
|
* - Frontend function: sanitizes the input and calls the backend function
|
||||||
|
*
|
||||||
|
* @param integer>0 $id id of the Event to load from the data base
|
||||||
|
* @return Event Event from the db with this id, null in case the Event couldn't be loaded
|
||||||
|
*/
|
||||||
|
public static function loadFromDb($id)
|
||||||
{
|
{
|
||||||
$id = filterId($id);
|
$id = filterId($id);
|
||||||
|
if ($id) {
|
||||||
|
return self::loadFromDbById($id);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* loads an event from the db by id
|
||||||
|
*
|
||||||
|
* - Backend function, input is supposed to be sanitized
|
||||||
|
*
|
||||||
|
* @param integer>0 $id sanitized id of the event to load
|
||||||
|
* @return Event Event from the db with this id, null in case the Event couldn't be loaded
|
||||||
|
*/
|
||||||
|
private static function loadFromDbById(int $id)
|
||||||
|
{
|
||||||
$query = 'SELECT * FROM `cwsvjudo`.`wkParticipo_Events` WHERE `id` = :id;';
|
$query = 'SELECT * FROM `cwsvjudo`.`wkParticipo_Events` WHERE `id` = :id;';
|
||||||
$params = [':id' => ['value' => $id, 'data_type' => PDO::PARAM_INT]];
|
$params = [':id' => ['value' => $id, 'data_type' => PDO::PARAM_INT]];
|
||||||
$response = dbConnector::query($query, $params);
|
$response = dbConnector::query($query, $params);
|
||||||
@@ -108,6 +130,16 @@ class Event
|
|||||||
return self::fromDbArray($response[0]);
|
return self::fromDbArray($response[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function htmlDate($format = 'Y-m-d')
|
||||||
|
{
|
||||||
|
return $this->date->format($format);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function htmlDeadLine($format = 'Y-m-d')
|
||||||
|
{
|
||||||
|
return $this->deadline->format($format);
|
||||||
|
}
|
||||||
|
|
||||||
/** Representation of an event as (materializeCss) card
|
/** Representation of an event as (materializeCss) card
|
||||||
*
|
*
|
||||||
* @return string string with the html code of the event
|
* @return string string with the html code of the event
|
||||||
@@ -121,9 +153,9 @@ class Event
|
|||||||
'<span class="card-title">' . $shiai->getHtmlName() . '</span>' .
|
'<span class="card-title">' . $shiai->getHtmlName() . '</span>' .
|
||||||
'<dl>' .
|
'<dl>' .
|
||||||
'<dt>Datum</dt>' .
|
'<dt>Datum</dt>' .
|
||||||
'<dd>' . $this->date->format('Y-m-d') . '</dd>' .
|
'<dd>' . $this->htmlDate() . '</dd>' .
|
||||||
'<dt>Einschreibefrist</dt>' .
|
'<dt>Einschreibefrist</dt>' .
|
||||||
'<dd>' . $this->deadline->format('Y-m-d') . '</dd>' .
|
'<dd>' . $this->htmlDeadLine() . '</dd>' .
|
||||||
'<dt>Altersklassen</dt>' .
|
'<dt>Altersklassen</dt>' .
|
||||||
'<dd>' . $this->shiai()->getHtmlDescriptiveAgeClasses() . '</dd>' .
|
'<dd>' . $this->shiai()->getHtmlDescriptiveAgeClasses() . '</dd>' .
|
||||||
'</dl>' .
|
'</dl>' .
|
||||||
@@ -131,12 +163,23 @@ class Event
|
|||||||
'</div>';
|
'</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getHtmlEventDetails()
|
||||||
|
{
|
||||||
|
$html .= '<dl>';
|
||||||
|
$html .= '<dt>Datum</dt><dd>' . $this->event()->htmlDate() . '</dd>';
|
||||||
|
$html .= '<dt>Deadline zum Einschreiben:</dt><dd>' . $this->event()->htmlDeadline() . '</dd>';
|
||||||
|
$html .= '</dl>';
|
||||||
|
$html .= $this->event()->shiai()->getHtml();
|
||||||
|
$html .= $this->event()->getHtmlStarterStatistic();
|
||||||
|
$html .= $this->event()->getHtmlStarterList();
|
||||||
|
}
|
||||||
|
|
||||||
public function htmlTableRow()
|
public function htmlTableRow()
|
||||||
{
|
{
|
||||||
$shiai = $this->shiai();
|
$shiai = $this->shiai();
|
||||||
return
|
return
|
||||||
'<tr>' .
|
'<tr>' .
|
||||||
'<td>' . $this->date->format('Y-m-d') . '</td>' .
|
'<td>' . $this->htmlDate() . '</td>' .
|
||||||
'<td><a href="/participo/events#' . $this->id . '" >' . $shiai->getHtmlName() . '</a></td>' .
|
'<td><a href="/participo/events#' . $this->id . '" >' . $shiai->getHtmlName() . '</a></td>' .
|
||||||
'<td>' . $shiai->getHtmlDescriptiveAgeClasses() . '</td>' .
|
'<td>' . $shiai->getHtmlDescriptiveAgeClasses() . '</td>' .
|
||||||
'<td><a class="waves-effect waves-light btn modal-trigger" href="#event-modal-' . $this->id . '"><i class="material-icons">zoom_in</i></a></td>' .
|
'<td><a class="waves-effect waves-light btn modal-trigger" href="#event-modal-' . $this->id . '"><i class="material-icons">zoom_in</i></a></td>' .
|
||||||
@@ -149,10 +192,13 @@ class Event
|
|||||||
'<div id="event-modal-' . $this->id . '" class="modal black-text">'
|
'<div id="event-modal-' . $this->id . '" class="modal black-text">'
|
||||||
. '<div class="modal-content">'
|
. '<div class="modal-content">'
|
||||||
. $this->shiai->getHtml()
|
. $this->shiai->getHtml()
|
||||||
|
. '<hr />'
|
||||||
. $this->getHtmlStarterStatistic()
|
. $this->getHtmlStarterStatistic()
|
||||||
. $this->getHtmlStarterList();
|
. '<hr />'
|
||||||
|
. $this->getHtmlStarterList()
|
||||||
|
. '<hr />';
|
||||||
$modal .= '<div class="row">';
|
$modal .= '<div class="row">';
|
||||||
$modal .= '<div class="s12">Deadline zum Eintragen: ' . $this->deadline->format('Y-m-d') . '</div>';
|
$modal .= '<div class="s12">Deadline zum Eintragen: ' . $this->htmlDeadLine() . '</div>';
|
||||||
|
|
||||||
$today = new DateTime();
|
$today = new DateTime();
|
||||||
if (
|
if (
|
||||||
@@ -163,13 +209,6 @@ class Event
|
|||||||
foreach ($kids as $k) {
|
foreach ($kids as $k) {
|
||||||
$modal .= $this->getHtmlAddStarterForm($k, ['returnToUrl' => '/participo/events#' . $this->id]);
|
$modal .= $this->getHtmlAddStarterForm($k, ['returnToUrl' => '/participo/events#' . $this->id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// foreach ($this->shiai()->ageGroups() as $ageClass => $starterList) {
|
|
||||||
// // $modal .= '<h3>' . $ageClass ?? 'keiner Altersklasse zugeordnet' . '</h3>';
|
|
||||||
// foreach ($starterList as $starter) {
|
|
||||||
// $modal .= $this->getHtmlAddStarterForm($k, ['returnToUrl' => '/participo/events#' . $this->id]);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
} else {
|
} else {
|
||||||
$modal .= '<div>Es ist leider zu spät noch jemanden einzutragen!</div>';
|
$modal .= '<div>Es ist leider zu spät noch jemanden einzutragen!</div>';
|
||||||
}
|
}
|
||||||
@@ -178,7 +217,7 @@ class Event
|
|||||||
$modal .=
|
$modal .=
|
||||||
'</div>' . // end modal-content
|
'</div>' . // end modal-content
|
||||||
'<div class="modal-footer">' .
|
'<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="/pages/desktop/wkParticipo/showWkEvent.php?eventId=' . $this->id . '" class="modal-close waves-effect waves-green btn-flat">Zum Event im alten Planer</a>' .
|
||||||
'<a href="#!" class="modal-close waves-effect waves-green btn-flat">Schließen</a>' .
|
'<a href="#!" class="modal-close waves-effect waves-green btn-flat">Schließen</a>' .
|
||||||
'</div>' . // end modal-footer
|
'</div>' . // end modal-footer
|
||||||
'</div>';
|
'</div>';
|
||||||
@@ -209,7 +248,7 @@ class Event
|
|||||||
*
|
*
|
||||||
* @todo docu
|
* @todo docu
|
||||||
*/
|
*/
|
||||||
private function getStarter()
|
public function getStarter()
|
||||||
{
|
{
|
||||||
$userId = $_SESSION['user']['userId'] ?? null;
|
$userId = $_SESSION['user']['userId'] ?? null;
|
||||||
|
|
||||||
@@ -224,7 +263,7 @@ class Event
|
|||||||
|
|
||||||
$starter = [];
|
$starter = [];
|
||||||
foreach ($response as $r) {
|
foreach ($response as $r) {
|
||||||
$starter[] = Starter::loadFromDb($r['starterId']);
|
$starter[$r['starterId']] = Starter::loadFromDb($r['starterId']);
|
||||||
}
|
}
|
||||||
return $starter;
|
return $starter;
|
||||||
}
|
}
|
||||||
@@ -253,16 +292,21 @@ class Event
|
|||||||
|
|
||||||
public function getHtmlStarterStatistic()
|
public function getHtmlStarterStatistic()
|
||||||
{
|
{
|
||||||
|
$isEmpty = true;
|
||||||
$retHtml = '<dl>';
|
$retHtml = '<dl>';
|
||||||
foreach ([StartingType::Fighter, StartingType::NoParticipation, StartingType::Audience] as $type) {
|
foreach ([StartingType::Fighter, StartingType::NoParticipation, StartingType::Audience] as $type) {
|
||||||
$count = $this->getStarterCount($type);
|
$count = $this->getStarterCount($type);
|
||||||
if ($count > 0) {
|
if ($count > 0) {
|
||||||
|
$isEmpty = false;
|
||||||
$retHtml .= '<dt>' . StartingType::$AsString[$type] . '</dt><dd>' . $count . '</dd>';
|
$retHtml .= '<dt>' . StartingType::$AsString[$type] . '</dt><dd>' . $count . '</dd>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$retHtml .= '<dt>Mitfahrgelegenheiten</dt><dd>' . $this->getSeatCount() . '</dd>';
|
if ($this->getSeatCount() > 0) {
|
||||||
|
$isEmpty = false;
|
||||||
|
$retHtml .= '<dt>Mitfahrgelegenheiten</dt><dd>' . $this->getSeatCount() . '</dd>';
|
||||||
|
}
|
||||||
$retHtml .= '</dl>';
|
$retHtml .= '</dl>';
|
||||||
return $retHtml;
|
return $isEmpty ? '' : $retHtml;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function fromDbArray($member)
|
public static function fromDbArray($member)
|
||||||
@@ -308,7 +352,7 @@ class Event
|
|||||||
{
|
{
|
||||||
$defaults = [
|
$defaults = [
|
||||||
'formClass' => 's12 m6 xl3',
|
'formClass' => 's12 m6 xl3',
|
||||||
'inputClass' => 'input-field col s12',
|
'inputClass' => 'col s12',
|
||||||
'buttonClass' => 'btn'
|
'buttonClass' => 'btn'
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -325,14 +369,29 @@ class Event
|
|||||||
. '<input type="hidden" name="userId" id="userId" value="' . $user->getId() . '">'
|
. '<input type="hidden" name="userId" id="userId" value="' . $user->getId() . '">'
|
||||||
. '<input type="hidden" name="returnToUrl" id="returnToUrl" value="' . $returnToUrl . '" >'
|
. '<input type="hidden" name="returnToUrl" id="returnToUrl" value="' . $returnToUrl . '" >'
|
||||||
. '<div class="' . $options['inputClass'] . '">'
|
. '<div class="' . $options['inputClass'] . '">'
|
||||||
. '<label for="' . $selectId . '">' . $user->getName() . ', ' . $user->getFirstname() . '</label>'
|
. '<fieldset id="' . $selectId . '>'
|
||||||
. '<select id="' . $selectId . '" name="type">'
|
. '<label for="' . $selectId . '">' . $user->getName() . ', ' . $user->getFirstname() . '</label>'
|
||||||
. '<option value="1" selected="">als Starter</option>'
|
. '<p>'
|
||||||
. '<option value="2">als Zuschauer</option>'
|
. '<label for="' . $selectId . '-asStarter">'
|
||||||
. '<option value="3">keine Teilnahme</option>'
|
. '<input name="type" type="radio" id="' . $selectId . '-asStarter" value="1" />'
|
||||||
. '</select>'
|
. '<span>als Starter</span>'
|
||||||
|
. '</label>'
|
||||||
|
. '</p>'
|
||||||
|
. '<p>'
|
||||||
|
. '<label for="' . $selectId . '-asWatcher">'
|
||||||
|
. '<input name="type" type="radio" id="' . $selectId . '-asWatcher" value="2" />'
|
||||||
|
. '<span>als Zuschauer</span>'
|
||||||
|
. '</label>'
|
||||||
|
. '</p>'
|
||||||
|
. '<p>'
|
||||||
|
. '<label for="' . $selectId . '-asNone">'
|
||||||
|
. '<input name="type" type="radio" id="' . $selectId . '-asNone" value="3" checked />'
|
||||||
|
. '<span>keine Teilnahme</span>'
|
||||||
|
. '</label>'
|
||||||
|
. '</p>'
|
||||||
|
. '<input class="' . $options['buttonClass'] . '" type="submit" name="submit" value="eintragen" />'
|
||||||
|
. '</fieldset>'
|
||||||
. '</div>'
|
. '</div>'
|
||||||
. '<input class="' . $options['buttonClass'] . '" type="submit" name="submit" value="eintragen">'
|
|
||||||
. '</form>';
|
. '</form>';
|
||||||
|
|
||||||
return $form;
|
return $form;
|
||||||
|
|||||||
96
homepage/participo/lib/participoLib/eventPage.php
Normal file
96
homepage/participo/lib/participoLib/eventPage.php
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class EventPage
|
||||||
|
{
|
||||||
|
public function __construct($eventId = null)
|
||||||
|
{
|
||||||
|
$this->eventId = filterId($eventId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function init()
|
||||||
|
{
|
||||||
|
$params = participo::parseParams(
|
||||||
|
['eventId' => function ($param) {return filterId($param); }]
|
||||||
|
);
|
||||||
|
$this->eventId = $params['eventId'];
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getHtmlNotFound()
|
||||||
|
{
|
||||||
|
return '<div>Der Event "' . $this->id . '" existiert leider nicht!</div>'
|
||||||
|
. '<h2>Anstehende Termine</h2>'
|
||||||
|
. eventPlaner::getHtmlEventTable(
|
||||||
|
eventPlaner::getComingWkEvents()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getHtml()
|
||||||
|
{
|
||||||
|
if (!$this->event()) {
|
||||||
|
return $this->getHtmlNotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
$html = '';
|
||||||
|
|
||||||
|
$html .=
|
||||||
|
'<div>'
|
||||||
|
. '<dl>'
|
||||||
|
. '<dt>Termine</dt>'
|
||||||
|
. '<dd>
|
||||||
|
<dl>'
|
||||||
|
. '<dt>Datum</dt><dd>' . $this->event()->htmlDate() . '</dd>'
|
||||||
|
. '<dt>Deadline zum Einschreiben:</dt><dd>' . $this->event()->htmlDeadline() . '</dd>'
|
||||||
|
. '</dl>';
|
||||||
|
// Not all Events have a shiai linked to them
|
||||||
|
if ($this->event()->shiai()) {
|
||||||
|
$html .=
|
||||||
|
'<dt>Wettkampfdetails</dt><dd>' . $this->event()->shiai()->getHtmlDetails() . '</dd>';
|
||||||
|
}
|
||||||
|
$html .=
|
||||||
|
'<dt>Einschreibungen</dt><dd>' . $this->event()->getHtmlStarterStatistic() . '</dd>'
|
||||||
|
. '<dt>Eigene, gemeldete Starter</dt><dd>' . $this->event()->getHtmlStarterList() . '</dd>'
|
||||||
|
. '</dl>'
|
||||||
|
. '</div>';
|
||||||
|
|
||||||
|
$html .=
|
||||||
|
'<div>';
|
||||||
|
foreach ($this->event()->shiai()->ageGroups() as $ageClass => $starterList) {
|
||||||
|
$html .=
|
||||||
|
'<dl>' .
|
||||||
|
'<dt>' . (!empty($ageClass) ? $ageClass : 'keiner Altersklasse zugeordnet') . '</dt>'
|
||||||
|
. '<dd>
|
||||||
|
<ul>';
|
||||||
|
foreach ($starterList as $starter) {
|
||||||
|
if (!array_key_exists($starter->getId(), $this->event()->getStarter())) {
|
||||||
|
$html .=
|
||||||
|
'<li>' . $starter->getName() . ', ' . $starter->getFirstname() . ' - ' . $starter->yearOfBirth() . '
|
||||||
|
</li>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$html .= '
|
||||||
|
</dd>
|
||||||
|
</ul>';
|
||||||
|
}
|
||||||
|
$html .= '</div>';
|
||||||
|
|
||||||
|
return $html;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function html()
|
||||||
|
{
|
||||||
|
echo($this->getHtml());
|
||||||
|
}
|
||||||
|
|
||||||
|
private function event(bool $forceLoading = false)
|
||||||
|
{
|
||||||
|
if (!$this->event || $forceLoading) {
|
||||||
|
$this->event = Event::loadFromDb($this->eventId);
|
||||||
|
}
|
||||||
|
return $this->event;
|
||||||
|
}
|
||||||
|
|
||||||
|
private $eventId = null;
|
||||||
|
private $event = null;
|
||||||
|
}
|
||||||
@@ -2,12 +2,29 @@
|
|||||||
|
|
||||||
require_once 'participoLib/dbConnector.php';
|
require_once 'participoLib/dbConnector.php';
|
||||||
require_once 'participoLib/user.php';
|
require_once 'participoLib/user.php';
|
||||||
|
require_once 'participoLib/event.php';
|
||||||
|
require_once 'participoLib/eventPage.php';
|
||||||
|
require_once 'participoLib/starter.php';
|
||||||
|
require_once 'participoLib/planer.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* FrameWork for the participoApp
|
* FrameWork for the participoApp
|
||||||
*/
|
*/
|
||||||
class participo
|
class participo
|
||||||
{
|
{
|
||||||
|
/** a page describing an event */
|
||||||
|
private static $eventPage = null;
|
||||||
|
|
||||||
|
/** getter for the eventPage, creates a new one if not already created */
|
||||||
|
public static function eventPage()
|
||||||
|
{
|
||||||
|
if (!self::$eventPage) {
|
||||||
|
self::$eventPage = new EventPage();
|
||||||
|
}
|
||||||
|
self::$eventPage->init();
|
||||||
|
return self::$eventPage;
|
||||||
|
}
|
||||||
|
|
||||||
private static $db = null;
|
private static $db = null;
|
||||||
private static $message = ['error' => null, 'success' => null, 'notice' => null];
|
private static $message = ['error' => null, 'success' => null, 'notice' => null];
|
||||||
|
|
||||||
@@ -131,6 +148,64 @@ class participo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Initialize the participoApp
|
||||||
|
*
|
||||||
|
* - validate the login
|
||||||
|
* - init the db connection
|
||||||
|
*
|
||||||
|
* @param [type] $config
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function init($config)
|
||||||
|
{
|
||||||
|
self::authentificate();
|
||||||
|
self::initDb(
|
||||||
|
$config['db']['host'],
|
||||||
|
$config['db']['name'],
|
||||||
|
$config['db']['user'],
|
||||||
|
$config['db']['password']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function initDb($host, $name, $user, $password)
|
||||||
|
{
|
||||||
|
dbConnector::connect($host, $name, $user, $password);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Framework to parse parameters get/post requests
|
||||||
|
*
|
||||||
|
* - Each param given in to this function is looked up in the request and put through the parsing function.
|
||||||
|
* - Params in the request that aren't in given a parsing function aren't parsed and hence not returned.
|
||||||
|
*
|
||||||
|
* @param [array(paramName => parseFunction)] $params array of the name of the param and a sanitizer/parsing/input function
|
||||||
|
* @return array(parsedParam=>paramValue) Associative array of the name of the param and its parsed value
|
||||||
|
*/
|
||||||
|
public static function parseParams($params)
|
||||||
|
{
|
||||||
|
$method = $_SERVER['REQUEST_METHOD'];
|
||||||
|
$request = explode('/', substr(@$_SERVER['PATH_INFO'], 1));
|
||||||
|
|
||||||
|
$parsedParams = [];
|
||||||
|
foreach ($params as $paramName => $parseFunction) {
|
||||||
|
$parsedParams[$paramName] = null;
|
||||||
|
switch ($method) {
|
||||||
|
// case 'PUT':
|
||||||
|
// do_something_with_put($request);
|
||||||
|
// break;
|
||||||
|
case 'POST':
|
||||||
|
$parsedParams[$paramName] = $parseFunction($_POST[$paramName]);
|
||||||
|
break;
|
||||||
|
case 'GET':
|
||||||
|
$parsedParams[$paramName] = $parseFunction($_GET[$paramName]);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// handle_error($request);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $parsedParams;
|
||||||
|
}
|
||||||
|
|
||||||
public static function getMessages()
|
public static function getMessages()
|
||||||
{
|
{
|
||||||
return self::$message;
|
return self::$message;
|
||||||
@@ -209,8 +284,13 @@ class participo
|
|||||||
|
|
||||||
$query =
|
$query =
|
||||||
'SELECT * FROM `wkParticipo_Users` '
|
'SELECT * FROM `wkParticipo_Users` '
|
||||||
. 'INNER JOIN `vormundschaft` ON `wkParticipo_Users`.`id` = `vormundschaft`.`kidId` '
|
. 'INNER JOIN `vormundschaft` '
|
||||||
. 'WHERE `vormundschaft`.`userId` = :userId;';
|
. 'ON `wkParticipo_Users`.`id` = `vormundschaft`.`kidId` '
|
||||||
|
. 'INNER JOIN `wkParticipo_user<=>userAttributes` '
|
||||||
|
. 'ON `wkParticipo_Users`.`id` = `wkParticipo_user<=>userAttributes`.`userId`'
|
||||||
|
. 'WHERE `vormundschaft`.`userId` = :userId '
|
||||||
|
. 'AND `vormundschaft`.`userId` = :userId '
|
||||||
|
. 'AND `wkParticipo_user<=>userAttributes`.`attributeId` = 4;';
|
||||||
$params = [':userId' => ['value' => $userId, 'data_type' => PDO::PARAM_INT]];
|
$params = [':userId' => ['value' => $userId, 'data_type' => PDO::PARAM_INT]];
|
||||||
|
|
||||||
$response = dbConnector::query($query, $params);
|
$response = dbConnector::query($query, $params);
|
||||||
|
|||||||
@@ -58,6 +58,16 @@ class Shiai
|
|||||||
return ($this->place != null ? $this->place : '-');
|
return ($this->place != null ? $this->place : '-');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getAnnouncementUrl()
|
||||||
|
{
|
||||||
|
return $this->announcementUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRouteUrl()
|
||||||
|
{
|
||||||
|
return $this->routeUrl;
|
||||||
|
}
|
||||||
|
|
||||||
public static function loadFromDb(int $id)
|
public static function loadFromDb(int $id)
|
||||||
{
|
{
|
||||||
$id = filterId($id);
|
$id = filterId($id);
|
||||||
@@ -97,16 +107,28 @@ class Shiai
|
|||||||
$retHtml = '';
|
$retHtml = '';
|
||||||
$retHtml =
|
$retHtml =
|
||||||
'<div>' .
|
'<div>' .
|
||||||
'<h3>' . $this->getHtmlName() . '</h3>' .
|
'<h3><a href="' . $this->announcementUrl . '">' . $this->getHtmlName() . '</a></h3>' .
|
||||||
'<dl>' .
|
'<dl>' .
|
||||||
'<dt>Datum</dt><dd>' . $this->getHtmlDate() . '</dd>' .
|
'<dt>Datum</dt><dd>' . $this->getHtmlDate() . '</dd>' .
|
||||||
'<dt>Altersklassen</dt><dd>' . $this->getHtmlDescriptiveAgeClasses() . '</dd>' .
|
'<dt>Altersklassen</dt><dd>' . $this->getHtmlDescriptiveAgeClasses() . '</dd>' .
|
||||||
'<dt>Ort</dt><dd>' . $this->getPlace() . '</dd>' .
|
'<dt>Ort</dt><dd><a href="' . $this->routeUrl . '">' . $this->getPlace() . '</a></dd>' .
|
||||||
'</dl>' .
|
'</dl>' .
|
||||||
'</div>';
|
'</div>';
|
||||||
return $retHtml;
|
return $retHtml;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getHtmlDetails()
|
||||||
|
{
|
||||||
|
return
|
||||||
|
'<dl>'
|
||||||
|
. '<dt>Name</dt><dd><a href="' . $this->announcementUrl . '">' . $this->getHtmlName() . '</a></dd>'
|
||||||
|
. '<dt>Datum</dt><dd>' . $this->getHtmlDate() . '</dd>'
|
||||||
|
. '<dt>Altersklassen</dt><dd>' . $this->getHtmlDescriptiveAgeClasses() . '</dd>'
|
||||||
|
. '<dt>Ort</dt><dd><a href="' . $this->routeUrl . '">' . $this->getPlace() . '</a></dd>' .
|
||||||
|
'</dl>'
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
public function getHtmlDescriptiveAgeClasses()
|
public function getHtmlDescriptiveAgeClasses()
|
||||||
{
|
{
|
||||||
$retList = [];
|
$retList = [];
|
||||||
@@ -128,121 +150,121 @@ class Shiai
|
|||||||
return implode(', ', $retList);
|
return implode(', ', $retList);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** convert a list of age class formatted strings into a list of intervals of years
|
/** convert a list of age class formatted strings into a list of intervals of years
|
||||||
*
|
*
|
||||||
* @param string $akListString
|
* @param string $akListString
|
||||||
* @param int $year
|
* @param int $year
|
||||||
* @return list[array(int,int)] list of tupels with lower/upper bound in date year of the age classes
|
* @return list[array(int,int)] list of tupels with lower/upper bound in date year of the age classes
|
||||||
*/
|
*/
|
||||||
private static function akListString2jgArray(string $akListString, int $year = null)
|
private static function akListString2jgArray(string $akListString, int $year = null)
|
||||||
{
|
{
|
||||||
$year = filterPosInt($year) ?? filterPosInt((new DateTime)->format('Y'));
|
$year = filterPosInt($year) ?? filterPosInt((new DateTime)->format('Y'));
|
||||||
$ret = [];
|
$ret = [];
|
||||||
foreach (explode(' ', $akListString) as $ak) {
|
foreach (explode(' ', $akListString) as $ak) {
|
||||||
$ret[$ak] = self::akString2jgIntervall($ak, $year);
|
$ret[$ak] = self::akString2jgIntervall($ak, $year);
|
||||||
|
}
|
||||||
|
return $ret;
|
||||||
}
|
}
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** convert age class from formatted string to interval of years
|
/** convert age class from formatted string to interval of years
|
||||||
*
|
*
|
||||||
* @param [string] $akString
|
* @param [string] $akString
|
||||||
* @param [type] $year
|
* @param [type] $year
|
||||||
* @return array(int,int) [x,y] with x the lower bound and y the upper bound of the age class in years. Both bounds are still included in the interval.
|
* @return array(int,int) [x,y] with x the lower bound and y the upper bound of the age class in years. Both bounds are still included in the interval.
|
||||||
*/
|
*/
|
||||||
private static function akString2jgIntervall(string $akString, int $year /*= null*/)
|
private static function akString2jgIntervall(string $akString, int $year /*= null*/)
|
||||||
{
|
{
|
||||||
// input sanitation
|
// input sanitation
|
||||||
$year = filterPosInt($year) ?? filterPosInt((new DateTime)->format('Y'));
|
$year = filterPosInt($year) ?? filterPosInt((new DateTime)->format('Y'));
|
||||||
|
|
||||||
$ret = [null, null];
|
$ret = [null, null];
|
||||||
|
|
||||||
// Matching against the different age class formats
|
// Matching against the different age class formats
|
||||||
// - ..Ux
|
// - ..Ux
|
||||||
// - Jg.x-y
|
// - Jg.x-y
|
||||||
|
|
||||||
// Case Ux
|
// Case Ux
|
||||||
$akUmatchString = '/(.*)U(.*)/';
|
$akUmatchString = '/(.*)U(.*)/';
|
||||||
|
|
||||||
$matches = [];
|
$matches = [];
|
||||||
|
|
||||||
preg_match($akUmatchString, $akString, $matches);
|
preg_match($akUmatchString, $akString, $matches);
|
||||||
// The found match should cover the whole string. Otherwise it isn't applicable.
|
// The found match should cover the whole string. Otherwise it isn't applicable.
|
||||||
if ($matches[0] == $akString) {
|
if ($matches[0] == $akString) {
|
||||||
// The x in Ux should be a positive integer.
|
// The x in Ux should be a positive integer.
|
||||||
$ageLimit = filterPosInt($matches[2]);
|
$ageLimit = filterPosInt($matches[2]);
|
||||||
if ($ageLimit) {
|
if ($ageLimit) {
|
||||||
$ret[0] = $year - $ageLimit + 1;
|
$ret[0] = $year - $ageLimit + 1;
|
||||||
// lowering the lower bound according to the modifiers
|
// lowering the lower bound according to the modifiers
|
||||||
if ($matches[1] == '') {
|
if ($matches[1] == '') {
|
||||||
$ret[1] = $year - $ageLimit + 2;
|
$ret[1] = $year - $ageLimit + 2;
|
||||||
} elseif ($matches[1] == '-') {
|
} elseif ($matches[1] == '-') {
|
||||||
$ret[1] = $year - $ageLimit + 3;
|
$ret[1] = $year - $ageLimit + 3;
|
||||||
} elseif ($matches[1] == '--') {
|
} elseif ($matches[1] == '--') {
|
||||||
$ret[1] = $year - $ageLimit + 4;
|
$ret[1] = $year - $ageLimit + 4;
|
||||||
} elseif (in_array($matches[1], ['<=', '≤', '≤', '≤', '≤'])) {
|
} elseif (in_array($matches[1], ['<=', '≤', '≤', '≤', '≤'])) {
|
||||||
$ret[1] = $year;
|
$ret[1] = $year;
|
||||||
|
}
|
||||||
|
return $ret;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Case Jg.x-y
|
||||||
|
$akUmatchString = "/Jg\.(.*)\-{1,2}(.*)/";
|
||||||
|
|
||||||
|
$matches = [];
|
||||||
|
|
||||||
|
preg_match($akUmatchString, $akString, $matches);
|
||||||
|
// The found match should cover the whole string. Otherwise it isn't applicable.
|
||||||
|
|
||||||
|
if ($matches[0] == $akString) {
|
||||||
|
$ret[0] = filterPosInt($matches[1]);
|
||||||
|
$ret[1] = filterPosInt($matches[2]);
|
||||||
|
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Case Jg.x-y
|
|
||||||
$akUmatchString = "/Jg\.(.*)\-(.*)/";
|
|
||||||
|
|
||||||
$matches = [];
|
|
||||||
|
|
||||||
preg_match($akUmatchString, $akString, $matches);
|
|
||||||
// The found match should cover the whole string. Otherwise it isn't applicable.
|
|
||||||
|
|
||||||
if ($matches[0] == $akString) {
|
|
||||||
$ret[0] = filterPosInt($matches[1]);
|
|
||||||
$ret[1] = filterPosInt($matches[2]);
|
|
||||||
|
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $ret;
|
/** grouping users kids by ageGroups
|
||||||
}
|
*
|
||||||
|
* @return array(ageGroup => list(users in ageGroup))
|
||||||
/** grouping users kids by ageGroups
|
*/
|
||||||
*
|
public function ageGroups()
|
||||||
* @return array(ageGroup => list(users in ageGroup))
|
{
|
||||||
*/
|
$kids = participo::getKids();
|
||||||
public function ageGroups()
|
return self::ageClassGrouping($this->ageclasses, $kids);
|
||||||
{
|
|
||||||
$kids = participo::getKids();
|
|
||||||
return self::ageClassGrouping($this->ageclasses, $kids);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** grouping users by given age class
|
|
||||||
*
|
|
||||||
* @param array $ageClassList as array string representation of age class => [lower year bound, upper year bound]
|
|
||||||
* @param array $starterList list of starter (User)
|
|
||||||
* @return array of string representation of age class => array of user in this class
|
|
||||||
*/
|
|
||||||
private static function ageClassGrouping(array $ageClassList, array $starterList)
|
|
||||||
{
|
|
||||||
$grouping = [];
|
|
||||||
foreach ($ageClassList as $ageClass => $yearBoundaries) {
|
|
||||||
$grouping[$ageClass] = [];
|
|
||||||
}
|
}
|
||||||
$grouping[null] = [];
|
|
||||||
|
|
||||||
foreach ($starterList as $starter) {
|
/** grouping users by given age class
|
||||||
$startersAgeClass = $starter->yearOfBirth() ? self::getAgeClassFromYear($starter->yearOfBirth(), $ageClassList) : null;
|
*
|
||||||
array_push($grouping[$startersAgeClass], $starter);
|
* @param array $ageClassList as array string representation of age class => [lower year bound, upper year bound]
|
||||||
}
|
* @param array $starterList list of starter (User)
|
||||||
return $grouping;
|
* @return array of string representation of age class => array of userId=>user in this class
|
||||||
}
|
*/
|
||||||
|
private static function ageClassGrouping(array $ageClassList, array $starterList)
|
||||||
private static function getAgeClassFromYear(int $year, array $ageClassList)
|
{
|
||||||
{
|
$grouping = [];
|
||||||
foreach ($ageClassList as $ageClass => $yearBoundaries) {
|
foreach ($ageClassList as $ageClass => $yearBoundaries) {
|
||||||
if (($yearBoundaries[0] <= $year) && ($year <= $yearBoundaries[1])) {
|
$grouping[$ageClass] = [];
|
||||||
return $ageClass;
|
|
||||||
}
|
}
|
||||||
|
$grouping[null] = [];
|
||||||
|
|
||||||
|
foreach ($starterList as $starter) {
|
||||||
|
$startersAgeClass = $starter->yearOfBirth() ? self::getAgeClassFromYear($starter->yearOfBirth(), $ageClassList) : null;
|
||||||
|
$grouping[$startersAgeClass][$starter->getId()] = $starter;
|
||||||
|
}
|
||||||
|
return $grouping;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function getAgeClassFromYear(int $year, array $ageClassList)
|
||||||
|
{
|
||||||
|
foreach ($ageClassList as $ageClass => $yearBoundaries) {
|
||||||
|
if (($yearBoundaries[0] <= $year) && ($year <= $yearBoundaries[1])) {
|
||||||
|
return $ageClass;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
}
|
|
||||||
} // end class shiai
|
} // end class shiai
|
||||||
|
|||||||
60
infoZettelOrg/eMailReceiverLists/U11--.json
Normal file
60
infoZettelOrg/eMailReceiverLists/U11--.json
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id": "1",
|
||||||
|
"loginName": "marko",
|
||||||
|
"eMail": [
|
||||||
|
"marko.bunzel@arcor.de"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "77",
|
||||||
|
"loginName": "elternHaeuberer",
|
||||||
|
"eMail": [
|
||||||
|
"julia.haeuberer@gmx.de",
|
||||||
|
"norman.haeuberer@gmail.com"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "85",
|
||||||
|
"loginName": "elternGerlach",
|
||||||
|
"eMail": [
|
||||||
|
"manja.bunzel@gmx.de"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "96",
|
||||||
|
"loginName": "elternMaiatska",
|
||||||
|
"eMail": [
|
||||||
|
"ice_0605@i.ua"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "103",
|
||||||
|
"loginName": "elternBoehme",
|
||||||
|
"eMail": [
|
||||||
|
"jeannette.boehme@mail.de"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "110",
|
||||||
|
"loginName": "elternOrtmans",
|
||||||
|
"eMail": [
|
||||||
|
"jortmans@gmx.de",
|
||||||
|
"peter.weissbrod@t-online.de"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "113",
|
||||||
|
"loginName": "ElternEberlein",
|
||||||
|
"eMail": [
|
||||||
|
"jana.eberlein@yahoo.de"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "115",
|
||||||
|
"loginName": "elternKutschmann",
|
||||||
|
"eMail": [
|
||||||
|
"uwe.schwerdtfeger@uni-dortmund.de"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
"id": "1",
|
"id": "1",
|
||||||
"loginName": "marko",
|
"loginName": "marko",
|
||||||
"eMail": [
|
"eMail": [
|
||||||
"marko.bunzel@arcor.de",
|
"cwsvjudo@arcor.de"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -67,6 +67,7 @@
|
|||||||
"id": "94",
|
"id": "94",
|
||||||
"loginName": "elternBritvin",
|
"loginName": "elternBritvin",
|
||||||
"eMail": [
|
"eMail": [
|
||||||
|
"britvina.ludmila.76@icloud.com",
|
||||||
"luidmyla60@gmail.com"
|
"luidmyla60@gmail.com"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -84,13 +85,6 @@
|
|||||||
"jeannette.boehme@mail.de"
|
"jeannette.boehme@mail.de"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"id": "105",
|
|
||||||
"loginName": "elternChernov",
|
|
||||||
"eMail": [
|
|
||||||
"innaserbina1313@gmail.com"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"id": "108",
|
"id": "108",
|
||||||
"loginName": "elternRichter",
|
"loginName": "elternRichter",
|
||||||
@@ -102,7 +96,8 @@
|
|||||||
"id": "110",
|
"id": "110",
|
||||||
"loginName": "elternOrtmans",
|
"loginName": "elternOrtmans",
|
||||||
"eMail": [
|
"eMail": [
|
||||||
"jortmans@gmx.de"
|
"jortmans@gmx.de",
|
||||||
|
"peter.weissbrod@t-online.de"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -118,5 +113,27 @@
|
|||||||
"eMail": [
|
"eMail": [
|
||||||
"uwe.schwerdtfeger@uni-dortmund.de"
|
"uwe.schwerdtfeger@uni-dortmund.de"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "117",
|
||||||
|
"loginName": "elternLafdhal",
|
||||||
|
"eMail": [
|
||||||
|
"BougyuerraKhaoula88@gmail.com"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "119",
|
||||||
|
"loginName": "elternBondar",
|
||||||
|
"eMail": [
|
||||||
|
"bondar.mata@gmail.com"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "121",
|
||||||
|
"loginName": "elternNodia",
|
||||||
|
"eMail": [
|
||||||
|
"tamta.devidze@mail.ru",
|
||||||
|
"nugzari.nodia@icloud.com"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
45
infoZettelOrg/eMailReceiverLists/hkr.json
Normal file
45
infoZettelOrg/eMailReceiverLists/hkr.json
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id": "1",
|
||||||
|
"loginName": "marko",
|
||||||
|
"eMail": [
|
||||||
|
"marko.bunzel@arcor.de"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "96",
|
||||||
|
"loginName": "elternMaiatska",
|
||||||
|
"eMail": [
|
||||||
|
"ice_0605@i.ua"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "103",
|
||||||
|
"loginName": "elternBoehme",
|
||||||
|
"eMail": [
|
||||||
|
"jeannette.boehme@mail.de"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "110",
|
||||||
|
"loginName": "elternOrtmans",
|
||||||
|
"eMail": [
|
||||||
|
"jortmans@gmx.de",
|
||||||
|
"peter.weissbrod@t-online.de"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "113",
|
||||||
|
"loginName": "ElternEberlein",
|
||||||
|
"eMail": [
|
||||||
|
"jana.eberlein@yahoo.de"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "115",
|
||||||
|
"loginName": "elternKutschmann",
|
||||||
|
"eMail": [
|
||||||
|
"uwe.schwerdtfeger@uni-dortmund.de"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
12
infoZettelOrg/wkZettel/2023-10-21-hkr-mediasharing.md
Normal file
12
infoZettelOrg/wkZettel/2023-10-21-hkr-mediasharing.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
title: Herbstkrümelrandori 2023 - Mediasharing
|
||||||
|
---
|
||||||
|
|
||||||
|
Hier der Link zu den Videos und Bildern des Herbstkrümelrandoris:
|
||||||
|
|
||||||
|
- Link: https://magentacloud.de/s/9c5sY4fLcP4NZ38
|
||||||
|
- Passwort: nnRSoPkT
|
||||||
|
|
||||||
|
Wie immer würde ich mich freuen, wenn auch alle anderen ihre gemachten Bilder und Videos mit hochladen.
|
||||||
|
|
||||||
|
MsG marko
|
||||||
48
infoZettelOrg/wkZettel/2023-10-21-hkr.md
Normal file
48
infoZettelOrg/wkZettel/2023-10-21-hkr.md
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
---
|
||||||
|
title: Herbstkrümelrandori 2023
|
||||||
|
---
|
||||||
|
|
||||||
|
# [Herbstkrümelrandori 2023][wk197]
|
||||||
|
|
||||||
|
Bitte gebt mir über den Wettkampfplaner Bescheid, wer mitkommen kann und wer nicht! Einmal [hier klicken][wk197] und "Teilnahme" oder "keine Teilnahme" auswählen.
|
||||||
|
|
||||||
|
Auch wäre es gut für mich, zu wissen, wer selber fährt, wer noch Platz im Auto hat oder wer selber eine Mitfahrgelegenheit benötigt.
|
||||||
|
|
||||||
|
|
||||||
|
## Wettkampfdaten
|
||||||
|
|
||||||
|
- Altersklassen: Jg. 2013 bis 2017
|
||||||
|
- Datum: [21.10.2023][wk197]
|
||||||
|
- Ort: [Dreifelder-TH der Goethe-Oberschule Breitenbrunn, Dorfberg 10, 08359 Breitenbrunn][1]
|
||||||
|
- Wiegen: 9:00--9:45 Uhr
|
||||||
|
- Wettkampferöffnung: ca. 10:30 Uhr
|
||||||
|
- [offizielle Ausschreibung (nur zur Info)][0]
|
||||||
|
|
||||||
|
|
||||||
|
## Treffpunkt
|
||||||
|
|
||||||
|
- Ort: [P+R Parkplatz Südring/Stollberger Straße][2]
|
||||||
|
- Abfahrt: 7:15 Uhr
|
||||||
|
- Kindersitz (die Mitfahrer im Bus) nicht vergessen!
|
||||||
|
|
||||||
|
|
||||||
|
## Nicht vergessen
|
||||||
|
|
||||||
|
- Judopass
|
||||||
|
- Judogi (d. h. Jacke, Hose und Gürtel)
|
||||||
|
- *Hallenschuhe* (Auch die Fans!)
|
||||||
|
- Essen/Trinken
|
||||||
|
- Warme Socken und Pullover
|
||||||
|
|
||||||
|
Das Betreten der Sportstätten in Straßenschuhen ist (auch den Fans)
|
||||||
|
nicht gestattet. Bitte Ersatzschuhe (Badelatschen/Hallenschuhe)
|
||||||
|
mitbringen. Sonst muss in Socken gegangen werden!
|
||||||
|
|
||||||
|
|
||||||
|
MsG marko
|
||||||
|
|
||||||
|
[0]: http://cwsvjudo.bplaced.net/downloads/Ausschreibungen/Ausschreibungen.2023/2023-10-21_HKR_Ausschreibung.pdf
|
||||||
|
[1]: https://osm.org/go/0JdSSbdXV
|
||||||
|
[2]: https://osm.org/go/0MIYgsQn7
|
||||||
|
[wk197]: http://cwsvjudo.bplaced.net/participo/events#197
|
||||||
|
|
||||||
48
infoZettelOrg/wkZettel/2023-10-28-rammenau.md
Normal file
48
infoZettelOrg/wkZettel/2023-10-28-rammenau.md
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
---
|
||||||
|
title: 22. Internationales Rammenauer Pokalturnier
|
||||||
|
---
|
||||||
|
|
||||||
|
# [22. Internationales Rammenauer Pokalturnier][wk200]
|
||||||
|
|
||||||
|
Bitte gebt mir über den Wettkampfplaner Bescheid, wer mitkommen kann und wer nicht! Einmal [hier klicken][wk200] und "Teilnahme" oder "keine Teilnahme" auswählen.
|
||||||
|
|
||||||
|
Bitte verlässliche Meldung, da ich das Startgeld im Vorfeld mit der Meldung überweisen muss. Es wäre ärgerlich, wenn ich jemanden umsonst melde.
|
||||||
|
|
||||||
|
Auch wäre es gut für mich, zu wissen, wer selber fährt, wer noch Platz im Auto hat oder wer selber eine Mitfahrgelegenheit benötigt.
|
||||||
|
|
||||||
|
|
||||||
|
## Wettkampfdaten
|
||||||
|
|
||||||
|
- Altersklassen: U13
|
||||||
|
- Datum: [28.10.2023][wk200]
|
||||||
|
- Ort: [Sport- und Freizeitzentrum Demitz-Thumitz, Kiefernbuschweg 4, 01877 Demitz-Thumitz][1]
|
||||||
|
- Wiegen: 10:00--10:30 Uhr
|
||||||
|
- [offizielle Ausschreibung (nur zur Info)][0]
|
||||||
|
|
||||||
|
|
||||||
|
## Treffpunkt
|
||||||
|
|
||||||
|
- Ort: [Dojo Str. Usti nad Labem 42][2]
|
||||||
|
- Abfahrt: 8:00 Uhr
|
||||||
|
|
||||||
|
|
||||||
|
## Nicht vergessen
|
||||||
|
|
||||||
|
- Judopass
|
||||||
|
- Judogi (d. h. Jacke, Hose und Gürtel)
|
||||||
|
- *Hallenschuhe* (Auch die Fans!)
|
||||||
|
- Essen/Trinken
|
||||||
|
- Warme Socken und Pullover
|
||||||
|
|
||||||
|
Das Betreten der Sportstätten in Straßenschuhen ist (auch den Fans)
|
||||||
|
nicht gestattet. Bitte Ersatzschuhe (Badelatschen/Hallenschuhe)
|
||||||
|
mitbringen. Sonst muss in Socken gegangen werden!
|
||||||
|
|
||||||
|
|
||||||
|
MsG marko
|
||||||
|
|
||||||
|
[0]: http://cwsvjudo.bplaced.net/downloads/Ausschreibungen/Ausschreibungen.2023/2023_Ausschreibung_Pokal.pdf
|
||||||
|
[1]: https://osm.org/go/0MJoS4--
|
||||||
|
[2]: https://osm.org/go/0MIYgsQn7
|
||||||
|
[wk200]: http://cwsvjudo.bplaced.net/participo/events#200
|
||||||
|
|
||||||
35
infoZettelOrg/wkZettel/2023-11-07-OGL+RKP.md
Normal file
35
infoZettelOrg/wkZettel/2023-11-07-OGL+RKP.md
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
---
|
||||||
|
title: OGL + RKP
|
||||||
|
---
|
||||||
|
|
||||||
|
*Bitte Rückmeldung im Wettkampfplaner bis 10.11.2023*
|
||||||
|
|
||||||
|
# The Little-Otto-Goshi-Liga 2023-4
|
||||||
|
|
||||||
|
[OGL 2023-4 im Wettkampfplaner][wk186]
|
||||||
|
|
||||||
|
## Wettkampfdaten
|
||||||
|
|
||||||
|
- Altersklassen: U9 (2015 und jünger), U11 (2014 und 2013)
|
||||||
|
- Datum: 18.11.2023
|
||||||
|
- Ort: Sporthalle (hintere) BBS III, 06120 Halle, Grasnelkenweg 16
|
||||||
|
- Wiegen: 09:30--10:15
|
||||||
|
- Wettkampfbeginn: 10:30 Uhr (bzw. nach Erstellung der Listen)
|
||||||
|
|
||||||
|
# 24. Räucherkerzenpokal
|
||||||
|
|
||||||
|
[24. Räucherkerzenpokal im Wettkampfplaner][wk198]
|
||||||
|
|
||||||
|
## Wettkampfdaten
|
||||||
|
|
||||||
|
- Altersklassen: U7 (2017 und jünger), U9 (2015 und 2016), U11 (2014 und 2013)
|
||||||
|
- Datum: 25.11.2023
|
||||||
|
- Ort: Lindenhofturnhalle, Schützenhausstraße, 09487 Schlettau
|
||||||
|
- Wiegen: 08:30--9:30
|
||||||
|
- Wettkampfbeginn: 9:45 Uhr (bzw. nach Erstellung der Listen)
|
||||||
|
|
||||||
|
|
||||||
|
MsG marko
|
||||||
|
|
||||||
|
[wk186]: http://cwsvjudo.bplaced.net/participo/events#186
|
||||||
|
[wk198]: http://cwsvjudo.bplaced.net/participo/events#198
|
||||||
BIN
org/spv326_sport-schadenmeldung_unfall_sachsen.pdf
Normal file
BIN
org/spv326_sport-schadenmeldung_unfall_sachsen.pdf
Normal file
Binary file not shown.
BIN
org/unfallmeldung-2023-11-17-LeonieOrtmans.pdf
Normal file
BIN
org/unfallmeldung-2023-11-17-LeonieOrtmans.pdf
Normal file
Binary file not shown.
BIN
sportabzeichen/dsa.2023/pruefung/CWSV-Gruppenpruefkarte.pdf
Normal file
BIN
sportabzeichen/dsa.2023/pruefung/CWSV-Gruppenpruefkarte.pdf
Normal file
Binary file not shown.
BIN
sportabzeichen/dsa.2023/schwimmnachweis/julian.pdf
Normal file
BIN
sportabzeichen/dsa.2023/schwimmnachweis/julian.pdf
Normal file
Binary file not shown.
BIN
sportabzeichen/dsa.2023/schwimmnachweis/leonie.pdf
Normal file
BIN
sportabzeichen/dsa.2023/schwimmnachweis/leonie.pdf
Normal file
Binary file not shown.
BIN
sportabzeichen/dsa.2023/schwimmnachweis/marko.pdf
Normal file
BIN
sportabzeichen/dsa.2023/schwimmnachweis/marko.pdf
Normal file
Binary file not shown.
BIN
sportabzeichen/dsa.2023/schwimmnachweis/romy.pdf
Normal file
BIN
sportabzeichen/dsa.2023/schwimmnachweis/romy.pdf
Normal file
Binary file not shown.
Reference in New Issue
Block a user