X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=scripts%2Frestore.ml;h=f7ce475fcef21e4976afbd0dc4ababdcd409e572;hb=cd059731a60fd3d4dcf426430ad26ff227b91910;hp=53fb478db9beadce4350c356097ef67668bed4c6;hpb=867889b6d04b6381c74974e338672ee02d61920e;p=cocanwiki.git diff --git a/scripts/restore.ml b/scripts/restore.ml index 53fb478..f7ce475 100644 --- a/scripts/restore.ml +++ b/scripts/restore.ml @@ -1,7 +1,7 @@ (* COCANWIKI - a wiki written in Objective CAML. * Written by Richard W.M. Jones . * Copyright (C) 2004 Merjis Ltd. - * $Id: restore.ml,v 1.8 2004/09/21 13:01:16 rich Exp $ + * $Id: restore.ml,v 1.21 2006/03/28 16:24:08 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 @@ -29,63 +29,58 @@ open Cocanwiki_ok open Cocanwiki_diff open Cocanwiki_emailnotify -let run r (q : cgi) (dbh : Dbi.connection) hostid {hostname = hostname} user = - let version = int_of_string (q#param "version") in +let run r (q : cgi) dbh hostid {hostname = hostname} user = + let version = Int32.of_string (q#param "version") in let page = q#param "page" in - if q#param_true "yes" then ( + if not (q#param_true "no") then ( (* 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 (* Copy the old version of the page to be live. *) - let sth = dbh#prepare_cached "select title, description, creation_date, - redirect, css - from pages - where hostid = ? - and url_deleted = ? and id = ?" in - sth#execute [`Int hostid; `String page; `Int version]; + let rows = PGSQL(dbh) + "select title, description, creation_date, + redirect, css + from pages + where hostid = $hostid + and url_deleted = $page and id = $version" in let title, description, creation_date, redirect, css = - match sth#fetch1 () with - [ title; description; creation_date; redirect; css ] -> - title, description, creation_date, redirect, css - | _ -> assert false in - - let sth = - dbh#prepare_cached - "set constraints pages_redirect_cn, sitemenu_url_cn deferred" in - sth#execute []; - - let sth = dbh#prepare_cached "update pages set url_deleted = url, - url = null - where hostid = ? and url = ?" in - sth#execute [`Int hostid; `String page]; - - 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 version]; - - dbh#commit (); + 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 url = $page"; + PGSQL(dbh) "insert into pages (hostid, url, title, + description, creation_date, logged_ip, + logged_user, redirect, css) + values ($hostid, $page, $title, $description, $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) + select $pageid, ordering, sectionname, content, divname + from contents + where pageid = $version"; + + (* Keep the links table in synch. *) + Cocanwiki_links.update_links_for_page dbh hostid page; + + PGOCaml.commit dbh; (* Email notify. *) let subject = "Page " ^ page ^ " has been restored." in @@ -95,12 +90,12 @@ let run r (q : cgi) (dbh : Dbi.connection) hostid {hostname = hostname} user = "Page: http://" ^ hostname ^ "/" ^ page ^ "\n\n" ^ diff in - email_notify ~body ~subject dbh hostid; + email_notify ~body ~subject ~user dbh hostid; (* Done. *) let buttons = [ ok_button ("/" ^ page) ] in ok ~title:"Restored" ~buttons - q "The old page was restored successfully." + dbh hostid q "The old page was restored successfully." ) else q#redirect ("http://" ^ hostname ^ "/" ^ page)