Strona 1 z 1
[szukam->propozycja]mod do automatycznego sklejania posto
: 03 sierpnia 2005, 09:01
autor: Lilly
Otoz, czy ktos wie, gdzie mozna znalesc moda, ktory automatycznie skleja posty (zaraz po napisaniu nowego dodajac date nowego wpisu) tego samego autora, jesli sa dwa kolejne po sobie

Chociaz podpowiedz, jak moze sie nazywac

bo jak znajde chwilke to sama zaczne go szukac. Z gory dziekuje za pomoc

: 03 sierpnia 2005, 10:18
autor: Kokoosh
chodzi Ci o moda laczenie postów?
jesli tak to prosze
Otworz posting.php i znajdz:
Kod: Zaznacz cały
niżej dodaj:
// Wlacz laczenie postow (true - wlaczone, false - wylaczone)
$split_messages = true;
// Wlacz laczenie postow dla adminow
$split_messages_admin = true;
// Wlacz laczenie postow dla moderatorow
$split_messages_mod = true;
// Nie lacz w forach (wartosci oddziel przecinkami np: '3, 6, 8';
$split_messages_except = '';
if ( $mode == 'reply' && $userdata['user_id'] != ANONYMOUS )
{
$do_split = false;
if ( $userdata['user_level'] == ADMIN )
{
$do_split = (!$split_messages_admin) ? false : true;
}
else
{
$do_split = ($userdata['user_level'] == MOD && !$split_messages_mod) ? false : true;
}
if ( !empty($split_messages_except) && $do_split )
{
if ( strstr($split_messages_except, ',') )
{
$fids = explode(',', $split_messages_except);
while( list($foo, $id) = each($fids) )
{
$fid[] = intval( trim($id) );
}
}
else
{
$fid[] = intval( trim($split_messages_except) );
}
reset($fid);
$do_split = ( in_array($forum_id, $fid) == true ) ? false : true;
}
if ( $do_split )
{
$poster_id = $userdata['user_id'];
$sql = "SELECT post_id, poster_id, MAX(post_time) FROM " . POSTS_TABLE . "
WHERE topic_id = $topic_id
GROUP BY post_time
ORDER BY post_time DESC LIMIT 1";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not obtain post', '', __LINE__, __FILE__, $sql);
}
$post_id_last_row = $db->sql_fetchrow($result);
$post_id = $post_id_last_row['post_id'];
$poster_topic_id = $post_id_last_row['poster_id'];
if ( $post_id_last_row['poster_id'] == $poster_id )
{
$sql = "SELECT pt.post_text, pt.bbcode_uid, p.enable_bbcode, p.enable_html, p.enable_smilies
FROM " . POSTS_TEXT_TABLE . " pt, " . POSTS_TABLE . " p
WHERE p.post_id = $post_id
AND pt.post_id = $post_id";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not obtain post information', '', __LINE__, __FILE__, $sql);
}
$row = $db->sql_fetchrow($result);
$buid = $row['bbcode_uid'];
$add_data = create_date($board_config['default_dateformat'], time(), $board_config['board_timezone']);
$separator = " \n\n[size=9:" . $buid . "][ [i:" . $buid . "][b:" . $buid . "]Dodano[/b:" . $buid . "]: " . $add_data . "[/i:" . $buid . "] ][/size:" . $buid . "]\n";
$message = prepare_message($HTTP_POST_VARS['message'], $row['enable_html'], $row['enable_bbcode'], $row['enable_smilies'], $buid, $forum_id);
$last_message = prepare_message(str_replace(array("'", "\\"), array("''", "\\\\"), unprepare_message($row['post_text'])), $row['enable_html'], $row['enable_bbcode'], $row['enable_smilies'], $buid, $forum_id);
$splited = $last_message . $separator . str_replace("\'", "''", $message);
if ( strlen($splited) > 65500 )
{
message_die(GENERAL_MESSAGE, 'Your message is too long. It can not be more than 65500 chars.');
}
if ( trim(str_replace("''", "\'", $last_message)) == trim(str_replace('\"', '"', $message)) )
{
message_die(GENERAL_ERROR, 'Detected that same message !');
}
$sql = "UPDATE " . POSTS_TEXT_TABLE . "
SET post_text = '$splited'
WHERE post_id = $post_id";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not update splited message', '', __LINE__, __FILE__, $sql);
}
include($phpbb_root_path . 'includes/functions_search.'.$phpEx);
add_search_words(0, $post_id, stripslashes($message));
$meta = '<meta http-equiv="refresh" content="3;url=' . append_sid("viewtopic.$phpEx?" . POST_POST_URL . "=" . $post_id) . '#' . $post_id . '">';
$return_message = $lang['Stored'] . '<br /><br />' . sprintf($lang['Click_view_message'], '<a href="' . append_sid("viewtopic.$phpEx?" . POST_POST_URL . "=" . $post_id) . '#' . $post_id . '">', '</a>') . '<br /><br />' . sprintf($lang['Click_return_forum'], '<a href="' . append_sid("viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id") . '">', '</a>');
$template->assign_vars(array(
'META' => $meta . $return_meta)
);
message_die(GENERAL_MESSAGE, $return_message);
}
}
}
: 03 sierpnia 2005, 17:06
autor: Lilly
Fajno, zadzialalo za pierwszym zamachem bez bledow

Chociaz okazalo sie, ze ma to jedna wade - jak ktos napisze takiego nowego posta, nie widac, ze w topiku pojawilo sie cos nowego - chyba, ze zle sprawdzilismy. Wie ktos jak to rozwiazac

: 03 sierpnia 2005, 17:53
autor: Kokoosh
hmm, jest na to rozwiązanie, tego hacka pisał Przemo..
trzeba byloby sie zglosic na phpbb2.pl i spytac sie jak zrobic zeby w laczeniu postow pokazywalo ze ktos dodal "dodatkowy" post ..
: 03 sierpnia 2005, 19:14
autor: Dark Magician Boy
Lilly pisze:hociaz okazalo sie, ze ma to jedna wade - jak ktos napisze takiego nowego posta, nie widac, ze w topiku pojawilo sie cos nowego - chyba, ze zle sprawdzilismy. Wie ktos jak to rozwiazac
to będzie trudne

: 03 sierpnia 2005, 19:25
autor: MSX2
Wystarczy tylko w dobrym miejscu UPDATE'a dać... Ale ja się w to nie bawię:P
: 03 sierpnia 2005, 19:45
autor: Lilly
To niech bedzie dla potomnych
Kod: Zaznacz cały
$time = time();
$sql = "UPDATE " . POSTS_TABLE . " SET post_time = $time WHERE post_id = $post_id";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Nie udalo sie zmienic czasu posta', '', __LINE__, __FILE__, $sql);
}
Trzeba wstawic po:
Kod: Zaznacz cały
$sql = "UPDATE " . POSTS_TEXT_TABLE . "
SET post_text = '$splited'
WHERE post_id = $post_id";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not update splited message', '', __LINE__, __FILE__, $sql);
}
w tym kodzie, ktory powyzej napisal
Kokoosh.
Zasada dzialania jest taka, ze zmienia sie data glownego posta. Jest to obejscie troche na okolo, ale poki co nie udalo mi sie wymyslic nic lepszego (trzeba by pewnie zmienic warunki wyswietlania "new_post" we view_forum.php, a na to chwilowo nie mam ochoty bo jeszcze nie rozgryzlam zbyt dobrze tego pliku).
EDIT: Za wczasu uprzedze, ze ta moja modyfikacja ma jeszcze drobne niedociagniecia w postaci zlego przekierowania do ostatniego posta z poziomu forum oraz zlego sortowania postow w subforum (ten nowy nie jeste na gorze). Kiedy to naprawie, umieszcze tutaj. Ewentualne pomysly i podpowiedzi mile widziane

: 06 sierpnia 2005, 16:06
autor: MSX2
Lilly, może to zapytanie Cię naprowadzi na to, na to trzeba napisać update:
Kod: Zaznacz cały
$sql = "SELECT t.*, u.username, u.user_id, u2.username as user2, u2.user_id as id2, p.post_username, p2.post_username AS post_username2, p2.post_time
FROM " . TOPICS_TABLE . " t, " . USERS_TABLE . " u, " . POSTS_TABLE . " p, " . POSTS_TABLE . " p2, " . USERS_TABLE . " u2
WHERE t.forum_id = $forum_id
AND t.topic_poster = u.user_id
AND p.post_id = t.topic_first_post_id
AND p2.post_id = t.topic_last_post_id
AND u2.user_id = p2.poster_id
AND t.topic_type <> " . POST_ANNOUNCE . "
$limit_topics_time
ORDER BY t.topic_type DESC, t.topic_last_post_id DESC
LIMIT $start, ".$board_config['topics_per_page'];
A chodzi mi dokładniej o fragment:

leniwy jestem, nie?
: 06 sierpnia 2005, 16:11
autor: Lilly
W sumie to wiem, ze trzeba zmienic post_id i last_post_id, bo wedlug nich na forum jest wszystko ukladane. Natomiast trzeba to zrobic przynajmniej w dwoch tabelach. Jedno zapytanie juz mam napisane, drugie chodzi po glowie, tylko musze i tak zrobic sobie forum testowe u siebie na kompie, bo jak sie nie daj boze pomyle w ktoryms z zapytan, to mi jeszcze jakis post zniknie, albo jeszcze cos gorszego

Wiec czekam po prostu na chwilke czasu, zeby skonfigurowac u siebie Krasnala

: 06 sierpnia 2005, 16:12
autor: MSX2
Hehe, owszem... Dwie tabele, dwa pola do zmodyfikowania.
Co do testów forum - mi się najlepiej na żywca testuje :p...
: 06 sierpnia 2005, 16:14
autor: Lilly
Ja tez zazwyczaj testuje na zywca - ale tym razem przewiduje, ze moga pojawic sie konsekwencje nie do odwrocenia...
P.S. Masz plusika za dobre kombinowanie i checi
