Back to vBulletin 3.8 Add-ons

SSGTI - Prevent Duplicate Posts
Mod Version: 3.8.100, by Omranic

vB Version: 3.8.x Rating: (3 votes - 5.00 average) Installs: 25
Released: 17 Jul 2009 Last Update: Never Downloads: 141
Not Supported Uses Plugins Code Changes Re-usable Code Translations  

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!.............. Sponsored by: PHP KingDom (http://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 http://creativecommons.org/licenses/by-nc-sa/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:
  • http://creativecommons.org/licenses/by-nc-sa/3.0/


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.8.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 .

Download

File Type: %1$s product-ssgti_prevent_duplposts-3.8.zip (154.8 KB, 169 downloads)

Supporters / CoAuthors

  • PHPKD

Screenshots

Click image for larger version
Name:	ssgti_prevent_duplposts_1.jpg
Views:	317
Size:	38.0 KB
ID:	102087   Click image for larger version
Name:	ssgti_prevent_duplposts_2.jpg
Views:	303
Size:	49.7 KB
ID:	102088  

Similar Mods

Board Optimization Prevent Duplicate url ( SEO ) - forum home vBulletin 3.7 Template Modifications
New Posting Features SSGTI - Prevent Duplicate Posts vBulletin 3.7 Add-ons
New Posting Features SSGTI - Prevent Duplicate Posts vBulletin 3.6 Add-ons

vblts.ru supports vBulletin®, 2022-2024