From 7486a9e886ad08b73c3f5462c14427e92d1c35c5 Mon Sep 17 00:00:00 2001
From: marko
Date: Sun, 11 Oct 2020 09:40:27 +0200
Subject: [PATCH 01/17] =?UTF-8?q?=20Zum=20Commit=20vorgemerkte=20=C3=84nde?=
=?UTF-8?q?rungen:=20=09neue=20Datei:=20=20=20=20=20src/wkScraper/jvsCal.p?=
=?UTF-8?q?y=20=09neue=20Datei:=20=20=20=20=20src/wkScraper/wkScraper-JvsC?=
=?UTF-8?q?al.py?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
wkOrg/src/wkScraper/jvsCal.py | 165 ++++++++++++++++++++
wkOrg/src/wkScraper/wkScraper-JvsCal.py | 197 ++++++++++++++++++++++++
2 files changed, 362 insertions(+)
create mode 100644 wkOrg/src/wkScraper/jvsCal.py
create mode 100755 wkOrg/src/wkScraper/wkScraper-JvsCal.py
diff --git a/wkOrg/src/wkScraper/jvsCal.py b/wkOrg/src/wkScraper/jvsCal.py
new file mode 100644
index 0000000..1728116
--- /dev/null
+++ b/wkOrg/src/wkScraper/jvsCal.py
@@ -0,0 +1,165 @@
+#! /usr/bin/env python3
+# -*- coding: UTF-8 -*-
+
+from bs4 import BeautifulSoup
+import datetime
+import json
+import re
+import requests
+
+jvsCalUrl = "https://judoverbandsachsen.de/kalender/?show=all"
+
+def parseJvsCal(url=jvsCalUrl, minYear = 0, minMonth = 0, onlyWithAks=False):
+ '''
+ Parse the calender page of the jvs
+
+ returns dictionary of dictionaries of list cal[year][month] = listOfUrls
+ '''
+ jvsCalPage = requests.get(url)
+ jvsCalSoup = BeautifulSoup(jvsCalPage.content, "html.parser")
+ jvsCalEventListItems = jvsCalSoup.find(id="eventListItems")
+ jvsCalEventMonts = jvsCalEventListItems.find_all("div", class_="month")
+
+ jvsWkList = {}
+
+ for m in jvsCalEventMonts:
+ if m.has_attr("data-month"):
+ yearMonth = m.get("data-month")
+ year = int(yearMonth[0:4])
+ if year < minYear:
+ continue
+ if not year in jvsWkList:
+ jvsWkList[year] = {}
+ month = int(yearMonth[4:6])
+ if year==minYear and month= 2:
+ self.endDate = datetime.date.fromisoformat( timespan[1] )
+ self.title = title
+ self.place = place
+ self.url = url
+ return
+ def toDict(self):
+ wkDict = {}
+ wkDict["date"] = str(self.date)
+ if self.endDate is not None:
+ wkDict["endDate"] = str(self.endDate)
+ wkDict["title"] = self.title
+ if self.place is not None:
+ wkDict["place"] = self.place
+ if self.url is not None:
+ wkDict["url"] = self.url
+ return wkDict
+ def toJson(self):
+ return json.dumps(self.toDict())
+
+class wk(event):
+ def __init__(self, timespan, title, akList, place=None, url=None):
+ super().__init__(timespan, title, place, url)
+ self.akList = akList
+ def toDict(self):
+ wkDict = super().toDict()
+ wkDict["akList"] = self.akList
+ return wkDict
+
+def parseJvsEvent(jvsEvent, onlyIfWithAk=False):
+ try:
+ aks = None
+ for e in jvsEvent.find_all(class_="col-2"):
+ if e.find("time"):
+ time = [ t.strip() for t in re.sub( "\s+", " ", e.find("time").text.strip() ).split("-")]
+ time = [ t.split(".") for t in time ]
+ time = [ "-".join( [year, t[1], t[0]] ) for t in time ]
+ if e.find("span"):
+ aks = [ ak.text.strip() for ak in e.find_all("span") ]
+ aks = [ ak for ak in aks if ak != "" ]
+ if len(aks) == 0:
+ aks=None
+ place = event.find(class_="col-3").text.strip()
+ if place == "":
+ place = None
+ title = event.find(class_="col-4").find("a").text.strip()
+ url = event.find(class_="col-4").find("a")['href']
+ titleFull = event.find(class_="col-4").text.strip()
+ assert(title==titleFull)
+ except:
+ print("Error parsing:")
+ print(event.prettify())
+
+ if aks is not None:
+ return wk(time, title, aks, place, url)
+ else:
+ if onlyIfWithAk:
+ return None
+ else:
+ return event(time, title, place, url)
+
+
+events = jvsCal.parseJvsCal(minYear=datetime.date.today().year, minMonth=datetime.date.today().month, onlyWithAks=True)
+#events = jvsCal.parseJvsCal()
+
+#print( jvsCal.parseJvsCal(minYear=datetime.date.today().year, minMonth=datetime.date.today().month, onlyWithAks=True) )
+
+print( [ e['url'] for y in events for m in events[y] for e in events[y][m]] )
+
+print( jvsCal.getWk([ e['url'] for y in events for m in events[y] for e in events[y][m]]) )
+
+exit()
+
+jvsCalShiaiUrl = "https://judoverbandsachsen.de/events/23-raeucherkerzenpokal/"
+
+testWk = jvsCal.wettkampf.from_url( jvsCalShiaiUrl )
+print(testWk.to_json())
+exit()
+
+
+#with open("rkp.html", "w") as f:
+# f.write(BeautifulSoup(requests.get("https://judoverbandsachsen.de/events/23-raeucherkerzenpokal/").content, "html.parser").prettify())
+#exit()
+
+
+url = "https://judoverbandsachsen.de/kalender/?show=all"
+
+jvsCalShiaiUrl = "https://judoverbandsachsen.de/events/23-raeucherkerzenpokal/"
+#jvsCalShiaiUrl = "file://rkp.html"
+#jvsCalShiaiPage = requests.get(jvsCalShiaiUrl)
+#jvsCalShiaiSoup = BeautifulSoup(jvsCalShiaiPage.content, "html.parser")
+jvsCalShiaiSoup = BeautifulSoup(open("rkp.html"), "html.parser")
+
+year = "2020"
+for e in jvsCalShiaiSoup.find_all(class_="event-single"):
+ print(e.prettify())
+ title = e.find("header").text.strip()
+ articleTag= e.find("article")
+ date = [ t.strip() for t in re.sub( "\s+", " ", articleTag.find("time").text.strip() ).split("-")]
+ date = [ t.split(".") for t in date ]
+ date = [ "-".join( [year, t[1], t[0]] ) for t in date ]
+
+ [announcementDiv, placeDiv, ageGroupsDiv] = articleTag.find_all("div")
+
+ announcement = {}
+ place = {}
+ for dt, dd in zip(articleTag.find_all("dt"), articleTag.find_all("dd")):
+ if dt.text.strip() == "Ausschreibung:":
+ announcement['url'] = dd.find("a")['href']
+ if dt.text.strip() == "Veranstalter:":
+ announcement['organizer'] = dd.text.strip()
+ if dt.text.strip() == "Veranstaltungsort:":
+ place['name'] = dd.text.strip()
+ if dt.text.strip() == "Veranstaltungsadresse:":
+ place['address'] = re.sub("\s+", " ", dd.text.strip())
+# print(dt.text, dd.text)
+
+ ageGroups = [ ak.text.strip() for ak in ageGroupsDiv.find_all("span") ]
+
+print(f"title: {title})")
+print(f"date: {date})")
+print(f"announcement: {announcement}")
+print(f"place: {place}")
+print(f"ageGroups: {ageGroups}")
+exit()
+
+
+jvsCalPage = requests.get(url)
+
+jvsCalSoup = BeautifulSoup(jvsCalPage.content, "html.parser")
+
+#jvsCalEventList = jvsCalSoup.find(id="eventList")
+#print(jvsCalEventList.prettify())
+
+jvsCalEventListItems = jvsCalSoup.find(id="eventListItems")
+#print(jvsCalEventListItems.prettify())
+
+jvsCalEventMonts = jvsCalEventListItems.find_all("div", class_="month")
+
+jvsWkList = []
+
+for m in jvsCalEventMonts:
+ if m.has_attr("data-month"):
+ yearMonth = m.get("data-month")
+ year = (yearMonth[0:4])
+ month = yearMonth[4:6]
+ print(f"Jahr: {year}, Monat: {month}")
+ events = m.find_all(class_="posts")
+ for event in events:
+ parsedEvent = parseJvsEvent(event, onlyIfWithAk=True)
+ if parsedEvent is not None:
+ jvsWkList.append(parsedEvent)
+ else:
+ print("no data-month")
+
+for w in jvsWkList:
+ print(w.toJson())
From 239ae8b68a29979d9cf9b50fe32b06817a345749 Mon Sep 17 00:00:00 2001
From: marko
Date: Tue, 8 Jun 2021 20:13:50 +0200
Subject: [PATCH 02/17] =?UTF-8?q?=20Zum=20Commit=20vorgemerkte=20=C3=84nde?=
=?UTF-8?q?rungen:=20=09ge=C3=A4ndert:=20=20=20=20=20=20=20index.php?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../phpLib/cwsvJudo/miscAssis.php | 28 +++++++++----------
homepage/wkParticipo/index.php | 5 ++++
2 files changed, 19 insertions(+), 14 deletions(-)
diff --git a/homepage/redesign2018/markdownExperiment/phpLib/cwsvJudo/miscAssis.php b/homepage/redesign2018/markdownExperiment/phpLib/cwsvJudo/miscAssis.php
index e89e127..c902b11 100644
--- a/homepage/redesign2018/markdownExperiment/phpLib/cwsvJudo/miscAssis.php
+++ b/homepage/redesign2018/markdownExperiment/phpLib/cwsvJudo/miscAssis.php
@@ -7,8 +7,8 @@ return (is_numeric($str) && $str > 0 && $str == round($str));
function getPdoDbConnection($hostname, $dbName, $user, $password){
try{
$dbConnection = new PDO(
- 'mysql:host='.$hostname.';dbname='.$dbName,
- $user,
+ 'mysql:host='.$hostname.';dbname='.$dbName,
+ $user,
$password
);
}
@@ -23,8 +23,8 @@ global $cwsvJudoConfig;
// Datenbankverbindung bereit stellen
try{
$db_connection = new PDO(
- 'mysql:host='.$cwsvJudoConfig["db"]["host"].';dbname='.$cwsvJudoConfig["db"]["name"],//.';charset=utf8',
- $cwsvJudoConfig["db"]["user"],
+ 'mysql:host='.$cwsvJudoConfig["db"]["host"].';dbname='.$cwsvJudoConfig["db"]["name"],//.';charset=utf8',
+ $cwsvJudoConfig["db"]["user"],
$cwsvJudoConfig["db"]["password"]
);
}
@@ -47,7 +47,7 @@ if (is_array($somePossibleEmptyStuff) || $somePossibleEmptyStuff instanceof Trav
return null;
}
-/// Eine als String gegebene Liste kommagetrennter key=value Paare in
+/// Eine als String gegebene Liste kommagetrennter key=value Paare in
/// ein assoziatives Array überführen
function getKeyValueArray($aKeyValueStringList){
$retKeyValueArray = array();
@@ -87,7 +87,7 @@ if( empty($optionsArray['outCharset']) ) $optionsArray['outCharset'] = "UTF-8";
);
$pdoStatementForQuerryingZitat->execute();
$retZitat = $pdoStatementForQuerryingZitat->fetchAll(PDO::FETCH_ASSOC);
-
+
// Zeichensatzkonvertierung
foreach($retZitat as &$entry){
array_walk(
@@ -127,8 +127,8 @@ if( !file_exists($aJsonFileName) ) return null;
if( !(is_array( $someLinkNames ) || is_object( $someLinkNames )) ) return null;
return arrayKeyFilter(
- json_decode(
- file_get_contents($aJsonFileName),
+ json_decode(
+ file_get_contents($aJsonFileName),
true
),
$someLinkNames
@@ -162,14 +162,14 @@ function toAscii($str, $replace=array(), $delimiter='-') {
return $clean;
}
+/// Wrapper function for a query to the
+/// $aDbConnection connection to a db
function dbQuery($aDbConnection, $aQueryString, $aBindArray = array(), $someOptions = array( "dbCharset" => "ISO-8859-1", "outCharset" => "UTF-8" ) ){
-//echo("Doing ".$aQueryString);
-var_dump($aBindArray);
if( empty($someOptions['dbCharset']) ) $someOptions['dbCharset'] = "ISO-8859-1";
if( empty($someOptions['outCharset']) ) $someOptions['outCharset'] = "UTF-8";
-/// @toDo: Bisher wird nur die Rückgabe konvertiert. Eigentlich muss
-/// doch auch die Eingabe konvertiert werden. Aber das jetzt
-/// umzustellen wird schwer! Die User m Wettkampfplaner sind ja z.B.
+/// @toDo: Bisher wird nur die Rückgabe konvertiert. Eigentlich muss
+/// doch auch die Eingabe konvertiert werden. Aber das jetzt
+/// umzustellen wird schwer! Die User m Wettkampfplaner sind ja z.B.
/// als UTF8 in latin1(?) gespeichert.
try{
$pdoStatement = $aDbConnection->prepare( $aQueryString );
@@ -187,7 +187,7 @@ if( empty($someOptions['outCharset']) ) $someOptions['outCharset'] = "UTF-8";
print "Error!: " . $db_error->getMessage() . "
";
return null;
}
- //var_dump($ret);
+
// Zeichensatzkonvertierung
if( is_array($ret) ){
foreach($ret as &$entry){
diff --git a/homepage/wkParticipo/index.php b/homepage/wkParticipo/index.php
index aad2387..44358a7 100644
--- a/homepage/wkParticipo/index.php
+++ b/homepage/wkParticipo/index.php
@@ -72,6 +72,11 @@ return $ret;
Achtung: Bindend ist immer die Altersklasse auf der Ausschreibung. Ich kann mich beim Abschreiben ja auch mal vertan haben.
diff --git a/homepage/wkParticipo/login.php b/homepage/wkParticipo/login.php
index ce5baaf..7aa2a51 100644
--- a/homepage/wkParticipo/login.php
+++ b/homepage/wkParticipo/login.php
@@ -1,8 +1,12 @@
weiter zum Inhalt.';
-// PHPCount::AddHit("wkParticipo-Login ".$_POST['f']['username']);
+ PHPCount::AddHit("wkParticipo-Login ".$_POST['f']['username']);
header('Location: http://' . $_SERVER['HTTP_HOST'] . '/pages/desktop/wkParticipo/index.php?user=' . $_POST['f']['username']);
} else {
sleep(1);
From de4bd7824977345e5f95b265862fe2ed7dfbb6a3 Mon Sep 17 00:00:00 2001
From: marko
Date: Sun, 13 Jun 2021 07:49:21 +0200
Subject: [PATCH 04/17] Sync to the onlineversion
---
homepage/wkParticipo/achievements.php | 46 +++++++++++++++++++++++++++
1 file changed, 46 insertions(+)
create mode 100644 homepage/wkParticipo/achievements.php
diff --git a/homepage/wkParticipo/achievements.php b/homepage/wkParticipo/achievements.php
new file mode 100644
index 0000000..6cb9a87
--- /dev/null
+++ b/homepage/wkParticipo/achievements.php
@@ -0,0 +1,46 @@
+userAttributes` (userId, attributeId) VALUES (:userId, :attributeId);",
+ "SELECT * FROM cwsvjudo.achievements;"
+ //array(
+ // ':userId' => array('value'=>$anUserId, 'data_type'=>PDO::PARAM_INT),
+ // ':attributeId'=> array('value'=>$anAttributeId, 'data_type'=>PDO::PARAM_INT)
+ //)
+ );
+ }
+ catch(PDOException $db_error){
+ print "Error!: " . $db_error->getMessage() . "
queryString: ".$queryString."
"; var_dump($bindArray);
+ }
+
+
+// $query = "WITH SortedList (id, previousId, name, Level) AS ( SELECT Id, ParentId, SomeData, 0 as Level FROM cwsvjudo.achievements WHERE `id` IS 1 UNION ALL SELECT ll.id, ll.previousId, ll.name, Level+1 as Level FROM cwsvjudo.achievements ll INNER JOIN SortedList as s ON ll.previousId = s.Id ); SELECT id, previousId, name FROM SortedList ORDER BY Level ";
+// $query = "SELECT (id, name, rootId, level) FROM cwsvjudo.achievements WHERE `id` = 1 ORDER BY `level`;";
+// $query = "SELECT * FROM cwsvjudo.achievements;";
+// $results = $mysqlConn->query($query);
+
+// var_dump($results);
+?>
+
+
+
+
+
+
From 103954405c5e021722cf10f0a6f9dc832fa9a8de Mon Sep 17 00:00:00 2001
From: marko
Date: Sun, 26 Sep 2021 18:33:33 +0200
Subject: [PATCH 05/17] Newsletter KW38
---
coronaZeit/mdNewsletter.d/2021-09-26.md | 27 +++++++++++++++++++++++++
1 file changed, 27 insertions(+)
create mode 100644 coronaZeit/mdNewsletter.d/2021-09-26.md
diff --git a/coronaZeit/mdNewsletter.d/2021-09-26.md b/coronaZeit/mdNewsletter.d/2021-09-26.md
new file mode 100644
index 0000000..476539f
--- /dev/null
+++ b/coronaZeit/mdNewsletter.d/2021-09-26.md
@@ -0,0 +1,27 @@
+---
+title: Newsletter 2021-09-26
+---
+
+# Neue Trainingszeiten und Herbstkrümelrandori
+
+Hallo liebe Eltern,
+hallo liebe Judoka!
+
+## Neue Trainingszeiten
+
+Da in letzter Zeit erfreulich viele Anfänger zu uns gestoßen sind, können wir unsere Traningszeiten am Freitag wieder auftrennen:
+
+- Freitag (Kinder/Anfänger)
+ - 16:00–17:45 Uhr
+ - Zielgruppe: Anfänger und Kinder unter 9 Jahren
+- Freitag (Jugend/Fortgeschrittene)
+ - 17:30–19:00 Uhr
+ - Zielgruppe: Wer die Grundlagen des Judo beherrscht
+
+## Herbstkrümelrandori
+
+Noch nicht offiziell angekündigt, aber nach Interese gefragt wurde für das Herbstkrümelrandori. Stattfinden soll es am Buß- und Bettag, dem 17. November für die Jahrgänge 2006-2010.
+
+## Wettkampfplaner
+
+Derzeit gibt es im Wettkampflaner offenbar Probleme beim Zustellen der Einschreibungs-Email. In mehreren Fällen habe ich trotz erfolgter Einschreibung keine Bestätigungsmail erhalten. Dadurch war ich teilweise nicht auf dem atuellen Stand der eingeschriebenen Starter. Sorry dafür.
\ No newline at end of file
From b53cc17fc02d9b4f653ec2208da339565be21419 Mon Sep 17 00:00:00 2001
From: marko
Date: Tue, 28 Sep 2021 19:52:27 +0200
Subject: [PATCH 06/17] InfoZettel LemU15/U13 2021
---
infoZettelOrg/2021-09-29-LemU13U15.md | 32 +++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
create mode 100644 infoZettelOrg/2021-09-29-LemU13U15.md
diff --git a/infoZettelOrg/2021-09-29-LemU13U15.md b/infoZettelOrg/2021-09-29-LemU13U15.md
new file mode 100644
index 0000000..a0db483
--- /dev/null
+++ b/infoZettelOrg/2021-09-29-LemU13U15.md
@@ -0,0 +1,32 @@
+# Offene Landeseinzelmeisterschaften U13/U15 2021
+
+## Wettkampfdaten
+
+- Altersklassen: U13, U15
+- Datum:
+ - U13: 02.10.2021
+ - U15: 03.10.2021
+- Ort: Sport- und Freizeitzentrum Demitz-Thumitz, Kiefernbuschweg 4, 01877 Demitz-Thumitz
+- Erwärmung möglich ab: 9:00 Uhr
+- Wettkampferöffnung: ca. 9:30 Uhr
+
+
+## Treffpunkt
+
+- Ort: P+R Parkplatz Südring/Stollberger Straße
+- Abfahrt: 7:15 Nach Vereinbarung!Uhr
+- Kindersitz (falls nötig) 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
From 40f758e00456c423f551d45b15293c03c35754de Mon Sep 17 00:00:00 2001
From: marko
Date: Sun, 10 Oct 2021 07:37:16 +0200
Subject: [PATCH 07/17] =?UTF-8?q?Programm=20Vorf=C3=BChrung=202021-09-17?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../kyuZettel/vorfuehrung-2021-09-17.md | 23 +++++++++++++++++++
1 file changed, 23 insertions(+)
create mode 100644 infoZettelOrg/kyuZettel/vorfuehrung-2021-09-17.md
diff --git a/infoZettelOrg/kyuZettel/vorfuehrung-2021-09-17.md b/infoZettelOrg/kyuZettel/vorfuehrung-2021-09-17.md
new file mode 100644
index 0000000..599022a
--- /dev/null
+++ b/infoZettelOrg/kyuZettel/vorfuehrung-2021-09-17.md
@@ -0,0 +1,23 @@
+# Vorführungsprogramm 2021-09-17
+
+## Fallschule
+
+### diagonal
+
+- vorwärts
+- rückwärts
+- seitwärts
+
+### parallel
+
+- vorwärts über/auf den Partner
+- rückwärts über den Partner (klein über groß)
+- vorwärts über mehrerere
+
+## Würfe
+
+- erst klein, dann groß
+- im Dreieck:
+ 1. Eindrehtechnik
+ 2. Eindrehtechnik mit Hüfte vorschieben kontern (Tsuri goshi)
+ 3. Eindrehtechnik ansetzen, mit Tsuri-goshi gekontert werden, Konter-Konter nach hinten (Ko-soto-maki-komi)
From 9ce46eb253b808d87e5e9b7b370634a92fe14710 Mon Sep 17 00:00:00 2001
From: marko
Date: Sun, 17 Oct 2021 12:17:54 +0200
Subject: [PATCH 08/17] cleaned output jvsCal scraper
---
wkOrg/src/wkScraper/jvsCal.py | 6 ++---
wkOrg/src/wkScraper/wkScraper-JvsCal.py | 35 +++++++++++++++----------
2 files changed, 24 insertions(+), 17 deletions(-)
diff --git a/wkOrg/src/wkScraper/jvsCal.py b/wkOrg/src/wkScraper/jvsCal.py
index 1728116..b6ed790 100644
--- a/wkOrg/src/wkScraper/jvsCal.py
+++ b/wkOrg/src/wkScraper/jvsCal.py
@@ -1,11 +1,11 @@
#! /usr/bin/env python3
# -*- coding: UTF-8 -*-
+import requests
from bs4 import BeautifulSoup
import datetime
import json
import re
-import requests
jvsCalUrl = "https://judoverbandsachsen.de/kalender/?show=all"
@@ -118,8 +118,8 @@ class wettkampf:
'address': self.address,
'ageGroups': self.ageGroups
}
- def to_json(self):
- return json.dumps(self.to_dict())
+ def to_json(self, indent=2):
+ return json.dumps(self.to_dict(), indent=indent)
@staticmethod
def from_htmlString(wkString, year=None):
'''
diff --git a/wkOrg/src/wkScraper/wkScraper-JvsCal.py b/wkOrg/src/wkScraper/wkScraper-JvsCal.py
index f8b531d..76bfe5f 100755
--- a/wkOrg/src/wkScraper/wkScraper-JvsCal.py
+++ b/wkOrg/src/wkScraper/wkScraper-JvsCal.py
@@ -100,27 +100,34 @@ def parseJvsEvent(jvsEvent, onlyIfWithAk=False):
return event(time, title, place, url)
-events = jvsCal.parseJvsCal(minYear=datetime.date.today().year, minMonth=datetime.date.today().month, onlyWithAks=True)
-#events = jvsCal.parseJvsCal()
+if __name__=="__main__":
+ events = jvsCal.parseJvsCal(minYear=datetime.date.today().year, minMonth=datetime.date.today().month, onlyWithAks=True)
+ # print(f"{json.dumps(events, indent=2)}")
+
+ for year in events:
+ for month in events[year]:
+ for event in events[year][month]:
+ print(f"{event}")
+ wk = jvsCal.wettkampf.from_url( event['url'] )
+ print(f"{wk.to_json()}")
+ exit(-1)
-#print( jvsCal.parseJvsCal(minYear=datetime.date.today().year, minMonth=datetime.date.today().month, onlyWithAks=True) )
+ print( [ e['url'] for y in events for m in events[y] for e in events[y][m]] )
-print( [ e['url'] for y in events for m in events[y] for e in events[y][m]] )
+ print( jvsCal.getWk([ e['url'] for y in events for m in events[y] for e in events[y][m]]) )
-print( jvsCal.getWk([ e['url'] for y in events for m in events[y] for e in events[y][m]]) )
+ exit()
-exit()
+ jvsCalShiaiUrl = "https://judoverbandsachsen.de/events/23-raeucherkerzenpokal/"
-jvsCalShiaiUrl = "https://judoverbandsachsen.de/events/23-raeucherkerzenpokal/"
-
-testWk = jvsCal.wettkampf.from_url( jvsCalShiaiUrl )
-print(testWk.to_json())
-exit()
+ testWk = jvsCal.wettkampf.from_url( jvsCalShiaiUrl )
+ print(testWk.to_json())
+ exit()
-#with open("rkp.html", "w") as f:
-# f.write(BeautifulSoup(requests.get("https://judoverbandsachsen.de/events/23-raeucherkerzenpokal/").content, "html.parser").prettify())
-#exit()
+ #with open("rkp.html", "w") as f:
+ # f.write(BeautifulSoup(requests.get("https://judoverbandsachsen.de/events/23-raeucherkerzenpokal/").content, "html.parser").prettify())
+ #exit()
url = "https://judoverbandsachsen.de/kalender/?show=all"
From 372d0ed5f0fb9548cc69b65e5e6344bf43644fb3 Mon Sep 17 00:00:00 2001
From: marko
Date: Tue, 19 Oct 2021 11:19:33 +0200
Subject: [PATCH 09/17] updated from materialize to materializecss 1.1.0,
since materialize isn't maintained any more
---
.gitmodules | 3 +++
homepage/mams/index.php | 8 ++++----
homepage/mams/lib/db.php | 7 ++-----
homepage/materialize | 1 +
4 files changed, 10 insertions(+), 9 deletions(-)
create mode 100644 .gitmodules
create mode 160000 homepage/materialize
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..e9670e4
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "homepage/materialize"]
+ path = homepage/materialize
+ url = https://github.com/materializecss/materialize.git
diff --git a/homepage/mams/index.php b/homepage/mams/index.php
index b6c87d1..938b2ac 100644
--- a/homepage/mams/index.php
+++ b/homepage/mams/index.php
@@ -23,17 +23,17 @@ foreach($lastAttendances as $a){
array_push( $lastAttendancesAssocArray[ $a['date'] ], $a );
}
-$dateLastWendsday = new DateTime("last wednesday");
-$dateLastFriday = new DateTime("last friday");
+$dateLastWendsday = new DateTime("wednesday this week");
+$dateLastFriday = new DateTime("friday this week");
$lastTrainingDay = max($dateLastWendsday, $dateLastFriday);
?>
-
+
-
+
+
+
+
+
+ Corona-Anwesenheitsliste der Judoka des Chemnitzer WSV
- Corona-Anwesenheitsliste der Judoka des Chemnitzer WSV
- Anwesenheiten hinzufügen
+
+ ☰ mams
+
+ Anwesenheiten hinzufügen
+
- Anwesenheiten
+
+ Corona-Trainee hinzufügen
+ Added user.");
+ }else{
+ echo("ERROR
");
+ }
+ }
+ ?>
+
+
+ Anwesenheiten
Sende Anwesenheitsliste an eMail
diff --git a/homepage/mams/lib/api.php b/homepage/mams/lib/api.php
index 3b54862..04910fa 100644
--- a/homepage/mams/lib/api.php
+++ b/homepage/mams/lib/api.php
@@ -9,14 +9,27 @@ function processPostData($db, $post, $redirectLocation = "."){
updateCoronaData($db, $post['userId'], $post['columnName'], $post['columnValue']);
}
if($post['action'] == "addCoronaUser"){
- addCoronaUser(
- $db,
- $post['name'],
- $post['vorname'],
- $post['corona_PLZ'],
- $post['corona_telephon'],
- $post['corona_eMail']
- );
+ if(
+ isValid($post['corona_PLZ'], "plz")
+ // && isValid($post['name'], "name")
+ // && isValid($post['vorname'], "name")
+ // && isValid($post['corona_telephon'], "phonenumber")
+ // && isValid($post['corona_eMail'], "email")
+ ){
+ addCoronaUser(
+ $db,
+ $post['name'],
+ $post['vorname'],
+ $post['corona_PLZ'],
+ $post['corona_telephon'],
+ $post['corona_eMail']
+ );
+ $redirectLocation .= "?addCoronaUserSuccess=true";
+ }
+ else{
+ $redirectLocation .= "?addCoronaUserSuccess=false";
+ }
+ $redirectLocation .= "#addCoronaUser";
}
if($post['action'] == "sendAttandeesPerEmail"){
sendEmail(
@@ -78,4 +91,38 @@ function attendancesAssocArray2mdList($attendancesAssocArray, $date=null){
}
return $ret;
}
+
+/// Validaing a phone number
+/// true if it validates, false if not
+function validate_phone_number($phone)
+{
+ // Allow +, - and . in phone number
+ $filtered_phone_number = filter_var($phone, FILTER_SANITIZE_NUMBER_INT);
+ // Remove "-" from number
+ $phone_to_check = str_replace("-", "", $filtered_phone_number);
+ // Check the lenght of number
+ // This can be customized if you want phone number from a specific country
+ if (strlen($phone_to_check) < 10 || strlen($phone_to_check) > 14) {
+ return false;
+ } else {
+ return true;
+ }
+}
+
+/// validate different types of input
+function isValid($toValidate, $type){
+ // for now we disable the name validation: what do i know how people can be called!
+ // $regexName="/^[A-Z][a-zA-Z]*$/";
+ $regexPlz ="/^[0-9]{5}$/";
+ if($type == "plz" )
+ return preg_match($regexPlz, $toValidate) > 0;
+ if($type == "name")
+ return preg_match($regexName, $toValidate) > 0;
+ if($type == "phonenumber" )
+ return validate_phone_number($toValidate);
+ if($type == "email")
+ return filter_var($toValidate, FILTER_VALIDATE_EMAIL);
+
+ return false;
+}
?>
From bc24589dd09a1fc2f4a26b1694d8dec4786cae83 Mon Sep 17 00:00:00 2001
From: marko
Date: Wed, 20 Oct 2021 10:24:08 +0200
Subject: [PATCH 11/17] Error checking addCoronaUser, some modularization
---
homepage/mams/index.php | 96 ++++++++--------------
homepage/mams/lib/api.php | 52 +++++++++---
homepage/mams/lib/mams/materializeInit.php | 11 +++
homepage/mams/lib/mams/sidenav.php | 6 ++
4 files changed, 91 insertions(+), 74 deletions(-)
create mode 100644 homepage/mams/lib/mams/materializeInit.php
create mode 100644 homepage/mams/lib/mams/sidenav.php
diff --git a/homepage/mams/index.php b/homepage/mams/index.php
index bc45acd..63bfa03 100644
--- a/homepage/mams/index.php
+++ b/homepage/mams/index.php
@@ -1,74 +1,48 @@
-
-
-
-
-
-
-
-
-
-
-
- Corona-Anwesenheitsliste der Judoka des Chemnitzer WSV
-
-
-
- ☰ mams
+
+
+
+
+
+
+
+
+ Corona-Anwesenheitsliste der Judoka des Chemnitzer WSV
+
+
+
+
Anwesenheiten hinzufügen
diff --git a/homepage/mams/lib/api.php b/homepage/mams/lib/api.php
index 04910fa..6cd3bdf 100644
--- a/homepage/mams/lib/api.php
+++ b/homepage/mams/lib/api.php
@@ -10,12 +10,16 @@ function processPostData($db, $post, $redirectLocation = "."){
}
if($post['action'] == "addCoronaUser"){
if(
- isValid($post['corona_PLZ'], "plz")
+ array_keys_exist(
+ $post,
+ ['name', 'vorname', 'corona_PLZ', 'corona_telephon', 'corona_eMail']
+ )
+ && isValid($post['corona_PLZ'], "plz")
+ && isValid($post['corona_telephon'], "phonenumber")
+ && isValid($post['corona_eMail'], "email")
// && isValid($post['name'], "name")
// && isValid($post['vorname'], "name")
- // && isValid($post['corona_telephon'], "phonenumber")
- // && isValid($post['corona_eMail'], "email")
- ){
+ ){
addCoronaUser(
$db,
$post['name'],
@@ -114,15 +118,37 @@ function isValid($toValidate, $type){
// for now we disable the name validation: what do i know how people can be called!
// $regexName="/^[A-Z][a-zA-Z]*$/";
$regexPlz ="/^[0-9]{5}$/";
- if($type == "plz" )
- return preg_match($regexPlz, $toValidate) > 0;
- if($type == "name")
- return preg_match($regexName, $toValidate) > 0;
- if($type == "phonenumber" )
- return validate_phone_number($toValidate);
- if($type == "email")
- return filter_var($toValidate, FILTER_VALIDATE_EMAIL);
-
+ switch( $type ){
+ case "plz":
+ return preg_match($regexPlz, $toValidate) > 0;
+ case "phonenumber":
+ return validate_phone_number($toValidate);
+ case "email":
+ return filter_var($toValidate, FILTER_VALIDATE_EMAIL);
+ default:
+ return false;
+ }
return false;
}
+
+//! Checks if multiple keys exist in an array
+//!
+//! @param array $array array to check for key
+//! @param array|string $keys keys to check for
+//!
+//! @return bool true, if *all* keys are set in the array
+function array_keys_exist( array $array, $keys ) {
+ if ( ! is_array( $keys ) ) {
+ $keys = func_get_args();
+ array_shift( $keys );
+ }
+ $count = 0;
+ foreach ( $keys as $key ) {
+ if ( isset( $array[$key] ) || array_key_exists( $key, $array ) ) {
+ $count++;
+ }
+ }
+
+ return count( $keys ) === $count;
+}
?>
diff --git a/homepage/mams/lib/mams/materializeInit.php b/homepage/mams/lib/mams/materializeInit.php
new file mode 100644
index 0000000..62f5524
--- /dev/null
+++ b/homepage/mams/lib/mams/materializeInit.php
@@ -0,0 +1,11 @@
+
diff --git a/homepage/mams/lib/mams/sidenav.php b/homepage/mams/lib/mams/sidenav.php
new file mode 100644
index 0000000..6ca1209
--- /dev/null
+++ b/homepage/mams/lib/mams/sidenav.php
@@ -0,0 +1,6 @@
+
+☰ mams
From bbef22e02d414bae1837e7910520760be15b2047 Mon Sep 17 00:00:00 2001
From: marko
Date: Wed, 20 Oct 2021 12:47:00 +0200
Subject: [PATCH 12/17] Kontaktverfolgungszettel
---
infoZettelOrg/coronaTrainee.md | 39 ++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
create mode 100644 infoZettelOrg/coronaTrainee.md
diff --git a/infoZettelOrg/coronaTrainee.md b/infoZettelOrg/coronaTrainee.md
new file mode 100644
index 0000000..5c94c60
--- /dev/null
+++ b/infoZettelOrg/coronaTrainee.md
@@ -0,0 +1,39 @@
+---
+header-includes:
+ - \usepackage{hyperref}
+ - \usepackage{datetime}
+ - \usepackage{xcolor}
+---
+# Kontakterfassung
+
+```{=latex}
+\begin{Form}
+```
+\newsavebox\TBox
+
+## Trainingstag
+
+\sbox\TBox{Datum: }\TextField[bordercolor=black,backgroundcolor=gray!30,borderwidth=0,width=\dimexpr1\linewidth-\wd\TBox]{Datum: }
+
+## Name, Vorname
+
+\sbox\TBox{Name: }\TextField[backgroundcolor=gray!30,borderwidth=0,width=\dimexpr1\linewidth-\wd\TBox]{Name: }
+
+\sbox\TBox{Vorname: }\TextField[backgroundcolor=gray!30,borderwidth=0,width=\dimexpr1\linewidth-\wd\TBox]{Vorname: }
+
+## Adresse
+
+\sbox\TBox{Straße Hnr.: }\TextField[backgroundcolor=gray!30,borderwidth=0,width=\dimexpr1\linewidth-\wd\TBox]{Straße Hnr.: }
+
+\sbox\TBox{PLZ Ort:}\TextField[backgroundcolor=gray!30,borderwidth=0,width=\dimexpr1\linewidth-\wd\TBox]{PLZ Ort:}
+
+## Kontakt
+
+\sbox\TBox{Tel.: }\TextField[backgroundcolor=gray!30,borderwidth=0,width=\dimexpr1\linewidth-\wd\TBox]{Tel.: }
+
+\sbox\TBox{Email: }\TextField[backgroundcolor=gray!30,borderwidth=0,width=\dimexpr1\linewidth-\wd\TBox]{Email: }
+
+
+```{=latex}
+\end{Form}
+```
\ No newline at end of file
From 76dbb806ffaa7db6f5a2af38ba7aaaaaa12a7c52 Mon Sep 17 00:00:00 2001
From: marko
Date: Thu, 21 Oct 2021 08:13:23 +0200
Subject: [PATCH 13/17] =?UTF-8?q?Alte=20Abrechnungsb=C3=B6gen=20u.=C3=A4.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
org/Aufnahmeantrag Rückseite.pdf | Bin 0 -> 71852 bytes
org/Aufnahmeantrag Vorderseite neu.pdf | Bin 0 -> 296555 bytes
org/CWSV-Aufnahmeantrag.pdf | Bin 0 -> 363254 bytes
...Stärkemeldung des DJB 2016_ausfüllbar.docx | Bin 0 -> 31578 bytes
org/jvs/Stärkemeldung2016.docx | Bin 0 -> 22976 bytes
.../KyuPrüfung2015-Prüfungsliste(alle).odt | Bin 0 -> 142294 bytes
.../KyuPrüfung2015-Prüfungsliste(knapp).odt | Bin 0 -> 141841 bytes
.../KyuPrüfung2015-Prüfungsliste(sicher).odt | Bin 0 -> 141418 bytes
org/kyu/Kyuprüfung2015-Planung.ods | Bin 0 -> 14364 bytes
...ÜL-Abrechnungsbogen-2015-2-MarkoBunzel.pdf | Bin 0 -> 22520 bytes
...ÜL-Abrechnungsbogen-2016-2-MarkoBunzel.pdf | Bin 0 -> 22537 bytes
...ÜL-Abrechnungsbogen-2018-1-MarkoBunzel.pdf | Bin 0 -> 15717 bytes
...ÜL-Abrechnungsbogen-2019-2-MarkoBunzel.pdf | Bin 0 -> 34212 bytes
org/ÜL-Abrechnungsbogen-2020-1.ods | Bin 0 -> 24192 bytes
org/ÜL-Abrechnungsbogen-2020-2.ods | Bin 0 -> 27172 bytes
org/ÜL-Abrechnungsbogen.ods | Bin 24038 -> 27483 bytes
org/ÜL-Abrechnungsbogen_2015_01.ods | Bin 0 -> 44366 bytes
17 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 org/Aufnahmeantrag Rückseite.pdf
create mode 100644 org/Aufnahmeantrag Vorderseite neu.pdf
create mode 100644 org/CWSV-Aufnahmeantrag.pdf
create mode 100755 org/jvs/Stärkemeldung des DJB 2016_ausfüllbar.docx
create mode 100755 org/jvs/Stärkemeldung2016.docx
create mode 100755 org/kyu/KyuPrüfung2015-Prüfungsliste(alle).odt
create mode 100755 org/kyu/KyuPrüfung2015-Prüfungsliste(knapp).odt
create mode 100755 org/kyu/KyuPrüfung2015-Prüfungsliste(sicher).odt
create mode 100755 org/kyu/Kyuprüfung2015-Planung.ods
create mode 100755 org/ÜL-Abrechnungsbogen-2015-2-MarkoBunzel.pdf
create mode 100755 org/ÜL-Abrechnungsbogen-2016-2-MarkoBunzel.pdf
create mode 100755 org/ÜL-Abrechnungsbogen-2018-1-MarkoBunzel.pdf
create mode 100644 org/ÜL-Abrechnungsbogen-2019-2-MarkoBunzel.pdf
create mode 100644 org/ÜL-Abrechnungsbogen-2020-1.ods
create mode 100644 org/ÜL-Abrechnungsbogen-2020-2.ods
mode change 100755 => 100644 org/ÜL-Abrechnungsbogen.ods
create mode 100755 org/ÜL-Abrechnungsbogen_2015_01.ods
diff --git a/org/Aufnahmeantrag Rückseite.pdf b/org/Aufnahmeantrag Rückseite.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..a0b70d93919630863c81af76ce20ae9444d6c273
GIT binary patch
literal 71852
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