Dzięki tej modyfikacji możesz wybrać forum w którym dany user będzie widzieć tylko swoje tematy. Super moderatorzy i moderatorzy danego forum oraz administratorzy widzą wszystkie tematy.
By wykonać taką zmianę postępuj wg poniższej instrukcji.
Pliki modyfikowane:
lofiversion/index.php
sources/action_admin/forums.php
sources/action_public/forums.php
sources/action_public/search.php
sources/action_public/topics.php
sources/classes/class_forums.php
sources/components_public/profile/posts.php
sources/components_public/profile/topics.php
skin_acp/IPB2_Standard/acp_skin_html/cp_skin_forums.php
Przejdź do:
ACP > ADMIN > SQL Management > SQL Toolbox >> Run a Query
i wykonaj następujące zapytanie:
alter table ibf_forums add is_private numeric(1) default 0;
oraz:
Pamiętaj by zastąpić ibf_ prefixem Twojej bazy danych.
Nie znasz prefixu bazy danych?
Otwórz plik: conf_global.php
Znajdź:
$INFO['sql_tbl_prefix'] = 'PREFIX';
w miejscu PREFIX jest to ,czego szukasz
Otwórz plik: lofiversion/index.php
Znajdź:
//--------------------------------
// Topics...
//--------------------------------
Dodaj poniżej:
//turn on private forum if member is not mod
$privatequery = "";
$private_forum = $ipsclass->forums->forum_by_id[$id]['is_private'];
if (($private_forum == 1) AND ($ipsclass->member['is_mod'] == 0))
{
$privatequery = " AND starter_id=".$ipsclass->member['id'];
}
Znajdź:
'where' => "approved=1 and forum_id=$id".$query,
Zamień na:
'where' => "approved=1 and forum_id=$id".$query.$privatequery,
Zapisz i wyślij.
Otwórz plik: sources/action_admin/forums.php
Znajdź:
'upload_perms' => '',
'download_perms' => '',
Dodaj poniżej:
//private forum setting
'is_private' => 0,
Znajdź:
# Permission settings
$form['permission_showtopic'] = $this->ipsclass->adskin->form_yes_no( 'permission_showtopic' , ( isset($_POST['permission_showtopic']) AND $_POST['permission_showtopic'] ) ? $_POST['permission_showtopic'] : $forum['permission_showtopic'] );
Dodaj poniżej:
# Private Forum setting
$form['is_private'] = $this->ipsclass->adskin->form_yes_no('is_private',(isset($_POST['is_private']) AND $_POST['is_private']) ? $_POST['is_private']: $forum['is_private']);
Znajdź:
'notify_modq_emails' => $this->ipsclass->input['notify_modq_emails'],
'permission_showtopic' => intval($this->ipsclass->input['permission_showtopic']),
Dodaj poniżej:
//private forum setting
'is_private' => intval($this->ipsclass->input['is_private']),
Zapisz i wyślij.
Otwórz plik: sources/action_public/forums.php
Znajdź:
if ( $topicfilter == 'ireplied' )
Dodaj wyżej:
//turn on private forum if member is not mod
if (($this->forum['is_private']) AND ($this->ipsclass->member['is_mod'] == 0)) {
$privatequery = " AND t.starter_id=".$this->ipsclass->member['id'];
} else {
$privatequery = "";
}
Znajdź:
$this->ipsclass->DB->simple_construct( array( 'select' => '*',
'from' => 'topics t',
'where' => $query . $add_query,
'order' => 't.pinned DESC, '.$topic_sort.' t.'.$sort_key .' '. $r_sort_by,
'limit' => array( intval($First), $this->ipsclass->vars['display_max_topics'] )
) );
Zamień na:
$this->ipsclass->DB->simple_construct( array( 'select' => '*',
'from' => 'topics t',
'where' => $query . $add_query . $privatequery,
'order' => 't.pinned DESC, '.$topic_sort.' t.'.$sort_key .' '. $r_sort_by,
'limit' => array( intval($First), $this->ipsclass->vars['display_max_topics'] )
) );
Zapisz i wyślij.
Otwórz plik: sources/action_public/search.php
znajdź:
//-----------------------------------------
// Return
//-----------------------------------------
$this->searchable_forums = $final;
return implode( "," , $final );
Dodaj wyżej:
//-----------------------------------------
// Remove private forums
//-----------------------------------------
$private_forums= $this->ipsclass->DB->simple_exec_query( array ('select' => 'id', 'from' => 'forums', 'where'=> 'is_private=1'));
if (is_array( $private_forums) and count( $private_forums) ) {
if (is_array($final) and count($final)){
$tmp = $final;
$final = array();
foreach ($tmp as $id) {
if (in_array($id,$private_forums)){
continue;
} else {
$final[] = $id;
}
}
}
}
Zapisz i wyślij.
Otwórz plik: sources/action_public/topics.php
Znajdź:
if ( isset($this->ipsclass->input['view']) )
{
Dodaj poniżej:
$privatequery = "";
if (($this->forum['is_private'] == 1) AND ($this->ipsclass->member['is_mod'] == 0))
{
$privatequery = " AND starter_id=".$this->ipsclass->member['id'];
}
Znajdź:
//-----------------------------------------
// Newer
//-----------------------------------------
$this->ipsclass->DB->simple_construct( array( 'select' => 'tid',
'from' => 'topics',
'where' => "forum_id=".$this->forum['id']." AND approved=1 AND state <> 'link' AND last_post > ".$this->topic['last_post'],
'order' => 'last_post',
'limit' => array( 0,1 )
) );
Zamień na:
//-----------------------------------------
// Newer
//-----------------------------------------
$this->ipsclass->DB->simple_construct( array( 'select' => 'tid',
'from' => 'topics',
'where' => "forum_id=".$this->forum['id']." AND approved=1 AND state <> 'link' AND last_post > ".$this->topic['last_post'].$privatequery,
'order' => 'last_post',
'limit' => array( 0,1 )
) );
Znajdź:
//-----------------------------------------
// Older
//-----------------------------------------
$this->ipsclass->DB->simple_construct( array( 'select' => 'tid',
'from' => 'topics',
'where' => "forum_id=".$this->forum['id']." AND approved=1 AND state <> 'link' AND last_post < ".$this->topic['last_post'],
'order' => 'last_post DESC',
'limit' => array( 0,1 )
) );
Zamień na:
//-----------------------------------------
// Older
//-----------------------------------------
$this->ipsclass->DB->simple_construct( array( 'select' => 'tid',
'from' => 'topics',
'where' => "forum_id=".$this->forum['id']." AND approved=1 AND state <> 'link' AND last_post < ".$this->topic['last_post'].$privatequery,
'order' => 'last_post DESC',
'limit' => array( 0,1 )
) );
Zapisz i wyślij.
Otwórz plik: sources/classes/class_forums.php
Znajdź:
$forum_data['last_post'] = $this->ipsclass->get_date($forum_data['last_post'], 'LONG');
Dodaj powyżej:
//change last poster info if forum is private and member is not mod
if (($forum_data['is_private'] == 1) AND !($this->ipsclass->member['g_is_supmod']) and (!isset($this->ipsclass->member['_moderator'][ $forum_data['id'] ]['post_q']) AND $this->ipsclass->member['_moderator'][ $forum_data['id'] ]['post_q'] != 1 )) {
$this->ipsclass->DB->simple_construct( array( 'select' => '*',
'from' => 'topics',
'where' => "forum_id=".$forum_data['id']." and starter_id=".$this->ipsclass->member['id'],
'order' => 'last_post DESC',
'limit' => '0,1',
) );
$this->ipsclass->DB->simple_exec();
$private_row=$this->ipsclass->DB->fetch_row();
$forum_data['last_post'] = $private_row['last_post'];
$forum_data['last_id'] = $private_row['tid'];
$forum_data['last_title'] = $private_row['title'];
$forum_data['last_poster_id'] = $private_row['last_poster_id'];
$forum_data['last_poster_name'] = $private_row['last_poster_name'];
}
Zapisz i wyślij.
Otwórz plik: sources/components_public/profile/posts.php
Znajdź:
$content .= $this->ipsclass->compiled_templates['skin_profile']->personal_portal_single_column( $row, $this->ipsclass->lang['profile_read_topic'], $this->ipsclass->base_url.'act=findpost&pid='.$row['pid'], $this->ipsclass->lang['profile_in_topic'] . $row['title'] );
Zamień na:
//-----------------------------------------
// check for private forums
//-----------------------------------------
$t = $this->ipsclass->DB->simple_exec_query( array ('select' => 'forum_id',
'from' => 'topics',
'where' => 'tid='.$row['topic_id']));
$f = $this->ipsclass->DB->simple_exec_query( array ('select' => 'is_private',
'from' => 'forums',
'where' => 'id='.$t['forum_id']));
if ($f['is_private'] == 1)
{
if (($this->ipsclass->member['g_is_supmod']) or ($this->ipsclass->member['id'] == $row['starter_id']))
{
$content .= $this->ipsclass->compiled_templates['skin_profile']->personal_portal_single_column( $row, $this->ipsclass->lang['profile_read_topic'], $this->ipsclass->base_url.'act=findpost&pid='.$row['pid'], $this->ipsclass->lang['profile_in_topic'] . $row['title'] );
}
} else {
$content .= $this->ipsclass->compiled_templates['skin_profile']->personal_portal_single_column( $row, $this->ipsclass->lang['profile_read_topic'], $this->ipsclass->base_url.'act=findpost&pid='.$row['pid'], $this->ipsclass->lang['profile_in_topic'] . $row['title'] );
}
Zapisz i wyślij.
Otwórz plik:
sources/components_public/profile/topics.php
znajdź:
$content .= $this->ipsclass->compiled_templates['skin_profile']->personal_portal_single_column( $row, $this->ipsclass->lang['profile_read_topic'], $this->ipsclass->base_url.'act=findpost&pid='.$row['pid'], $row['title'] );
Zamień na:
//-----------------------------------------
// check for private forums
//-----------------------------------------
$f = $this->ipsclass->DB->simple_exec_query( array ('select' => 'is_private',
'from' => 'forums',
'where' => 'id='.$row['forum_id'] ));
if ($f['is_private'] == 1)
{
if (($this->ipsclass->member['g_is_supmod']) or ($this->ipsclass->member['id'] == $row['starter_id']))
{
$content .= $this->ipsclass->compiled_templates['skin_profile']->personal_portal_single_column( $row, $this->ipsclass->lang['profile_read_topic'], $this->ipsclass->base_url.'act=findpost&pid='.$row['pid'], $row['title'] );
}
} else {
$content .= $this->ipsclass->compiled_templates['skin_profile']->personal_portal_single_column( $row, $this->ipsclass->lang['profile_read_topic'], $this->ipsclass->base_url.'act=findpost&pid='.$row['pid'], $row['title'] );
}
Zapisz i wyślij.
Otwórz plik:
skin_acp/IPB2_Standard/acp_skin_html/cp_skin_forums.php
Znajdź:
<tr>
<td width='40%' class='tablerow1'><strong>Allow members who can see the forum but cannot read topics to see the topic list</strong><div class='desctext'>If yes, the member will be able to see the topic titles but will not be able to read the topic posts when clicked.</div></td>
<td width='60%' class='tablerow2'>{$form['permission_showtopic']}</td>
</tr>
Dodaj poniżej:
<tr>
<td width='40%' class='tablerow1'><strong>Forum prywatne?</strong></td>
<td width='60%' class='tablerow2'>{$form['is_private']}</td>
</tr>
Zapisz i wyślij.
Pozdrawiam,
DawPi