Seite 1 von 1

[BUG 4.9.8] Anzeigeoptionen Benutzer einer Frontend-Gruppe

Verfasst: Fr 11. Sep 2015, 08:25
von beloved_behated
Hallo,

wenn ich im Backend unter Frontend die Anzeigeoptionen so anpasse, dass ich nur Benutzer einer Frontend-Gruppe angezeigt bekommen möchte, bekomme ich folgende Fehlermeldung:

Fatal error: Uncaught exception 'cUnexpectedValueException' with message 'The join partner 'cApiFrontendUserCollection' is not registered and can not be used with link().' in /xxx/contenido/classes/genericdb/class.item.collection.php:518 Stack trace: #0 /xxx/contenido/classes/genericdb/class.item.collection.php(589): ItemCollection->_fetchJoinTables() #1 /xxx/contenido/includes/include.frontend.user_menu.php(173): ItemCollection->query() #2 /xxx/contenido/main.php(203): include_once('/xxx/...') #3 {main} thrown in /xxx/contenido/classes/genericdb/class.item.collection.php on line 518

Leider scheint der gleiche Fehler bereits seit der 4.9.4 zu bestehen.
Ich benötige dafür dringend eine Lösung!
Kann jemand helfen?

Re: [BUG 4.9.8] Anzeigeoptionen Benutzer einer Frontend-Grup

Verfasst: Fr 11. Sep 2015, 09:06
von homtata
Yep, ich kann das für die 4.9.7 auch bestätigen (Neuinstallation). Ich sehe zwar keine Fehlermeldungsoutput, aber das Script steigt aus.

Das Problem besteht (auf die 4.9.7 bezogen) wohl in
include.frontend.user_menu.php

etwa ab Zeile 154:

Code: Alles auswählen

if ($_REQUEST["restrictgroup"] != "" && $_REQUEST["restrictgroup"] != "--all--") {
    $oFEUsers->link("cApiFrontendGroupMemberCollection");
    $oFEUsers->setWhere("cApiFrontendGroupMemberCollection.idfrontendgroup", $_REQUEST["restrictgroup"]);
}

$mPage = $_REQUEST["page"];
$elemperpage = $_REQUEST["elemperpage"];

$iFullTableCount = 0;
if ($bUsePlugins == false) {
    $oFEUsers->query();

    $iFullTableCount = $oFEUsers->count();

    $oFEUsers->setOrder(implode(" ", array(
        $oSelectSortBy->getDefault(),
        $oSelectSortOrder->getDefault()
    )));
    $oFEUsers->setLimit($elemperpage *($mPage - 1), $elemperpage);
} else {
    $oFEUsers->query();
    $iFullTableCount = $oFEUsers->count();
}

if ($_REQUEST["elemperpage"] * ($_REQUEST["page"]) >= $iFullTableCount + $_REQUEST["elemperpage"] && $_REQUEST["page"] != 1) {
    $_REQUEST["page"]--;
    $mPage--;
}
Die Befehle

Code: Alles auswählen

$oFEUsers->query();
beenden das Skript mit einem Fehler und es steigt aus.

Ich habe getestet, dass $_REQUEST["restrictgroup"] noch mit dem im Backend-Dropdown gewählten Wert übereinstimmt und auch in Zeile 156 ankommt. Und die "if"-Schleife ab 154 wird korrekterweise auch durchlaufen, wenn das Dropdown umgestellt wird.

Ich habe noch etwas weiter getestet, und es scheint die Zeile

Code: Alles auswählen

$oFEUsers->link("cApiFrontendGroupMemberCollection");
zu sein, die das Skript zuerst zum Absturz bringt, obwohl der Klassenname an sich stimmt. Kommentiert man diese und die Folgezeile aus, hören die Abstürze auf.

Re: [BUG 4.9.8] Anzeigeoptionen Benutzer einer Frontend-Grup

Verfasst: Fr 11. Sep 2015, 10:20
von beloved_behated
Danke... ich muss dazu sagen, dass ich die Fehlerausgabe aktiviert habe und dadurch natürlich der Fehler angezeigt wird...

Das Auskommentieren der Zeilen bringt mich hier leider nicht weiter, habe ja dadurch nicht die gewünschte Ausgabe der Benutzer nach Gruppen ;)

Ich bin weiter auf die Suche gegangen und denke es liegt an den Klassen cApiFrontendGroupMemberCollection, cApiFrontendUserCollection, cApiFrontendGroupCollection ... die Verknüpfung der Datenbank-Tabellen con_frontendusers, con_frontendgroups und con_frontendgroupmembers über "Joins" funktioniert nicht korrekt...

Komme da aber leider nicht weiter..

Re: [BUG 4.9.8] Anzeigeoptionen Benutzer einer Frontend-Grup

Verfasst: Fr 11. Sep 2015, 14:00
von thomas.stauer_4fb
Danke für die Fehlermeldung.

Ich habe dazu ein Ticket für die nächste Version angelegt:
https://issues.contenido.org/browse/CON-2397

