now() OR `n`.`expire` IS NULL) AND `n`.`deleted` = 0 ) >= 100'; $query = mysql_query($sql); if (!$query) { return false; } // Challenge has been passed and non-expired points >= 100 // Reset flag if requirements are not met // // Also a bit performance critical but assurer flag is only set on // ~5k accounts $sql = ' UPDATE `users` AS `u` SET `assurer` = 0 WHERE '.( ($userID === NULL) ? '`u`.`assurer` <> 0' : '`u`.`id` = \''.intval($userID).'\'' ).' 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(`points`) FROM `notary` AS `n` WHERE `n`.`to` = `u`.`id` AND ( `n`.`expire` > now() OR `n`.`expire` IS NULL ) AND `n`.`deleted` = 0 ) < 100 )'; $query = mysql_query($sql); if (!$query) { return false; } return true; } /** * Supported hash algorithms for signing certificates */ class HashAlgorithms { /** * Default hash algorithm identifier for signing * @var string */ public static $default = 'sha256'; /** * Get display strings for the supported hash algorithms * @return array(string=>array('name'=>string, 'info'=>string)) * - [$hash_identifier]['name'] = Name that should be displayed in UI * - [$hash_identifier]['info'] = Additional information that can help * with the selection of a suitable algorithm */ public static function getInfo() { return array( 'sha256' => array( 'name' => 'SHA-256', 'info' => '', ), 'sha384' => array( 'name' => 'SHA-384', 'info' => '', ), 'sha512' => array( 'name' => 'SHA-512', 'info' => '', ), ); } /** * Check if the input is a supported hash algorithm identifier otherwise * return the identifier of the default hash algorithm * * @param string $hash_identifier * @return string The cleaned identifier */ public static function clean($hash_identifier) { if (array_key_exists($hash_identifier, self::getInfo() )) { return $hash_identifier; } else { return self::$default; } } }