[BUG 4.9.8] PIM: DB-Einträge werden nicht entfernt

Alle bestätigten Fehler in CONTENIDO 4.9 (erledigte Fehler werden durch geschlossene Beiträge gekennzeichnet).
Antworten
Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

[BUG 4.9.8] PIM: DB-Einträge werden nicht entfernt

Beitrag von Oldperl » Mi 9. Sep 2015, 10:47

Servus,

bei der Deinstallation eines Plugins werden nicht immer alle Systemeinträge des Plugins entfernt. Aufgefallen ist mir das bei der Entwicklung meines Plugins zum Modul-Repository. Dazu wollte ich einfach vorhandene Backend-Bereiche mit einem zusätzlichen Eintrag eines Framefiles erweitern.

Code: Alles auswählen

<contenido>
        <areas> 
        </areas>
        <actions>
        </actions>
        <frames>
            <frame area="mod" filetype="main" name="org.conrepo.repository/includes/include.org.conrepo.repository_module.php" frameId="4" />
        </frames>
        <nav_sub>
        </nav_sub>
    </contenido>
Bei der Installation wird der Eintrag auch korrekt erstellt. Nur bei der Deinstallation wird er nicht gelöscht. Offensichtlich wird hier das Ein- und Austragen anders gehandhabt, denn es fehlt nach der Installation auch der Eintrag in con_plugins_rel.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

frederic.schneider_4fb
Beiträge: 967
Registriert: Do 15. Apr 2004, 17:12
Wohnort: Eschborn-Niederhöchstadt
Kontaktdaten:

Re: [BUG 4.9.8] PIM: DB-Einträge werden nicht entfernt

Beitrag von frederic.schneider_4fb » Mi 9. Sep 2015, 11:08

Kannst Du mir das Plugin bitte mal an frederic.schneider@4fb.de schicken? Gerne auch mit leeren HTML- und PHP-Dateien, mir geht es nur darum, das Plugin zu installieren und zu deinstallieren
Frederic Schneider
Entwickler bei der four for business AG

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: [BUG 4.9.8] PIM: DB-Einträge werden nicht entfernt

Beitrag von Oldperl » Mi 9. Sep 2015, 11:47

Hallo Frederic,

du brauchst eigentlich nur bei einem Plugin den xml-Teil analog zu meinem Posting eintragen und beim (De-)Installieren jeweils in die DB reinschauen. Das komplette File-Handling in den entsprechenden Tabellen bleibt bzw. wird bei jedem Install um einen Eintrag zusätzlich erhöht.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

frederic.schneider_4fb
Beiträge: 967
Registriert: Do 15. Apr 2004, 17:12
Wohnort: Eschborn-Niederhöchstadt
Kontaktdaten:

Re: [BUG 4.9.8] PIM: DB-Einträge werden nicht entfernt

Beitrag von frederic.schneider_4fb » Mi 9. Sep 2015, 12:16

Ich habe das mal genauso gemacht wie von Dir vorgeschlagen und kann kein (vom PIM verursachtes) Fehlverhalten feststellen. Die Systemeinträge werden entsprechend entfernt. Dass es in der con_plugins_rel keine Einträge gibt, ist bei der vorliegenden plugin.xml-Datei normal: Es werden lediglich Relations für Actions, Areas sowie Navigationseinträge (navm sowie navs) vorgenommen. Hieraus entsteht auch Dein Problem: Du nimmst lediglich einen frame-Eintrag vor, ohne eine eigene Area zu definieren. Die von Dir definierte Area "mod" merkt er sich nicht, weil sie ja zum Core gehört. Aus dem Grund kann er den frame-Eintrag auch nicht entfernen. Ich sehe hier aber durchaus einen Bedarf und werde dazu mal ein Ticket anlegen. Das ist nämlich "unschön".

Du kannst das durch folgende Core-Code-Ergänzung bei Dir lokal fixen (nicht getestet!):
Datei class.pimpluginsetup.install.php (Ordner contenido/plugins/pim/classes/setup)
Funktion _installAddFrames() (ab Zeile 505), ersetze Zeile 528 durch:

Code: Alles auswählen

$item = $this->_ApiFrameFileCollection->create($attributes['area'], $attributes['frameId'], $file->get('idfile'));

// Set a relation
$this->_PimPluginRelationsCollection->create($item->get('idframefile'), $pluginId, 'framefile');
Datei class.pimpluginsetup.uninstall.php (Ordner contenido/plugins/pim/classes/setup)
Ergänze folgende Zeilen in der Funktion uninstall() (ab Zeile 188), z. B. nach Zeile 221:

Code: Alles auswählen

// Delete entries with relations to *_frame_files
if (!empty($relations['framefile'])) {
    $this->_ApiFrameFileCollection->deleteByWhereClause("idframefile IN('" . join("', '", $relations['framefile']) . "')");
}
Für die Ticketumsetzung muss ich mir dann überlegen, wie das noch etwas schöner geht, da es jetzt zwei Möglichkeiten im Code gibt, Framefiles zu löschen. Ich achte darauf, dass es dann "framefile" weiterhin heißt, damit Du bei einem Update auf die nächste CONTENIDO-Version keine Probleme haben wirst!
Frederic Schneider
Entwickler bei der four for business AG

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: [BUG 4.9.8] PIM: DB-Einträge werden nicht entfernt

Beitrag von Oldperl » Mi 9. Sep 2015, 13:27

Hallo Frederic,

danke für deine angedachten Änderungen des Core, die bringen mir nur momentan herzlich wenig, da das ConRepo-Plugin ja nachher kostenfrei für Alle nutzbar sein soll und, zumindest für den Modulbereich, auch bereits ab Version 4.9.0 installierbar sein sollte. Daher muss und werde ich mir etwas anderes überlegen müssen.

Grundsätzlich solltet ihr aber mal darüber nachdenken ob und wie man zukünftig vorhandene Bereiche erweitern können sollte. Gerade bei diesem Plugin würde es sich anbieten direkt die Startseite des Modulbereiches entweder auszutauschen oder mit einem entsprechenden Submenü in Frame 3 zu erweitern. Dieses ist aber momentan so nicht möglich. Ich kann nur das Submenü für die Area 'con' erweitern, wobei dieses erst bei Aufruf eines Modules angezeigt wird. Das ist aber für die Anzeige eines Modul-Repos der falsche Ort, das gehört zwar in den Modul-Bereich, aber dort als Hauptpunkt. Frame 1 kann ich dahingehend auch nicht erweitern, da er weder eine Chain hat, noch von mir einfach ausgetauscht bzw. ersetzt werden kann, da ich ja über den PIM nicht an den vorhandenen Eintrag ran komme. Ein eigenes Main-Menü scheitert auch (siehe anderes Posting). SO bleibt mir wohl doch nichts anderes übrig als das Repo-Plugin, auch wenn es mir nicht gefällt, unter Administration abzulegen.
Du siehst es gäbe da noch sicherlich ein paar Verbesserungsvorschläge, insofern nicht wieder Jemand aus OF Einwände hat. Zumindest helfen mir diese Punkte um meinen eigenen PIM für die CL etwas Entwickler-freundlicher zu gestalten. Deshalb danke für deine tolle Entwicklungsarbeit am Pluginmanager und die tollen Ideen darin.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

frederic.schneider_4fb
Beiträge: 967
Registriert: Do 15. Apr 2004, 17:12
Wohnort: Eschborn-Niederhöchstadt
Kontaktdaten:

Re: [BUG 4.9.8] PIM: DB-Einträge werden nicht entfernt

Beitrag von frederic.schneider_4fb » Do 8. Okt 2015, 12:38

Ab der nächsten Version werden frame_file-Einträge auch ohne Area-Bezug entfernt. Im Gegensatz zu dem hier geposteten Code - der an einer Stelle praktisch auch nicht funktioniert hätte, da $pluginId nicht definiert ist/war - habe ich nur Kleinigkeiten verändert und die doppelte FrameFile-Löschung aufgrund von Fallback-Gründen drinnen gelassen.
Frederic Schneider
Entwickler bei der four for business AG

Antworten