|
From: Josh G. <os...@us...> - 2004-12-24 04:52:55
|
Update of /cvsroot/nanuke/nanuke0.x/modules/forum/includes In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5486/modules/forum/includes Modified Files: functions.php functions_display.php Log Message: - More minor forum module stuff Index: functions.php =================================================================== RCS file: /cvsroot/nanuke/nanuke0.x/modules/forum/includes/functions.php,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** functions.php 23 Dec 2004 03:09:22 -0000 1.2 --- functions.php 24 Dec 2004 04:52:43 -0000 1.3 *************** *** 24,28 **** global $template, $db, $user, $phpEx, $SID, $start, $nanuke_root_path; ! $table_sql = ($mode == 'forum') ? MODULE_FORUM_FORUMS_WATCH_TABLE : MODULE_FORUM_TOPICS_WATCH_TABLE; $where_sql = ($mode == 'forum') ? 'forum_id' : 'topic_id'; $u_url = ($mode == 'forum') ? 'f' : 't'; --- 24,28 ---- global $template, $db, $user, $phpEx, $SID, $start, $nanuke_root_path; ! $table_sql = ($mode == 'forum') ? FORUMS_WATCH_TABLE : TOPICS_WATCH_TABLE; $where_sql = ($mode == 'forum') ? 'forum_id' : 'topic_id'; $u_url = ($mode == 'forum') ? 'f' : 't'; *************** *** 218,220 **** --- 218,382 ---- return $unread_topic; } + + // Marks a topic or form as read + function markread($mode, $forum_id = 0, $topic_id = 0, $marktime = false) + { + global $config, $db, $user; + + if ($user->data['user_id'] == ANONYMOUS) + { + return; + } + + if (!is_array($forum_id)) + { + $forum_id = array($forum_id); + } + + // Default tracking type + $type = TRACK_NORMAL; // commented out in phpbb cvs... err + $current_time = ($marktime) ? $marktime : time(); + $topic_id = (int) $topic_id; + + switch ($mode) + { + case 'mark': + if ($config['load_db_lastread']) + { + $sql = 'SELECT forum_id + FROM ' . FORUMS_TRACK_TABLE . ' + WHERE user_id = ' . $user->data['user_id'] . ' + AND forum_id IN (' . implode(', ', array_map('intval', $forum_id)) . ')'; + $result = $db->sql_query($sql); + + $sql_update = array(); + while ($row = $db->sql_fetchrow($result)) + { + $sql_update[] = $row['forum_id']; + } + $db->sql_freeresult($result); + + if (sizeof($sql_update)) + { + $sql = 'UPDATE ' . FORUMS_TRACK_TABLE . " + SET mark_time = $current_time + WHERE user_id = " . $user->data['user_id'] . ' + AND forum_id IN (' . implode(', ', $sql_update) . ')'; + $db->sql_query($sql); + } + + if ($sql_insert = array_diff($forum_id, $sql_update)) + { + foreach ($sql_insert as $forum_id) + { + $sql = ''; + switch (SQL_LAYER) + { + case 'mysql': + case 'mysql4': + $sql .= (($sql != '') ? ', ' : '') . '(' . $user->data['user_id'] . ", $forum_id, $current_time)"; + $sql = 'VALUES ' . $sql; + break; + + case 'mssql': + case 'sqlite': + $sql .= (($sql != '') ? ' UNION ALL ' : '') . ' SELECT ' . $user->data['user_id'] . ", $forum_id, $current_time"; + break; + + default: + $sql = 'INSERT INTO ' . FORUMS_TRACK_TABLE . ' (user_id, forum_id, mark_time) + VALUES (' . $user->data['user_id'] . ", $forum_id, $current_time)"; + $db->sql_query($sql); + $sql = ''; + } + + if ($sql) + { + $sql = 'INSERT INTO ' . FORUMS_TRACK_TABLE . " (user_id, forum_id, mark_time) $sql"; + $db->sql_query($sql); + } + } + } + unset($sql_update); + unset($sql_insert); + } + else + { + $tracking = (isset($_COOKIE[$config['cookie_name'] . '_track'])) ? unserialize(stripslashes($_COOKIE[$config['cookie_name'] . '_track'])) : array(); + + foreach ($forum_id as $f_id) + { + unset($tracking[$f_id]); + $tracking[$f_id][0] = base_convert($current_time - $config['board_startdate'], 10, 36); + } + + $user->set_cookie('track', serialize($tracking), time() + 31536000); + unset($tracking); + } + break; + + case 'post': + // Mark a topic as read and mark it as a topic where the user has made a post. + $type = TRACK_POSTED; + + case 'topic': + $forum_id = (int) $forum_id[0]; + + // Mark a topic as read + if ($config['load_db_lastread'] || ($config['load_db_track'] && $type == TRACK_POSTED)) + { + $sql = 'UPDATE ' . TOPICS_TRACK_TABLE . " + SET mark_time = $current_time + WHERE topic_id = $topic_id + AND user_id = " . $user->data['user_id'] . " + AND mark_time < $current_time"; + if (!$db->sql_query($sql) || !$db->sql_affectedrows()) + { + $type = (!isset($type)) ? TRACK_NORMAL : $type; + + $db->sql_return_on_error(true); + + $sql = 'INSERT INTO ' . TOPICS_TRACK_TABLE . ' (user_id, topic_id, mark_type, mark_time) + VALUES (' . $user->data['user_id'] . ", $topic_id, $type, $current_time)"; + $db->sql_query($sql); + + $db->sql_return_on_error(false); + } + } + + if (!$config['load_db_lastread']) + { + $tracking = array(); + if (isset($_COOKIE[$config['cookie_name'] . '_track'])) + { + $tracking = unserialize(stripslashes($_COOKIE[$config['cookie_name'] . '_track'])); + + // If the cookie grows larger than 2000 characters we will remove + // the smallest value + if (strlen($_COOKIE[$config['cookie_name'] . '_track']) > 2000) + { + foreach ($tracking as $f => $t_ary) + { + if (!isset($m_value) || min($t_ary) < $m_value) + { + $m_value = min($t_ary); + $m_tkey = array_search($m_value, $t_ary); + $m_fkey = $f; + } + } + unset($tracking[$m_fkey][$m_tkey]); + } + } + + if (base_convert($tracking[$forum_id][0], 36, 10) < $current_time) + { + $tracking[$forum_id][base_convert($topic_id, 10, 36)] = base_convert($current_time - $config['board_startdate'], 10, 36); + + $user->set_cookie('track', serialize($tracking), time() + 31536000); + } + unset($tracking); + } + break; + } + } ?> Index: functions_display.php =================================================================== RCS file: /cvsroot/nanuke/nanuke0.x/modules/forum/includes/functions_display.php,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** functions_display.php 23 Dec 2004 03:09:22 -0000 1.2 --- functions_display.php 24 Dec 2004 04:52:43 -0000 1.3 *************** *** 50,54 **** default: ! $sql_from = '(' . MODULE_FORUM_FORUMS_TABLE . ' f LEFT JOIN ' . FORUMS_TRACK_TABLE . ' ft ON (ft.user_id = ' . $user->data['user_id'] . ' AND ft.forum_id = f.forum_id))'; break; } --- 50,54 ---- default: ! $sql_from = '(' . FORUMS_TABLE . ' f LEFT JOIN ' . FORUMS_TRACK_TABLE . ' ft ON (ft.user_id = ' . $user->data['user_id'] . ' AND ft.forum_id = f.forum_id))'; break; } *************** *** 57,61 **** else { ! $sql_from = MODULE_FORUM_FORUMS_TABLE . ' f '; $lastread_select = $sql_lastread = ''; --- 57,61 ---- else { ! $sql_from = FORUMS_TABLE . ' f '; $lastread_select = $sql_lastread = ''; *************** *** 425,429 **** // Create forum navigation links for given forum, create parent // list if currently null, assign basic forum info to template ! function generate_forum_nav(&$forum_data) { global $db, $user, $template, $phpEx, $SID, $nanuke_root_path; --- 425,429 ---- // Create forum navigation links for given forum, create parent // list if currently null, assign basic forum info to template ! function generate_forum_nav(&$forum_data, $on_viewforum) { global $db, $user, $template, $phpEx, $SID, $nanuke_root_path; *************** *** 465,469 **** // 'FORUM_ID' => $forum_data['forum_id'], 'U_NAVPAGE' => "{$nanuke_root_path}index.$phpEx$SID&mod=forum&com=viewforum&f=" . $forum_data['forum_id'], ! 'S_CURRENT_PAGE' => true )); --- 465,469 ---- // 'FORUM_ID' => $forum_data['forum_id'], 'U_NAVPAGE' => "{$nanuke_root_path}index.$phpEx$SID&mod=forum&com=viewforum&f=" . $forum_data['forum_id'], ! 'S_CURRENT_PAGE' => $on_viewforum )); *************** *** 489,493 **** { $sql = 'SELECT forum_id, forum_name, forum_type ! FROM ' . MODULE_FORUM_FORUMS_TABLE . ' WHERE left_id < ' . $forum_data['left_id'] . ' AND right_id > ' . $forum_data['right_id'] . ' --- 489,493 ---- { $sql = 'SELECT forum_id, forum_name, forum_type ! FROM ' . FORUMS_TABLE . ' WHERE left_id < ' . $forum_data['left_id'] . ' AND right_id > ' . $forum_data['right_id'] . ' *************** *** 503,507 **** $forum_data['forum_parents'] = serialize($forum_parents); ! $sql = 'UPDATE ' . MODULE_FORUM_FORUMS_TABLE . " SET forum_parents = '" . $db->sql_escape($forum_data['forum_parents']) . "' WHERE parent_id = " . $forum_data['parent_id']; --- 503,507 ---- $forum_data['forum_parents'] = serialize($forum_parents); ! $sql = 'UPDATE ' . FORUMS_TABLE . " SET forum_parents = '" . $db->sql_escape($forum_data['forum_parents']) . "' WHERE parent_id = " . $forum_data['parent_id']; *************** *** 539,543 **** $sql = 'SELECT * ! FROM ' . MODULE_FORUM_MODERATOR_CACHE_TABLE . " WHERE display_on_index = 1 $forum_sql"; --- 539,543 ---- $sql = 'SELECT * ! FROM ' . MODERATOR_CACHE_TABLE . " WHERE display_on_index = 1 $forum_sql"; |