[3.0] UMGT um Geburtsdatum erweitern

Im Entwickler-Forum können Implementierungsdetails sowie Alternativen der Umsetzung diskutiert werden. // Here, developers can discuss implementation details of features of their projects.
Antworten
Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

[3.0] UMGT um Geburtsdatum erweitern

Beitrag von dave » 04.09.2015, 11:30:55

Hi,

ich möchte das User-Objekt vom UMGT um ein Geburtstag erweitern. Soweit erstmal kein Hit, wenn ich mir allerdings einmal die Klasse UmgtUserBase anschaue, scheint die irgendwie automatisch erstellt worden zu sein. Im Kommentar steht nur:
You can change class "UmgtUser" which extends this base-class.
Wie gehen wir am besten vor, wenn ich nun dem User noch ein Geburtsdatum mit geben möchte? Ein Eintrag im Tracker ist dazu übrigens schon vorhanden.


Weiterhin ist mir was aufgefallen:
Wenn ich mir eine Userliste ausgeben lassen, die ich anhand des Username sortiere, passt die Reihenfolge nicht. Ich habe in wenig nachgeforscht und das Problem liegt an den verschlüsselten Daten. Username ist verschlüsselt in der DB hinterlegt, wenn der GORM nun die Daten sortiert holt, passt es, aber wenn die Daten danach entschlüsselt sind, nicht mehr. So gesehen gäbe es ja nur die Möglichkeit, das unverschlüsselte Array zu sortieren. Oder übersehe ich etwas?

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: [3.0] UMGT um Geburtsdatum erweitern

Beitrag von dr.e. » 05.09.2015, 17:51:16

Hallo dave,
ich möchte das User-Objekt vom UMGT um ein Geburtstag erweitern.
Kein Problem. Habe gesehen, du hast unter http://tracker.adventure-php-framework. ... php?id=255 schon einen Feature-Request gestellt. Diesen können wir gerne zusammen oder ich alleine umsetzen, das ist allerdings auch ohne direkten Support vom APF kein Hexenwerk.
Soweit erstmal kein Hit, wenn ich mir allerdings einmal die Klasse UmgtUserBase anschaue, scheint die irgendwie automatisch erstellt worden zu sein.
Korrekt. Wenn du mit dem GORM automatisiert Domänen-Objekte generiert - so beispielsweise auch für das UMGT - wird zunächst eine *Base-Klasse angelegt, die lediglich dazu dient, sprechende Methoden für den Zugriff auf Attribute bereitzustellen. Diese darf auch nicht verändert werden. Details dazu unter http://adventure-php-framework.org/Seit ... enerierung.

Möchtest du eigene Funktionalitäten oder weitere Methoden dazufügen kannst du das innerhalb derentsprechenden Haupt-Klasse tun - im Fall des UMGT die UmgtUser-Klasse.

Da das UMGT vom APF mitgeliefert wird schlage ich zunächst vor, dass wir einfach deine lokale Installation so erweitern, dass ein neues Feld in der Datenbank hinzugefügt und dein (neues) Domänen-Objekt eine entsprechende Methode besitzt. Das geht wie folgt:

1) Erweiterung der Konfiguration:
Hierzu fügst du zunächst in der DEFAULT_umgt_objects.ini ein neues Feld zum Objekt User hinzu. Beispiel:

Code: Alles auswählen

[User]
DisplayName = "VARCHAR(100)"
FirstName = "VARCHAR(100)"
LastName = "VARCHAR(100)"
StreetName = "VARCHAR(100)"
StreetNumber = "VARCHAR(100)"
ZIPCode = "VARCHAR(100)"
City = "VARCHAR(100)"
EMail = "VARCHAR(100)"
Phone = "VARCHAR(100)"
Mobile = "VARCHAR(100)"
Username = "VARCHAR(100)"
Password = "VARCHAR(100)"
DynamicSalt = "VARCHAR(50)"
Birthday = "DATE NOT NULL FORMAT 'YYYY-MM-DD'"
2) Update der Datenbank:
Anschließend aktualisierst du deine Datenbank mit Hilfe des GenericORMapperManagementTools. Beispiel:

Code: Alles auswählen

// Einbinden der APF Bootstrap-Datei
require('./APF/core/bootstrap.php');

use APF\modules\genericormapper\data\tools\GenericORMapperManagementTool;

$update = new GenericORMapperManagementTool();
$update->setContext('{CONTEXT}');

