PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RSS-Feeds nicht anzeigen, wenn kein Zugriff auf Forum X als Gast?


Sephirot
11.02.2007, 18:01
Hallo allerseits.

Nehmen wir mal das Beispiel RSS-Feeds, wie sie hier im Forum aktiviert sind. Die bekommt man immer im Browser zu sehen aber den Inhalt nur, wenn man auch als Gast Themen/Beiträge in dem jeweiligen Forum lesen kann. Doch da liegt das Problem! In Foren wo Gäste keinen Zutritt haben, sehen z.B. registrierte Benutzer dieses Icon und denken "cool, RSS-Feed, den werd ich gleich mal abonnieren" aber dann die Enttäuschung und Fragen, wieso der Feed leer ist, wenn man ihn anklickt.

Wäre es nicht angebracht die Links zu dem RSS-Feed in dem Beispiel erst gar nicht anzubieten, wenn man sie eh nicht lesen kann?


Mein erster Geh-Versuch in diese Richtung sah so aus:


$guestsfps = $vbulletin->db->query_read("
SELECT forumid, forumpermissions
FROM " . TABLE_PREFIX . "forumpermission
WHERE usergroupid = 1
");
while ($guestsfpt = $vbulletin->db->fetch_array($guestsfps))
{
$guestsfp["$guestsfpt[forumid]"] = $guestsfpt['forumpermissions'];
}
unset($guestsfpt);
$vbulletin->db->free_result($guestsfps);


function guestcanview($aForumID) {
return (($guestsfp["$forumid"] & $vbulletin->bf_ugp_forumpermissions['canview']) && ($guestsfp["$forumid"] & $vbulletin->bf_ugp_forumpermissions['canviewothers']))?true:false;
}


Wo platziere ich das SQL-Query am besten, daß ich es nicht immer wieder ausführen muß? Einmal reicht. Ein Cache quasi, den ich vorher prüfe, ob der Eintrag schon im Cache ist und wenn nicht, wird das Query ausgeführt.

p.s.
Das wär auch ein Vorschlag für kommende Versionen (vielleicht sogar noch für vB 3.6.5 ;)).

Sephirot
13.02.2007, 01:48
Ich habe mich nun des forumcache-Objekts bedient und eine Funktion geschrieben, die man, wenn zu $safe_function via Plug-In hinzugefügt, auch bei conditionals einsetzen kann.

can_view_threads_in_forum($vbulletin) liefert die globalen Foren-Rechte der Benutzergruppe mit ID 1 (die Gäste). Mit can_view_threads_in_forum($vbulletin, X, Y) bekommt man halt die Rechte für Forum Y von Gruppe X.

hook: init_startup
function can_view_threads_in_forum($vbObj, $usergroupid = 1, $forumid = 0)
{
if (!$vbObj)
{
$vbObj = $GLOBALS['vbulletin'];
}
if (!$usergroupid)
{
$usergroupid = 1;
}

if ($forumid)
{
$perms = $vbObj->forumcache[$forumid]['permissions'][$usergroupid];
}
else
{
$perms = $vbObj->usergroupcache[$usergroupid]['forumpermissions'];
}

return (($perms & $vbObj->bf_ugp_forumpermissions['canview']) && ($perms& $vbObj->bf_ugp_forumpermissions['canviewothers']))?1:0;
}

hook: template_safe_functions
$safe_functions[] = 'can_view_threads_in_forum';


MfG
Sephi

p.s.
Dann im Template headinclude
<if condition="$vboptions['externalrss']">
durch
<if condition="$vboptions['externalrss'] AND can_view_threads_in_forum($vbulletin,1,$foruminfo['forumid'])">
ersetzen.