Changeset 139

Show
Ignore:
Timestamp:
10/09/05 00:04:55 (3 years ago)
Author:
ogawa
Message:

Show "your recommended setting" after completing conversion process.
Restructure mt-db-convert31.cgi as same as mt-db-convert.cgi.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • mt-db-convert/trunk/mt-db-convert.cgi

    r137 r139  
    6767    } 
    6868 
     69    print "<pre>\n\n"; 
    6970    require MT::Object; 
    7071    my $type = ($dst_cfg->{ObjectDriver} =~ /^DBI::(.*)$/) ? $1 : ''; 
     
    8081        push @stmts, MT::Upgrade->check_class($_); 
    8182    } 
    82     print "<pre>\n\n"; 
    8383    print "Loading database schema...\n\n"; 
    8484    MT::Upgrade->do_upgrade(Install => 1); 
     
    207207 
    208208HTML 
     209    print "Your recommended setting\n-------------------------------------\n"; 
     210    foreach (@DBSPECS) { 
     211        next unless $src_cfg->{$_}; 
     212        if (($src_cfg->{ObjectDriver} eq 'DBM' && $_ ne 'ObjectDriver') || 
     213            ($src_cfg->{ObjectDriver} ne 'DBM' && $_ ne 'DataSource')) { 
     214            print "# $_ $src_cfg->{$_}\n"; 
     215        } 
     216    } 
     217    foreach (@DBSPECS) { 
     218        next unless $dst_cfg->{$_}; 
     219        if (($dst_cfg->{ObjectDriver} eq 'DBM' && $_ ne 'ObjectDriver') || 
     220            ($dst_cfg->{ObjectDriver} ne 'DBM' && $_ ne 'DataSource')) { 
     221            print "$_ $dst_cfg->{$_}\n"; 
     222        } 
     223    } 
     224    print "-------------------------------------\n"; 
    209225} 
    210226 
  • mt-db-convert/trunk/mt-db-convert31.cgi

    • Property svn:keywords set to Author Date Rev
    r133 r139  
    22# mt-db-convert.cgi: converting your MT data between multiple db engines 
    33# This is a derived work from the following: 
    4 
     4 
    55# Copyright 2001-2005 Six Apart. This code cannot be redistributed without 
    66# permission from www.movabletype.org. 
     
    88# $Id: mt-db2sql.cgi 12446 2005-05-25 21:32:39Z bchoate $ 
    99use strict; 
    10  
    11 my $VERSION = '0.12'; 
    1210 
    1311my($MT_DIR); 
     
    2422local $| = 1; 
    2523print "Content-Type: text/html\n\n"; 
    26 print <<HTML; 
    27 <html> 
    28 <head><title>mt-db-convert $VERSION: Converting your MT data</title></head> 
    29 <body> 
    30 <p><strong>mt-db-convert $VERSION: Coverting your MT data between DB engines</strong></p> 
    31 HTML 
     24print show_header(); 
    3225 
    3326my @CLASSES = qw( MT::Author MT::Blog MT::Category MT::Comment MT::Entry 
     
    3932 
    4033my @DBSPECS = qw( DataSource ObjectDriver Database DBUser DBHost DBPassword ); 
    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 { 
     34my ($src_cfg, $dst_cfg); 
    12735 
    12836eval { 
    12937    local $SIG{__WARN__} = sub { print "**** WARNING: $_[0]\n" }; 
    13038 
     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"; 
    13166    require MT::Object; 
    132     my $type = ($dst{ObjectDriver} =~ /^DBI::(.*)$/) ? $1 : ''; 
     67    my $type = ($dst_cfg->{ObjectDriver} =~ /^DBI::(.*)$/) ? $1 : ''; 
    13368    if ($type) { 
    13469    # set dst driver 
    135     $cfg->set($_, $dst{$_}) foreach (@DBSPECS); 
    136     MT::Object->set_driver($dst{ObjectDriver}) 
     70    $cfg->set($_, $dst_cfg->{$_}) foreach (@DBSPECS); 
     71    MT::Object->set_driver($dst_cfg->{ObjectDriver}) 
    13772        or die MT::ObjectDriver->errstr; 
    13873    my $dbh = MT::Object->driver->{dbh}; 
    139     $dbh->begin_work if $type eq 'sqlite'; 
    14074    my $schema = File::Spec->catfile($MT_DIR, 'schemas', $type . '.dump'); 
    14175    open FH, $schema or die "Can't open schema file '$schema': $!"; 
     
    14478    close FH; 
    14579    my @stmts = split /;/, $ddl; 
    146     print "<p>Loading database schema...</p>\n\n"; 
     80    print "Loading database schema...\n\n"; 
    14781    for my $stmt (@stmts) { 
    14882        $stmt =~ s!^\s*!!; 
     
    15185        $dbh->do($stmt) or die $dbh->errstr; 
    15286    } 
    153     $dbh->commit if $type eq 'sqlite'; 
    15487    } 
    15588 
     
    15790    my %ids; 
    15891 
     92    print "Loading data...\n"; 
    15993    for my $class (@CLASSES) { 
    160         print "<p>Dumping $class:<br />\n"; 
    161  
    162         # set source driver 
    163         $cfg->set($_, $src{$_}) foreach (@DBSPECS); 
    164         MT::Object->set_driver($src{ObjectDriver}); 
    165  
     94        print $class, "\n"; 
     95        # set src driver 
     96        $cfg->set($_, $src_cfg->{$_}) foreach (@DBSPECS); 
     97        MT::Object->set_driver($src_cfg->{ObjectDriver}); 
    16698        eval "use $class"; 
    16799        my $iter = $class->load_iter; 
     
    169101        my %names; 
    170102        my %cat_parent; 
    171  
    172         # set dst driver 
    173         $cfg->set($_, $dst{$_}) foreach (@DBSPECS); 
    174         MT::Object->set_driver($dst{ObjectDriver}); 
    175         MT::Object->driver->{dbh}->begin_work if $type eq 'sqlite'; 
    176  
    177         my $i = 0; 
     103        my $i = 0; 
     104 
     105        # set dst driver 
     106        $cfg->set($_, $dst_cfg->{$_}) foreach (@DBSPECS); 
     107        MT::Object->set_driver($dst_cfg->{ObjectDriver}); 
     108        MT::Object->driver->{dbh}->begin_work if $type eq 'sqlite'; 
    178109        while (my $obj = $iter->()) { 
    179110            $ids{$class} = $obj->id 
     
    224155                    if defined $obj->allow_comments && $obj->allow_comments eq ''; 
    225156            } elsif ($class eq 'MT::Blog') { 
    226                $obj->touch(); # for updating children_modified_on field 
     157                $obj->touch(); # for updating children_modified_on field 
    227158            } 
    228159 
    229             $i++; 
    230160            $obj->save 
    231161                or die $obj->errstr; 
    232             print "."; 
    233             $i % 10 or print " "; 
    234             $i % 100 or print "<br />\n"; 
     162            $i++; 
     163            print '.' . (($i % 10) ? '' : ' ') . (($i % 100) ? '' : "\n"); 
    235164        } 
    236165 
     
    242171        } 
    243172 
    244        print "</p>\n\n"; 
    245        MT::Object->driver->{dbh}->commit if $type eq 'sqlite'; 
     173        print "\n($i objects saved.)\n\n"; 
     174        MT::Object->driver->{dbh}->commit if $type eq 'sqlite'; 
    246175    } 
    247176 
     
    260189if ($@) { 
    261190    print <<HTML; 
    262 <p>An error occurred while loading data: <br /> 
    263 $@</p> 
     191 
     192An error occurred while loading data: 
     193 
     194$@ 
     195 
    264196HTML 
    265197} else { 
    266198    print <<HTML; 
    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 
     200Done copying data from $src_cfg->{ObjectDriver} to $dst_cfg->{ObjectDriver}! All went well. 
     201 
     202HTML 
     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 
     221print "</pre>\n"; 
     222print show_footer(); 
     223 
     224sub 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> 
     237HTML 
     238
     239 
     240sub 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> 
     305HTML 
     306
     307 
     308sub 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> 
     314HTML 
     315