1 # Copyright 2002-2007 Interchange Development Group and others
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 2 of the License, or
6 # (at your option) any later version. See the LICENSE file for details.
8 # $Id: row_edit.coretag,v 1.12 2007-03-30 23:40:54 pajamian Exp $
10 UserTag row-edit Order key table size columns
11 UserTag row-edit HasEndTag
12 UserTag row-edit addAttr
13 UserTag row-edit Interpolate 1
14 UserTag row-edit Version $Revision: 1.12 $
15 UserTag row-edit Routine <<EOR
17 my ($key,$table,$size,$columns,$opt) = @_;
18 use vars qw/$CGI $Values $Variable/;
19 #::logDebug("row_edit options=" . ::uneval($opt));
20 $table = $table || $CGI::values{mv_data_table} || return "BLANK DB";
21 my $db = ::database_exists_ref($table);
22 my $mtab = $::Variable->{UI_META_TABLE} || 'mv_metadata';
23 my $mdb = ::database_exists_ref($mtab);
24 $opt->{view} ||= $CGI->{ui_meta_view};
26 my $view = Vend::Table::Editor::meta_record($table, $opt->{view}) || {};
32 $tf_extra = " $opt->{extra}";
34 if($opt->{meta_extra}) {
35 $tm_extra .= " $opt->{meta_extra}";
37 if($opt->{textarea_extra}) {
38 $tm_extra .= " $opt->{textarea_extra}";
41 $ta_extra ||= $tf_extra;
42 $tm_extra ||= $tf_extra;
46 $prependor = $opt->{pointer};
47 $prependor =~ s/\D+//;
48 $prependor = $prependor ? $prependor . '_' : '';
49 #::logDebug("setting prependor to $prependor");
54 $appendor = "__$opt->{stacker}";
55 #::logDebug("setting appendor to $appendor");
57 return errmsg("non-existent table '%s' for row-edit", $table)
61 my $acl = UI::Primitive::get_ui_table_acl();
67 $bad = ! $db->record_exists($key);
68 $bad = errmsg('DELETED') if $bad;
70 $bad = errmsg('ERROR') if $@;
72 # Do nothing, we are already bad
75 $bad = errmsg('Not available')
76 if ! UI::Primitive::ui_acl_atom($acl, 'keys', $key);
79 $record = $db->row_hash($key);
87 if($columns ||= $view->{spread_cols} || $view->{attribute}) {
88 @cols = split /[\s,\0]+/, $columns;
93 @cols = grep defined $col{$_}, @cols;
96 @cols = $db->columns();
100 @cols = UI::Primitive::ui_acl_grep( $acl, 'fields', @cols);
103 # See if we have a textarea reference
105 if($opt->{textarea}) {
106 my @tmp = split /[\s,\0]+/, $opt->{textarea};
114 my $meta = $CGI->{ui_no_meta_display} ? '' : $view->{spread_meta};
118 my @metas = grep /\S/, split /[\0,\s]+/, $meta;
119 @do_meta{@metas} = @metas;
122 if($view->{spread_textarea}) {
123 my @tas = grep /\S/, split /[\0,\s]+/, $view->{spread_textarea};
128 $size = $size || $view->{spread_width} || $view->{width} || 12;
131 $out .= "<TD$tf_extra>$bad</TD>";
134 elsif($key or $opt->{blank}) {
136 my $text = $opt->{blank} ? '' : $record->{$_} || '';
139 my $tmp = Vend::Tags->display( {
142 name => "$prependor$_$appendor",
144 template => ' $WIDGET$ ',
145 specific => $opt->{ui_meta_specific},
148 $out .= "<TD$tm_extra>$tmp</TD>";
152 my $rows = $opt->{height} || 4;
153 HTML::Entities::encode($text, $ESCAPE_CHARS::std);
155 <TD$ta_extra><TEXTAREA NAME="$prependor$_$appendor" COLS="$size" ROWS="$rows">$text</TEXTAREA>$msg</TD>
159 $text =~ s/"/"/g;
161 <TD$tf_extra><INPUT NAME="$prependor$_$appendor" SIZE=$size VALUE="$text">$msg</TD>
169 <TH ALIGN=left>$_</TH>