Beispiel #1
0
 static function get_position_within_album($item, $q, $album)
 {
     $page_size = module::get_var("gallery", "page_size", 9);
     $query = self::_build_query_base($q, $album, array("{items}.id = " . $item->id)) . " ORDER BY `score` DESC";
     $db = Database::instance();
     // Truncate the score by two decimal places as this resolves the issues
     // that arise due to inexact numeric conversions.
     $current = $db->query($query)->current();
     if (!$current) {
         // We can't find this result in our result set - perhaps we've fallen out of context?  Clear
         // the context and try again.
         item::clear_display_context_callback();
         url::redirect(url::current());
     }
     $score = $current->score;
     if (strlen($score) > 7) {
         $score = substr($score, 0, strlen($score) - 2);
     }
     // Redo the query but only look for results greater than or equal to our current location
     // then seek backwards until we find our item.
     $data = $db->query(self::_build_query_base($q, $album) . " HAVING `score` >= " . $score . " ORDER BY `score` DESC");
     $data->seek($data->count() - 1);
     while ($data->get("id") != $item->id && $data->prev()->valid()) {
     }
     return $data->key() + 1;
 }