Change subject line so it shows the name of the site.
[cocanwiki.git] / scripts / what_links_here.ml
index ea9b572..d904d0f 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: what_links_here.ml,v 1.1 2004/09/28 11:51:38 rich Exp $
+ * $Id: what_links_here.ml,v 1.6 2006/03/28 16:24:08 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
@@ -26,36 +26,39 @@ open Printf
 
 open Cocanwiki
 open Cocanwiki_template
+open Cocanwiki_links
 
-let run r (q : cgi) (dbh : Dbi.connection) hostid _ _ =
+let run r (q : cgi) dbh hostid _ _ =
   let template = get_template dbh hostid "what_links_here.html" in
 
   let page = q#param "page" in
   template#set "page" page;
 
-  let sth = dbh#prepare_cached "select title from pages
-                                 where hostid = ? and url = ?" in
-  sth#execute [`Int hostid; `String page];
-
-  let title = sth#fetch1string () in
+  let title = List.hd (
+    PGSQL(dbh) "select title from pages
+                 where hostid = $hostid and url = $page"
+  ) in
   template#set "title" title;
 
-  let sth =
-    dbh#prepare_cached "select l.from_url, p.title from links l, pages p
-                         where l.hostid = ? and l.to_url = ?
-                           and l.hostid = p.hostid and l.from_url = p.url" in
-  sth#execute [`Int hostid; `String page];
-
+  let pages = what_links_here dbh hostid page in
   let table =
-    sth#map
-      (function [`String page; `String title] ->
-        [ "page", Template.VarString page;
-          "title", Template.VarString title ]
-        | _ -> assert false) in
+    List.map (fun (page, title) ->
+               [ "page", Template.VarString page;
+                 "title", Template.VarString title ]) pages in
 
   template#table "pages" table;
+  template#conditional "pages_empty" (table = []);
+
+  (* Is the page in the site menu?  If so, then every other page
+   * links here, so we should say so.
+   *)
+  let rows = PGSQL(dbh)
+    "select 1 from sitemenu where hostid = $hostid and url = $page" in
+
+  let in_sitemenu = rows = [Some 1l] in
+  template#conditional "in_sitemenu" in_sitemenu;
 
   q#template template
 
 let () =
-  register_script run
+  register_script ~restrict:[CanView] run