digedag / cfc_league

Sportsmanagement for TYPO3 (Backend)
3 stars 8 forks source link

CSV-Import von Spielen aus DFBnet #41

Closed bastians closed 1 year ago

bastians commented 6 years ago

Um den Import von Spielen einer Saison zu beschleunigen, wäre eine Import-Funktion von CSV-Dateien aus dem DFBnet hilfreich.

Aus meiner Sicht könnte das wie folgt aussehen:

  1. Wettbewerb erstellen & Mannschaften hinzufügen
  2. CSV-Datei hochladen
  3. (Manuelles) Matching von Mannschaften aus CSV-Datei mit Mannschaften aus Wettbewerb und Bestätigung des Matchings
  4. Erstellen des Spielplans

Im Anhang habe ich exemplarisch den Aufbau einer CSV-Datei angehängt. spielplan.csv.xlsx

digedag commented 6 years ago

Wie ich sehe, hat der DFB nun auch mal IDs in die Datei mit übernommen. Damit kann man einen Import ins Auge fassen. Hast du auch mal ein oder zwei Datensätze, damit man die verwendeten Datentypen sieht?

bastians commented 6 years ago

@digedag Anbei eine Datei mit ein paar Daten. spielplan-mit-daten.xlsx

digedag commented 6 years ago

Na dann: bitte mal testen. Ich hab es derzeit nur in 6.2 ausprobiert. Mit der CSV-Datei lässt sich der Spielplan einer Liga anlegen und aktualisieren.

Anleitung:

  1. Datenbank-Sync durchführen. Es gibt eine neue Spalte in der Wettbewerbstabelle.
  2. Neuen Wettbewerb anlegen
  3. Im BE-Modul Wettbewerbsverwaltung das Tab DFB Synchronisation aufrufen
  4. die CSV hochladen

Die Datei wird sofort verarbeitet. Sofern der Wettbewerb noch keine externe ID gesetzt hat, wird automatisch der Wert aus der Spalte Staffelkennung des ersten Spiels übernommen. Es werden nun nur noch Spiele mit dieser ID beachtet. Nicht vorhandene Spiele und Mannschaften werden automatisch angelegt. Da bei Mannschaften keine IDs vorhanden sind, wird die externe ID aus dem Mannschaftsnamen gebildet. Einmal angelegte Teams werden nicht mehr aktualisiert. Sollte sich der Name einer Mannschaft im Laufe der Saison ändern, dann wird ein neues Team angelegt! Ist für ein Spiel ein verlegtSpieldatum vorhanden, dann wird dieses als Spieldatum verwendet.

Für die Verarbeitung sind die Namen der Spalte in der Kopfzeile relevant. Die Reihenfolge ist also egal.

Die Neuanlage eines Wettbewerbs dauert beim ersten Upload schon mal ein paar Minuten. Der Server-Timeout sollte also wenigstens auf 5 Minuten eingestellt sein.

digedag commented 6 years ago

Also unter 7.6 funktioniert das noch nicht. Da ist vermutlich ein TCE-Hook noch nicht korrekt umgestellt. Dadurch werden bei den ersten Spielen keine Teams gesetzt. Als Workaround kann man die Datei einfach ein zweites mal hochladen. Dann sind die Teams vorhanden.

bastians commented 6 years ago

Wow! :-) Wird am Wochenende getestet!

bastians commented 6 years ago

Eine Rückfrage bzgl.

Da bei Mannschaften keine IDs vorhanden sind, wird die externe ID aus dem Mannschaftsnamen gebildet. Einmal angelegte Teams werden nicht mehr aktualisiert. Sollte sich der Name einer Mannschaft im Laufe der Saison ändern, dann wird ein neues Team angelegt!

Heißt, dass man im TYPO3 danach den Namen der Mannschaften anpassen kann aber das Feld ID-Feld darf man nicht anpassen. Korrekt?

digedag commented 6 years ago

Ja, das ist korrekt. In der CSV sollte sich der Name nicht ändern.

bastians commented 6 years ago

Ich habe nun getestet und grundsätzlich kann ich sagen, dass der Import funktioniert und die Spiele korrekt (und schnell) angelegt werden. Vielen Dank dafür schon mal, das erleichtert wirklich einiges.

Nachstehend mal meine Test-Fälle inkl. Ergebnis und Optimierungsvorschlägen.

Einfacher Import, d.h. Wettbewerb angelegt und unveränderte CSV-Datei importiert

Erneuter Upload einer angepassten CSV-Datei (Datumsänderungen) in einem existieren Wettbewerb

Import mit vorab manuell zu einem Wettbewerb hinzugefügten Mannschaften


