(* COCANWIKI - a wiki written in Objective CAML.
* Written by Richard W.M. Jones <rich@merjis.com>.
* Copyright (C) 2004 Merjis Ltd.
- * $Id: contact.ml,v 1.1 2004/09/17 12:35:38 rich Exp $
+ * $Id: contact.ml,v 1.7 2004/10/30 10:16:09 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
let fail msg =
error ~back_button:true ~title:"Bad form"
q (msg ^ " Please contact the owner of the site by email.");
- raise CgiExit
+ return ()
in
- (* Get the id field. *)
- let id =
- try int_of_string (q#param "id")
+ (* Get the name field. *)
+ let name =
+ try q#param "id"
with
- Not_found -> fail "The 'id' field is missing in that form."
- | Failure "int_of_string" ->
- fail "The 'id' field in that form is not a number." in
+ Not_found ->
+ fail "The 'name' field is missing in that form." in
(* Get the contacts / emails from the database. *)
- let sth = dbh#prepare_cached "select subject from contacts
- where hostid = ? and id = ?" in
- sth#execute [`Int hostid; `Int id];
-
- let subject =
- try sth#fetch1string ()
- with Not_found -> fail "There is no such contact id in the database." in
+ let sth = dbh#prepare_cached "select id, subject from contacts
+ where hostid = ? and name = ?" in
+ sth#execute [`Int hostid; `String name];
+
+ let id, subject =
+ try
+ (match sth#fetch1 () with
+ [ `Int id; `String subject ] -> id, subject
+ | _ -> assert false
+ )
+ with Not_found -> fail "There is no such contact form in the database." in
let sth = dbh#prepare_cached "select email from contact_emails
where contactid = ?" in
let names = uniq (List.sort compare names) in
let uploads = uniq (List.sort compare uploads) in
+ (* Some browsers send an empty file for empty uploads. Remove those. *)
+ let uploads =
+ let not_empty name = (q#upload name).upload_value <> "" in
+ List.filter not_empty uploads in
+
(* Get the IP address for logging purposes. *)
let ip =
try Connection.remote_ip (Request.connection r) with Not_found -> "" in
let username =
match user with
Anonymous -> "anonymous"
- | User (userid, username, _) ->
+ | User (userid, username, _, _) ->
sprintf "%s (%d)" username userid in
template#set "ip" ip;
q "An email was sent and you should receive a reply shortly."
let () =
- register_script run
+ register_script ~restrict:[CanView] run