From: Brion Vibber Date: Thu, 4 Nov 2010 00:25:29 +0000 (-0700) Subject: Fix for ticket #2804: bad non-cache fallback code for dupe checks of prolific posters X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=4f63e3be7dc12383d4e66bdd4db25dd6fea9abba;p=quix0rs-gnu-social.git Fix for ticket #2804: bad non-cache fallback code for dupe checks of prolific posters The old code attempted to compare the value of the notice.created field against now() directly, which tends to explode in our current systems. now() comes up as the server/connection local timezone generally, while the created field is currently set as hardcoded UTC from the web servers. This would lead to breakage when we got a difference in seconds that's several hours off in either direction (depending on the local timezone). New code calculates a threshold by subtracting the number of seconds from the current UNIX timestamp and passing that in in correct format for a simple comparison. As a bonus, this should also be more efficient, as it should be able to follow the index on profile_id and created. --- diff --git a/classes/Notice.php b/classes/Notice.php index 60989f9bac..792d6e1316 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -524,10 +524,8 @@ class Notice extends Memcached_DataObject $notice = new Notice(); $notice->profile_id = $profile_id; $notice->content = $content; - if (common_config('db','type') == 'pgsql') - $notice->whereAdd('extract(epoch from now() - created) < ' . common_config('site', 'dupelimit')); - else - $notice->whereAdd('now() - created < ' . common_config('site', 'dupelimit')); + $threshold = common_sql_date(time() - common_config('site', 'dupelimit')); + $notice->whereAdd(sprintf("created > '%s'", $notice->escape($threshold))); $cnt = $notice->count(); return ($cnt == 0);