// ... hier ALLE Mappings und Beziehungen eintragen, die du für deine Applikation nutzt (UMGT + Applikation) 
$update->addMappingConfiguration('{CONFIG_NAMESPACE}', '{CONFIG_NAME_AFFIX}');
$update->addRelationConfiguration('{CONFIG_NAMESPACE}', '{CONFIG_NAME_AFFIX}');

$update->setConnectionName('{CONNECTION_NAME}');

$update->run(true); 
3) Erweiterung des UmgtUser:
Nachdem die Datenbank erweitert ist kannst du nun das Domänen-Objekt erweitern. In diesem Fall ist UmgtUser nicht dein "eigenes" Objekt, sondern wird mit dem APF mitgeliefert. Um sicherzustellen, dass deine Erweiterung nicht mit den nächsten APF-Update überschrieben wird, schlage ich vor ein eigenes Domänen-Objekt mit der gewünschten Funktionalität zu erstellen. Dieses können wir anschließend in die reguläre Konfiguration einhängen und alles funktioniert wie gewohnt.

Du erstellst dir nun eine Klasse mit der gewünschten Funktionalität (Auslesen und Setzen des Geburtsdatums) als Erweiterung von UmgtUser:

Code: Alles auswählen

namespace MY\app\namespace;

use APF\modules\usermanagement\biz\model\UmgtUser;
use DateTime;

class UmgtUserWithBirthday extends UmgtUser {

   const DATE_FORMAT = 'Y-m-d';

   /**
    * @return DateTime
    */
   public function getBirthday() {
      return DateTime::createFromFormat(self::DATE_FORMAT, $this->getProperty('Birthday'));
   }

   /**
    * @param DateTime $birthday
    *
    * @return $this
    */
   public function setBirthday(DateTime $birthday) {
      $this->setProperty('Birthday', $birthday->format(self::DATE_FORMAT));

      return $this;
   }

} 
4) Erweiterung der Domänen-Objekt-Konfiguration:
Damit der GORM und damit das UMGT und damit wiederum deine Applikation UmgtUserWithBirthday nutzt musst du

Code: Alles auswählen

[User]
Class = "APF\modules\usermanagement\biz\model\UmgtUser"
nun durch

Code: Alles auswählen

[User]
Class = "MY\app\namespace\UmgtUserWithBirthday"
in der DEFAULT_umgt_domainobjects.ini ersetzen.

Fertig! :)
Wenn ich mir eine Userliste ausgeben lassen, die ich anhand des Username sortiere, passt die Reihenfolge nicht. Ich habe in wenig nachgeforscht und das Problem liegt an den verschlüsselten Daten. Username ist verschlüsselt in der DB hinterlegt, wenn der GORM nun die Daten sortiert holt, passt es, aber wenn die Daten danach entschlüsselt sind, nicht mehr. So gesehen gäbe es ja nur die Möglichkeit, das unverschlüsselte Array zu sortieren. Oder übersehe ich etwas?
Korrekt, das liegt an der Verschlüsselung. Sofern du UserFieldEncryptionProvider::$encryptedFieldNames allerdings auf null gesetzt hast, sollte keine Ver- und Entschlüsselung stattfinden. Sofern die Verschlüsselung eingeschalten ist hast du definitiv diesen Nachteil. Ich wüsste aus dem Stegreif auch nicht, wie man das ohne nachträgliche Sortierung nach dem Laden lösen sollte.
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [3.0] UMGT um Geburtsdatum erweitern

Beitrag von dave » 05.09.2015, 18:18:53

dr.e. hat geschrieben: Korrekt. Wenn du mit dem GORM automatisiert Domänen-Objekte generiert - so beispielsweise auch für das UMGT - wird zunächst eine *Base-Klasse angelegt, die lediglich dazu dient, sprechende Methoden für den Zugriff auf Attribute bereitzustellen. Diese darf auch nicht verändert werden. Details dazu unter http://adventure-php-framework.org/Seit ... enerierung.
Genial, den Teil habe ich bisher immer übersprungen. Habe es mir jetzt angeschaut und es ist ja einfach nur genial, was der GORM noch alles für mich leistet. Ich werde das am Montag einmal durch spielen und mir ein kleines eigenes Domänen-Objekt erstellen.

