+ sth#execute [`Int hostid; `String title; `String title];
+
+ ) else (
+ (* Copy from template. *)
+ let template = int_of_string (q#param "template") in
+
+ (*dbh#set_debug true;*)
+
+ let sth = dbh#prepare_cached "select * from hosts where id = ?" in
+ sth#execute [`Int template];
+
+ let names = sth#names in
+ let row = sth#fetch1 () in
+ sth#finish ();
+
+ List.iter
+ (fun (name, field) ->
+ if name <> "id" && name <> "canonical_hostname" then (
+ let sql = "update hosts set " ^ name ^ " = ? where id = ?" in
+ let sth = dbh#prepare_cached sql in
+ sth#execute [field; `Int hostid]
+ )
+ ) (List.combine names row);
+
+ (* Copy pages. *)
+ let sth =
+ dbh#prepare_cached
+ "insert into pages (hostid, url, title, description, redirect, css)
+ select ?, url, title, description, redirect, css
+ from pages
+ where hostid = ? and url is not null" in
+ sth#execute [`Int hostid; `Int template];
+
+ (* Copy page contents. *)
+ let sth =
+ dbh#prepare_cached
+ "insert into contents (pageid, ordering, sectionname, content,
+ divname)
+ select (select id from pages where hostid = ? and url = p.url),
+ c.ordering, c.sectionname, c.content, c.divname
+ from contents c, pages p
+ where c.pageid = p.id and p.hostid = ? and p.url is not null" in
+ sth#execute [`Int hostid; `Int template];
+
+ (* Copy files and images. *)
+ let sth =
+ dbh#prepare_cached
+ "insert into files (hostid, name, content, title, mime_type)
+ select ?, name, content, title, mime_type
+ from files
+ where hostid = ? and name is not null" in
+ sth#execute [`Int hostid; `Int template];
+
+ let sth =
+ dbh#prepare_cached
+ "insert into images (hostid, name, image, width, height, alt, title,
+ longdesc, class, mime_type, thumbnail,
+ tn_width, tn_height, tn_mime_type)
+ select ?, name, image, width, height, alt, title, longdesc, class,
+ mime_type, thumbnail, tn_width, tn_height, tn_mime_type
+ from images
+ where hostid = ? and name is not null" in
+ sth#execute [`Int hostid; `Int template];
+
+ (* Copy sitemenu. *)
+ let sth =
+ dbh#prepare_cached
+ "insert into sitemenu (hostid, url, label, ordering)
+ select ?, url, label, ordering from sitemenu where hostid = ?" in
+ sth#execute [`Int hostid; `Int template];
+
+ (* Copy contacts. *)
+ let sth =
+ dbh#prepare_cached
+ "insert into contacts (hostid, name, subject)
+ select ?, name, subject from contacts where hostid = ?" in
+ sth#execute [`Int hostid; `Int template];
+
+ let sth =
+ dbh#prepare_cached
+ "insert into contact_emails (contactid, email)
+ select (select contactid from contacts
+ where hostid = ? and name = c.name), ce.email
+ from contact_emails ce, contacts c
+ where ce.contactid = c.id and c.hostid = ?" in
+ sth#execute [`Int hostid; `Int template];
+
+ (* Set the title of the index page. *)
+ let sth = dbh#prepare_cached "update pages set title = ?
+ where hostid = ? and url = 'index'" in
+ sth#execute [`String title; `Int hostid]
+ );
+
+ (* Create the administrator user. *)
+ let sth = dbh#prepare_cached "insert into users (hostid, name, password,
+ force_password_change, can_manage_users)
+ values (?, 'Administrator', '123456', true,
+ true)" in
+ sth#execute [`Int hostid];