diff --git a/.gitmodules b/.gitmodules index 322d9dc..a5a3134 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,7 +13,3 @@ [submodule "submodules/materialize"] path = submodules/materialize url = https://github.com/materializecss/materialize.git - -[submodule "submodules/video.js"] - path = submodules/video.js - url = https://github.com/videojs/video.js.git diff --git a/homepage/cwsvJudo/.gitignore b/homepage/cwsvJudo/.gitignore index 5ba50b7..be243a0 100644 --- a/homepage/cwsvJudo/.gitignore +++ b/homepage/cwsvJudo/.gitignore @@ -1,2 +1,5 @@ build/* temp/* + +# don't commit any secrets +Makefile.local \ No newline at end of file diff --git a/homepage/cwsvJudo/Makefile b/homepage/cwsvJudo/Makefile index 958e9c9..a2671fb 100644 --- a/homepage/cwsvJudo/Makefile +++ b/homepage/cwsvJudo/Makefile @@ -1,3 +1,7 @@ +include Makefile.local + +CSSO = node_modules/csso-cli/bin/csso + RES_LIST = 64 128 256 512 cssFiles = $(wildcard src/css/*.css) @@ -46,7 +50,7 @@ build/css/cwsvJudo.css: $(cssFiles) # cat $^ > $@ # cat $(cssFiles) | cleancss -o $@ # cat $^ | ./node_modules/.bin/csso -o $@ - cat $^ | csso -o $@ + cat $^ | $(CSSO) -o $@ build/%.php: src/md/%.md build/yaml/%.yaml pandocTemplate/cwsvJudo.html5.pandocTemplate mkdir -p build @@ -84,7 +88,7 @@ build/.uploadMarker/%.php: build/%.php mkdir -p build/.uploadMarker curl \ --upload-file $^ \ - --user cwsvjudo:kodokan \ + --user $(ftpUser):$(ftpPassword) \ ftp://cwsvjudo.bplaced.net/www/pages/responsive/$(patsubst build/%.php,%.php,$^) \ --ftp-create-dirs touch $@ @@ -94,7 +98,7 @@ build/.uploadMarker/amp/%.php: build/amp/%.php mkdir -p build/.uploadMarker/amp curl \ --upload-file $^ \ - --user cwsvjudo:kodokan \ + --user $(ftpUser):$(ftpPassword) \ ftp://cwsvjudo.bplaced.net/www/pages/$(patsubst build/amp/%.php,amp/%.php,$^) \ --ftp-create-dirs touch $@ @@ -105,7 +109,7 @@ build/.uploadMarker/phpLib/%.php: phpLib/%.php mkdir -p build/.uploadMarker/phpLib/phpcount curl \ --upload-file $^ \ - --user cwsvjudo:kodokan \ + --user $(ftpUser):$(ftpPassword) \ ftp://cwsvjudo.bplaced.net/www/ressourcen/$(patsubst build/%.php,%.php,$^) \ --ftp-create-dirs touch $@ @@ -114,15 +118,7 @@ build/.uploadMarker/css/%.css: build/css/%.css mkdir -p build/.uploadMarker/css curl \ --upload-file $^ \ -<<<<<<< HEAD - --user cwsvjudo:kodokan \ -======= -<<<<<<< HEAD - --user cwsvjudo:***REMOVED*** \ -======= - --user cwsvjudo:kodokan \ ->>>>>>> master ->>>>>>> master + --user $(ftpUser):$(ftpPassword) \ ftp://cwsvjudo.bplaced.net/www/ressourcen/$(patsubst build/%,%,$^) \ --ftp-create-dirs touch $@ @@ -132,15 +128,7 @@ build/.uploadMarker/config/%: config/% mkdir -p build/.uploadMarker/config curl \ --upload-file $^ \ -<<<<<<< HEAD - --user cwsvjudo:kodokan \ -======= -<<<<<<< HEAD - --user cwsvjudo:***REMOVED*** \ -======= - --user cwsvjudo:kodokan \ ->>>>>>> master ->>>>>>> master + --user $(ftpUser):$(ftpPassword) \ ftp://cwsvjudo.bplaced.net/www/$(patsubst build/%,%,$^) \ --ftp-create-dirs touch $@ diff --git a/homepage/cwsvJudo/Makefile.local.template b/homepage/cwsvJudo/Makefile.local.template new file mode 100644 index 0000000..c9f24ab --- /dev/null +++ b/homepage/cwsvJudo/Makefile.local.template @@ -0,0 +1,2 @@ +ftpUser = cwsvjudo +ftpPassword = *** diff --git a/homepage/cwsvJudo/src/css/cwsvJudo-2018-news.css b/homepage/cwsvJudo/src/css/cwsvJudo-2018-news.css index 3f72c6b..29d2c84 100644 --- a/homepage/cwsvJudo/src/css/cwsvJudo-2018-news.css +++ b/homepage/cwsvJudo/src/css/cwsvJudo-2018-news.css @@ -1,74 +1,79 @@ -.newsArtikel{ - width: 100%; - background-color: #FFAE00; - box-shadow: 0 1px 2px 0 rgba(0,0,0,.5); - display: flex; - flex-direction: column; +.newsArtikel { + width: 100%; + background-color: #ffae00; + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.5); + display: flex; + flex-direction: column; } -.newsHeader{ - display: flex; - align-items: stretch; - justify-content: space-between; - background-color: #FF8100; +.newsHeader { + display: flex; + align-items: stretch; + justify-content: space-between; + background-color: #ff8100; } -.newsDatum{ - white-space: nowrap; - align-self: center; +.newsDatum { + white-space: nowrap; + align-self: center; } -.newsBetreff{ - margin: auto; - margin: auto; - margin-left: 1vw; - margin-right: 1vw; - text-align: end; - flex-grow: 1; +.newsBetreff { + margin: auto; + margin: auto; + margin-left: 1vw; + margin-right: 1vw; + text-align: end; + flex-grow: 1; } -.newsBody{ - display: flex; - flex-direction: column; - align-items: center; +.newsBody { + display: flex; + flex-direction: column; + align-items: center; } -.newsBody > img{ - flex: 1; +.newsBody > img { + flex: 1; } @media (min-width: 1280px) { - .newsBody{ - flex-direction: row; - } + .newsBody { + flex-direction: row; + } } -.newsPromoImage{ -/* +.newsPromoImage { + width: 33%; + /* * float: left; */ } -.newsText{ - flex: 3; - margin: 1vw; +.newsText { + flex: 3; + margin: 1vw; } .newsText a { - float: none; + float: none; } .newsText amp-img, -.newsText img{ - max-width: 100%; - height: auto; - display: block; - margin: auto; - box-shadow: 0 1px 2px 0 rgba(0,0,0,.5); +.newsText img { + max-width: 100%; + height: auto; + display: block; + margin: auto; + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.5); +} +.newsText video { + width: 100%; + height: auto; } .newsText video, -.newsText amp-video{ - max-width: 100%; +.newsText amp-video { + max-width: 100%; } -.newsFooter{ - background-color: #FF8100; +.newsFooter { + background-color: #ff8100; } -.newsAutor::before{ - content: "Msg\0000a0"; +.newsAutor::before { + content: "Msg\0000a0"; } diff --git a/mitglieder/pässe.2023/bestellungen-2023.md b/mitglieder/pässe.2023/bestellungen-2023.md new file mode 100644 index 0000000..eafa1fe --- /dev/null +++ b/mitglieder/pässe.2023/bestellungen-2023.md @@ -0,0 +1,6 @@ +| Name | Vorname | Geb.dat. | Geb.ort | Nat. | Passbild | bestellt am | Passnummer | +| :------- | :------ | :--------- | :---------- | :--------- | :------- | ----------: | ---------: | +| Maiatska | Mariia | 2015-02-24 | Tschernihiw | ukrainisch | [x] | | | +| Kraft | Nataly | 2013-10-11 | Chemnitz | deutsch | [x] | | | +| Kraft | Alesya | 2015-03-14 | Chemnitz | deutsch | [x] | | | +| Böhme | Hanna | 2016-01-26 | Chemnitz | deutsch | [x] | | | diff --git a/mitglieder/pässe.2023/bilder/Alesya-Kraft-2015-03-14-DEU.jpg b/mitglieder/pässe.2023/bilder/Alesya-Kraft-2015-03-14-DEU.jpg new file mode 100644 index 0000000..fe0a5c1 Binary files /dev/null and b/mitglieder/pässe.2023/bilder/Alesya-Kraft-2015-03-14-DEU.jpg differ diff --git a/mitglieder/pässe.2023/bilder/Hanna- Boehme-2016-01-26-DEU.jpg b/mitglieder/pässe.2023/bilder/Hanna- Boehme-2016-01-26-DEU.jpg new file mode 100644 index 0000000..9c3af59 Binary files /dev/null and b/mitglieder/pässe.2023/bilder/Hanna- Boehme-2016-01-26-DEU.jpg differ diff --git a/mitglieder/pässe.2023/bilder/Mariia-Maiatska-2015-02-24-UKR.jpg b/mitglieder/pässe.2023/bilder/Mariia-Maiatska-2015-02-24-UKR.jpg new file mode 100644 index 0000000..2fd6db5 Binary files /dev/null and b/mitglieder/pässe.2023/bilder/Mariia-Maiatska-2015-02-24-UKR.jpg differ diff --git a/mitglieder/pässe.2023/bilder/Nataly-Kraft-2013-10-11-DEU.jpg b/mitglieder/pässe.2023/bilder/Nataly-Kraft-2013-10-11-DEU.jpg new file mode 100644 index 0000000..9419eec Binary files /dev/null and b/mitglieder/pässe.2023/bilder/Nataly-Kraft-2013-10-11-DEU.jpg differ diff --git a/submodules/Makefile b/submodules/Makefile index de7786c..f3254b3 100644 --- a/submodules/Makefile +++ b/submodules/Makefile @@ -1,14 +1,17 @@ include passwords .PHONY: updateSubmodules -updateSubmodules: +updateSubmodules: checkoutSubmodulesDefaultBranches + git submodule foreach git pull + +.PHONY: +checkoutSubmodulesDefaultBranches: git -C lite-youtube-embed checkout master git -C materialize checkout main git -C parsedown checkout master git -C spyc checkout master git -C zopfli checkout master - git submodule foreach git pull .PHONY: buildMaterialize buildMaterialize: updateSubmodules diff --git a/submodules/video.js b/submodules/video.js deleted file mode 160000 index 53cbfc6..0000000 --- a/submodules/video.js +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 53cbfc62226255e2435cde10624bcafb54502fbb diff --git a/submodules/wkOrg b/submodules/wkOrg new file mode 160000 index 0000000..41fe0c5 --- /dev/null +++ b/submodules/wkOrg @@ -0,0 +1 @@ +Subproject commit 41fe0c5a45ec7a480fd3b10719560b4b47ce4fdb diff --git a/wkOrg/Makefile b/wkOrg/Makefile new file mode 100755 index 0000000..cf611ea --- /dev/null +++ b/wkOrg/Makefile @@ -0,0 +1,14 @@ +.PHONY: all +all: dlCheck + +# Download der Ausschreibungen und ablegen im Downloadordner +.PHONY: download +download: + python wkScraper-JvsCal.py + +.PHONY: dlCheck +dlCheck: download + ./newNoticeCheck.py + +.PHONY: clean +clean: diff --git a/wkOrg/checkDownloads.py b/wkOrg/checkDownloads.py new file mode 100755 index 0000000..95074f3 --- /dev/null +++ b/wkOrg/checkDownloads.py @@ -0,0 +1,82 @@ +#! /usr/bin/env python3 + +# Python Script zum testen, ob neue Ausschreibungen hinzugekommen sind, oder bereits vorhandene sich geändert haben (kein herunterladen, es wird im Downloadordner wkOrgConfig.downpath gesucht) + +# Name und Pfad der Datenbank als Variablen +import wkOrgConfig +import wkOrgAssis + +import os +import os.path +import sqlite3 + +# Init der Datenbankverbindung +if os.path.isfile(wkOrgConfig.db['pathname']+wkOrgConfig.db['filename']): + dbConn = sqlite3.connect( + wkOrgConfig.db['pathname']+wkOrgConfig.db['filename']) + dbConn.text_factory = str + dbCur = dbConn.cursor() +else: + print("Keine Datenbank vorhanden!") + exit(-1) + +# Hole Liste der Dateinamen im downloadVerzeichnis +filenames = os.listdir(wkOrgConfig.downPath) +# print filenames + +# Für jeden Dateinamen: +for filename in filenames: + # Finde alle Einträge (id, dateiname, sha256 , wkID) zu diesen Dateinamen in der downloadTabelle -> dlList + dbCur.execute( + 'SELECT id, dateiname, sha512 , wkID FROM downloads WHERE dateiname=?', (filename, )) + ausschr = dbCur.fetchall() + +# Falls dlList leer: (heißt ausschreibung wurde noch nicht zugeordnet) + if ausschr == []: + # füge Ausschreibung zur downloadTabelle hinzu (merke dir die ID) + ausschrID = wkOrgAssis.dbAddDownload( + dbCur, filename, wkOrgAssis.aFilesSHA512(wkOrgConfig.downPath+filename)) + dbConn.commit() +# füge Wettkämpfe zur wkTabelle hinzu, merke die wkIDs + print("Ausschreibung: "+filename) + os.system('mupdf "'+wkOrgConfig.downPath + + filename + '" >/dev/null 2>/dev/null &') + wkIDs = wkOrgAssis.dbAddWks(dbCur, ausschrID) + dbConn.commit() +# update die wkIDs in der Ausschreibung in der downloadTabelle + dbCur.execute('UPDATE downloads SET wkID=? WHERE id=?', + (' '.join(str(wkIDs)), ausschrID)) + dbConn.commit() +# Sonst: + else: + # (auch wenn mehrere dl mit diesem Dateinamen in der + # downloadDatenbank gefunden werden, wir nehmen immer nur den + # ersten) + # Falls wkID == NULL: + if ausschr[0][3] == 'NULL': + # füge Wettkämpfe zur wkTabelle hinzu, merke die wkIDs + wkIDs = dbAddWks(dbCur, ausschr[0][0]) +# update die wkIDs dieser Ausschreibung + dbCur.execute('UPDATE downloads SET wkIDs=? WHERE id=?', + (' '.join(wkIDs), ausschr[0][0])) + dbConn.commit() +# Sonst: + else: + # Falls wkID != 0: + if ausschr[0][3] != '0': + # Falls sich der Hash geändert hat: + if ausschr[0][2] != wkOrgAssis.aFilesSHA512(wkOrgConfig.downPath+filename): + # Finde alle wkEinträge, die diese AusschreibungsID haben: + dbCur.execute( + 'SELECT (wkId) FROM downloads WHERE dateiname=?', (filename,)) + wkListList = dbCur.fetchall() +# Für jeden diesen Eintrag: + for wkList in wkListList: + # Berichtige die Wettkampfdaten + for wk in wkList: + print("Ups: kein dbUpdateWk") +# wkOrgAssis.dbUpdateWk(wk) + +# Aufräumen +dbConn.commit() +dbConn.close() diff --git a/wkOrg/getCSV.py b/wkOrg/getCSV.py new file mode 100755 index 0000000..549d39d --- /dev/null +++ b/wkOrg/getCSV.py @@ -0,0 +1,55 @@ +#! /usr/bin/env python3 + +# Python Script zum exportieren der anstehenden Wettkämpfe als cvs +# und Kopieren der Ausschreibungen in das zugehörige Verzeichnis zur +# Synchro mit dem online download ordner + +# Name und Pfad der Datenbank als Variablen +import wkOrgConfig +import wkOrgAssis + +import os +import os.path +import sqlite3 +import time +import shutil +import dateutil.parser +import sys + +# Init der Datenbankverbindung +if os.path.isfile(wkOrgConfig.db['pathname']+wkOrgConfig.db['filename']): + dbConn = sqlite3.connect(wkOrgConfig.db['pathname']+wkOrgConfig.db['filename']) + dbConn.text_factory = str + dbCur = dbConn.cursor() +else: + print ("Keine Datenbank vorhanden!") + exit(-1) + +# Abfrage aller anstehenden Wettkämpfe +dbCur.execute('SELECT id FROM wk WHERE datum>=?', (time.strftime("%Y-%m-%d"), ) ) +wkIds = dbCur.fetchall() + +for wkId in wkIds: + dbCur.execute('SELECT name, datum, ak, adrID, dlID FROM wk WHERE id=?', (wkId[0], ) ) + wkInfos = dbCur.fetchall() + dbCur.execute('SELECT dateiname FROM downloads WHERE id=?', (wkInfos[0][4], )) + ausschr = dbCur.fetchall() + dbCur.execute('SELECT ort, lat, lon FROM adressen WHERE id=?', (wkInfos[0][3], )) + addr = dbCur.fetchall() + if not addr: + addr = [["","",""]] + + + +# Schreibweisen korrigieren + ausschrFilename = ausschr[0][0] + ausschrFilename = ausschrFilename.replace(" ", "%20") + + sys.stderr.write("wkInfos: "+str(wkInfos)+"\n") + # Reihenfolge der Spalten auf dem Server: + # lfdeNr Datum Veranstaltung Altersklassen Ort Ausschreibung Routenplaner + + print ("0," + wkInfos[0][1] + "," + wkInfos[0][0] + "," + wkInfos[0][2] + "," + addr[0][0] + "," + "/downloads/Ausschreibungen/Ausschreibungen." + str(dateutil.parser.parse(wkInfos[0][1]).year) + "/" + ausschrFilename + "," + "http://www.openstreetmap.org/directions?&route=50.80722%2C12.88236%3B" + addr[0][1] + "%2C" + addr[0][2] + ",," ) + if not os.path.exists('Ausschreibungen/Ausschreibungen.'+str(dateutil.parser.parse(wkInfos[0][1]).year)): + os.makedirs('Ausschreibungen/Ausschreibungen.'+str(dateutil.parser.parse(wkInfos[0][1]).year)) + shutil.copyfile('download/'+ausschr[0][0], 'Ausschreibungen/Ausschreibungen.'+str(dateutil.parser.parse(wkInfos[0][1]).year)+'/'+ausschr[0][0]) diff --git a/wkOrg/newNoticeCheck.py b/wkOrg/newNoticeCheck.py new file mode 100755 index 0000000..7abd7e1 --- /dev/null +++ b/wkOrg/newNoticeCheck.py @@ -0,0 +1,41 @@ +#! /usr/bin/env python3 + +# Python Script zum testen, ob neue Ausschreibungen hinzugekommen sind, oder bereits vorhandene sich geändert haben (kein herunterladen, es wird im Downloadordner wkOrgConfig.downpath gesucht) + +# Name und Pfad der Datenbank als Variablen +import wkOrgConfig +import wkOrgAssis + +import os +import os.path +import sqlite3 + +# Init der Datenbankverbindung +if os.path.isfile(wkOrgConfig.db['pathname']+wkOrgConfig.db['filename']): + dbConn = sqlite3.connect(wkOrgConfig.db['pathname']+wkOrgConfig.db['filename']) + dbConn.text_factory = str + dbCur = dbConn.cursor() +else: + print ("Keine Datenbank vorhanden!") + exit(-1) + +# Hole Liste der Dateinamen im downloadVerzeichnis +filenames = os.listdir(wkOrgConfig.downPath) +#print filenames + +# Für jeden Dateinamen: +for filename in filenames: +# Finde alle Einträge (id, dateiname, sha256 , wkID) zu diesen Dateinamen in der downloadTabelle -> dlList + dbCur.execute('SELECT id, dateiname, sha512 , wkID FROM downloads WHERE dateiname=?', (filename, ) ) + ausschr = dbCur.fetchall() + +# Falls dlList leer: (heißt ausschreibung wurde noch nicht zugeordnet) + if ausschr == []: + print("Neue Auschreibung: {}".format(filename)) +# Sonst: + else: + continue + +# Aufräumen +dbConn.commit() +dbConn.close() diff --git a/wkOrg/readMe.md b/wkOrg/readMe.md new file mode 100755 index 0000000..b6087d7 --- /dev/null +++ b/wkOrg/readMe.md @@ -0,0 +1,40 @@ +Python Scripts zur Verwaltung von Wettkampfterminen in einer SQLite Datenbank + +Die einzelnen "Programme" +- download.sh + - Skript zum Herunterladen der Ausschreibungen +- checkDownloads.py + - sucht, welche Downloaddateien noch nicht in der Datenbank erfasst sind, und lässt sie den Benutzer hinzufügen (oder zum ignorieren vormerken) +- getCVS.py + - gibt die kommenden Wettkämpfe als csv aus zum Import in die Onlinedatenbank + - die offline Datenbank kennt nicht: + - die laufenden Nummern der Wettkämpfe in der Onlinedatenbank + - den Inhalt der Onlinedatenbank + Deshalb müssen: + - die Reihenfolge der Spaltennamen muss beim Import in phpmyadmin manuell mit angegeben werden (Datum, Veranstaltung, Altersklassen, Ort, Ausschreibung, Routenplaner) + - schon in der Onlinedatenbank vorhandene Wettkämpfe entfernt werden (wird auch so bleiben müssen, bis ich eine 'Synchronisation' der beiden Datenbanken hinbekomme) + +Datenbankstruktur: + + Tabellen: + - downloads (Tabelle für alle Ausschreibungen im Downloadverzeichnis + - id INTEGER PRIMARY KEY ASC + - dateiname TEXT + - sha256 TEXT + - wkID TEXT (die IDs der Wettkämpfe dieser Ausschreibung per Whitespace getrennt) + - adressen (Tabelle für die Addressen der Wettkampforte) + - id INTEGER PRIMARY KEY ASC + - verein TEXT + - ort TEXT + - plz TEXT + - straße TEXT + - hausnr TEXT + - lat TEXT + - lon TEXT + - wk (Tabelle für die Wettkämpfe) + - id INTEGER PRIMARY KEY ASC + - name TEXT + - datum TEXT + - ak TEXT + - adrID TEXT + - ausschrID TEXT (id der ausschreibung in der downloadliste zum Wettkampf) diff --git a/wkOrg/wkScraper-JvsCal.py b/wkOrg/wkScraper-JvsCal.py new file mode 120000 index 0000000..be4adcf --- /dev/null +++ b/wkOrg/wkScraper-JvsCal.py @@ -0,0 +1 @@ +../submodules/wkOrg/src/wkScraper/wkScraper-JvsCal.py \ No newline at end of file