Go Back   vb.org Archive > vBulletin Modifications > Archive > vB.org Archives > vBulletin 3.7 > vBulletin 3.7 Add-ons
SSGTI - Prevent Duplicate Posts Details »»
SSGTI - Prevent Duplicate Posts
Version: 3.7.100, by Omranic Omranic is offline
Developer Last Online: Sep 2021 Show Printable Version Email this Page

Category: New Posting Features - Version: 3.7.x Rating:
Released: 07-16-2009 Last Update: Never Installs: 8
Uses Plugins
Re-useable Code Code Changes Translations  
No support by the author.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!.............. Sponsored by: PHP KingDom (www.phpkd.net) ..............!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~




Please remember to click Mark as Installed if you use this modification.
Support questions from members who have not marked this as installed will be considered low priority.


Note: This product has been requested by kevinh as a custom work. It has been completed & delivered few months ago. Since all of my custom work is licensed under Creative Commons - Attribution-Noncommercial-Share Alike 3.0, I publish it now for the public use, I hope this product will be useful for all of you.


Name: Prevent Duplicate Posts
Version: 3.8.100

Description:
  • This product will prevent duplicate posts from being posted in a time interval that specified by admin.
  • This product checks out the MD5 hash of the duplicate posts & compare it with the current post to see if it is really duplicate or not, this MD5 hash include (thread or forum ID, thread or post title, thread or post content and finally the user ID).
  • By enabling duplication flood check, you disallow users from making another duplicate post within a given time span of their last similar posting. In other words, if you set a duplication flood check time span of 30 seconds, a user may not duplicate post again within 30 seconds of making his last similar post.
  • Administrators and moderators are exempt from duplication flood check.
  • It's known that vBulletin by default has "Flood Check" that can be controlled from Admincp "Minimum Time Between Posts" option, but it's "Duplicate Check" is limited & can't be controlled any way since it's hard coded within vBulletin code (See file: functions_newpost.php -> function: build_new_post -> Code Block: after "// ### DUPE CHECK ###" comment), default vBulletin duplicate check is limited to 5 minutes only. This product solves this problem for those who need to prevent duplicate posts for a longer time with AdminCP control options.

Compatible with: All 3.6.x/3.7.x/3.8.x vBulletin versions.


Features:
  • Fully Phrased.
  • Fully Supported.
  • Professionally Coded.
  • Doing all default vBulletin checks & follow all vBulletin default scenarios while processing, the code embedded in the 'threadpost' data manager class, so it will work with both AJAX mode & normal mode posting all over the board.


