More checking. Not correct yet, though.
[irspy-moved-to-github.git] / web / htdocs / details / edit.mc
index ad724a0..92b5fa2 100644 (file)
@@ -1,22 +1,44 @@
-%# $Id: edit.mc,v 1.14 2006-11-16 12:16:32 mike Exp $
+%# $Id: edit.mc,v 1.19 2006-11-16 17:52:06 mike Exp $
 <%args>
 $id => undef
 </%args>
 <%perl>
 my $conn = new ZOOM::Connection("localhost:3313/IR-Explain---1", 0,
-                               user => "admin", password => "fruitbat");
+                               user => "admin", password => "fruitbat",
+                               elementSetName => "zeerex");
 my $rec = '<explain xmlns="http://explain.z3950.org/dtd/2.0/"/>';
 if (defined $id && $id ne "") {
-    $conn->option(elementSetName => "zeerex");
-    my $qid = $id;
-    $qid =~ s/"/\\"/g;
-    my $query = qq[rec.id="$qid"];
+    # Existing record
+    my $query = 'rec.id="' . cql_quote($id) . '"';
     my $rs = $conn->search(new ZOOM::Query::CQL($query));
-    my $n = $rs->size();
-    if ($n == 0) {
+    if ($rs->size() > 0) {
+       $rec = $rs->record(0);
+    } else {
        $id = undef;
+    }
+
+} else {
+    # New record
+    my $host = $r->param("host");
+    my $port = $r->param("port");
+    my $dbname = $r->param("dbname");
+    if (!defined $host || $host eq "" ||
+       !defined $port || $port eq "" ||
+       !defined $dbname || $dbname eq "") {
+       print qq[<p class="error">
+You must specify host, port and database name.</p>\n];
+       $r->param(update => 0);
     } else {
-       $rec = $rs->record(0);
+       my $query = cql_target($host, $port, $dbname);
+       my $rs = $conn->search(new ZOOM::Query::CQL($query));
+       if ($rs->size() > 0) {
+           my $fakeid = xml_encode(uri_escape("$host:$port/$dbname"));
+           print qq[<p class="error">
+There is already
+<a href='?id=$fakeid'>a record</a>
+for this host, port and database name.
+</p>\n];
+       }
     }
 }
 
@@ -59,7 +81,7 @@ my @fields =
 
 my $nchanges = 0;
 my $update = $r->param("update");
-if (defined $update) {
+
     # Update record with submitted data
     my %fieldsByKey = map { ( $_->[0], $_) } @fields;
     my %data;
@@ -67,8 +89,10 @@ if (defined $update) {
        next if grep { $key eq $_ } qw(id update new copy);
        $data{$key} = $r->param($key);
     }
+    my $mynchanges = modify_xml_document($xc, \%fieldsByKey, \%data);
 
-    $nchanges = modify_xml_document($xc, \%fieldsByKey, \%data);
+if ($update) {
+    $nchanges = $mynchanges;
     if ($nchanges) {
        ### Set e:metaInfo/e:dateModified
     }
@@ -102,7 +126,7 @@ foreach my $ref (@fields) {
 %     }
      </select>
 % } elsif ($nlines) {
-     <textarea name="<% $name %>" rows="<% $nlines %>" cols="55"><% $data %></textarea>
+     <textarea name="<% $name %>" rows="<% $nlines %>" cols="51"><% $data %></textarea>
 % } else {
      <input name="<% $name %>" type="text" size="60" value="<% $data %>"/>
 % }