| 41 | | |
|---|
| 42 | | require MT; |
|---|
| 43 | | my $mt = MT->new(Config => $MT_DIR . 'mt.cfg', Directory => $MT_DIR) |
|---|
| 44 | | or die MT->errstr; |
|---|
| 45 | | my $cfg = $mt->{cfg}; |
|---|
| 46 | | |
|---|
| 47 | | use CGI; |
|---|
| 48 | | my $q = CGI->new; |
|---|
| 49 | | |
|---|
| 50 | | my (%src, %dst); |
|---|
| 51 | | foreach (@DBSPECS) { |
|---|
| 52 | | $src{$_} = $q->param('src_' . $_) || ''; |
|---|
| 53 | | $dst{$_} = $q->param('dst_' . $_) || ''; |
|---|
| 54 | | } |
|---|
| 55 | | |
|---|
| 56 | | # If src and dst dbspecs not given |
|---|
| 57 | | if (!$src{ObjectDriver} || ($src{ObjectDriver} eq 'DBM' && !$src{DataSource}) || |
|---|
| 58 | | !$dst{ObjectDriver} || ($dst{ObjectDriver} eq 'DBM' && !$dst{DataSource})) { |
|---|
| 59 | | |
|---|
| 60 | | $src{$_} ||= $cfg->$_() foreach (@DBSPECS); |
|---|
| 61 | | |
|---|
| 62 | | my %src_selected = ('DBM' => '', 'DBI::mysql' => '', 'DBI::postgres' => '', 'DBI::sqlite' => ''); |
|---|
| 63 | | my %dst_selected = ('DBM' => '', 'DBI::mysql' => '', 'DBI::postgres' => '', 'DBI::sqlite' => ''); |
|---|
| 64 | | $src_selected{$src{ObjectDriver}} = 'selected' if $src{ObjectDriver}; |
|---|
| 65 | | $dst_selected{$dst{ObjectDriver}} = 'selected' if $dst{ObjectDriver}; |
|---|
| 66 | | |
|---|
| 67 | | my $script_name = ($0 =~ m$!) ? $1 : 'mt-db-convert.cgi'; |
|---|
| 68 | | |
|---|
| 69 | | print <<HTML; |
|---|
| 70 | | <p>Please fill the following:</p> |
|---|
| 71 | | |
|---|
| 72 | | <form method="post" action="$script_name"> |
|---|
| 73 | | <style>fieldset { width: 40%; float: left; }</style> |
|---|
| 74 | | <fieldset> |
|---|
| 75 | | <legend>Source DB Configuration</legend> |
|---|
| 76 | | <dl> |
|---|
| 77 | | <dt>DataSource: (Required for BerkeleyDB)</dt> |
|---|
| 78 | | <dd><input name="src_DataSource" type="text" value="$src{DataSource}" /></dd> |
|---|
| 79 | | <dt>ObjectDriver:</dt> |
|---|
| 80 | | <dd><select name="src_ObjectDriver"> |
|---|
| 81 | | <option value="">Select a driver</option> |
|---|
| 82 | | <option value="DBM" $src_selected{'DBM'}>BerkeleyDB</option> |
|---|
| 83 | | <option value="DBI::mysql" $src_selected{'DBI::mysql'}>MySQL</option> |
|---|
| 84 | | <option value="DBI::postgres" $src_selected{'DBI::postgres'}>PostgreSQL</option> |
|---|
| 85 | | <option value="DBI::sqlite" $src_selected{'DBI::sqlite'}>SQLite</option> |
|---|
| 86 | | </select></dd> |
|---|
| 87 | | <dt>Database:</dt> |
|---|
| 88 | | <dd><input name="src_Database" type="text" value="$src{Database}" /></dd> |
|---|
| 89 | | <dt>DBUser:</dt> |
|---|
| 90 | | <dd><input name="src_DBUser" type="text" value="$src{DBUser}" /></dd> |
|---|
| 91 | | <dt>DBHost:</dt> |
|---|
| 92 | | <dd><input name="src_DBHost" type="text" value="$src{DBHost}" /></dd> |
|---|
| 93 | | <dt>DBPassword:</dt> |
|---|
| 94 | | <dd><input name="src_DBPassword" type="password" value="" /></dd> |
|---|
| 95 | | </dl> |
|---|
| 96 | | </fieldset> |
|---|
| 97 | | |
|---|
| 98 | | <fieldset> |
|---|
| 99 | | <legend>Destination DB Configuration</legend> |
|---|
| 100 | | <dl> |
|---|
| 101 | | <dt>DataSource: (Required for BerkeleyDB)</dt> |
|---|
| 102 | | <dd><input name="dst_DataSource" type="text" value="$dst{DataSource}" /></dd> |
|---|
| 103 | | <dt>ObjectDriver:</dt> |
|---|
| 104 | | <dd><select name="dst_ObjectDriver"> |
|---|
| 105 | | <option value="">Select a driver</option> |
|---|
| 106 | | <option value="DBM" $dst_selected{'DBM'}>BerkeleyDB</option> |
|---|
| 107 | | <option value="DBI::mysql" $dst_selected{'DBI::mysql'}>MySQL</option> |
|---|
| 108 | | <option value="DBI::postgres" $dst_selected{'DBI::postgres'}>PostgreSQL</option> |
|---|
| 109 | | <option value="DBI::sqlite" $dst_selected{'DBI::sqlite'}>SQLite</option> |
|---|
| 110 | | </select></dd> |
|---|
| 111 | | <dt>Database:</dt> |
|---|
| 112 | | <dd><input name="dst_Database" type="text" value="$dst{Database}" /></dd> |
|---|
| 113 | | <dt>DBUser:</dt> |
|---|
| 114 | | <dd><input name="dst_DBUser" type="text" value="$dst{DBUser}" /></dd> |
|---|
| 115 | | <dt>DBHost:</dt> |
|---|
| 116 | | <dd><input name="dst_DBHost" type="text" value="$dst{DBHost}" /></dd> |
|---|
| 117 | | <dt>DBPassword:</dt> |
|---|
| 118 | | <dd><input name="dst_DBPassword" type="password" value="$dst{DBPassword}" /></dd> |
|---|
| 119 | | </dl> |
|---|
| 120 | | </fieldset> |
|---|
| 121 | | |
|---|
| 122 | | <p style="clear:both;"><input type="submit" value="Convert" /></p> |
|---|
| 123 | | </form> |
|---|
| 124 | | HTML |
|---|
| 125 | | |
|---|
| 126 | | } else { |
|---|
| | 34 | my ($src_cfg, $dst_cfg); |
|---|
| | 39 | require MT; |
|---|
| | 40 | my $mt = MT->new( Config => $MT_DIR . 'mt.cfg', Directory => $MT_DIR ) |
|---|
| | 41 | or die MT->errstr; |
|---|
| | 42 | die "This script is for Movable Type 3.1 or above." |
|---|
| | 43 | unless $mt->version_number >= 3.1; |
|---|
| | 44 | |
|---|
| | 45 | my $cfg = $mt->{cfg}; |
|---|
| | 46 | |
|---|
| | 47 | require CGI; |
|---|
| | 48 | my $q = CGI->new; |
|---|
| | 49 | foreach (@DBSPECS) { |
|---|
| | 50 | $src_cfg->{$_} = $q->param('src_' . $_) || ''; |
|---|
| | 51 | $dst_cfg->{$_} = $q->param('dst_' . $_) || ''; |
|---|
| | 52 | } |
|---|
| | 53 | |
|---|
| | 54 | # if src and dst dbspecs not given |
|---|
| | 55 | if (!$src_cfg->{ObjectDriver} || |
|---|
| | 56 | ($src_cfg->{ObjectDriver} eq 'DBM' && !$src_cfg->{DataSource}) || |
|---|
| | 57 | !$dst_cfg->{ObjectDriver} || |
|---|
| | 58 | ($dst_cfg->{ObjectDriver} eq 'DBM' && !$dst_cfg->{DataSource})) { |
|---|
| | 59 | $src_cfg->{$_} ||= $cfg->$_() || '' foreach (@DBSPECS); |
|---|
| | 60 | print show_form($q->url || 'mt-db-convert.cgi', $src_cfg, $dst_cfg); |
|---|
| | 61 | print show_footer(); |
|---|
| | 62 | exit; |
|---|
| | 63 | } |
|---|
| | 64 | |
|---|
| | 65 | print "<pre>\n\n"; |
|---|
| 267 | | <p>Done copying data from $src{ObjectDriver} to $dst{ObjectDriver}! All went well.</p> |
|---|
| 268 | | HTML |
|---|
| 269 | | } |
|---|
| 270 | | |
|---|
| 271 | | } |
|---|
| 272 | | |
|---|
| 273 | | print "</body>\n</html>\n"; |
|---|
| | 199 | |
|---|
| | 200 | Done copying data from $src_cfg->{ObjectDriver} to $dst_cfg->{ObjectDriver}! All went well. |
|---|
| | 201 | |
|---|
| | 202 | HTML |
|---|
| | 203 | print "Your recommended setting\n-------------------------------------\n"; |
|---|
| | 204 | foreach (@DBSPECS) { |
|---|
| | 205 | next unless $src_cfg->{$_}; |
|---|
| | 206 | if (($src_cfg->{ObjectDriver} eq 'DBM' && $_ ne 'ObjectDriver') || |
|---|
| | 207 | ($src_cfg->{ObjectDriver} ne 'DBM' && $_ ne 'DataSource')) { |
|---|
| | 208 | print "# $_ $src_cfg->{$_}\n"; |
|---|
| | 209 | } |
|---|
| | 210 | } |
|---|
| | 211 | foreach (@DBSPECS) { |
|---|
| | 212 | next unless $dst_cfg->{$_}; |
|---|
| | 213 | if (($dst_cfg->{ObjectDriver} eq 'DBM' && $_ ne 'ObjectDriver') || |
|---|
| | 214 | ($dst_cfg->{ObjectDriver} ne 'DBM' && $_ ne 'DataSource')) { |
|---|
| | 215 | print "$_ $dst_cfg->{$_}\n"; |
|---|
| | 216 | } |
|---|
| | 217 | } |
|---|
| | 218 | print "-------------------------------------\n"; |
|---|
| | 219 | } |
|---|
| | 220 | |
|---|
| | 221 | print "</pre>\n"; |
|---|
| | 222 | print show_footer(); |
|---|
| | 223 | |
|---|
| | 224 | sub show_header { |
|---|
| | 225 | my $html = <<'HTML'; |
|---|
| | 226 | <html> |
|---|
| | 227 | <head> |
|---|
| | 228 | <title>mt-db-convert.cgi: Converting your MT data between DB engines</title> |
|---|
| | 229 | <style type="text/css"> |
|---|
| | 230 | body { font-family: "trebuchet ms", arial, sans-serif; font-size: 90%; } |
|---|
| | 231 | h1 { font-size: 100%; } |
|---|
| | 232 | fieldset { width: 40%; float: left; background: #EEE;} |
|---|
| | 233 | </style> |
|---|
| | 234 | </head> |
|---|
| | 235 | <body> |
|---|
| | 236 | <h1>mt-db-convert.cgi($Rev$): Converting your MT data between DB engines (for MT 3.1)</h1> |
|---|
| | 237 | HTML |
|---|
| | 238 | } |
|---|
| | 239 | |
|---|
| | 240 | sub show_form { |
|---|
| | 241 | my ($name, $src_cfg, $dst_cfg) = @_; |
|---|
| | 242 | my (%src_sel, %dst_sel); |
|---|
| | 243 | for (qw( DBM DBI::mysql DBI::postgres DBI::sqlite )) { |
|---|
| | 244 | $src_sel{$_} = ($_ eq $src_cfg->{ObjectDriver}) ? 'selected' : ''; |
|---|
| | 245 | $dst_sel{$_} = ($_ eq $src_cfg->{ObjectDriver}) ? 'selected' : ''; |
|---|
| | 246 | } |
|---|
| | 247 | my $html = <<HTML; |
|---|
| | 248 | <p>Please fill the following:</p> |
|---|
| | 249 | |
|---|
| | 250 | <form method="post" action="$name"> |
|---|
| | 251 | <fieldset> |
|---|
| | 252 | <legend>Source DB Configuration</legend> |
|---|
| | 253 | <dl> |
|---|
| | 254 | <dt>DataSource: (Required for BerkeleyDB)</dt> |
|---|
| | 255 | <dd><input name="src_DataSource" type="text" value="$src_cfg->{DataSource}" /></dd> |
|---|
| | 256 | <dt>ObjectDriver:</dt> |
|---|
| | 257 | <dd> |
|---|
| | 258 | <select name="src_ObjectDriver"> |
|---|
| | 259 | <option value="">Select a driver</option> |
|---|
| | 260 | <option value="DBM" $src_sel{'DBM'}>BerkeleyDB</option> |
|---|
| | 261 | <option value="DBI::mysql" $src_sel{'DBI::mysql'}>MySQL</option> |
|---|
| | 262 | <option value="DBI::postgres" $src_sel{'DBI::postgres'}>PostgreSQL</option> |
|---|
| | 263 | <option value="DBI::sqlite" $src_sel{'DBI::sqlite'}>SQLite</option> |
|---|
| | 264 | </select> |
|---|
| | 265 | </dd> |
|---|
| | 266 | <dt>Database:</dt> |
|---|
| | 267 | <dd><input name="src_Database" type="text" value="$src_cfg->{Database}" /></dd> |
|---|
| | 268 | <dt>DBUser:</dt> |
|---|
| | 269 | <dd><input name="src_DBUser" type="text" value="$src_cfg->{DBUser}" /></dd> |
|---|
| | 270 | <dt>DBHost:</dt> |
|---|
| | 271 | <dd><input name="src_DBHost" type="text" value="$src_cfg->{DBHost}" /></dd> |
|---|
| | 272 | <dt>DBPassword:</dt> |
|---|
| | 273 | <dd><input name="src_DBPassword" type="password" value="" /></dd> |
|---|
| | 274 | </dl> |
|---|
| | 275 | </fieldset> |
|---|
| | 276 | |
|---|
| | 277 | <fieldset> |
|---|
| | 278 | <legend>Destination DB Configuration</legend> |
|---|
| | 279 | <dl> |
|---|
| | 280 | <dt>DataSource: (Required for BerkeleyDB)</dt> |
|---|
| | 281 | <dd><input name="dst_DataSource" type="text" value="$dst_cfg->{DataSource}" /></dd> |
|---|
| | 282 | <dt>ObjectDriver:</dt> |
|---|
| | 283 | <dd> |
|---|
| | 284 | <select name="dst_ObjectDriver"> |
|---|
| | 285 | <option value="">Select a driver</option> |
|---|
| | 286 | <option value="DBM" $dst_sel{'DBM'}>BerkeleyDB</option> |
|---|
| | 287 | <option value="DBI::mysql" $dst_sel{'DBI::mysql'}>MySQL</option> |
|---|
| | 288 | <option value="DBI::postgres" $dst_sel{'DBI::postgres'}>PostgreSQL</option> |
|---|
| | 289 | <option value="DBI::sqlite" $dst_sel{'DBI::sqlite'}>SQLite</option> |
|---|
| | 290 | </select> |
|---|
| | 291 | </dd> |
|---|
| | 292 | <dt>Database:</dt> |
|---|
| | 293 | <dd><input name="dst_Database" type="text" value="$dst_cfg->{Database}" /></dd> |
|---|
| | 294 | <dt>DBUser:</dt> |
|---|
| | 295 | <dd><input name="dst_DBUser" type="text" value="$dst_cfg->{DBUser}" /></dd> |
|---|
| | 296 | <dt>DBHost:</dt> |
|---|
| | 297 | <dd><input name="dst_DBHost" type="text" value="$dst_cfg->{DBHost}" /></dd> |
|---|
| | 298 | <dt>DBPassword:</dt> |
|---|
| | 299 | <dd><input name="dst_DBPassword" type="password" value="$dst_cfg->{DBPassword}" /></dd> |
|---|
| | 300 | </dl> |
|---|
| | 301 | </fieldset> |
|---|
| | 302 | |
|---|
| | 303 | <p style="clear: both;"><input type="submit" value="Convert" /></p> |
|---|
| | 304 | </form> |
|---|
| | 305 | HTML |
|---|
| | 306 | } |
|---|
| | 307 | |
|---|
| | 308 | sub show_footer { |
|---|
| | 309 | my $html = <<'HTML'; |
|---|
| | 310 | <hr /> |
|---|
| | 311 | <address>Hirotaka Ogawa (<a href="http://as-is.net/blog/">http://as-is.net/blog/</a>)</address> |
|---|
| | 312 | </body> |
|---|
| | 313 | </html> |
|---|
| | 314 | HTML |
|---|
| | 315 | } |
|---|