From f79d8a3694c014d179f04f1e8560ff2a077253c4 Mon Sep 17 00:00:00 2001 From: Meik Sievertsen Date: Sat, 1 Nov 2003 16:10:21 +0000 Subject: [PATCH] finish bump topic feature... git-svn-id: file:///svn/phpbb/trunk@4634 89ea8834-ac86-4346-8a33-228a782c2dd0 --- phpBB/includes/functions.php | 31 +++++++++++++++++ phpBB/includes/functions_admin.php | 21 ++++++++++++ phpBB/includes/functions_posting.php | 1 - phpBB/posting.php | 33 ++++++++----------- .../subSilver/template/posting_body.html | 1 + .../subSilver/template/viewtopic_body.html | 1 + phpBB/viewtopic.php | 28 +++++++++++----- 7 files changed, 86 insertions(+), 30 deletions(-) diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index dac19939ba..70d6f014f0 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -1113,6 +1113,37 @@ function login_forum_box(&$forum_data) page_footer(); } +// Bump Topic Check - used by posting and viewtopic (do not want another included file) +function bump_topic_allowed($forum_id, $topic_bumped, $last_post_time, $topic_poster, $last_topic_poster) +{ + global $config, $auth, $user; + + // Check permission and make sure the last post was not already bumped + if (!$auth->acl_get('f_bump', $forum_id) || $topic_bumped) + { + return false; + } + + // Check bump time range, is the user really allowed to bump the topic at this time? + preg_match('#^([0-9]+)(m|h|d)$#', $config['bump_interval'], $match); + $bump_time = ($match[2] == 'm') ? $match[1] * 60 : (($match[2] == 'h') ? $match[1] * 3600 : $match[1] * 86400); + + // Check bump time + if ($last_post_time + $bump_time > time()) + { + return false; + } + + // Check bumper, only topic poster and last poster are allowed to bump + if ($topic_poster != $user->data['user_id'] && $last_topic_poster != $user->data['user_id']) + { + return false; + } + + // A bump time of 0 will completely disable the bump feature... not intended but might be useful. + return $bump_time; +} + // Error and message handler, call with trigger_error if reqd function msg_handler($errno, $msg_text, $errfile, $errline) { diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php index 78c46bafd0..9eac5d44ce 100644 --- a/phpBB/includes/functions_admin.php +++ b/phpBB/includes/functions_admin.php @@ -70,6 +70,27 @@ function make_forum_select($select_id = false, $ignore_id = false, $ignore_acl = return $forum_list; } +// Generate size select form +function size_select($select_name, $size_compare) +{ + global $user; + + $size_types_text = array($user->lang['BYTES'], $user->lang['KB'], $user->lang['MB']); + $size_types = array('b', 'kb', 'mb'); + + $select_field = ''; + + return ($select_field); +} + // Obtain authed forums list function get_forum_list($acl_list = 'f_list', $id_only = TRUE, $postable_only = FALSE, $no_cache = FALSE) { diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php index 677bdc08bd..6468a15508 100644 --- a/phpBB/includes/functions_posting.php +++ b/phpBB/includes/functions_posting.php @@ -523,7 +523,6 @@ function create_thumbnail($source, $new_file, $mimetype) return TRUE; } - // // TODO // diff --git a/phpBB/posting.php b/phpBB/posting.php index aede56df5a..f4d001f4f3 100644 --- a/phpBB/posting.php +++ b/phpBB/posting.php @@ -373,23 +373,9 @@ $img_status = ($auth->acl_get('f_img', $forum_id)) ? TRUE : FALSE; $flash_status = ($auth->acl_get('f_flash', $forum_id)) ? TRUE : FALSE; $quote_status = ($config['allow_quote'] && $auth->acl_get('f_quote', $forum_id)) ? TRUE : FALSE; - // Bump Topic -if ($mode == 'bump' && !$auth->acl_get('f_bump', $forum_id)) +if ($mode == 'bump' && ($bump_time = bump_topic_allowed($forum_id, $topic_bumped, $topic_last_post_time, $topic_poster, $topic_last_poster_id))) { - trigger_error('USER_CANNOT_BUMP'); -} -else if ($mode == 'bump') -{ - // Check bump time range, is the user really allowed to bump the topic at this time? - preg_match('#^([0-9]+)(m|h|d)$#', $config['bump_interval'], $match); - $bump_time = ($match[2] == 'm') ? $match[1] * 60 : (($match[2] == 'h') ? $match[1] * 3600 : $match[1] * 86400); - - if ($topic_last_post_time + $bump_time > $current_time) - { - trigger_error('BUMP_ERROR'); - } - $db->sql_transaction(); $db->sql_query('UPDATE ' . POSTS_TABLE . " @@ -398,7 +384,9 @@ else if ($mode == 'bump') AND topic_id = $topic_id"); $db->sql_query('UPDATE ' . TOPICS_TABLE . " - SET topic_last_post_time = $current_time + SET topic_last_post_time = $current_time, + topic_bumped = 1, + topic_bumper = " . $user->data['user_id'] . " WHERE topic_id = $topic_id"); $db->sql_query('UPDATE ' . FORUMS_TABLE . ' @@ -413,13 +401,17 @@ else if ($mode == 'bump') markread('post', $forum_id, $topic_id, $current_time); - add_log('mod', $forum_id, $topic_id, sprintf('LOGM_BUMP', $topic_title)); + add_log('mod', $forum_id, $topic_id, sprintf($user->lang['LOGM_BUMP'], $topic_title)); meta_refresh(3, "viewtopic.$phpEx$SID&f=$forum_id&t=$topic_id&p=$topic_last_post_id#$topic_last_post_id"); $message = $user->lang['TOPIC_BUMPED'] . '

