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) %>">
35 if ( $cgi->param('schema') ) {
36 my $schema_string = $cgi->param('schema');
37 %> <INPUT TYPE="hidden" NAME="schema" VALUE="<%=$schema_string%>"> <%
38 %schema = map { /^\s*(\w+)\s*=>\s*(\w+)\s*$/
39 or die "guru meditation #420: $_";
42 split( /\n/, $schema_string );
46 unless ( $cgi->param('magic') ) { %>
48 <INPUT TYPE="hidden" NAME="magic" VALUE="process">
49 <%= hashmaker('schema', [ $schema->tables ],
50 [ grep !/^h_/, dbdef->tables ], ) %>
51 <br><INPUT TYPE="submit" VALUE="done">
55 } elsif ( $cgi->param('magic') eq 'process' ) { %>
57 <INPUT TYPE="hidden" NAME="magic" VALUE="process2">
60 foreach my $table ( keys %schema ) {
62 my @from_columns = $schema->table($table)->columns;
63 my @fs_columns = dbdef->table($schema{$table})->columns;
66 <%= hashmaker($table, \@from_columns => \@fs_columns,
67 $table => $schema{$table}, ) %>
74 <br><INPUT TYPE="submit" VALUE="done">
78 } elsif ( $cgi->param('magic') eq 'process2' ) {
82 foreach my $table ( keys %schema ) {
83 ( my $spaces = $table ) =~ s/./ /g;
84 print "'$table' => { 'table' => '$schema{$table}',\n".
85 #(length($table) x ' '). " 'map' => {\n";
86 "$spaces 'map' => {\n";
87 my %map = map { /^\s*(\w+)\s*=>\s*(\w+)\s*$/
88 or die "guru meditation #420: $_";
91 split( /\n/, $cgi->param($table) );
92 foreach ( keys %map ) {
93 print "$spaces '$_' => '$map{$_}',\n";
102 warn "unrecognized magic: ". $cgi->param('magic');
113 my($name, $from, $to, $labelfrom, $labelto) = @_;
114 $fromsize = scalar(@$from);
115 $tosize = scalar(@$to);
116 "<TABLE><TR><TH>$labelfrom</TH><TH>$labelto</TH></TR><TR><TD>".
117 qq!<SELECT NAME="${name}_from" SIZE=$fromsize>\n!.
118 join("\n", map { qq!<OPTION VALUE="$_">$_</OPTION>! } sort { $a cmp $b } @$from ).
121 qq!<SELECT NAME="${name}_to" SIZE=$tosize>\n!.
122 join("\n", map { qq!<OPTION VALUE="$_">$_</OPTION>! } sort { $a cmp $b } @$to ).
125 '<TR><TD COLSPAN=2>'.
126 qq!<INPUT TYPE="button" VALUE="map" onClick="toke_$name(this.form)">!.
127 '</TD></TR><TR><TD COLSPAN=2>'.
128 qq!<TEXTAREA NAME="$name" COLS=80 ROWS=8></TEXTAREA>!.
129 '</TD></TR></TABLE>'.
131 function toke_$name() {
132 fromObject = document.OneTrueForm.${name}_from;
133 for (var i=fromObject.options.length-1;i>-1;i--) {
134 if (fromObject.options[i].selected)
135 fromname = deleteOption_$name(fromObject,i);
137 toObject = document.OneTrueForm.${name}_to;
138 for (var i=toObject.options.length-1;i>-1;i--) {
139 if (toObject.options[i].selected)
140 toname = deleteOption_$name(toObject,i);
142 document.OneTrueForm.$name.value = document.OneTrueForm.$name.value + fromname + ' => ' + toname + '\\n';
144 function deleteOption_$name(object,index) {
145 value = object.options[index].value;
146 object.options[index] = null;