Diff
checker
テキスト
テキスト
画像
ドキュメント
Excel
フォルダ
Legal
Enterprise
デスクトップ
料金
ログイン
Diffchecker デスクトップのダウンロード
テキスト比較
2 つのテキスト ファイルの違いを見つける
ツール
履歴
ライブエディター
空白の変更を非表示
未変更行を折りたたむ
折り返しなし
レイアウト
分割
統合
比較精度
スマート
単語
文字
テキストスタイル
外観を変更
シンタックスハイライト
構文を選択
無視
テキスト変換
最初の差分へ移動
入力を編集
Diffchecker Desktop
Diffcheckerを実行する最も安全な方法。Diffchecker Desktopアプリを入手:あなたの差分はコンピューターから出ることはありません!
Desktopを入手
Untitled diff
作成日
11 年前
差分は期限切れになりません
クリア
エクスポート
共有
説明
74 削除
行
合計
削除
文字
合計
削除
この機能を引き続き使用するには、アップグレードしてください
Diff
checker
Pro
価格を見る
588 行
すべてコピー
126 追加
行
合計
追加
文字
合計
追加
この機能を引き続き使用するには、アップグレードしてください
Diff
checker
Pro
価格を見る
645 行
すべてコピー
<?php
<?php
/**
/**
* MyBB 1.8
* MyBB 1.8
* Copyright 2014 MyBB Group, All Rights Reserved
* Copyright 2014 MyBB Group, All Rights Reserved
*
*
* Website: http://www.mybb.com
* Website: http://www.mybb.com
* License: http://www.mybb.com/about/license
* License: http://www.mybb.com/about/license
*
*
*/
*/
コピー
コピー済み
コピー
コピー済み
/**
/**
* Build a list of forum bits.
* Build a list of forum bits.
*
*
コピー
コピー済み
コピー
コピー済み
* @param int
$pid
The parent forum to fetch the child forums for (0 assumes all)
* @param int
The parent forum to fetch the child forums for (0 assumes all)
* @param int
$depth
The depth to return forums with.
* @param int
The depth to return forums with.
* @return array Array of information regarding the child forums of this parent forum
* @return array Array of information regarding the child forums of this parent forum
*/
*/
function build_forumbits($pid=0, $depth=1)
function build_forumbits($pid=0, $depth=1)
{
{
global $db, $fcache, $moderatorcache, $forumpermissions, $theme, $mybb, $templates, $bgcolor, $collapsed, $lang, $showdepth, $plugins, $parser, $forum_viewers;
global $db, $fcache, $moderatorcache, $forumpermissions, $theme, $mybb, $templates, $bgcolor, $collapsed, $lang, $showdepth, $plugins, $parser, $forum_viewers;
static $private_forums;
static $private_forums;
コピー
コピー済み
コピー
コピー済み
$forum_listing = '';
$forum_listing = '';
// If no forums exist with this parent, do nothing
// If no forums exist with this parent, do nothing
if(empty($fcache[$pid]) || !is_array($fcache[$pid]))
if(empty($fcache[$pid]) || !is_array($fcache[$pid]))
{
{
return;
return;
}
}
$parent_counters['threads'] = 0;
$parent_counters['threads'] = 0;
$parent_counters['posts'] = 0;
$parent_counters['posts'] = 0;
$parent_counters['unapprovedposts'] = 0;
$parent_counters['unapprovedposts'] = 0;
$parent_counters['unapprovedthreads'] = 0;
$parent_counters['unapprovedthreads'] = 0;
$parent_counters['viewers'] = 0;
$parent_counters['viewers'] = 0;
$forum_list = $comma = '';
$forum_list = $comma = '';
$donecount = 0;
$donecount = 0;
// Foreach of the forums in this parent
// Foreach of the forums in this parent
foreach($fcache[$pid] as $parent)
foreach($fcache[$pid] as $parent)
{
{
foreach($parent as $forum)
foreach($parent as $forum)
{
{
$subforums = $sub_forums = '';
$subforums = $sub_forums = '';
$lastpost_data = array(
$lastpost_data = array(
コピー
コピー済み
コピー
コピー済み
'lastpost' => 0
'lastpost' => 0
,
'lastposter' => ''
);
);
$forum_viewers_text = '';
$forum_viewers_text = '';
$forum_viewers_text_plain = '';
$forum_viewers_text_plain = '';
コピー
コピー済み
コピー
コピー済み
// LukasAMD Fix
$unread = false;
$subforums_exist = false;
$parent_unread = false;
// Get the permissions for this forum
// Get the permissions for this forum
$permissions = $forumpermissions[$forum['fid']];
$permissions = $forumpermissions[$forum['fid']];
// If this user doesnt have permission to view this forum and we're hiding private forums, skip this forum
// If this user doesnt have permission to view this forum and we're hiding private forums, skip this forum
if($permissions['canview'] != 1 && $mybb->settings['hideprivateforums'] == 1)
if($permissions['canview'] != 1 && $mybb->settings['hideprivateforums'] == 1)
{
{
continue;
continue;
}
}
コピー
コピー済み
コピー
コピー済み
$forum = $plugins->run_hooks("build_forumbits_forum", $forum);
$forum = $plugins->run_hooks("build_forumbits_forum", $forum);
// Build the link to this forum
// Build the link to this forum
$forum_url = get_forum_link($forum['fid']);
$forum_url = get_forum_link($forum['fid']);
// This forum has a password, and the user isn't authenticated with it - hide post information
// This forum has a password, and the user isn't authenticated with it - hide post information
$hideinfo = $hidecounters = false;
$hideinfo = $hidecounters = false;
$hidelastpostinfo = false;
$hidelastpostinfo = false;
$showlockicon = 0;
$showlockicon = 0;
if(isset($permissions['canviewthreads']) && $permissions['canviewthreads'] != 1)
if(isset($permissions['canviewthreads']) && $permissions['canviewthreads'] != 1)
{
{
$hideinfo = true;
$hideinfo = true;
}
}
コピー
コピー済み
コピー
コピー済み
if(isset($permissions['canonlyviewownthreads']) && $permissions['canonlyviewownthreads'] == 1)
if(isset($permissions['canonlyviewownthreads']) && $permissions['canonlyviewownthreads'] == 1)
{
{
$hidecounters = true;
$hidecounters = true;
// If we only see our own threads, find out if there's a new post in one of them so the lightbulb shows
// If we only see our own threads, find out if there's a new post in one of them so the lightbulb shows
if(!is_array($private_forums))
if(!is_array($private_forums))
{
{
$private_forums = $fids = array();
$private_forums = $fids = array();
foreach($fcache as $fcache_p)
foreach($fcache as $fcache_p)
{
{
foreach($fcache_p as $parent_p)
foreach($fcache_p as $parent_p)
{
{
foreach($parent_p as $forum_p)
foreach($parent_p as $forum_p)
{
{
if($forumpermissions[$forum_p['fid']]['canonlyviewownthreads'])
if($forumpermissions[$forum_p['fid']]['canonlyviewownthreads'])
{
{
$fids[] = $forum_p['fid'];
$fids[] = $forum_p['fid'];
}
}
}
}
}
}
}
}
if(!empty($fids))
if(!empty($fids))
{
{
$fids = implode(',', $fids);
$fids = implode(',', $fids);
$query = $db->simple_select("threads", "tid, fid, subject, lastpost, lastposter, lastposteruid", "uid = '{$mybb->user['uid']}' AND fid IN ({$fids}) AND visible != '-2'", array("order_by" => "lastpost", "order_dir" => "desc"));
$query = $db->simple_select("threads", "tid, fid, subject, lastpost, lastposter, lastposteruid", "uid = '{$mybb->user['uid']}' AND fid IN ({$fids}) AND visible != '-2'", array("order_by" => "lastpost", "order_dir" => "desc"));
while($thread = $db->fetch_array($query))
while($thread = $db->fetch_array($query))
{
{
if(!$private_forums[$thread['fid']])
if(!$private_forums[$thread['fid']])
{
{
$private_forums[$thread['fid']] = $thread;
$private_forums[$thread['fid']] = $thread;
}
}
}
}
}
}
}
}
if($private_forums[$forum['fid']]['lastpost'])
if($private_forums[$forum['fid']]['lastpost'])
{
{
$forum['lastpost'] = $private_forums[$forum['fid']]['lastpost'];
$forum['lastpost'] = $private_forums[$forum['fid']]['lastpost'];
コピー
コピー済み
コピー
コピー済み
$lastpost_data = array(
$lastpost_data = array(
"lastpost" => $private_forums[$forum['fid']]['lastpost'],
"lastpost" => $private_forums[$forum['fid']]['lastpost'],
"lastpostsubject" => $private_forums[$forum['fid']]['subject'],
"lastpostsubject" => $private_forums[$forum['fid']]['subject'],
"lastposter" => $private_forums[$forum['fid']]['lastposter'],
"lastposter" => $private_forums[$forum['fid']]['lastposter'],
"lastposttid" => $private_forums[$forum['fid']]['tid'],
"lastposttid" => $private_forums[$forum['fid']]['tid'],
"lastposteruid" => $private_forums[$forum['fid']]['lastposteruid']
"lastposteruid" => $private_forums[$forum['fid']]['lastposteruid']
);
);
}
}
}
}
else
else
{
{
$lastpost_data = array(
$lastpost_data = array(
"lastpost" => $forum['lastpost'],
"lastpost" => $forum['lastpost'],
"lastpostsubject" => $forum['lastpostsubject'],
"lastpostsubject" => $forum['lastpostsubject'],
"lastposter" => $forum['lastposter'],
"lastposter" => $forum['lastposter'],
"lastposttid" => $forum['lastposttid'],
"lastposttid" => $forum['lastposttid'],
"lastposteruid" => $forum['lastposteruid']
"lastposteruid" => $forum['lastposteruid']
);
);
}
}
コピー
コピー済み
コピー
コピー済み
if($forum['password'] != '' && $mybb->cookies['forumpass'][$forum['fid']] !
=
= md5($mybb->user['uid'].$forum['password']))
if($forum['password'] != '' && $mybb->cookies['forumpass'][$forum['fid']] !
= md5($mybb->user['uid'].$forum['password']))
{
{
$hideinfo = true;
$hideinfo = true;
$showlockicon = 1;
$showlockicon = 1;
}
}
// Fetch subforums of this forum
// Fetch subforums of this forum
if(isset($fcache[$forum['fid']]))
if(isset($fcache[$forum['fid']]))
{
{
コピー
コピー済み
コピー
コピー済み
$subforums_exist = true;
$forum_info = build_forumbits($forum['fid'], $depth+1);
$forum_info = build_forumbits($forum['fid'], $depth+1);
// Increment forum counters with counters from child forums
// Increment forum counters with counters from child forums
$forum['threads'] += $forum_info['counters']['threads'];
$forum['threads'] += $forum_info['counters']['threads'];
$forum['posts'] += $forum_info['counters']['posts'];
$forum['posts'] += $forum_info['counters']['posts'];
$forum['unapprovedthreads'] += $forum_info['counters']['unapprovedthreads'];
$forum['unapprovedthreads'] += $forum_info['counters']['unapprovedthreads'];
$forum['unapprovedposts'] += $forum_info['counters']['unapprovedposts'];
$forum['unapprovedposts'] += $forum_info['counters']['unapprovedposts'];
if(!empty($forum_info['counters']['viewing']))
if(!empty($forum_info['counters']['viewing']))
{
{
$forum['viewers'] += $forum_info['counters']['viewing'];
$forum['viewers'] += $forum_info['counters']['viewing'];
}
}
// If the child forums' lastpost is greater than the one for this forum, set it as the child forums greatest.
// If the child forums' lastpost is greater than the one for this forum, set it as the child forums greatest.
if($forum_info['lastpost']['lastpost'] > $lastpost_data['lastpost'])
if($forum_info['lastpost']['lastpost'] > $lastpost_data['lastpost'])
{
{
$lastpost_data = $forum_info['lastpost'];
$lastpost_data = $forum_info['lastpost'];
コピー
コピー済み
コピー
コピー済み
/*
/*
// If our subforum is unread, then so must be our parents. Force our parents to unread as well
// If our subforum is unread, then so must be our parents. Force our parents to unread as well
if(strstr($forum_info['lightbulb']['folder'], "on") !== false)
if(strstr($forum_info['lightbulb']['folder'], "on") !== false)
{
{
$forum['lastread'] = 0;
$forum['lastread'] = 0;
}
}
// Otherwise, if we have an explicit record in the db, we must make sure that it is explicitly set
// Otherwise, if we have an explicit record in the db, we must make sure that it is explicitly set
else
else
{
{
$lastpost_data['lastpost'] = $forum['lastpost'];
$lastpost_data['lastpost'] = $forum['lastpost'];
}*/
}*/
}
}
コピー
コピー済み
コピー
コピー済み
if ($forum_info['lightbulb']['unread'] || $forum_info['unread'])
{
$unread = true;
}
$sub_forums = $forum_info['forum_list'];
$sub_forums = $forum_info['forum_list'];
}
}
// If we are hiding information (lastpost) because we aren't authenticated against the password for this forum, remove them
// If we are hiding information (lastpost) because we aren't authenticated against the password for this forum, remove them
if($hidelastpostinfo == true)
if($hidelastpostinfo == true)
{
{
$lastpost_data = array(
$lastpost_data = array(
'lastpost' => 0,
'lastpost' => 0,
コピー
コピー済み
コピー
コピー済み
'lastposter' => ''
'lastposter' => ''
);
);
}
}
コピー
コピー済み
コピー
コピー済み
// If the current forums lastpost is greater than other child forums of the current parent, overwrite it
// If the current forums lastpost is greater than other child forums of the current parent, overwrite it
if(!isset($parent_lastpost) || $lastpost_data['lastpost'] > $parent_lastpost['lastpost'])
if(!isset($parent_lastpost) || $lastpost_data['lastpost'] > $parent_lastpost['lastpost'])
{
{
$parent_lastpost = $lastpost_data;
$parent_lastpost = $lastpost_data;
}
}
if(is_array($forum_viewers) && isset($forum_viewers[$forum['fid']]) && $forum_viewers[$forum['fid']] > 0)
if(is_array($forum_viewers) && isset($forum_viewers[$forum['fid']]) && $forum_viewers[$forum['fid']] > 0)
{
{
$forum['viewers'] = $forum_viewers[$forum['fid']];
$forum['viewers'] = $forum_viewers[$forum['fid']];
}
}
// Increment the counters for the parent forum (returned later)
// Increment the counters for the parent forum (returned later)
if($hideinfo != true && $hidecounters != true)
if($hideinfo != true && $hidecounters != true)
{
{
$parent_counters['threads'] += $forum['threads'];
$parent_counters['threads'] += $forum['threads'];
$parent_counters['posts'] += $forum['posts'];
$parent_counters['posts'] += $forum['posts'];
$parent_counters['unapprovedposts'] += $forum['unapprovedposts'];
$parent_counters['unapprovedposts'] += $forum['unapprovedposts'];
$parent_counters['unapprovedthreads'] += $forum['unapprovedthreads'];
$parent_counters['unapprovedthreads'] += $forum['unapprovedthreads'];
if(!empty($forum['viewers']))
if(!empty($forum['viewers']))
{
{
$parent_counters['viewers'] += $forum['viewers'];
$parent_counters['viewers'] += $forum['viewers'];
}
}
}
}
コピー
コピー済み
コピー
コピー済み
// Get the lightbulb status indicator for this forum based on the lastpost
$lightbulb = get_forum_lightbulb($forum, $lastpost_data, $showlockicon, $unread, $subforums_exist);
if ($lightbulb['unread'] == true)
{
$parent_unread = true;
$unread = true;
$forum['unread'] = true;
$forum_info['unread'] = true;
}
// Done with our math, lets talk about displaying - only display forums which are under a certain depth
// Done with our math, lets talk about displaying - only display forums which are under a certain depth
if($depth > $showdepth)
if($depth > $showdepth)
{
{
continue;
continue;
}
}
コピー
コピー済み
コピー
コピー済み
// Get the lightbulb status indicator for this forum based on the lastpost
$lightbulb = get_forum_lightbulb($forum, $lastpost_data, $showlockicon);
// Fetch the number of unapproved threads and posts for this forum
// Fetch the number of unapproved threads and posts for this forum
$unapproved = get_forum_unapproved($forum);
$unapproved = get_forum_unapproved($forum);
コピー
コピー済み
コピー
コピー済み
if($hideinfo == true)
if($hideinfo == true)
{
{
unset($unapproved);
unset($unapproved);
}
}
// Sanitize name and description of forum.
// Sanitize name and description of forum.
$forum['name'] = preg_replace("#&(?!\#[0-9]+;)#si", "&", $forum['name']); // Fix & but allow unicode
$forum['name'] = preg_replace("#&(?!\#[0-9]+;)#si", "&", $forum['name']); // Fix & but allow unicode
$forum['description'] = preg_replace("#&(?!\#[0-9]+;)#si", "&", $forum['description']); // Fix & but allow unicode
$forum['description'] = preg_replace("#&(?!\#[0-9]+;)#si", "&", $forum['description']); // Fix & but allow unicode
$forum['name'] = preg_replace("#&([^\#])(?![a-z1-4]{1,10};)#i", "&$1", $forum['name']);
$forum['name'] = preg_replace("#&([^\#])(?![a-z1-4]{1,10};)#i", "&$1", $forum['name']);
$forum['description'] = preg_replace("#&([^\#])(?![a-z1-4]{1,10};)#i", "&$1", $forum['description']);
$forum['description'] = preg_replace("#&([^\#])(?![a-z1-4]{1,10};)#i", "&$1", $forum['description']);
// If this is a forum and we've got subforums of it, load the subforums list template
// If this is a forum and we've got subforums of it, load the subforums list template
if($depth == 2 && $sub_forums)
if($depth == 2 && $sub_forums)
{
{
eval("\$subforums = \"".$templates->get("forumbit_subforums")."\";");
eval("\$subforums = \"".$templates->get("forumbit_subforums")."\";");
}
}
// A depth of three indicates a comma separated list of forums within a forum
// A depth of three indicates a comma separated list of forums within a forum
else if($depth == 3)
else if($depth == 3)
{
{
if($donecount < $mybb->settings['subforumsindex'])
if($donecount < $mybb->settings['subforumsindex'])
{
{
$statusicon = '';
$statusicon = '';
// Showing mini status icons for this forum
// Showing mini status icons for this forum
if($mybb->settings['subforumsstatusicons'] == 1)
if($mybb->settings['subforumsstatusicons'] == 1)
{
{
$lightbulb['folder'] = "mini".$lightbulb['folder'];
$lightbulb['folder'] = "mini".$lightbulb['folder'];
eval("\$statusicon = \"".$templates->get("forumbit_depth3_statusicon", 1, 0)."\";");
eval("\$statusicon = \"".$templates->get("forumbit_depth3_statusicon", 1, 0)."\";");
}
}
// Fetch the template and append it to the list
// Fetch the template and append it to the list
eval("\$forum_list .= \"".$templates->get("forumbit_depth3", 1, 0)."\";");
eval("\$forum_list .= \"".$templates->get("forumbit_depth3", 1, 0)."\";");
$comma = $lang->comma;
$comma = $lang->comma;
}
}
// Have we reached our max visible subforums? put a nice message and break out of the loop
// Have we reached our max visible subforums? put a nice message and break out of the loop
++$donecount;
++$donecount;
if($donecount == $mybb->settings['subforumsindex'])
if($donecount == $mybb->settings['subforumsindex'])
{
{
if(subforums_count($fcache[$pid]) > $donecount)
if(subforums_count($fcache[$pid]) > $donecount)
{
{
$forum_list .= $comma.$lang->sprintf($lang->more_subforums, (subforums_count($fcache[$pid]) - $donecount));
$forum_list .= $comma.$lang->sprintf($lang->more_subforums, (subforums_count($fcache[$pid]) - $donecount));
}
}
}
}
continue;
continue;
}
}
コピー
コピー済み
コピー
コピー済み
// Forum is a category, set template type
// Forum is a category, set template type
if($forum['type'] == 'c')
if($forum['type'] == 'c')
{
{
$forumcat = '_cat';
$forumcat = '_cat';
}
}
// Forum is a standard forum, set template type
// Forum is a standard forum, set template type
else
else
{
{
$forumcat = '_forum';
$forumcat = '_forum';
}
}
if($forum['linkto'] == '')
if($forum['linkto'] == '')
{
{
// No posts have been made in this forum - show never text
// No posts have been made in this forum - show never text
if(($lastpost_data['lastpost'] == 0 || $lastpost_data['lastposter'] == '') && $hideinfo != true)
if(($lastpost_data['lastpost'] == 0 || $lastpost_data['lastposter'] == '') && $hideinfo != true)
{
{
eval("\$lastpost = \"".$templates->get("forumbit_depth2_forum_lastpost_never")."\";");
eval("\$lastpost = \"".$templates->get("forumbit_depth2_forum_lastpost_never")."\";");
}
}
elseif($hideinfo != true)
elseif($hideinfo != true)
{
{
// Format lastpost date and time
// Format lastpost date and time
コピー
コピー済み
コピー
コピー済み
$lastpost_date = my_date('relative', $lastpost_data['lastpost']);
$lastpost_date = my_date('relative', $lastpost_data['lastpost']);
// Set up the last poster, last post thread id, last post subject and format appropriately
// Set up the last poster, last post thread id, last post subject and format appropriately
$lastpost_profilelink = build_profile_link($lastpost_data['lastposter'], $lastpost_data['lastposteruid']);
$lastpost_profilelink = build_profile_link($lastpost_data['lastposter'], $lastpost_data['lastposteruid']);
$lastpost_link = get_thread_link($lastpost_data['lastposttid'], 0, "lastpost");
$lastpost_link = get_thread_link($lastpost_data['lastposttid'], 0, "lastpost");
$lastpost_subject = $full_lastpost_subject = $parser->parse_badwords($lastpost_data['lastpostsubject']);
$lastpost_subject = $full_lastpost_subject = $parser->parse_badwords($lastpost_data['lastpostsubject']);
if(my_strlen($lastpost_subject) > 25)
if(my_strlen($lastpost_subject) > 25)
{
{
$lastpost_subject = my_substr($lastpost_subject, 0, 25)."...";
$lastpost_subject = my_substr($lastpost_subject, 0, 25)."...";
}
}
$lastpost_subject = htmlspecialchars_uni($lastpost_subject);
$lastpost_subject = htmlspecialchars_uni($lastpost_subject);
$full_lastpost_subject = htmlspecialchars_uni($full_lastpost_subject);
$full_lastpost_subject = htmlspecialchars_uni($full_lastpost_subject);
コピー
コピー済み
コピー
コピー済み
// Call lastpost template
// Call lastpost template
if($depth != 1)
if($depth != 1)
コピー
コピー済み
コピー
コピー済み
{
{
eval("\$lastpost = \"".$templates->get("forumbit_depth{$depth}_forum_lastpost")."\";");
eval("\$lastpost = \"".$templates->get("forumbit_depth{$depth}_forum_lastpost")."\";");
}
}
}
}
if($mybb->settings['showforumviewing'] != 0 && $forum['viewers'] > 0)
if($mybb->settings['showforumviewing'] != 0 && $forum['viewers'] > 0)
{
{
if($forum['viewers'] == 1)
if($forum['viewers'] == 1)
{
{
$forum_viewers_text = $lang->viewing_one;
$forum_viewers_text = $lang->viewing_one;
}
}
else
else
{
{
$forum_viewers_text = $lang->sprintf($lang->viewing_multiple, $forum['viewers']);
$forum_viewers_text = $lang->sprintf($lang->viewing_multiple, $forum['viewers']);
}
}
$forum_viewers_text_plain = $forum_viewers_text;
$forum_viewers_text_plain = $forum_viewers_text;
eval("\$forum_viewers_text = \"".$templates->get("forumbit_depth2_forum_viewers")."\";");
eval("\$forum_viewers_text = \"".$templates->get("forumbit_depth2_forum_viewers")."\";");
}
}
}
}
// If this forum is a link or is password protected and the user isn't authenticated, set counters to "-"
// If this forum is a link or is password protected and the user isn't authenticated, set counters to "-"
if($forum['linkto'] != '' || $hideinfo == true || $hidecounters == true)
if($forum['linkto'] != '' || $hideinfo == true || $hidecounters == true)
{
{
$posts = "-";
$posts = "-";
$threads = "-";
$threads = "-";
}
}
// Otherwise, format thread and post counts
// Otherwise, format thread and post counts
else
else
{
{
$posts = my_number_format($forum['posts']);
$posts = my_number_format($forum['posts']);
$threads = my_number_format($forum['threads']);
$threads = my_number_format($forum['threads']);
}
}
コピー
コピー済み
コピー
コピー済み
// If this forum is a link or is password protected and the user isn't authenticated, set lastpost to "-"
// If this forum is a link or is password protected and the user isn't authenticated, set lastpost to "-"
if($forum['linkto'] != '' || $hideinfo == true || $hidelastpostinfo == true)
if($forum['linkto'] != '' || $hideinfo == true || $hidelastpostinfo == true)
{
{
eval("\$lastpost = \"".$templates->get("forumbit_depth2_forum_lastpost_hidden")."\";");
eval("\$lastpost = \"".$templates->get("forumbit_depth2_forum_lastpost_hidden")."\";");
}
}
// Moderator column is not off
// Moderator column is not off
if($mybb->settings['modlist'] != 0)
if($mybb->settings['modlist'] != 0)
{
{
$done_moderators = array(
$done_moderators = array(
"users" => array(),
"users" => array(),
"groups" => array()
"groups" => array()
);
);
$moderators = '';
$moderators = '';
// Fetch list of moderators from this forum and its parents
// Fetch list of moderators from this forum and its parents
$parentlistexploded = explode(',', $forum['parentlist']);
$parentlistexploded = explode(',', $forum['parentlist']);
foreach($parentlistexploded as $mfid)
foreach($parentlistexploded as $mfid)
{
{
// This forum has moderators
// This forum has moderators
if(isset($moderatorcache[$mfid]) && is_array($moderatorcache[$mfid]))
if(isset($moderatorcache[$mfid]) && is_array($moderatorcache[$mfid]))
{
{
// Fetch each moderator from the cache and format it, appending it to the list
// Fetch each moderator from the cache and format it, appending it to the list
foreach($moderatorcache[$mfid] as $modtype)
foreach($moderatorcache[$mfid] as $modtype)
{
{
foreach($modtype as $moderator)
foreach($modtype as $moderator)
{
{
if($moderator['isgroup'])
if($moderator['isgroup'])
{
{
if(in_array($moderator['id'], $done_moderators['groups']))
if(in_array($moderator['id'], $done_moderators['groups']))
{
{
continue;
continue;
}
}
$moderator['title'] = htmlspecialchars_uni($moderator['title']);
$moderator['title'] = htmlspecialchars_uni($moderator['title']);
eval("\$moderators .= \"".$templates->get("forumbit_moderators_group", 1, 0)."\";");
eval("\$moderators .= \"".$templates->get("forumbit_moderators_group", 1, 0)."\";");
$done_moderators['groups'][] = $moderator['id'];
$done_moderators['groups'][] = $moderator['id'];
}
}
else
else
{
{
if(in_array($moderator['id'], $done_moderators['users']))
if(in_array($moderator['id'], $done_moderators['users']))
{
{
continue;
continue;
}
}
$moderator['profilelink'] = get_profile_link($moderator['id']);
$moderator['profilelink'] = get_profile_link($moderator['id']);
$moderator['username'] = htmlspecialchars_uni($moderator['username']);
$moderator['username'] = htmlspecialchars_uni($moderator['username']);
eval("\$moderators .= \"".$templates->get("forumbit_moderators_user", 1, 0)."\";");
eval("\$moderators .= \"".$templates->get("forumbit_moderators_user", 1, 0)."\";");
$done_moderators['users'][] = $moderator['id'];
$done_moderators['users'][] = $moderator['id'];
}
}
$comma = $lang->comma;
$comma = $lang->comma;
}
}
}
}
}
}
}
}
$comma = '';
$comma = '';
// If we have a moderators list, load the template
// If we have a moderators list, load the template
if($moderators)
if($moderators)
{
{
eval("\$modlist = \"".$templates->get("forumbit_moderators")."\";");
eval("\$modlist = \"".$templates->get("forumbit_moderators")."\";");
}
}
else
else
{
{
$modlist = '';
$modlist = '';
}
}
}
}
// Descriptions aren't being shown - blank them
// Descriptions aren't being shown - blank them
if($mybb->settings['showdescriptions'] == 0)
if($mybb->settings['showdescriptions'] == 0)
{
{
$forum['description'] = '';
$forum['description'] = '';
}
}
// Check if this category is either expanded or collapsed and hide it as necessary.
// Check if this category is either expanded or collapsed and hide it as necessary.
$expdisplay = '';
$expdisplay = '';
$collapsed_name = "cat_{$forum['fid']}_c";
$collapsed_name = "cat_{$forum['fid']}_c";
if(isset($collapsed[$collapsed_name]) && $collapsed[$collapsed_name] == "display: show;")
if(isset($collapsed[$collapsed_name]) && $collapsed[$collapsed_name] == "display: show;")
{
{
$expcolimage = "collapse_collapsed.png";
$expcolimage = "collapse_collapsed.png";
$expdisplay = "display: none;";
$expdisplay = "display: none;";
$expthead = " thead_collapsed";
$expthead = " thead_collapsed";
$expaltext = "[+]";
$expaltext = "[+]";
}
}
else
else
{
{
$expcolimage = "collapse.png";
$expcolimage = "collapse.png";
$expthead = "";
$expthead = "";
$expaltext = "[-]";
$expaltext = "[-]";
}
}
// Swap over the alternate backgrounds
// Swap over the alternate backgrounds
$bgcolor = alt_trow();
$bgcolor = alt_trow();
// Add the forum to the list
// Add the forum to the list
eval("\$forum_list .= \"".$templates->get("forumbit_depth$depth$forumcat")."\";");
eval("\$forum_list .= \"".$templates->get("forumbit_depth$depth$forumcat")."\";");
}
}
}
}
コピー
コピー済み
コピー
コピー済み
if(!isset($parent_lastpost))
if(!isset($parent_lastpost))
{
{
$parent_lastpost = 0;
$parent_lastpost = 0;
}
}
if(!isset($lightbulb))
if(!isset($lightbulb))
{
{
$lightbulb = '';
$lightbulb = '';
}
}
// Return an array of information to the parent forum including child forums list, counters and lastpost information
// Return an array of information to the parent forum including child forums list, counters and lastpost information
return array(
return array(
"forum_list" => $forum_list,
"forum_list" => $forum_list,
"counters" => $parent_counters,
"counters" => $parent_counters,
"lastpost" => $parent_lastpost,
"lastpost" => $parent_lastpost,
"lightbulb" => $lightbulb,
"lightbulb" => $lightbulb,
コピー
コピー済み
コピー
コピー済み
"unread" => $parent_unread,
);
);
}
}
/**
/**
* Fetch the status indicator for a forum based on its last post and the read date
* Fetch the status indicator for a forum based on its last post and the read date
*
*
コピー
コピー済み
コピー
コピー済み
* @param array
$forum
Array of information about the forum
* @param array
Array of information about the forum
* @param array
$lastpost
Array of information about the lastpost date
* @param array
Array of information about the lastpost date
* @param int
$locked
Whether or not this forum is locked or not
* @param int
Whether or not this forum is locked or not
* @return array Array of the folder image to be shown and the alt text
* @return array Array of the folder image to be shown and the alt text
*/
*/
コピー
コピー済み
コピー
コピー済み
function get_forum_lightbulb($forum, $lastpost, $locked=0
)
function get_forum_lightbulb($forum, $lastpost, $locked=0
, $unread = false, $subforums_exist = false
)
{
{
global $mybb, $lang, $db, $unread_forums;
global $mybb, $lang, $db, $unread_forums;
コピー
コピー済み
コピー
コピー済み
// For guests
if ($mybb->user['uid'] == 0)
{
return array(
"folder" => "off",
"altonoff" => $lang->no_new_posts,
"unread" => false,
);
}
// This forum is a redirect, so override the folder icon with the "offlink" icon.
// This forum is a redirect, so override the folder icon with the "offlink" icon.
if($forum['linkto'] != '')
if($forum['linkto'] != '')
{
{
$folder = "offlink";
$folder = "offlink";
$altonoff = $lang->forum_redirect;
$altonoff = $lang->forum_redirect;
}
}
// This forum is closed, so override the folder icon with the "offlock" icon.
// This forum is closed, so override the folder icon with the "offlock" icon.
elseif($forum['open'] == 0 || $locked)
elseif($forum['open'] == 0 || $locked)
{
{
$folder = "offlock";
$folder = "offlock";
$altonoff = $lang->forum_locked;
$altonoff = $lang->forum_locked;
}
}
else
else
{
{
コピー
コピー済み
コピー
コピー済み
// Fetch the last read date for this forum
if ($subforums_exist == true)
if(!empty($forum['lastread']))
{
{
if($unread == true)
$forum_read = $forum['lastread'];
{
}
$unread_forums++;
elseif(!empty($mybb->cookies['mybb']['readallforums']))
$folder = "on";
{
$altonoff = $lang->new_posts;
// We've hit the read all forums as a guest, so use the lastvisit of the user
}
$forum_read = $mybb->cookies['mybb']['lastvisit'];
else
}
{
else
$folder = "off";
{
$altonoff = $lang->no_new_posts;
$forum_read = 0;
$threadcut = TIME_NOW - 60*60*24*$mybb->settings['threadreadcut'];
if ($forum['type'] == 'f')
{
// If the user is a guest, do they have a forumsread cookie?
// Fetch the last read date for this forum
if(!$mybb->user['uid'] && isset($mybb->cookies['mybb']['forumread']))
if (!empty($forum['lastread']))
{
{
// If they've visited us before, then they'll have this cookie - otherwise everything is unread...
$forum_read = $forum['lastread'];
$forum_read = my_get_array_cookie("forumread", $forum['fid']);
}
}
else // Is there not a read record for this forum? It must be unread
else if(
$mybb->user['uid'] && $
mybb->settings['threadreadcut'] > 0 && $threadcut > $lastpost['lastpost'])
{
{
$forum_read = 0;
// We have a user, the forum's unread and we're over our threadreadcut limit for the lastpost - we mark these as read
//
$forum_read = my_get_array_cookie("forumread", $forum['fid']);
$forum_read = $lastpost['lastpost'] + 1;
}
}
}
if ($forum['lastposteruid'] !=
$mybb->user['uid'] && $
forum['lastpost'] > $forum_read && $forum['lastpost'] > $mybb->user['lastmark'] && $forum['lastpost'] != 0)
{
//if(!$forum_read)
$unread_forums++;
//{
$folder = "on";
//$forum_read = $mybb->user['lastvisit'];
$altonoff = $lang->new_posts;
//}
$unread = true;
}
// If the lastpost is greater than the last visit and is greater than the forum read date, we have a new post
}
if
($lastpost['lastpost'] > $forum_read && $lastpost['lastpost'
] != 0)
}
{
}
$unread_forums++;
else
$folder = "on";
{
$altonoff = $lang->new_posts;
// Fetch the last read date for this forum
}
if (!empty($forum['lastread']))
// Otherwise, no new posts
{
else
$forum_read = $forum['lastread'];
{
}
$folder = "off";
else // Is there not a read record for this forum? It must be unread
$altonoff = $lang->no_new_posts;
{
}
$forum_read = 0;
}
// If the lastpost is greater than the last visit and is greater than the forum read date, we have a new post
if
($lastpost['lastpost'] > $forum_read && $lastpost['lastpost'
] > $mybb->user['lastmark'] && $lastpost['lastpost'] != 0)
{
$unread_forums++;
$folder = "on";
$altonoff = $lang->new_posts;
$unread = true;
}
// Otherwise, no new posts
else
{
$folder = "off";
$altonoff = $lang->no_new_posts;
}
}
}
}
return array(
return array(
"folder" => $folder,
"folder" => $folder,
コピー
コピー済み
コピー
コピー済み
"altonoff" => $altonoff
"altonoff" => $altonoff
,
"unread" => $unread,
);
);
}
}
/**
/**
* Fetch the number of unapproved posts, formatted, from a forum
* Fetch the number of unapproved posts, formatted, from a forum
*
*
コピー
コピー済み
コピー
コピー済み
* @param array
$forum
Array of information about the forum
* @param array
Array of information about the forum
* @return array Array containing formatted string for posts and string for threads
* @return array Array containing formatted string for posts and string for threads
*/
*/
function get_forum_unapproved($forum)
function get_forum_unapproved($forum)
{
{
global $lang, $templates;
global $lang, $templates;
$unapproved_threads = $unapproved_posts = '';
$unapproved_threads = $unapproved_posts = '';
// If the user is a moderator we need to fetch the count
// If the user is a moderator we need to fetch the count
if(is_moderator($forum['fid'], "canviewunapprove"))
if(is_moderator($forum['fid'], "canviewunapprove"))
{
{
// Forum has one or more unaproved posts, format language string accordingly
// Forum has one or more unaproved posts, format language string accordingly
if($forum['unapprovedposts'])
if($forum['unapprovedposts'])
{
{
if($forum['unapprovedposts'] > 1)
if($forum['unapprovedposts'] > 1)
{
{
$unapproved_posts_count = $lang->sprintf($lang->forum_unapproved_posts_count, $forum['unapprovedposts']);
$unapproved_posts_count = $lang->sprintf($lang->forum_unapproved_posts_count, $forum['unapprovedposts']);
}
}
else
else
{
{
$unapproved_posts_count = $lang->sprintf($lang->forum_unapproved_post_count, 1);
$unapproved_posts_count = $lang->sprintf($lang->forum_unapproved_post_count, 1);
}
}
$forum['unapprovedposts'] = my_number_format($forum['unapprovedposts']);
$forum['unapprovedposts'] = my_number_format($forum['unapprovedposts']);
eval("\$unapproved_posts = \"".$templates->get("forumbit_depth2_forum_unapproved_posts")."\";");
eval("\$unapproved_posts = \"".$templates->get("forumbit_depth2_forum_unapproved_posts")."\";");
}
}
// Forum has one or more unapproved threads, format language string accordingly
// Forum has one or more unapproved threads, format language string accordingly
if($forum['unapprovedthreads'])
if($forum['unapprovedthreads'])
{
{
if($forum['unapprovedthreads'] > 1)
if($forum['unapprovedthreads'] > 1)
{
{
$unapproved_threads_count = $lang->sprintf($lang->forum_unapproved_threads_count, $forum['unapprovedthreads']);
$unapproved_threads_count = $lang->sprintf($lang->forum_unapproved_threads_count, $forum['unapprovedthreads']);
}
}
else
else
{
{
$unapproved_threads_count = $lang->sprintf($lang->forum_unapproved_thread_count, 1);
$unapproved_threads_count = $lang->sprintf($lang->forum_unapproved_thread_count, 1);
}
}
$forum['unapprovedthreads'] = my_number_format($forum['unapprovedthreads']);
$forum['unapprovedthreads'] = my_number_format($forum['unapprovedthreads']);
eval("\$unapproved_threads = \"".$templates->get("forumbit_depth2_forum_unapproved_threads")."\";");
eval("\$unapproved_threads = \"".$templates->get("forumbit_depth2_forum_unapproved_threads")."\";");
}
}
}
}
return array(
return array(
"unapproved_posts" => $unapproved_posts,
"unapproved_posts" => $unapproved_posts,
"unapproved_threads" => $unapproved_threads
"unapproved_threads" => $unapproved_threads
);
);
}
}
コピー
コピー済み
コピー
コピー済み
?>
保存された差分
原文
ファイルを開く
<?php /** * MyBB 1.8 * Copyright 2014 MyBB Group, All Rights Reserved * * Website: http://www.mybb.com * License: http://www.mybb.com/about/license * */ /** * Build a list of forum bits. * * @param int $pid The parent forum to fetch the child forums for (0 assumes all) * @param int $depth The depth to return forums with. * @return array Array of information regarding the child forums of this parent forum */ function build_forumbits($pid=0, $depth=1) { global $db, $fcache, $moderatorcache, $forumpermissions, $theme, $mybb, $templates, $bgcolor, $collapsed, $lang, $showdepth, $plugins, $parser, $forum_viewers; static $private_forums; $forum_listing = ''; // If no forums exist with this parent, do nothing if(empty($fcache[$pid]) || !is_array($fcache[$pid])) { return; } $parent_counters['threads'] = 0; $parent_counters['posts'] = 0; $parent_counters['unapprovedposts'] = 0; $parent_counters['unapprovedthreads'] = 0; $parent_counters['viewers'] = 0; $forum_list = $comma = ''; $donecount = 0; // Foreach of the forums in this parent foreach($fcache[$pid] as $parent) { foreach($parent as $forum) { $subforums = $sub_forums = ''; $lastpost_data = array( 'lastpost' => 0 ); $forum_viewers_text = ''; $forum_viewers_text_plain = ''; // Get the permissions for this forum $permissions = $forumpermissions[$forum['fid']]; // If this user doesnt have permission to view this forum and we're hiding private forums, skip this forum if($permissions['canview'] != 1 && $mybb->settings['hideprivateforums'] == 1) { continue; } $forum = $plugins->run_hooks("build_forumbits_forum", $forum); // Build the link to this forum $forum_url = get_forum_link($forum['fid']); // This forum has a password, and the user isn't authenticated with it - hide post information $hideinfo = $hidecounters = false; $hidelastpostinfo = false; $showlockicon = 0; if(isset($permissions['canviewthreads']) && $permissions['canviewthreads'] != 1) { $hideinfo = true; } if(isset($permissions['canonlyviewownthreads']) && $permissions['canonlyviewownthreads'] == 1) { $hidecounters = true; // If we only see our own threads, find out if there's a new post in one of them so the lightbulb shows if(!is_array($private_forums)) { $private_forums = $fids = array(); foreach($fcache as $fcache_p) { foreach($fcache_p as $parent_p) { foreach($parent_p as $forum_p) { if($forumpermissions[$forum_p['fid']]['canonlyviewownthreads']) { $fids[] = $forum_p['fid']; } } } } if(!empty($fids)) { $fids = implode(',', $fids); $query = $db->simple_select("threads", "tid, fid, subject, lastpost, lastposter, lastposteruid", "uid = '{$mybb->user['uid']}' AND fid IN ({$fids}) AND visible != '-2'", array("order_by" => "lastpost", "order_dir" => "desc")); while($thread = $db->fetch_array($query)) { if(!$private_forums[$thread['fid']]) { $private_forums[$thread['fid']] = $thread; } } } } if($private_forums[$forum['fid']]['lastpost']) { $forum['lastpost'] = $private_forums[$forum['fid']]['lastpost']; $lastpost_data = array( "lastpost" => $private_forums[$forum['fid']]['lastpost'], "lastpostsubject" => $private_forums[$forum['fid']]['subject'], "lastposter" => $private_forums[$forum['fid']]['lastposter'], "lastposttid" => $private_forums[$forum['fid']]['tid'], "lastposteruid" => $private_forums[$forum['fid']]['lastposteruid'] ); } } else { $lastpost_data = array( "lastpost" => $forum['lastpost'], "lastpostsubject" => $forum['lastpostsubject'], "lastposter" => $forum['lastposter'], "lastposttid" => $forum['lastposttid'], "lastposteruid" => $forum['lastposteruid'] ); } if($forum['password'] != '' && $mybb->cookies['forumpass'][$forum['fid']] !== md5($mybb->user['uid'].$forum['password'])) { $hideinfo = true; $showlockicon = 1; } // Fetch subforums of this forum if(isset($fcache[$forum['fid']])) { $forum_info = build_forumbits($forum['fid'], $depth+1); // Increment forum counters with counters from child forums $forum['threads'] += $forum_info['counters']['threads']; $forum['posts'] += $forum_info['counters']['posts']; $forum['unapprovedthreads'] += $forum_info['counters']['unapprovedthreads']; $forum['unapprovedposts'] += $forum_info['counters']['unapprovedposts']; if(!empty($forum_info['counters']['viewing'])) { $forum['viewers'] += $forum_info['counters']['viewing']; } // If the child forums' lastpost is greater than the one for this forum, set it as the child forums greatest. if($forum_info['lastpost']['lastpost'] > $lastpost_data['lastpost']) { $lastpost_data = $forum_info['lastpost']; /* // If our subforum is unread, then so must be our parents. Force our parents to unread as well if(strstr($forum_info['lightbulb']['folder'], "on") !== false) { $forum['lastread'] = 0; } // Otherwise, if we have an explicit record in the db, we must make sure that it is explicitly set else { $lastpost_data['lastpost'] = $forum['lastpost']; }*/ } $sub_forums = $forum_info['forum_list']; } // If we are hiding information (lastpost) because we aren't authenticated against the password for this forum, remove them if($hidelastpostinfo == true) { $lastpost_data = array( 'lastpost' => 0, 'lastposter' => '' ); } // If the current forums lastpost is greater than other child forums of the current parent, overwrite it if(!isset($parent_lastpost) || $lastpost_data['lastpost'] > $parent_lastpost['lastpost']) { $parent_lastpost = $lastpost_data; } if(is_array($forum_viewers) && isset($forum_viewers[$forum['fid']]) && $forum_viewers[$forum['fid']] > 0) { $forum['viewers'] = $forum_viewers[$forum['fid']]; } // Increment the counters for the parent forum (returned later) if($hideinfo != true && $hidecounters != true) { $parent_counters['threads'] += $forum['threads']; $parent_counters['posts'] += $forum['posts']; $parent_counters['unapprovedposts'] += $forum['unapprovedposts']; $parent_counters['unapprovedthreads'] += $forum['unapprovedthreads']; if(!empty($forum['viewers'])) { $parent_counters['viewers'] += $forum['viewers']; } } // Done with our math, lets talk about displaying - only display forums which are under a certain depth if($depth > $showdepth) { continue; } // Get the lightbulb status indicator for this forum based on the lastpost $lightbulb = get_forum_lightbulb($forum, $lastpost_data, $showlockicon); // Fetch the number of unapproved threads and posts for this forum $unapproved = get_forum_unapproved($forum); if($hideinfo == true) { unset($unapproved); } // Sanitize name and description of forum. $forum['name'] = preg_replace("#&(?!\#[0-9]+;)#si", "&", $forum['name']); // Fix & but allow unicode $forum['description'] = preg_replace("#&(?!\#[0-9]+;)#si", "&", $forum['description']); // Fix & but allow unicode $forum['name'] = preg_replace("#&([^\#])(?![a-z1-4]{1,10};)#i", "&$1", $forum['name']); $forum['description'] = preg_replace("#&([^\#])(?![a-z1-4]{1,10};)#i", "&$1", $forum['description']); // If this is a forum and we've got subforums of it, load the subforums list template if($depth == 2 && $sub_forums) { eval("\$subforums = \"".$templates->get("forumbit_subforums")."\";"); } // A depth of three indicates a comma separated list of forums within a forum else if($depth == 3) { if($donecount < $mybb->settings['subforumsindex']) { $statusicon = ''; // Showing mini status icons for this forum if($mybb->settings['subforumsstatusicons'] == 1) { $lightbulb['folder'] = "mini".$lightbulb['folder']; eval("\$statusicon = \"".$templates->get("forumbit_depth3_statusicon", 1, 0)."\";"); } // Fetch the template and append it to the list eval("\$forum_list .= \"".$templates->get("forumbit_depth3", 1, 0)."\";"); $comma = $lang->comma; } // Have we reached our max visible subforums? put a nice message and break out of the loop ++$donecount; if($donecount == $mybb->settings['subforumsindex']) { if(subforums_count($fcache[$pid]) > $donecount) { $forum_list .= $comma.$lang->sprintf($lang->more_subforums, (subforums_count($fcache[$pid]) - $donecount)); } } continue; } // Forum is a category, set template type if($forum['type'] == 'c') { $forumcat = '_cat'; } // Forum is a standard forum, set template type else { $forumcat = '_forum'; } if($forum['linkto'] == '') { // No posts have been made in this forum - show never text if(($lastpost_data['lastpost'] == 0 || $lastpost_data['lastposter'] == '') && $hideinfo != true) { eval("\$lastpost = \"".$templates->get("forumbit_depth2_forum_lastpost_never")."\";"); } elseif($hideinfo != true) { // Format lastpost date and time $lastpost_date = my_date('relative', $lastpost_data['lastpost']); // Set up the last poster, last post thread id, last post subject and format appropriately $lastpost_profilelink = build_profile_link($lastpost_data['lastposter'], $lastpost_data['lastposteruid']); $lastpost_link = get_thread_link($lastpost_data['lastposttid'], 0, "lastpost"); $lastpost_subject = $full_lastpost_subject = $parser->parse_badwords($lastpost_data['lastpostsubject']); if(my_strlen($lastpost_subject) > 25) { $lastpost_subject = my_substr($lastpost_subject, 0, 25)."..."; } $lastpost_subject = htmlspecialchars_uni($lastpost_subject); $full_lastpost_subject = htmlspecialchars_uni($full_lastpost_subject); // Call lastpost template if($depth != 1) { eval("\$lastpost = \"".$templates->get("forumbit_depth{$depth}_forum_lastpost")."\";"); } } if($mybb->settings['showforumviewing'] != 0 && $forum['viewers'] > 0) { if($forum['viewers'] == 1) { $forum_viewers_text = $lang->viewing_one; } else { $forum_viewers_text = $lang->sprintf($lang->viewing_multiple, $forum['viewers']); } $forum_viewers_text_plain = $forum_viewers_text; eval("\$forum_viewers_text = \"".$templates->get("forumbit_depth2_forum_viewers")."\";"); } } // If this forum is a link or is password protected and the user isn't authenticated, set counters to "-" if($forum['linkto'] != '' || $hideinfo == true || $hidecounters == true) { $posts = "-"; $threads = "-"; } // Otherwise, format thread and post counts else { $posts = my_number_format($forum['posts']); $threads = my_number_format($forum['threads']); } // If this forum is a link or is password protected and the user isn't authenticated, set lastpost to "-" if($forum['linkto'] != '' || $hideinfo == true || $hidelastpostinfo == true) { eval("\$lastpost = \"".$templates->get("forumbit_depth2_forum_lastpost_hidden")."\";"); } // Moderator column is not off if($mybb->settings['modlist'] != 0) { $done_moderators = array( "users" => array(), "groups" => array() ); $moderators = ''; // Fetch list of moderators from this forum and its parents $parentlistexploded = explode(',', $forum['parentlist']); foreach($parentlistexploded as $mfid) { // This forum has moderators if(isset($moderatorcache[$mfid]) && is_array($moderatorcache[$mfid])) { // Fetch each moderator from the cache and format it, appending it to the list foreach($moderatorcache[$mfid] as $modtype) { foreach($modtype as $moderator) { if($moderator['isgroup']) { if(in_array($moderator['id'], $done_moderators['groups'])) { continue; } $moderator['title'] = htmlspecialchars_uni($moderator['title']); eval("\$moderators .= \"".$templates->get("forumbit_moderators_group", 1, 0)."\";"); $done_moderators['groups'][] = $moderator['id']; } else { if(in_array($moderator['id'], $done_moderators['users'])) { continue; } $moderator['profilelink'] = get_profile_link($moderator['id']); $moderator['username'] = htmlspecialchars_uni($moderator['username']); eval("\$moderators .= \"".$templates->get("forumbit_moderators_user", 1, 0)."\";"); $done_moderators['users'][] = $moderator['id']; } $comma = $lang->comma; } } } } $comma = ''; // If we have a moderators list, load the template if($moderators) { eval("\$modlist = \"".$templates->get("forumbit_moderators")."\";"); } else { $modlist = ''; } } // Descriptions aren't being shown - blank them if($mybb->settings['showdescriptions'] == 0) { $forum['description'] = ''; } // Check if this category is either expanded or collapsed and hide it as necessary. $expdisplay = ''; $collapsed_name = "cat_{$forum['fid']}_c"; if(isset($collapsed[$collapsed_name]) && $collapsed[$collapsed_name] == "display: show;") { $expcolimage = "collapse_collapsed.png"; $expdisplay = "display: none;"; $expthead = " thead_collapsed"; $expaltext = "[+]"; } else { $expcolimage = "collapse.png"; $expthead = ""; $expaltext = "[-]"; } // Swap over the alternate backgrounds $bgcolor = alt_trow(); // Add the forum to the list eval("\$forum_list .= \"".$templates->get("forumbit_depth$depth$forumcat")."\";"); } } if(!isset($parent_lastpost)) { $parent_lastpost = 0; } if(!isset($lightbulb)) { $lightbulb = ''; } // Return an array of information to the parent forum including child forums list, counters and lastpost information return array( "forum_list" => $forum_list, "counters" => $parent_counters, "lastpost" => $parent_lastpost, "lightbulb" => $lightbulb, ); } /** * Fetch the status indicator for a forum based on its last post and the read date * * @param array $forum Array of information about the forum * @param array $lastpost Array of information about the lastpost date * @param int $locked Whether or not this forum is locked or not * @return array Array of the folder image to be shown and the alt text */ function get_forum_lightbulb($forum, $lastpost, $locked=0) { global $mybb, $lang, $db, $unread_forums; // This forum is a redirect, so override the folder icon with the "offlink" icon. if($forum['linkto'] != '') { $folder = "offlink"; $altonoff = $lang->forum_redirect; } // This forum is closed, so override the folder icon with the "offlock" icon. elseif($forum['open'] == 0 || $locked) { $folder = "offlock"; $altonoff = $lang->forum_locked; } else { // Fetch the last read date for this forum if(!empty($forum['lastread'])) { $forum_read = $forum['lastread']; } elseif(!empty($mybb->cookies['mybb']['readallforums'])) { // We've hit the read all forums as a guest, so use the lastvisit of the user $forum_read = $mybb->cookies['mybb']['lastvisit']; } else { $forum_read = 0; $threadcut = TIME_NOW - 60*60*24*$mybb->settings['threadreadcut']; // If the user is a guest, do they have a forumsread cookie? if(!$mybb->user['uid'] && isset($mybb->cookies['mybb']['forumread'])) { // If they've visited us before, then they'll have this cookie - otherwise everything is unread... $forum_read = my_get_array_cookie("forumread", $forum['fid']); } else if($mybb->user['uid'] && $mybb->settings['threadreadcut'] > 0 && $threadcut > $lastpost['lastpost']) { // We have a user, the forum's unread and we're over our threadreadcut limit for the lastpost - we mark these as read $forum_read = $lastpost['lastpost'] + 1; } } //if(!$forum_read) //{ //$forum_read = $mybb->user['lastvisit']; //} // If the lastpost is greater than the last visit and is greater than the forum read date, we have a new post if($lastpost['lastpost'] > $forum_read && $lastpost['lastpost'] != 0) { $unread_forums++; $folder = "on"; $altonoff = $lang->new_posts; } // Otherwise, no new posts else { $folder = "off"; $altonoff = $lang->no_new_posts; } } return array( "folder" => $folder, "altonoff" => $altonoff ); } /** * Fetch the number of unapproved posts, formatted, from a forum * * @param array $forum Array of information about the forum * @return array Array containing formatted string for posts and string for threads */ function get_forum_unapproved($forum) { global $lang, $templates; $unapproved_threads = $unapproved_posts = ''; // If the user is a moderator we need to fetch the count if(is_moderator($forum['fid'], "canviewunapprove")) { // Forum has one or more unaproved posts, format language string accordingly if($forum['unapprovedposts']) { if($forum['unapprovedposts'] > 1) { $unapproved_posts_count = $lang->sprintf($lang->forum_unapproved_posts_count, $forum['unapprovedposts']); } else { $unapproved_posts_count = $lang->sprintf($lang->forum_unapproved_post_count, 1); } $forum['unapprovedposts'] = my_number_format($forum['unapprovedposts']); eval("\$unapproved_posts = \"".$templates->get("forumbit_depth2_forum_unapproved_posts")."\";"); } // Forum has one or more unapproved threads, format language string accordingly if($forum['unapprovedthreads']) { if($forum['unapprovedthreads'] > 1) { $unapproved_threads_count = $lang->sprintf($lang->forum_unapproved_threads_count, $forum['unapprovedthreads']); } else { $unapproved_threads_count = $lang->sprintf($lang->forum_unapproved_thread_count, 1); } $forum['unapprovedthreads'] = my_number_format($forum['unapprovedthreads']); eval("\$unapproved_threads = \"".$templates->get("forumbit_depth2_forum_unapproved_threads")."\";"); } } return array( "unapproved_posts" => $unapproved_posts, "unapproved_threads" => $unapproved_threads ); }
変更されたテキスト
ファイルを開く
<?php /** * MyBB 1.8 * Copyright 2014 MyBB Group, All Rights Reserved * * Website: http://www.mybb.com * License: http://www.mybb.com/about/license * */ /** * Build a list of forum bits. * * @param int The parent forum to fetch the child forums for (0 assumes all) * @param int The depth to return forums with. * @return array Array of information regarding the child forums of this parent forum */ function build_forumbits($pid=0, $depth=1) { global $db, $fcache, $moderatorcache, $forumpermissions, $theme, $mybb, $templates, $bgcolor, $collapsed, $lang, $showdepth, $plugins, $parser, $forum_viewers; static $private_forums; $forum_listing = ''; // If no forums exist with this parent, do nothing if(empty($fcache[$pid]) || !is_array($fcache[$pid])) { return; } $parent_counters['threads'] = 0; $parent_counters['posts'] = 0; $parent_counters['unapprovedposts'] = 0; $parent_counters['unapprovedthreads'] = 0; $parent_counters['viewers'] = 0; $forum_list = $comma = ''; $donecount = 0; // Foreach of the forums in this parent foreach($fcache[$pid] as $parent) { foreach($parent as $forum) { $subforums = $sub_forums = ''; $lastpost_data = array( 'lastpost' => 0, 'lastposter' => '' ); $forum_viewers_text = ''; $forum_viewers_text_plain = ''; // LukasAMD Fix $unread = false; $subforums_exist = false; $parent_unread = false; // Get the permissions for this forum $permissions = $forumpermissions[$forum['fid']]; // If this user doesnt have permission to view this forum and we're hiding private forums, skip this forum if($permissions['canview'] != 1 && $mybb->settings['hideprivateforums'] == 1) { continue; } $forum = $plugins->run_hooks("build_forumbits_forum", $forum); // Build the link to this forum $forum_url = get_forum_link($forum['fid']); // This forum has a password, and the user isn't authenticated with it - hide post information $hideinfo = $hidecounters = false; $hidelastpostinfo = false; $showlockicon = 0; if(isset($permissions['canviewthreads']) && $permissions['canviewthreads'] != 1) { $hideinfo = true; } if(isset($permissions['canonlyviewownthreads']) && $permissions['canonlyviewownthreads'] == 1) { $hidecounters = true; // If we only see our own threads, find out if there's a new post in one of them so the lightbulb shows if(!is_array($private_forums)) { $private_forums = $fids = array(); foreach($fcache as $fcache_p) { foreach($fcache_p as $parent_p) { foreach($parent_p as $forum_p) { if($forumpermissions[$forum_p['fid']]['canonlyviewownthreads']) { $fids[] = $forum_p['fid']; } } } } if(!empty($fids)) { $fids = implode(',', $fids); $query = $db->simple_select("threads", "tid, fid, subject, lastpost, lastposter, lastposteruid", "uid = '{$mybb->user['uid']}' AND fid IN ({$fids}) AND visible != '-2'", array("order_by" => "lastpost", "order_dir" => "desc")); while($thread = $db->fetch_array($query)) { if(!$private_forums[$thread['fid']]) { $private_forums[$thread['fid']] = $thread; } } } } if($private_forums[$forum['fid']]['lastpost']) { $forum['lastpost'] = $private_forums[$forum['fid']]['lastpost']; $lastpost_data = array( "lastpost" => $private_forums[$forum['fid']]['lastpost'], "lastpostsubject" => $private_forums[$forum['fid']]['subject'], "lastposter" => $private_forums[$forum['fid']]['lastposter'], "lastposttid" => $private_forums[$forum['fid']]['tid'], "lastposteruid" => $private_forums[$forum['fid']]['lastposteruid'] ); } } else { $lastpost_data = array( "lastpost" => $forum['lastpost'], "lastpostsubject" => $forum['lastpostsubject'], "lastposter" => $forum['lastposter'], "lastposttid" => $forum['lastposttid'], "lastposteruid" => $forum['lastposteruid'] ); } if($forum['password'] != '' && $mybb->cookies['forumpass'][$forum['fid']] != md5($mybb->user['uid'].$forum['password'])) { $hideinfo = true; $showlockicon = 1; } // Fetch subforums of this forum if(isset($fcache[$forum['fid']])) { $subforums_exist = true; $forum_info = build_forumbits($forum['fid'], $depth+1); // Increment forum counters with counters from child forums $forum['threads'] += $forum_info['counters']['threads']; $forum['posts'] += $forum_info['counters']['posts']; $forum['unapprovedthreads'] += $forum_info['counters']['unapprovedthreads']; $forum['unapprovedposts'] += $forum_info['counters']['unapprovedposts']; if(!empty($forum_info['counters']['viewing'])) { $forum['viewers'] += $forum_info['counters']['viewing']; } // If the child forums' lastpost is greater than the one for this forum, set it as the child forums greatest. if($forum_info['lastpost']['lastpost'] > $lastpost_data['lastpost']) { $lastpost_data = $forum_info['lastpost']; /* // If our subforum is unread, then so must be our parents. Force our parents to unread as well if(strstr($forum_info['lightbulb']['folder'], "on") !== false) { $forum['lastread'] = 0; } // Otherwise, if we have an explicit record in the db, we must make sure that it is explicitly set else { $lastpost_data['lastpost'] = $forum['lastpost']; }*/ } if ($forum_info['lightbulb']['unread'] || $forum_info['unread']) { $unread = true; } $sub_forums = $forum_info['forum_list']; } // If we are hiding information (lastpost) because we aren't authenticated against the password for this forum, remove them if($hidelastpostinfo == true) { $lastpost_data = array( 'lastpost' => 0, 'lastposter' => '' ); } // If the current forums lastpost is greater than other child forums of the current parent, overwrite it if(!isset($parent_lastpost) || $lastpost_data['lastpost'] > $parent_lastpost['lastpost']) { $parent_lastpost = $lastpost_data; } if(is_array($forum_viewers) && isset($forum_viewers[$forum['fid']]) && $forum_viewers[$forum['fid']] > 0) { $forum['viewers'] = $forum_viewers[$forum['fid']]; } // Increment the counters for the parent forum (returned later) if($hideinfo != true && $hidecounters != true) { $parent_counters['threads'] += $forum['threads']; $parent_counters['posts'] += $forum['posts']; $parent_counters['unapprovedposts'] += $forum['unapprovedposts']; $parent_counters['unapprovedthreads'] += $forum['unapprovedthreads']; if(!empty($forum['viewers'])) { $parent_counters['viewers'] += $forum['viewers']; } } // Get the lightbulb status indicator for this forum based on the lastpost $lightbulb = get_forum_lightbulb($forum, $lastpost_data, $showlockicon, $unread, $subforums_exist); if ($lightbulb['unread'] == true) { $parent_unread = true; $unread = true; $forum['unread'] = true; $forum_info['unread'] = true; } // Done with our math, lets talk about displaying - only display forums which are under a certain depth if($depth > $showdepth) { continue; } // Fetch the number of unapproved threads and posts for this forum $unapproved = get_forum_unapproved($forum); if($hideinfo == true) { unset($unapproved); } // Sanitize name and description of forum. $forum['name'] = preg_replace("#&(?!\#[0-9]+;)#si", "&", $forum['name']); // Fix & but allow unicode $forum['description'] = preg_replace("#&(?!\#[0-9]+;)#si", "&", $forum['description']); // Fix & but allow unicode $forum['name'] = preg_replace("#&([^\#])(?![a-z1-4]{1,10};)#i", "&$1", $forum['name']); $forum['description'] = preg_replace("#&([^\#])(?![a-z1-4]{1,10};)#i", "&$1", $forum['description']); // If this is a forum and we've got subforums of it, load the subforums list template if($depth == 2 && $sub_forums) { eval("\$subforums = \"".$templates->get("forumbit_subforums")."\";"); } // A depth of three indicates a comma separated list of forums within a forum else if($depth == 3) { if($donecount < $mybb->settings['subforumsindex']) { $statusicon = ''; // Showing mini status icons for this forum if($mybb->settings['subforumsstatusicons'] == 1) { $lightbulb['folder'] = "mini".$lightbulb['folder']; eval("\$statusicon = \"".$templates->get("forumbit_depth3_statusicon", 1, 0)."\";"); } // Fetch the template and append it to the list eval("\$forum_list .= \"".$templates->get("forumbit_depth3", 1, 0)."\";"); $comma = $lang->comma; } // Have we reached our max visible subforums? put a nice message and break out of the loop ++$donecount; if($donecount == $mybb->settings['subforumsindex']) { if(subforums_count($fcache[$pid]) > $donecount) { $forum_list .= $comma.$lang->sprintf($lang->more_subforums, (subforums_count($fcache[$pid]) - $donecount)); } } continue; } // Forum is a category, set template type if($forum['type'] == 'c') { $forumcat = '_cat'; } // Forum is a standard forum, set template type else { $forumcat = '_forum'; } if($forum['linkto'] == '') { // No posts have been made in this forum - show never text if(($lastpost_data['lastpost'] == 0 || $lastpost_data['lastposter'] == '') && $hideinfo != true) { eval("\$lastpost = \"".$templates->get("forumbit_depth2_forum_lastpost_never")."\";"); } elseif($hideinfo != true) { // Format lastpost date and time $lastpost_date = my_date('relative', $lastpost_data['lastpost']); // Set up the last poster, last post thread id, last post subject and format appropriately $lastpost_profilelink = build_profile_link($lastpost_data['lastposter'], $lastpost_data['lastposteruid']); $lastpost_link = get_thread_link($lastpost_data['lastposttid'], 0, "lastpost"); $lastpost_subject = $full_lastpost_subject = $parser->parse_badwords($lastpost_data['lastpostsubject']); if(my_strlen($lastpost_subject) > 25) { $lastpost_subject = my_substr($lastpost_subject, 0, 25)."..."; } $lastpost_subject = htmlspecialchars_uni($lastpost_subject); $full_lastpost_subject = htmlspecialchars_uni($full_lastpost_subject); // Call lastpost template if($depth != 1) { eval("\$lastpost = \"".$templates->get("forumbit_depth{$depth}_forum_lastpost")."\";"); } } if($mybb->settings['showforumviewing'] != 0 && $forum['viewers'] > 0) { if($forum['viewers'] == 1) { $forum_viewers_text = $lang->viewing_one; } else { $forum_viewers_text = $lang->sprintf($lang->viewing_multiple, $forum['viewers']); } $forum_viewers_text_plain = $forum_viewers_text; eval("\$forum_viewers_text = \"".$templates->get("forumbit_depth2_forum_viewers")."\";"); } } // If this forum is a link or is password protected and the user isn't authenticated, set counters to "-" if($forum['linkto'] != '' || $hideinfo == true || $hidecounters == true) { $posts = "-"; $threads = "-"; } // Otherwise, format thread and post counts else { $posts = my_number_format($forum['posts']); $threads = my_number_format($forum['threads']); } // If this forum is a link or is password protected and the user isn't authenticated, set lastpost to "-" if($forum['linkto'] != '' || $hideinfo == true || $hidelastpostinfo == true) { eval("\$lastpost = \"".$templates->get("forumbit_depth2_forum_lastpost_hidden")."\";"); } // Moderator column is not off if($mybb->settings['modlist'] != 0) { $done_moderators = array( "users" => array(), "groups" => array() ); $moderators = ''; // Fetch list of moderators from this forum and its parents $parentlistexploded = explode(',', $forum['parentlist']); foreach($parentlistexploded as $mfid) { // This forum has moderators if(isset($moderatorcache[$mfid]) && is_array($moderatorcache[$mfid])) { // Fetch each moderator from the cache and format it, appending it to the list foreach($moderatorcache[$mfid] as $modtype) { foreach($modtype as $moderator) { if($moderator['isgroup']) { if(in_array($moderator['id'], $done_moderators['groups'])) { continue; } $moderator['title'] = htmlspecialchars_uni($moderator['title']); eval("\$moderators .= \"".$templates->get("forumbit_moderators_group", 1, 0)."\";"); $done_moderators['groups'][] = $moderator['id']; } else { if(in_array($moderator['id'], $done_moderators['users'])) { continue; } $moderator['profilelink'] = get_profile_link($moderator['id']); $moderator['username'] = htmlspecialchars_uni($moderator['username']); eval("\$moderators .= \"".$templates->get("forumbit_moderators_user", 1, 0)."\";"); $done_moderators['users'][] = $moderator['id']; } $comma = $lang->comma; } } } } $comma = ''; // If we have a moderators list, load the template if($moderators) { eval("\$modlist = \"".$templates->get("forumbit_moderators")."\";"); } else { $modlist = ''; } } // Descriptions aren't being shown - blank them if($mybb->settings['showdescriptions'] == 0) { $forum['description'] = ''; } // Check if this category is either expanded or collapsed and hide it as necessary. $expdisplay = ''; $collapsed_name = "cat_{$forum['fid']}_c"; if(isset($collapsed[$collapsed_name]) && $collapsed[$collapsed_name] == "display: show;") { $expcolimage = "collapse_collapsed.png"; $expdisplay = "display: none;"; $expthead = " thead_collapsed"; $expaltext = "[+]"; } else { $expcolimage = "collapse.png"; $expthead = ""; $expaltext = "[-]"; } // Swap over the alternate backgrounds $bgcolor = alt_trow(); // Add the forum to the list eval("\$forum_list .= \"".$templates->get("forumbit_depth$depth$forumcat")."\";"); } } if(!isset($parent_lastpost)) { $parent_lastpost = 0; } if(!isset($lightbulb)) { $lightbulb = ''; } // Return an array of information to the parent forum including child forums list, counters and lastpost information return array( "forum_list" => $forum_list, "counters" => $parent_counters, "lastpost" => $parent_lastpost, "lightbulb" => $lightbulb, "unread" => $parent_unread, ); } /** * Fetch the status indicator for a forum based on its last post and the read date * * @param array Array of information about the forum * @param array Array of information about the lastpost date * @param int Whether or not this forum is locked or not * @return array Array of the folder image to be shown and the alt text */ function get_forum_lightbulb($forum, $lastpost, $locked=0, $unread = false, $subforums_exist = false) { global $mybb, $lang, $db, $unread_forums; // For guests if ($mybb->user['uid'] == 0) { return array( "folder" => "off", "altonoff" => $lang->no_new_posts, "unread" => false, ); } // This forum is a redirect, so override the folder icon with the "offlink" icon. if($forum['linkto'] != '') { $folder = "offlink"; $altonoff = $lang->forum_redirect; } // This forum is closed, so override the folder icon with the "offlock" icon. elseif($forum['open'] == 0 || $locked) { $folder = "offlock"; $altonoff = $lang->forum_locked; } else { if ($subforums_exist == true) { if($unread == true) { $unread_forums++; $folder = "on"; $altonoff = $lang->new_posts; } else { $folder = "off"; $altonoff = $lang->no_new_posts; if ($forum['type'] == 'f') { // Fetch the last read date for this forum if (!empty($forum['lastread'])) { $forum_read = $forum['lastread']; } else // Is there not a read record for this forum? It must be unread { $forum_read = 0; //$forum_read = my_get_array_cookie("forumread", $forum['fid']); } if ($forum['lastposteruid'] != $mybb->user['uid'] && $forum['lastpost'] > $forum_read && $forum['lastpost'] > $mybb->user['lastmark'] && $forum['lastpost'] != 0) { $unread_forums++; $folder = "on"; $altonoff = $lang->new_posts; $unread = true; } } } } else { // Fetch the last read date for this forum if (!empty($forum['lastread'])) { $forum_read = $forum['lastread']; } else // Is there not a read record for this forum? It must be unread { $forum_read = 0; } // If the lastpost is greater than the last visit and is greater than the forum read date, we have a new post if ($lastpost['lastpost'] > $forum_read && $lastpost['lastpost'] > $mybb->user['lastmark'] && $lastpost['lastpost'] != 0) { $unread_forums++; $folder = "on"; $altonoff = $lang->new_posts; $unread = true; } // Otherwise, no new posts else { $folder = "off"; $altonoff = $lang->no_new_posts; } } } return array( "folder" => $folder, "altonoff" => $altonoff, "unread" => $unread, ); } /** * Fetch the number of unapproved posts, formatted, from a forum * * @param array Array of information about the forum * @return array Array containing formatted string for posts and string for threads */ function get_forum_unapproved($forum) { global $lang, $templates; $unapproved_threads = $unapproved_posts = ''; // If the user is a moderator we need to fetch the count if(is_moderator($forum['fid'], "canviewunapprove")) { // Forum has one or more unaproved posts, format language string accordingly if($forum['unapprovedposts']) { if($forum['unapprovedposts'] > 1) { $unapproved_posts_count = $lang->sprintf($lang->forum_unapproved_posts_count, $forum['unapprovedposts']); } else { $unapproved_posts_count = $lang->sprintf($lang->forum_unapproved_post_count, 1); } $forum['unapprovedposts'] = my_number_format($forum['unapprovedposts']); eval("\$unapproved_posts = \"".$templates->get("forumbit_depth2_forum_unapproved_posts")."\";"); } // Forum has one or more unapproved threads, format language string accordingly if($forum['unapprovedthreads']) { if($forum['unapprovedthreads'] > 1) { $unapproved_threads_count = $lang->sprintf($lang->forum_unapproved_threads_count, $forum['unapprovedthreads']); } else { $unapproved_threads_count = $lang->sprintf($lang->forum_unapproved_thread_count, 1); } $forum['unapprovedthreads'] = my_number_format($forum['unapprovedthreads']); eval("\$unapproved_threads = \"".$templates->get("forumbit_depth2_forum_unapproved_threads")."\";"); } } return array( "unapproved_posts" => $unapproved_posts, "unapproved_threads" => $unapproved_threads ); } ?>
違いを見つける