* Don't autovifivy @fields array entries.
[interchange.git] / code / UI_Tag / return_to.coretag
1 # Copyright 2002-2007 Interchange Development Group and others
2
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.
7
8 # $Id: return_to.coretag,v 1.4 2007-03-30 23:40:54 pajamian Exp $
9
10 UserTag return_to Order    type table_hack
11 UserTag return_to addAttr 
12 UserTag return_to Version  $Revision: 1.4 $
13 UserTag return_to Routine  <<EOR
14 sub {
15         use vars qw/$Tag/;
16     my ($type, $tablehack, $opt) = @_;
17
18         $type = 'form' unless $type;
19
20         my ($page, @args) = split /\0/, $CGI::values{ui_return_to};
21         if($CGI::values{ui_target}) {
22                 push @args, "ui_target=$CGI::values{ui_target}";
23         }
24         my $out = '';
25         if ($opt->{page}) {
26                 $page = $opt->{page};
27         }
28
29                         
30         my $extra;
31         if($tablehack) {
32                 my $found;
33                 for (@args) {
34                         if(s/^mv_data_table=(.*)//) {
35                                 $extra = "mv_return_table=$1\n";
36                         }
37                         elsif (s/^(ui|mv)_return_table=//) {
38                                 $found = "mv_return_table=$_\n";
39                         }
40                 }
41                 $extra = $found if $found;
42         }
43
44         if($type eq 'click') {
45                 $out .= qq{mv_nextpage=$page\n} if $page;
46                 for(@args) {
47                         my ($k, $v) = split /\s*=\s*/, $_, 2;
48                         next unless length $k;
49                         next if $k =~ /$opt->{exclude}/;
50                         $v =~ s/__NULL__/\0/g;
51                         $out .= qq{$k=$v\n};
52                 }
53                 if($opt->{stack} or $CGI::values{ui_return_stack}) {
54                         $type = 'formlink';
55                 }
56                 else {
57                         $type = 'done';
58                         $out .= "ui_return_to=\n";
59                 }
60         }
61
62         if($type eq 'formlink') {
63                 $page = $Global::Variable->{MV_PAGE} if ! $page;
64                 $out .= qq{ui_return_to=$page\n};
65                 for(@args) {
66                         tr/\n/\r/;
67                         $out .= qq{ui_return_to=$_\n}
68                 }
69         }
70         elsif($type eq 'url') {
71                 $page = $Global::Variable->{MV_PAGE} if ! $page;
72                 $out .= $Tag->area( {
73                                                                 href => $page,
74                                                                 form => join("\n", @args),
75                                                         });
76         }
77         elsif ($type eq 'form') {
78                 $page = $Global::Variable->{MV_PAGE} if ! $page;
79                 $out .= qq{<INPUT TYPE=hidden NAME=ui_return_to VALUE="$page">\n};
80                 for(@args) {
81                         s/"/&quot;/g;
82                         $out .= qq{<INPUT TYPE=hidden NAME=ui_return_to VALUE="$_">\n}
83                 }
84         }
85         elsif ($type eq 'regen') {
86                 $page = $Global::Variable->{MV_PAGE} if ! $page;
87                 $out .= qq{<INPUT TYPE=hidden NAME=ui_return_to VALUE="ui_return_to=$page">\n};
88                 for(@args) {
89                         s/"/&quot;/g;
90                         $out .= qq{<INPUT TYPE=hidden NAME=ui_return_to VALUE="ui_return_to=$_">\n}
91                 }
92         }
93
94         $out .= $extra if $extra;
95
96     $::Scratch->{ui_location} = $Tag->area({
97                                     href => $page,
98                                     form => join "\n", @args,
99                                 })
100                 if $opt->{scratch};
101     return $out;
102 }
103 EOR