(* 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.6 2006/07/26 13:12:10 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
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."
+ dbh hostid q "Those contact form(s) were deleted."
let () =
register_script ~restrict:[CanManageContacts] run