+csv dep for PG'OCaml.
[cocanwiki.git] / scripts / delete_contact.ml
index cfff4a2..0e211a9 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: delete_contact.ml,v 1.2 2004/09/23 11:56:47 rich Exp $
+ * $Id: delete_contact.ml,v 1.7 2006/12/06 09:46:57 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
@@ -27,44 +27,33 @@ open Printf
 open Cocanwiki
 open Cocanwiki_ok
 
-let run r (q : cgi) (dbh : Dbi.connection) hostid { hostname = hostname } _ =
+let run r (q : cgi) dbh hostid { hostname = hostname } _ =
   (* Cancel? *)
-  if q#param_true "cancel" then (
+  if q#param_true "cancel" then
     q#redirect ("http://" ^ hostname ^ "/_bin/contacts.cmo");
-    return ()
-  );
 
   (* We can delete multiple contact forms from this script, which is
    * quite unusual.
    *)
-  let ids = List.map int_of_string (q#param_all "delete") in
-  if ids = [] then (
+  let ids = List.map Int32.of_string (q#param_all "delete") in
+  if ids = [] then
     q#redirect ("http://" ^ hostname ^ "/_bin/contacts.cmo");
-    return ()
-  );
 
   (* Need to check the contact emails all belong to this host. *)
-  let qs = Dbi.placeholders (List.length ids) in
-  let sth = dbh#prepare_cached ("select count(*) from contacts
-                                  where hostid = ? and id in " ^ qs) in
-  sth#execute (`Int hostid :: (List.map (fun id -> `Int id) ids));
-
-  assert (sth#fetch1int () = List.length ids);
+  let rows = PGSQL(dbh)
+    "select count(*)::int4 from contacts
+      where hostid = $hostid and id in $@ids" in
+  assert (List.length rows = List.length ids);
 
   (* Delete them. *)
-  let sth = dbh#prepare_cached ("delete from contact_emails
-                                  where contactid in " ^ qs) in
-  sth#execute (List.map (fun id -> `Int id) ids);
-
-  let sth = dbh#prepare_cached ("delete from contacts
-                                  where hostid = ? and id in " ^ qs) in
-  sth#execute (`Int hostid :: (List.map (fun id -> `Int id) ids));
+  PGSQL(dbh) "delete from contact_emails where contactid in $@ids";
+  PGSQL(dbh) "delete from contacts where hostid = $hostid and id in $@ids";
 
   (* Finish off. *)
-  dbh#commit ();
+  PGOCaml.commit dbh;
 
   ok ~title:"Contact form(s) deleted" ~buttons:[ok_button "/_bin/contacts.cmo"]
-    q "Those contact form(s) were deleted."
+    r dbh hostid q "Those contact form(s) were deleted."
 
 let () =
   register_script ~restrict:[CanManageContacts] run