Kleine Änderung, damit das auch mit der Suche funktioniert und auch nicht per direktem Zugriff auf die Posts zugegriffen werden kann:
Finde in der viewtopic.php
Code: Alles auswählen
$sql = "SELECT t.topic_id, t.topic_title, t.topic_status,
füge in dieser Zeile direkt nach dem Ausschnitt ein:
Dann ein paar Zeilen später das bereits eingefügte
ersetzen durch
Code: Alles auswählen
if( $is_auth['auth_read_self_topics'] && $forum_topic_data['topic_poster'] == $userdata['user_id'] )
Jetzt ist der direkte Zugriff auch gesperrt.
Um die Suche anzupassen sind ein paar Anpassungen an der search.php notwendig.
Suche hier nach
Code: Alles auswählen
if ( $search_forum != -1 )
{
$is_auth = auth(AUTH_READ, $search_forum, $userdata);
Danach hinzufügen:
Code: Alles auswählen
$auth_read_self = auth(AUTH_READ_SELF_TOPICS, $search_forum, $userdata);
Direkt darunter nach
Code: Alles auswählen
if ( !$is_auth['auth_read'] )
{
message_die(GENERAL_MESSAGE, $lang['No_searchable_forums']);
}
muss das hier:
Code: Alles auswählen
elseif(($is_auth['auth_read'] === AUTH_SELF && $auth_read_self['auth_read_self_topics'] == false))
{
$auth_self_list[] = $search_forum; //Speichern, dass in dem Forum nur eigene Themen gesehen werden dürfen.
}
Wieder ein paar Zeilen später dann nach dem hier:
Code: Alles auswählen
$is_auth_ary = auth(AUTH_READ, AUTH_LIST_ALL, $userdata);
dann dass:
Code: Alles auswählen
$auth_read_self = auth(AUTH_READ_SELF_TOPICS, AUTH_LIST_ALL, $userdata); //AUTH_READ_SELF
Dieser kurze Block:
Code: Alles auswählen
if ( !$value['auth_read'] )
{
$ignore_forum_sql .= ( ( $ignore_forum_sql != '' ) ? ', ' : '' ) . $key;
}
wird ersetzt durch das hier:
Code: Alles auswählen
if ( !$value['auth_read'] || ($value['auth_read'] === AUTH_SELF && $auth_read_self[$key]['auth_read_self_topics'] == false) ) //Foren in denen nur eigene Themen gesehen werden dürfen ignorieren.
{
$ignore_forum_sql .= ( ( $ignore_forum_sql != '' ) ? ', ' : '' ) . $key;
if($value['auth_read'] === AUTH_SELF)//Zwischenspeichern wenn man nur eigene Themen in diesem Forum sehen darf.
{
$auth_self_list[] = $key;
}
}
Das hier:
Code: Alles auswählen
if ( $ignore_forum_sql != '' )
{
$auth_sql .= ( $auth_sql != '' ) ? " AND f.forum_id NOT IN ($ignore_forum_sql) " : "f.forum_id NOT IN ($ignore_forum_sql) ";
}
wird ersetzt durch
Code: Alles auswählen
if ( $ignore_forum_sql != '' )
{
if($auth_self_list)
{
$auth_self_list = implode(', ', $auth_self_list);
$auth_sql .= ( $auth_sql != '' ) ? " AND (f.forum_id NOT IN ($ignore_forum_sql) OR (t.topic_poster = ".$userdata['user_id']." AND f.forum_id IN ($auth_self_list) ))" : "(f.forum_id NOT IN ($ignore_forum_sql) OR (t.topic_poster = ".$userdata['user_id']." AND f.forum_id IN ($auth_self_list))) ";
}
else
{
$auth_sql .= ( $auth_sql != '' ) ? " AND f.forum_id NOT IN ($ignore_forum_sql) " : "f.forum_id NOT IN ($ignore_forum_sql) ";
}
}
Zum Abschluss muss noch nach
und nach
Code: Alles auswählen
$select_sql = ( $search_author == '' && $auth_sql == '' ) ? 'post_id' : 'p.post_id';
$from_sql = ( $search_author == '' && $auth_sql == '' ) ? POSTS_TABLE : POSTS_TABLE . ' p';
jeweils das hier:
Code: Alles auswählen
if(isset($auth_self_list) && $auth_self_list) //ADDED
{
$from_sql .= ", " . TOPICS_TABLE . " t";
$where_sql .= " AND t.topic_id = p.topic_id ";
}
Ich hoffe dass ich da jetzt keine der vielen Änderungen in der Datei vergessen habe, auf jeden Fall sollte im Anschluss auch die Suche nur noch die Themen zeigen die man tatsächlich sehen darf.
Und das ganze hat sich mal wieder in Richtung eines kleinen Mods entwickelt