Ansonsten soweit vielen Dank für deine ausführlichen Ausführungen. Spätestens zum Dienstag sollte ich das integriert haben und wir können das dann einmal testen, um das auch vollständig ins UMGT zu übernehmen. Ich bin mir sicher, dass das an der ein oder anderen Stelle durchaus noch interessant sein könnte.
dr.e. hat geschrieben: Korrekt, das liegt an der Verschlüsselung. Sofern du UserFieldEncryptionProvider::$encryptedFieldNames allerdings auf null gesetzt hast, sollte keine Ver- und Entschlüsselung stattfinden. Sofern die Verschlüsselung eingeschalten ist hast du definitiv diesen Nachteil. Ich wüsste aus dem Stegreif auch nicht, wie man das ohne nachträgliche Sortierung nach dem Laden lösen sollte.
Ok, soweit sind meine Recherchen ja auch gekommen. Kein Problem, damit können wir erstmal leben. Ich schaue mal, ob ein kleiner Hinweis in der Doku angebracht wäre ;)

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: [3.0] UMGT um Geburtsdatum erweitern

Beitrag von dr.e. » 05.09.2015, 19:03:40

Freue mich, dass ich dir helfen konnte. Für die fehlende Doku habe ich unter http://tracker.adventure-php-framework. ... php?id=259 einen Eintrag erstellt.
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [3.0] UMGT um Geburtsdatum erweitern

Beitrag von dave » 27.10.2015, 11:59:03

Hi Christian,

ich habe mich heute endlich mal an das Thema gewagt. Ich muss schon sagen: Genial! Es hat alles ohne Probleme geklappt.
Ich habe diesbezüglich auch gleich die Änderung im master-branch im GIT eingecheckt. Du kannst es ja nochmal einsehen und zurück spielen, sollte es ein Problem geben. Wenn ich dein Ok dann soweit habe, werde ich die Formulare etc. noch um die Funktion erweitern.

Dann auch gleich ncoh eine Frage: Wie kann ich die geänderte config einchecken? Gibt's dafür einen sepearten Zweig? Ich bin mit dem GIT-Repository (noch) nicht so bewandert und bin sehr froh, dass es dafür auch eine Windows-Anwendung für Dummys gibt :lol:

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: [3.0] UMGT um Geburtsdatum erweitern

Beitrag von dr.e. » 29.10.2015, 15:57:31

Hallo dave,

sorry für meine späte Antwort! Hatte mir ein Lesezeichen gesetzt, das dann aber vergessen. :roll: :)
ich habe mich heute endlich mal an das Thema gewagt. Ich muss schon sagen: Genial! Es hat alles ohne Probleme geklappt.
Freut mich sehr! :)
Ich habe diesbezüglich auch gleich die Änderung im master-branch im GIT eingecheckt. Du kannst es ja nochmal einsehen und zurück spielen, sollte es ein Problem geben. Wenn ich dein Ok dann soweit habe, werde ich die Formulare etc. noch um die Funktion erweitern.
Habe bisher keine Änderungen unter https://github.com/AdventurePHP/code/commits/master von dir gesehen. Kann es sein, dass du es nicht gepushed hast?
Dann auch gleich ncoh eine Frage: Wie kann ich die geänderte config einchecken? Gibt's dafür einen sepearten Zweig? Ich bin mit dem GIT-Repository (noch) nicht so bewandert und bin sehr froh, dass es dafür auch eine Windows-Anwendung für Dummys gibt :lol:
Schau dir mal http://wiki.adventure-php-framework.org/GIT_Repository an, da sind die Repos beschrieben. Änderungen an der Konfiguration committest du unter dem "config"-Repo (siehe https://github.com/AdventurePHP/config/commits/master).
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [3.0] UMGT um Geburtsdatum erweitern

Beitrag von dave » 30.10.2015, 10:20:43

Leider kann ich meine Änderung nicht in den master pushen. Die Funktion dafür ist bei mir ausgegraut. Fehlt mir möglicherweise eine Berechtigung dafür auf GitHub.com? Kannst du diesbezüglich bitte einmal nachsehen?

Ansonsten habe ich die einzelnen Repos nun gesehen und habs verstanden. Da kann aj jetzt fast nichts mehr schief gehen :lol:

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: [3.0] UMGT um Geburtsdatum erweitern

Beitrag von dr.e. » 30.10.2015, 23:46:32

Findest du deinen Account unter https://github.com/orgs/AdventurePHP/people? Falls nicht, schicke mir bitte eine PN mit deinem Account, dann trage ich dich ein. Alternativ dazu kannst du das Repo jederzeit unter deinem Account forken und einen Pull-Request an das Origina-Repo stellen. Letzteres wird üblicherweise genutzt, wenn du kein direkter Contributor bist. In deinem Fall kein Problem, ich füge dich direkt hinzu.

