From 9864ab4b2708ec54c39092a21828403cbbd25e2e Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Fri, 8 Jan 2010 14:56:08 -0800 Subject: Move the random image functionality into the gallery REST helper since choosing a random image is essentially a function on an item collection. Also implemented a bunch of other query filters for item collections. Created item::random_query() as a way of generating a reasonable starting point for random queries. --- modules/gallery/helpers/item.php | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) (limited to 'modules/gallery/helpers/item.php') diff --git a/modules/gallery/helpers/item.php b/modules/gallery/helpers/item.php index eb528f8f..1fd9ef16 100644 --- a/modules/gallery/helpers/item.php +++ b/modules/gallery/helpers/item.php @@ -175,31 +175,18 @@ class item_Core { } /** - * Return a random Item_Model, with optional filters + * Return a query to get a random Item_Model, with optional filters * * @param array (optional) where tuple */ - static function random($where=null) { - $random = ((float)mt_rand()) / (float)mt_getrandmax(); - - // Pick a random number and find the item that's got nearest smaller number. In the rare case - // that we chose the smallest number in the system, choose the item with the smallest number. + static function random_query($where=null) { + // Pick a random number and find the item that's got nearest smaller number. // This approach works best when the random numbers in the system are roughly evenly // distributed so this is going to be more efficient with larger data sets. - $items = ORM::factory("item") + return ORM::factory("item") ->viewable() - ->where("rand_key", "<", $random) + ->where("rand_key", "<", ((float)mt_rand()) / (float)mt_getrandmax()) ->merge_where($where) - ->order_by("rand_key", "DESC") - ->find_all(1); - - if ($items->count() == 0) { - $items = ORM::factory("item") - ->viewable() - ->merge_where($where) - ->order_by("rand_key", "ASC") - ->find_all(1); - } - return $items; + ->order_by("rand_key", "DESC"); } } \ No newline at end of file -- cgit v1.2.3