+ (* Count the number of changes. *)
+ let sth = dbh#prepare_cached "select count(*) from pages where hostid = ?" in
+ sth#execute [`Int hostid];
+ let count = sth#fetch1int () in
+
+ (* Get the offset and limit specified, and adjust them so that we will
+ * be displaying some changes.
+ *)
+ let offset =
+ try int_of_string (q#param "offset") with Not_found -> default_offset in
+ let limit =
+ try int_of_string (q#param "limit") with Not_found -> default_limit in
+
+ let limit =
+ if limit < 1 then 1
+ else if limit > max_limit then max_limit
+ else limit in
+ let offset =
+ if offset < 0 then 0
+ else if offset >= count then max 0 (count - limit)
+ else offset in
+
+ template#set "offset" (string_of_int offset);
+ template#set "last" (string_of_int (min (offset + limit) count - 1));
+ template#set "limit" (string_of_int limit);
+ template#set "count" (string_of_int count);
+
+ template#conditional "has_next" (offset + limit < count);
+ template#set "next_offset" (string_of_int (offset + limit));
+ template#conditional "has_prev" (offset > 0);
+ template#set "prev_offset" (string_of_int (max 0 (offset - limit)));
+
+ (* Get the actual changes. *)