Jefferson49 / ExtendedImportExport

A webtrees 2.1 custom module for advanced GEDCOM import, export ,and filter operations. The module also supports remote downloads/uploads via URL requests.
GNU General Public License v3.0
5 stars 1 forks source link

Submitter/submission (HEAD:SUBM, HEAD:SUBN) is not exported in GEDCOM header, if no Manager is logged in #9

Closed WeT-Klb closed 1 year ago

WeT-Klb commented 1 year ago

Mit "DownloadGedcomWithURL" lasse ich täglich meine GEDCOM-Datei aus Webtrees erzeugen. Wenn ich diese mit GedcomValidator anschaue, erscheint jedesmal der Hinweis, daß "SUBM" unter "HEAD" fehlen würde. Erzeuge ich die GEDCOM-Datei im PlugIn manuell, ist dieser Hinweis nicht mehr vorhanden. Ich habe mal beide Files gesichert, würde sie aber ungern hier in der Öffentlichkeit hochladen.

Jefferson49 commented 1 year ago

Hi Werner,

eine Erklärung könnte sein, dass es spezielle Zugriffsrechte für Dein Submitter Objekt gibt. Kannst Du das unter HEAD in webtrees anschauen (HEAD in Suchfeld eingeben)?

Bei DownloadGedcomWithURL dann auch die Rechte (privacy level) für den Export prüfen. In URL: &privacy=... und in den Default Settings unter Verwaltung.

image

Grüße

Markus

WeT-Klb commented 1 year ago

Hallo Markus,

in Webtrees habe ich ja unter "HEAD" die Eintragung vorgenommen.

Die Einstellung in DownloadGedcomWithURL habe ich so stehen, wie Du es gezeigt hast.

Ich habe auch mal mit "Herunterladen" und "Save" gespielt - macht keine Änderung.

Ich verstehe aber nicht ganz, was Du mit

In URL: &privacy=... und in den DefaultSettings unter Verwaltung.<<

meinst bzw. wie und wo genau ich da was prüfen soll.

Wie gesagt, wenn das Modul die Gedcom selber erzeugt, fehlt der Eintrag zu SUBM. Wenn ich im Modul ganz unten auf "Herunterladen testen" klicke und diese Gedcom-Datei überprüfen lasse, funktioniert alles und der SUBM-Eintrag ist auch vorhanden.

