vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vBulletin 3.8 Add-ons (https://vborg.vbsupport.ru/forumdisplay.php?f=235)
-   -   New Posting Features - SSGTI - Prevent Duplicate Posts (https://vborg.vbsupport.ru/showthread.php?t=218777)

Omranic 07-16-2009 10:00 PM

SSGTI - Prevent Duplicate Posts
 
1 Attachment(s)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!.............. 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.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 :).

Bin7raib 07-17-2009 03:02 AM

thanx,
Installed :)

jankoalek 07-17-2009 05:42 AM

thx I will try today

Not working to me - unistalled -

Omranic 07-17-2009 08:35 AM

Quote:

Originally Posted by jankoalek (Post 1850361)
thx I will try today

Not working to me - unistalled -

Hello,
Yes, sure.
It will not work since you didn't setup the product's settings there:
  • vBulletin AsminCP -> vBulletin Options -> vBulletin Options -> Prevent Duplicate Posts

Please do so & it will work smoothly!

dreads 07-28-2009 04:34 AM

Installed. Just wondering, would increasing the time between posts, increase the load (server load)?

samiro 07-29-2009 10:40 AM

How can I change the time from seconds to minutes...? (30 minutes)

Mike-D 07-29-2009 05:02 PM

Quote:

Originally Posted by SolidSnake@GTI
Do the following file edits:

Please don't get me wrong, but in case of any getting vB Updates, PHP File Edits should NEVER be executed. That's what hooks are for! So it's sometimes hard to keep it in mind what and where someone did. I'd recommend you these Addons as follow...
Just a kind note of course ;)

samiro 01-30-2010 10:47 AM

removed
dont work with VB4

nz17 05-24-2011 03:50 AM

1 Attachment(s)
Attached is a mod of "SSGTI - Prevent Duplicate Posts" created by myself, Nz17. It essentially takes all of the code for this add-on and puts it into an XML file so that the only edit to be made is a tiny, one-line custom hook insertion into a vBulletin file. Another XML file was created to be uploaded into the XML folder to allow this custom hook into vBulletin. The installation instructions have also been updated to make them more detailed and clear in places, and the zip has been trimmed down to only include the essentials.

Hopefully this mod will one day get integrated into the main "SSGTI - Prevent Duplicate Posts" add-on. :-)


All times are GMT. The time now is 07:08 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.01158 seconds
  • Memory Usage 1,790KB
  • 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
  • (2)bbcode_code_printable
  • (2)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (9)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
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete