Mister Spy Say ="Hello Kids ... :D"
___ ____ _ _____
| \/ (_) | | / ___|
| . . |_ ___| |_ ___ _ __ \ `--. _ __ _ _
| |\/| | / __| __/ _ \ '__| `--. \ '_ \| | | |
| | | | \__ \ || __/ | /\__/ / |_) | |_| |
\_| |_/_|___/\__\___|_| \____/| .__/ \__, |
| | __/ |
|_| |___/
Bot Mister Spy V3
Mister Spy
Mister Spy
<?php
@ob_end_flush();
$file = $_GET['file'];
if (!file_exists($GLOBALS['tmpdir'].'/'.$file) || !file_exists($GLOBALS['tmpdir'].'/'.$file.'.data')) {
print s('File not found');
return;
}
$importdata = unserialize(file_get_contents($GLOBALS['tmpdir'].'/'.$file.'.data'));
$email_list = file_get_contents($GLOBALS['tmpdir'].'/'.$file);
include_once dirname(__FILE__)."/../commonlib/lib/userlib.php";
// Clean up email file
$email_list = trim($email_list);
$email_list = str_replace("\r","\n",$email_list);
$email_list = str_replace("\n\r","\n",$email_list);
$email_list = str_replace("\n\n","\n",$email_list);
if (isset($importdata['import_record_delimiter'])) {
$import_record_delimiter = $importdata['import_record_delimiter'];
} else {
$import_record_delimiter = "\n";
}
// Change delimiter for new line.
if(isset($import_record_delimiter) && $import_record_delimiter != "" && $import_record_delimiter != "\n") {
$email_list = str_replace($import_record_delimiter,"\n",$email_list);
};
// Split file/emails into array
$email_list = explode("\n",$email_list);
// Parse the lines into records
$hasinfo = 0;
foreach ($email_list as $line) {
$info = '';
$email = trim($line); ## just take the entire line up to the first space to be the email
if (strpos($email,' ')) {
list($email,$info) = explode(' ',$email);
}
## actually looks like the "info" bit will get lost, but
## in a way, that doesn't matter
$user_list[$email] = array (
'info' => $info,
);
}
$count_email_add = 0;
$count_email_exist = 0;
$count_list_add = 0;
$additional_emails = 0;
$some = 0;
$num_lists = sizeof($importdata['importlists']);
$todo = sizeof($user_list);
$done = 0;
$report = '';
if ($hasinfo) {
# we need to add an info attribute if it does not exist
$req = Sql_Query("select id from ".$tables["attribute"]." where name = \"info\"");
if (!Sql_Affected_Rows()) {
# it did not exist
Sql_Query(sprintf('insert into %s (name,type,listorder,default_value,required,tablename)
values("info","textline",0,"",0,"info")', $tables["attribute"]));
}
}
# which attributes were chosen, apply to all users
$res = Sql_Query("select * from ".$tables["attribute"]);
$attributes = array();
while ($row = Sql_Fetch_Array($res)) {
$fieldname = "attribute" .$row["id"];
if (isset($importdata[$fieldname])) {
if (is_array($importdata[$fieldname])) {
$attributes[$row["id"]] = join(',',$importdata[$fieldname]);
} else {
$attributes[$row["id"]] = $importdata[$fieldname];
}
} else {
$attributes[$row["id"]] = '';
}
}
while (list($email,$data) = each ($user_list)) {
## a lot of spreadsheet include those annoying quotes
$email = str_replace('"', '', $email);
set_time_limit(60);
$done++;
if ($done % 50 == 0) {
# print "$done / $todo<br/>";
print '<script type="text/javascript">
var parentJQuery = window.parent.jQuery;
parentJQuery("#progressbar").updateProgress("'.$done.','.$todo.'");
</script>';
flush();
}
if (strlen($email) > 4) {
$email = addslashes($email);
// Annoying hack => Much too time consuming. Solution => Set email in users to UNIQUE()
$result = Sql_query("SELECT id,uniqid FROM ".$tables["user"]." WHERE email = '$email'");
if (Sql_affected_rows()) {
// Email exist, remember some values to add them to the lists
$user = Sql_fetch_array($result);
$userid = $user["id"];
$uniqid = $user["uniqid"];
$old_listmembership = array();
$history_entry = $GLOBALS['I18N']->get('Import of existing subscriber');
$old_data = Sql_Fetch_Array_Query(sprintf('select * from %s where id = %d',$tables["user"],$userid));
$old_data = array_merge($old_data,getUserAttributeValues('',$userid));
# and membership of lists
$req = Sql_Query("select * from {$tables["listuser"]} where userid = $userid");
while ($row = Sql_Fetch_Array($req)) {
$old_listmembership[$row["listid"]] = listName($row["listid"]);
}
$count_email_exist++;
} else {
// Email does not exist
// Create unique number
$randval = mt_rand();
$uniqid = getUniqid();
$old_listmembership = array();
$query = sprintf('INSERT INTO %s (email,entered,confirmed,uniqid,htmlemail) values("%s",current_timestamp,%d,"%s","%s")',
$tables["user"],$email,$importdata['notify'] != "yes",$uniqid,isset($importdata['htmlemail']) ? '1':'0');
$result = Sql_query($query);
$userid = Sql_Insert_Id($tables['user'], 'id');
$count_email_add++;
$some = 1;
$history_entry = $GLOBALS['I18N']->get('Import of new subscriber');
# add the attributes for this user
foreach($attributes as $attr => $value) {
if (is_array($value)) {
$value = join(',',$value);
}
Sql_query(sprintf('replace into %s (attributeid,userid,value) values("%s","%s","%s")',
$tables["user_attribute"],$attr,$userid,addslashes($value)));
}
}
#add this user to the lists identified, execpt when found in the blacklist
$addition = 0;
$listoflists = "";
$isBlackListed = isBlackListed($email);
if (!$isBlackListed) {
foreach($importdata['importlists'] as $key => $listid) {
$query = "replace INTO ".$tables["listuser"]." (userid,listid,entered) values($userid,$listid,current_timestamp)";
$result = Sql_query($query);
# if the affected rows is 2, the user was already subscribed
$addition = $addition || Sql_Affected_Rows() == 1;
if (!empty($importdata['listname'][$key])) {
$listoflists .= " * ".$importdata['listname'][$key]."\n";
}
}
if ($addition) {
$additional_emails++;
}
}
$subscribemessage = str_replace('[LISTS]', $listoflists, getUserConfig("subscribemessage",$userid));
if (!TEST && $importdata['notify'] == "yes" && $addition) {
sendMail($email, getConfig("subscribesubject"), $subscribemessage,system_messageheaders(),$envelope);
if ($throttle_import) {
sleep($throttle_import);
}
}
# history stuff
$current_data = Sql_Fetch_Array_Query(sprintf('select * from %s where id = %d',$tables["user"],$userid));
$current_data = array_merge($current_data,getUserAttributeValues('',$userid));
foreach ($current_data as $key => $val) {
if (!is_numeric($key)) {
if (isset($old_data[$key]) && $old_data[$key] != $val && $key != "modified") {
$history_entry .= "$key = $val\nchanged from $old_data[$key]\n";
}
}
}
if (!$history_entry) {
$history_entry = "\n".$GLOBALS['I18N']->get('No data changed');
}
# check lists
$listmembership = array();
$req = Sql_Query("select * from {$tables["listuser"]} where userid = $userid");
while ($row = Sql_Fetch_Array($req)) {
$listmembership[$row["listid"]] = listName($row["listid"]);
}
$history_entry .= "\n".$GLOBALS['I18N']->get('List subscriptions:')."\n";
foreach ($old_listmembership as $key => $val) {
$history_entry .= $GLOBALS['I18N']->get('Was subscribed to:')." $val\n";
}
foreach ($listmembership as $key => $val) {
$history_entry .= $GLOBALS['I18N']->get('Is now subscribed to:')." $val\n";
}
if (!sizeof($listmembership)) {
$history_entry .= $GLOBALS['I18N']->get('Not subscribed to any lists')."\n";
}
addUserHistory($email,$GLOBALS['I18N']->get('Import by ').adminName(),$history_entry);
}; // end if
}; // end while
# lets be gramatically correct :-)
$displists = ($num_lists == 1) ? $GLOBALS['I18N']->get('list'): $GLOBALS['I18N']->get('lists');
$dispemail = ($count_email_add == 1) ? $GLOBALS['I18N']->get('new email was'): $GLOBALS['I18N']->get('new emails were');
$dispemail2 = ($additional_emails == 1) ? $GLOBALS['I18N']->get('email was'): $GLOBALS['I18N']->get('emails were');
if ($count_email_exist) {
$report .= "<br/> ".s('%d emails already existed in the database',$count_email_exist);
}
if(!$some && !$additional_emails) {
$report .= "<br/>".s('All the emails already exist in the database.');
} else {
$report .= "<br/>$count_email_add $dispemail ".s('succesfully imported to the database and added to')." $num_lists $displists.<br/>$additional_emails $dispemail2 ".$GLOBALS['I18N']->get('subscribed to the')." $displists";
}
$htmlupdate = $report.'<br/>'.PageLinkButton("import1",s('Import some more emails'));
$htmlupdate = str_replace("'","\'",$htmlupdate);
$status = '<script type="text/javascript">
var parentJQuery = window.parent.jQuery;
parentJQuery("#progressbar").progressbar("destroy");
parentJQuery("#busyimage").hide();
parentJQuery("#progresscount").html(\''.$htmlupdate.'\');
</script>';
@unlink($GLOBALS['tmpdir'].'/'.$file);
@unlink($GLOBALS['tmpdir'].'/'.$file.'.data');
# print ActionResult($report);
foreach ($GLOBALS['plugins'] as $pluginname => $plugin) {
$plugin->importReport($report);
}
Mr. DellatioNx196 GaLers xh3LL Backd00r 1.0, Coded By Mr. DellatioNx196 - Bogor BlackHat