#!/usr/bin/perl
## cpanel10 - ConvertData.pm                       Copyright(c) 2006 cPanel, Inc.
##                                                           All rights Reserved.
## copyright@cpanel.net                                         http://cpanel.net
## This code is subject to the cPanel license. Unauthorized copying is prohibited

BEGIN { push @INC, '/usr/local/cpanel/perl'; }

package Cpanel::cPAddons::ConvertData;

use strict;
use DBI;

my $user = $main::user;

our %new2old_name_map = (
    'agb'         => 'AdvancedGuestBook',
    'b2evolution' => 'b2evolution',
    'coppermine'  => 'Coppermine',
    'cpsupport'   => 'cPSupport',
    'e107'        => 'e107',
    'geeklog'     => 'Geeklog',
    'mambo'       => 'MamboOpenSource',
    'nucleus'     => 'Nucleus',
    'oscommerce'  => 'osCommerce',
    'phpbb'       => 'phpBB',
    'phpwiki'     => 'PhpWiki',
    'postnuke'    => 'PostNuke',
    'wordpress'   => 'WordPress',
    'xoops'       => 'Xoops',

    'agoracart'   => 'agoracart', # not needed
    'phpmychat'   => 'phpmychat', # not needed ??
);

our %old2new_name_map
    = map {$new2old_name_map{$_} => $_ } keys %new2old_name_map;

