(* COCANWIKI - a wiki written in Objective CAML.
* Written by Richard W.M. Jones <rich@merjis.com>.
* Copyright (C) 2004 Merjis Ltd.
- * $Id: edit_page_css.ml,v 1.16 2005/03/31 14:24:04 rich Exp $
+ * $Id: edit_page_css.ml,v 1.24 2006/08/17 09:11:31 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_emailnotify
open Cocanwiki_strings
-let run r (q : cgi) (dbh : Dbi.connection) hostid {hostname = hostname} user =
+let run r (q : cgi) dbh hostid {hostname = hostname} user =
let page = q#param "page" in
let css = q#param "css" in
- let css = if string_is_whitespace css then `Null else `String css in
+ let css = if string_is_whitespace css then None else Some css in
(* Get the IP address of the user, if available. *)
let logged_ip =
- try `String (Connection.remote_ip (Request.connection r))
- with Not_found -> `Null in
+ try Some (Connection.remote_ip (Request.connection r))
+ with Not_found -> None in
let logged_user =
match user with
- | User (id, _, _, _) -> `Int id
- | _ -> `Null in
+ | User (id, _, _, _) -> Some id
+ | _ -> None in
(* Changing the CSS creates a new version of the page. This enables
* us to revert changes to the CSS easily.
*)
- let sth = dbh#prepare_cached "select id, title, description, creation_date,
- redirect
- from pages
- where hostid = ? and url = ?" in
- sth#execute [`Int hostid; `String page];
-
- let oldpageid, title, description, creation_date, redirect =
- match sth#fetch1 () with
- [ `Int id; title; description; creation_date; redirect ] ->
- id, title, description, creation_date, redirect
- | _ -> assert false in
-
- let sth = dbh#prepare_cached
- "set constraints pages_redirect_cn, sitemenu_url_cn,
- page_emails_url_cn, links_from_cn, recently_visited_url_cn
- deferred" in
- sth#execute [];
-
- let sth = dbh#prepare_cached "update pages set url_deleted = url,
- url = null
- where hostid = ? and id = ?" in
- sth#execute [`Int hostid; `Int oldpageid];
-
- let sth = dbh#prepare_cached "insert into pages (hostid, url, title,
- description, creation_date, logged_ip,
- logged_user, redirect, css)
- values (?, ?, ?, ?, ?, ?, ?, ?, ?)" in
- sth#execute [`Int hostid; `String page; title; description;
- creation_date; logged_ip; logged_user; redirect; css ];
-
- let pageid = sth#serial "pages_id_seq" in
-
- let sth = dbh#prepare_cached "insert into contents (pageid, ordering,
- sectionname, content, divname)
- select ? as pageid, ordering, sectionname,
- content, divname
- from contents
- where pageid = ?" in
- sth#execute [`Int pageid; `Int oldpageid];
-
- dbh#commit ();
+ let rows = PGSQL(dbh)
+ "select id, title, description, keywords, noodp, creation_date, redirect
+ from pages
+ where hostid = $hostid and url = $page" in
+
+ let oldpageid, title, description, keywords, noodp, creation_date, redirect =
+ match rows with
+ | [row] -> row
+ | _ -> assert false in
+
+ PGSQL(dbh)
+ "set constraints pages_redirect_cn, sitemenu_url_cn,
+ page_emails_url_cn, links_from_cn, recently_visited_url_cn
+ deferred";
+
+ PGSQL(dbh) "update pages set url_deleted = url, url = null
+ where hostid = $hostid and id = $oldpageid";
+
+ PGSQL(dbh) "insert into pages (hostid, url, title,
+ description, keywords, noodp,
+ creation_date, logged_ip,
+ logged_user, redirect, css)
+ values ($hostid, $page, $title, $description, $?keywords,
+ $?noodp,
+ $creation_date, $?logged_ip, $?logged_user,
+ $?redirect, $?css)";
+
+ let pageid = PGOCaml.serial4 dbh "pages_id_seq" in
+
+ PGSQL(dbh) "insert into contents (pageid, ordering,
+ sectionname, content, divname, divclass,
+ jsgo)
+ select $pageid as pageid, ordering, sectionname,
+ content, divname, divclass, jsgo
+ from contents
+ where pageid = $oldpageid";
+
+ PGOCaml.commit dbh;
(* Email notification. *)
let subject = "CSS for page " ^ page ^ " has been modified" in
Template.StdPages.method_ = None;
Template.StdPages.params = [ "page", page ] } ] in
ok ~title:"Stylesheet changed" ~buttons
- q ("The stylesheet was changed successfully. " ^
- "Note: You must RELOAD the page to see changes to stylesheets.")
+ dbh hostid q
+ ("The stylesheet was changed successfully. " ^
+ "Note: You must RELOAD the page to see changes to stylesheets.")
let () =
register_script ~restrict:[CanEdit] run