1 <% include("/elements/header.html",'Map tables') %>
4 var gSafeOnload = new Array();
5 var gSafeOnsubmit = new Array();
6 window.onload = SafeOnload;
7 function SafeAddOnLoad(f) {
8 gSafeOnload[gSafeOnload.length] = f;
10 function SafeOnload() {
11 for (var i=0;i<gSafeOnload.length;i++)
14 function SafeAddOnSubmit(f) {
15 gSafeOnsubmit[gSafeOnsubmit.length] = f;
17 function SafeOnsubmit() {
18 for (var i=0;i<gSafeOnsubmit.length;i++)
23 <FORM NAME="OneTrueForm" METHOD="POST" ACTION="meta-import.cgi">
25 % #use DBIx::DBSchema;
26 % my $schema = new_native DBIx::DBSchema
27 % map { $cgi->param($_) } qw( data_source username password );
28 % foreach my $field (qw( data_source username password )) {
30 <INPUT TYPE="hidden" NAME=<% $field %> VALUE="<% $cgi->param($field) %>">
35 % tie %schema, 'Tie::DxHash';
36 % if ( $cgi->param('schema') ) {
37 % my $schema_string = $cgi->param('schema');
39 <INPUT TYPE="hidden" NAME="schema" VALUE="<%$schema_string%>">
41 % %schema = map { /^\s*(\w+)\s*=>\s*(\w+)\s*$/
42 % or die "guru meditation #420: $_";
45 % split( /\n/, $schema_string );
49 % unless ( $cgi->param('magic') ) {
52 <INPUT TYPE="hidden" NAME="magic" VALUE="process">
53 <% hashmaker('schema', [ $schema->tables ],
54 [ grep !/^h_/, dbdef->tables ], ) %>
55 <br><INPUT TYPE="submit" VALUE="done">
59 % } elsif ( $cgi->param('magic') eq 'process' ) {
62 <INPUT TYPE="hidden" NAME="magic" VALUE="process2">
66 % foreach my $table ( keys %schema ) {
68 % my @from_columns = $schema->table($table)->columns;
69 % my @fs_columns = dbdef->table($schema{$table})->columns;
73 <% hashmaker( $table.'__'.$unique{$table}++,
74 \@from_columns => \@fs_columns,
75 $table => $schema{$table}, ) %>
83 <br><INPUT TYPE="submit" VALUE="done">
87 % } elsif ( $cgi->param('magic') eq 'process2' ) {
92 % foreach my $table ( keys %schema ) {
93 % ( my $spaces = $table ) =~ s/./ /g;
94 % print "'$table' => { 'table' => '$schema{$table}',\n".
95 % #(length($table) x ' '). " 'map' => {\n";
96 % "$spaces 'map' => {\n";
97 % my %map = map { /^\s*(\w+)\s*=>\s*(\w+)\s*$/
98 % or die "guru meditation #420: $_";
101 % split( /\n/, $cgi->param($table.'__'.$unique{$table}++) );
102 % foreach ( keys %map ) {
103 % print "$spaces '$_' => '$map{$_}',\n";
105 % print "$spaces },\n";
106 % print "$spaces },\n";
112 % warn "unrecognized magic: ". $cgi->param('magic');
123 % my($name, $from, $to, $labelfrom, $labelto) = @_;
124 % my $fromsize = scalar(@$from);
125 % my $tosize = scalar(@$to);
126 % "<TABLE><TR><TH>$labelfrom</TH><TH>$labelto</TH></TR><TR><TD>".
127 % qq!<SELECT NAME="${name}_from" SIZE=$fromsize>\n!.
128 % join("\n", map { qq!<OPTION VALUE="$_">$_</OPTION>! } sort { $a cmp $b } @$from ).
130 % qq!<INPUT TYPE="button" VALUE="refill" onClick="repack_${name}_from()">!.
132 % qq!<SELECT NAME="${name}_to" SIZE=$tosize>\n!.
133 % join("\n", map { qq!<OPTION VALUE="$_">$_</OPTION>! } sort { $a cmp $b } @$to ).
135 % qq!<INPUT TYPE="button" VALUE="refill" onClick="repack_${name}_to()">!.
137 % '<TR><TD COLSPAN=2>'.
138 % qq!<INPUT TYPE="button" VALUE="map" onClick="toke_$name(this.form)">!.
139 % '</TD></TR><TR><TD COLSPAN=2>'.
140 % qq!<TEXTAREA NAME="$name" COLS=80 ROWS=8></TEXTAREA>!.
141 % '</TD></TR></TABLE>'.
143 % function toke_$name() {
144 % fromObject = document.OneTrueForm.${name}_from;
145 % for (var i=fromObject.options.length-1;i>-1;i--) {
146 % if (fromObject.options[i].selected)
147 % fromname = deleteOption_$name(fromObject,i);
149 % toObject = document.OneTrueForm.${name}_to;
150 % for (var i=toObject.options.length-1;i>-1;i--) {
151 % if (toObject.options[i].selected)
152 % toname = deleteOption_$name(toObject,i);
154 % document.OneTrueForm.$name.value = document.OneTrueForm.$name.value + fromname + ' => ' + toname + '\\n';
156 % function deleteOption_$name(object,index) {
157 % value = object.options[index].value;
158 % object.options[index] = null;
161 % function repack_${name}_from() {
162 % var object = document.OneTrueForm.${name}_from;
163 % object.options.length = 0;
165 % map { "addOption_$name(object, '$_');\n" }
166 % ( sort { $a cmp $b } @$from ) ). "
168 % function repack_${name}_to() {
169 % var object = document.OneTrueForm.${name}_to;
170 % object.options.length = 0;
172 % map { "addOption_$name(object, '$_');\n" }
173 % ( sort { $a cmp $b } @$to ) ). "
175 % function addOption_$name(object,value) {
176 % var length = object.length;
177 % object.options[length] = new Option(value, value, false, false);
186 #there's no ACL for this... haven't used in ages
187 #make XSS-safe if this is used for more than just admins to import data....
188 die 'meta-import not enabled; remove this if you want to use it';