From eb1af43f7145e98fa5c26e1c36e4b07c666d0077 Mon Sep 17 00:00:00 2001 From: Mike Taylor Date: Thu, 3 May 2007 09:33:29 +0000 Subject: [PATCH] Simplify and clarify new/edit/copy code, resolving several bugs. --- web/htdocs/details/edit.mc | 78 +++++++++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 34 deletions(-) diff --git a/web/htdocs/details/edit.mc b/web/htdocs/details/edit.mc index 4bb0670..96a8d15 100644 --- a/web/htdocs/details/edit.mc +++ b/web/htdocs/details/edit.mc @@ -1,4 +1,4 @@ -%# $Id: edit.mc,v 1.31 2007-04-27 14:32:09 mike Exp $ +%# $Id: edit.mc,v 1.32 2007-05-03 09:33:29 mike Exp $ <%args> $op $id => undef @@ -35,48 +35,56 @@ die "op != new but id undefined" if $op ne "new" && !defined $id; my $conn = new ZOOM::Connection("localhost:8018/IR-Explain---1", 0, user => "admin", password => "fruitbat", elementSetName => "zeerex"); + +my $protocol = $r->param("protocol"); +my $host = $r->param("host"); +my $port = $r->param("port"); +my $dbname = $r->param("dbname"); +my $newid; +if (defined $protocol && $protocol ne "" && + defined $host && $host ne "" && + defined $port && $port ne "" && + defined $dbname && $dbname ne "") { + $newid = irspy_make_identifier($protocol, $host, $port, $dbname); +} + my $rec = ''; -if (defined $id && ($op ne "copy" || !$update)) { - # Existing record - my $query = cql_target($id); - my $rs = $conn->search(new ZOOM::Query::CQL($query)); - if ($rs->size() > 0) { - $rec = $rs->record(0); - } else { - ### Is this an error? I don't think the UI will ever provoke it - print qq[

(New ID specified.)

\n]; - $id = undef; - } -} else { - # No ID supplied -- this is a brand new record - my $protocol = $r->param("protocol"); - my $host = $r->param("host"); - my $port = $r->param("port"); - my $dbname = $r->param("dbname"); - if (!defined $protocol || $protocol eq "" || - !defined $host || $host eq "" || - !defined $port || $port eq "" || - !defined $dbname || $dbname eq "") { +if (!defined $id) { + if (!$update) { + # About to enter data for a new record + # Nothing to do at this stage + } elsif (!defined $newid) { + # Tried to create new record but data is insufficient print qq[

-You must specify protocol, host, port and database name.

\n] if $update; + Please specify protocol, host, port and database name.

\n]; undef $update; } else { - ### Should use a utility function for this - my $query = cql_target($protocol, $host, $port, $dbname); - my $rs = $conn->search(new ZOOM::Query::CQL($query)); + # Creating new record, all necessary data is present. Check + # that the new record is not a duplicate of an existing one. + my $rs = $conn->search(new ZOOM::Query::CQL(cql_target($newid))); if ($rs->size() > 0) { - my $fakeid = - xml_encode(uri_escape(irspy_make_identifier($protocol, $host, - $port, $dbname))); + my $qnewid = xml_encode(uri_escape($newid)); print qq[

-There is already -a record -for this host, port and database name. -

\n]; + There is already + a record + for this protocol, host, port and database name. +

\n]; undef $update; } } +} else { + # assert(defined $id); + # Copying or editing an existing record: fetch it for editing + my $query = cql_target($id); + my $rs = $conn->search(new ZOOM::Query::CQL($query)); + if ($rs->size() > 0) { + $rec = $rs->record(0); + } else { + ### Is this an error? I don't think the UI will ever provoke it + print qq[

(New ID specified.)

\n]; + $id = undef; + } } my $xc = irspy_xpath_context($rec); @@ -325,7 +333,8 @@ if ($update && @changedFields) { "e:metaInfo/e:dateModified" ] }, { dateModified => isodate(time()) }); die "Didn't set dateModified!" if !@x; - ZOOM::IRSpy::_really_rewrite_record($conn, $xc->getContextNode(), $id); + ZOOM::IRSpy::_really_rewrite_record($conn, $xc->getContextNode(), + $op eq "edit" ? $id : undef); } @@ -372,6 +381,7 @@ foreach my $ref (@fields) { +% $id = $newid if defined $newid; % if (defined $id) { % } -- 1.7.10.4