Ich hätte folgende Optimierungsvorschläge:


Was mir noch aufgefallen ist: Nach dem Update der Extension kann ich den Erweiterungsmanager nicht mehr öffnen, Seite bleibt leer.

bildschirmfoto 2018-07-20 um 21 50 54

Das PHP Error-Log zeigt leider keinen Fehler.


Noch nicht getestet:

stemeda commented 6 years ago

Das wird eine super Funktion!

Unter 8.7 funktioniert das noch nicht. Drückt man auf den Tab DFB Synchronisation so lässt sich das Modul T3Sports nicht mehr aufrufen. Es kommt der Fehler im Log

Core: Exception handler (WEB): Uncaught TYPO3 Exception: Call to undefined method TYPO3\CMS\Core\Utility\File\ExtendedFileUtility::init() | Error thrown in file /typo3conf/ext/cfc_league/Classes/Controller/Competition/DfbSync.php in line 116. Requested URL: https://example.de/typo3/index.php?M=web_CfcLeagueM1&moduleToken=--AnonymizedToken--&id=XYZ

Ich konnte die Homepage nur wieder herstellen, indem ich das Backup eingespielt habe.

digedag commented 6 years ago

Die Funktion sollte nun auch unter 8.7 funktionieren! Danke für den Hinweis! :+1:

stemeda commented 6 years ago

Funktioniert unter 8.7. Hab eine Staffel angelegt, updates usw. habe ich aber noch nicht getestet.

Auf jeden Fall super Funktion!

Noch eine Frage: Ich bin neu im DFBnet und in der CSV-Datei die ich jetzt gefunden habe sind keine Ergebnisse (Tore) enthalten. Gibt es noch eine andere Datei, eine Option für einen erweiterten Export oder müssen die weiterhin manuell gepflegt werden?

bastians commented 6 years ago

@stemeda

Funktioniert unter 8.7.

Sehr gut. Funktioniert bei der der Erweiterungsmanager noch nach dem Update auf die aktuellste Version der Extension?

Noch eine Frage: Ich bin neu im DFBnet und in der CSV-Datei die ich jetzt gefunden habe sind keine Ergebnisse (Tore) enthalten.

Die Exporte aus dem DFBnet enthalten leider keine Ergebnisse.

bastians commented 6 years ago

Das Problem mit dem Erweiterungsmanager existiert bei mir nicht mehr, lag wohl an etwas anderem.

bastians commented 5 years ago

Ich habe eben festgestellt, dass die Spielkennungen/Spielnummern aus dem DFBnet nicht eindeutig sind. Die Kennung setzt sich zusammen aus der Staffelnummer und einer fortlaufenden Nummer. Ich war bisher der Annahme, dass sich die Nummer einer Staffel je Saison ändert, unabhöngig davon ob das die selbe Staffel aus der Vorsaison ist. Dem ist aber nicht so.

Ist das ein Problem für den Importer? Oder müsste man die externe ID noch um die Saison erweitern? Also Spielkennung-Saison, Bsp.: 3500568001-1920?

digedag commented 5 years ago

Ich hab gerade mal nachgesehen. Der Sync läuft immer im Kontext eines Wettbewerbs. Solange die externe ID für ein Spiel innerhalb des Wettbewerbs eindeutig ist, gibt es kein Problem.

bastians commented 1 year ago

Hi @digedag, ich bin gerade dabei die Spiele für die neue Saison zu importieren. Dabei ist mir aufgefallen, dass offenbar neue Teams nicht mehr automatisch angelegt werden. Oder war das noch nie so? :-D

Ich meine, dass ich die letzten Jahre die Ordner immer aus der Vorsaison kopiert und die Spiele entfernt habe sowie aus dem Wettbewerb die Mannschaften. Dann habe ich die CSV mit den neuen Spielen importiert und es wurden alle Spiele sowie die fehlenden Mannschaften angelegt. Das ist jetzt nicht mehr der Fall.

TYPO3: 8.7.27 cfc_league: 1.8.2 cfc_league_fe: 1.8.2 rn_base: 1.15.4

Ich habe erst vor einigen Wochen auf die cfc_league-Versionen aktualisiert, davor war ich noch auf 1.7.1 (cfc_league) bzw. 1.7.2 (cfc_league_fe) und 1.13.10 bei rn_base.

digedag commented 1 year ago

Die Teams sollten natürlich mit angelegt werden. Ich hab jetzt leider nicht genauer prüfen können. Das wird wohl erst Ende kommender Woche. Vermutlich gibt es ein Problem mit dem TCE-Hook, der die Teams dann anlegt. Aber das ist nur eine Vermutung.

