vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vBulletin 3.5 Add-ons (https://vborg.vbsupport.ru/forumdisplay.php?f=113)
-   -   Prevent Doubleposting (https://vborg.vbsupport.ru/showthread.php?t=96602)

Puntoboy 01-19-2006 11:56 PM

i'd like to use this on my forum but only in the for sale area.

how can i do this?

murrtex 01-20-2006 02:02 PM

Quote:

Originally Posted by PersianImmortal
I got this to work on my 3.5.3 board (TweakGuides Forums) by using the original code, modifying as provided by Paul M, and also adding one new feature I think is very useful. This code works with AJAX (e.g. Quick Reply) without any problems, it automatically refreshes the page:

PHP Code:

// ########### Xenon Modified Prevent Doublepost Hack #########
    
$dp_settings = array(
        
'timespan' => 3600 24// how many seconds after the last post the new post is defined as doublepost (default: 24 hours)
        
'spacer' => "\n\n [b]Additional Comment:[/b] \n",    // What should be between the old post and the new one (default: two empty lines). Note: PersianImmortal has added [b]Additional Comment:[/b] \n to make it clear what is being added each time - can be removed if you wish.
        
'editedbymsg' => '[Automerged Doublepost]'// If left blank no edited by will appear
    
);
    
    
$isdoublepost false;
    
$oldmsg $post['message'];

    if (
$type != 'thread' 
        
AND $threadinfo['lastpost'] > TIMENOW $dp_settings['timespan'
        AND 
$threadinfo['lastposter'] == $vbulletin->userinfo['username'])
    {
        
// we are here, so we may have a doublepost -> do more exact checkings
        
$doublepost $vbulletin->db->query_first("
            SELECT post.*
            FROM " 
TABLE_PREFIX "post AS post
            LEFT JOIN " 
TABLE_PREFIX "deletionlog AS deletionlog ON(deletionlog.primaryid = post.postid AND type = 'post')
            WHERE threadid = 
$threadinfo[threadid]
                AND dateline > " 
. (TIMENOW $dp_settings['timespan']) . "
                AND visible = 1 AND deletionlog.primaryid IS NULL
            ORDER BY dateline DESC
            LIMIT 1
        "
);
    
        if (
$doublepost['userid'] == $vbulletin->userinfo['userid'])
        {
            
// we truely have a doublepost, now check if the merged post still fits the rules!
            
$dataman2 =& datamanager_init('Post'$vbulletinERRTYPE_ARRAY'threadpost');
            
$dataman2->set_existing($doublepost);
            
$post['message'] = $doublepost['pagetext'] . $dp_settings['spacer'] . $post['message'];
            
            
// set info
            
$dataman2->set_info('preview'$post['preview']);
            
$dataman2->set_info('parseurl'$post['parseurl']);
            
$dataman2->set_info('posthash'$post['posthash']);
            
$dataman2->set_info('forum'$foruminfo);
            
$dataman2->set_info('thread'$threadinfo);
    
            
// set options
            
$dataman2->setr('showsignature'$post['signature']);
            
$dataman2->setr('allowsmilie'$post['enablesmilies']);
    
            
// set data
            
$dataman2->setr('pagetext'$post['message']);
            
$dataman2->setr('iconid'$post['iconid']);
    
            
$dataman2->pre_save();
            if (!
$dataman2->errors)
            {
                
// merged post is ok, so do merging
                
$isdoublepost true;
                unset(
$dataman);
                
$dataman =& $dataman2;
                
$post['postid'] = $doublepost['postid'];
            }
            else
            {
                
// merging will produce errors so keep it as a single post..
                
$isdoublepost false;
            }
        }
    }
    
if (
$isdoublepost)
    {
        
// Ugly hack added by Paul M to fix ajax merge //
        
if (!$vbulletin->GPC['ajax'])
        {
            
$id $doublepost['postid'];
            
$dataman->save();
        
            if (
$dp_settings['editedbymsg'] != '')
            {
                
$vbulletin->db->query_write("
                REPLACE INTO " 
TABLE_PREFIX "editlog (postid, userid, username, dateline, reason)
                VALUES (
$id, " $vbulletin->userinfo['userid'] . ", '" addslashes($vbulletin->userinfo['username']) . "', " TIMENOW ", '" addslashes($dp_settings['editedbymsg']) . "')
                "
);
            }
        }
        
$vbulletin->url 'showthread.php?' $vbulletin->session->vars['sessionurl'] . "p=$post[postid]#post$post[postid]";
        eval(
print_standard_redirect('redirect_postthanks'truefalse));
    }  
    else
    {
        
// no doublepost so save as new post
        
$post['message'] = $oldmsg;
        
$id $dataman->save();
    } 

In summary the modifications to the original code are firstly the second step provided by Paul M (comment tags show Paul's added code as he provided it) - this is necessary for the AJAX refresh to work properly.

I also added an Additional Comment: heading in the Spacer, so that each automerged reply looks like this:

Additional Comment:
Second post text merged into first post

Additional Comment:
Third post text merged into first post

That way it becomes obvious what's been merged, both to the user and the reader. Also helps prompt the user to use the Edit button to add additional comments next time rather than just post multiple times in a row.

As I said, this now works perfectly on my board, and having tested it with both standard replies, quick replies using full AJAX features enabled, there are no errors or glitches.

Many thanks to Xenon and Paul M for this great mod, very useful and prevents a lot of conflicts and work for mods who get tired of having to merge multiple posts by individuals.

hi PersianImmortal ,I used yours everything is ok.refreshing,quick reply,click reply button...but when I click new thread button and I post ,page says Database errors

Code:

MySQL Error  : Duplicate entry '10006' for key 1
Error Number : 1062

the post goes but page says that, I think needs a little arrangement,,what should we do?

my version 3.5.3

Paul M 01-20-2006 03:35 PM

You need to post all the error message.

Alex_ 01-20-2006 03:51 PM

I just installed this mod on my vb 3.5.3 but I'm one of those who want the dateline to be updated...
I added
Code:

$dataman2->set('dateline', TIMENOW);
I also tried it with set_info but it doesn't work for me.
The post date doesn't get updated so I don't get a 'new post'...
Do I have to add another code with 3.5.3?
What could be wrong?

CBE 01-20-2006 05:49 PM

hi all,,
can any body conclude to us how can we install it @ 3.5.5 ??
WITH OUT ERROR ... lol ...
thanx allll

murrtex 01-20-2006 06:43 PM

Code:

Database error in vBulletin 3.5.3:

Invalid SQL:
INSERT INTO thread
        (postusername, postuserid, title, iconid, visible, forumid, similar, dateline, open, attach, lastpost, lastposter, replycount, hiddencount, threadid, firstpostid)
VALUES
        (***', 1, 'testttttttt', 0, 1, 1266, '', 1137789007, 1, 0, 1137789007, 'Mu?', 0, 0, 10027, 20630);

MySQL Error  : Duplicate entry '10027' for key 1
Error Number : 1062
Date        : Friday, January 20th 2006 @ 10:30:08 PM
Script      : http://www.4umturk.com/forum/newthread.php
Referrer    : http://www.4umturk.com/forum/newthre...wthread&f=1266
IP Address  :***
Username    : ***
Classname    : vb_database

Paul M, this is the full error code..

Paul M 01-20-2006 07:34 PM

Try running a repair on the thread table.

murrtex 01-20-2006 09:30 PM

ohh sorry I forgot to replace
Quote:

$id = $dataman->save();
:D
now its ok..

Daniel 01-20-2006 10:47 PM

Quote:

Originally Posted by CBE
hi all,,
can any body conclude to us how can we install it @ 3.5.5 ??
WITH OUT ERROR ... lol ...
thanx allll

3.5.5!? Where have I been? :speechless:

Alex_ 01-21-2006 07:07 AM

To solve the dateline problem I had to update the timestamp manually
I inserted
Code:

$vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "post SET dateline = " . TIMENOW . " WHERE postid = ".$post[postid]);
$vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "thread SET lastpost = " . TIMENOW . " WHERE threadid = ".$threadinfo[threadid]);

to renew post and thread timestamp to have an 'unseen' post.
Now I'm happy with it ;)


All times are GMT. The time now is 01:55 PM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.02223 seconds
  • Memory Usage 1,800KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (4)bbcode_code_printable
  • (1)bbcode_php_printable
  • (3)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (4)pagenav_pagelink
  • (3)pagenav_pagelinkrel
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (10)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.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/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • pagenav_page
  • pagenav_complete
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete