vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vBulletin 3.0 Full Releases (https://vborg.vbsupport.ru/forumdisplay.php?f=33)
-   -   Prevent Doubleposting (https://vborg.vbsupport.ru/showthread.php?t=59916)

Xenon 09-23-2004 12:07 PM

Since the new version handles most of the conditions without extra queries, you should not see any impacts on huge forums :)

Slynderdale 09-23-2004 05:38 PM

I made some edits to this hack, this allows you to control it via Admin CP Settings so you can modify the settings for it and turn double post checking on and off. Its backwards compatible so this hack will work even if you don't add the settings.

Note:
Please backup your includes/functions_newpost.php before your install these changes.


In file includes/functions_newpost.php find Xenon's original code and replace it with this:
PHP Code:

// ### POST NEW POST ###
// doublepost check
$isdoublepost false;
$doubleposttime = (intval($vboptions['doubleposttime'])>0?intval($vboptions['doubleposttime']):3600);
if (
$type != 'thread' AND $threadinfo['lastpost'] > TIMENOW $doubleposttime AND $threadinfo['lastposter'] == $post['postusername'] AND $vboptions['doublepostenabled'] == 1) {
    
$doublepost $DB_site->query_first("
     SELECT postid, pagetext, post.userid
     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 $doubleposttime) . "
     AND visible = 1 AND deletionlog.primaryid IS NULL
     ORDER BY dateline DESC
     LIMIT 1
    "
);
 
    if (
$doublepost['userid'] == $bbuserinfo['userid'])
{
    
// we truely have a doublepost, now check if the merged post fits the rules!
    
$oldmsg $post['message'];
    
$olderrors $errors;
 
    
$post['message'] = $doublepost['pagetext'] . "\n\n" $post['message'];
    
verify_post_errors($type$post$errors);
    if (
sizeof($errors) == 0)
    {
     
// merged post is ok, so do merging
     
$isdoublepost true;
     
$post['postid'] = $doublepost['postid'];
    }
    else
    {
     
// merging will produce errors so keep it as a single post..
     
$isdoublepost false;
     
$post['message'] = $oldmsg;
    }
    unset(
$oldmsg);
    
$errors $olderrors;
    unset(
$olderrors);
}
}
 
if (
$isdoublepost)
{
// change this to false if you don't want doubleposts changing post's dateline
$do_bump = (isset($vboptions[doublepostbump])?$vboptions[doublepostbump]:1);
 
// Yes we have a doublepost, so do unindexing
require_once('./includes/functions_databuild.php');
delete_post_index($doublepost['postid'], $doublepost['title'], $doublepost['pagetext']);
unset(
$doublepost);
 
// Update DB
$DB_site->query("
    UPDATE " 
TABLE_PREFIX "post
    SET pagetext = '" 
addslashes($post['message']) . "',
    " 
iif($do_bump'dateline = ' TIMENOW ',''') . "
    attach = attach + 
$totalattachments
    WHERE postid = 
$post[postid]
"
);
 
//Delete Eventually parsed cached post
$DB_site->query("DELETE FROM " TABLE_PREFIX "post_parsed WHERE postid = " $post['postid']);
 
if (
$totalattachments OR $do_bump)
{
    
$DB_site->query("
     UPDATE " 
TABLE_PREFIX "thread
     SET " 
iif($do_bump'lastpost = ' TIMENOW ',''') . "
     attach = attach + 
$totalattachments
     WHERE threadid = 
$threadinfo[threadid]
    "
);
}
 
//Update forum if postdate has changed.
if ($do_bump)
{
    
$DB_site->query("
     UPDATE " 
TABLE_PREFIX "forum
     SET lastpost = " 
TIMENOW ",
     lastposter = '" 
addslashes($post['postusername']) . "',
     lastthread = '" 
addslashes($threadinfo['title']) . "',
     lastthreadid = 
$threadinfo[threadid],
     lasticonid = " 
iif($threadinfo['pollid'], -1$threadinfo['iconid']) . "
     WHERE forumid = 
$foruminfo[forumid]
    "
);
}
}
else
{
$DB_site->query("
    INSERT INTO " 
TABLE_PREFIX "post
     (threadid, parentid, title, username, userid, dateline, pagetext, allowsmilie,
     showsignature, ipaddress, iconid, visible, attach)
    VALUES
     (
$threadinfo[threadid]$parentid, '" addslashes($post['title']) . "',
     '" 
addslashes($post['postusername']) . "', $bbuserinfo[userid], " TIMENOW ",
     '" 
addslashes($post['message']) . "', $post[enablesmilies]$post[signature],
     '" 
addslashes($post['ipaddress']) . "', $post[iconid]$post[visible]$totalattachments)
"
);
$post['postid'] = $DB_site->insert_id();


Now to add the options, this can be done manually or with the queries below. I choosed to add them in the Posting settings group.

Manually Add then:

Varname: doublepostenabled
Type: yesno
Value: 1
Title: Check for double posts
Description: If enabled, it will check to see if the user already posted in the thread in a certain time limit, if so, their new post text will be added to their old post.

Varname: doublepostbump
Type: yesno
Value: 1
Title: Double posts bumping
Description: If enabled, and someone double posts, do you want the thread to be bumped because of the changes?

Varname: doubleposttime
Type:
Value: 3600
Title: Double post time
Description: The time in seconds you want to check for double posting.


OR

Queries:
[sql]
INSERT INTO `setting` VALUES ('doublepostenabled', 'posting', '1', '', 'yesno', 250, 0, 0);
INSERT INTO `setting` VALUES ('doublepostbump', 'posting', '1', '', 'yesno', 260, 0, 0);
INSERT INTO `setting` VALUES ('doubleposttime', 'posting', '3600', '3600', '', 270, 0, 0);

INSERT INTO `phrase` VALUES ('', 0, 'setting_doublepostenabled_title', 'Check for double posts', 5000);
INSERT INTO `phrase` VALUES ('', 0, 'setting_doublepostenabled_desc', 'If enabled, it will check to see if the user already posted in the thread in a certain time limit, if so, their new post text will be added to their old post.', 5000);
INSERT INTO `phrase` VALUES ('', 0, 'setting_doublepostbump_title', 'Double posts bumping', 5000);
INSERT INTO `phrase` VALUES ('', 0, 'setting_doublepostbump_desc', 'If enabled, and someone double posts, do you want the thread to be bumped because of the changes?', 5000);
INSERT INTO `phrase` VALUES ('', 0, 'setting_doubleposttime_title', 'Double post time', 5000);
INSERT INTO `phrase` VALUES ('', 0, 'setting_doubleposttime_desc', 'The time in seconds you want to check for double posting.', 5000);
[/sql]

HappyPike 09-23-2004 11:19 PM

Quote:

Originally Posted by Xenon
Since the new version handles most of the conditions without extra queries, you should not see any impacts on huge forums :)

Cool. I installed it on my forum. :)

*clicked install *

HappyPike 09-25-2004 12:08 AM

I think I found a little bug:

On my forum I set the attachments per post limit to 5. But people are able to create post with 9 attachments after I install this hack.

Xenon 09-26-2004 10:05 PM

have you installed the newest version of this hack?

I prevented such things with the last upgrade, so can you please tell me if your hack'sversion is 1.4?
If yes, i wonder why, but will put it on my bug-to-fix-list

thx in advance

HappyPike 09-26-2004 10:38 PM

Yup, I installed the latest 1.4 version.

Xenon 09-27-2004 10:23 AM

hmm, kay thx for reporting, i'll look into it :)

HappyPike 09-27-2004 10:13 PM

1) Xenon, how can I turn off this feature for certain forums? For example, for forum IDs 5, 10, and 20?

Some of my users have been whining because they need to reserve several posts in a row for some types of threads in certain forums.

2) It would be great if the make new post page can be edited to include a checkbox that says something like "Disable auto-merging". This way posters who prefer to make the post separate has a mean to do so. I wouln't need to disable the feature just for certain forums if this possible.

Thanks in advance for your help.

Xenon 09-28-2004 06:53 PM

Hmm, sorry the attachment problem will stay a while, as attachment setting checkings are done somewhere else and not where the other checks are done, i'll try to write an easy fix, but i'm currently strongly overworked, and so the next version may take a bit of time...

as for excluding some forums:

find:
PHP Code:

if ($type != 'thread' AND $threadinfo['lastpost'] > TIMENOW 3600 AND $threadinfo['lastposter'] == $post['postusername']) 

and change it into:
PHP Code:

if ($type != 'thread' AND !in_array($threadinfo['forumid'], array(x,y,z)) AND $threadinfo['lastpost'] > TIMENOW 3600 AND $threadinfo['lastposter'] == $post['postusername']) 

and replace x,y,z with your list of forumids

theArchitect 10-02-2004 05:55 AM

Sensational mod. *theArchitect clicks install*.

Will you be releasing an updated ones that works with your Hidden Posts mod? I only ask as since I have installed this if I post in a thread and then write a hidden post the two are combined. As you can imagine this is not the best scenario.


All times are GMT. The time now is 08:29 AM.

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.01422 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
  • (3)bbcode_php_printable
  • (1)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (4)pagenav_pagelink
  • (2)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