<?php require_once dirname(__FILE__).'/accesscheck.php'; if (!ALLOW_IMPORT) { echo '<p>'.$GLOBALS['I18N']->get('import is not available').'</p>'; return; } // import from a different PHPlist installation if ($require_login && !isSuperUser()) { $access = accessLevel('import4'); if ($access == 'owner') { $subselect = ' where owner = '.$_SESSION['logindetails']['id']; } elseif ($access == 'all') { $subselect = ''; } elseif ($access == 'none') { $subselect = ' where id = 0'; } } function connectLocal() { $database_connection = Sql_Connect( $GLOBALS['database_host'], $GLOBALS['database_user'], $GLOBALS['database_password'], $GLOBALS['database_name']); return $database_connection; } function connectRemote() { return Sql_Connect($_POST['remote_host'], $_POST['remote_user'], $_POST['remote_password'], $_POST['remote_database']); } $result = Sql_query('SELECT id,name FROM '.$tables['list']." $subselect ORDER BY listorder"); while ($row = Sql_fetch_array($result)) { $available_lists[$row['id']] = $row['name']; $some = 1; } if (!$some) { // @@@@ not sure about this one: echo $GLOBALS['I18N']->get('No lists available').', '.PageLink2('editlist', $GLOBALS['I18N']->get('add_list')); } //foreach ($_POST as $key => $val) { // print "$key => $val<br/>"; //} if (!$_POST['remote_host'] || !$_POST['remote_user'] || !$_POST['remote_password'] || !$_POST['remote_database'] ) { printf(' <p class="information">' .$GLOBALS['I18N']->get('Please enter details of the remote Server').'</p> <form method="post"> <table class="importForm"> <tr><td>' .$GLOBALS['I18N']->get('Server:').'</td><td><input type="text" name="remote_host" value="%s" size="30"></td></tr> <tr><td>' .$GLOBALS['I18N']->get('user').'</td><td><input type="text" name="remote_user" value="%s" size="30"></td></tr> <tr><td>' .$GLOBALS['I18N']->get('Password:').'</td><td><input type="text" name="remote_password" value="%s" size="30"></td></tr> <tr><td>' .$GLOBALS['I18N']->get('Database Name:').'</td><td><input type="text" name="remote_database" value="%s" size="30"></td></tr> <tr><td>' .$GLOBALS['I18N']->get('Table prefix:').'</td><td><input type="text" name="remote_prefix" value="%s" size="30"></td></tr> <tr><td>' .$GLOBALS['I18N']->get('Usertable prefix:').'</td><td><input type="text" name="remote_userprefix" value="%s" size="30"></td></tr> ', $_POST['remote_server'], $_POST['remote_user'], $_POST['remote_password'], $_POST['remote_database'], $_POST['remote_prefix'], $_POST['remote_userprefix']); $c = 0; echo '<tr><td colspan="2">'; if (count($available_lists) > 1) { echo $GLOBALS['I18N']->get('select_lists').'<br/>'; } echo '<ul>'; foreach ($available_lists as $index => $name) { printf('<li><input type="checkbox" name="lists[%d]" value="%d" %s>%s</li>', $c, $index, is_array($_POST['lists']) && in_array($index, array_values($_POST['lists'])) ? 'checked' : '', $name); ++$c; } printf(' <li><input type="checkbox" name="copyremotelists" value="yes" %s>' .$GLOBALS['I18N']->get('Copy lists from remote server (lists are matched by name)').'</li> </ul></td></tr> <tr><td>' .$GLOBALS['I18N']->get('Mark new users as HTML:').'</td><td><input type="checkbox" name="markhtml" value="yes" %s></td></tr> <tr><td colspan="2">' .$GLOBALS['I18N']->get('If you check "Overwrite Existing", information about a user in the database will be replaced by the imported information. Users are matched by email.').'</td></tr> <tr><td>' .$GLOBALS['I18N']->get('Overwrite Existing:').'</td><td><input type="checkbox" name="overwrite" value="yes" %s></td></tr> <tr><td colspan="2"><p class="submit"><input type="submit" value="' .$GLOBALS['I18N']->get('continue').'"></p></td></tr> </table></form> ', $_POST['copyremotelists'] == 'yes' ? 'checked' : '', $_POST['markhtml'] == 'yes' ? 'checked' : '', $_POST['overwrite'] == 'yes' ? 'checked' : '' ); } else { set_time_limit(600); ob_end_flush(); include_once 'structure.php'; echo $GLOBALS['I18N']->get('Making connection with remote database').'<br/>'; flush(); $remote = connectRemote(); if (!$remote) { Fatal_Error($GLOBALS['I18N']->get('cannot connect to remote database')); return; } $remote_tables = array( 'user' => $_POST['remote_userprefix'].'user', 'list' => $_POST['remote_prefix'].'list', 'listuser' => $_POST['remote_prefix'].'listuser', 'attribute' => $_POST['remote_userprefix'].'attribute', 'user_attribute' => $_POST['remote_userprefix'].'user_attribute', 'config' => $_POST['remote_prefix'].'config', ); echo $GLOBALS['I18N']->get('Getting data from ').htmlentities($_POST['remote_database']).'@'.htmlentities($_POST['remote_host']).'<br/>'; $version = Sql_Fetch_Row_Query("select value from {$remote_tables['config']} where item = \"version\""); echo $GLOBALS['I18N']->get('Remote version is')." $version[0]<br/>\n"; $usercnt = Sql_Fetch_Row_Query("select count(*) from {$remote_tables['user']}"); echo $GLOBALS['I18N']->get('Remote version has')." $usercnt[0] ".$GLOBALS['I18N']->get('users').'<br/>'; if (!$usercnt[0]) { Fatal_Error($GLOBALS['I18N']->get('No users to copy, is the prefix correct?')); return; } $totalusers = $usercnt[0]; $listcnt = Sql_Fetch_Row_Query("select count(*) from {$remote_tables['list']}"); echo $GLOBALS['I18N']->get('Remote version has')." $listcnt[0] ".$GLOBALS['I18N']->get('lists').'<br/>'; flush(); echo '<h3>'.$GLOBALS['I18N']->get('Copying lists').'</h3>'; // first copy the lists across $listmap = array(); $remote_lists = array(); $lists_req = Sql_Query("select * from {$remote_tables['list']}"); while ($row = Sql_Fetch_Array($lists_req)) { array_push($remote_lists, $row); } connectLocal(); foreach ($remote_lists as $list) { $localid_req = Sql_Fetch_Row_Query(sprintf('select id from %s where name = "%s"', $tables['list'], $list['name'])); if ($localid_req[0]) { $listmap[$list['id']] = $localid_req[0]; echo $GLOBALS['I18N']->get('list').' '.$list['name'].$GLOBALS['I18N']->get('exists locally')." <br/>\n"; } elseif ($_POST['copyremotelists']) { $query = ''; foreach ($DBstruct['list'] as $colname => $colspec) { if ($colname != 'id' && $colname != 'index' && $colname != 'unique' && $colname != 'primary key') { $query .= sprintf('%s = "%s",', $colname, addslashes($list[$colname])); } } $query = substr($query, 0, -1); echo $GLOBALS['I18N']->get('list').' '.$list['name'].$GLOBALS['I18N']->get('created locally')." <br/>\n"; Sql_Query("insert into {$tables['list']} set $query"); $listmap[$list['id']] = Sql_Insert_id(); } else { echo $GLOBALS['I18N']->get('Remote list').' '.$list['name'].$GLOBALS['I18N']->get('not created')." <br/>\n"; } } connectRemote(); echo '<h3>'.$GLOBALS['I18N']->get('Copying attributes').'</h3>'; // now copy the attributes $attributemap = array(); $remote_atts = array(); $att_req = Sql_Query("select * from {$remote_tables['attribute']}"); while ($row = Sql_Fetch_Array($att_req)) { array_push($remote_atts, $row); } connectLocal(); foreach ($remote_atts as $att) { $localid_req = Sql_Fetch_Row_Query(sprintf('select id from %s where name = "%s"', $tables['attribute'], stripslashes($att['name']))); if ($localid_req[0]) { $attributemap[$att['id']] = $localid_req[0]; echo $GLOBALS['I18N']->get('Attribute').' '.$att['name'].$GLOBALS['I18N']->get('exists locally')." <br/>\n"; } else { $query = ''; foreach ($DBstruct['attribute'] as $colname => $colspec) { if ($colname != 'id' && $colname != 'index' && $colname != 'unique' && $colname != 'primary key') { $query .= sprintf('%s = "%s",', $colname, addslashes($att[$colname])); } } $query = substr($query, 0, -1); echo $GLOBALS['I18N']->get('Attribute').' '.$att['name'].$GLOBALS['I18N']->get('created locally')." <br/>\n"; Sql_Query("insert into {$tables['attribute']} set $query"); $attributemap[$att['id']] = Sql_Insert_id(); if ($att['type'] == 'select' || $att['type'] == 'radio' || $att['type'] == 'checkboxgroup') { $query = "create table if not exists $table_prefix".'listattr_'.$att['tablename'].' (id integer not null primary key auto_increment, name varchar(255), unique (name(150)),listorder integer default 0)'; Sql_Query($query, 0); connectRemote(); $attvalue_req = Sql_Query('select id,name,listorder from '.$_POST['remote_prefix'].'listattr_'.$att['tablename']); $values = array(); while ($value = Sql_Fetch_Array($attvalue_req)) { array_push($values, $value); } connectLocal(); foreach ($values as $value) { Sql_Query(sprintf('replace into %slistattr_%s (name,id,listorder) values("%s",%d,"%s")', $table_prefix, $att['tablename'], addslashes($value['name']), $value['id'], $value['listorder'])); } } } } echo '<h3>'.$GLOBALS['I18N']->get('Copying users').'</h3>'; // copy the users $usercnt = 0; $existcnt = 0; $newcnt = 0; while ($usercnt < $totalusers) { set_time_limit(60); connectRemote(); $req = Sql_Query("select * from {$remote_tables['user']} limit $usercnt,1"); $user = Sql_Fetch_Array($req); ++$usercnt; $new = 0; if ($usercnt % 20 == 0) { echo "$usercnt / $totalusers<br/>"; flush(); } connectLocal(); $query = ''; $exists = Sql_Fetch_Row_Query(sprintf('select id from %s where email = "%s"', $tables['user'], $user['email'])); if ($exists[0]) { ++$existcnt; // print $user["email"] .$GLOBALS['I18N']->get('exists locally')." .."; if ($_POST['overwrite']) { // print " .. ".$GLOBALS['I18N']->get('overwriting local data')."<br/>"; $query = 'replace into '.$tables['user'].' set id = '.$exists[0].', '; } else { // print " .. ".$GLOBALS['I18N']->get('keeping local data')."<br/>"; } $userid = $exists[0]; } else { ++$newcnt; $new = 1; // print $user["email"] .$GLOBALS['I18N']->get('is a new user')."<br/>"; $query = 'insert into '.$tables['user'].' set '; } if ($query) { foreach ($DBstruct['user'] as $colname => $colspec) { if ($colname != 'id' && $colname != 'index' && $colname != 'unique' && $colname != 'primary key') { $query .= sprintf('%s = "%s",', $colname, addslashes($user[$colname])); } } $query = substr($query, 0, -1); //print $query . "<br/>"; Sql_Query("$query"); $userid = Sql_Insert_id(); } if ($userid && $_POST['markhtml']) { Sql_Query("update {$tables['user']} set htmlemail = 1 where id = $userid"); } if ($new || (!$new && $_POST['overwrite'])) { // now check for attributes and list membership connectRemote(); $useratt = array(); $req = Sql_Query("select * from {$remote_tables['user_attribute']}, {$remote_tables['attribute']} where {$remote_tables['user_attribute']}.attributeid = {$remote_tables['attribute']}.id and {$remote_tables['user_attribute']}.userid = $user[0]"); while ($att = Sql_Fetch_Array($req)) { $value = ''; switch ($att['type']) { case 'select': case 'radio': $valreq = Sql_Fetch_Row_Query(sprintf('select name from %slistattr_%s where id = %d', $_POST['remote_prefix'], $att['tablename'], $att['value'])); $value = $valreq[0]; break; case 'checkboxgroup': $valreq = Sql_Query(sprintf('select name from %slistattr_%s where id in (%s)', sql_escape($_POST['remote_prefix']), $att['tablename'], $att['value'])); while ($vals = Sql_fetch_Row($valreq)) { $value .= $vals[0].','; } break; } $att['displayvalue'] = $value; array_push($useratt, $att); } $userlists = array(); $userlists = array_merge($_POST['lists'], $userlists); if ($_POST['copyremotelists']) { $req = Sql_Query("select * from {$remote_tables['listuser']}, {$remote_tables['list']} where {$remote_tables['listuser']}.listid = {$remote_tables['list']}.id and {$remote_tables['listuser']}.userid = $user[0]"); while ($list = Sql_Fetch_Array($req)) { // print $list["name"]."<br/>"; array_push($userlists, $list); } } connectLocal(); foreach ($useratt as $att) { $localattid = $attributemap[$att['attributeid']]; if (!localattid) { echo $GLOBALS['I18N']->get('Error, no mapped attribute for').' '.$att['name'].'<br/>'; } else { $tname = Sql_Fetch_Row_Query("select tablename from {$tables['attribute']} where id = $localattid"); switch ($att['type']) { case 'select': case 'radio': $valueid = Sql_Fetch_Row_Query(sprintf('select id from %slistattr_%s where name = "%s"', $table_prefix, $tname[0], $att['displayvalue'])); if (!$valueid[0]) { Sql_Query(sprintf('insert into %slistattr_%s set name = "%s"', $table_prefix, $tname[0], $att['displayvalue'])); $att['value'] = Sql_Insert_id(); } else { $att['value'] = $valueid[0]; } break; case 'checkboxgroup': $vals = explode(',', $att['displayvalue']); array_pop($vals); $att['value'] = ''; foreach ($vals as $val) { $valueid = Sql_Fetch_Row_Query(sprintf('select id from %slistattr_%s where name = "%s"', $table_prefix, $tname[0], $val)); if (!$valueid[0]) { Sql_Query(sprintf('insert into %slistattr_%s set name = "%s"', $table_prefix, $tname[0], $val)); $att['value'] .= Sql_Insert_id().','; } else { $att['value'] .= $valueid[0].','; } } $att['value'] = substr($att['value'], 0, -1); break; } if ($att['value']) { Sql_Query(sprintf('replace into %s set attributeid = %d, userid = %d, value = "%s"', $tables['user_attribute'], $localattid, $userid, addslashes($att['value']))); } } } } if (is_array($userlists)) { foreach ($userlists as $list) { if ($listmap[$list['listid']]) { Sql_Query(sprintf('replace into %s (listid,userid) values(%d,%d)', $tables['listuser'], $listmap[$list['listid']], $userid)); } else { echo $GLOBALS['I18N']->get('Error, no local list defined for').' '.$list['name'].'<br/>'; } } } } echo "$totalusers / $totalusers<br/>"; flush(); // @@@@ Not sure about this one: printf('%s %d %s %s %d %s<br/>', $GLOBALS['I18N']->get('Done'), $newcnt, $GLOBALS['I18N']->get('new users'), $GLOBALS['I18N']->get('and'), $existcnt, $GLOBALS['I18N']->get('existing users')); } ?>
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
PEAR | Folder | 0755 |
|
|
PHPMailer | Folder | 0755 |
|
|
PHPMailer6 | Folder | 0755 |
|
|
actions | Folder | 0755 |
|
|
css | Folder | 0755 |
|
|
data | Folder | 0755 |
|
|
help | Folder | 0755 |
|
|
images | Folder | 0755 |
|
|
inc | Folder | 0755 |
|
|
info | Folder | 0755 |
|
|
js | Folder | 0755 |
|
|
locale | Folder | 0755 |
|
|
onyxrss | Folder | 0755 |
|
|
plugins | Folder | 0755 |
|
|
tests | Folder | 0755 |
|
|
ui | Folder | 0755 |
|
|
.gitignore | File | 20 B | 0644 |
|
.htaccess | File | 489 B | 0644 |
|
.minceconf | File | 994 B | 0644 |
|
AnalyticsQuery.php | File | 985 B | 0644 |
|
CsvReader.php | File | 1.27 KB | 0644 |
|
EmailSender.php | File | 477 B | 0644 |
|
Updater.php | File | 193 B | 0644 |
|
about.php | File | 7.4 KB | 0644 |
|
accesscheck.php | File | 715 B | 0644 |
|
addprefix.php | File | 1.01 KB | 0644 |
|
adduser.php | File | 46 B | 0644 |
|
admin.php | File | 12.77 KB | 0644 |
|
adminattributes.php | File | 7.46 KB | 0644 |
|
admins.php | File | 5.16 KB | 0644 |
|
analytics.php | File | 2.84 KB | 0644 |
|
attributes.php | File | 26.2 KB | 0644 |
|
blacklistemail.php | File | 1.22 KB | 0644 |
|
bounce.php | File | 11.14 KB | 0644 |
|
bouncemgt.php | File | 1.44 KB | 0644 |
|
bouncerule.php | File | 4.27 KB | 0644 |
|
bouncerules.php | File | 6.33 KB | 0644 |
|
bounces.php | File | 7.57 KB | 0644 |
|
catlists.php | File | 3.34 KB | 0644 |
|
checkbouncerules.php | File | 1.43 KB | 0644 |
|
checki18n.php | File | 3.13 KB | 0644 |
|
checkprerequisites.php | File | 1.62 KB | 0644 |
|
class.image.inc | File | 3.9 KB | 0644 |
|
class.phplistmailer.php | File | 30.73 KB | 0644 |
|
class.phplistmailerbase.php | File | 1.67 KB | 0644 |
|
community.php | File | 3.5 KB | 0644 |
|
communityfeed.php | File | 2.36 KB | 0644 |
|
configure.php | File | 7.85 KB | 0644 |
|
connect.php | File | 89.86 KB | 0644 |
|
convertstats.php | File | 5.83 KB | 0644 |
|
converttoutf8.php | File | 3.78 KB | 0644 |
|
cron.php | File | 3.34 KB | 0644 |
|
date.php | File | 7.65 KB | 0644 |
|
dbcheck.php | File | 3.7 KB | 0644 |
|
defaultFrontendTexts.php | File | 9.79 KB | 0644 |
|
defaultconfig.php | File | 30.66 KB | 0644 |
|
defaultplugin.php | File | 31.59 KB | 0644 |
|
defaults.php | File | 3.64 KB | 0644 |
|
defaultsystemtemplate.php | File | 15.29 KB | 0644 |
|
defaulttest.php | File | 1.23 KB | 0644 |
|
dlusers.php | File | 235 B | 0644 |
|
domainbounces.php | File | 507 B | 0644 |
|
domainstats.php | File | 371 B | 0644 |
|
editattributes.php | File | 8.78 KB | 0644 |
|
editlist.php | File | 7.4 KB | 0644 |
|
eventlog.php | File | 4.68 KB | 0644 |
|
export.php | File | 6.86 KB | 0644 |
|
exportuserdata.php | File | 8.26 KB | 0644 |
|
fckphplist.php | File | 49.84 KB | 0644 |
|
gchart.php | File | 903 B | 0644 |
|
generatebouncerules.php | File | 5.51 KB | 0644 |
|
home.php | File | 6.56 KB | 0644 |
|
hostedprocessqueuesetup.php | File | 3.09 KB | 0644 |
|
htaccess | File | 311 B | 0644 |
|
image.php | File | 2.01 KB | 0644 |
|
import.php | File | 2.75 KB | 0644 |
|
import1.php | File | 11.09 KB | 0644 |
|
import2.php | File | 34.16 KB | 0644 |
|
import3.php | File | 22.72 KB | 0644 |
|
import4.php | File | 16.86 KB | 0644 |
|
importadmin.php | File | 17.08 KB | 0644 |
|
importsimple.php | File | 7.32 KB | 0644 |
|
index.php | File | 32.82 KB | 0644 |
|
info.php | File | 1.07 KB | 0644 |
|
init.php | File | 27.36 KB | 0644 |
|
initialise.php | File | 12.05 KB | 0644 |
|
initlanguages.php | File | 867 B | 0644 |
|
languages.php | File | 21.37 KB | 0644 |
|
lib.php | File | 86.79 KB | 0644 |
|
list.php | File | 11.32 KB | 0644 |
|
listbounces.php | File | 4.13 KB | 0644 |
|
login.php | File | 6.39 KB | 0644 |
|
logout.php | File | 865 B | 0644 |
|
massremove.php | File | 2.55 KB | 0644 |
|
mclicks.php | File | 7.28 KB | 0644 |
|
members.php | File | 19.99 KB | 0644 |
|
mergeduplicates.php | File | 4.48 KB | 0644 |
|
message.php | File | 9.08 KB | 0644 |
|
messages.php | File | 26.27 KB | 0644 |
|
minify.txt | File | 201 B | 0644 |
|
msgbounces.php | File | 3.4 KB | 0644 |
|
msgstatus.php | File | 1.27 KB | 0644 |
|
mviews.php | File | 6.27 KB | 0644 |
|
mysql.inc | File | 40 B | 0644 |
|
mysqli.inc | File | 14.02 KB | 0644 |
|
pageaction.php | File | 1.11 KB | 0644 |
|
phpListAdminAuthentication.php | File | 6.82 KB | 0644 |
|
pluginlib.php | File | 9.43 KB | 0644 |
|
plugins.php | File | 17.78 KB | 0644 |
|
preparesend.php | File | 669 B | 0644 |
|
processbounces.php | File | 35.36 KB | 0644 |
|
processqueue.php | File | 3.71 KB | 0644 |
|
readtestmail.php | File | 11.59 KB | 0644 |
|
reconcileusers.php | File | 27.71 KB | 0644 |
|
redirecttoupdater.php | File | 187 B | 0644 |
|
reindex.php | File | 1.82 KB | 0644 |
|
rsslib.php | File | 3.17 KB | 0644 |
|
runcommand.php | File | 583 B | 0644 |
|
send.php | File | 6.17 KB | 0644 |
|
send_core.php | File | 63.91 KB | 0644 |
|
sendemaillib.php | File | 69.84 KB | 0644 |
|
sendprepared.php | File | 4.87 KB | 0644 |
|
sessionlib.php | File | 2.7 KB | 0644 |
|
setpermissions.php | File | 2.08 KB | 0644 |
|
setup.php | File | 2.56 KB | 0644 |
|
spage.php | File | 4.35 KB | 0644 |
|
spageedit.php | File | 19.08 KB | 0644 |
|
statsmgt.php | File | 1.23 KB | 0644 |
|
statsoverview.php | File | 6.19 KB | 0644 |
|
stresstest.php | File | 4.82 KB | 0644 |
|
structure.php | File | 29.21 KB | 0644 |
|
subscribelib2.php | File | 70.22 KB | 0644 |
|
subscriberstats.php | File | 617 B | 0644 |
|
suppressionlist.php | File | 1.71 KB | 0644 |
|
system.php | File | 795 B | 0644 |
|
systemstats.php | File | 5.73 KB | 0644 |
|
template.php | File | 16.4 KB | 0644 |
|
templates.php | File | 3.01 KB | 0644 |
|
tests.php | File | 1.67 KB | 0644 |
|
uclicks.php | File | 6.74 KB | 0644 |
|
update.php | File | 187 B | 0644 |
|
updateLib.php | File | 2.2 KB | 0644 |
|
updatetlds.php | File | 358 B | 0644 |
|
updatetranslation.php | File | 2.51 KB | 0644 |
|
upgrade.php | File | 23.82 KB | 0644 |
|
user.php | File | 23.08 KB | 0644 |
|
usercheck.php | File | 2.55 KB | 0644 |
|
userclicks.php | File | 11.57 KB | 0644 |
|
userhistory.php | File | 8.25 KB | 0644 |
|
usermgt.php | File | 1.9 KB | 0644 |
|
users.php | File | 19.3 KB | 0644 |
|
vCard.php | File | 1.9 KB | 0644 |
|
viewmessage.php | File | 635 B | 0644 |
|
viewtemplate.php | File | 1.86 KB | 0644 |
|
vote.php | File | 38 B | 0644 |
|