View Single Post
  #674  
Old 12-21-2009, 03:14 PM
TMM-TT's Avatar
TMM-TT TMM-TT is offline
 
Join Date: Jun 2005
Location: Sweden
Posts: 212
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

This is the story:

My newsservers motherboard died in november, so I had to order a new one. This server has now been reinstalled from scratch so the Xref, which gateway.php uses is reset. Lastmsg in the nntp_groups-table therefore got useless, especially when the server resynched older posts again.

Fetching all posts again after resetting the lastmsg will result in duplicate messages. This has been fixed with a small patch.


Find the row:
$message =& $nntp['message'];

Add this code after that row:

PHP Code:
                          /*
                           * Find duplicates by message-id against the forumid!
                           *
                           * Matching against forumid, so crosspostings to other groups
                           * can proceed to posting.
                           *
                           */
                          
$isduplicate false;
                          
$msgid $message['message-id'];
                          
$msgdupe $db->query_first("
                                  SELECT p.postid,p.threadid,p.msgid,t.forumid FROM post AS p
                                          INNER JOIN thread AS t
                                                  ON p.threadid = t.threadid
                                          WHERE msgid = '"
.$db->escape_string($msgid)."'
                                  "
);
                          if (
$group['forum'] == $msgdupe['forumid'])
                          {
                                  
$isduplicate true;
                                  
logging("Skip, Message-ID already found.");
                                  
// No continue should be used here, since the lastmsg-counter must work
                                  //continue;
                          



Then go find the row for the post-insert (it?s actually the thread-insert), it should look like this:

$postid = insert_post($threadid, $forumid, $foruminfo, $subject, $from_name, $from_email, $date, $parentid);

Before that line, add?

PHP Code:
                                          // If this isn't a duplicate
                                          
if (!$isduplicate)
                                          { 



Then, after the line ?
exec_send_notification($threadid, "0", $postid);

Add this:

PHP Code:
                                           // Isduplicate Finish 
Right after this, you have to add similar code to the insertcode for posts, so directly after

} else {


?add this again:

PHP Code:
                                          // If this isn't a duplicate
                                          
if (!$isduplicate)
                                          { 


?and finish this with an ending ?}? after the line

logging("'$subject' from ". $from_name . ". New thread.");


Now, the gateway should?nt post a message with the same Message-ID twice?
Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01103 seconds
  • Memory Usage 1,810KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD_SHOWPOST
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (4)bbcode_php
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_box
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • reputationlevel
  • showthread
Included Files:
  • ./showpost.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showpost_start
  • bbcode_fetch_tags
  • bbcode_create
  • postbit_factory
  • showpost_post
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • showpost_complete