Re: [BUG 4.9.8] Anzeigeoptionen Benutzer einer Frontend-Grup

Verfasst: Mi 26. Okt 2016, 21:52
von Bernbacher
Der Fehler besteht leider immer noch in 4.9.11 :cry:

Re: [BUG 4.9.8] Anzeigeoptionen Benutzer einer Frontend-Grup

Verfasst: Do 3. Nov 2016, 09:29
von frederic.schneider_4fb
Wir haben das Problem vorerst mit keiner sehr hohen Priorität versehen, deshalb ist das derzeit auch nicht für die nächste Version vorgesehen. Ich habe das Thema aber mal auf dem Schirm, damit es nicht verloren geht!

Re: [BUG 4.9.8] Anzeigeoptionen Benutzer einer Frontend-Grup

Verfasst: Fr 4. Nov 2016, 13:20
von Oldperl
Servus,

das hier benannte Problem ist nicht ganz so einfach zu lösen. Es wird in diesem Fall auf eine Methode (->link()) der Generic DB zurückgegriffen, die in diesem Fall so nicht anwendbar ist. Den technischen Hintergrund erspare ich mir hier, das ist wohl eher ein Fall für mein Entwickler-Buch. Nur so viel - es soll eine Hilfstabelle per Left Join eingebunden werden, was aber aufgrund mangelnder ID-Querverweise hier nicht möglich ist.

Ich habe das Problem nun anders gelöst. Dazu müssen 2 Dateien modifiziert werden. Zum einen die Datei include.frontend.user_menu.php ab Zeile 123 und zum Anderen die Datei include.frontend.left_top.php ab Zeile 284. Dort steht folgender Code, der für die Filterung nach Gruppen bei der DB-Abfrage zuständig sein soll, jedoch so nicht funktioniert, sondern besagten Fehler auslöst.

Code: Alles auswählen

if ($_REQUEST["restrictgroup"] != "" && $_REQUEST["restrictgroup"] != "--all--") {
    $oFEUsers->link("cApiFrontendGroupMemberCollection");
    $oFEUsers->setWhere("cApiFrontendGroupMemberCollection.idfrontendgroup", $_REQUEST["restrictgroup"]);
}
Diesen nun bitte mit folgendem Code ersetzen

Code: Alles auswählen

if ($_REQUEST["restrictgroup"] != "" && $_REQUEST["restrictgroup"] != "--all--") {
    // mod (c) by Ortwin Pinke aka Oldperl, see forum topic http://forum.contenido.org/viewtopic.php?f=98&t=36554
    $oFrontendGroupMembers = new cApiFrontendGroupMemberCollection();
    $oFrontendGroupMembers->addResultField('idfrontenduser');
    $oFrontendGroupMembers->setWhere('idfrontendgroup', $_REQUEST["restrictgroup"]);
    $oFrontendGroupMembers->query();
    
    $aTable = $oFrontendGroupMembers->fetchTable(array('idfrontenduser'=>'idfrontenduser'));
    
    $aGroupMembers = array();
    
    if(count($aTable) > 0) {
        foreach ($aTable as $sKey => $aItem) {
            $aGroupMembers[] = $aItem['idfrontenduser'];
        }
    }
    if(count($aGroupMembers) == 0) {
        $aGroupMembers[] = 0;
    }
    $oFEUsers->setWhere("cApiFrontendUserCollection.idfrontenduser", $aGroupMembers, "in");
} 
Könnte das bitte nochmal Jemand ausführlich testen. Ich habe nur ein paar grundsätzliche Tests im Demomandanten gemacht. Ein ausführlicher Test mit einer größeren Anzahl Frontend-Nutzern und -Gruppen fehlt noch.

Gruß aus Franken

Ortwin

Re: [BUG 4.9.8] Anzeigeoptionen Benutzer einer Frontend-Grup

Verfasst: Fr 4. Nov 2016, 16:03
von Faar
Oldperl hat geschrieben:Servus,
Hoi!
Könnte das bitte nochmal Jemand ausführlich testen.


Mit zwei Usern und zwei Gruppen getestet und für gut befunden.

Gruß aus Berlin,

Frank

Re: [BUG 4.9.8] Anzeigeoptionen Benutzer einer Frontend-Grup

Verfasst: Sa 10. Dez 2016, 20:29
von Bernbacher
Vielen lieben Dank Ortwin für das vorgezogene Weihnachtsgeschenk! Habs erst jetzt entdeckt und gleich getestet:
zumindest bei 68 Usern und 17 Gruppen funktionierts bisher bei mir ohne Probleme. DaS erleichtert mir eniges!
Vielen Dank nochmal von einem anderen Franken :D

Re: [BUG 4.9.8] Anzeigeoptionen Benutzer einer Frontend-Grup

Verfasst: So 11. Dez 2016, 18:04
von Oldperl
Bernbacher hat geschrieben:Vielen lieben Dank Ortwin...
Immer gerne! :) Freut mich wenn ich helfen konnte. Dank an Dich für' s Testen und Dein Feedback.

Gruß aus Franken

Ortwin