digedag commented 1 year ago

Also zur Klarstellung: das Problem ist in der Version 1.11.3 behoben. Ein Update der Extensions ist auch in T3 8.x problemlos möglich. rn_base muss natürlich auch aktualisiert werden. :slightly_smiling_face:

bastians commented 1 year ago

Danke dir! Ich habe die Versionen gerade alle aktualisiert und den Cache gelöscht. Erhalte Bei Aufruf des Frontends allerdings folgenden Fehler:

Oops, an error occurred!
Call to undefined function Sys25\RnBase\Utility\str_starts_with()

Any idea?

digedag commented 1 year ago

Oh Mist. Das ist ein Problem mit der PHP-Version. Ist mir leider bisher nicht aufgefallen. Hast du von rn_base den master oder die letzte getaggte Version geholt? Ich push den Fix gleich in den master...

bastians commented 1 year ago

Ich habe die aktuellste Version aus dem TER installiert. Danke :)

digedag commented 1 year ago

Okay, dann dauert es noch einen Moment. Ich setz eine Version damit, es ins TER geht.

digedag commented 1 year ago

Also Upload ins TER ist erfolgt. Die neuen Versionen sind jetzt eigentlich immer innerhalb weniger Minuten sichtbar.

bastians commented 1 year ago

Habe das Update installiert. Der Fehler ist nun weg, nun habe ich aber einen anderen Fehler, scheint allerdings nichts mehr mit rn_base zu tun zu haben:

Oops, an error occurred!
Class 'Contrib\Doctrine\Common\Collections\ArrayCollection'
bastians commented 1 year ago

Ergänzend vielleicht noch: Habe versucht via der mklog Extension mehr Logs zu bekommen, allerdings funktioniert die in Version 9.5.2 eventuell nicht mehr mit der aktuellsten rn_base Installation. Erhalte aber nach der Installation im TYPO3 Backend folgenden Fehler:

Oops, an error occurred!
Class '\Sys25\RnBase\Utility\TYPO3\CMS\Core\Cache\Backend\Typo3DatabaseBackend' not found

(Ich muss glaube ich langsam echt mal die TYPO3 Version upgraden :D)

digedag commented 1 year ago

Also die Klasse ArrayCollection wird mit rn_base ausgeliefert. Die sollte aber eigentlich funktionieren.

Oops, an error occurred!
Class 'Contrib\Doctrine\Common\Collections\ArrayCollection'

War da noch ein "not found" mit dran, oder was anderes? Stacktrace wäre schon hilfreich. Hast du eventuell was im PHP-Errorlog? Du kannst auch in den Extension-Einstellungen von rn_base die ausführlichen Fehlermeldungen erlauben.

Wenn die Klasse nicht gefunden wird, dann stimmt das autoloading von TYPO3 nicht. Du kannst mal im Root-Verzeichnis von TYPO3 in der CLI folgenden Befehl ausführen:

./bin/typo3 extensionmanager:extension:dumpclassloadinginformation

Ach und mklog könnte tatsächlich Probleme mit der aktuellen Version von rn_base haben. Das wird vermutlich auch nicht mehr behoben werden. Im Zweifel musst du die Extension deinstallieren...

bastians commented 1 year ago

Sorry, ja, da war noch ein "not found mit dran:

Oops, an error occurred!
Class 'Contrib\Doctrine\Common\Collections\ArrayCollection' not found

Der Befehl

./bin/typo3 extensionmanager:extension:dumpclassloadinginformation

hat nicht geklappt, aber ich hab den folgenden Befehl

php typo3/cli_dispatch.phpsh extbase extension:dumpclassloadinginformation

gefunden und ausgeführt und bekomme folgendes zurück:

PHP Fatal error:  Uncaught Error: Call to a member function isPackageActive() on null in /www/htdocs/XXX/www/cms/typo3/testing/typo3/sysext/core/Classes/Utility/ExtensionManagementUtility.php:116
Stack trace:
#0 /www/htdocs/XXX/www/cms/typo3/testing/typo3/sysext/core/Classes/Utility/GeneralUtility.php(3340): TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('core')
#1 /www/htdocs/XXX/www/cms/typo3/testing/typo3/sysext/core/Classes/Imaging/IconProvider/SvgIconProvider.php(54): TYPO3\CMS\Core\Utility\GeneralUtility::getFileAbsFileName('')
#2 /www/htdocs/XXX/www/cms/typo3/testing/typo3/sysext/core/Classes/Imaging/IconProvider/SvgIconProvider.php(35): TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider->generateMarkup(Object(TYPO3\CMS\Core\Imaging\Icon), Array)
#3 /www/htdocs/XXX/www/cms/typo3/testing/typo3/sysext/core/Classes/Imaging/IconFactory.php(122): TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider->prepareIconMarkup(Object(TYPO3\CMS\Core\Imaging\Icon), Array)
#4 /www/htdocs/XXX/www in /www/htdocs/XXX/www/cms/typo3/testing/typo3/sysext/core/Classes/Utility/ExtensionManagementUtility.php on line 116