our %aoi = (
    'agb' => {
        'import_sql_remove' => [],
        'convert' => {
            'namespace' => 'cPanel::Guest_Books::Advanced_Guestbook',
            'name'    => 'Advanced Guestbook',
            'version' => '2.3.3',
            'dotfile' => '.addonscgi-AdvancedGuestBook',
            'handler' => sub {
                my ($dir,$dbp,$ver,$rewrite_sr) = @_;
                my $addon_hr = {
                    'addon'           => 'cPanel::Guest_Books::Advanced_Guestbook',
                    'installdir'      => "$Cpanel::homedir/public_html/$dir",
                    'addon_path'      => 'cPanel/Guest_Books/Advanced_Guestbook',
                    'version'         => '2.3.3',
                    '_self'           => $0,
                    'installpath'     => $dir,
                    'user'            => $user,
                    'url_to_install'  => "http://$Cpanel::CPDATA{DNS}/$dir",
                    'username'        => 'test',
                    'password'        => '123',
                    'mysql_user_post'  => $dbp,
                    'mysql.agbook._post'
                                      => $dbp,
                    'converted'       => time(),
                 };
                 my $conf = '';
                 if( open CNF, "public_html/$dir/admin/config.inc.php" ) {
                     while(<CNF>) { $conf .= $_; }
                     close CNF;

                     ($addon_hr->{mysql_user}) = $conf
                         =~ m/\$GB\_DB\[\"user\"\]\s+\=\s+\"(.*)\"\;/;
                     ($addon_hr->{mysql_pass})  = $conf
                         =~ m/\$GB\_DB\[\"pass\"\]\s+\=\s+\"(.*)\"\;/;
                     ($addon_hr->{'mysql.agbook.sqldb'}) = $conf
                         =~ m/\$GB\_DB\[\"dbName\"\]\s+\=\s+\"(.*)\"\;/;
                     ($addon_hr->{'mysql.agbook.sqlhost'}) = $conf
                         =~ m/\$GB\_DB\[\"host\"\]\s+\=\s+\"(.*)\"\;/;

                     $addon_hr->{'mysql.agbook.sqluser'} = $addon_hr->{mysql_user};
                     $addon_hr->{'mysql.agbook.sqlpass'} = $addon_hr->{mysql_pass};

                     for(qw(_post sqldb sqluser sqlpass sqlhost)) {
                         $addon_hr->{myqsl}->{agbook}->{$_}
                             = $addon_hr->{"mysql.agbook.$_"};
                     }
                 }
                 else {
                     warn "Could not open public_html/$dir/admin/config.inc.php"
                          . " for parsing: $!";
                     ${$rewrite_sr} .= "$dir $dbp $ver\n";
                     return 0;
                 }
                 return $addon_hr;
            }, # end handler
        }, # end convert
    }, # end agb

    'phpbb' => {
        'convert' => {
            'name'    => 'phpBB',
            'version' => '2.0.19',
            'dotfile' => '.addonscgi-phpBB',
            'handler' => sub {
                my ($dir,$dbp,$ver,$rewrite_sr) = @_;
                my $addon_hr = {
                    addon => 'cPanel::Bulletin_Boards::phpBB',
                    installdir => "$Cpanel::homedir/public_html/$dir",
                    addon_path => 'cPanel/Bulletin_Boards/phpBB',
                    version => '2.0.19',
                    _self => $0,
                    installpath => $dir,
                    user => $user,
                    url_to_install => "http://$Cpanel::CPDATA{DNS}/$dir",
                    username => 'unknown',
                    password => 'unknown',
                    mysql_user_post => $dbp,
                   'mysql.phpbb._post' => $dbp,
                   converted => time(),
                };
                my $conf = '';
                if( open CNF, "public_html/$dir/config.php" ) {
                    while(<CNF>) { $conf .= $_; }
                    close CNF;

                    ($addon_hr->{phpbb2_dbms}) = $conf
                        =~ m/\$dbms\s+\=\s+\'(.*)\'\;/;
                    ($addon_hr->{table_prefix}) = $conf
                        =~ m/\$table_prefix\s+\=\s+\'(.*)\_\'\;/;
                    ($addon_hr->{mysql_user}) = $conf
                        =~ m/\$dbuser\s+\=\s+\'(.*)\'\;/;
                    ($addon_hr->{mysql_pass})  = $conf
                        =~ m/\$dbpasswd\s+\=\s+\'(.*)\'\;/;
                    ($addon_hr->{'mysql.phpbb.sqldb'}) = $conf
                        =~ m/\$dbname\s+\=\s+\'(.*)\'\;/;
                    ($addon_hr->{'mysql.phpbb.sqlhost'}) = $conf
                        =~ m/\$dbhost\s+\=\s+\'(.*)\'\;/;

                    $addon_hr->{'mysql.phpbb.sqluser'} = $addon_hr->{mysql_user};
                    $addon_hr->{'mysql.phpbb.sqlpass'} = $addon_hr->{mysql_pass};

                    for(qw(_post sqldb sqluser sqlpass sqlhost)) {
                        $addon_hr->{myqsl}->{phpbb}->{$_}
                            = $addon_hr->{"mysql.phpbb.$_"};
                    }

                    my $dbh = DBI->connect('DBI:mysql:'
                        . qq{$addon_hr->{'mysql.phpbb.sqldb'}:}
                        . $addon_hr->{'mysql.phpbb.sqlhost'},
                        $addon_hr->{mysql_user},
                        $addon_hr->{mysql_pass}
                    );
                    if(defined $dbh) {
                        for(@{
                              $dbh->selectall_arrayref(
                                'SELECT username, user_password FROM '
                                . "$addon_hr->{table_prefix}_users LIMIT 2"
                              )
                        }) {
                            next if $_->[0] eq 'Anonymous';
                            $addon_hr->{username} = $_->[0];
                            $addon_hr->{password} = "MD5_from_conversion_$_->[1]";
                        }
                    }
                }
                else {
                    warn "Could not open public_html/$dir/config.php"
                         . " for parsing: $!";
                    ${$rewrite_sr} .= "$dir $dbp $ver\n";
                    return 0;
                }
                return $addon_hr;
            }, # end handler
        }, # end convert
    }, # end phpbb


#### Start b2evolution ##
    'b2evolution' => {
        'convert' => {
 	    'name'    => 'B2Evolution', # do
            'version' => '0.9.0.11', # do
	    'dotfile' => '.addonscgi-b2evolution', # do
            'handler' => sub {
	    my $db = '';   # do
	    my @ns = qw(Blogs B2Evolution); # do
	    my $cf = 'conf/_config.php';
            my ($dir,$dbp,$ver,$rewrite_sr) = @_;
            my $addon_hr = {
                'addon'           => join('::', 'cPanel', @ns),
                'installdir'      => "$Cpanel::homedir/public_html/$dir",
                'addon_path'      => join('/', 'cPanel', @ns),
                'version'         => '0.9.0.12', # do
                '_self'           => $0,
                'installpath'     => $dir,
                'user'            => $user,
                 'url_to_install'  => "http://$Cpanel::CPDATA{DNS}/$dir",
                'username'        => 'unknown', # do
                'password'        => 'unknown', # do
                'mysql_user_post' => $dbp,
                "mysql.$db._post"
                                  => $dbp,
                'converted'       => time(),
            };
            my $conf = '';
            # do - get data from config
            if( open CNF, "public_html/$dir/$cf" ) {
                while(<CNF>) { $conf .= $_; }
                close CNF;

                ($addon_hr->{email}) = $conf
                    =~ m{ \$admin_email \s* = \s* '(.*)'; }xms;
                ($addon_hr->{mysql_user}) = $conf
                    =~ m{ define [(] \s* 'DB_USER', \s* '(.*)' \s* [)] }xms;
                ($addon_hr->{mysql_pass})  = $conf
                    =~ m{ define [(] \s* 'DB_PASSWORD', \s*'(.*)'\s* [)] }xms;
                ($addon_hr->{'mysql.$db.sqldb'}) = $conf
                    =~ m{ define [(] \s* 'DB_NAME', \s* '(.*)' \s* [)] }xms;
                ($addon_hr->{'mysql.$db.sqlhost'}) = $conf
                    =~ m{ define [(] \s* 'DB_HOST', \s* '(.*)' \s* [)] }xms;

                $addon_hr->{'mysql.$db.sqlhost'} = 'localhost'
		    if !$addon_hr->{'mysql.$db.sqlhost'};
                $addon_hr->{'mysql.$db.sqluser'} = $addon_hr->{mysql_user};
                $addon_hr->{'mysql.$db.sqlpass'} = $addon_hr->{mysql_pass};

                for(qw(_post sqldb sqluser sqlpass sqlhost)) {
                    $addon_hr->{myqsl}->{$db}->{$_}
                        = $addon_hr->{"mysql.$db.$_"};
                }
            }
            else {
                warn "Could not open public_html/$dir/$cf"
                     . " for parsing: $!";
                ${$rewrite_sr} .= "$dir $dbp $ver\n";
                return 0;
            }

            ($addon_hr->{table_prefix}) = `cat conf/_advanced.php`
	        =~ m{ \$tableposts \s* = \s* '(.*)_posts' }xms;
	    $addon_hr->{table_prefix}
	        = '' if !defined $addon_hr->{table_prefix};
            $addon_hr->{table_prefix} =~ s/\_$//;

            return $addon_hr;
            }, # end handler
        }, # end convert
    }, # end b2evolution ##

    'coppermine' => {
        'convert' => {
            'name'    => 'Coppermine', # do
            'version' => '1.3.2', # do
            'dotfile' => '.addonscgi-Coppermine', # do
            'handler' => sub {
                my $db = 'coppermine';   # do
                my @ns = qw(Gallery Coppermine); # do
                my $cf = 'include/config.inc.php'; #do
                my ($dir,$dbp,$ver,$rewrite_sr) = @_;
                my $addon_hr = {
                    'addon'           => join('::', 'cPanel', @ns),
                    'installdir'      => "$Cpanel::homedir/public_html/$dir",
                    'addon_path'      => join('/', 'cPanel', @ns),
                    'version'         => '1.3.3', # do
                    '_self'           => $0,
                    'installpath'     => $dir,
                    'user'            => $user,
                    'url_to_install'  => "http://$Cpanel::CPDATA{DNS}/$dir",
                    'username'        => 'unknown', # do
                    'password'        => 'unknown', # do
                    'mysql_user_post' => $dbp,
                    "mysql.$db._post"
                                      => $dbp,
                    'converted'       => time(),
                };
                my $conf = '';
                # do - get data from config
                if( open CNF, "public_html/$dir/$cf" ) {
                    while(<CNF>) { $conf .= $_; }
                    close CNF;

                    ($addon_hr->{mysql_user}) = $conf
                        =~ m{ \$CONFIG\['dbuser'\] \s* = \s* '(\w+)'}xms;
                    ($addon_hr->{mysql_pass})  = $conf
                        =~ m{ \CONFIG\['dbpass'\] \s* = \s* '(\w+)'}xms;
                    ($addon_hr->{'mysql.$db.sqldb'}) = $conf
                        =~ m{ \$CONFIG\['dbname'\] \s* = \s* '(\w+)'}xms;
                    ($addon_hr->{'mysql.$db.sqlhost'}) = $conf
                        =~ m{ \$CONFIG\['dbserver'\] \s* = \s* '(\w+)'}xms;

                    $addon_hr->{'mysql.$db.sqluser'} = $addon_hr->{mysql_user};
                    $addon_hr->{'mysql.$db.sqlpass'} = $addon_hr->{mysql_pass};

                    ($addon_hr->{table_prefix}) = $conf
                        =~ m{ \$CONFIG\['TABLE_PREFIX'\] \s* = \s* '(\w+)_' }xms;
                    $addon_hr->{table_prefix}
                        = '' if !defined $addon_hr->{table_prefix};
                    $addon_hr->{table_prefix} =~ s/\_$//;

                    for(qw(_post sqldb sqluser sqlpass sqlhost)) {
                        $addon_hr->{myqsl}->{$db}->{$_}
                            = $addon_hr->{"mysql.$db.$_"};
                    }
                }
                else {
                    warn "Could not open public_html/$dir/$cf"
                         . " for parsing: $!";
                    ${$rewrite_sr} .= "$dir $dbp $ver\n";
                    return 0;
                }
                return $addon_hr;
            }, # end handler
        }, # end convert
    }, # end coppermine

    'cpsupport' => {
        'noconvert' => 1,
        'convert' => {
            'dotfile' => 'etc/support.conf',
            'name'    => 'cPSupport',
        },
    }, # end cpsupport

    'e107' => {
        'convert' => {
            'namespace' => 'cPanel::CMS::E107',
            'name'    => 'e107',
            'version' => '0.617',
            'dotfile' => '.addonscgi-e107',
            'handler' => sub {
                my $db = 'e107';
                my @ns = qw(CMS E107);
                my $cf = 'e107_config.php';
                my ($dir,$dbp,$ver,$rewrite_sr) = @_;
                my $addon_hr = {
                    'addon'           => join('::', 'cPanel', @ns),
                    'installdir'      => "$Cpanel::homedir/public_html/$dir",
                    'addon_path'      => join('/', 'cPanel', @ns),
                    'version'         => '0.6171',
                    '_self'           => $0,
                    'installpath'     => $dir,
                    'user'            => $user,
                    'url_to_install'  => "http://$Cpanel::CPDATA{DNS}/$dir",
                    'username'        => 'unknown', # do
                    'password'        => 'unknown', # do
                    'mysql_user_post' => $dbp,
                    "mysql.$db._post"
                                      => $dbp,
                    'converted'       => time(),
                };
                my $conf = '';
                # do - get data from config
                if( open CNF, "public_html/$dir/$cf" ) {
                    while(<CNF>) { $conf .= $_; }
                    close CNF;
                    ($addon_hr->{mysql_user}) = $conf
                        =~ m{ \$mySQLuser \s* = \s* ["] (.*) ["] }xms;
                    ($addon_hr->{mysql_pass})  = $conf
                        =~ m{ \$mySQLpassword \s* = \s* ["] (.*) ["] }xms;
                    ($addon_hr->{'mysql.$db.sqldb'}) = $conf
                        =~ m{ \$mySQLdefaultdb  \s* = \s* ["] (.*) ["] }xms;
                    ($addon_hr->{'mysql.$db.sqlhost'}) = $conf
                        =~ m{ \$mySQLserver \s* = \s* ["] (.*) ["] }xms;

                    $addon_hr->{'mysql.$db.sqluser'} = $addon_hr->{mysql_user};
                    $addon_hr->{'mysql.$db.sqlpass'} = $addon_hr->{mysql_pass};

                    ($addon_hr->{table_prefix}) = $conf
                        =~ m{  \$mySQLprefix \s* = \s* ["] (.*) ["] }xms;
                    $addon_hr->{table_prefix}
                        = '' if !defined $addon_hr->{table_prefix};
                    $addon_hr->{table_prefix} =~ s/\_$//;

                    for(qw(_post sqldb sqluser sqlpass sqlhost)) {
                        $addon_hr->{myqsl}->{$db}->{$_}
                            = $addon_hr->{"mysql.$db.$_"};
                    }
                }
                else {
                    warn "Could not open public_html/$dir/$cf"
                         . " for parsing: $!";
                    ${$rewrite_sr} .= "$dir $dbp $ver\n";
                    return 0;
                }
                return $addon_hr;
            }, # end handler
        }, # end convert
    }, # end e107

    'geeklog' => {
        'convert' => {
            'namespace' => 'cPanel::CMS::Geeklog',
            'name'    => 'Geek Log',
            'version' => '1.3.11sr1',
            'dotfile' => '.addonscgi-Geeklog',
            'handler' => sub {
                my $db = 'geeklog';
                my @ns = qw(CMS Geeklog);
                my $cf = 'config.php',
                my ($dir,$dbp,$ver,$rewrite_sr) = @_;
                my $addon_hr = {
                    'addon'           => join('::', 'cPanel', @ns),
                    'installdir'      => "$Cpanel::homedir/public_html/$dir",
                    'addon_path'      => join('/', 'cPanel', @ns),
                    'version'         => '1.3.11sr1',
                    '_self'           => $0,
                    'installpath'     => $dir,
                    'user'            => $user,
                     'url_to_install'  => "http://$Cpanel::CPDATA{DNS}/$dir",
                    'username'        => 'unknown', # do
                    'password'        => 'unknown', # do
                    'mysql_user_post' => $dbp,
                    "mysql.$db._post"
                                      => $dbp,
                    'converted'       => time(),
                };
                my $conf = '';

                if( open CNF, "public_html/$dir/$cf" ) {
                    while(<CNF>) { $conf .= $_; }
                    close CNF;
                    ($addon_hr->{mysql_user}) = $conf
                        =~ m{ \$_DB_user [=] ['] (.*) ['] }xms;
                    ($addon_hr->{mysql_pass})  = $conf
                        =~ m{ \$_DB_pass [=] ['] (.*) ['] }xms;
                    ($addon_hr->{'mysql.$db.sqldb'}) = $conf
                        =~ m{ \$_DB_name [=] ['] (.*) ['] }xms;
                    ($addon_hr->{'mysql.$db.sqlhost'}) = $conf
                        =~ m{ \$_DB_host [=] ['] (.*) ['] }xms;

                    $addon_hr->{'mysql.$db.sqluser'} = $addon_hr->{mysql_user};
                    $addon_hr->{'mysql.$db.sqlpass'} = $addon_hr->{mysql_pass};

                    ($addon_hr->{table_prefix}) = $conf
                        =~ m{ \$_DB_table_prefix [=] ['] (.*) ['] }xms;
                    $addon_hr->{table_prefix}
                        = '' if !defined $addon_hr->{table_prefix};
                    $addon_hr->{table_prefix} =~ s/\_$//;

                    for(qw(_post sqldb sqluser sqlpass sqlhost)) {
                        $addon_hr->{myqsl}->{$db}->{$_}
                            = $addon_hr->{"mysql.$db.$_"};
                    }
                }
                else {
                    warn "Could not open public_html/$dir/$cf"
                         . " for parsing: $!";
                    ${$rewrite_sr} .= "$dir $dbp $ver\n";
                    return 0;
                }
                return $addon_hr;
            }, # end handler
        }, # end convert
    }, # end geeklog

    'mambo' => {
        'convert' => {
            'namespace' => 'cPanel::CMS::Mambo',
            'name'    => 'Mambo',
            'version' => '4.5.1b',
            'dotfile' => '.addonscgi-MamboOpenSource',
            'handler' => sub {
                my $db = 'mambo';
                my @ns = qw(CMS Mambo);
                my $cf = 'configuration.php';
                my ($dir,$dbp,$ver,$rewrite_sr) = @_;
                my $addon_hr = {
                    'addon'           => join('::', 'cPanel', @ns),
                    'installdir'      => "$Cpanel::homedir/public_html/$dir",
                    'addon_path'      => join('/', 'cPanel', @ns),
                    'version'         => '4.5.2.3',
                    '_self'           => $0,
                    'installpath'     => $dir,
                    'user'            => $user,
                     'url_to_install'  => "http://$Cpanel::CPDATA{DNS}/$dir",
                    'username'        => 'unknown', # do
                    'password'        => 'unknown', # do
                    'mysql_user_post' => $dbp,
                    "mysql.$db._post"
                                      => $dbp,
                    'converted'       => time(),
                };
                my $conf = '';
                # do - get data from config
                if( open CNF, "public_html/$dir/$cf" ) {
                    while(<CNF>) { $conf .= $_; }
                    close CNF;
                    ($addon_hr->{mysql_user}) = $conf
                        =~ m{ \$mosConfig_user \s* [=] \s* ['] (.*) ['] }xms;
                    ($addon_hr->{mysql_pass})  = $conf
                        =~ m{ \$mosConfig_password \s* [=] \s* ['] (.*) ['] }xms;
                    ($addon_hr->{'mysql.$db.sqldb'}) = $conf
                        =~ m{ \$mosConfig_db \s* [=] \s* ['] (.*) ['] }xms;
                    ($addon_hr->{'mysql.$db.sqlhost'}) = $conf
                        =~ m{ \$mosConfig_host \s* [=] \s* ['] (.*) ['] }xms;

                    $addon_hr->{'mysql.$db.sqluser'} = $addon_hr->{mysql_user};
                    $addon_hr->{'mysql.$db.sqlpass'} = $addon_hr->{mysql_pass};

                    ($addon_hr->{table_prefix}) = $conf
                        =~ m{ \$mosConfig_dbprefix \s* [=] \s* ['] (.*) ['] }xms;
                    $addon_hr->{table_prefix}
                        = '' if !defined $addon_hr->{table_prefix};
                    $addon_hr->{table_prefix} =~ s/\_$//;

                    for(qw(_post sqldb sqluser sqlpass sqlhost)) {
                        $addon_hr->{myqsl}->{$db}->{$_}
                            = $addon_hr->{"mysql.$db.$_"};
                    }
                }
                else {
                    warn "Could not open public_html/$dir/$cf"
                         . " for parsing: $!";
                    ${$rewrite_sr} .= "$dir $dbp $ver\n";
                    return 0;
                }
                return $addon_hr;
            }, # end handler
        }, # end convert
    }, # end mambo

    'nucleus' => {
        'convert' => {
            'namespace' => 'cPanel::CMS::Nucleus',
            'name'    => 'Nucleus',
            'version' => '3.21',
            'dotfile' => '.addonscgi-Nucleus',
            'handler' => sub {
                my $db = 'ncls';
                my @ns = qw(CMS Nucleus);
                my $cf = 'config.php';
                my ($dir,$dbp,$ver,$rewrite_sr) = @_;
                my $addon_hr = {
                    'addon'           => join('::', 'cPanel', @ns),
                    'installdir'      => "$Cpanel::homedir/public_html/$dir",
                    'addon_path'      => join('/', 'cPanel', @ns),
                    'version'         => '3.22',
                    '_self'           => $0,
                    'installpath'     => $dir,
                    'user'            => $user,
                     'url_to_install'  => "http://$Cpanel::CPDATA{DNS}/$dir",
                    'username'        => 'unknown', # do
                    'password'        => 'unknown', # do
                    'mysql_user_post' => $dbp,
                    "mysql.$db._post"
                                      => $dbp,
                    'converted'       => time(),
                };
                my $conf = '';

                if( open CNF, "public_html/$dir/$cf" ) {
                    while(<CNF>) { $conf .= $_; }
                    close CNF;
                    ($addon_hr->{mysql_user}) = $conf
                        =~ m{ \$MYSQL_USER \s* [=] \s* ['] (.*) ['] }xms;
                    ($addon_hr->{mysql_pass})  = $conf
                        =~ m{ \$MYSQL_PASSWORD \s* [=] \s* ['] (.*) ['] }xms;
                    ($addon_hr->{'mysql.$db.sqldb'}) = $conf
                        =~ m{ \$MYSQL_DATABASE \s* [=] \s* ['] (.*) ['] }xms;
                    ($addon_hr->{'mysql.$db.sqlhost'}) = $conf
                        =~ m{ \$MYSQL_HOST \s* [=] \s* ['] (.*) ['] }xms;

                    $addon_hr->{'mysql.$db.sqluser'} = $addon_hr->{mysql_user};
                    $addon_hr->{'mysql.$db.sqlpass'} = $addon_hr->{mysql_pass};

                    ($addon_hr->{table_prefix}) = $conf
                        =~ m{ \$MYSQL_PREFIX \s* [=] \s* ['] (.*) ['] }xms;
                    $addon_hr->{table_prefix}
                        = '' if !defined $addon_hr->{table_prefix};
                    $addon_hr->{table_prefix} =~ s/\_$//;

                    for(qw(_post sqldb sqluser sqlpass sqlhost)) {
                        $addon_hr->{myqsl}->{$db}->{$_}
                            = $addon_hr->{"mysql.$db.$_"};
                    }
                }
                else {
                    warn "Could not open public_html/$dir/$cf"
                         . " for parsing: $!";
                    ${$rewrite_sr} .= "$dir $dbp $ver\n";
                    return 0;
                }
                return $addon_hr;
            }, # end handler
        }, # end convert
    }, # end nucleus

    'oscommerce' => {
        'convert' => {
            'namespace' => 'cPanel::Ecommerce::OSCommerce',
            'name'    => 'OSCommerce',
            'version' => '2.2ms2',
            'dotfile' => '.addonscgi-osCommerce',
            'handler' => sub {
                my $db = 'osc';
                my @ns = qw(Ecommerce OSCommerce);
                my $cf = 'includes/configure.php admin/includes/configure.php';
                my ($dir,$dbp,$ver,$rewrite_sr) = @_;
                my $addon_hr = {
                    'addon'           => join('::', 'cPanel', @ns),
                    'installdir'      => "$Cpanel::homedir/public_html/$dir",
                    'addon_path'      => join('/', 'cPanel', @ns),
                    'version'         => '', # do
                    '_self'           => $0,
                    'installpath'     => $dir,
                    'user'            => $user,
                     'url_to_install'  => "http://$Cpanel::CPDATA{DNS}/$dir",
                    'username'        => 'unknown', # do
                    'password'        => 'unknown', # do
                    'mysql_user_post' => $dbp,
                    "mysql.$db._post"
                                      => $dbp,
                    'converted'       => time(),
                };
                my $conf = '';
                # do - get data from config
                if( open CNF, "public_html/$dir/$cf" ) {
                    while(<CNF>) { $conf .= $_; }
                    close CNF;
                    ($addon_hr->{mysql_user}) = $conf
                        =~ m{ define [(] ['] DB_SERVER_USERNAME ['] [,] \s* ['] (.*) ['] [)] }xms;
                    ($addon_hr->{mysql_pass})  = $conf
                        =~ m{ define [(] ['] DB_SERVER_PASSWORD ['] [,] \s* ['] (.*) ['] [)] }xms;
                    ($addon_hr->{'mysql.$db.sqldb'}) = $conf
                        =~ m{ define [(] ['] DB_DATABASE ['] [,] \s* ['] (.*) ['] [)] }xms;
                    ($addon_hr->{'mysql.$db.sqlhost'}) = $conf
                        =~ m{ define [(] ['] DB_SERVER ['] [,] \s* ['] (.*) ['] [)] }xms;

                    $addon_hr->{'mysql.$db.sqluser'} = $addon_hr->{mysql_user};
                    $addon_hr->{'mysql.$db.sqlpass'} = $addon_hr->{mysql_pass};

                    $addon_hr->{table_prefix}
                        = '' if !defined $addon_hr->{table_prefix};
                    $addon_hr->{table_prefix} =~ s/\_$//;

                    for(qw(_post sqldb sqluser sqlpass sqlhost)) {
                        $addon_hr->{myqsl}->{$db}->{$_}
                            = $addon_hr->{"mysql.$db.$_"};
                    }
                }
                else {
                    warn "Could not open public_html/$dir/$cf"
                         . " for parsing: $!";
                    ${$rewrite_sr} .= "$dir $dbp $ver\n";
                    return 0;
                }
                return $addon_hr;
            }, # end handler
        }, # end convert
    }, # end oscommerce

    'phpwiki' => {
        'noconvert' => 1, # because the database stuff isn't to be had a convertion will break by not knowing what database or connection info to use, lame lame lame lame
        'convert' => {
            'namespace' => 'cPanel:::CMS::phpWiki',
            'name'    => 'phpWiki',
            'version' => '1.37',
            'dotfile' => '.addonscgi-PhpWiki',
            'handler' => sub {
                my $db = 'phpwiki';
                my @ns = qw(:CMS phpWiki);
                my $cf = 'config/config.ini';
                my ($dir,$dbp,$ver,$rewrite_sr) = @_;
                my $addon_hr = {
                    'addon'           => join('::', 'cPanel', @ns),
                    'installdir'      => "$Cpanel::homedir/public_html/$dir",
                    'addon_path'      => join('/', 'cPanel', @ns),
                    'version'         => '1.3.11p1',
                    '_self'           => $0,
                    'installpath'     => $dir,
                    'user'            => $user,
                     'url_to_install'  => "http://$Cpanel::CPDATA{DNS}/$dir",
                    'username'        => 'unknown', # do
                    'password'        => 'unknown', # do
                    'mysql_user_post' => $dbp,
                    "mysql.$db._post"
                                      => $dbp,
                    'converted'       => time(),
                };
                my $conf = '';

                if( open CNF, "public_html/$dir/$cf" ) {
                    while(<CNF>) { $conf .= $_; }
                    close CNF;

                    ($addon_hr->{username}) = $conf
                        =~ m{ define [(] ['] ADMIN_USER ['] [,] \s* ["] (.*) ["] }xms;
                    ($addon_hr->{password_crypt}) = $conf
                        =~ m{ define [(] ['] ADMIN_PASSWD ['] [,] \s* ["] (.*) ["] }xms;

                    # appears to all be stored in the db itself,very odd
                    $addon_hr->{mysql_user}          = 'unknown';
                    $addon_hr->{mysql_pass}          = 'unknown';
                    $addon_hr->{'mysql.$db.sqldb'}   = 'unknown';
                    $addon_hr->{'mysql.$db.sqlhost'} = 'unknown';

                    $addon_hr->{'mysql.$db.sqluser'} = $addon_hr->{mysql_user};
                    $addon_hr->{'mysql.$db.sqlpass'} = $addon_hr->{mysql_pass};

                    $addon_hr->{table_prefix} = '';
                    $addon_hr->{table_prefix} =~ s/\_$//;

                    for(qw(_post sqldb sqluser sqlpass sqlhost)) {
                        $addon_hr->{myqsl}->{$db}->{$_}
                            = $addon_hr->{"mysql.$db.$_"};
                    }
                }
                else {
                    warn "Could not open public_html/$dir/$cf"
                         . " for parsing: $!";
                    ${$rewrite_sr} .= "$dir $dbp $ver\n";
                    return 0;
                }
                return $addon_hr;
            }, # end handler
        }, # end convert
    }, # end phpwiki

    'postnuke' => {
        'convert' => {
            'namespace' => 'cPanel::CMS::PostNuke',
            'name'    => 'PostNuke',
            'version' => '0.750',
            'dotfile' => '.addonscgi-PostNuke',
            'handler' => sub {
                my $db = 'pn';
                my @ns = qw(CMS PostNuke);
                my $cf = 'config.php';
                my ($dir,$dbp,$ver,$rewrite_sr) = @_;
                my $addon_hr = {
                    'addon'           => join('::', 'cPanel', @ns),
                    'installdir'      => "$Cpanel::homedir/public_html/$dir",
                    'addon_path'      => join('/', 'cPanel', @ns),
                    'version'         => '0.761',
                    '_self'           => $0,
                    'installpath'     => $dir,
                    'user'            => $user,
                     'url_to_install'  => "http://$Cpanel::CPDATA{DNS}/$dir",
                    'username'        => 'unknown', # do
                    'password'        => 'unknown', # do
                    'mysql_user_post' => $dbp,
                    "mysql.$db._post"
                                      => $dbp,
                    'converted'       => time(),
                };
                my $conf = '';

                if( open CNF, "public_html/$dir/$cf" ) {
                    while(<CNF>) { $conf .= $_; }
                    close CNF;
                    ($addon_hr->{mysql_user}) = $conf
                        =~ m{ \$pnconfig\[ ['] dbuname ['] \] \s* = ['] \s* (.*) ['] }xms;
                    ($addon_hr->{mysql_pass})  = $conf
                        =~ m{ \$pnconfig\[ ['] dbpass ['] \] \s* = ['] \s* (.*) ['] }xms;
                    ($addon_hr->{'mysql.$db.sqldb'}) = $conf
                        =~ m{ \$pnconfig\[ ['] dbname ['] \] \s* = ['] \s* (.*) ['] }xms;
                    ($addon_hr->{'mysql.$db.sqlhost'}) = $conf
                        =~ m{ \$pnconfig\[ ['] dbhost ['] \] \s* = ['] \s* (.*) ['] }xms;

                    $addon_hr->{'mysql.$db.sqluser'} = $addon_hr->{mysql_user};
                    $addon_hr->{'mysql.$db.sqlpass'} = $addon_hr->{mysql_pass};

                    ($addon_hr->{table_prefix}) = $conf
                        =~ m{ \$pnconfig\[ ['] prefix ['] \] \s* = ['] \s* (.*) ['] }xms;
                    $addon_hr->{table_prefix}
                        = '' if !defined $addon_hr->{table_prefix};
                    $addon_hr->{table_prefix} =~ s/\_$//;

                    for(qw(_post sqldb sqluser sqlpass sqlhost)) {
                        $addon_hr->{myqsl}->{$db}->{$_}
                            = $addon_hr->{"mysql.$db.$_"};
                    }
                }
                else {
                    warn "Could not open public_html/$dir/$cf"
                         . " for parsing: $!";
                    ${$rewrite_sr} .= "$dir $dbp $ver\n";
                    return 0;
                }
                return $addon_hr;
            }, # end handler
        }, # end convert
    }, # end postnuke

    'wordpress' => {
        'convert' => {
            'namespace' => 'cPanel::Blogs::WordPress',
            'name'    => 'WordPress',
            'version' => '1.5',
            'dotfile' => '.addonscgi-WordPress',
            'handler' => sub {
                my $db = 'wp';
                my @ns = qw(Blogs WordPress);
                my $cf = 'wp-config.php';
                my ($dir,$dbp,$ver,$rewrite_sr) = @_;
                my $addon_hr = {
                    'addon'           => join('::', 'cPanel', @ns),
                    'installdir'      => "$Cpanel::homedir/public_html/$dir",
                    'addon_path'      => join('/', 'cPanel', @ns),
                    'version'         => '1.5.2',
                    '_self'           => $0,
                    'installpath'     => $dir,
                    'user'            => $user,
                     'url_to_install'  => "http://$Cpanel::CPDATA{DNS}/$dir",
                    'username'        => 'unknown', # do
                    'password'        => 'unknown', # do
                    'mysql_user_post' => $dbp,
                    "mysql.$db._post"
                                      => $dbp,
                    'converted'       => time(),
                };
                my $conf = '';

                if( open CNF, "public_html/$dir/$cf" ) {
                    while(<CNF>) { $conf .= $_; }
                    close CNF;
                    ($addon_hr->{mysql_user}) = $conf
                        =~ m{ define [(] ['] DB_USER['] [,] \s* ['] (.*) ['] }xms;
                    ($addon_hr->{mysql_pass})  = $conf
                        =~ m{ define [(] ['] DB_PASSWORD['] [,] \s* ['] (.*) ['] }xms;
                    ($addon_hr->{'mysql.$db.sqldb'}) = $conf
                        =~ m{ define [(] ['] DB_NAME['] [,] \s* ['] (.*) ['] }xms;
                    ($addon_hr->{'mysql.$db.sqlhost'}) = $conf
                        =~ m{ define [(] ['] DB_HOST['] [,] \s* ['] (.*) ['] }xms;
                    $addon_hr->{'mysql.$db.sqlhost'} = 'localhost'
                        if !$addon_hr->{'mysql.$db.sqlhost'};

                    $addon_hr->{'mysql.$db.sqluser'} = $addon_hr->{mysql_user};
                    $addon_hr->{'mysql.$db.sqlpass'} = $addon_hr->{mysql_pass};

                    ($addon_hr->{table_prefix}) = $conf
                        =~ m{ \$table_prefix \s+ [=] \s* ['] (.*) [']}xms;
                    $addon_hr->{table_prefix}
                        = '' if !defined $addon_hr->{table_prefix};
                    $addon_hr->{table_prefix} =~ s/\_$//;

                    for(qw(_post sqldb sqluser sqlpass sqlhost)) {
                        $addon_hr->{myqsl}->{$db}->{$_}
                            = $addon_hr->{"mysql.$db.$_"};
                    }
                }
                else {
                    warn "Could not open public_html/$dir/$cf"
                         . " for parsing: $!";
                    ${$rewrite_sr} .= "$dir $dbp $ver\n";
                    return 0;
                }
                return $addon_hr;
            }, # end handler
        }, # end convert
    }, # end wordpress

    'xoops' => {
        'convert' => {
            'namespace' => 'cPanel::CMS::Xoops',
            'name'    => 'Xoops',
            'version' => '2.0.13.1',
            'dotfile' => '.addonscgi-Xoops',
            'handler' => sub {
                my $db = 'xoops';
                my @ns = qw(CMS Xoops);
                my $cf = 'mainfile.php';
                my ($dir,$dbp,$ver,$rewrite_sr) = @_;
                my $addon_hr = {
                    'addon'           => join('::', 'cPanel', @ns),
                    'installdir'      => "$Cpanel::homedir/public_html/$dir",
                    'addon_path'      => join('/', 'cPanel', @ns),
                    'version'         => '2.2.3a-Final',
                    '_self'           => $0,
                    'installpath'     => $dir,
                    'user'            => $user,
                     'url_to_install'  => "http://$Cpanel::CPDATA{DNS}/$dir",
                    'username'        => 'unknown', # do
                    'password'        => 'unknown', # do
                    'mysql_user_post' => $dbp,
                    "mysql.$db._post"
                                      => $dbp,
                    'converted'       => time(),
                };
                my $conf = '';

                if( open CNF, "public_html/$dir/$cf" ) {
                    while(<CNF>) { $conf .= $_; }
                    close CNF;
                    ($addon_hr->{mysql_user}) = $conf
                        =~ m{ define [(] ['] XOOPS_DB_USER ['] [,] \s* ['] (.*) ['] }xms;
                    ($addon_hr->{mysql_pass})  = $conf
                        =~ m{ define [(] ['] XOOPS_DB_PASS ['] [,] \s* ['] (.*) ['] }xms;
                    ($addon_hr->{'mysql.$db.sqldb'}) = $conf
                        =~ m{ define [(] ['] XOOPS_DB_NAME ['] [,] \s* ['] (.*) ['] }xms;
                    ($addon_hr->{'mysql.$db.sqlhost'}) = $conf
                        =~ m{ define [(] ['] XOOPS_DB_HOST ['] [,] \s* ['] (.*) ['] }xms;

                    $addon_hr->{'mysql.$db.sqluser'} = $addon_hr->{mysql_user};
                    $addon_hr->{'mysql.$db.sqlpass'} = $addon_hr->{mysql_pass};

                    ($addon_hr->{table_prefix}) = $conf
                        =~ m{ define [(] ['] XOOPS_DB_PREFIX ['] [,] \s* ['] (.*) ['] }xms;
                    $addon_hr->{table_prefix}
                        = '' if !defined $addon_hr->{table_prefix};
                    $addon_hr->{table_prefix} =~ s/\_$//;

                    for(qw(_post sqldb sqluser sqlpass sqlhost)) {
                        $addon_hr->{myqsl}->{$db}->{$_}
                            = $addon_hr->{"mysql.$db.$_"};
                    }
                }
                else {
                    warn "Could not open public_html/$dir/$cf"
                         . " for parsing: $!";
                    ${$rewrite_sr} .= "$dir $dbp $ver\n";
                    return 0;
                }
                return $addon_hr;
            }, # end handler
        }, # end convert
    }, # end xoops

    'phpmychat' => {
        'convert' => {
            'namespace' => 'cPanel::Chat::phpMyChat',
            'name'    => 'phpMyChat',
            'version' => '', # '0.14.5',  # '' match properly ???
            'dotfile' => '.phpchats',
            'handler' => sub {
                my $db = 'mychat';
                my @ns = qw(Chat phpMyChat);
                my $cf = 'chat/config/config.lib.php3';
                my ($dir,$dbp,$ver,$rewrite_sr) = @_;
                my $addon_hr = {
                    'addon'           => join('::', 'cPanel', @ns),
                    'installdir'      => "$Cpanel::homedir/public_html/$dir",
                    'addon_path'      => join('/', 'cPanel', @ns),
                    'version'         => '0.14.5',
                    '_self'           => $0,
                    'installpath'     => $dir,
                    'user'            => $user,
                     'url_to_install'  => "http://$Cpanel::CPDATA{DNS}/$dir",
                    'username'        => 'unknown', # do
                    'password'        => 'unknown', # do
                    'mysql_user_post' => $dbp,
                    "mysql.$db._post"
                                      => $dbp,
                    'converted'       => time(),
                };
                my $conf = '';

                # Remove broken symlink
                if (-l "public_html/$dir/index.php") {
                    my $path = readlink "public_html/$dir/index.php";
                    if ($path =~ m{ \A phpMyChat[.]php3 \z }xms) {
                        unlink "public_html/$dir/index.php";
                    }
                }
                # Add a functional index page to refresh
                if (! -e "public_html/$dir/index.php"
                    && ! -e "public_html/$dir/index.php3"
                    && ! -e "public_html/$dir/index.html"
                    && ! -e "public_html/$dir/index.htm"
                    && ! -e "public_html/$dir/index.cgi"
                    && ! -e "public_html/$dir/index.shtml") {
                    if (open my $index_fh, '>', "public_html/$dir/index.html") {
                        print {$index_fh} qq{<html>\n<head>\n<meta http-equiv="refresh" content="0;URL=/$dir/phpMyChat.php3">\n}
                        . qq{<title>Page has moved</title>\n</head>\n<body><a href="/$dir/phpMyChat.php3">Chat</a></body>\n</html>\n};
                        close $index_fh;
                    }
                }


                if( open CNF, "public_html/$dir/$cf" ) {
                    while(<CNF>) { $conf .= $_; }
                    close CNF;
                    ($addon_hr->{mysql_user}) = $conf
                        =~ m{ define [(] ["] C_DB_USER ["] [,] \s* ['] (.*) ['] }xms;
                    ($addon_hr->{mysql_pass})  = $conf
                        =~ m{ define [(] ["] C_DB_PASS ["] [,] \s* ['] (.*) ['] }xms;
                    ($addon_hr->{'mysql.$db.sqldb'}) = $conf
                        =~ m{ define [(] ["] C_DB_NAME ["] [,] \s* ['] (.*) ['] }xms;
                    ($addon_hr->{'mysql.$db.sqlhost'}) = $conf
                        =~ m{ define [(] ["] C_DB_HOST ["] [,] \s* ['] (.*) ['] }xms;

                    $addon_hr->{'mysql.$db.sqluser'} = $addon_hr->{mysql_user};
                    $addon_hr->{'mysql.$db.sqlpass'} = $addon_hr->{mysql_pass};

                    $addon_hr->{table_prefix} = '';

                    for(qw(_post sqldb sqluser sqlpass sqlhost)) {
                        $addon_hr->{myqsl}->{$db}->{$_}
                            = $addon_hr->{"mysql.$db.$_"};
                    }
                }
                else {
                    warn "Could not open public_html/$dir/$cf"
                         . " for parsing: $!";
                    ${$rewrite_sr} .= "$dir $dbp $ver\n";
                    return 0;
                }
                return $addon_hr;
            }, # end handler
        }, # end convert
    }, # end phpmychat

    'agoracart' => {
        'noconvert' => 1, # ??
        'convert' => {
            'namespace' => 'cPanel::Ecommerce::AgoraCart',
            'name'    => 'AgoraCart',
            'version' => '', # ''match properly ???
            'dotfile' => '.acart', #
            'handler' => sub {
                my $db = 'agora';
                my @ns = qw(Ecommerce AgoraCart);
                my $cf = 'protected/misc/mgr_pass.pl',
                my ($dir,$dbp,$ver,$rewrite_sr) = @_;
                my $addon_hr = {
                    'addon'           => join('::', 'cPanel', @ns),
                    'installdir'      => "$Cpanel::homedir/public_html/$dir",
                    'addon_path'      => join('/', 'cPanel', @ns),
                    'version'         => '4.0K-4b',
                    '_self'           => $0,
                    'installpath'     => $dir,
                    'user'            => $user,
                     'url_to_install'  => "http://$Cpanel::CPDATA{DNS}/$dir",
                    'username'        => 'unknown', # do
                    'password'        => 'unknown', # do
                    'mysql_user_post' => $dbp,
                    "mysql.$db._post"
                                      => $dbp,
                    'converted'       => time(),
                };
                my $conf = '';
                # do - get data from config
                if( open CNF, "public_html/$dir/$cf" ) {
                    while(<CNF>) { $conf .= $_; }
                    close CNF;
                    ($addon_hr->{username}) = $conf
                        =~ m{ \$username [=] ["] (.*) ["] }xms;
                    ($addon_hr->{password})  = $conf
                        =~ m{ \$password [=] ["] (.*) ["] }xms;
                }
                else {
                    warn "Could not open public_html/$dir/$cf"
                         . " for parsing: $!";
                    ${$rewrite_sr} .= "$dir $dbp $ver\n";
                    return 0;
                }
                return $addon_hr;
            }, # end handler
        }, # end convert
    }, # end agoracart

); # end %aoi

 ##############
#### TEMPLATE ##
 ##############

# do it in here doc so its copy an pasteable (IE without comments to remove)
my $tmplt = <<'TEMPLATE_END';
#### Start ##
    # do %new2old_name_map entry for this key
    'addon' => { # do this and label at end for readablity
        'import_sql_remove' => [], # regexes to match must be appropriate to run between s{ \A $your_regex_here \z }{}xms;
        'convert' => {
            'namespace' => 'cPanel::Foo::Addons', # do
            'name'    => '', # do
            'version' => '', # do
            'dotfile' => '.addonscgi-', # do
            'handler' => sub {
                my $db = '';   # do
                my @ns = qw(); # do
                my $cf = 'admin.config.php'; # do
                my ($dir,$dbp,$ver,$rewrite_sr) = @_;
                my $addon_hr = {
                    'addon'           => join('::', 'cPanel', @ns),
                    'installdir'      => "$Cpanel::homedir/public_html/$dir",
                    'addon_path'      => join('/', 'cPanel', @ns),
                    'version'         => '', # do
                    '_self'           => $0,
                    'installpath'     => $dir,
                    'user'            => $user,
                     'url_to_install'  => "http://$Cpanel::CPDATA{DNS}/$dir",
                    'username'        => 'unknown', # do
                    'password'        => 'unknown', # do
                    'mysql_user_post' => $dbp,
                    "mysql.$db._post"
                                      => $dbp,
                    'converted'       => time(),
                };
                my $conf = '';
                # do - get data from config
                if( open CNF, "public_html/$dir/$cf" ) {
                    while(<CNF>) { $conf .= $_; }
                    close CNF;
                    ($addon_hr->{mysql_user}) = $conf
                        =~ m{ }xms;
                    ($addon_hr->{mysql_pass})  = $conf
                        =~ m{ }xms;
                    ($addon_hr->{'mysql.$db.sqldb'}) = $conf
                        =~ m{ }xms;
                    ($addon_hr->{'mysql.$db.sqlhost'}) = $conf
                        =~ m{ }xms;

                    $addon_hr->{'mysql.$db.sqluser'} = $addon_hr->{mysql_user};
                    $addon_hr->{'mysql.$db.sqlpass'} = $addon_hr->{mysql_pass};

                    ($addon_hr->{table_prefix}) = $conf
                        =~ m{  }xms;
                    $addon_hr->{table_prefix}
                        = '' if !defined $addon_hr->{table_prefix};
                    $addon_hr->{table_prefix} =~ s/\_$//;

                    for(qw(_post sqldb sqluser sqlpass sqlhost)) {
                        $addon_hr->{myqsl}->{$db}->{$_}
                            = $addon_hr->{"mysql.$db.$_"};
                    }
                }
                else {
                    warn "Could not open public_html/$dir/$cf"
                         . " for parsing: $!";
                    ${$rewrite_sr} .= "$dir $dbp $ver\n";
                    return 0;
                }
                return $addon_hr;
            }, # end handler
        }, # end convert
    }, # end addon
#### End ##
TEMPLATE_END

 ###############
#### /TEMPLATE ##
 ###############

1;
