[szukam->propozycja]mod do automatycznego sklejania posto

Jeżeli masz pomysł na jakąś modyfikację bądź poszukujesz jakiegoś moda to zerknij do tego działu.
Awatar użytkownika
Lilly
Posty: 118
Rejestracja: 19 maja 2005, 11:53
Lokalizacja: Wrocław
Kontakt:

[szukam->propozycja]mod do automatycznego sklejania posto

Post autor: Lilly » 03 sierpnia 2005, 09:01

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 :)
Ostatnio zmieniony 03 sierpnia 2005, 20:01 przez Lilly, łącznie zmieniany 1 raz.
Forum grupy konwentowo-rpgowej: Hysteria
Obrazek
Jesli pomoglam, prosze o plusika ;-)

Kokoosh
Posty: 350
Rejestracja: 14 maja 2005, 22:47
Kontakt:

Post autor: Kokoosh » 03 sierpnia 2005, 10:18

chodzi Ci o moda laczenie postów?
jesli tak to prosze
Otworz posting.php i znajdz:

Kod: Zaznacz cały

else if ( $submit || $confirm ) 
{ 

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); 
         } 
      } 
   } 
Forum Młodzieżowe http://www.forumer.ddl2.pl/index.php - Serdecznie Zapraszam

Awatar użytkownika
Lilly
Posty: 118
Rejestracja: 19 maja 2005, 11:53
Lokalizacja: Wrocław
Kontakt:

Post autor: Lilly » 03 sierpnia 2005, 17:06

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 :?:
Forum grupy konwentowo-rpgowej: Hysteria
Obrazek
Jesli pomoglam, prosze o plusika ;-)

Kokoosh
Posty: 350
Rejestracja: 14 maja 2005, 22:47
Kontakt:

Post autor: Kokoosh » 03 sierpnia 2005, 17:53

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 ..
Forum Młodzieżowe http://www.forumer.ddl2.pl/index.php - Serdecznie Zapraszam

Dark Magician Boy
Posty: 17
Rejestracja: 02 sierpnia 2005, 08:55

Post autor: Dark Magician Boy » 03 sierpnia 2005, 19:14

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 :(

MSX2
Posty: 85
Rejestracja: 30 lipca 2005, 12:05
Lokalizacja: Wieś Warszawą zwana...
Kontakt:

Post autor: MSX2 » 03 sierpnia 2005, 19:25

Wystarczy tylko w dobrym miejscu UPDATE'a dać... Ale ja się w to nie bawię:P
Obrazek

Wilma, I'm home...

Awatar użytkownika
Lilly
Posty: 118
Rejestracja: 19 maja 2005, 11:53
Lokalizacja: Wrocław
Kontakt:

Post autor: Lilly » 03 sierpnia 2005, 19:45

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 :)
Forum grupy konwentowo-rpgowej: Hysteria
Obrazek
Jesli pomoglam, prosze o plusika ;-)

MSX2
Posty: 85
Rejestracja: 30 lipca 2005, 12:05
Lokalizacja: Wieś Warszawą zwana...
Kontakt:

Post autor: MSX2 » 06 sierpnia 2005, 16:06

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:

Kod: Zaznacz cały

t.topic_last_post_id DESC
:twisted: leniwy jestem, nie?
Obrazek

Wilma, I'm home...

Awatar użytkownika
Lilly
Posty: 118
Rejestracja: 19 maja 2005, 11:53
Lokalizacja: Wrocław
Kontakt:

Post autor: Lilly » 06 sierpnia 2005, 16:11

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 :P Wiec czekam po prostu na chwilke czasu, zeby skonfigurowac u siebie Krasnala ;-)
Forum grupy konwentowo-rpgowej: Hysteria
Obrazek
Jesli pomoglam, prosze o plusika ;-)

MSX2
Posty: 85
Rejestracja: 30 lipca 2005, 12:05
Lokalizacja: Wieś Warszawą zwana...
Kontakt:

Post autor: MSX2 » 06 sierpnia 2005, 16:12

Hehe, owszem... Dwie tabele, dwa pola do zmodyfikowania.
Co do testów forum - mi się najlepiej na żywca testuje :p...
Obrazek

Wilma, I'm home...

Awatar użytkownika
Lilly
Posty: 118
Rejestracja: 19 maja 2005, 11:53
Lokalizacja: Wrocław
Kontakt:

Post autor: Lilly » 06 sierpnia 2005, 16:14

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 ;-)
Forum grupy konwentowo-rpgowej: Hysteria
Obrazek
Jesli pomoglam, prosze o plusika ;-)

Zablokowany

Wróć do „Propozycje i Poszukiwania”