mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 14:18:52 +00:00
- seperate queries and cached queries
- display correct read/unread information while displaying active topics - fix for SELECT DISTINCT in mssql using sql_query_limit - fix for forum updating in ACP using mssql (and probably other dbal having problems with primary keys in updates) git-svn-id: file:///svn/phpbb/trunk@5940 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
parent
c81a44ea30
commit
0115e94cfd
12 changed files with 452 additions and 364 deletions
|
@ -952,11 +952,18 @@ class acp_forums
|
||||||
$db->sql_query($sql);
|
$db->sql_query($sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Setting the forum id to the forum id is not really received well by some dbs. ;)
|
||||||
|
$forum_id = $forum_data['forum_id'];
|
||||||
|
unset($forum_data['forum_id']);
|
||||||
|
|
||||||
$sql = 'UPDATE ' . FORUMS_TABLE . '
|
$sql = 'UPDATE ' . FORUMS_TABLE . '
|
||||||
SET ' . $db->sql_build_array('UPDATE', $forum_data) . '
|
SET ' . $db->sql_build_array('UPDATE', $forum_data) . '
|
||||||
WHERE forum_id = ' . $forum_data['forum_id'];
|
WHERE forum_id = ' . $forum_id;
|
||||||
$db->sql_query($sql);
|
$db->sql_query($sql);
|
||||||
|
|
||||||
|
// Add it back
|
||||||
|
$forum_data['forum_id'] = $forum_id;
|
||||||
|
|
||||||
add_log('admin', 'LOG_FORUM_EDIT', $forum_data['forum_name']);
|
add_log('admin', 'LOG_FORUM_EDIT', $forum_data['forum_name']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,20 +19,31 @@ class dbal
|
||||||
var $return_on_error = false;
|
var $return_on_error = false;
|
||||||
var $transaction = false;
|
var $transaction = false;
|
||||||
var $sql_time = 0;
|
var $sql_time = 0;
|
||||||
var $num_queries = 0;
|
var $num_queries = array();
|
||||||
var $open_queries = array();
|
var $open_queries = array();
|
||||||
|
|
||||||
var $curtime = 0;
|
var $curtime = 0;
|
||||||
var $query_hold = '';
|
var $query_hold = '';
|
||||||
var $html_hold = '';
|
var $html_hold = '';
|
||||||
var $sql_report = '';
|
var $sql_report = '';
|
||||||
var $cache_num_queries = 0;
|
|
||||||
|
|
||||||
var $persistency = false;
|
var $persistency = false;
|
||||||
var $user = '';
|
var $user = '';
|
||||||
var $server = '';
|
var $server = '';
|
||||||
var $dbname = '';
|
var $dbname = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
function dbal()
|
||||||
|
{
|
||||||
|
$this->num_queries = array(
|
||||||
|
'cached' => 0,
|
||||||
|
'normal' => 0,
|
||||||
|
'total' => 0,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* return on error or display error message
|
* return on error or display error message
|
||||||
*/
|
*/
|
||||||
|
@ -42,11 +53,21 @@ class dbal
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return number of sql queries used (cached and real queries are counted the same)
|
* Return number of sql queries and cached sql queries used
|
||||||
*/
|
*/
|
||||||
function sql_num_queries()
|
function sql_num_queries($cached = false)
|
||||||
{
|
{
|
||||||
return $this->num_queries;
|
return ($cached) ? $this->num_queries['cached'] : $this->num_queries['normal'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add to query count
|
||||||
|
*/
|
||||||
|
function sql_add_num_queries($cached = false)
|
||||||
|
{
|
||||||
|
$this->num_queries['cached'] += ($cached) ? 1 : 0;
|
||||||
|
$this->num_queries['normal'] += ($cached) ? 0 : 1;
|
||||||
|
$this->num_queries['total'] += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -360,7 +381,7 @@ class dbal
|
||||||
<div id="content">
|
<div id="content">
|
||||||
<h1>SQL Report</h1>
|
<h1>SQL Report</h1>
|
||||||
<br />
|
<br />
|
||||||
<p><b>Page generated in ' . round($totaltime, 4) . " seconds with {$this->num_queries} queries" . (($this->cache_num_queries) ? " + {$this->cache_num_queries} " . (($this->cache_num_queries == 1) ? 'query' : 'queries') . ' returning data from cache' : '') . '</b></p>
|
<p><b>Page generated in ' . round($totaltime, 4) . " seconds with {$this->num_queries['normal']} queries" . (($this->num_queries['cached']) ? " + {$this->num_queries['cached']} " . (($this->num_queries['cached'] == 1) ? 'query' : 'queries') . ' returning data from cache' : '') . '</b></p>
|
||||||
|
|
||||||
<p>Time spent on ' . SQL_LAYER . ' queries: <b>' . round($this->sql_time, 5) . 's</b> | Time spent on PHP: <b>' . round($totaltime - $this->sql_time, 5) . 's</b></p>
|
<p>Time spent on ' . SQL_LAYER . ' queries: <b>' . round($this->sql_time, 5) . 's</b> | Time spent on PHP: <b>' . round($totaltime - $this->sql_time, 5) . 's</b></p>
|
||||||
|
|
||||||
|
@ -388,7 +409,7 @@ class dbal
|
||||||
<table cellspacing="1">
|
<table cellspacing="1">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Query #' . $this->num_queries . '</th>
|
<th>Query #' . $this->num_queries['total'] . '</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
@ -466,7 +487,7 @@ class dbal
|
||||||
|
|
||||||
$this->_sql_report($mode, $query);
|
$this->_sql_report($mode, $query);
|
||||||
|
|
||||||
$this->cache_num_queries++;
|
// $this->num_queries['cache']++;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -94,11 +94,10 @@ class dbal_firebird extends dbal
|
||||||
|
|
||||||
$this->last_query_text = $query;
|
$this->last_query_text = $query;
|
||||||
$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
|
$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
|
||||||
|
$this->sql_add_num_queries($this->query_result);
|
||||||
|
|
||||||
if (!$this->query_result)
|
if (!$this->query_result)
|
||||||
{
|
{
|
||||||
$this->num_queries++;
|
|
||||||
|
|
||||||
if (($this->query_result = @ibase_query($this->db_connect_id, $query)) === false)
|
if (($this->query_result = @ibase_query($this->db_connect_id, $query)) === false)
|
||||||
{
|
{
|
||||||
$this->sql_error($query);
|
$this->sql_error($query);
|
||||||
|
|
|
@ -105,10 +105,10 @@ class dbal_mssql extends dbal
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
|
$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
|
||||||
|
$this->sql_add_num_queries($this->query_result);
|
||||||
|
|
||||||
if (!$this->query_result)
|
if (!$this->query_result)
|
||||||
{
|
{
|
||||||
$this->num_queries++;
|
|
||||||
if (($this->query_result = @mssql_query($query, $this->db_connect_id)) === false)
|
if (($this->query_result = @mssql_query($query, $this->db_connect_id)) === false)
|
||||||
{
|
{
|
||||||
$this->sql_error($query);
|
$this->sql_error($query);
|
||||||
|
@ -160,7 +160,14 @@ class dbal_mssql extends dbal
|
||||||
$row_offset = ($total) ? $offset : '';
|
$row_offset = ($total) ? $offset : '';
|
||||||
$num_rows = ($total) ? $total : $offset;
|
$num_rows = ($total) ? $total : $offset;
|
||||||
|
|
||||||
|
if (strpos($query, 'SELECT DISTINCT') === 0)
|
||||||
|
{
|
||||||
|
$query = 'SELECT DISTINCT TOP ' . ($row_offset + $num_rows) . ' ' . substr($query, 15);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
$query = 'SELECT TOP ' . ($row_offset + $num_rows) . ' ' . substr($query, 6);
|
$query = 'SELECT TOP ' . ($row_offset + $num_rows) . ' ' . substr($query, 6);
|
||||||
|
}
|
||||||
|
|
||||||
return $this->sql_query($query, $cache_ttl);
|
return $this->sql_query($query, $cache_ttl);
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,11 +104,10 @@ class dbal_mssql_odbc extends dbal
|
||||||
|
|
||||||
$this->last_query_text = $query;
|
$this->last_query_text = $query;
|
||||||
$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
|
$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
|
||||||
|
$this->sql_add_num_queries($this->query_result);
|
||||||
|
|
||||||
if (!$this->query_result)
|
if (!$this->query_result)
|
||||||
{
|
{
|
||||||
$this->num_queries++;
|
|
||||||
|
|
||||||
if (($this->query_result = @odbc_exec($this->db_connect_id, $query)) === false)
|
if (($this->query_result = @odbc_exec($this->db_connect_id, $query)) === false)
|
||||||
{
|
{
|
||||||
$this->sql_error($query);
|
$this->sql_error($query);
|
||||||
|
@ -160,7 +159,14 @@ class dbal_mssql_odbc extends dbal
|
||||||
$row_offset = ($total) ? $offset : '';
|
$row_offset = ($total) ? $offset : '';
|
||||||
$num_rows = ($total) ? $total : $offset;
|
$num_rows = ($total) ? $total : $offset;
|
||||||
|
|
||||||
|
if (strpos($query, 'SELECT DISTINCT') === 0)
|
||||||
|
{
|
||||||
|
$query = 'SELECT DISTINCT TOP ' . ($row_offset + $num_rows) . ' ' . substr($query, 15);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
$query = 'SELECT TOP ' . ($row_offset + $num_rows) . ' ' . substr($query, 6);
|
$query = 'SELECT TOP ' . ($row_offset + $num_rows) . ' ' . substr($query, 6);
|
||||||
|
}
|
||||||
|
|
||||||
return $this->sql_query($query, $cache_ttl);
|
return $this->sql_query($query, $cache_ttl);
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,11 +105,10 @@ class dbal_mysql extends dbal
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
|
$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
|
||||||
|
$this->sql_add_num_queries($this->query_result);
|
||||||
|
|
||||||
if (!$this->query_result)
|
if (!$this->query_result)
|
||||||
{
|
{
|
||||||
$this->num_queries++;
|
|
||||||
|
|
||||||
if (($this->query_result = @mysql_query($query, $this->db_connect_id)) === false)
|
if (($this->query_result = @mysql_query($query, $this->db_connect_id)) === false)
|
||||||
{
|
{
|
||||||
$this->sql_error($query);
|
$this->sql_error($query);
|
||||||
|
|
|
@ -107,11 +107,10 @@ class dbal_mysql4 extends dbal
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
|
$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
|
||||||
|
$this->sql_add_num_queries($this->query_result);
|
||||||
|
|
||||||
if (!$this->query_result)
|
if (!$this->query_result)
|
||||||
{
|
{
|
||||||
$this->num_queries++;
|
|
||||||
|
|
||||||
if (($this->query_result = @mysql_query($query, $this->db_connect_id)) === false)
|
if (($this->query_result = @mysql_query($query, $this->db_connect_id)) === false)
|
||||||
{
|
{
|
||||||
$this->sql_error($query);
|
$this->sql_error($query);
|
||||||
|
|
|
@ -110,11 +110,10 @@ class dbal_mysqli extends dbal
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
|
$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
|
||||||
|
$this->sql_add_num_queries($this->query_result);
|
||||||
|
|
||||||
if (!$this->query_result)
|
if (!$this->query_result)
|
||||||
{
|
{
|
||||||
$this->num_queries++;
|
|
||||||
|
|
||||||
if (($this->query_result = @mysqli_query($this->db_connect_id, $query)) === false)
|
if (($this->query_result = @mysqli_query($this->db_connect_id, $query)) === false)
|
||||||
{
|
{
|
||||||
$this->sql_error($query);
|
$this->sql_error($query);
|
||||||
|
|
|
@ -99,11 +99,10 @@ class dbal_oracle extends dbal
|
||||||
|
|
||||||
$this->last_query_text = $query;
|
$this->last_query_text = $query;
|
||||||
$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
|
$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
|
||||||
|
$this->sql_add_num_queries($this->query_result);
|
||||||
|
|
||||||
if (!$this->query_result)
|
if (!$this->query_result)
|
||||||
{
|
{
|
||||||
$this->num_queries++;
|
|
||||||
|
|
||||||
$in_transaction = false;
|
$in_transaction = false;
|
||||||
if (!$this->transaction)
|
if (!$this->transaction)
|
||||||
{
|
{
|
||||||
|
|
|
@ -136,11 +136,10 @@ class dbal_postgres extends dbal
|
||||||
|
|
||||||
$this->last_query_text = $query;
|
$this->last_query_text = $query;
|
||||||
$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
|
$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
|
||||||
|
$this->sql_add_num_queries($this->query_result);
|
||||||
|
|
||||||
if (!$this->query_result)
|
if (!$this->query_result)
|
||||||
{
|
{
|
||||||
$this->num_queries++;
|
|
||||||
|
|
||||||
if (($this->query_result = @pg_query($this->db_connect_id, $query)) === false)
|
if (($this->query_result = @pg_query($this->db_connect_id, $query)) === false)
|
||||||
{
|
{
|
||||||
$this->sql_error($query);
|
$this->sql_error($query);
|
||||||
|
|
|
@ -102,11 +102,10 @@ class dbal_sqlite extends dbal
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
|
$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
|
||||||
|
$this->sql_add_num_queries($this->query_result);
|
||||||
|
|
||||||
if (!$this->query_result)
|
if (!$this->query_result)
|
||||||
{
|
{
|
||||||
$this->num_queries++;
|
|
||||||
|
|
||||||
if (($this->query_result = @sqlite_query($query, $this->db_connect_id)) === false)
|
if (($this->query_result = @sqlite_query($query, $this->db_connect_id)) === false)
|
||||||
{
|
{
|
||||||
$this->sql_error($query);
|
$this->sql_error($query);
|
||||||
|
|
|
@ -131,18 +131,30 @@ else
|
||||||
get_moderators($moderators, $forum_id);
|
get_moderators($moderators, $forum_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Output forum listing if it is postable or active topics
|
// Dump out the page header and load viewforum template
|
||||||
if ($forum_data['forum_type'] == FORUM_POST || (($forum_data['forum_flags'] & 16) && $forum_data['forum_type'] == FORUM_CAT))
|
page_header($user->lang['VIEW_FORUM'] . ' - ' . $forum_data['forum_name']);
|
||||||
|
|
||||||
|
$template->set_filenames(array(
|
||||||
|
'body' => 'viewforum_body.html')
|
||||||
|
);
|
||||||
|
|
||||||
|
make_jumpbox("{$phpbb_root_path}viewforum.$phpEx$SID", $forum_id);
|
||||||
|
|
||||||
|
// Not postable forum or showing active topics?
|
||||||
|
if (!($forum_data['forum_type'] == FORUM_POST || (($forum_data['forum_flags'] & 16) && $forum_data['forum_type'] == FORUM_CAT)))
|
||||||
{
|
{
|
||||||
|
page_footer();
|
||||||
|
}
|
||||||
|
|
||||||
// Handle marking posts
|
// Handle marking posts
|
||||||
if ($mark_read == 'topics')
|
if ($mark_read == 'topics')
|
||||||
{
|
{
|
||||||
markread('topics', $forum_id);
|
markread('topics', $forum_id);
|
||||||
|
|
||||||
meta_refresh(3, "viewforum.$phpEx$SID&f=$forum_id");
|
$redirect_url = "{$phpbb_root_path}viewforum.$phpEx$SID&f=$forum_id";
|
||||||
|
meta_refresh(3, $redirect_url);
|
||||||
|
|
||||||
$message = $user->lang['TOPICS_MARKED'] . '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . "viewforum.$phpEx$SID&f=$forum_id" . '">', '</a> ');
|
trigger_error($user->lang['TOPICS_MARKED'] . '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . $redirect_url . '">', '</a>'));
|
||||||
trigger_error($message);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Is a forum specific topic count required?
|
// Is a forum specific topic count required?
|
||||||
|
@ -157,7 +169,7 @@ if ($forum_data['forum_type'] == FORUM_POST || (($forum_data['forum_flags'] & 16
|
||||||
$template->assign_var('RUN_CRON_TASK', '<img src="' . $phpbb_root_path . 'cron.' . $phpEx . '?cron_type=prune_forum&f=' . $forum_id . '" width="1" height="1" />');
|
$template->assign_var('RUN_CRON_TASK', '<img src="' . $phpbb_root_path . 'cron.' . $phpEx . '?cron_type=prune_forum&f=' . $forum_id . '" width="1" height="1" />');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Forum rules amd subscription info
|
// Forum rules and subscription info
|
||||||
$s_watching_forum = $s_watching_forum_img = array();
|
$s_watching_forum = $s_watching_forum_img = array();
|
||||||
$s_watching_forum['link'] = $s_watching_forum['title'] = '';
|
$s_watching_forum['link'] = $s_watching_forum['title'] = '';
|
||||||
if (($config['email_enable'] || $config['jab_enable']) && $config['allow_forum_notify'] && $auth->acl_get('f_subscribe', $forum_id))
|
if (($config['email_enable'] || $config['jab_enable']) && $config['allow_forum_notify'] && $auth->acl_get('f_subscribe', $forum_id))
|
||||||
|
@ -192,12 +204,13 @@ if ($forum_data['forum_type'] == FORUM_POST || (($forum_data['forum_flags'] & 16
|
||||||
AND topic_last_post_time >= $min_post_time
|
AND topic_last_post_time >= $min_post_time
|
||||||
" . (($auth->acl_get('m_approve', $forum_id)) ? '' : 'AND topic_approved = 1');
|
" . (($auth->acl_get('m_approve', $forum_id)) ? '' : 'AND topic_approved = 1');
|
||||||
$result = $db->sql_query($sql);
|
$result = $db->sql_query($sql);
|
||||||
|
$topics_count = (int) $db->sql_fetchfield('num_topics');
|
||||||
|
$db->sql_freeresult($result);
|
||||||
|
|
||||||
if (isset($_POST['sort']))
|
if (isset($_POST['sort']))
|
||||||
{
|
{
|
||||||
$start = 0;
|
$start = 0;
|
||||||
}
|
}
|
||||||
$topics_count = ($row = $db->sql_fetchrow($result)) ? $row['num_topics'] : 0;
|
|
||||||
$sql_limit_time = "AND t.topic_last_post_time >= $min_post_time";
|
$sql_limit_time = "AND t.topic_last_post_time >= $min_post_time";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -217,10 +230,13 @@ if ($forum_data['forum_type'] == FORUM_POST || (($forum_data['forum_flags'] & 16
|
||||||
// Basic pagewide vars
|
// Basic pagewide vars
|
||||||
$post_alt = ($forum_data['forum_status'] == ITEM_LOCKED) ? $user->lang['FORUM_LOCKED'] : $user->lang['POST_NEW_TOPIC'];
|
$post_alt = ($forum_data['forum_status'] == ITEM_LOCKED) ? $user->lang['FORUM_LOCKED'] : $user->lang['POST_NEW_TOPIC'];
|
||||||
|
|
||||||
|
// Display active topics?
|
||||||
|
$s_display_active = ($forum_data['forum_type'] == FORUM_CAT && ($forum_data['forum_flags'] & 16)) ? true : false;
|
||||||
|
|
||||||
$template->assign_vars(array(
|
$template->assign_vars(array(
|
||||||
'PAGINATION' => generate_pagination("{$phpbb_root_path}viewforum.$phpEx$SID&f=$forum_id&$u_sort_param", $topics_count, $config['topics_per_page'], $start),
|
'PAGINATION' => generate_pagination("{$phpbb_root_path}viewforum.$phpEx$SID&f=$forum_id&$u_sort_param", $topics_count, $config['topics_per_page'], $start),
|
||||||
'PAGE_NUMBER' => on_page($topics_count, $config['topics_per_page'], $start),
|
'PAGE_NUMBER' => on_page($topics_count, $config['topics_per_page'], $start),
|
||||||
'TOTAL_TOPICS' => ($forum_data['forum_flags'] & 16 && $forum_data['forum_type'] == FORUM_CAT) ? false : (($topics_count == 1) ? $user->lang['VIEW_FORUM_TOPIC'] : sprintf($user->lang['VIEW_FORUM_TOPICS'], $topics_count)),
|
'TOTAL_TOPICS' => ($s_display_active) ? false : (($topics_count == 1) ? $user->lang['VIEW_FORUM_TOPIC'] : sprintf($user->lang['VIEW_FORUM_TOPICS'], $topics_count)),
|
||||||
'MODERATORS' => (!empty($moderators[$forum_id])) ? implode(', ', $moderators[$forum_id]) : '',
|
'MODERATORS' => (!empty($moderators[$forum_id])) ? implode(', ', $moderators[$forum_id]) : '',
|
||||||
|
|
||||||
'POST_IMG' => ($forum_data['forum_status'] == ITEM_LOCKED) ? $user->img('btn_locked', $post_alt) : $user->img('btn_post', $post_alt),
|
'POST_IMG' => ($forum_data['forum_status'] == ITEM_LOCKED) ? $user->img('btn_locked', $post_alt) : $user->img('btn_post', $post_alt),
|
||||||
|
@ -237,25 +253,23 @@ if ($forum_data['forum_type'] == FORUM_POST || (($forum_data['forum_flags'] & 16
|
||||||
'FOLDER_ANNOUNCE_IMG' => $user->img('folder_announce', 'POST_ANNOUNCEMENT'),
|
'FOLDER_ANNOUNCE_IMG' => $user->img('folder_announce', 'POST_ANNOUNCEMENT'),
|
||||||
'FOLDER_ANNOUNCE_NEW_IMG' => $user->img('folder_announce_new', 'POST_ANNOUNCEMENT'),
|
'FOLDER_ANNOUNCE_NEW_IMG' => $user->img('folder_announce_new', 'POST_ANNOUNCEMENT'),
|
||||||
'FOLDER_MOVED_IMG' => $user->img('folder_moved', 'TOPIC_MOVED'),
|
'FOLDER_MOVED_IMG' => $user->img('folder_moved', 'TOPIC_MOVED'),
|
||||||
|
|
||||||
'REPORTED_IMG' => $user->img('icon_reported', 'TOPIC_REPORTED'),
|
'REPORTED_IMG' => $user->img('icon_reported', 'TOPIC_REPORTED'),
|
||||||
'UNAPPROVED_IMG' => $user->img('icon_unapproved', 'TOPIC_UNAPPROVED'),
|
'UNAPPROVED_IMG' => $user->img('icon_unapproved', 'TOPIC_UNAPPROVED'),
|
||||||
|
|
||||||
'GOTO_PAGE_IMG' => $user->img('icon_post', 'GOTO_PAGE'),
|
'GOTO_PAGE_IMG' => $user->img('icon_post', 'GOTO_PAGE'),
|
||||||
|
|
||||||
'L_NO_TOPICS' => ($forum_data['forum_status'] == ITEM_LOCKED) ? $user->lang['POST_FORUM_LOCKED'] : $user->lang['NO_TOPICS'],
|
'L_NO_TOPICS' => ($forum_data['forum_status'] == ITEM_LOCKED) ? $user->lang['POST_FORUM_LOCKED'] : $user->lang['NO_TOPICS'],
|
||||||
|
|
||||||
'S_IS_POSTABLE' => ($forum_data['forum_type'] == FORUM_POST) ? true : false,
|
'S_IS_POSTABLE' => ($forum_data['forum_type'] == FORUM_POST) ? true : false,
|
||||||
'S_DISPLAY_ACTIVE' => ($forum_data['forum_type'] == FORUM_CAT && ($forum_data['forum_flags'] & 16)) ? true : false,
|
'S_DISPLAY_ACTIVE' => $s_display_active,
|
||||||
'S_SELECT_SORT_DIR' => $s_sort_dir,
|
'S_SELECT_SORT_DIR' => $s_sort_dir,
|
||||||
'S_SELECT_SORT_KEY' => $s_sort_key,
|
'S_SELECT_SORT_KEY' => $s_sort_key,
|
||||||
'S_SELECT_SORT_DAYS' => $s_limit_days,
|
'S_SELECT_SORT_DAYS' => $s_limit_days,
|
||||||
'S_TOPIC_ICONS' => ($forum_data['forum_type'] == FORUM_CAT && sizeof($active_forum_ary) && ($forum_data['forum_flags'] & 16)) ? max($active_forum_ary['enable_icons']) : (($forum_data['enable_icons']) ? true : false),
|
'S_TOPIC_ICONS' => ($s_display_active && sizeof($active_forum_ary)) ? max($active_forum_ary['enable_icons']) : (($forum_data['enable_icons']) ? true : false),
|
||||||
'S_WATCH_FORUM_LINK' => $s_watching_forum['link'],
|
'S_WATCH_FORUM_LINK' => $s_watching_forum['link'],
|
||||||
'S_WATCH_FORUM_TITLE' => $s_watching_forum['title'],
|
'S_WATCH_FORUM_TITLE' => $s_watching_forum['title'],
|
||||||
'S_FORUM_ACTION' => "{$phpbb_root_path}viewforum.$phpEx$SID&f=$forum_id&start=$start",
|
'S_FORUM_ACTION' => "{$phpbb_root_path}viewforum.$phpEx$SID&f=$forum_id&start=$start",
|
||||||
'S_DISPLAY_SEARCHBOX' => ($auth->acl_get('f_search', $forum_id)) ? true : false,
|
'S_DISPLAY_SEARCHBOX' => ($auth->acl_get('f_search', $forum_id)) ? true : false,
|
||||||
'S_SEARCHBOX_ACTION' => "{$phpbb_root_path}search.$phpEx$SID&fid%5B%5D=$forum_id",
|
'S_SEARCHBOX_ACTION' => "{$phpbb_root_path}search.$phpEx$SID&fid[]=$forum_id",
|
||||||
|
|
||||||
'U_MCP' => ($auth->acl_gets('m_', $forum_id)) ? "{$phpbb_root_path}mcp.$phpEx?sid=$user->session_id&f=$forum_id&i=main&mode=forum_view" : '',
|
'U_MCP' => ($auth->acl_gets('m_', $forum_id)) ? "{$phpbb_root_path}mcp.$phpEx?sid=$user->session_id&f=$forum_id&i=main&mode=forum_view" : '',
|
||||||
'U_POST_NEW_TOPIC' => "{$phpbb_root_path}posting.$phpEx$SID&mode=post&f=$forum_id",
|
'U_POST_NEW_TOPIC' => "{$phpbb_root_path}posting.$phpEx$SID&mode=post&f=$forum_id",
|
||||||
|
@ -270,35 +284,50 @@ if ($forum_data['forum_type'] == FORUM_POST || (($forum_data['forum_flags'] & 16
|
||||||
// Grab all topic data
|
// Grab all topic data
|
||||||
$rowset = $announcement_list = $topic_list = $global_announce_list = array();
|
$rowset = $announcement_list = $topic_list = $global_announce_list = array();
|
||||||
|
|
||||||
$sql_from = TOPICS_TABLE . ' t ';
|
$sql_array = array(
|
||||||
|
'SELECT' => 't.*',
|
||||||
|
'FROM' => array(
|
||||||
|
TOPICS_TABLE => 't'
|
||||||
|
),
|
||||||
|
'LEFT_JOIN' => array(),
|
||||||
|
);
|
||||||
|
|
||||||
$sql_approved = ($auth->acl_get('m_approve', $forum_id)) ? '' : 'AND t.topic_approved = 1';
|
$sql_approved = ($auth->acl_get('m_approve', $forum_id)) ? '' : 'AND t.topic_approved = 1';
|
||||||
$sql_select = '';
|
|
||||||
|
|
||||||
if ($user->data['is_registered'])
|
if ($user->data['is_registered'])
|
||||||
{
|
{
|
||||||
if ($config['load_db_track'])
|
if ($config['load_db_track'])
|
||||||
{
|
{
|
||||||
$sql_from .= ' LEFT JOIN ' . TOPICS_POSTED_TABLE . ' tp ON (tp.user_id = ' . $user->data['user_id'] . '
|
$sql_array['LEFT_JOIN'][] = array('FROM' => array(TOPICS_POSTED_TABLE => 'tp'), 'ON' => 'tp.topic_id = t.topic_id AND tp.user_id = ' . $user->data['user_id']);
|
||||||
AND t.topic_id = tp.topic_id)';
|
$sql_array['SELECT'] .= ', tp.topic_posted';
|
||||||
$sql_select .= ', tp.topic_posted';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($config['load_db_lastread'])
|
if ($config['load_db_lastread'])
|
||||||
{
|
{
|
||||||
$sql_from .= ' LEFT JOIN ' . TOPICS_TRACK_TABLE . ' tt ON (tt.user_id = ' . $user->data['user_id'] . '
|
$sql_array['LEFT_JOIN'][] = array('FROM' => array(TOPICS_TRACK_TABLE => 'tt'), 'ON' => 'tt.topic_id = t.topic_id AND tt.user_id = ' . $user->data['user_id']);
|
||||||
AND t.topic_id = tt.topic_id)';
|
$sql_array['SELECT'] .= ', tt.mark_time';
|
||||||
$sql_select .= ', tt.mark_time';
|
|
||||||
|
if ($s_display_active && sizeof($active_forum_ary))
|
||||||
|
{
|
||||||
|
$sql_array['LEFT_JOIN'][] = array('FROM' => array(FORUMS_TRACK_TABLE => 'ft'), 'ON' => 'ft.forum_id = t.forum_id AND ft.user_id = ' . $user->data['user_id']);
|
||||||
|
$sql_array['SELECT'] .= ', ft.mark_time AS forum_mark_time';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($forum_data['forum_type'] == FORUM_POST)
|
if ($forum_data['forum_type'] == FORUM_POST)
|
||||||
{
|
{
|
||||||
// Obtain announcements ... removed sort ordering, sort by time in all cases
|
// Obtain announcements ... removed sort ordering, sort by time in all cases
|
||||||
$sql = "SELECT t.* $sql_select
|
$sql = $db->sql_build_query('SELECT', array(
|
||||||
FROM $sql_from
|
'SELECT' => $sql_array['SELECT'],
|
||||||
WHERE t.forum_id IN ($forum_id, 0)
|
'FROM' => $sql_array['FROM'],
|
||||||
AND t.topic_type IN (" . POST_ANNOUNCE . ', ' . POST_GLOBAL . ')
|
'LEFT_JOIN' => $sql_array['LEFT_JOIN'],
|
||||||
ORDER BY t.topic_time DESC';
|
|
||||||
|
'WHERE' => 't.forum_id IN (' . $forum_id . ', 0)
|
||||||
|
AND t.topic_type IN (' . POST_ANNOUNCE . ', ' . POST_GLOBAL . ')',
|
||||||
|
|
||||||
|
'ORDER_BY' => 't.topic_time DESC',
|
||||||
|
));
|
||||||
$result = $db->sql_query($sql);
|
$result = $db->sql_query($sql);
|
||||||
|
|
||||||
while ($row = $db->sql_fetchrow($result))
|
while ($row = $db->sql_fetchrow($result))
|
||||||
|
@ -338,15 +367,19 @@ if ($forum_data['forum_type'] == FORUM_POST || (($forum_data['forum_flags'] & 16
|
||||||
}
|
}
|
||||||
|
|
||||||
// Obtain other topics
|
// Obtain other topics
|
||||||
$sql_where = ($forum_data['forum_type'] == FORUM_POST || !sizeof($active_forum_ary)) ? "= $forum_id" : 'IN (' . implode(', ', $active_forum_ary['forum_id']) . ')';
|
$sql_array = array(
|
||||||
|
'SELECT' => $sql_array['SELECT'],
|
||||||
|
'FROM' => $sql_array['FROM'],
|
||||||
|
'LEFT_JOIN' => $sql_array['LEFT_JOIN'],
|
||||||
|
|
||||||
$sql = "SELECT t.* $sql_select
|
'WHERE' => (($forum_data['forum_type'] == FORUM_POST || !sizeof($active_forum_ary)) ? 't.forum_id = ' . $forum_id : 't.forum_id IN (' . implode(', ', $active_forum_ary['forum_id']) . ')') . '
|
||||||
FROM $sql_from
|
AND t.topic_type NOT IN (' . POST_ANNOUNCE . ', ' . POST_GLOBAL . ")
|
||||||
WHERE t.forum_id $sql_where
|
|
||||||
AND t.topic_type NOT IN (" . POST_ANNOUNCE . ', ' . POST_GLOBAL . ")
|
|
||||||
$sql_approved
|
$sql_approved
|
||||||
$sql_limit_time
|
$sql_limit_time",
|
||||||
ORDER BY t.topic_type " . ((!$store_reverse) ? 'DESC' : 'ASC') . ', ' . $sql_sort_order;
|
|
||||||
|
'ORDER_BY' => 't.topic_type ' . ((!$store_reverse) ? 'DESC' : 'ASC') . ', ' . $sql_sort_order,
|
||||||
|
);
|
||||||
|
$sql = $db->sql_build_query('SELECT', $sql_array);
|
||||||
$result = $db->sql_query_limit($sql, $sql_limit, $sql_start);
|
$result = $db->sql_query_limit($sql, $sql_limit, $sql_start);
|
||||||
|
|
||||||
while ($row = $db->sql_fetchrow($result))
|
while ($row = $db->sql_fetchrow($result))
|
||||||
|
@ -364,6 +397,36 @@ if ($forum_data['forum_type'] == FORUM_POST || (($forum_data['forum_flags'] & 16
|
||||||
{
|
{
|
||||||
$mark_forum_read = true;
|
$mark_forum_read = true;
|
||||||
|
|
||||||
|
// Active topics?
|
||||||
|
if ($s_display_active && sizeof($active_forum_ary))
|
||||||
|
{
|
||||||
|
// Generate topic forum list...
|
||||||
|
$topic_forum_list = array();
|
||||||
|
foreach ($rowset as $t_id => $row)
|
||||||
|
{
|
||||||
|
$topic_forum_list[$row['forum_id']]['forum_mark_time'] = ($config['load_db_lastread']) ? $row['forum_mark_time'] : 0;
|
||||||
|
$topic_forum_list[$row['forum_id']]['topics'][] = $t_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($config['load_db_lastread'] && $user->data['is_registered'])
|
||||||
|
{
|
||||||
|
foreach ($topic_forum_list as $f_id => $topic_row)
|
||||||
|
{
|
||||||
|
$topic_tracking_info += get_topic_tracking($f_id, $topic_row['topics'], $rowset, array($f_id => $topic_row['forum_mark_time']), false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach ($topic_forum_list as $f_id => $topic_row)
|
||||||
|
{
|
||||||
|
$topic_tracking_info += get_complete_topic_tracking($f_id, $topic_row['topics'], false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($topic_forum_list);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
if ($config['load_db_lastread'] && $user->data['is_registered'])
|
if ($config['load_db_lastread'] && $user->data['is_registered'])
|
||||||
{
|
{
|
||||||
$topic_tracking_info = get_topic_tracking($forum_id, $topic_list, $rowset, array($forum_id => $forum_data['mark_time']), $global_announce_list);
|
$topic_tracking_info = get_topic_tracking($forum_id, $topic_list, $rowset, array($forum_id => $forum_data['mark_time']), $global_announce_list);
|
||||||
|
@ -379,6 +442,7 @@ if ($forum_data['forum_type'] == FORUM_POST || (($forum_data['forum_flags'] & 16
|
||||||
}
|
}
|
||||||
$mark_time_forum = (isset($tracking_topics['f'][$forum_id])) ? base_convert($tracking_topics['f'][$forum_id], 36, 10) + $config['board_startdate'] : $user->data['user_lastmark'];
|
$mark_time_forum = (isset($tracking_topics['f'][$forum_id])) ? base_convert($tracking_topics['f'][$forum_id], 36, 10) + $config['board_startdate'] : $user->data['user_lastmark'];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$s_type_switch = 0;
|
$s_type_switch = 0;
|
||||||
foreach ($topic_list as $topic_id)
|
foreach ($topic_list as $topic_id)
|
||||||
|
@ -417,7 +481,7 @@ if ($forum_data['forum_type'] == FORUM_POST || (($forum_data['forum_flags'] & 16
|
||||||
'FIRST_POST_TIME' => $user->format_date($row['topic_time']),
|
'FIRST_POST_TIME' => $user->format_date($row['topic_time']),
|
||||||
'LAST_POST_TIME' => $user->format_date($row['topic_last_post_time']),
|
'LAST_POST_TIME' => $user->format_date($row['topic_last_post_time']),
|
||||||
'LAST_VIEW_TIME' => $user->format_date($row['topic_last_view_time']),
|
'LAST_VIEW_TIME' => $user->format_date($row['topic_last_view_time']),
|
||||||
'LAST_POST_AUTHOR' => ($row['topic_last_poster_name'] != '') ? $row['topic_last_poster_name'] : $user->lang['GUEST'],
|
'LAST_POST_AUTHOR' => ($row['topic_last_poster_name']) ? $row['topic_last_poster_name'] : $user->lang['GUEST'],
|
||||||
'PAGINATION' => topic_generate_pagination($replies, $view_topic_url),
|
'PAGINATION' => topic_generate_pagination($replies, $view_topic_url),
|
||||||
'REPLIES' => $replies,
|
'REPLIES' => $replies,
|
||||||
'VIEWS' => $row['topic_views'],
|
'VIEWS' => $row['topic_views'],
|
||||||
|
@ -434,7 +498,6 @@ if ($forum_data['forum_type'] == FORUM_POST || (($forum_data['forum_flags'] & 16
|
||||||
'S_TOPIC_TYPE' => $row['topic_type'],
|
'S_TOPIC_TYPE' => $row['topic_type'],
|
||||||
'S_USER_POSTED' => (isset($row['topic_posted']) && $row['topic_posted']) ? true : false,
|
'S_USER_POSTED' => (isset($row['topic_posted']) && $row['topic_posted']) ? true : false,
|
||||||
'S_UNREAD_TOPIC' => $unread_topic,
|
'S_UNREAD_TOPIC' => $unread_topic,
|
||||||
|
|
||||||
'S_TOPIC_REPORTED' => (!empty($row['topic_reported']) && $auth->acl_gets('m_report', $forum_id)) ? true : false,
|
'S_TOPIC_REPORTED' => (!empty($row['topic_reported']) && $auth->acl_gets('m_report', $forum_id)) ? true : false,
|
||||||
'S_TOPIC_UNAPPROVED' => (!$row['topic_approved'] && $auth->acl_gets('m_approve', $forum_id)) ? true : false,
|
'S_TOPIC_UNAPPROVED' => (!$row['topic_approved'] && $auth->acl_gets('m_approve', $forum_id)) ? true : false,
|
||||||
|
|
||||||
|
@ -475,7 +538,7 @@ if ($forum_data['forum_type'] == FORUM_POST || (($forum_data['forum_flags'] & 16
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$sql = 'SELECT t.forum_id FROM ' . TOPICS_TABLE . ' t
|
$sql = 'SELECT t.forum_id FROM ' . TOPICS_TABLE . ' t
|
||||||
LEFT JOIN ' . TOPICS_TRACK_TABLE . ' tt ON (tt.user_id = ' . $user->data['user_id'] . ' AND tt.topic_id = t.topic_id)
|
LEFT JOIN ' . TOPICS_TRACK_TABLE . ' tt ON (tt.topic_id = t.topic_id AND tt.user_id = ' . $user->data['user_id'] . ')
|
||||||
WHERE t.forum_id = ' . $forum_id . '
|
WHERE t.forum_id = ' . $forum_id . '
|
||||||
AND t.topic_last_post_time > ' . $mark_time_forum . '
|
AND t.topic_last_post_time > ' . $mark_time_forum . '
|
||||||
AND t.topic_moved_id = 0
|
AND t.topic_moved_id = 0
|
||||||
|
@ -525,15 +588,6 @@ if ($forum_data['forum_type'] == FORUM_POST || (($forum_data['forum_flags'] & 16
|
||||||
markread('topics', $forum_id);
|
markread('topics', $forum_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Dump out the page header and load viewforum template
|
|
||||||
page_header($user->lang['VIEW_FORUM'] . ' - ' . $forum_data['forum_name']);
|
|
||||||
|
|
||||||
$template->set_filenames(array(
|
|
||||||
'body' => 'viewforum_body.html')
|
|
||||||
);
|
|
||||||
make_jumpbox("viewforum.$phpEx$SID", $forum_id);
|
|
||||||
|
|
||||||
page_footer();
|
page_footer();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue