Merge branch 'master' into infoZettel

This commit is contained in:
marko
2023-03-19 18:14:38 +01:00
19 changed files with 313 additions and 77 deletions

4
.gitmodules vendored
View File

@@ -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

View File

@@ -1,2 +1,5 @@
build/*
temp/*
# don't commit any secrets
Makefile.local

View File

@@ -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 $@

View File

@@ -0,0 +1,2 @@
ftpUser = cwsvjudo
ftpPassword = ***

View File

@@ -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";
}

View File

@@ -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] | | |

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

View File

@@ -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

1
submodules/wkOrg Submodule

Submodule submodules/wkOrg added at 41fe0c5a45

14
wkOrg/Makefile Executable file
View File

@@ -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:

82
wkOrg/checkDownloads.py Executable file
View File

@@ -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()

55
wkOrg/getCSV.py Executable file
View File

@@ -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?&amp;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])

41
wkOrg/newNoticeCheck.py Executable file
View File

@@ -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()

40
wkOrg/readMe.md Executable file
View File

@@ -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)

1
wkOrg/wkScraper-JvsCal.py Symbolic link
View File

@@ -0,0 +1 @@
../submodules/wkOrg/src/wkScraper/wkScraper-JvsCal.py