summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Froehlich <bernhard@cacert.org>2012-03-18 20:18:25 +0100
committerBernhard Froehlich <bernhard@cacert.org>2012-03-18 20:18:25 +0100
commit65f0dfcee2d36c8bd993fc4bf46a8aedf9e81d56 (patch)
tree0328acb52d43ba9cbae704548ba911f5d87e5497
parent18d7f2508dab95f1524b56132006c0e704d3ae92 (diff)
downloadcacert-devel-65f0dfcee2d36c8bd993fc4bf46a8aedf9e81d56.tar.gz
cacert-devel-65f0dfcee2d36c8bd993fc4bf46a8aedf9e81d56.tar.xz
cacert-devel-65f0dfcee2d36c8bd993fc4bf46a8aedf9e81d56.zip
Code proposal to sync assurer flag
-rw-r--r--includes/lib/account.php10
-rwxr-xr-xscripts/cron/updatesort.php35
2 files changed, 37 insertions, 8 deletions
diff --git a/includes/lib/account.php b/includes/lib/account.php
index f7a24fa..c7697ce 100644
--- a/includes/lib/account.php
+++ b/includes/lib/account.php
@@ -19,6 +19,8 @@
function fix_assurer_flag($userID)
{
+ // If requirements for assurers are modified see also scripts/cron/updatesort.php
+
// Update Assurer-Flag on users table if 100 points.
// Should the number of points be SUM(points) or SUM(awarded)?
$query = mysql_query('UPDATE `users` AS `u` SET `assurer` = 1 WHERE '.
@@ -29,11 +31,11 @@ function fix_assurer_flag($userID)
'(SELECT SUM(`points`) FROM `notary` AS `n` WHERE `n`.`to` = `u`.`id` '.
'AND (`n`.`expire` > now() OR `n`.`expire` IS NULL)) >= 100');
// Challenge has been passed and non-expired points >= 100
-
+
if (!$query) {
return false;
}
-
+
// Reset flag if requirements are not met
$query = mysql_query('UPDATE `users` AS `u` SET `assurer` = 0 WHERE '.
'`u`.`id` = \''.(int)intval($userID).'\' AND '.
@@ -42,10 +44,10 @@ function fix_assurer_flag($userID)
'AND `cp`.`user_id` = `u`.`id`) OR '.
'(SELECT SUM(`points`) FROM `notary` AS `n` WHERE `n`.`to` = `u`.`id` '.
'AND (`n`.`expire` > now() OR `n`.`expire` IS NULL)) < 100)');
-
+
if (!$query) {
return false;
}
-
+
return true;
} \ No newline at end of file
diff --git a/scripts/cron/updatesort.php b/scripts/cron/updatesort.php
index 1c80756..93db060 100755
--- a/scripts/cron/updatesort.php
+++ b/scripts/cron/updatesort.php
@@ -20,8 +20,20 @@
- //mysql_query("update users set assurer=0");
- $query = "select notary.`to` as uid from notary group by notary.`to` having sum(points)>=100";
+ /* Set assurer flag for accounts who miss it
+
+ See also includes/lib/account.php, function fix_assurer_flag($userID)
+
+ We may have some performance problems here, there are 150k assurances and 220k users
+ in the production database. The exists-clause on cats_passed should be a good filter... */
+
+ $query = "select `n`.`to` as `uid` from `notary` as `n`, `users` as `u` ".
+ " where `n`.`to`=`u`.`id` and `u`.`assurer`<>'1' ".
+ " and (`n`.`expire` > now() OR `n`.`expire` IS NULL) ".
+ " and exists(select 1 from `cats_passed` as `cp`, `cats_variant` as `cv` ".
+ " where `cp`.`variant_id`=`cv`.`id` and `cv`.`type_id` = 1 and `cp`.`user_id`=`n`.`to`)".
+ " group by `n`.`to` having sum(`n`.`points`)>=100";
+
$res = mysql_query($query);
while($row = mysql_fetch_assoc($res))
{
@@ -30,6 +42,23 @@
mysql_query($query);
}
+ /* Remove assurer flag from accounts not eligible.
+
+ Also a bit performance critical, but assurer flag is only set at 5k accounts
+
+ */
+ $query = "select `u`.id as `uid` from `users` as `u` " .
+ " where `u`.`assurer` = '1' ".
+ " and (not exists(select 1 from `cats_passed` as `cp`, `cats_variant` as `cv` ".
+ " where `cp`.`variant_id`=`cv`.`id` and `cv`.`type_id` = 1 and `cp`.`user_id`=`u`.`id`) ".
+ " or (select sum(`n`.`points`) from `notary` as `n` where `n`.`to`=`u`.`id` and (`n`.`expire` > now() OR `n`.`expire` IS NULL)) < 100) ";
+ $res = mysql_query($query);
+ while($row = mysql_fetch_assoc($res))
+ {
+ $query = "update users set `assurer`='0' where `id`='${row['uid']}'";
+ //echo $query."\n";
+ mysql_query($query);
+ }
mysql_query("update `locations` set `acount`=0");
$query = "SELECT `users`.`locid` AS `locid`, count(*) AS `total` FROM `users`
@@ -72,6 +101,4 @@
}
-
-
?>