diddipoeler / sportsmanagement

Die neue Sports Management Komponente für Joomla 3/4/5
GNU General Public License v2.0
27 stars 27 forks source link

Migrate Code to Namespace and update deprecated calls #1325

Open ortwin20000 opened 3 years ago

ortwin20000 commented 3 years ago

Da der Code von JSM bereits aus vielen Joomla-Versionen entstanden ist und mittlerweile sich einiges geändert hat, wäre es toll wenn wir den Code etwas aufräumen könnten.

Ich habe dazu zwei Seiten gefunden, die dabei hilfreich sein könnten: https://htmlpreview.github.io/?https://github.com/techjoomla/joomla-3x-to-4x-migration-tools/blob/main/joomla-39x-to-4x-deprecated-notes/joomla39x-to-4x-remove-deprecated.html

https://github.com/techjoomla/joomla-3x-to-4x-migration-tools/tree/main/joomla-39x-to-4x-namespaces-script

Wäre es möglich dies gemeinsam zu koordinieren? Bin noch beim einlesen als dass ich dies alleine bewerkstelligen könnte.

diddipoeler commented 3 years ago

Ich werde mir das auch mal durchlesen. Die Komponente soll ja auch immer noch für Joomla 3 und 4 lauffähig sein.

jst71 commented 3 years ago

Ich wäre dabei! Zusätzlich ist mir bei der Arbeit an #1266 aufgefallen, dass es nach den vielen Codeumstellungen auch viele "Notice" Logs gibt, die eigentlich bugs sind. Es wird auf Variablen zugegriffen, die in dem Objekt nicht mehr enthalten sind. Vielleicht können wir auch ein Testsystem aufsetzen, welches verschiedene Aufrufe automatisiert ausführt (die wir dann Stück für Stück ergänzen) und anschließend sicherstellen, dass die Findigs im Log von Build zu Build reduziert werden. Da würden auch fehlende / falsch Portierte Namespaces auffallen (mit einer Exception :-))

ortwin20000 commented 3 years ago

Das mit dem Testsystem hört sich interessant an. Wie kann man ein solches aufbauen? Mit PHPUnit und automatisierten Tests oder simuliert man die Aufrufe im Browser?

Hab damit noch keine Erfahrung aber lerne gerne dazu 😉

jst71 commented 3 years ago

Ich denke PHPUnit wirde - genau wie PyUnit - mehr auf Unittest / Funktionsebene ansetzen, Das wäre für mich schon das "Finetunig". Meine Idee wäre mit Selenium (https://de.wikipedia.org/wiki/Selenium) die Browercalls zu simulieren und damit auf Gesamtanwendungsebene zu starten. Praktisch eingerichtet habe ich das allerdings auch noch nicht. Ich habe nur mitbekommen, dass bei uns in der Firma damit recht schnell und einfach gute Testabdeckungen erreicht werden konnten.

ortwin20000 commented 3 years ago

Kannte ich noch nicht. Ich schau mir das mal an. Damit könnte man dann also Tests wie neues Projekt oder Spieler anlegen simulieren. Siehe auch https://docs.joomla.org/Running_Automated_Tests_for_the_Joomla_CMS

ortwin20000 commented 3 years ago

Da ich es nicht mit Xampp, PHP und Selenium hinbekommen habe, bin ich jetzt den Weg über Visual Studio und C# gegangen und verwende NUnit mit Selenium und den Firefox WebDriver. Als Anleitung hat mir https://www.guru99.com/selenium-csharp-tutorial.html geholfen. Mein derzeitiger Versuch hat schon mal geklappt: Ein einfaches Anmelden im Backend und dann JSM Stammdaten über das Quick-Icon aufrufen. grafik

Also damit könnte man Tests schreiben und mit Visual Studio dann ausführen.

ortwin20000 commented 3 years ago

Ich habe jetzt ein wenig weiter gebastelt: grafik Tests aufgegliedert in Frontend und Backend: Im Frontend öffne ich die Ergebniseingabe. Im Backend erstelle ich eine neue Sportart und lösche diese danach wieder.

Grundsätzlich verstehe ich jetzt wie das funktioniert. Jetzt müsste man sich Testszenarien überlegen mit einer vordefinierten Joomla-DB. Dann könnte man für alles Tests schreiben, was auch über den Browser bewerkstelligt werden kann. Je nach Test mal einfacher mal komplizierter aufgebaut.

jst71 commented 3 years ago

Sieht richtig gut aus. Komme an diesem Wochenden leider nicht zu JSM. Werde mir das für den Test des Tippspiels nächste Woche auch mal einrichten! Kurze Nachfrage Visual Studio ist die Visual Studio Code Version, oder? Die Nutze ich eh schon zum debuggen, das wäre ja cool.

ortwin20000 commented 3 years ago

Visual Studio 2017 Community Edition verwende ich. In VS Code geht das nicht soweit ich weiß.

diddipoeler commented 3 years ago

Ich fange dann mal langsam an die Sachen zu bereinigen wenn ich Zeit habe.

ortwin20000 commented 1 year ago

Compatitbility Plugin

Ich habe bei mir Joomla 5 mit deaktiviertem Kompatibilitätsplugin die Komponenten getestet und Fehler betreffend der Namespaces in einem Fork von mir behoben. Damit konnte ich es zum Laufen bringen.

Ich habe damit aber bei Joomla 3 Probleme weil z.B. das Feld sportstypelist ursprünglich von JFormFieldList abgeleitet wurde und mit dem neuen Namespace von Joomla\CMS\Form\Field\ListField verwendet wird. Diesen Namespace gibt es aber bei Joomla 3 nicht.

@diddipoeler Wie könnte man da herangehen? Zwei use-Statements mit Alias? Geht nicht wegen der Klassen-Erweiterung. Ein neues Field deklarieren? Einmal für Joomla 3 und einmal für Joomla 4/5? Wie kriege ich dann in den XML-Dateien den type="sportstypelist" abhängig von der Version?

Ich weiß auch nicht ob wir Joomla 3 weiterhin unterstützen wollen. Ich habe bei mir kein Joomla 3 mehr im Einsatz.

diddipoeler commented 1 year ago

Wir müssen noch weiterhin Joomla 3 unterstützen. Viele haben sogar noch Joomla 2.5 :-)

ortwin20000 commented 1 year ago

Ok. Gibt es dann eine Möglichkeit bei dem Problem mit dem ListField?

diddipoeler commented 1 year ago

Wie muss denn der Code für Joomla 3 und dann für Joomla 4/5 aussehen?

ortwin20000 commented 1 year ago

Als Beispiel nehme ich mal das Feld admin/models/fields/countrylist.php her:

Hinzufügen des Namespace use Joomla\CMS\Form\Field\ListField;

Änderung der Klassendeklaration von class JFormFieldacteventtype extends \JFormFieldList auf class JFormFieldcountrylist extends ListField

Das kann aber auch noch andere betreffen wie z.B. admin/models/fields/extensionradiobutton.php use Joomla\CMS\Form\Field\ListField;

Änderung der Klassendeklaration von class JSMFormField extends JFormFieldRadio auf class JSMFormField extends RadioField

diddipoeler commented 1 year ago

Verstehe ich jetzt gerade nicht. Das hatte ich doch schon alles in der Datei admin/models/fields/extensionradiobutton.php gemacht. Hast Du dir überhaupt den Code angeschaut?

`<?php /**

/* welche joomla version ? / if (version_compare(JVERSION, '4.0.0', 'ge')) { class JSMFormField extends RadioField {

}

} else { include_once JPATH_LIBRARIES . '/joomla/form/fields/radio.php'; class JSMFormField extends JFormFieldRadio {

}

}

/**

} `

ortwin20000 commented 1 year ago

Bei dem RadioButton habe ich es nicht geprüft da ich vorher schon den Fehler mit den ListField bekommen habe aber jetzt verstehe ich wie das dort gelöst wurde. Danke dafür. Ich werde das mal mit dem ListField probieren.