' . sprintf($user->lang['VIEW_MESSAGE'], '", '') . '

' . sprintf($user->lang['RETURN_FORUM'], '', ''); trigger_error($message); } +else if ($mode == 'bump') +{ + trigger_error('BUMP_ERROR'); +} // Save Draft @@ -1571,7 +1563,7 @@ function delete_post($mode, $post_id, $topic_id, $forum_id, $data) { $sql_data['forum'] .= ($sql_data['forum'] != '') ? ', ' . implode(', ', $update) : implode(', ', $update); } - $sql_data['topic'] = 'topic_replies_real = topic_replies_real - 1' . (($data['post_approved']) ? ', topic_replies = topic_replies - 1' : ''); + $sql_data['topic'] = 'topic_bumped = 0, topic_bumper = 0, topic_replies_real = topic_replies_real - 1' . (($data['post_approved']) ? ', topic_replies = topic_replies - 1' : ''); $update = update_last_post_information('topic', $topic_id); if (sizeof($update)) { @@ -1764,6 +1756,7 @@ function submit_post($mode, $message, $subject, $username, $topic_type, $bbcode_ case 'reply': $sql_data['topic']['stat'][] = 'topic_replies_real = topic_replies_real + 1' . ((!$auth->acl_get('f_moderate', $data['forum_id'])) ? ', topic_replies = topic_replies + 1' : ''); + $sql_data['topic']['stat'][] = 'topic_bumped = 0, topic_bumper = 0'; $sql_data['user']['stat'][] = "user_lastpost_time = $current_time" . (($auth->acl_get('f_postcount', $data['forum_id'])) ? ', user_posts = user_posts + 1' : ''); $sql_data['forum']['stat'][] = 'forum_posts = forum_posts + 1'; //(!$auth->acl_get('f_moderate', $data['forum_id'])) ? 'forum_posts = forum_posts + 1' : ''; break; @@ -1789,7 +1782,7 @@ function submit_post($mode, $message, $subject, $username, $topic_type, $bbcode_ break; } -// $db->sql_transaction(); + $db->sql_transaction(); // Submit new topic if ($post_mode == 'post') @@ -1991,7 +1984,7 @@ function submit_post($mode, $message, $subject, $username, $topic_type, $bbcode_ } -// $db->sql_transaction('commit'); + $db->sql_transaction('commit'); if ($post_mode == 'post' || $post_mode == 'reply' || $post_mode == 'edit_last_post') { diff --git a/phpBB/styles/subSilver/template/posting_body.html b/phpBB/styles/subSilver/template/posting_body.html index 59ae0078d8..51fce73f93 100644 --- a/phpBB/styles/subSilver/template/posting_body.html +++ b/phpBB/styles/subSilver/template/posting_body.html @@ -38,6 +38,7 @@ function checkForm() return true; } } + //--> diff --git a/phpBB/styles/subSilver/template/viewtopic_body.html b/phpBB/styles/subSilver/template/viewtopic_body.html index 10fc0ccf8e..3711a88d66 100644 --- a/phpBB/styles/subSilver/template/viewtopic_body.html +++ b/phpBB/styles/subSilver/template/viewtopic_body.html @@ -162,6 +162,7 @@

{L_DOWNLOAD_NOTICE}

