From e04c1fcf9f788fa3bf1c0cc15fcccb190fab80e5 Mon Sep 17 00:00:00 2001 From: "fly.dvorkin" Date: Sat, 12 Nov 2011 16:55:54 +0000 Subject: [PATCH] r308 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ALTER TABLE bb_topics ADD `topic_show_first_post` tinyint(1) unsigned NOT NULL default '0'; Закрепление первого поста git-svn-id: https://torrentpier2.googlecode.com/svn/trunk@308 a8ac35ab-4ca4-ca47-4c2d-a49a94f06293 --- install/sql/mysql.sql | 1 + upload/config.php | 4 +- upload/language/lang_english/lang_main.php | 6 ++ upload/language/lang_russian/lang_main.php | 6 ++ upload/modcp.php | 76 ++++++++++++++++++++++ upload/templates/default/viewtopic.tpl | 2 + upload/viewtopic.php | 27 ++++++++ 7 files changed, 120 insertions(+), 2 deletions(-) diff --git a/install/sql/mysql.sql b/install/sql/mysql.sql index affd2ecc5..bda589e8f 100644 --- a/install/sql/mysql.sql +++ b/install/sql/mysql.sql @@ -1270,6 +1270,7 @@ CREATE TABLE `bb_topics` ( `topic_reported` tinyint(1) NOT NULL default '0', `topic_dl_type` tinyint(1) NOT NULL default '0', `topic_last_post_time` int(11) NOT NULL default '0', + `topic_show_first_post` tinyint(1) unsigned NOT NULL default '0', PRIMARY KEY (`topic_id`), KEY `forum_id` (`forum_id`), KEY `topic_last_post_id` (`topic_last_post_id`), diff --git a/upload/config.php b/upload/config.php index f709d5cd0..a7a115723 100644 --- a/upload/config.php +++ b/upload/config.php @@ -53,8 +53,8 @@ $bb_cfg = $tr_cfg = $page_cfg = array(); // Increase number of revision after update $bb_cfg['tp_version'] = '2.2 Beta'; -$bb_cfg['tp_release_state'] = 'R307'; -$bb_cfg['tp_release_date'] = '10-11-2011'; +$bb_cfg['tp_release_state'] = 'R308'; +$bb_cfg['tp_release_date'] = '12-11-2011'; // Database $charset = 'utf8'; diff --git a/upload/language/lang_english/lang_main.php b/upload/language/lang_english/lang_main.php index b6ac1436f..4210dd886 100644 --- a/upload/language/lang_english/lang_main.php +++ b/upload/language/lang_english/lang_main.php @@ -1693,3 +1693,9 @@ $lang['DL_ULR'] = 'ULR'; $lang['DL_STOPPED'] = 'stopped'; $lang['DL_UPD'] = 'upd: '; $lang['DL_INFO'] = 'shows data only for the current session'; + +// Post PIN +$lang['POST_PIN'] = 'Pin first post'; +$lang['POST_UNPIN'] = 'Unpin first post'; +$lang['POST_PINNED'] = 'First post pinned'; +$lang['POST_UNPINNED'] = 'First post unpinned'; diff --git a/upload/language/lang_russian/lang_main.php b/upload/language/lang_russian/lang_main.php index abdd638bd..324e0bdff 100644 --- a/upload/language/lang_russian/lang_main.php +++ b/upload/language/lang_russian/lang_main.php @@ -1701,3 +1701,9 @@ $lang['DL_ULR'] = 'ULR'; $lang['DL_STOPPED'] = 'Остановил Скачивание/Раздачу'; $lang['DL_UPD'] = 'Подключён: '; $lang['DL_INFO'] = 'показаны данные только за текущую сессию'; + +// Post PIN +$lang['POST_PIN'] = 'Закрепить первый пост'; +$lang['POST_UNPIN'] = 'Открепить первый пост'; +$lang['POST_PINNED'] = 'Первый пост закреплён'; +$lang['POST_UNPINNED'] = 'Первый пост откреплён'; diff --git a/upload/modcp.php b/upload/modcp.php index 20eade094..6d32ab552 100644 --- a/upload/modcp.php +++ b/upload/modcp.php @@ -194,6 +194,8 @@ switch ($mode) case 'unlock': case 'set_download': case 'unset_download': + case 'post_stick': + case 'post_unstick': if (empty($_POST['topic_id_list']) && empty($topic_id)) { @@ -743,6 +745,80 @@ switch ($mode) $template->set_filenames(array('body' => 'modcp.tpl')); break; + case 'post_pin': + case 'post_unpin': + $pin = ($mode == 'post_pin'); + $new_topic_status = ($pin) ? 1 : 0; + + if(count($topic_csv)) + { + $sql = " + SELECT topic_id, topic_title + FROM ". BB_TOPICS ." + WHERE topic_id IN($topic_csv) + AND forum_id = $forum_id + AND topic_show_first_post != ". TOPIC_MOVED ." + AND topic_show_first_post != $new_topic_status + "; + + $topic_csv = array(); + + foreach (DB()->fetch_rowset($sql) as $row) + { + $topic_csv[] = $row['topic_id']; + $log_topics[$row['topic_id']] = $row['topic_title']; + } + + if (!$topic_csv = get_id_csv($topic_csv)) + { + message_die(GENERAL_MESSAGE, $lang['NONE_SELECTED']); + } + + DB()->query(" + UPDATE ". BB_TOPICS ." SET + topic_show_first_post = $new_topic_status + WHERE topic_id IN($topic_csv) + "); + + $msg = ($pin) ? $lang['POST_PINNED'] : $lang['POST_UNPINNED']; + message_die(GENERAL_MESSAGE, return_msg_mcp($msg)); + } + elseif ($topic_id) + { + $sql = " + SELECT topic_id, topic_title + FROM ". BB_TOPICS ." + WHERE topic_id = $topic_id + AND forum_id = $forum_id + AND topic_show_first_post != ". TOPIC_MOVED ." + AND topic_show_first_post != $new_topic_status + LIMIT 1 + "; + + $topic_csv = array(); + + foreach (DB()->fetch_rowset($sql) as $row) + { + $topic_csv[] = $row['topic_id']; + $log_topics[$row['topic_id']] = $row['topic_title']; + } + + if (!$topic_csv = get_id_csv($topic_csv)) + { + message_die(GENERAL_MESSAGE, $lang['NONE_SELECTED']); + } + + DB()->query(" + UPDATE ". BB_TOPICS ." SET + topic_show_first_post = $new_topic_status + WHERE topic_id IN($topic_csv) + "); + + $msg = ($pin) ? $lang['POST_PINNED'] : $lang['POST_UNPINNED']; + message_die(GENERAL_MESSAGE, return_msg_mcp($msg)); + } + break; + default: bb_die('invalid action'); break; diff --git a/upload/templates/default/viewtopic.tpl b/upload/templates/default/viewtopic.tpl index 03af24ba4..9e9dc4b2e 100644 --- a/upload/templates/default/viewtopic.tpl +++ b/upload/templates/default/viewtopic.tpl @@ -115,6 +115,8 @@ function set_hid_chbox (id) {L_MODERATE_TOPIC}{L_MODERATE_TOPIC} +  |  + {PIN_TITLE} | diff --git a/upload/viewtopic.php b/upload/viewtopic.php index d690067e4..b0c2af6d2 100644 --- a/upload/viewtopic.php +++ b/upload/viewtopic.php @@ -368,6 +368,28 @@ $post_order = (isset($_POST['postorder']) && $_POST['postorder'] !== 'asc') ? 'd // // Go ahead and pull all data for this topic // +// 1. Add first post of topic if it pinned and page of topic not first +$first_post = false; +if ($t_data['topic_show_first_post'] && ( $start != 0)) +{ + $first_post = DB()->fetch_rowset(" + SELECT + u.username, u.user_id, u.user_posts, u.user_from, + u.user_regdate, u.user_rank, u.user_sig, + u.user_avatar, u.user_avatar_type, + u.user_opt, + p.*, + h.post_html, IF(h.post_html IS NULL, pt.post_text, NULL) AS post_text + FROM ". BB_POSTS ." p + LEFT JOIN ". BB_USERS ." u ON(u.user_id = p.poster_id) + LEFT JOIN ". BB_POSTS_TEXT ." pt ON(pt.post_id = p.post_id) + LEFT JOIN ". BB_POSTS_HTML ." h ON(h.post_id = p.post_id) + WHERE + p.post_id = {$t_data['topic_first_post_id']} + LIMIT 1 + "); +} +// 2. All others posts $sql = " SELECT u.username, u.user_id, u.user_posts, u.user_from, @@ -394,6 +416,7 @@ $sql = " if ($postrow = DB()->fetch_rowset($sql)) { + if ($first_post) $postrow = array_merge($first_post, $postrow); $total_posts = count($postrow); } else @@ -591,6 +614,10 @@ $template->assign_vars(array( 'HIDE_RANK_IMG_DIS' => !$bb_cfg['show_rank_image'], + 'PINNED_FIRST_POST' => ($t_data['topic_show_first_post']), + 'PIN_HREF' => $t_data['topic_show_first_post'] ? "modcp.php?t=$topic_id&mode=post_unpin" : "modcp.php?t=$topic_id&mode=post_pin", + 'PIN_TITLE' => $t_data['topic_show_first_post'] ? $lang['POST_UNPIN'] : $lang['POST_PIN'], + 'AUTH_MOD' => $is_auth['auth_mod'], 'IN_MODERATION' => $moderation, 'SELECT_PPP' => ($moderation && $select_ppp && $total_replies > $posts_per_page) ? build_select('ppp', $select_ppp, $posts_per_page, null, null, 'onchange="$(\'#ppp\').submit();"') : '',