X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=scripts%2Fcontact.ml;h=584e3f3ba22dbd70c97d76854b0471755a921efd;hb=247bf3832dcd02aae202dcb706ac20458f6ab1f1;hp=753f695417845ddb0ba1921fc29915cfda59cb4a;hpb=3e686452bc8b27781edb06b68749f7c34bf5fab4;p=cocanwiki.git diff --git a/scripts/contact.ml b/scripts/contact.ml index 753f695..584e3f3 100644 --- a/scripts/contact.ml +++ b/scripts/contact.ml @@ -1,7 +1,7 @@ (* COCANWIKI - a wiki written in Objective CAML. * Written by Richard W.M. Jones . * Copyright (C) 2004 Merjis Ltd. - * $Id: contact.ml,v 1.1 2004/09/17 12:35:38 rich Exp $ + * $Id: contact.ml,v 1.6 2004/10/04 15:19:56 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 @@ -36,25 +36,28 @@ let run r (q : cgi) (dbh : Dbi.connection) hostid {hostname = hostname} user = 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 @@ -95,6 +98,11 @@ let run r (q : cgi) (dbh : Dbi.connection) hostid {hostname = hostname} user = 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 @@ -149,4 +157,4 @@ let run r (q : cgi) (dbh : Dbi.connection) hostid {hostname = hostname} user = q "An email was sent and you should receive a reply shortly." let () = - register_script run + register_script ~restrict:[CanView] run