Adding a user-feedback form to your webace records

"_Submit comment/correction"

Note: This feature was added to webace by Doug Bigwood in early 1997. It has languished largely unused since then, perhaps for lack of documentation. Thanks to Christophe Caron for writing up these instructions.

- Dave Matthews

From: (Christophe Caron)
Subject: Allow user to add comments to a database via markup rule
Date: 7 Apr 1998 09:38:36 GMT


In webace the clickable "[View graphic]" at the top of html
pages does not work correctly in some cases.

The idea is to use this "feature":) to add a new functionnality:
 Allow user to add comments to a database via markup rule

This is already used in graingenes database at NAL, and mirror site at
Jouy-en-Josas (France).

You could look at some graingenes sites :

by selecting an class/object and click  on _Submit comment/correction

There are 4 steps to add this:

1) Add this rule to your, in your '$ACEDB/wspec' directory.

# add comment in webace
'keys' => sub {my ($node, $root) = @_;
                return ($node->{db},$node->{cl},$node->{va});

2)Add to standard_urls , in 'acelib' directory.

edit:_Submit comment/correction:$main::baseURL/cgi-bin/comment?db=$keys[0]&class=$keys[1]&object=$keys[2]

3)Copy the script 'comment' to your cgi-bin directory
and adapt it (email address(in $send_to variable), perl path, url
path, hostname, database name....) to your site.

4)Add the procedure prettyPrint2 to your

sub prettyPrint2 { # SB-S 6 June 1997
    # returns an array of strings, with the object formatted nicely
    # NOT in .ace format
    my ($obj,$past_root) = @_;
    my ($nodeText, @output);
    unless ($past_root) {
        @output = ("$obj->{'cl'} : \"$obj->{'va'}\"");
        foreach $next ($obj->right) {
            push (@output, &prettyPrint2($next, 1));
    } else {
        $nodeText = $obj->{'ti'} || $obj->{'va'};
        if ($obj->{'ty'} ne 'tg') { #new
            $nodeText =~ s/\"/\\"/g; # " #new
            $nodeText = "\"".$nodeText."\""; #new
        if ($obj->right) {
            my ($already);
            foreach $next ($obj->right) {
                my ($line);
                foreach $line (&prettyPrint2($next, 1)) {
                    push (@output, $nodeText . ' ' . $line);
                    unless ($already) {
                        $nodeText =~ tr// /c;
                        $already = 1;
        } else {
            @output = ($nodeText);
    return @output;


And test it....


Thanks to Dave Matthews, Jon Krainak, Matthew Couchman, Thierry
Hotelier for their help on ACEDB/Webace.

= Christophe Caron	C.T.I.S.
= I.N.R.A.		Domaine de Vilvert		=
= 78352 Jouy-en-Josas	email :	=