Von: Jefferson49 @.*** Gesendet: Donnerstag, 21. September 2023 11:16 An: Jefferson49/DownloadGedcomWithURL Cc: Werner; Author Betreff: Re: [Jefferson49/DownloadGedcomWithURL] Automatisch erzeugtes Gedcom-File unterscheidet sich von manuell erzeugtem (Issue #9)

Hi Werner,

eine Erklärung könnte sein, dass es spezielle Zugriffsrechte für Dein Submitter Objekt gibt. Kannst Du das unter HEAD in webtrees anschauen (HEAD in Suchfeld eingeben)?

Bei DownloadGedcomWithURL dann auch die Rechte (privacy level) für den Export prüfen. In URL: &privacy=... und in den Default Settings unter Verwaltung.

https://user-images.githubusercontent.com/81484983/269559789-cf2c9eb6-aaf7- 4f63-b3ef-7438186f04ce.jpeg image

Grüße

Markus

— Reply to this email directly, view it on GitHub https://github.com/Jefferson49/DownloadGedcomWithURL/issues/9#issuecomment- 1729179945 , or unsubscribe https://github.com/notifications/unsubscribe-auth/AE5FMFWOTWCWWGCOS4DHET3X3 QATBANCNFSM6AAAAAA5A6YQYE . You are receiving this because you authored the thread. https://github.com/notifications/beacon/AE5FMFTZQU6UN4XUHMY55WTX3QATBA5CNFS M6AAAAAA5A6YQYGWGG33NNVSW45C7OR4XAZNMJFZXG5LFINXW23LFNZ2KUY3PNVWWK3TUL5UWJTT HCEYSS.gif Message ID: @.***>

Jefferson49 commented 1 year ago

Ok, wenn es in der Verwaltung funktioniert, sind die dortigen Einstellungen ok.

Verbleibt noch der Aufruf in der URL.

Ich verstehe aber nicht ganz, was Du mit

In URL: &privacy=... und in den DefaultSettings unter Verwaltung.<< meinst bzw. wie und wo genau ich da was prüfen soll.

Mit dem Aufruf in der URL kannst die gleichen Einstellungen wie auch in der webtrees Verwaltung beeinflussen. Wenn Du also "&privacy=visitor" in Deine URL einfügst, hat das die gleichen Auswirkungen, wie wenn Du exportieren als "Besucher" im Browser auswählst. Wenn die URL nichts enthält, wird der Default Wert aus der Verwaltung genommen.

Wenn also eine Einstellung in der URL enthalten ist, solltest Du diese vielleicht einfach löschen.

WeT-Klb commented 1 year ago

Meinen Link zum Download lasse ich täglich so aufrufen:

wget --timeout=60 --tries=1 "https://My-DOMAIN/webtrees/index.php?route=/webtrees/DownloadGedcomWithURL&tree=tree1&key=xxxxxxxxxxxxx&privacy=none&format=gedcom&encoding=UTF-8&line_endings=CRLF&action=save"

Ich habe den kompletten Pfad auch einmal manuell ausgeführt - auch da fehlt die Angabe des SUBM.

Dann habe ich noch https://My-Domain/webtrees/index.php?route=/webtrees/DownloadGedcomWithURL&tree=tree1&key=xxxxxxxxxxxxx versucht - auch da fehlt SUBM.

Mit dem "Test-Button" im Modul selbst funktioniert es aber korrekt.

Jefferson49 commented 1 year ago

Ok, das sieht eigentlich alles vernünftig aus.

Muss erst Mal nachdenken und selber ein paar Versuche starten.

WeT-Klb commented 1 year ago

Na klar, ist ja nicht so brisant.

Wenn Du willst, kann ich Dir auch mal beide Gedcoms zuschicken - nur nicht hier in der Öffentlichkeit.

Vielleicht kannst Du hier was sehen?

Von: Jefferson49 @.*** Gesendet: Donnerstag, 21. September 2023 15:18 An: Jefferson49/DownloadGedcomWithURL Cc: Werner; Author Betreff: Re: [Jefferson49/DownloadGedcomWithURL] Automatisch erzeugtes Gedcom-File unterscheidet sich von manuell erzeugtem (Issue #9)

Ok, das sieht eigentlich alles vernünftig aus.

Muss erst Mal nachdenken und selber ein paar Versuche starten.

— Reply to this email directly, view it on GitHub https://github.com/Jefferson49/DownloadGedcomWithURL/issues/9#issuecomment-1729569812 , or unsubscribe https://github.com/notifications/unsubscribe-auth/AE5FMFSC66CVB2JLXHFSLSTX3Q5AXANCNFSM6AAAAAA5A6YQYE . You are receiving this because you authored the thread. https://github.com/notifications/beacon/AE5FMFWKATTNYZZPUAFGXCDX3Q5AXA5CNFSM6AAAAAA5A6YQYGWGG33NNVSW45C7OR4XAZNMJFZXG5LFINXW23LFNZ2KUY3PNVWWK3TUL5UWJTTHC4SBI.gif Message ID: @.***>

Jefferson49 commented 1 year ago

Habe ein paar Themen angeschaut; bin aber noch nicht weitergekommen.

Habe nun eine Debug-Version für die Datei DownloadGedcomWithURL.php erstellt. Kannst Du diese Datei bei Dir mit der beiliegenden Datei ersetzen und dann jeweils einen Testdownload (in der Verwaltung) und einen URL-Download (https://my-domain/webtrees/index.php?route=/webtrees/DownloadGedcomWithURL&tree=tree1&key=xxxxxxxxxxxxx) durchführen?

Anschließend werden jeweils Debug-Informationen ausgegeben. Gibt es hier einen Unterschied zwischen den beiden Ausgaben?

Die Debug-Version gibt folgende Informationen aus:

Debug info "DownloadGedcomWithURL":
$tree_name: test
$file_name: test
$format: gedcom
$privacy: none
$encoding: UTF-8
$line_endings: CRLF
$gedcom7: false
$gedcom_l: false
$action: save
$time_stamp: none

DownloadGedcomWithURL.zip

WeT-Klb commented 1 year ago

Hallo,

ich habe die Debug-Version probiert - aber keine Unterschiede festgestellt. Ich habe beide Screenshots angefügt.

Sicherung per Modul: Sicherung per Modul

Sicherung per URL: Sicherung per URL

Jefferson49 commented 1 year ago

Danke für die Daten. Das ist wirklich sehr merkwürdig. Wenn das Programm jeweils mit den gleichen Daten aufgerufen wird, sollte eigentlich das gleiche passieren.

Beim Aufruf aus der Verwaltung hat man Manager Rechte. Vielleicht resultiert daraus irgendein Unterschied bei der weiteren Verarbeitung innerhalb von webtrees.

WeT-Klb commented 1 year ago

Ich habe jetzt vier Varianten probiert:

  1. Download der Gedcom-Datei automatisiert über einen CRON-Job direkt auf der NAS

  2. Download der Gedcom-Datei per URL-Aufruf

  3. Download der Gedcom-Datei aus dem Modul heraus

  4. Export der Gedcom-Datei direkt aus Webtrees-Verwaltung

Bei Punkt 1 und 2 fehlt der SUBM-Eintrag, bei 3 und 4 ist er vorhanden.

Ich weiß nicht, ob das weiterhilft.

Läßt sich mit einer Debug-Version feststellen, mit welchen Rechten bzw. User die (jeweilige) Aktion ausgeführt wird?

Jefferson49 commented 1 year ago

Bei Punkt 1 und 2 fehlt der SUBM-Eintrag, bei 3 und 4 ist er vorhanden.

Ja, das passt zu den bisherigen Erkenntnissen: Immer, wenn der Aufruf über das User Interface von webtrees ausgelöst wird (bei 3 und 4), funktioniert es. Wenn der Aufruf über eine URL erfolgt (Punkt 1 und 2), funktioniert es nicht.

Jefferson49 commented 1 year ago

Habe nun eine konkrete Stelle im webtrees Code im Verdacht, dass dort die Ursache liegt. Um das einzugrenzen, habe ich nochmal eine Debug-Version für eine Code-Datei erstellt, siehe Anhang. Es würde mir helfen, wenn Du temporär die webtrees-Datei "\webtrees\app\Services\GedcomExportService" ersetzen könntest und dann nochmal die obigen Versuche startest. Bitte die alte Datei vorher sichern und anschließend wieder zurückspielen.

Es müsste folgende Debug-Information erscheinen:

Debug info from: "GedcomExportService":
$facts_in_header: 8

Im Gutfall sollte $facts_in_header größer Null sein. Im Schlechtfall (Submitter fehlt) sollte $facts_in_header entweder Null sein oder kleiner als im Gutfall.

Anmerkung: Die vorherige Debug-Version für die Datei "DownloadGedcomWithURL.php" kannst Du auch wieder durch die ursprüngliche Datei ersetzen.

GedcomExportService.zip

Jefferson49 commented 1 year ago

Parallel wäre es auch hilfreich, wenn Du die beiden Header der Gedcom-Dateien (ganz am Anfang) vergleichen könntest.

Im Gutfall sollte es ca. wie folgt aussehen:

0 HEAD
1 SOUR webtrees
2 NAME webtrees
2 VERS 2.1.17
1 DEST DISKETTE
1 DATE 23 SEP 2023
2 TIME 20:26:47
1 GEDC
2 VERS 5.5.1
2 FORM LINEAGE-LINKED
1 CHAR UTF-8
1 FILE test.ged
1 LANG German
1 SUBM @SUB1@

Im Schlechtfall sollten nach der Zeile "1 FILE ..." keine weiteren Zeilen enthalten sein. Das Fehlen des "1 SUBM ..." Eintrags ist ja der Kern dieses ganzen Themas.

Jefferson49 commented 1 year ago

Im webtrees Code für Gedcom-Exporte werden "Ausstehende Änderungen" berücksichtigt. Vielleicht gibt es hier eine Wechselwirkung. Kannst Du prüfen, ob Du evtl. ausstehende Änderungen für HEAD bzw. submitter hast?

WeT-Klb commented 1 year ago

Ausstehende Änderungen habe ich keine anstehen. Zu Deiner webtrees-Debug-Version: Ich erhalte beim Export direkt aus webtrees keine Anzeige, so wie Du beschrieben hast. Bei Aufruf per URL funktioniert die Anzeige aber.

Export aus der Verwaltung von webtrees: 0 HEAD 1 SOUR webtrees 2 NAME webtrees 2 VERS 2.1.17 1 DEST DISKETTE 1 DATE 24 SEP 2023 2 TIME 07:33:35 1 GEDC 2 VERS 5.5.1 2 FORM LINEAGE-LINKED 1 CHAR UTF-8 1 FILE tree1.ged 1 SUBM @X789@ 1 SUBN @X822@

Aufruf per URL: Aufruf per URL

0 HEAD 1 SOUR webtrees 2 NAME webtrees 2 VERS 2.1.17 1 DEST DISKETTE 1 DATE 24 SEP 2023 2 TIME 07:44:25 1 GEDC 2 VERS 5.5.1 2 FORM LINEAGE-LINKED 1 CHAR UTF-8 1 FILE tree1.ged

Aufruf aus Modul: Aufruf aus Modul

0 HEAD 1 SOUR webtrees 2 NAME webtrees 2 VERS 2.1.17 1 DEST DISKETTE 1 DATE 24 SEP 2023 2 TIME 07:48:44 1 GEDC 2 VERS 5.5.1 2 FORM LINEAGE-LINKED 1 CHAR UTF-8 1 FILE tree1.ged 1 SUBM @X789@ 1 SUBN @X822@

Interessanterweise kommt bei beiden über DownloadGedcomWithURL als facts_in_header: 7, trotzdem wird bei Aufruf per URL der SUBM nicht angezeigt, bei Aufruf aus dem Modul schon. Auch wir bei Aufruf per URL die Meldung 3x angezeigt - siehe Screenshots. Ich kriege es nicht gebacken, daß im Code hier die Zeilenumbrüche dargestellt werden.

Jefferson49 commented 1 year ago

Irgendwie kann man immer mehr Dinge ausschließen und es scheint nicht mehr viel übrig zu bleiben. Anbei nochmal eine erweiterte Debug-Version, welche noch 2 weitere verbleibende Werte aus dem Code anzeigt.

GedcomExportService v2.zip

Jefferson49 commented 1 year ago

Auch wir bei Aufruf per URL die Meldung 3x angezeigt

Ist das reproduzierbar, d.h. es werden jedes Mal 3 Meldungen angezeigt? Manchmal scheint webtrees auch Meldungen anzuzeigen, die von einem früheren Aufruf stammen und in einem Zwischenspeicher gelandet sind.

WeT-Klb commented 1 year ago

Ich habe nochmal mit der ersten Debug-Version von GedcomExportService den URL-Aufruf gestartet. Diesmal kam nur einmal die Meldung - dafür aber mit $facts_in_header: 4 und jetzt wir es lustig: Wenn ich nun webtrees aufrufe und mich einlogge, sehe ich $facts_in_header: 7

URL-Aufruf ausgeloggt: URL-Aufruf V1 Pic 1

Die gleiche Seite nach dem Einloggen: URL-Aufruf V1 Pic 2

Ich glaube, jetzt bin ich einen Schritt weiter:

Wenn ich in webtrees eingeloggt bin und den URL-Aufruf starte, wird SUBM mit ausgegeben. Wenn ich aus webtrees ausgeloggt bin und den Aufruf URL-Aufruf starte, fehlt der SUBM-Eintrag.

Kannst Du damit was anfangen? . . . . . Bei Debug V2 sehen die Bilder so aus - das Verhalten ist aber gleich:

URL-Aufruf ausgeloggt: URL-Aufruf V2 Pic 1

Die gleiche Seite nach dem Einloggen: URL-Aufruf V2 Pic 2

Die Ausgabe der Gedcom-Datei und deren Inhalt hängt also davon ab, ob man in webtrees eingeloggt ist oder nicht! Macht es einen Unterschied, daß ich SUBM nicht in der Verwaltung unter Stammbaum sondern direkt im HEADER definiert habe?

Jefferson49 commented 1 year ago

Die Ausgabe der Gedcom-Datei und deren Inhalt hängt also davon ab, ob man in webtrees eingeloggt ist oder nicht!

Das passt ins Bild. Ich hatte schon länger die Vermutung, dass das Verhalten von den Nutzer-Rechten abhängt.

Die Ausgabe von 7 bzw 4 Facts ist nun auch der Beweis, dass es von der vermuteten Code-Zeile abhängt. Werde dort nochmal genauer schauen und ansonsten im Forum nachfragen

Jefferson49 commented 1 year ago

Macht es einen Unterschied, daß ich SUBM nicht in der Verwaltung unter Stammbaum sondern direkt im HEADER definiert habe?

In dieser Richtung würde ich auch nach einer Erklärung suchen. Habe beim Herumprobieren auch schon festgestellt, dass man zum Editieren von HEAD (über Suchfeld) Adminrechte benötigt. Vielleicht speichert webtrees das dann mit besonderen Zugriffsrechten ab. Wobei es bei mir funktioniert. Es muss also noch eine weitere Bedingung dazu kommen.

Jefferson49 commented 1 year ago

Habe bei mir nun auch ein Beispiel erzeugen können, wo der Fehler reproduzierbar auftritt. Das macht Vieles einfacher, da ich nun konkret im Code debuggen kann.

Eine erste Erkenntnis ist, dass die Unterdrückung des Exports an den Datenschutzeinstellungen liegt. Wenn man in der Verwaltung für einen Stammbaum den Datenschutz aufruft, können dort Restriktionen für bestimmte Daten festgelegt werden. Beim Neuanlegen eines Stammbaums legt webtrees offensichtlich standardmäßig eine Restriktion für Übermittler an, siehe Screenshot. Aufgrund dieser Restriktion wird der Übermittler in bestimmten Fällen nicht exportiert. Wenn man als Verwalter angemeldet ist, funktioniert es jedoch.

submitter_visible_for_admin

Ein schneller Workaround wäre, die Restriktion für den Übermittler im Datenschutz zu löschen. Bei mir funktioniert dann der Export auch, wenn kein Verwalter angemeldet ist. Das könnte Dir vielleicht auch kurzfristig weiterhelfen.

Bzgl. einer grundsätzlichen Lösung muss ich noch weiter testen und nachdenken. Kann jetzt aber deutlich länger dauern, da ich in nächster Zeit nicht so viel dazukommen werde.

Jefferson49 commented 1 year ago

Webtrees scheint hier tatsächlich einen Fehler zu haben. Beim Export werden für Header-Daten nicht die angeforderte Rechte-Einstellungen sondern die Rechte des eingeloggten Users herangezogen.

Mit dem beiliegenden Patch müsste der Fehler behoben sein. Bei meinen Tests hat es damit funktioniert.

Werde ein Issue bei webtrees melden. Nachdem es auch beim normalen Export aus der Verwaltung heraus ein reproduzierbares Fehlverhalten gibt, stehen die Chancen vmtl. ganz gut, dass es gefixt wird.

GedcomExportService_v3.zip

WeT-Klb commented 1 year ago

Hallo Markus,

mit der V3 funktioniert der Export tadellos. Vielen Dank dafür. Mal sehen, ob das in webtrees gefixt wird. Hast Du einen Link zu diesem Issue in webtrees?

Jefferson49 commented 1 year ago

Bei webtrees als Issue 4883 gemeldet.

Jefferson49 commented 1 year ago

Pull Request 4884 mit Vorschlag für Code Änderungen.

Jefferson49 commented 1 year ago

Auf Basis des Feedbacks zum webtrees Issue anbei ein Update für den Patch.

Änderung: Ein SUBM Eintrag soll immer generiert werden, selbst wenn es den Datenschutz-Regeln widerspricht. Argumentation: Vermeidung eines nicht Standard konformen GEDCOM Exports hat höhere Priorität als Datenschutz.

GedcomExportService_v4.zip

WeT-Klb commented 1 year ago

Vielen Dank für die Info und die V4.

Jefferson49 commented 1 year ago

Da es bei webtrees wohl keine Änderung gibt, habe ich nun den Code von DownloadGedcomWithURL angepasst. Anbei zum Test eine beta Version.

Wichtig: Da der Bugfix nun im Custom Module enthalten ist, unbedingt wieder die original webtrees Datei für GedcomExportService.php benutzen.

download_gedcom_with_url_v3.2.2beta.zip

WeT-Klb commented 1 year ago

Im Moment sieht das super aus - vielen Dank für Dein Engagement. Nur ein Hinweis: In der "DownloadGedcomWithURL.php" steht noch die Version 3.2.1 anstelle 3.2.2beta.

Jefferson49 commented 1 year ago

Habe jetzt eine Version 3.2.2 als Release veröffentlicht.

WeT-Klb commented 1 year ago

Super - vielen Dank. Läuft im Moment 1a!