_________________
{postrow.SIGNATURE}
{postrow.EDITED_MESSAGE} + {postrow.BUMPED_MESSAGE} diff --git a/phpBB/viewtopic.php b/phpBB/viewtopic.php index 4a145b514e..0787c32510 100644 --- a/phpBB/viewtopic.php +++ b/phpBB/viewtopic.php @@ -162,7 +162,7 @@ if ($user->data['user_id'] != ANONYMOUS) // whereupon we join on the forum_id passed as a parameter ... this // is done so navigation, forum name, etc. remain consistent with where // user clicked to view a global topic -$sql = 'SELECT t.topic_id, t.forum_id, t.topic_title, t.topic_attachment, t.topic_status, t.topic_approved, ' . (($auth->acl_get('m_approve')) ? 't.topic_replies_real AS topic_replies' : 't.topic_replies') . ', t.topic_last_post_id, t.topic_last_post_time, t.topic_poster, t.topic_time, t.topic_time_limit, t.topic_type, t.poll_max_options, t.poll_start, t.poll_length, t.poll_title, f.forum_name, f.forum_desc, f.forum_parents, f.parent_id, f.left_id, f.right_id, f.forum_status, f.forum_id, f.forum_style, f.forum_password' . $extra_fields . ' +$sql = 'SELECT t.topic_id, t.forum_id, t.topic_title, t.topic_attachment, t.topic_status, t.topic_approved, ' . (($auth->acl_get('m_approve')) ? 't.topic_replies_real AS topic_replies' : 't.topic_replies') . ', t.topic_last_post_id, t.topic_last_poster_id, t.topic_last_post_time, t.topic_poster, t.topic_time, t.topic_time_limit, t.topic_type, t.topic_bumped, t.topic_bumper, t.poll_max_options, t.poll_start, t.poll_length, t.poll_title, f.forum_name, f.forum_desc, f.forum_parents, f.parent_id, f.left_id, f.right_id, f.forum_status, f.forum_id, f.forum_style, f.forum_password' . $extra_fields . ' FROM ' . TOPICS_TABLE . ' t, ' . FORUMS_TABLE . ' f' . $join_sql_table . " WHERE $join_sql AND (f.forum_id = t.forum_id @@ -446,11 +446,6 @@ if (sizeof($censors)) $topic_title = preg_replace($censors['match'], $censors['replace'], $topic_title); } -// Bump topic allowed? -preg_match('#^([0-9]+)(m|h|d)$#', $config['bump_interval'], $match); -$bump_time = ($match[2] == 'm') ? $match[1] * 60 : (($match[2] == 'h') ? $match[1] * 3600 : $match[1] * 86400); -unset($match); - // Send vars to template $template->assign_vars(array( 'FORUM_ID' => $forum_id, @@ -507,7 +502,7 @@ $template->assign_vars(array( 'U_POST_NEW_TOPIC' => "posting.$phpEx$SID&mode=post&f=$forum_id", 'U_POST_REPLY_TOPIC' => "posting.$phpEx$SID&mode=reply&f=$forum_id&t=$topic_id", - 'U_BUMP_TOPIC' => ($topic_last_post_time + $bump_time < time() && $auth->acl_get('f_bump', $forum_id)) ? "posting.$phpEx$SID&mode=bump&f=$forum_id&t=$topic_id" : '') + 'U_BUMP_TOPIC' => (bump_topic_allowed($forum_id, $topic_bumped, $topic_last_post_time, $topic_poster, $topic_last_poster_id)) ? "posting.$phpEx$SID&mode=bump&f=$forum_id&t=$topic_id" : '') ); // Does this topic contain a poll? @@ -846,7 +841,8 @@ do 'icq' => '', 'aim' => '', 'msn' => '', - 'search' => '' + 'search' => '', + 'username' => ($row['user_colour']) ? '' . $poster . '' : $poster ); } else @@ -881,7 +877,8 @@ do 'msn' => ($row['user_msnm']) ? "memberlist.$phpEx$SID&mode=contact&action=msnm&u=$poster_id" : '', 'yim' => ($row['user_yim']) ? 'http://edit.yahoo.com/config/send_webmesg?.target=' . $row['user_yim'] . '&.src=pg' : '', 'jabber' => ($row['user_jabber']) ? "memberlist.$phpEx$SID&mode=contact&action=jabber&u=$poster_id" : '', - 'search' => ($auth->acl_get('u_search')) ? "search.$phpEx$SID&search_author=" . urlencode($row['username']) .'&showresults=posts' : '' + 'search' => ($auth->acl_get('u_search')) ? "search.$phpEx$SID&search_author=" . urlencode($row['username']) .'&showresults=posts' : '', + 'username' => ($row['user_colour']) ? '' . $poster . '' : $poster ); if ($row['user_avatar'] && $user->optionget('viewavatars')) @@ -1161,6 +1158,18 @@ foreach ($rowset as $i => $row) $l_edited_by = ''; } + // Bump information + if ($topic_bumped && $row['post_id'] == $topic_last_post_id) + { + // It is safe to grab the username from the user cache array, we are at the last + // post and only the topic poster and last poster are allowed to bump + $l_bumped_by = '

' . sprintf($user->lang['BUMPED_BY'], $user_cache[$topic_bumper]['username'], $user->format_date($topic_last_post_time)); + } + else + { + $l_bumped_by = ''; + } + // Dump vars into template $template->assign_block_vars('postrow', array( 'POSTER_NAME' => $row['poster'], @@ -1177,6 +1186,7 @@ foreach ($rowset as $i => $row) 'MESSAGE' => $message, 'SIGNATURE' => ($row['enable_sig']) ? $user_cache[$poster_id]['sig'] : '', 'EDITED_MESSAGE'=> $l_edited_by, + 'BUMPED_MESSAGE'=> $l_bumped_by, 'MINI_POST_IMG' => ($row['post_time'] > $user->data['user_lastvisit'] && $row['post_time'] > $topic_last_read && $user->data['user_id'] != ANONYMOUS) ? $user->img('icon_post_new', $user->lang['NEW_POST']) : $user->img('icon_post', $user->lang['POST']), 'POST_ICON_IMG' => (!empty($row['icon_id'])) ? '' : '',