Installation Procedure:
  1. Do the following file edits:
    Open the file "includes/class_dm_threadpost.php" & search in it for the following code:
    Code:
    					if ($this->errors)
    					{
    						// if we already have errors, the save won't happen, so rollback now...
    						$this->floodcheck->rollback();
    					}
    					else
    					{
    						// ...or, in case we have a new error
    						$this->set_failure_callback(array(&$this->floodcheck, 'rollback'));
    					}
    				}
    			}
    Add under it directly the following code:
    Code:
    			// duplication check
    			if ($this->registry->options['ssgti_prevent_duplposts_floodchecktime'] > 0 AND empty($this->info['preview']) AND empty($this->info['is_automated']) AND $this->fetch_field('userid', 'post'))
    			{
    				if (!$this->info['user'])
    				{
    					$this->info['user'] = fetch_userinfo($this->fetch_field('userid', 'post'));
    				}
    
    				if (!$user)
    				{
    					$user =& $this->info['user'];
    				}
    
    				if ($user['lastpost'] <= TIMENOW AND
    					!can_moderate($this->info['forum']['forumid'], '', $user['userid'], $user['usergroupid'] . (trim($user['membergroupids']) ? ",$user[membergroupids]" : '')))
    				{
    					$forumid = $this->fetch_field('forumid');
    					if (!$forumid)
    					{
    						$forumid = $this->info['forum']['forumid'];
    					}
    
    					$threadid = $this->fetch_field('threadid');
    					$type = ($threadid > 0 ? 'reply' : 'thread');
    
    					$userid = $this->fetch_field('postuserid');
    					if (!$userid)
    					{
    						$userid = $this->fetch_field('userid');
    					}
    
    					$query_join = "";
    					if ($type == "thread")
    					{
    						$query_join = "LEFT JOIN " . TABLE_PREFIX . "thread AS thread USING (threadid)";
    					}
    
    
    					$suspection_period = TIMENOW - $this->registry->options['ssgti_prevent_duplposts_floodchecktime'];
    
    					// Fetch all suspect duplicate posts
    					$suspects = $this->dbobject->query_read_slave("
    						SELECT " . ($type == "thread" ? "thread.forumid, " : "") . "post.threadid, post.title, post.pagetext, post.userid, post.dateline
    						FROM " . TABLE_PREFIX . "post AS post
    						$query_join
    						WHERE post.userid = " . intval($this->registry->userinfo['userid']) . "
    							AND post.dateline > $suspection_period
    							ORDER BY post.dateline DESC
    					");
    
    					while ($suspect = $this->dbobject->fetch_array($suspects))
    					{
    						$current_post_hash = md5(($type == "thread" ? $forumid : $threadid) . $this->fetch_field('title') . $this->fetch_field('pagetext', 'post') . $userid);
    						$duplicated_post_hash = md5(($type == "thread" ? $suspect['forumid'] : $suspect['threadid']) . $suspect['title'] . $suspect['pagetext'] . $suspect['userid']);
    
    						if ($current_post_hash == $duplicated_post_hash)
    						{
    							$duplication_wait = $this->registry->options['ssgti_prevent_duplposts_floodchecktime'] - (TIMENOW - $suspect['dateline']);
    							$this->error('postduplicatecheck', $this->registry->options['ssgti_prevent_duplposts_floodchecktime'], $duplication_wait);
    							return false;
    						}
    					}
    				}
    			}
    Save the modified file "includes/class_dm_threadpost.php" and upload it replacing the existing one.
  2. Import product's XML file from AdminCP.
  3. Done .


Control:
  • vBulletin AsminCP -> vBulletin Options -> vBulletin Options -> Prevent Duplicate Posts


License:

Help with:
  • Suggestions to develop this product.
  • Contributing any updates, upgrades and/or any new features.
  • Translations to benefit more users (translation credits goes to their owners).
  • Spreading this product. Yes, you're free to re-distribute this product as it is.


Known Isues:
  • Nothing till now.


History:
  • v3.7.100 17/07/2009 02:00 AM UTC: First initial public release.


Screen Shots:
  • Available down there.


Notes:
  • English version only supported & supplied here, for any other localized release please contact me.


Technical Notes:
  • New Files: 0
  • New Plugins: 0
  • New Phrases: 4
  • New Templates: 0
  • Template changes: 0
  • Code Changes: 1
  • New vBulletin Settings: 1
  • New Usergroup Permissions: 0
  • New Moderator Permissions: 0
  • New Administrator Permissions: 0
  • New Forum Options: 0
  • New DB Tables: 0
  • DB Alterations: 0
  • New Cron Jops: 0
    -----------------
  • Installation Level: V.Easy
  • Installation Time: 10~20 seconds


Donation?:
  • No, sorry. I appreciate your kindness. But if you need to help/support, then you can ask me for custom work. I'm ready for any custom work .

Supporters / CoAuthors

Show Your Support

  • This modification may not be copied, reproduced or published elsewhere without author's permission.
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 07:42 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.05295 seconds
  • Memory Usage 2,214KB
  • Queries Executed 17 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (2)bbcode_code
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)modsystem_post
  • (1)navbar
  • (6)navbar_link
  • (120)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_onlinestatus
  • (1)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.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
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • 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
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete