1230 lines
38 KiB
PHP
1230 lines
38 KiB
PHP
<?php
|
|
/*
|
|
* osBilling - Open Billing Software
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
* Originally authored by Deon George
|
|
*
|
|
* @author Deon George <deonATleenooksDOTnet>
|
|
* @copyright 2009 Deon George
|
|
* @link http://osb.leenooks.net
|
|
* @license http://www.gnu.org/licenses/
|
|
* @package AgileBill
|
|
* @subpackage Import
|
|
*/
|
|
|
|
DEFINE('WHMCS_DIR','/var/www/whmcs/');
|
|
include_once WHMCS_DIR.'includes/functions.php';
|
|
|
|
/**
|
|
* WHMCS import module
|
|
*
|
|
* @package AgileBill
|
|
* @subpackage Import
|
|
*/
|
|
class import_plugin extends import {
|
|
private $encryption_key;
|
|
|
|
public function __construct() {
|
|
# Configure the database name, host, and login:
|
|
$this->host = 'localhost';
|
|
$this->db = '';
|
|
$this->user = '';
|
|
$this->pass = '';
|
|
$this->type = 'mysql';
|
|
|
|
# If importing CC details, enter the gateway plugin to use for recurring charges:
|
|
$this->gateway = 'AUTHORIZE_NET';
|
|
|
|
# Do not change anything past this line:
|
|
$this->name = 'WHMCS';
|
|
$this->plugin = 'WHMCS';
|
|
$this->select_limit = 50;
|
|
|
|
$this->instructions = '
|
|
<b>Preliminary Instructions:</b><br/><br/>
|
|
<ol>
|
|
<li>Open '. __FILE__ .' and edit the database settings, and the location to your WHMCS_DIR...</li>
|
|
<li>If you will be importing credit card details, paste the Checkout Plugin name from the checkout plugin list page to the "$this->gateway" value
|
|
that will be used to process all recurring charges... this should be a gateway such as AUTHORIZE_NET or LINKPOINT.</li>
|
|
<li>Make sure you have your TLD configurations set, before importing domains.</li>
|
|
<li>HINT: Before importing products, ensure that you have configured your map file, this will set the SKU, and will save you changing this data if you need to undo and re-import.</li>
|
|
</ol>';
|
|
|
|
array_push($this->actions,array(
|
|
'name' => 'test',
|
|
'desc' => '<b>Step 1:</b> Test the database connection',
|
|
'depn' => false
|
|
));
|
|
|
|
array_push($this->actions,array(
|
|
'name' => 'product_cat',
|
|
'desc' => '<b>Step 2:</b> Import the Product Categories',
|
|
'depn' => array('test')
|
|
));
|
|
|
|
array_push($this->actions,array(
|
|
'name' => 'products',
|
|
'desc' => '<b>Step 3:</b> Import the Products',
|
|
'depn' => array('test','product_cat')
|
|
));
|
|
|
|
array_push($this->actions,array(
|
|
'name' => 'accounts',
|
|
'desc' => '<b>Step 4:</b> Import the Accounts',
|
|
'depn' => array('test')
|
|
));
|
|
|
|
array_push($this->actions,array(
|
|
'name' => 'pre_services',
|
|
'desc' => '<b>Step 5:</b> Edit the Products (update the SKU details if necessary) then click Ready',
|
|
'depn' => array('products')
|
|
));
|
|
|
|
array_push($this->actions,array(
|
|
'name' => 'services',
|
|
'desc' => '<b>Step 6:</b> Import the Services',
|
|
'depn' => array('pre_services','accounts')
|
|
));
|
|
|
|
array_push($this->actions,array(
|
|
'name' => 'pre_tld',
|
|
'desc' => '<b>Step 7:</b> Set up your TLD then click Ready',
|
|
'depn' => array('test')
|
|
));
|
|
|
|
array_push($this->actions,array(
|
|
'name' => 'domains',
|
|
'desc' => '<b>Step 8:</b> Import the Domains',
|
|
'depn' => array('pre_tld','accounts')
|
|
));
|
|
|
|
array_push($this->actions,array(
|
|
'name' => 'invoices',
|
|
'desc' => '<b>Step 9:</b> Import the Invoices',
|
|
'depn' => array('services','accounts')
|
|
));
|
|
|
|
array_push($this->actions,array(
|
|
'name' => 'invoice_items',
|
|
'desc' => '<b>Step 10:</b> Import the Invoices Items',
|
|
'depn' => array('invoices')
|
|
));
|
|
|
|
array_push($this->actions,array(
|
|
'name' => 'payments',
|
|
'desc' => '<b>Step 11:</b> Import the Payments',
|
|
'depn' => array('invoices')
|
|
));
|
|
}
|
|
|
|
protected function pre_services() {
|
|
$this->pre_test();
|
|
}
|
|
|
|
protected function pre_tld() {
|
|
$this->pre_test();
|
|
}
|
|
|
|
/**
|
|
* Product Categories
|
|
*/
|
|
protected function product_cat() {
|
|
global $VAR,$C_debug;
|
|
|
|
# Connect to the remote DB
|
|
$dbr = &NewADOConnection($this->type);
|
|
$dbr->Connect($this->host,$this->user,$this->pass,$this->db);
|
|
|
|
# Determine the offset for the account
|
|
if (empty($VAR['offset']))
|
|
$VAR['offset'] = 0;
|
|
|
|
$offset = sprintf('%s,%s',$VAR['offset'],$this->select_limit);
|
|
$remote_table = 'tblproductgroups';
|
|
$ab_table = 'product_cat';
|
|
|
|
# Select
|
|
$sql = sprintf('SELECT * FROM %s',$remote_table);
|
|
$rs = $dbr->SelectLimit($sql,$this->select_limit,$offset);
|
|
|
|
if ($rs === false) {
|
|
$C_debug->alert(sprintf('Query to the table "%s" failed!',$remote_table));
|
|
|
|
return false;
|
|
}
|
|
|
|
if ($rs->RecordCount() == 0) {
|
|
$C_debug->alert('No more records to process!');
|
|
printf("<script type='text/javascript' language=javascript>setTimeout('document.location=\'?_page=import:import&plugin=%s\'',1500);</script>",$VAR['plugin']);
|
|
|
|
return;
|
|
}
|
|
|
|
$msg = sprintf('Processing %s Records...<br/>',$rs->RecordCount());
|
|
|
|
$map = array();
|
|
$map['name'] = 'name';
|
|
$map['position'] = 'order';
|
|
|
|
# Loop through each remote item
|
|
while (! $rs->EOF) {
|
|
$msg .= sprintf('<br/>Processing : %s...',$rs->fields['name']);
|
|
|
|
# Start a new transaction for the insert:
|
|
$db = &DB();
|
|
$db->StartTrans();
|
|
|
|
$update = array();
|
|
foreach ($map as $a => $b)
|
|
$update[$a] = $rs->fields[$b];
|
|
|
|
$update['parent_id'] = 0;
|
|
$update['group_avail'] = serialize(array('0'=>'0'));
|
|
$update['template'] = 'Paged Listing';
|
|
$update['notes'] = 'Imported from WHMCS';
|
|
$update['thumbnail'] = '';
|
|
$update['image'] = '';
|
|
$update['max'] = '10';
|
|
|
|
if ($rs->fields['hidden'] == 'on')
|
|
$update['status'] = 0;
|
|
else
|
|
$update['status'] = 1;
|
|
|
|
# Import the item
|
|
$db->Execute(sqlInsert($db,$ab_table,$update));
|
|
$id = $db->Execute(sqlSelect($db,$ab_table,'id',$update,'','0,1'));
|
|
|
|
# Insert the import record
|
|
$this->import_transaction($this->plugin,$VAR['action'],$ab_table,$id->fields['id'],$remote_table,$rs->fields['id'],$db);
|
|
|
|
# Complete the transaction
|
|
$db->CompleteTrans();
|
|
$rs->MoveNext();
|
|
}
|
|
|
|
$C_debug->alert($msg);
|
|
|
|
printf("<script type='text/javascript' language=javascript>setTimeout('document.location=\'?_page=core:blank&offset=%s&action=%s&plugin=%s&do[]=import:do_action\'', 1200);</script>",
|
|
$VAR['offset']+$this->select_limit,$VAR['action'],$VAR['plugin']);
|
|
}
|
|
|
|
/**
|
|
* Products
|
|
*/
|
|
protected function products() {
|
|
global $VAR,$C_debug;
|
|
|
|
# Connect to the remote DB
|
|
$dbr = &NewADOConnection($this->type);
|
|
$dbr->Connect($this->host,$this->user,$this->pass,$this->db);
|
|
|
|
# Determine the offset for the account
|
|
if (empty($VAR['offset']))
|
|
$VAR['offset'] = 0;
|
|
|
|
$offset = sprintf('%s,%s',$VAR['offset'],$this->select_limit);
|
|
$remote_table = 'tblproducts';
|
|
$ab_table = 'product';
|
|
|
|
# Select
|
|
$sql = sprintf('SELECT * FROM %s',$remote_table);
|
|
$rs = $dbr->SelectLimit($sql,$this->select_limit,$offset);
|
|
|
|
if ($rs === false) {
|
|
$C_debug->alert(sprintf('Query to the table "%s" failed!',$remote_table));
|
|
|
|
return false;
|
|
}
|
|
|
|
if ($rs->RecordCount() == 0) {
|
|
$C_debug->alert('No more records to process!');
|
|
printf("<script type='text/javascript' language=javascript>setTimeout('document.location=\'?_page=import:import&plugin=%s\'',1500);</script>",$VAR['plugin']);
|
|
|
|
return;
|
|
}
|
|
|
|
# Load Categories Imported
|
|
$db = &DB();
|
|
$imprs = $db->Execute(sqlSelect($db,'import','ab_id,remote_id',sprintf('plugin=::%s:: AND action=::%s::',$this->plugin,'product_cat')));
|
|
while (! $imprs->EOF) {
|
|
$cat[$imprs->fields['remote_id']] = $imprs->fields['ab_id'];
|
|
$imprs->MoveNext();
|
|
}
|
|
|
|
$msg = sprintf('Processing %s Records...<br/>',$rs->RecordCount());
|
|
|
|
# If there is a map file, open it
|
|
$pmap = $this->read_map();
|
|
|
|
# Table mapping
|
|
$map = array();
|
|
$map['price_setup'] = 'msetupfee';
|
|
$map['price_base'] = 'monthly';
|
|
|
|
# Loop through each remote item
|
|
while (! $rs->EOF) {
|
|
$msg .= sprintf('<br/>Processing : %s...',$rs->fields['name']);
|
|
|
|
# Start a new transaction for the insert:
|
|
$db = &DB();
|
|
$db->StartTrans();
|
|
|
|
$update = array();
|
|
foreach ($map as $a => $b)
|
|
$update[$a] = $rs->fields[$b];
|
|
|
|
$update['date_last'] = time();
|
|
$update['sku'] = sprintf('IMPORT-%s',$rs->fields['id']);
|
|
$update['taxable'] = 1;
|
|
$update['group_avail'] = serialize(array('0'=>'0'));
|
|
$update['avail_category_id'] = serialize(array('0'=>$cat[$rs->fields['gid']]));
|
|
$update['price_type'] = 1;
|
|
$update['price_recurr_default'] = 1;
|
|
$update['price_recurr_weekday'] = 1;
|
|
$update['price_recurr_week'] = 1;
|
|
$update['price_recurr_schedule'] = 0;
|
|
$update['price_recurr_type'] = 1;
|
|
|
|
if ($rs->fields['hidden'] == 'on')
|
|
$update['active'] = 0;
|
|
else
|
|
$update['active'] = 1;
|
|
|
|
# Pricing
|
|
$pricing = array();
|
|
# * Weekly
|
|
$pricing[0]['show'] = '0';
|
|
$pricing[0][0]['price_base'] = '0';
|
|
$pricing[0][0]['price_setup'] = '0';
|
|
# * Monthly
|
|
$pricing[1]['show'] = $rs->fields['monthly'] > 0 ? '1' : '0';
|
|
$pricing[1][0]['price_base'] = $rs->fields['monthly'];
|
|
$pricing[1][0]['price_setup'] = $rs->fields['msetupfee'];
|
|
# * Quarterly
|
|
$pricing[2]['show'] = $rs->fields['quarterly'] > 0 ? '1' : '0';
|
|
$pricing[2][0]['price_base'] = $rs->fields['quarterly'];
|
|
$pricing[2][0]['price_setup'] = $rs->fields['qsetupfee'];
|
|
# * 6 Months
|
|
$pricing[3]['show'] = $rs->fields['semiannual'] > 0 ? '1' : '0';
|
|
$pricing[3][0]['price_base'] = $rs->fields['semiannual'];
|
|
$pricing[3][0]['price_setup'] = $rs->fields['ssetupfee'];
|
|
# * 12 Months
|
|
$pricing[4]['show'] = $rs->fields['annual'] > 0 ? '1' : '0';
|
|
$pricing[4][0]['price_base'] = $rs->fields['annual'];
|
|
$pricing[4][0]['price_setup'] = $rs->fields['asetupfee'];
|
|
# * 24 Months
|
|
$pricing[5]['show'] = $rs->fields['biennial'] > 0 ? '1' : '0';
|
|
$pricing[5][0]['price_base'] = $rs->fields['biennial'];
|
|
$pricing[5][0]['price_setup'] = $rs->fields['bsetupfee'];
|
|
# * 36 Months
|
|
$pricing[6]['show'] = '0';
|
|
$pricing[6][0]['price_base'] = '0';
|
|
$pricing[6][0]['price_setup'] = '0';
|
|
|
|
$update['price_group'] = serialize($pricing);
|
|
|
|
# Get the fixed items in the map table.
|
|
if (isset($pmap[$ab_table][$rs->fields['id']*1]))
|
|
foreach ($pmap[$ab_table][$rs->fields['id']*1] as $field => $value)
|
|
$update[$field] = $value;
|
|
|
|
# Import the item
|
|
$db->Execute(sqlInsert($db,$ab_table,$update));
|
|
$id = $db->Execute(sqlSelect($db,$ab_table,'id',$update,'','0,1'));
|
|
|
|
# Insert the import record
|
|
$this->import_transaction($this->plugin,$VAR['action'],$ab_table,$id->fields['id'],$remote_table,$rs->fields['id'],$db);
|
|
|
|
# Add translations
|
|
$submap = array();
|
|
$submap['name'] = 'name';
|
|
$submap['description_short'] = 'name';
|
|
$submap['description_full'] = 'description';
|
|
|
|
$update = array();
|
|
foreach ($submap as $a => $b)
|
|
$update[$a] = $rs->fields[$b];
|
|
|
|
$update['language_id'] = DEFAULT_LANGUAGE;
|
|
$update['product_id'] = $id->fields['id'];
|
|
|
|
# @todo For some reason sqlInsert() generates an error, so we need to produce the SQL and run it normally
|
|
$update['site_id'] = DEFAULT_SITE;
|
|
# @todo It seems translations are referenced by 'id', rather than 'product_id'
|
|
$update['id'] = $id->fields['id'];
|
|
$sql = sprintf("INSERT INTO %s (%s) VALUES ('%s')",AGILE_DB_PREFIX.'product_translate',implode(',',array_keys($update)),implode("','",$update));
|
|
$pdrs = $db->Execute($sql);
|
|
if (! $pdrs && $db->_errorMsg) {
|
|
printf("<pre>* %s\n%s</pre>",$db->_errorMsg,$sql);
|
|
}
|
|
|
|
$this->import_transaction($this->plugin,$VAR['action'],'product_translate',$update['id'],'',$rs->fields['id'],$db);
|
|
|
|
# Complete the transaction
|
|
$db->CompleteTrans();
|
|
$rs->MoveNext();
|
|
}
|
|
|
|
$C_debug->alert($msg);
|
|
|
|
printf("<script type='text/javascript' language=javascript>setTimeout('document.location=\'?_page=core:blank&offset=%s&action=%s&plugin=%s&do[]=import:do_action\'', 1200);</script>",
|
|
$VAR['offset']+$this->select_limit,$VAR['action'],$VAR['plugin']);
|
|
}
|
|
|
|
/**
|
|
* Accounts
|
|
*/
|
|
protected function accounts() {
|
|
global $VAR,$C_debug;
|
|
|
|
# Files to your WHMCS installation (required to decrypt encrypted fields)
|
|
include_once WHMCS_DIR.'dbconnect.php';
|
|
|
|
# Connect to the remote DB
|
|
$dbr = &NewADOConnection($this->type);
|
|
$dbr->Connect($this->host,$this->user,$this->pass,$this->db);
|
|
|
|
# Determine the offset for the account
|
|
if (empty($VAR['offset']))
|
|
$VAR['offset'] = 0;
|
|
|
|
$offset = sprintf('%s,%s',$VAR['offset'],$this->select_limit);
|
|
$remote_table = 'tblclients';
|
|
$ab_table = 'account';
|
|
|
|
# Select
|
|
$sql = sprintf('SELECT * FROM %s',$remote_table);
|
|
$rs = $dbr->SelectLimit($sql,$this->select_limit,$offset);
|
|
|
|
if ($rs === false) {
|
|
$C_debug->alert(sprintf('Query to the table "%s" failed!',$remote_table));
|
|
|
|
return false;
|
|
}
|
|
|
|
if ($rs->RecordCount() == 0) {
|
|
$C_debug->alert('No more records to process!');
|
|
printf("<script type='text/javascript' language=javascript>setTimeout('document.location=\'?_page=import:import&plugin=%s\'',1500);</script>",$VAR['plugin']);
|
|
|
|
return;
|
|
}
|
|
|
|
$msg = sprintf('Processing %s Records...<br/>',$rs->RecordCount());
|
|
|
|
$map = array();
|
|
$map['username'] = 'email';
|
|
#$map['email'] = 'email';
|
|
$map['first_name'] = 'firstname';
|
|
$map['last_name'] = 'lastname';
|
|
$map['company'] = 'companyname';
|
|
$map['address1'] = 'address1';
|
|
$map['address2'] = 'address2';
|
|
$map['city'] = 'city';
|
|
$map['state'] = 'state';
|
|
$map['zip'] = 'postcode';
|
|
|
|
# Loop through each remote item
|
|
while (! $rs->EOF) {
|
|
$msg .= sprintf('<br/>Processing : %s...',$rs->fields['email']);
|
|
|
|
# Start a new transaction for the insert:
|
|
$db = &DB();
|
|
$db->StartTrans();
|
|
|
|
$update = array();
|
|
foreach ($map as $a => $b)
|
|
$update[$a] = $rs->fields[$b];
|
|
|
|
$update['date_orig'] = time();
|
|
$update['date_last'] = time();
|
|
$update['language_id'] = DEFAULT_LANGUAGE;
|
|
# @todo Work out currency based on country address
|
|
$update['country_id'] = '36';
|
|
$update['currency_id'] = '6';
|
|
$update['theme_id'] = DEFAULT_THEME;
|
|
$update['email_type'] = '1';
|
|
$update['invoice_delivery'] = '1';
|
|
$update['invoice_show_itemized'] = '1';
|
|
$update['invoice_grace'] = '0';
|
|
$update['invoice_advance_gen'] = '0';
|
|
|
|
if ($rs->fields['status'] == 'Active')
|
|
$update['status'] = 1;
|
|
else
|
|
$update['status'] = 0;
|
|
|
|
$update['password'] = md5(decrypt($rs->fields['password'],$encryption_key));
|
|
|
|
# Import the item
|
|
$db->Execute(sqlInsert($db,$ab_table,$update));
|
|
$id = $db->Execute(sqlSelect($db,$ab_table,'id',$update,'','0,1'));
|
|
|
|
# Insert the import record
|
|
$this->import_transaction($this->plugin,$VAR['action'],$ab_table,$id->fields['id'],$remote_table,$rs->fields['id'],$db);
|
|
|
|
# Complete the transaction
|
|
$db->CompleteTrans();
|
|
$rs->MoveNext();
|
|
}
|
|
|
|
$C_debug->alert($msg);
|
|
|
|
printf("<script type='text/javascript' language=javascript>setTimeout('document.location=\'?_page=core:blank&offset=%s&action=%s&plugin=%s&do[]=import:do_action\'', 1200);</script>",
|
|
$VAR['offset']+$this->select_limit,$VAR['action'],$VAR['plugin']);
|
|
}
|
|
|
|
/**
|
|
* Services
|
|
*/
|
|
protected function services() {
|
|
global $VAR,$C_debug;
|
|
|
|
# Files to your WHMCS installation (required to decrypt encrypted fields)
|
|
include_once WHMCS_DIR.'dbconnect.php';
|
|
|
|
# Connect to the remote DB
|
|
$dbr = &NewADOConnection($this->type);
|
|
$dbr->Connect($this->host,$this->user,$this->pass,$this->db);
|
|
|
|
# Determine the offset for the account
|
|
if (empty($VAR['offset']))
|
|
$VAR['offset'] = 0;
|
|
|
|
$offset = sprintf('%s,%s',$VAR['offset'],$this->select_limit);
|
|
$remote_table = 'tblhosting';
|
|
$ab_table = 'service';
|
|
|
|
# Select
|
|
$sql = '
|
|
SELECT tblhosting.id as id, userid, packageid, domainstatus, domain, amount, regdate, lastupdate, billingcycle, username, password, nextinvoicedate, tblproducts.name as product
|
|
FROM tblhosting,tblproducts where tblhosting.packageid=tblproducts.id';
|
|
$rs = $dbr->SelectLimit($sql,$this->select_limit,$offset);
|
|
|
|
if ($rs === false) {
|
|
$C_debug->alert(sprintf('Query to the table "%s" failed!',$remote_table));
|
|
|
|
return false;
|
|
}
|
|
|
|
if ($rs->RecordCount() == 0) {
|
|
$C_debug->alert('No more records to process!');
|
|
printf("<script type='text/javascript' language=javascript>setTimeout('document.location=\'?_page=import:import&plugin=%s\'',1500);</script>",$VAR['plugin']);
|
|
|
|
return;
|
|
}
|
|
|
|
$db = &DB();
|
|
|
|
# Load Products Imported
|
|
$imprs = $db->Execute(sqlSelect($db,'import','ab_id,remote_id',sprintf('plugin=::%s:: AND action=::%s:: AND remote_table=::%s::',$this->plugin,'products','tblproducts')));
|
|
while (! $imprs->EOF) {
|
|
$prod[$imprs->fields['remote_id']] = $imprs->fields['ab_id'];
|
|
$imprs->MoveNext();
|
|
}
|
|
|
|
# Load Accounts Imported
|
|
$imprs = $db->Execute(sqlSelect($db,'import','ab_id,remote_id',sprintf('plugin=::%s:: AND action=::%s:: AND remote_table=::%s::',$this->plugin,'accounts','tblclients')));
|
|
while (! $imprs->EOF) {
|
|
$account[$imprs->fields['remote_id']] = $imprs->fields['ab_id'];
|
|
$imprs->MoveNext();
|
|
}
|
|
|
|
$msg = sprintf('Processing %s Records...<br/>',$rs->RecordCount());
|
|
|
|
$map = array();
|
|
# @todo This amount includes tax, and needs to exclude it.
|
|
$map['price'] = 'amount';
|
|
|
|
# Loop through each remote item
|
|
while (! $rs->EOF) {
|
|
$msg .= sprintf('<br/>Processing : %s...',$rs->fields['id']);
|
|
|
|
# Start a new transaction for the insert:
|
|
$db = &DB();
|
|
$db->StartTrans();
|
|
|
|
$update = array();
|
|
foreach ($map as $a => $b)
|
|
$update[$a] = $rs->fields[$b];
|
|
|
|
# @todo This amount includes tax, and needs to work out tax.
|
|
$update['price'] = sprintf('%3.2f',$update['price']/11*10);
|
|
|
|
if (preg_match('/^ADSL/',$rs->fields['product'])) {
|
|
$update['prod_plugin_name'] = 'ADSL';
|
|
$update['type'] = 'product';
|
|
|
|
$sql = sprintf("SELECT fieldname,value FROM tblcustomfieldsvalues,tblcustomfields WHERE tblcustomfieldsvalues.fieldid=tblcustomfields.id AND tblcustomfieldsvalues.relid=%s AND tblcustomfields.relid=%s AND type='product'",$rs->fields['id'],$rs->fields['packageid']);
|
|
|
|
$plugin = array();
|
|
$update['prod_attr'] = '';
|
|
|
|
# Connect to the remote DB
|
|
$dbr = NewADOConnection($this->type);
|
|
$dbr->Connect($this->host,$this->user,$this->pass,$this->db);
|
|
|
|
$adsl = $dbr->Execute($sql);
|
|
|
|
if ($adsl && $adsl->RecordCount()) {
|
|
while (! $adsl->EOF) {
|
|
if (trim($adsl->fields['value'])) {
|
|
$plugin[$adsl->fields['fieldname']] = $adsl->fields['value'];
|
|
$update['prod_attr'] .= sprintf("%s==%s\r\n",$adsl->fields['fieldname'],$adsl->fields['value']);
|
|
$update['host_username'] = $rs->fields['username'];
|
|
$update['host_password'] = decrypt($rs->fields['password'],$encryption_key);
|
|
}
|
|
|
|
$adsl->MoveNext();
|
|
}
|
|
|
|
$update['prod_plugin_data'] = serialize($plugin);
|
|
}
|
|
|
|
} elseif ($rs->fields['domain']) {
|
|
$update['type'] = 'host';
|
|
$update['domain_name'] = $rs->fields['domain'];
|
|
$update['host_username'] = $rs->fields['username'];
|
|
$update['host_password'] = decrypt($rs->fields['password'],$encryption_key);
|
|
}
|
|
|
|
# Strip the leading zeros
|
|
$rs->fields['packageid'] *= 1;
|
|
$rs->fields['userid'] *= 1;
|
|
$update['product_id'] = $prod[$rs->fields['packageid']];
|
|
$update['account_id'] = $account[$rs->fields['userid']];
|
|
|
|
$db = &DB();
|
|
$sku = $db->Execute(sqlSelect($db,'product','sku',sprintf('id=%s',$update['product_id']),'','0,1'));
|
|
$update['sku'] = $sku->fields['sku'];
|
|
|
|
if ($rs->fields['domainstatus'] == 'Active')
|
|
$update['active'] = 1;
|
|
else
|
|
$update['active'] = 0;
|
|
|
|
$update['taxable'] = 1;
|
|
$update['recur_schedule_change'] = 0;
|
|
$update['suspend_billing'] = 0;
|
|
$update['recur_cancel'] = 0;
|
|
$update['recur_modify'] = 0;
|
|
|
|
switch ($rs->fields['billingcycle']) {
|
|
case 'Annually':
|
|
$update['recur_schedule'] = 4; //monthly
|
|
$update['recur_type'] = 0;
|
|
|
|
break;
|
|
|
|
case 'Monthly':
|
|
$update['recur_schedule'] = 1; //monthly
|
|
$update['recur_type'] = 1;
|
|
$update['recur_type'] = 1;
|
|
$update['recur_weekday'] = 1;
|
|
|
|
break;
|
|
|
|
case 'Quarterly':
|
|
$update['recur_schedule'] = 2; //quarterly
|
|
$update['recur_type'] = 1;
|
|
$update['recur_weekday'] = 1;
|
|
|
|
break;
|
|
|
|
case 'Biennially':
|
|
$update['recur_schedule'] = 5; //two-years
|
|
$update['recur_type'] = 0;
|
|
|
|
break;
|
|
|
|
default:
|
|
$update['recur_schedule'] = 0; //free?
|
|
$update['recur_type'] = 0;
|
|
};
|
|
|
|
$update['date_next_invoice'] = strtotime($rs->fields['nextinvoicedate']);
|
|
$update['date_orig'] = strtotime($rs->fields['regdate']);
|
|
$update['date_last'] = strtotime($rs->fields['lastupdate']);
|
|
|
|
# Import the item
|
|
$db->Execute(sqlInsert($db,$ab_table,$update));
|
|
$id = $db->Execute(sqlSelect($db,$ab_table,'id',$update,'','0,1'));
|
|
|
|
# Insert the import record
|
|
$this->import_transaction($this->plugin,$VAR['action'],$ab_table,$id->fields['id'],$remote_table,$rs->fields['id'],$db);
|
|
|
|
# Complete the transaction
|
|
$db->CompleteTrans();
|
|
$rs->MoveNext();
|
|
}
|
|
|
|
$C_debug->alert($msg);
|
|
|
|
printf("<script type='text/javascript' language=javascript>setTimeout('document.location=\'?_page=core:blank&offset=%s&action=%s&plugin=%s&do[]=import:do_action\'', 1200);</script>",
|
|
$VAR['offset']+$this->select_limit,$VAR['action'],$VAR['plugin']);
|
|
}
|
|
|
|
/**
|
|
* Domains
|
|
*/
|
|
protected function domains() {
|
|
global $VAR,$C_debug;
|
|
|
|
# Files to your WHMCS installation (required to decrypt encrypted fields)
|
|
include_once WHMCS_DIR.'dbconnect.php';
|
|
|
|
# Connect to the remote DB
|
|
$dbr = &NewADOConnection($this->type);
|
|
$dbr->Connect($this->host,$this->user,$this->pass,$this->db);
|
|
|
|
# Determine the offset for the account
|
|
if (empty($VAR['offset']))
|
|
$VAR['offset'] = 0;
|
|
|
|
$offset = sprintf('%s,%s',$VAR['offset'],$this->select_limit);
|
|
$remote_table = 'tbldomains';
|
|
$ab_table = 'service';
|
|
|
|
# Select
|
|
$sql = sprintf('SELECT * FROM %s',$remote_table);
|
|
$rs = $dbr->SelectLimit($sql,$this->select_limit,$offset);
|
|
|
|
if ($rs === false) {
|
|
$C_debug->alert(sprintf('Query to the table "%s" failed!',$remote_table));
|
|
|
|
return false;
|
|
}
|
|
|
|
if ($rs->RecordCount() == 0) {
|
|
$C_debug->alert('No more records to process!');
|
|
printf("<script type='text/javascript' language=javascript>setTimeout('document.location=\'?_page=import:import&plugin=%s\'',1500);</script>",$VAR['plugin']);
|
|
|
|
return;
|
|
}
|
|
|
|
$db = &DB();
|
|
|
|
# Load Accounts Imported
|
|
$imprs = $db->Execute(sqlSelect($db,'import','ab_id,remote_id',sprintf('plugin=::%s:: AND action=::%s:: AND remote_table=::%s::',$this->plugin,'accounts','tblclients')));
|
|
while (! $imprs->EOF) {
|
|
$account[$imprs->fields['remote_id']] = $imprs->fields['ab_id'];
|
|
$imprs->MoveNext();
|
|
}
|
|
|
|
$msg = sprintf('Processing %s Records...<br/>',$rs->RecordCount());
|
|
|
|
$map = array();
|
|
$map['domain_term'] = 'registrationperiod';
|
|
|
|
# Loop through each remote item
|
|
while (! $rs->EOF) {
|
|
$msg .= sprintf('<br/>Processing : %s...',$rs->fields['domain']);
|
|
|
|
# Start a new transaction for the insert:
|
|
$db = &DB();
|
|
$db->StartTrans();
|
|
|
|
$update = array();
|
|
foreach ($map as $a => $b)
|
|
$update[$a] = $rs->fields[$b];
|
|
|
|
# @todo Determine price from register details
|
|
$update['price'] = 45*$update['domain_term'];
|
|
|
|
$update['type'] = 'domain';
|
|
$update['sku'] = 'DOMAIN-RENEW';
|
|
|
|
# Strip the leading zeros
|
|
$rs->fields['userid'] *= 1;
|
|
$update['account_id'] = $account[$rs->fields['userid']];
|
|
|
|
if ($rs->fields['status'] == 'Active')
|
|
$update['active'] = 1;
|
|
else
|
|
$update['active'] = 0;
|
|
|
|
$update['price_type'] = 0;
|
|
$update['taxable'] = 1;
|
|
$update['domain_date_expire'] = strtotime($rs->fields['expirydate']);
|
|
|
|
switch ($rs->fields['type']) {
|
|
case 'Register':
|
|
default:
|
|
$update['domain_type'] = 'register';
|
|
break;
|
|
}
|
|
|
|
$update['date_next_invoice'] = strtotime($rs->fields['nextinvoicedate']);
|
|
$update['date_orig'] = strtotime($rs->fields['registrationdate']);
|
|
$update['date_last'] = time();
|
|
|
|
# Work out TLD and REGISTER PLUGIN
|
|
$arr = explode('.',strtolower($rs->fields['domain']));
|
|
$update['domain_tld'] = '';
|
|
$update['domain_name'] = $arr[0];
|
|
|
|
for ($i=1; $i<count($arr); $i++)
|
|
$update['domain_tld'] .= sprintf('.%s',$arr[$i]);
|
|
|
|
# Chop off the initial .
|
|
$update['domain_tld'] = preg_replace('/^\./','',$update['domain_tld']);
|
|
|
|
# Determine the tld_id
|
|
$tldrs = $db->Execute(sqlSelect($db,'host_tld','id,registrar_plugin_id',sprintf('name=::%s::',$update['domain_tld'])));
|
|
$update['domain_host_tld_id'] = $tldrs->fields['id'];
|
|
$update['domain_host_registrar_id'] = $tldrs->fields['registrar_plugin_id'];
|
|
|
|
# Import the item
|
|
$db->Execute(sqlInsert($db,$ab_table,$update));
|
|
$id = $db->Execute(sqlSelect($db,$ab_table,'id',$update,'','0,1'));
|
|
|
|
# Insert the import record
|
|
$this->import_transaction($this->plugin,$VAR['action'],$ab_table,$id->fields['id'],$remote_table,$rs->fields['id'],$db);
|
|
|
|
# Complete the transaction
|
|
$db->CompleteTrans();
|
|
$rs->MoveNext();
|
|
}
|
|
|
|
$C_debug->alert($msg);
|
|
|
|
printf("<script type='text/javascript' language=javascript>setTimeout('document.location=\'?_page=core:blank&offset=%s&action=%s&plugin=%s&do[]=import:do_action\'', 1200);</script>",
|
|
$VAR['offset']+$this->select_limit,$VAR['action'],$VAR['plugin']);
|
|
}
|
|
|
|
/**
|
|
* Invoices
|
|
*/
|
|
protected function invoices() {
|
|
global $VAR,$C_debug;
|
|
|
|
# Connect to the remote DB
|
|
$dbr = &NewADOConnection($this->type);
|
|
$dbr->Connect($this->host,$this->user,$this->pass,$this->db);
|
|
|
|
# Determine the offset for the account
|
|
if (empty($VAR['offset']))
|
|
$VAR['offset'] = 0;
|
|
|
|
$offset = sprintf('%s,%s',$VAR['offset'],$this->select_limit);
|
|
$remote_table = 'tblinvoices';
|
|
$ab_table = 'invoice';
|
|
|
|
# Select
|
|
$sql = sprintf('SELECT * FROM %s',$remote_table);
|
|
$rs = $dbr->SelectLimit($sql,$this->select_limit,$offset);
|
|
|
|
if ($rs === false) {
|
|
$C_debug->alert(sprintf('Query to the table "%s" failed!',$remote_table));
|
|
|
|
return false;
|
|
}
|
|
|
|
if ($rs->RecordCount() == 0) {
|
|
$C_debug->alert('No more records to process!');
|
|
printf("<script type='text/javascript' language=javascript>setTimeout('document.location=\'?_page=import:import&plugin=%s\'',1500);</script>",$VAR['plugin']);
|
|
|
|
return;
|
|
}
|
|
|
|
$db = &DB();
|
|
|
|
# Load Accounts Imported
|
|
$imprs = $db->Execute(sqlSelect($db,'import','ab_id,remote_id',sprintf('plugin=::%s:: AND action=::%s:: AND remote_table=::%s::',$this->plugin,'accounts','tblclients')));
|
|
while (! $imprs->EOF) {
|
|
$account[$imprs->fields['remote_id']] = $imprs->fields['ab_id'];
|
|
$imprs->MoveNext();
|
|
}
|
|
|
|
$msg = sprintf('Processing %s Records...<br/>',$rs->RecordCount());
|
|
|
|
$map = array();
|
|
# Our invoice ID should be preserved
|
|
$map['tax_amt'] = 'tax';
|
|
$map['total_amt'] = 'total';
|
|
|
|
# Loop through each remote item
|
|
while (! $rs->EOF) {
|
|
$msg .= sprintf('<br/>Processing : %s...',$rs->fields['id']);
|
|
|
|
# Start a new transaction for the insert:
|
|
$db = &DB();
|
|
$db->StartTrans();
|
|
|
|
$update = array();
|
|
foreach ($map as $a => $b)
|
|
$update[$a] = $rs->fields[$b];
|
|
|
|
# Strip the leading zeros
|
|
$rs->fields['userid'] *= 1;
|
|
$update['account_id'] = $account[$rs->fields['userid']];
|
|
|
|
# @todo Might be nice to automatically work out the currency
|
|
$update['billed_currency_id'] = 6;
|
|
$update['actual_billed_currency_id'] = 6;
|
|
$update['type'] = 1;
|
|
|
|
$update['date_orig'] = strtotime($rs->fields['date']);
|
|
$update['due_date'] = strtotime($rs->fields['duedate']);
|
|
$update['refund_status'] = 0;
|
|
|
|
$update['total_amt'] += $rs->fields['credit'];
|
|
switch ($rs->fields['status']) {
|
|
case 'Unpaid':
|
|
$update['billed_amt'] = 0;
|
|
$update['process_status'] = 1;
|
|
$update['billing_status'] = 0;
|
|
$update['status'] = 1;
|
|
|
|
break;
|
|
|
|
case 'Paid':
|
|
$update['billed_amt'] = $rs->fields['total']+$rs->fields['credit'];
|
|
$update['process_status'] = 1;
|
|
$update['billing_status'] = 1;
|
|
$update['status'] = 1;
|
|
|
|
break;
|
|
|
|
case 'Cancelled':
|
|
$update['billed_amt'] = 0;
|
|
$update['process_status'] = 0;
|
|
$update['billing_status'] = 0;
|
|
$update['status'] = 0;
|
|
|
|
break;
|
|
}
|
|
|
|
# Import the item
|
|
$db->Execute(sqlInsert($db,$ab_table,$update,$rs->fields['id']));
|
|
|
|
# Insert the import record
|
|
$this->import_transaction($this->plugin,$VAR['action'],$ab_table,$rs->fields['id'],$remote_table,$rs->fields['id'],$db);
|
|
|
|
# Complete the transaction
|
|
$db->CompleteTrans();
|
|
$rs->MoveNext();
|
|
}
|
|
|
|
$C_debug->alert($msg);
|
|
|
|
printf("<script type='text/javascript' language=javascript>setTimeout('document.location=\'?_page=core:blank&offset=%s&action=%s&plugin=%s&do[]=import:do_action\'', 1200);</script>",
|
|
$VAR['offset']+$this->select_limit,$VAR['action'],$VAR['plugin']);
|
|
}
|
|
|
|
/**
|
|
* Invoice Items
|
|
*/
|
|
protected function invoice_items() {
|
|
global $VAR,$C_debug;
|
|
|
|
# Connect to the remote DB
|
|
$dbr = &NewADOConnection($this->type);
|
|
$dbr->Connect($this->host,$this->user,$this->pass,$this->db);
|
|
|
|
# Determine the offset for the account
|
|
if (empty($VAR['offset']))
|
|
$VAR['offset'] = 0;
|
|
|
|
$offset = sprintf('%s,%s',$VAR['offset'],$this->select_limit);
|
|
$remote_table = 'tblinvoiceitems';
|
|
$ab_table = 'invoice_item';
|
|
|
|
# Select
|
|
$sql = sprintf('SELECT * FROM %s',$remote_table);
|
|
$rs = $dbr->SelectLimit($sql,$this->select_limit,$offset);
|
|
|
|
if ($rs === false) {
|
|
$C_debug->alert(sprintf('Query to the table "%s" failed!',$remote_table));
|
|
|
|
return false;
|
|
}
|
|
|
|
if ($rs->RecordCount() == 0) {
|
|
$C_debug->alert('No more records to process!');
|
|
printf("<script type='text/javascript' language=javascript>setTimeout('document.location=\'?_page=import:import&plugin=%s\'',1500);</script>",$VAR['plugin']);
|
|
|
|
return;
|
|
}
|
|
|
|
$db = &DB();
|
|
|
|
# Load Products Imported
|
|
$imprs = $db->Execute(sqlSelect($db,'import','ab_id,remote_id',sprintf('plugin=::%s:: AND action=::%s:: AND remote_table=::%s::',$this->plugin,'services','tblhosting')));
|
|
while (! $imprs->EOF) {
|
|
$service[$imprs->fields['remote_id']] = $imprs->fields['ab_id'];
|
|
$imprs->MoveNext();
|
|
}
|
|
|
|
# Load Accounts Imported
|
|
$imprs = $db->Execute(sqlSelect($db,'import','ab_id,remote_id',sprintf('plugin=::%s:: AND action=::%s:: AND remote_table=::%s::',$this->plugin,'accounts','tblclients')));
|
|
while (! $imprs->EOF) {
|
|
$account[$imprs->fields['remote_id']] = $imprs->fields['ab_id'];
|
|
$imprs->MoveNext();
|
|
}
|
|
|
|
# Load Domains Imported
|
|
$imprs = $db->Execute(sqlSelect($db,'import','ab_id,remote_id',sprintf('plugin=::%s:: AND action=::%s:: AND remote_table=::%s::',$this->plugin,'domains','tbldomains')));
|
|
while (! $imprs->EOF) {
|
|
$domain[$imprs->fields['remote_id']] = $imprs->fields['ab_id'];
|
|
$imprs->MoveNext();
|
|
}
|
|
|
|
# Load Products Imported
|
|
$imprs = $db->Execute(sqlSelect($db,'import','ab_id,remote_id',sprintf('plugin=::%s:: AND action=::%s:: AND remote_table=::%s::',$this->plugin,'products','tblproducts')));
|
|
while (! $imprs->EOF) {
|
|
$prod[$imprs->fields['remote_id']] = $imprs->fields['ab_id'];
|
|
$imprs->MoveNext();
|
|
}
|
|
|
|
$msg = sprintf('Processing %s Records...<br/>',$rs->RecordCount());
|
|
|
|
$map = array();
|
|
# Our invoice ID should be preserved
|
|
$map['invoice_id'] = 'invoiceid';
|
|
$map['product_name'] = 'description';
|
|
|
|
# Loop through each remote item
|
|
while (! $rs->EOF) {
|
|
$msg .= sprintf('<br/>Processing : %s...',$rs->fields['id']);
|
|
|
|
# Start a new transaction for the insert:
|
|
$db = &DB();
|
|
$db->StartTrans();
|
|
|
|
$update = array();
|
|
foreach ($map as $a => $b)
|
|
$update[$a] = $rs->fields[$b];
|
|
|
|
# Strip the leading zeros
|
|
$rs->fields['relid'] *= 1;
|
|
$rs->fields['userid'] *= 1;
|
|
|
|
$update['account_id'] = $account[$rs->fields['userid']];
|
|
$update['item_type'] = 3;
|
|
$update['price_type'] = 0;
|
|
|
|
$product = '';
|
|
switch ($rs->fields['type']) {
|
|
case 'Addon':
|
|
break;
|
|
|
|
case 'Domain':
|
|
if (isset($domain[$rs->fields['relid']]))
|
|
$update['service_id'] = $domain[$rs->fields['relid']];
|
|
|
|
$update['sku'] = 'DOMAIN-REGISTER';
|
|
break;
|
|
|
|
|
|
default:
|
|
if (isset($service[$rs->fields['relid']]))
|
|
$update['service_id'] = $service[$rs->fields['relid']];
|
|
|
|
# Get the Product
|
|
$dbr = &NewADOConnection($this->type);
|
|
$dbr->Connect($this->host,$this->user,$this->pass,$this->db);
|
|
|
|
$tldrs = $dbr->Execute(sprintf('SELECT packageid FROM tblhosting WHERE id=%s',$rs->fields['relid']));
|
|
if (isset($tldrs->fields['packageid'])) {
|
|
$tldrs->fields['packageid'] *= 1;
|
|
$update['product_id'] = $prod[$tldrs->fields['packageid']];
|
|
|
|
$db = &DB();
|
|
$sku = $db->Execute(sqlSelect($db,'product','sku',sprintf('id=%s',$update['product_id']),'','0,1'));
|
|
$update['sku'] = $sku->fields['sku'];
|
|
|
|
$prod_name = $dbr->Execute(sprintf('SELECT name,paytype from tblproducts WHERE id=%s',$tldrs->fields['packageid']));
|
|
$product = $prod_name->fields['name'];
|
|
|
|
if ($prod_name->fields['paytype'] == 'recurring') {
|
|
$update['price_type'] = 1;
|
|
$update['item_type'] = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
# Detect the dates and domain from the product_name
|
|
if ($update['product_name']) {
|
|
# Chop of the dates.
|
|
$reg = '/\s+\(([0-9]+\/[0-9]+\/[0-9]+)\s+-\s+([0-9]+\/[0-9]+\/[0-9]+)\)$/';
|
|
|
|
$matches = array();
|
|
if (preg_match($reg,$update['product_name'],$matches)) {
|
|
$update['date_start'] = strtotime(str_replace('/','-',$matches[1]));
|
|
$update['date_stop'] = strtotime(str_replace('/','-',$matches[2]));
|
|
$update['product_name'] = str_replace($matches[0],'',$update['product_name']);
|
|
|
|
# Find the domain portion
|
|
if (isset($product) && $product) {
|
|
$product_reg = str_replace('/','\/',$product);
|
|
if (preg_match("/^{$product_reg}\s+/",$update['product_name'])) {
|
|
$aaa = preg_replace("/^{$product_reg}\s+-\s+/",'',$update['product_name']);
|
|
|
|
if ($update['product_name'] != $product) {
|
|
$update['domain_name'] = $aaa;
|
|
$update['product_name'] = preg_replace("/\s+-\s+{$aaa}/",'',$update['product_name']);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$update['quantity'] = 1;
|
|
$update['tax_amt'] = sprintf('%3.2f',$rs->fields['amount']/11);
|
|
$update['total_amt'] = $rs->fields['amount']-$update['tax_amt'];
|
|
$update['price_base'] = $rs->fields['amount']-$update['tax_amt'];
|
|
|
|
# Import the item
|
|
$db = &DB();
|
|
$id = sqlGenID($db,$ab_table);
|
|
$result = $db->Execute(sqlInsert($db,$ab_table,$update,$id));
|
|
|
|
# Insert the import record
|
|
$this->import_transaction($this->plugin,$VAR['action'],$ab_table,$id,$remote_table,$rs->fields['id'],$db);
|
|
|
|
# Complete the transaction
|
|
$db->CompleteTrans();
|
|
$rs->MoveNext();
|
|
}
|
|
|
|
$C_debug->alert($msg);
|
|
|
|
printf("<script type='text/javascript' language=javascript>setTimeout('document.location=\'?_page=core:blank&offset=%s&action=%s&plugin=%s&do[]=import:do_action\'', 1200);</script>",
|
|
$VAR['offset']+$this->select_limit,$VAR['action'],$VAR['plugin']);
|
|
}
|
|
|
|
/**
|
|
* Payments
|
|
*/
|
|
protected function payments() {
|
|
global $VAR,$C_debug;
|
|
|
|
# Connect to the remote DB
|
|
$dbr = &NewADOConnection($this->type);
|
|
$dbr->Connect($this->host,$this->user,$this->pass,$this->db);
|
|
|
|
# Determine the offset for the account
|
|
if (empty($VAR['offset']))
|
|
$VAR['offset'] = 0;
|
|
|
|
$offset = sprintf('%s,%s',$VAR['offset'],$this->select_limit);
|
|
$remote_table = 'tblaccounts';
|
|
$ab_table = 'payment';
|
|
|
|
# Select
|
|
$sql = sprintf('SELECT * FROM %s',$remote_table);
|
|
$rs = $dbr->SelectLimit($sql,$this->select_limit,$offset);
|
|
|
|
if ($rs === false) {
|
|
$C_debug->alert(sprintf('Query to the table "%s" failed!',$remote_table));
|
|
|
|
return false;
|
|
}
|
|
|
|
if ($rs->RecordCount() == 0) {
|
|
$C_debug->alert('No more records to process!');
|
|
printf("<script type='text/javascript' language=javascript>setTimeout('document.location=\'?_page=import:import&plugin=%s\'',1500);</script>",$VAR['plugin']);
|
|
|
|
return;
|
|
}
|
|
|
|
# Load Checkout Plugins
|
|
$db = &DB();
|
|
$imprs = $db->Execute(sqlSelect($db,'checkout','id,checkout_plugin',''));
|
|
while (! $imprs->EOF) {
|
|
$co[$imprs->fields['checkout_plugin']] = $imprs->fields['id'];
|
|
$imprs->MoveNext();
|
|
}
|
|
|
|
# Load Accounts Imported
|
|
$imprs = $db->Execute(sqlSelect($db,'import','ab_id,remote_id',sprintf('plugin=::%s:: AND action=::%s:: AND remote_table=::%s::',$this->plugin,'accounts','tblclients')));
|
|
while (! $imprs->EOF) {
|
|
$account[$imprs->fields['remote_id']] = $imprs->fields['ab_id'];
|
|
$imprs->MoveNext();
|
|
}
|
|
|
|
$msg = sprintf('Processing %s Records...<br/>',$rs->RecordCount());
|
|
|
|
# If there is a map file, open it
|
|
$pmap = $this->read_map();
|
|
|
|
# Table mapping
|
|
$map = array();
|
|
$map['notes'] = 'description';
|
|
$map['total_amt'] = 'amountin';
|
|
$map['fees_amt'] = 'fees';
|
|
|
|
# Loop through each remote item
|
|
while (! $rs->EOF) {
|
|
$msg .= sprintf('<br/>Processing : %s...',$rs->fields['invoiceid']);
|
|
|
|
# Start a new transaction for the insert:
|
|
$db = &DB();
|
|
$db->StartTrans();
|
|
|
|
$update = array();
|
|
foreach ($map as $a => $b)
|
|
$update[$a] = $rs->fields[$b];
|
|
|
|
$update['account_id'] = $account[$rs->fields['userid']*1];
|
|
$update['checkout_plugin_id'] = $account[$rs->fields['userid']*1];
|
|
$update['date_payment'] = strtotime($rs->fields['date']);
|
|
$update['date_orig'] = strtotime($rs->fields['date']);
|
|
if ($rs->fields['transid'])
|
|
$update['checkout_plugin_data'] = serialize(array('transid'=>$rs->fields['transid']));
|
|
# Get the fixed items in the map table.
|
|
if (isset($pmap[$ab_table][$rs->fields['gateway']])) {
|
|
foreach ($pmap[$ab_table][$rs->fields['gateway']] as $field => $value) {
|
|
if (isset($co[$value]))
|
|
$update[$field] = $co[$value];
|
|
else {
|
|
$update[$field] = sprintf('NOMAP-%s',$rs->fields['gateway']);
|
|
}
|
|
}
|
|
}
|
|
|
|
# Import the item
|
|
$db->Execute($r=sqlInsert($db,$ab_table,$update));
|
|
$id = $db->Execute($q=sqlSelect($db,$ab_table,'id',$update,'','0,1'));
|
|
|
|
# Insert the import record
|
|
$this->import_transaction($this->plugin,$VAR['action'],$ab_table,$id->fields['id'],$remote_table,$rs->fields['id'],$db);
|
|
|
|
$update = array();
|
|
$update['date_orig'] = strtotime($rs->fields['date']);
|
|
$update['payment_id'] = $id->fields['id'];
|
|
$update['invoice_id'] = $rs->fields['invoiceid'];
|
|
$update['alloc_amt'] = $rs->fields['amountin'];
|
|
|
|
$db->Execute($r=sqlInsert($db,'payment_item',$update));
|
|
$pi = $db->Execute($q=sqlSelect($db,'payment_item','id',$update,'','0,1'));
|
|
|
|
$this->import_transaction($this->plugin,$VAR['action'],'payment_item',$pi->fields['id'],'',null,$db);
|
|
|
|
# Complete the transaction
|
|
$db->CompleteTrans();
|
|
$rs->MoveNext();
|
|
}
|
|
|
|
$C_debug->alert($msg);
|
|
|
|
printf("<script type='text/javascript' language=javascript>setTimeout('document.location=\'?_page=core:blank&offset=%s&action=%s&plugin=%s&do[]=import:do_action\'', 1200);</script>",
|
|
$VAR['offset']+$this->select_limit,$VAR['action'],$VAR['plugin']);
|
|
}
|
|
}
|
|
?>
|