Require a title (Name) for the target.
[irspy-moved-to-github.git] / web / htdocs / details / edit.mc
index e435624..881b5ce 100644 (file)
@@ -1,4 +1,3 @@
-%# $Id: edit.mc,v 1.36 2007-07-17 13:04:45 mike Exp $
 <%args>
 $op
 $id => undef ### should be extracted using utf8param()
@@ -32,27 +31,30 @@ duplicate ID.
 die "op = new but id defined" if $op eq "new" && defined $id;
 die "op != new but id undefined" if $op ne "new" && !defined $id;
 
-my $conn = new ZOOM::Connection("localhost:8018/IR-Explain---1", 0,
+my $db = ZOOM::IRSpy::connect_to_registry();
+my $conn = new ZOOM::Connection($db, 0,
                                user => "admin", password => "fruitbat",
                                elementSetName => "zeerex");
 
-my $protocol = utf8param($r, "protocol");
-my $host = utf8param($r, "host");
-my $port = utf8param($r, "port");
-my $dbname = utf8param($r, "dbname");
+my $protocol = utf8paramTrim($r, "protocol");
+my $host = utf8paramTrim($r, "host");
+my $port = utf8paramTrim($r, "port");
+my $dbname = utf8paramTrim($r, "dbname");
+my $title = utf8paramTrim($r, "title");
 
 if ((!defined $port || $port eq "") &&
     (defined $protocol && $protocol ne "")) {
     # Port-guessing based on defaults for each protocol
     $port = $protocol eq "Z39.50" ? 210 : 80;
     warn "guessed port $port";
-    $r->param(port => $port);
+    &utf8param($r, port => $port);
 }
 
 my $newid;
 if (defined $protocol && $protocol ne "" &&
     defined $host && $host ne "" &&
     defined $port && $port ne "" &&
+    defined $title && $title ne "" &&
     defined $dbname && $dbname ne "") {
     $newid = irspy_make_identifier($protocol, $host, $port, $dbname);
 }
@@ -66,14 +68,24 @@ if (!defined $id) {
     } elsif (!defined $newid) {
        # Tried to create new record but data is insufficient
        print qq[<p class="error">
-               Please specify protocol, host, port and database name.</p>\n];
+               Please specify title, protocol, host, port and database name.</p>\n];
        undef $update;
+    } elsif ($host !~ /^\w+\.[\w.]*\w$/i) {
+       print qq[<p class="error">
+               This host name is not valid.</p>\n];
+       undef $update;
+       sleep 25;
+    } elsif ($port !~ /^\d*$/i) {
+       print qq[<p class="error">
+               This port number is not valid.</p>\n];
+       undef $update;
+       sleep 25;
     } else {
        # 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 $qnewid = xml_encode(uri_escape($newid));
+           my $qnewid = xml_encode(uri_escape_utf8($newid));
            print qq[<p class="error">
                There is already
                <a href='?op=edit&amp;id=$newid'>a record</a>
@@ -330,9 +342,9 @@ my @fields =
 # Update record with submitted data
 my %fieldsByKey = map { ( $_->[0], $_) } @fields;
 my %data;
-foreach my $key ($r->param()) {
+foreach my $key (&utf8param($r)) {
     next if grep { $key eq $_ } qw(op id update);
-    $data{$key} = utf8param($r, $key);
+    $data{$key} = trimField( utf8param($r, $key) );
 }
 my @changedFields = modify_xml_document($xc, \%fieldsByKey, \%data);
 if ($update && @changedFields) {
@@ -342,7 +354,7 @@ 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(),
+    ZOOM::IRSpy::_rewrite_zeerex_record($conn, $xc->getContextNode(),
                                        $op eq "edit" ? $id : undef);
 }