Sollte das nicht helfen, kann es sein, dass dein lokaler Clone keine Upstream-Konfiguration hat, sprich kein "remote" konfiguriert hat. Doku/Hilfe siehe z.B. https://git-scm.com/docs/git-remote.html.

Hoffe das hilft! :)
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [3.0] UMGT um Geburtsdatum erweitern

Beitrag von dave » 03.11.2015, 17:33:53

dr.e. hat geschrieben:Findest du deinen Account unter https://github.com/orgs/AdventurePHP/people?
Dort finde ich meinen Account. Ich habe eben versucht, einen neuen Branch zu erstellen, allerdings habe ich dann beim veröffentlichen einen Fehler erhalten:
Unbenannt.PNG
Unbenannt.PNG (9.39 KiB) 810 mal betrachtet
Keine Rechte :/

Ich muss schon sagen: So ein Repository ist schon schön aber irgendwie verstehe ich die Bedienung nicht :roll:

[edit 1] Hab da noch was gefunden:
https://github.com/orgs/AdventurePHP/te ... positories
Wir als Team dürfen nicht in den Code-branch.

[edit 2] Ich habe das APF jetzt mal in meinem Git-Account geklont und dort habe ich dann auch die Änderungen eingepflegt.
https://github.com/der-dave/APF-code/co ... 2b9f175a39
Bitte einmal darüber schauen, ob das so Ok ist. Du kannst das dann auch direkt in das offizielle APF übernehmen ;)

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: [3.0] UMGT um Geburtsdatum erweitern

Beitrag von dr.e. » 04.11.2015, 19:14:40

Hi dave,

habe die Rechte des Repos angepasst! Aus irgendwelchen Gründen waren da wirklich nur Tools und Config drin.

Habe mir deinen Branch angesehen und mir ist aufgefallen, dass die Reset-Funktionalität aktuell kein Captcha einbindet. Das würde einem Angreifer erlauben eine Bruteforce-Attacke dagegen zu fahren ohne dass du ihn aufhalten könntest. Ich schlage vor ein Captcha oder auch direkt ReCaptcha einzubauen.

Was das HTML angeht würde ich noch versuchen das Formular zu strukturieren um das Styling zu erleichtern. Schau dir mal die anderen Templates an, ob wir das so übernehmen könnten.
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [3.0] UMGT um Geburtsdatum erweitern

Beitrag von dave » 19.01.2016, 14:15:13

Hallo Christian,
ich fange mal wieder langsam an ;)

Ich habe gestern einmal Github für meinen Desktop gestartet und gesynct. Es wurde dann scheinbar auch gleich von mir etwas erfolgreich eingecheckt:
https://github.com/AdventurePHP/code/co ... 6e32148a08

Kannst du das bitte einmal bestätigen, ob das OK ist. Dann würde ich nämlich die Templates und Controller für das Geburtsdatum noch nachreichen.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: [3.0] UMGT um Geburtsdatum erweitern

Beitrag von dr.e. » 19.01.2016, 22:38:47

Hi dave,

nachdem ich noch keine Antwort von dir hatte, habe ich mich heute Abend um die Implementierung inkl. Update aller Konfigurationen gekümmert - sorry, dass wir uns da jetzt überschnitten haben :roll: . Siehe mein Commits
Letzterer ist ein reverse-merge deiner Änderung, damit die Benamung der Methoden konsistent ist - getDateOfBirth() für das Feld direkt aus der Datenbank und getBirthday() für das Auslesen einer DateTime-Instanz.

Magst du meine Commits im Gegenzug reviewen und checken, ob bei dir alles funktioniert?
Viele Grüße,
Christian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: [3.0] UMGT um Geburtsdatum erweitern

Beitrag von dr.e. » 19.01.2016, 22:41:31

Nachtrag, alle Commits (auch in den Repos config und examples) findest du unter http://tracker.adventure-php-framework. ... d=255#c661.
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [3.0] UMGT um Geburtsdatum erweitern

Beitrag von dave » 20.01.2016, 13:10:52

Hallo Christian,
habe bei mir alles auf einen neuen Stand gebracht. Funktioniert alles einwandfrei. Super Arbeit von dir.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: [3.0] UMGT um Geburtsdatum erweitern

Beitrag von dr.e. » 20.01.2016, 15:30:11

Super, freut mich! :)
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste