вот код который склеивает посты:
if (!$flood) {
$sig = isset($_POST['disable_sig']) ? "0" : "1";
$smileys = isset($_POST['disable_smileys']) ? "0" : "1";
$subject = $tdata['thread_subject'];
$result = dbquery("UPDATE ".$db_prefix."forums SET forum_lastpost='".time()."', forum_lastuser='".$userdata['user_id']."' WHERE forum_id='$forum_id'");
$result = dbquery("UPDATE ".$db_prefix."threads SET thread_lastpost='".time()."', thread_lastuser='".$userdata['user_id']."' WHERE thread_id='$thread_id'");
$result = dbquery("SELECT MAX(post_datestamp) AS last_post FROM ".$db_prefix."posts WHERE post_author='".$userdata['user_id']."' AND thread_id='$thread_id'");
$post = dbarray(dbquery("SELECT * FROM ".$db_prefix."posts WHERE post_datestamp='".$data['last_post']."'"));
if ($settings_forum['split_post'] == 1 && dbrows($result) > 0) {
$data = dbarray($result);
if ((time() - $data['last_post']) < $settings_forum['split_time']) {
$message = $post['post_message']."<br><br><br>--------------------<br>Добавлено: ".$userdata['user_name'].", ".showdate("forumdate", time())."<br>".stripinput(censorwords($_POST['message']));
$result = dbquery("UPDATE ".$db_prefix."posts SET post_message='$message' WHERE post_datestamp='".$data['last_post']."'");
} else {
$result = dbquery("INSERT INTO ".$db_prefix."posts (forum_id, thread_id, post_subject, post_message, post_showsig, post_smileys, post_author, post_datestamp, post_ip, post_edituser, post_edittime) VALUES ('$forum_id', '$thread_id', '$subject', '$message', '$sig', '$smileys', '".$userdata['user_id']."', '".time()."', '".USER_IP."', '0', '0')");
$newpost_id = mysql_insert_id();
}
} else {
$result = dbquery("INSERT INTO ".$db_prefix."posts (forum_id, thread_id, post_subject, post_message, post_showsig, post_smileys, post_author, post_datestamp, post_ip, post_edituser, post_edittime) VALUES ('$forum_id', '$thread_id', '$subject', '$message', '$sig', '$smileys', '".$userdata['user_id']."', '".time()."', '".USER_IP."', '0', '0')");
$newpost_id = mysql_insert_id();
}
if ($post_counter['post_counter'] == 1) {
$result = dbquery("UPDATE ".$db_prefix."users SET user_posts=user_posts+1 WHERE user_id='".$userdata['user_id']."'");
}
fallback("viewthread.php?forum_id=$forum_id&thread_id=$thread_id&pid=$newpost_id#post_$newpost_id");
if ($settings3['allow_multi'] == "1"){
$atotal = $settings3['files_num'];
} else {
$atotal = "1";
}
for($i=0;$i<$atotal;$i++){
$attach = $_FILES['attach'. $i];
if ($attach['name'] != "" && !empty($attach['name']) && is_uploaded_file($attach['tmp_name'])) {
$attachname = substr($attach['name'], 0, strrpos($attach['name'], "."));
$attachext = strtolower(strrchr($attach['name'],"."));
if (preg_match("/^[-0-9A-Z_\[\]]+$/i", $attachname) && $attach['size'] <= $settings['attachmax']) {
$attachtypes = explode(",", $settings['attachtypes']);
if (in_array($attachext, $attachtypes)) {
$attachname = attach_exists(strtolower($attach['name']));
move_uploaded_file($attach['tmp_name'], FORUM."attachments/".$attachname);
chmod(FORUM."attachments/".$attachname,0644);
if (in_array($attachext, $imagetypes) && (!@getimagesize(FORUM."attachments/".$attachname) || !@verify_image(FORUM."attachments/".$attachname))) {
unlink(FORUM."attachments/".$attachname);
$error = 1;
}
if (!$error) $result = dbquery("INSERT INTO ".$db_prefix."forum_attachments (thread_id, post_id, attach_name, attach_ext, attach_size) VALUES ('$thread_id', '$newpost_id', '$attachname', '$attachext', '".$attach['size']."')");
} else {
@unlink($attach['tmp_name']);
$error = 1;
}
} else {
@unlink($attach['tmp_name']);
$error = 2;
}
}
}
}
то что выделено жирным отвечает за склеивание, то что выделено синим обновляет сообщение если к нему приклеилось новое и делает редирект на негоже, а то что выделено красным и фиолетовым добавляет новое сообщение а не обновляет и делает редирект на него...но все зависит от настроек...если слеивание выключено в БД то сообщения пишутся как и раньше, если склеивание включено и интервал времени между постами подходит для склеивания постов - посты склеиаются, если интервал времени между постами больше чем интервал для склеивания то посты не склеиваются....
также надо добавить в БД 2 поля с настроками для склеивания, это вкл\выкл склеивание, и интервал в течении которого посты склеиваются....запросы думаю надо оптимизировать слегка...
в таблице forum_settings доавить две таблицы...
`split_post` tinyint(1) unsigned NOT NULL default '0',
`split_time` smallint(2) NOT NULL
вроде должно работать, т.к. у меня работает...
зы: ета замена стандартной функции ответа в viewthread.php...там надо просто заменить код и все.... |
|