Folgende Logs konnte och noch finden:

Core: Exception handler (WEB): Uncaught TYPO3 Exception: Class 'Contrib\Doctrine\Common\Collections\ArrayCollection' not found | Error thrown in file /www/htdocs/XXXwww/cms/typo3/testing/typo3conf/ext/rn_base/Classes/Domain/Collection/BaseCollection.php in line 35. Requested URL: https://xxx/herren/herren-2/kader/

und

Core: Exception handler (WEB): Uncaught TYPO3 Exception: Class '\Sys25\RnBase\Utility\TYPO3\CMS\Core\Cache\Backend\Typo3DatabaseBackend' not found | Error thrown in file /www/htdocs/XXX/www/cms/typo3/testing/typo3/sysext/core/Classes/Cache/CacheManager.php in line 305. Requested URL: https://XXX/typo3/index.php?route=%%2Frecord%%2Fcommit&token=--AnonymizedToken--&cacheCmd=pages

digedag commented 1 year ago

Ich hab mir eine Testversion aufgesetzt und die Ursache für das Problem gefunden. Der interne Autoloader von T3 nutzt in TYPO3 8 immer noch die Angaben aus der ext_emconf.php. Ich hab diese angepasst und konnte nun eine Liga erfolgreich importieren. Bitte auch noch mal cfc_league aktualisieren. Die Version 1.11.3 war noch nicht im TER.

bastians commented 1 year ago

Hab das Update durchgeführt, danke für den Fix, der Fehler ist nun weg, dafür gibt es aber einen neuen :-/

Oops, an error occurred!
Class '\Sys25\RnBase\Utility\TYPO3\CMS\Core\Cache\Backend\Typo3DatabaseBackend' not found

Core: Exception handler (WEB): Uncaught TYPO3 Exception: Class '\Sys25\RnBase\Utility\TYPO3\CMS\Core\Cache\Backend\Typo3DatabaseBackend' not found | Error thrown in file /www/htdocs/XXX/www/cms/typo3/testing/typo3/sysext/core/Classes/Cache/CacheManager.php in line 305

Ich bekomme beim Löschen der Caches aus dem TYPO3 Backend heraus übrigens auch folgende Fehler. Eventuell hängt das damit zusammen?

Bildschirmfoto 2023-09-22 um 21 59 38
digedag commented 1 year ago

Falls möglich, öffne mal das Modul "System->Configuration" und schau dir "$GLOBALS['TYPO3_CONF_VARS']" an. Dort dann die konfiguratierten Caches unter ['SYS']['caching']['cacheConfigurations']. In einem der Caches gibt es vermutlich die Klasse \Sys25\RnBase\Utility\TYPO3\CMS\Core\Cache\Backend\Typo3DatabaseBackend. Am Name des Cache weist hoffentlich auf die problematische Extension hin.

bastians commented 1 year ago

Danke für den Tipp, man lernt ja nie aus :) Ich habe nun mklogdeinstalliert und nun ist der Fehler im Frontend weg und die Seite lädt wieder. Möchte ich den Cache im BAckend löschen, bekomme ich allerdings immernoch einen Fehler, aber damit kann ich erstmal leben.

Vielen, vielen Dank für deine Hilfe und deine Geduld! :)

bastians commented 1 year ago

Oh, noch eine Sache. Ich habe noch eine Extension gefunden, sf_banners. Aber diese hat keine Abhängigkeit zu rn_base. Das irritiert mich etwas. Und auf meiner Prod-Umgebung, wo ich rn_base noch nicht aktualisiert habe, steht bei der Extension sfbanners_cache.backend = TYPO3\CMS\Core\Cache\Backend\Typo3DatabaseBackend

digedag commented 1 year ago

Das ist auch korrekt. Diese Klasse gibt es. Bei mklog war der Namespace falsch, weil da Teile des rn_base-Namespaces vorangestellt waren.

bastians commented 1 year ago

Noch kurz als Feedback: Läuft wieder 1A. DANKE :)

(Mein Problem mit der sf_banners-Extension wurde auch gelöst :) )