Allow username field to be prepopulated.
[cocanwiki.git] / scripts / page.ml
index 9a4e8da..bfd7bd6 100644 (file)
@@ -1,7 +1,7 @@
 (* COCANWIKI - a wiki written in Objective CAML.
  * Written by Richard W.M. Jones <rich@merjis.com>.
  * Copyright (C) 2004 Merjis Ltd.
- * $Id: page.ml,v 1.28 2004/10/10 16:14:43 rich Exp $
+ * $Id: page.ml,v 1.32 2004/10/10 19:19:58 rich Exp $
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -25,6 +25,7 @@ open Cgi
 open Printf
 
 open ExtString
+open ExtList
 
 open Cocanwiki
 open Cocanwiki_template
@@ -279,25 +280,28 @@ let run r (q : cgi) (dbh : Dbi.connection) hostid
           t#set "username" username);
 
     (* If logged in, we want to update the recently_visited table. *)
-    (match user with
-       | User (userid, _, _) ->
-          let sth = dbh#prepare_cached "delete from recently_visited
-                                          where hostid = ? and userid = ?
-                                            and url = ?" in
-          sth#execute [`Int hostid; `Int userid; `String page'];
-          let sth = dbh#prepare_cached
-                      "insert into recently_visited (hostid, userid, url)
-                        values (?, ?, ?)" in
-          sth#execute [`Int hostid; `Int userid; `String page'];
-          dbh#commit ()
-       | _ -> ());
+    if pageid <> None then (
+      match user with
+       | User (userid, _, _) ->
+           let sth = dbh#prepare_cached "delete from recently_visited
+                                           where hostid = ? and userid = ?
+                                             and url = ?" in
+           sth#execute [`Int hostid; `Int userid; `String page'];
+           let sth = dbh#prepare_cached
+                       "insert into recently_visited (hostid, userid, url)
+                         values (?, ?, ?)" in
+           sth#execute [`Int hostid; `Int userid; `String page'];
+           dbh#commit ()
+       | _ -> ()
+    );
 
     (* Navigation links. *)
     if navigation then (
-      let max_links = 15 in            (* Show no more links than this. *)
+      let max_links = 18 in            (* Show no more links than this. *)
 
       (* What links here. *)
       let wlh = what_links_here dbh hostid page' in
+      let wlh = List.take max_links wlh in
       let wlh_urls = List.map fst wlh in (* Just the URLs ... *)
 
       let rv =
@@ -307,6 +311,7 @@ let run r (q : cgi) (dbh : Dbi.connection) hostid
               * links here' section, and don't link to self.
               *)
              let not_urls = page' :: wlh_urls in
+             let limit = max_links - List.length wlh_urls in
              let qs = Dbi.placeholders (List.length not_urls) in
              let sth =
                dbh#prepare_cached
@@ -319,7 +324,7 @@ let run r (q : cgi) (dbh : Dbi.connection) hostid
                      limit ?") in
              let args = List.map (fun s -> `String s) not_urls in
              sth#execute
-               ([`Int hostid; `Int userid] @ args @ [`Int max_links]);
+               ([`Int hostid; `Int userid] @ args @ [`Int limit]);
              sth#map
                (function [`String url; `String title; _] ->
                   url, title
@@ -331,9 +336,16 @@ let run r (q : cgi) (dbh : Dbi.connection) hostid
                              "title", Template.VarString title ] in
       let table = List.map f wlh in
       t#table "what_links_here" table;
+      t#conditional "has_what_links_here" (wlh <> []);
 
       let table = List.map f rv in
       t#table "recently_visited" table;
+      t#conditional "has_recently_visited" (rv <> []);
+
+      (* If both lists are empty (ie. an empty navigation box would
+       * appear), then disable navigation altogether.
+       *)
+      if wlh = [] && rv = [] then t#conditional "navigation" false
     );
 
     (* If we are coming from a search engine then we want to highlight