2 <%= header('Map tables') %>
5 var gSafeOnload = new Array();
6 var gSafeOnsubmit = new Array();
7 window.onload = SafeOnload;
8 function SafeAddOnLoad(f) {
9 gSafeOnload[gSafeOnload.length] = f;
11 function SafeOnload() {
12 for (var i=0;i<gSafeOnload.length;i++)
15 function SafeAddOnSubmit(f) {
16 gSafeOnsubmit[gSafeOnsubmit.length] = f;
18 function SafeOnsubmit() {
19 for (var i=0;i<gSafeOnsubmit.length;i++)
24 <FORM NAME="OneTrueForm" METHOD="POST" ACTION="meta-import.cgi">
28 my $schema = new_native DBIx::DBSchema
29 map { $cgi->param($_) } qw( data_source username password );
30 foreach my $field (qw( data_source username password )) { %>
31 <INPUT TYPE="hidden" NAME=<%= $field %> VALUE="<%= $cgi->param($field) %>">
36 tie %schema, 'Tie::DxHash';
37 if ( $cgi->param('schema') ) {
38 my $schema_string = $cgi->param('schema');
39 %> <INPUT TYPE="hidden" NAME="schema" VALUE="<%=$schema_string%>"> <%
40 %schema = map { /^\s*(\w+)\s*=>\s*(\w+)\s*$/
41 or die "guru meditation #420: $_";
44 split( /\n/, $schema_string );
48 unless ( $cgi->param('magic') ) { %>
50 <INPUT TYPE="hidden" NAME="magic" VALUE="process">
51 <%= hashmaker('schema', [ $schema->tables ],
52 [ grep !/^h_/, dbdef->tables ], ) %>
53 <br><INPUT TYPE="submit" VALUE="done">
57 } elsif ( $cgi->param('magic') eq 'process' ) { %>
59 <INPUT TYPE="hidden" NAME="magic" VALUE="process2">
63 foreach my $table ( keys %schema ) {
65 my @from_columns = $schema->table($table)->columns;
66 my @fs_columns = dbdef->table($schema{$table})->columns;
69 <%= hashmaker( $table.'__'.$unique{$table}++,
70 \@from_columns => \@fs_columns,
71 $table => $schema{$table}, ) %>
78 <br><INPUT TYPE="submit" VALUE="done">
82 } elsif ( $cgi->param('magic') eq 'process2' ) {
87 foreach my $table ( keys %schema ) {
88 ( my $spaces = $table ) =~ s/./ /g;
89 print "'$table' => { 'table' => '$schema{$table}',\n".
90 #(length($table) x ' '). " 'map' => {\n";
91 "$spaces 'map' => {\n";
92 my %map = map { /^\s*(\w+)\s*=>\s*(\w+)\s*$/
93 or die "guru meditation #420: $_";
96 split( /\n/, $cgi->param($table.'__'.$unique{$table}++) );
97 foreach ( keys %map ) {
98 print "$spaces '$_' => '$map{$_}',\n";
100 print "$spaces },\n";
101 print "$spaces },\n";
107 warn "unrecognized magic: ". $cgi->param('magic');
118 my($name, $from, $to, $labelfrom, $labelto) = @_;
119 my $fromsize = scalar(@$from);
120 my $tosize = scalar(@$to);
121 "<TABLE><TR><TH>$labelfrom</TH><TH>$labelto</TH></TR><TR><TD>".
122 qq!<SELECT NAME="${name}_from" SIZE=$fromsize>\n!.
123 join("\n", map { qq!<OPTION VALUE="$_">$_</OPTION>! } sort { $a cmp $b } @$from ).
125 qq!<INPUT TYPE="button" VALUE="refill" onClick="repack_${name}_from()">!.
127 qq!<SELECT NAME="${name}_to" SIZE=$tosize>\n!.
128 join("\n", map { qq!<OPTION VALUE="$_">$_</OPTION>! } sort { $a cmp $b } @$to ).
130 qq!<INPUT TYPE="button" VALUE="refill" onClick="repack_${name}_to()">!.
132 '<TR><TD COLSPAN=2>'.
133 qq!<INPUT TYPE="button" VALUE="map" onClick="toke_$name(this.form)">!.
134 '</TD></TR><TR><TD COLSPAN=2>'.
135 qq!<TEXTAREA NAME="$name" COLS=80 ROWS=8></TEXTAREA>!.
136 '</TD></TR></TABLE>'.
138 function toke_$name() {
139 fromObject = document.OneTrueForm.${name}_from;
140 for (var i=fromObject.options.length-1;i>-1;i--) {
141 if (fromObject.options[i].selected)
142 fromname = deleteOption_$name(fromObject,i);
144 toObject = document.OneTrueForm.${name}_to;
145 for (var i=toObject.options.length-1;i>-1;i--) {
146 if (toObject.options[i].selected)
147 toname = deleteOption_$name(toObject,i);
149 document.OneTrueForm.$name.value = document.OneTrueForm.$name.value + fromname + ' => ' + toname + '\\n';
151 function deleteOption_$name(object,index) {
152 value = object.options[index].value;
153 object.options[index] = null;
156 function repack_${name}_from() {
157 var object = document.OneTrueForm.${name}_from;
158 object.options.length = 0;
160 map { "addOption_$name(object, '$_');\n" }
161 ( sort { $a cmp $b } @$from ) ). "
163 function repack_${name}_to() {
164 var object = document.OneTrueForm.${name}_to;
165 object.options.length = 0;
167 map { "addOption_$name(object, '$_');\n" }
168 ( sort { $a cmp $b } @$to ) ). "
170 function addOption_$name(object,value) {
171 var length = object.length;
172 object.options[length] = new Option(value, value, false, false);