row-edit —
Attribute | Pos. | Req. | Default | Description |
---|---|---|---|---|
key | Yes | |||
table | Yes | |||
size | Yes | |||
columns | Yes | |||
view | ||||
extra | ||||
meta_extra | ||||
textarea_extra | ||||
pointer | ||||
stacker | ||||
textarea | ||||
blank | ||||
ui_meta_specific | ||||
height | ||||
interpolate | 1 | interpolate input? | ||
reparse | 1 | interpolate output? | ||
hide | 0 | Hide the tag return value? |
This tag appears to be affected by, or affects, the following:
Catalog Variables: UI_META_TABLE
Interchange 5.9.0:
Source: code/UI_Tag/row_edit.coretag
Lines: 176
# Copyright 2002-2007 Interchange Development Group and others # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. See the LICENSE file for details. # # $Id: row_edit.coretag,v 1.12 2007-03-30 23:40:54 pajamian Exp $ UserTag row-edit Order key table size columns UserTag row-edit HasEndTag UserTag row-edit addAttr UserTag row-edit Interpolate 1 UserTag row-edit Version $Revision: 1.12 $ UserTag row-edit Routine <<EOR sub { my ($key,$table,$size,$columns,$opt) = @_; use vars qw/$CGI $Values $Variable/; #::logDebug("row_edit options=" . ::uneval($opt)); $table = $table || $CGI::values{mv_data_table} || return "BLANK DB"; my $db = ::database_exists_ref($table); my $mtab = $::Variable->{UI_META_TABLE} || 'mv_metadata'; my $mdb = ::database_exists_ref($mtab); $opt->{view} ||= $CGI->{ui_meta_view}; my $view = Vend::Table::Editor::meta_record($table, $opt->{view}) || {}; my $tm_extra = ''; my $ta_extra = ''; my $tf_extra = ''; if($opt->{extra}) { $tf_extra = " $opt->{extra}"; } if($opt->{meta_extra}) { $tm_extra .= " $opt->{meta_extra}"; } if($opt->{textarea_extra}) { $tm_extra .= " $opt->{textarea_extra}"; } $ta_extra ||= $tf_extra; $tm_extra ||= $tf_extra; my $prependor = ''; if($opt->{pointer}) { $prependor = $opt->{pointer}; $prependor =~ s/\D+//; $prependor = $prependor ? $prependor . '_' : ''; #::logDebug("setting prependor to $prependor"); } my $appendor = ''; if($opt->{stacker}) { $appendor = "__$opt->{stacker}"; #::logDebug("setting appendor to $appendor"); } return errmsg("non-existent table '%s' for row-edit", $table) unless $db; $db = $db->ref(); my $acl = UI::Primitive::get_ui_table_acl(); my $record; my $bad; if ($key) { eval { $bad = ! $db->record_exists($key); $bad = errmsg('DELETED') if $bad; }; $bad = errmsg('ERROR') if $@; if($bad) { # Do nothing, we are already bad } elsif($acl) { $bad = errmsg('Not available') if ! UI::Primitive::ui_acl_atom($acl, 'keys', $key); } else { $record = $db->row_hash($key); } } $record ||= {}; my @cols; if($columns ||= $view->{spread_cols} || $view->{attribute}) { @cols = split /[\s,\0]+/, $columns; my %col; for($db->columns()) { $col{$_} = 1; } @cols = grep defined $col{$_}, @cols; } else { @cols = $db->columns(); } if($acl) { @cols = UI::Primitive::ui_acl_grep( $acl, 'fields', @cols); } # See if we have a textarea reference my %ta; if($opt->{textarea}) { my @tmp = split /[\s,\0]+/, $opt->{textarea}; for(@tmp) { $ta{$_} = 1; } } my $out = ''; my $meta = $CGI->{ui_no_meta_display} ? '' : $view->{spread_meta}; my %do_ta; my %do_meta; if($meta) { my @metas = grep /\S/, split /[\0,\s]+/, $meta; @do_meta{@metas} = @metas; } if($view->{spread_textarea}) { my @tas = grep /\S/, split /[\0,\s]+/, $view->{spread_textarea}; @do_ta{@tas} = @tas; } my $tmp; $size = $size || $view->{spread_width} || $view->{width} || 12; if($bad) { for(@cols) { $out .= "<TD$tf_extra>$bad</TD>"; } } elsif($key or $opt->{blank}) { for(@cols) { my $text = $opt->{blank} ? '' : $record->{$_} || ''; my $msg = ''; if($do_meta{$_}) { my $tmp = Vend::Tags->display( { table => $table, column => $_, name => "$prependor$_$appendor", value => $text, template => ' $WIDGET$ ', specific => $opt->{ui_meta_specific}, key => $key, }); $out .= "<TD$tm_extra>$tmp</TD>"; next; } elsif($do_ta{$_}) { my $rows = $opt->{height} || 4; HTML::Entities::encode($text, $ESCAPE_CHARS::std); $out .= <<EOF; <TD$ta_extra><TEXTAREA NAME="$prependor$_$appendor" COLS="$size" ROWS="$rows">$text \ </TEXTAREA>$msg</TD> EOF } else { $text =~ s/"/"/g; $out .= <<EOF; <TD$tf_extra><INPUT NAME="$prependor$_$appendor" SIZE=$size VALUE="$text">$msg</TD> EOF } } } else { for(@cols) { $out .= <<EOF; <TH ALIGN=left>$_</TH> EOF } } return $out; } EOR