2079 lines
58 KiB
PHP
2079 lines
58 KiB
PHP
<?php
|
|
|
|
/**
|
|
* AgileBill - Open Billing Software
|
|
*
|
|
* This body of work is free software; you can redistribute it and/or
|
|
* modify it under the terms of the Open AgileBill License
|
|
* License as published at http://www.agileco.com/agilebill/license1-4.txt
|
|
*
|
|
* For questions, help, comments, discussion, etc., please join the
|
|
* Agileco community forums at http://forum.agileco.com/
|
|
*
|
|
* @link http://www.agileco.com/
|
|
* @copyright 2004-2008 Agileco, LLC.
|
|
* @license http://www.agileco.com/agilebill/license1-4.txt
|
|
* @author Tony Landis <tony@agileco.com>
|
|
* @package AgileBill
|
|
* @version 1.4.93
|
|
*/
|
|
|
|
class db_mapping
|
|
{
|
|
var $sync_limit=100;
|
|
|
|
# Open the constructor for this mod
|
|
function construct()
|
|
{
|
|
# name of this module:
|
|
$this->module = "db_mapping";
|
|
|
|
# location of the construct XML file:
|
|
$this->xml_construct = PATH_MODULES . $this->module . "/" . $this->module . "_construct.xml";
|
|
|
|
# open the construct file for parsing
|
|
$C_xml = new CORE_xml;
|
|
$construct = $C_xml->xml_to_array($this->xml_construct);
|
|
|
|
$this->method = $construct["construct"]["method"];
|
|
$this->trigger = $construct["construct"]["trigger"];
|
|
$this->field = $construct["construct"]["field"];
|
|
$this->table = $construct["construct"]["table"];
|
|
$this->module = $construct["construct"]["module"];
|
|
$this->cache = $construct["construct"]["cache"];
|
|
$this->order_by = $construct["construct"]["order_by"];
|
|
$this->limit = $construct["construct"]["limit"];
|
|
}
|
|
|
|
|
|
########################################################################
|
|
### Syncronize all accounts & groups
|
|
########################################################################
|
|
|
|
function sync($VAR)
|
|
{
|
|
$id = @$VAR['id'];
|
|
$db = &DB();
|
|
$sql= 'SELECT * FROM '.AGILE_DB_PREFIX.'db_mapping WHERE id = '.$db->qstr(@$VAR["id"]).' AND site_id = '.$db->qstr(DEFAULT_SITE);
|
|
$result = $db->Execute($sql);
|
|
|
|
### error reporting:
|
|
if ($result === false) {
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','sync', $db->ErrorMsg());
|
|
echo $db->ErrorMsg();
|
|
return;
|
|
}
|
|
|
|
$file = $result->fields['map_file'];
|
|
$group_map = $result->fields['group_map'];
|
|
|
|
if($file != '')
|
|
{
|
|
include_once(PATH_PLUGINS . 'db_mapping/'. $file.'.php');
|
|
eval ( '$_MAP = new map_'. strtoupper ( $file ) . ';' );
|
|
$_MAP->sync($id, $file);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
##############################
|
|
## Connect to the remote db #
|
|
##############################
|
|
|
|
function &DB_connect($id, $map_file)
|
|
{
|
|
|
|
### Get the variables for this map plugin:
|
|
$db = &DB();
|
|
$sql= 'SELECT * FROM '.AGILE_DB_PREFIX.'db_mapping WHERE ';
|
|
|
|
if($id)
|
|
$sql .= ' id = '.$db->qstr($id).' AND ';
|
|
else if($map_file)
|
|
$sql .= ' map_file = '.$db->qstr($map_file).' AND ';
|
|
|
|
$sql .= ' site_id = '.$db->qstr(DEFAULT_SITE);
|
|
$result = $db->Execute($sql);
|
|
if ($result === false) {
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','DB_connect', $db->ErrorMsg()); return;
|
|
}
|
|
|
|
$file = $result->fields['map_file'];
|
|
if($file != '')
|
|
{
|
|
include_once(PATH_PLUGINS . 'db_mapping/'. $file.'.php');
|
|
eval ( '$_MAP = new map_'. strtoupper ( $file ) . ';' );
|
|
|
|
### Get the DB settings
|
|
$db_name = $result->fields['db_name'];
|
|
$db_host = $result->fields['db_host'];
|
|
$db_prefix = $result->fields['db_prefix'];
|
|
$db_user = $result->fields['db_user'];
|
|
$db_pass = $result->fields['db_pass'];
|
|
@$db_type = $_MAP->map['db_type'];
|
|
|
|
if($db_host == '*') $db_host = AGILE_DB_HOST;
|
|
if($db_user == '*') $db_user = AGILE_DB_USERNAME;
|
|
if($db_pass == '*') $db_pass = AGILE_DB_PASSWORD;
|
|
if($db_type == '') $db_type = 'mysql';
|
|
|
|
$const = 'DB2_PREFIX' . strtoupper($file);
|
|
if(!defined($const)) eval ( 'define ("'.$const.'", "'.$db_prefix.'");' );
|
|
|
|
$this->db_prefix = $db_prefix;
|
|
|
|
### Connect to the remote Db;
|
|
$ADODB = &NewADOConnection($db_type);
|
|
$ADODB->Connect($db_host, $db_user, $db_pass, $db_name);
|
|
$ADODB_FETCH_MODE = 'ADODB_FETCH_ASSOC';
|
|
return $ADODB;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
|
|
##############################
|
|
## ADD ##
|
|
##############################
|
|
function add($VAR)
|
|
{
|
|
$this->construct();
|
|
global $C_translate;
|
|
|
|
$type = "add";
|
|
$this->method["$type"] = explode(",", $this->method["$type"]);
|
|
|
|
# set the field list for this method:
|
|
$arr = $this->method["$type"];
|
|
|
|
# define the validation class
|
|
include_once(PATH_CORE . 'validate.inc.php');
|
|
$validate = new CORE_validate;
|
|
$this->validated = true;
|
|
|
|
|
|
####################################################################
|
|
# loop through the field list to validate the required fields
|
|
####################################################################
|
|
|
|
while (list ($key, $value) = each ($arr))
|
|
{
|
|
# get the field value
|
|
$field_var = $this->module . '_' . $value;
|
|
$field_name = $value;
|
|
$this->validate = true;
|
|
|
|
####################################################################
|
|
# perform any field validation...
|
|
####################################################################
|
|
|
|
# check if this value is unique
|
|
if(isset($this->field["$value"]["unique"]) && isset($VAR["$field_var"]))
|
|
{
|
|
if(!$validate->validate_unique($this->table, $field_name, "record_id", $VAR["$field_var"]))
|
|
{
|
|
$this->validated = false;
|
|
$this->val_error[] = array('field' => $this->table . '_' . $field_name,
|
|
'field_trans' => $C_translate->translate('field_' . $field_name, $this->module, ""), # translate
|
|
'error' => $C_translate->translate('validate_unique',"", ""));
|
|
}
|
|
}
|
|
|
|
# check if the submitted value meets the specifed requirements
|
|
if(isset($this->field["$value"]["validate"]))
|
|
{
|
|
if(isset($VAR["$field_var"]))
|
|
{
|
|
if($VAR["$field_var"] != '')
|
|
{
|
|
if(!$validate->validate($field_name, $this->field["$value"], $VAR["$field_var"], $this->field["$value"]["validate"]))
|
|
{
|
|
$this->validated = false;
|
|
$this->val_error[] = array('field' => $this->module . '_' . $field_name,
|
|
'field_trans' => $C_translate->translate('field_' . $field_name, $this->module, ""),
|
|
'error' => $validate->error["$field_name"] );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$this->validated = false;
|
|
$this->val_error[] = array('field' => $this->module . '_' . $field_name,
|
|
'field_trans' => $C_translate->translate('field_' . $field_name, $this->module, ""),
|
|
'error' => $C_translate->translate('validate_any',"", ""));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$this->validated = false;
|
|
$this->val_error[] = array('field' => $this->module . '_' . $field_name,
|
|
'field_trans' => $C_translate->translate('field_' . $field_name, $this->module, ""),
|
|
'error' => $C_translate->translate('validate_any',"", ""));
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
####################################################################
|
|
# If validation was failed, skip the db insert &
|
|
# set the errors & origonal fields as Smarty objects,
|
|
# and change the page to be loaded.
|
|
####################################################################
|
|
|
|
if(!$this->validated)
|
|
{
|
|
global $smarty;
|
|
|
|
# set the errors as a Smarty Object
|
|
$smarty->assign('form_validation', $this->val_error);
|
|
|
|
# set the page to be loaded
|
|
if(!defined("FORCE_PAGE"))
|
|
{
|
|
define('FORCE_PAGE', $VAR['_page_current']);
|
|
}
|
|
|
|
# define any triggers
|
|
if(isset($this->trigger["$type"]))
|
|
{
|
|
include_once(PATH_CORE . 'trigger.inc.php');
|
|
$trigger = new CORE_trigger;
|
|
$trigger->trigger($this->trigger["$type"], 0, $VAR);
|
|
}
|
|
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
# begin the new database class:
|
|
$db = &DB();
|
|
|
|
|
|
# loop through the field list to create the sql queries
|
|
$field_list = '';
|
|
$i = 0;
|
|
reset($arr);
|
|
while (list ($key, $value) = each ($arr))
|
|
{
|
|
# get the field value
|
|
$field_var = $this->module . '_' . $value;
|
|
$field_name = $value;
|
|
|
|
####################################################################
|
|
# perform any special actions
|
|
####################################################################
|
|
# md5, rc5, pgp, gpg, time, date, date-time
|
|
|
|
if(isset($this->field["$value"]["convert"]) && isset($VAR["$field_var"]))
|
|
{
|
|
# do the conversion...
|
|
$VAR["$field_var"] = $validate->convert($field_name, $VAR["$field_var"], $this->field["$value"]["convert"]);
|
|
}
|
|
|
|
|
|
if(isset($VAR["$field_var"]))
|
|
{
|
|
$field_list .= ", " . $value . "=" . $db->qstr($VAR["$field_var"]);
|
|
}
|
|
}
|
|
|
|
# add a comma before the site_id if needed
|
|
if($field_list != '')
|
|
{
|
|
$field_list .= ',';
|
|
}
|
|
|
|
# determine the record id:
|
|
$this->record_id = $db->GenID(AGILE_DB_PREFIX . "" . $this->table.'_id');
|
|
|
|
# determine the record id, if it is an ACCOUNT record
|
|
if($this->table == 'account') $this->record_id = md5($this->record_id . '' . microtime());
|
|
|
|
# define the new ID as a constant
|
|
define(strtoupper('NEW_RECORD_'.$this->table.'_ID'), $this->record_id);
|
|
|
|
# generate the full query
|
|
$q = "INSERT INTO ".AGILE_DB_PREFIX."$this->table
|
|
SET
|
|
id = ". $db->qstr($this->record_id)."
|
|
$field_list
|
|
site_id = " . $db->qstr(DEFAULT_SITE);
|
|
|
|
# execute the query
|
|
$result = $db->Execute($q);
|
|
|
|
# error reporting:
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('database.inc.php','add', $db->ErrorMsg());
|
|
|
|
if(isset($this->trigger["$type"]))
|
|
{
|
|
include_once(PATH_CORE . 'trigger.inc.php');
|
|
$trigger = new CORE_trigger;
|
|
$trigger->trigger($this->trigger["$type"], 0, $VAR);
|
|
}
|
|
}
|
|
|
|
|
|
$VAR["id"] = $this->record_id;
|
|
@$redirect_page = $VAR['_page'];
|
|
define('REDIRECT_PAGE', '?_page=' . $redirect_page . '&id=' . $this->record_id . '&s=' . SESS);
|
|
|
|
# RUN ANY INSTALL SCRIPT!
|
|
$file = $VAR['db_mapping_map_file'];
|
|
if($file != '')
|
|
{
|
|
include_once (PATH_PLUGINS . 'db_mapping/'. $file.'.php');
|
|
eval ( '$_MAP = new map_'. strtoupper ( $file ) . ';' );
|
|
|
|
if ( isset($_MAP->map['install']) && $_MAP->map['install'] == true)
|
|
{
|
|
$_MAP->install();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
##############################
|
|
## VIEW ##
|
|
##############################
|
|
function view($VAR)
|
|
{
|
|
global $smarty;
|
|
$this->construct();
|
|
|
|
$type = "view";
|
|
$this->method["$type"] = explode(",", $this->method["$type"]);
|
|
$db = new CORE_database;
|
|
$db->view($VAR, $this, $type);
|
|
|
|
### Define the group mapping....
|
|
$id = @$VAR['id'];
|
|
|
|
### Get the variables for this map plugin:
|
|
$db = &DB();
|
|
$sql= 'SELECT * FROM '.AGILE_DB_PREFIX.'db_mapping WHERE
|
|
id = '.$db->qstr(@$VAR["id"]).' AND
|
|
site_id = '.$db->qstr(DEFAULT_SITE);
|
|
$result = $db->Execute($sql);
|
|
|
|
### error reporting:
|
|
if ($result === false) { global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','view', $db->ErrorMsg()); return;
|
|
}
|
|
|
|
$file = $result->fields['map_file'];
|
|
|
|
$group_map = $result->fields['group_map'];
|
|
if($group_map != '')
|
|
$group_map = unserialize ( $group_map );
|
|
else
|
|
$group_map = Array();
|
|
|
|
if($file != '')
|
|
{
|
|
include_once (PATH_PLUGINS . 'db_mapping/'. $file.'.php');
|
|
eval ( '$_MAP = new map_'. strtoupper ( $file ) . ';' );
|
|
|
|
### If this map type is 'db' groups based:
|
|
if ($_MAP->map['group_type'] == 'db' || $_MAP->map['group_type'] == 'db-status')
|
|
{
|
|
### Connect to the DB & get the groups:
|
|
$dbm = new db_mapping;
|
|
$db = $dbm->DB_connect($id, 'false');
|
|
eval ( '@$db_prefix = DB2_PREFIX'. strtoupper($file) .';' );
|
|
$sql = "SELECT * FROM " . $db_prefix . "" . $_MAP->map['group_map']['table'] . "
|
|
ORDER BY " . $_MAP->map['group_map']['name'];
|
|
$db2 = $db->Execute($sql);
|
|
if ($db2 === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','view', $db->ErrorMsg());
|
|
$smarty->assign('db_mapping_result', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
### get the remote groups...
|
|
if($db2->RecordCount() > 0)
|
|
{
|
|
|
|
|
|
$i=0;
|
|
while ( !$db2->EOF )
|
|
{
|
|
$smart[$i]['id'] = $db2->fields[$_MAP->map['group_map']['id']];
|
|
$smart[$i]['name'] = $db2->fields[$_MAP->map['group_map']['name']];
|
|
$db2->MoveNext();
|
|
$i++;
|
|
}
|
|
|
|
### Get the local groups:
|
|
$db = &DB();
|
|
$sql = 'SELECT * FROM '.AGILE_DB_PREFIX.'group WHERE
|
|
site_id = '.$db->qstr(DEFAULT_SITE).'
|
|
ORDER BY name';
|
|
$groups = $db->Execute($sql);
|
|
if ($groups === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','view', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
if($groups->RecordCount() > 0)
|
|
{
|
|
$i=0;
|
|
while ( !$groups->EOF )
|
|
{
|
|
$id = $groups->fields['id'];
|
|
$smartgr[$i]['id'] = $groups->fields['id'];
|
|
$smartgr[$i]['name'] = $groups->fields['name'];
|
|
|
|
|
|
for($ii=0; $ii<count($smart); $ii++)
|
|
{
|
|
$rid = $smart[$ii]['id'];
|
|
$name= $smart[$ii]['name'];
|
|
$checked = false;
|
|
if(isset($group_map[$id][$rid]) && $group_map[$id][$rid] != false )
|
|
$checked = true;
|
|
$smartgr[$i]['remote'][$ii]['id'] = $rid;
|
|
$smartgr[$i]['remote'][$ii]['name'] = $name;
|
|
$smartgr[$i]['remote'][$ii]['check']= $checked;
|
|
}
|
|
|
|
$groups->MoveNext();
|
|
$i++;
|
|
}
|
|
|
|
### Define smarty vars
|
|
$smarty->assign('db_mapping_result', false);
|
|
$smarty->assign('db_mapping_template', 'db_mapping:group_map_' . $_MAP->map['group_type']);
|
|
$smarty->assign('db_mapping_groups', $smartgr);
|
|
}
|
|
else
|
|
{
|
|
global $C_translate;
|
|
$message = $C_translate->translate('no_local_groups','db_mapping','');
|
|
$smarty->assign('db_mapping_result', $message);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
global $C_translate;
|
|
$message = $C_translate->translate('no_remote_groups','db_mapping','');
|
|
$smarty->assign('db_mapping_result', $message);
|
|
}
|
|
}
|
|
elseif ( $_MAP->map['group_type'] == 'status' )
|
|
{
|
|
### This is at 'status' based database map
|
|
|
|
### Get the local groups:
|
|
$db = &DB();
|
|
$sql = 'SELECT * FROM '.AGILE_DB_PREFIX.'group WHERE
|
|
site_id = '.$db->qstr(DEFAULT_SITE).'
|
|
ORDER BY name';
|
|
$groups = $db->Execute($sql);
|
|
### error reporting:
|
|
if ($groups === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','view', $db->ErrorMsg()); return;
|
|
}
|
|
if($groups->RecordCount() > 0)
|
|
{
|
|
$i=0;
|
|
while ( !$groups->EOF )
|
|
{
|
|
$id = $groups->fields['id'];
|
|
$smart[$i]['id'] = $groups->fields['id'];
|
|
$smart[$i]['name'] = $groups->fields['name'];
|
|
@$smart[$i]['value'] = $group_map[$id];
|
|
$groups->MoveNext();
|
|
$i++;
|
|
}
|
|
}
|
|
|
|
|
|
### Assign the smarty vars:
|
|
$smarty->assign('db_mapping_result', false);
|
|
$smarty->assign('db_mapping_template', 'db_mapping:group_map_status');
|
|
$smarty->assign('db_mapping_groups', $smart);
|
|
}
|
|
else
|
|
{
|
|
### No group mapping for this database map
|
|
global $C_translate;
|
|
$message = $C_translate->translate('no_group_mapping','db_mapping','');
|
|
$smarty->assign('db_mapping_result', $message);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
global $C_translate;
|
|
$message = $C_translate->translate('file_error','db_mapping','');
|
|
$smarty->assign('db_mapping_result', $message);
|
|
}
|
|
}
|
|
|
|
##############################
|
|
## UPDATE ##
|
|
##############################
|
|
function update($VAR)
|
|
{
|
|
$this->construct();
|
|
$type = "update";
|
|
$this->method["$type"] = explode(",", $this->method["$type"]);
|
|
$db = new CORE_database;
|
|
$db->update($VAR, $this, $type);
|
|
}
|
|
|
|
##############################
|
|
## DELETE ##
|
|
##############################
|
|
function delete($VAR)
|
|
{
|
|
$this->construct();
|
|
$db = new CORE_database;
|
|
$db->mass_delete($VAR, $this, "");
|
|
}
|
|
|
|
|
|
|
|
##############################
|
|
## SEARCH ##
|
|
##############################
|
|
function search($VAR)
|
|
{
|
|
$this->construct();
|
|
|
|
### Read the contents of the /plugins/db_mapping directory:
|
|
$count = 0;
|
|
chdir(PATH_PLUGINS . 'db_mapping');
|
|
$dir = opendir(PATH_PLUGINS . 'db_mapping');
|
|
while ($file_name = readdir($dir))
|
|
{
|
|
if($file_name != '..' && $file_name != '.')
|
|
{
|
|
$count++;
|
|
}
|
|
}
|
|
|
|
# define the DB vars as a Smarty accessible block
|
|
global $smarty;
|
|
|
|
# create the search record:
|
|
if($count > 0)
|
|
{
|
|
# create the search record
|
|
include_once(PATH_CORE . 'search.inc.php');
|
|
$search = new CORE_search;
|
|
$arr['module'] = $this->module;
|
|
$arr['sql'] = '';
|
|
$arr['limit'] = '999';
|
|
$arr['order_by']= 'name';
|
|
$arr['results'] = $count;
|
|
$search->add($arr);
|
|
|
|
# define the search id and other parameters for Smarty
|
|
$smarty->assign('search_id', $search->id);
|
|
|
|
# page:
|
|
$smarty->assign('page', '1');
|
|
|
|
# limit:
|
|
$smarty->assign('limit', '999');
|
|
|
|
# order_by:
|
|
$smarty->assign('order_by', 'name');
|
|
|
|
# define the result count
|
|
$smarty->assign('results', $count);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
##############################
|
|
## SEARCH SHOW ##
|
|
##############################
|
|
|
|
function search_show($VAR)
|
|
{
|
|
$this->construct();
|
|
|
|
### Read the contents of the /plugins/db_mapping directory:
|
|
$count = 0;
|
|
chdir(PATH_PLUGINS . 'db_mapping');
|
|
$dir = opendir(PATH_PLUGINS . 'db_mapping');
|
|
while ($file_name = readdir($dir))
|
|
{
|
|
if($file_name != '..' && $file_name != '.')
|
|
{
|
|
$result[$count]['name'] = preg_replace('/.php/', '', $file_name);
|
|
$result[$count]['id'] = $count;
|
|
|
|
### Get the status of this plugin:
|
|
$db = &DB();
|
|
$q = 'SELECT status,id FROM '.AGILE_DB_PREFIX.'db_mapping WHERE
|
|
map_file = '. $db->qstr($result[$count]['name']) . ' AND
|
|
site_id = '. $db->qstr(DEFAULT_SITE);
|
|
$dbmap = $db->Execute($q);
|
|
|
|
### error reporting:
|
|
if ($dbmap === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','search_show', $db->ErrorMsg()); return;
|
|
}
|
|
|
|
if($dbmap->RecordCount() > 0)
|
|
{
|
|
$result[$count]['id'] = $dbmap->fields['id'];
|
|
$result[$count]['status'] = 1;
|
|
$result[$count]['active'] = $dbmap->fields['status'];
|
|
} else {
|
|
$result[$count]['status'] = 0;
|
|
}
|
|
|
|
$count++;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
$class_name = TRUE;
|
|
for ($i=0; $i<count($result); $i++)
|
|
{
|
|
$smart[$i] = $result[$i];
|
|
if($class_name)
|
|
{
|
|
$smart[$i]['_C'] = 'row1';
|
|
$class_name = FALSE;
|
|
} else {
|
|
$smart[$i]['_C'] = 'row2';
|
|
$class_name = TRUE;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
# define the DB vars as a Smarty accessible block
|
|
global $smarty;
|
|
|
|
# define the results
|
|
$smarty->assign($this->table, $smart);
|
|
$smarty->assign('page', $VAR['page']);
|
|
$smarty->assign('order', $smarty_order);
|
|
$smarty->assign('sort', $smarty_sort);
|
|
$smarty->assign('limit', $search->limit);
|
|
$smarty->assign('search_id',$search->id);
|
|
$smarty->assign('results', $count);
|
|
|
|
# total pages
|
|
$smarty->assign('pages', 1);
|
|
|
|
# current page
|
|
$smarty->assign('page', 1);
|
|
$page_arr = '';
|
|
|
|
# page array for menu
|
|
$smarty->assign('page_arr', $page_arr);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
################################################################################
|
|
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
################################################################################
|
|
|
|
|
|
########################################################################
|
|
### Add a new account to the remote db
|
|
########################################################################
|
|
|
|
function account_add ( $account_id )
|
|
{
|
|
$db = &DB();
|
|
$sql= 'SELECT * FROM '.AGILE_DB_PREFIX.'db_mapping WHERE
|
|
status = '.$db->qstr(1).' AND
|
|
site_id = '.$db->qstr(DEFAULT_SITE);
|
|
$result = $db->Execute($sql);
|
|
|
|
### error reporting:
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','account_add', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
while ( !$result->EOF )
|
|
{
|
|
$file = $result->fields['map_file'];
|
|
$id = $result->fields['id'];
|
|
if($file != '')
|
|
{
|
|
include_once (PATH_PLUGINS . 'db_mapping/'. $file.'.php');
|
|
eval ( '$_MAP = new map_'. strtoupper ( $file ) . ';' );
|
|
$_MAP->plaintext_password = $this->plaintext_password;
|
|
$_MAP->account_add ( $account_id );
|
|
unset ($_MAP);
|
|
}
|
|
$result->MoveNext();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
########################################################################
|
|
### Edit an existing account in the remote db
|
|
########################################################################
|
|
|
|
function account_edit ( $account_id, $old_username )
|
|
{
|
|
$db = &DB();
|
|
$sql= 'SELECT * FROM '.AGILE_DB_PREFIX.'db_mapping WHERE
|
|
status = '.$db->qstr(1).' AND
|
|
site_id = '.$db->qstr(DEFAULT_SITE);
|
|
$result = $db->Execute($sql);
|
|
|
|
### error reporting:
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','account_edit', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
while ( !$result->EOF )
|
|
{
|
|
$file = $result->fields['map_file'];
|
|
$id = $result->fields['id'];
|
|
if($file != '')
|
|
{
|
|
include_once (PATH_PLUGINS . 'db_mapping/'. $file.'.php');
|
|
eval ( '$_MAP = new map_'. strtoupper ( $file ) . ';' );
|
|
$_MAP->plaintext_password = $this->plaintext_password;
|
|
$_MAP->account_edit ( $account_id, $old_username );
|
|
unset ($_MAP);
|
|
}
|
|
$result->MoveNext();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
########################################################################
|
|
### Delete an account from the remote db
|
|
########################################################################
|
|
|
|
function account_delete ( $account_id, $username )
|
|
{
|
|
$db = &DB();
|
|
$sql= 'SELECT * FROM '.AGILE_DB_PREFIX.'db_mapping WHERE
|
|
status = '.$db->qstr(1).' AND
|
|
site_id = '.$db->qstr(DEFAULT_SITE);
|
|
$result = $db->Execute($sql);
|
|
|
|
### error reporting:
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','account_delete', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
while ( !$result->EOF )
|
|
{
|
|
$file = $result->fields['map_file'];
|
|
$id = $result->fields['id'];
|
|
if($file != '')
|
|
{
|
|
include_once (PATH_PLUGINS . 'db_mapping/'. $file.'.php');
|
|
eval ( '$_MAP = new map_'. strtoupper ( $file ) . ';' );
|
|
$_MAP->account_delete ( $account_id, $username );
|
|
unset ($_MAP);
|
|
}
|
|
$result->MoveNext();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
########################################################################
|
|
### Sync the remote groups for a specific user
|
|
########################################################################
|
|
|
|
function account_group_sync ( $account_id )
|
|
{
|
|
$db = &DB();
|
|
$sql= 'SELECT * FROM '.AGILE_DB_PREFIX.'db_mapping WHERE
|
|
status = '.$db->qstr(1).' AND
|
|
site_id = '.$db->qstr(DEFAULT_SITE);
|
|
$result = $db->Execute($sql);
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','account_group_sync', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
while ( !$result->EOF )
|
|
{
|
|
$file = $result->fields['map_file'];
|
|
$id = $result->fields['id'];
|
|
if($file != '')
|
|
{
|
|
include_once (PATH_PLUGINS . 'db_mapping/'. $file.'.php');
|
|
eval ( '$_MAP = new map_'. strtoupper ( $file ) . ';' );
|
|
$_MAP->account_group_sync ( $account_id );
|
|
unset ($_MAP);
|
|
}
|
|
$result->MoveNext();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
########################################################################
|
|
### Log the user in
|
|
########################################################################
|
|
|
|
function login ( $account_id )
|
|
{
|
|
|
|
$db = &DB();
|
|
$sql= 'SELECT * FROM '.AGILE_DB_PREFIX.'db_mapping WHERE
|
|
status = '.$db->qstr(1).' AND
|
|
site_id = '.$db->qstr(DEFAULT_SITE);
|
|
$result = $db->Execute($sql);
|
|
|
|
### error reporting:
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','login', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
while ( !$result->EOF )
|
|
{
|
|
$file = $result->fields['map_file'];
|
|
$id = $result->fields['id'];
|
|
$cookie = $result->fields['cookie_name'];
|
|
if($file != '')
|
|
{
|
|
include_once (PATH_PLUGINS . 'db_mapping/'. $file.'.php');
|
|
eval ( '$_MAP = new map_'. strtoupper ( $file ) . ';' );
|
|
$_MAP->login ( $account_id, $cookie);
|
|
unset ($_MAP);
|
|
}
|
|
$result->MoveNext();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
########################################################################
|
|
### Log the user out
|
|
########################################################################
|
|
|
|
function logout ( $account_id )
|
|
{
|
|
$db = &DB();
|
|
$sql= 'SELECT * FROM '.AGILE_DB_PREFIX.'db_mapping WHERE
|
|
status = '.$db->qstr(1).' AND
|
|
site_id = '.$db->qstr(DEFAULT_SITE);
|
|
$result = $db->Execute($sql);
|
|
|
|
### error reporting:
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','logout', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
while ( !$result->EOF )
|
|
{
|
|
$file = $result->fields['map_file'];
|
|
$id = $result->fields['id'];
|
|
$cookie = $result->fields['cookie_name'];
|
|
if($file != '')
|
|
{
|
|
include_once (PATH_PLUGINS . 'db_mapping/'. $file.'.php');
|
|
eval ( '$_MAP = new map_'. strtoupper ( $file ) . ';' );
|
|
$_MAP->logout ( $account_id, $cookie );
|
|
unset ($_MAP);
|
|
}
|
|
$result->MoveNext();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
################################################################################
|
|
# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
|
################################################################################
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
############################################################################
|
|
#>>>>> default sync module
|
|
############################################################################
|
|
|
|
function MAP_sync ($id, $file, $MAP_this)
|
|
{
|
|
global $C_debug, $C_translate, $VAR;
|
|
|
|
$message='';
|
|
$remote_complete=false;
|
|
$local_complete=false;
|
|
$count_exp=0;
|
|
$count_upd=0;
|
|
$count_imp=0;
|
|
|
|
// set limits for large databases:
|
|
$offset=-1;
|
|
if(!empty($VAR['offset'])) $offset=$VAR['offset'];
|
|
|
|
# get total number of accounts
|
|
$db = &DB();
|
|
$sql= 'SELECT count(*) as idx FROM '.AGILE_DB_PREFIX.'account WHERE site_id = '. DEFAULT_SITE .' AND status=1';
|
|
$result = $db->Execute($sql);
|
|
$total_accounts = $result->fields['idx'];
|
|
if($total_accounts < $offset) $local_complete=true;
|
|
|
|
# Loop through each account in the LOCAL DB to update / add the record to the REMOTE DB...
|
|
if(!$local_complete)
|
|
{
|
|
$sql= 'SELECT id,username,email FROM '.AGILE_DB_PREFIX.'account WHERE site_id = '.DEFAULT_SITE.' AND status=1';
|
|
$result = $db->SelectLimit($sql, $this->sync_limit, $offset);
|
|
if ($result === false) {
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_sync:1', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
# loop through local accounts
|
|
while ( !$result->EOF ) {
|
|
$account_id = $result->fields['id'];
|
|
$user = $result->fields['username'];
|
|
$email = $result->fields['email'];
|
|
|
|
# Check if an account with this username or e-mail exists in the REMOTE DB:
|
|
$dbm = new db_mapping;
|
|
$dbx = $dbm->DB_connect($id, 'false');
|
|
eval ( '@$db_prefix = DB2_PREFIX'. strtoupper($file) .';' );
|
|
$sql = "SELECT * FROM " . $db_prefix . $MAP_this->map['account_map_field'] . "
|
|
WHERE " . $MAP_this->map['account_fields']['username']['map_field']. " = ".$dbx->qstr($user);
|
|
$rs2 = $dbx->Execute($sql);
|
|
if ($rs2 === false) {
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_sync:2', $dbx->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
if($rs2->RecordCount() == 0) {
|
|
# Account does not exist: ADD IT
|
|
if(!eregi('admin', $user) && !eregi('administrator', $user)) {
|
|
$MAP_this->account_add($account_id);
|
|
$count_exp++;
|
|
}
|
|
} else {
|
|
# Account exist: UPDATE IT - Skip if user is 'admin' or 'administrator'
|
|
if(!eregi('admin', $user) && !eregi('administrator', $user)) {
|
|
$MAP_this->account_edit($account_id, $user);
|
|
$count_upd++;
|
|
}
|
|
}
|
|
$result->MoveNext();
|
|
}
|
|
}
|
|
|
|
# get total number of remote accounts
|
|
$dbm = new db_mapping;
|
|
$dbx = $dbm->DB_connect(false, $MAP_this->map['map']);
|
|
eval ( '@$db_prefix = DB2_PREFIX'. strtoupper($MAP_this->map['map']) .';' );
|
|
$sql = "SELECT count(*) as idx FROM " . $db_prefix . $MAP_this->map['account_map_field'];
|
|
$result = $dbx->Execute($sql);
|
|
$total_accounts = $result->fields['idx'];
|
|
if($total_accounts < $offset) $remote_complete=true;
|
|
|
|
// loop through remote accounts
|
|
if(!$remote_complete) {
|
|
|
|
$sql = "SELECT * FROM " . $db_prefix . $MAP_this->map['account_map_field'];
|
|
$result = $dbx->SelectLimit($sql, $this->sync_limit, $offset);
|
|
if ($result === false) {
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_sync:3', $dbx->ErrorMsg());
|
|
return;
|
|
}
|
|
while ( !$result->EOF )
|
|
{
|
|
$fld_account_id = $MAP_this->map['account_fields']['id']['map_field'];
|
|
$fld_user = $MAP_this->map['account_fields']['username']['map_field'];
|
|
$fld_email = $MAP_this->map['account_fields']['email']['map_field'];
|
|
|
|
$account_id = $result->fields[$fld_account_id];
|
|
$user = $result->fields[$fld_user];
|
|
$email = $result->fields[$fld_email];
|
|
|
|
# Check if an account with this username or e-mail exists in the LOCAL DB:
|
|
$db = &DB();
|
|
$sql= 'SELECT id FROM '.AGILE_DB_PREFIX.'account WHERE
|
|
( username= '.$db->qstr($user).' OR email = '.$db->qstr($email).' ) AND
|
|
site_id = '.DEFAULT_SITE .' AND status=1';
|
|
$db2 = $db->Execute($sql);
|
|
if ($db2 === false) {
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_sync:4', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
if($db2->RecordCount() == 0) {
|
|
# Account does not exist: ADD IT - Skip if user is 'admin' or 'administrator'
|
|
if(!eregi('admin', $user) && !eregi('administrator', $user))
|
|
$MAP_this->account_import($account_id);
|
|
$count_imp++;
|
|
}
|
|
$result->MoveNext();
|
|
}
|
|
}
|
|
|
|
$C_translate->value['db_mapping']['count_exp'] = $count_exp;
|
|
$message .= $C_translate->translate('exported','db_mapping', '');
|
|
|
|
$C_translate->value['db_mapping']['count_upd'] = $count_upd;
|
|
$message .= "<BR>". $C_translate->translate('updated','db_mapping', '');
|
|
|
|
$C_translate->value['db_mapping']['count_imp'] = $count_imp;
|
|
$message .= "<BR>". $C_translate->translate('imported','db_mapping', '');
|
|
|
|
if($remote_complete && $local_complete) {
|
|
$message .= "<br>Local and Remote Account Sync completed after processing $offset records.<br>";
|
|
} else {
|
|
$offset+=$this->sync_limit;
|
|
$url = "?_page=db_mapping:view&id=$id&do[]=db_mapping:sync&offset=$offset";
|
|
$message .= "<br>Syncing Local and Remote Databases, please be patient as this screen will continue to refresh until all results have been processed. <BR> Total Records Processed: $offset<br>";
|
|
$message .= "<a href=\"$url\">Click here if the page does not refresh</a>";
|
|
$message .= "<script language=javascript>document.location='$url';</script>";
|
|
}
|
|
|
|
$C_debug->alert($message);
|
|
}
|
|
|
|
|
|
|
|
|
|
############################################################################
|
|
#>>>>> default Account Add module
|
|
############################################################################
|
|
|
|
function MAP_account_add( $account_id, $MAP_this )
|
|
{
|
|
### Get the local account details
|
|
$db = &DB();
|
|
$sql= 'SELECT * FROM '.AGILE_DB_PREFIX.'account WHERE
|
|
site_id = '.$db->qstr(DEFAULT_SITE).' AND
|
|
id = '.$db->qstr($account_id);
|
|
$result = $db->Execute($sql);
|
|
|
|
### error reporting:
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_add', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
### Create the insert statement
|
|
$dbm = new db_mapping;
|
|
$db = $dbm->DB_connect(false, $MAP_this->map['map']);
|
|
eval ( '@$db_prefix = DB2_PREFIX'. strtoupper($MAP_this->map['map']) .';' );
|
|
$sql = "INSERT INTO " .
|
|
$db_prefix . "" . $MAP_this->map['account_map_field'] . ' SET ';
|
|
|
|
### Define the main fields
|
|
$comma=false;
|
|
reset ( $MAP_this->map['account_fields'] );
|
|
while ( list ($key, $val) = each ( $MAP_this->map['account_fields'] ))
|
|
{
|
|
if ( $val['map_field'] && $key != 'id')
|
|
{
|
|
if($comma) $sql .= " , ";
|
|
$sql .= $val['map_field'] . " = ". $db->qstr($result->fields[$key]);
|
|
$comma = true;
|
|
}
|
|
elseif ( $val['map_field'] && $key == 'id')
|
|
{
|
|
if(isset($val['unique']) && $val['unique'] == '1')
|
|
{
|
|
$remote_account_id = $db->GenID($db_prefix . "" . $MAP_this->map['account_map_field'] . '_id');
|
|
if($comma) $sql .= " , ";
|
|
$sql .= $val['map_field'] . " = ". $db->qstr($remote_account_id);
|
|
$comma = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
### Define any custom fields
|
|
for($i=0; $i<count($MAP_this->map['extra_field']); $i++)
|
|
{
|
|
if ( $MAP_this->map['extra_field'][$i]['add'] )
|
|
{
|
|
if($comma) $sql .= " , ";
|
|
$value = $MAP_this->map['extra_field'][$i]['value'];
|
|
|
|
# conversion
|
|
if ($value == 'random|64')
|
|
$value = rand(999,99999) .''. md5(microtime() . '-' . rand(999,9999));
|
|
if ($value == 'random|32')
|
|
$value = md5(microtime() . rand(999,99999));
|
|
|
|
$sql .= $MAP_this->map['extra_field'][$i]['name'] . " = ".$db->qstr($value);
|
|
$comma = true;
|
|
}
|
|
}
|
|
$result = $db->Execute($sql);
|
|
|
|
### error reporting:
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_add', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
############################################################################
|
|
#>>>>> default Account Edit method
|
|
############################################################################
|
|
|
|
function MAP_account_edit($account_id, $old_username, $MAP_this)
|
|
{
|
|
$db = &DB();
|
|
if( $old_username == '')
|
|
{
|
|
### Get the username:
|
|
$sql = 'SELECT username FROM ' . AGILE_DB_PREFIX . 'account WHERE
|
|
site_id = ' . $db->qstr(DEFAULT_SITE) . ' AND
|
|
id = ' . $db->qstr($account_id);
|
|
$result = $db->Execute($sql);
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_edit(1)', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
if($result->RecordCount() > 0)
|
|
{
|
|
$old_username = $result->fields['username'];
|
|
}
|
|
}
|
|
|
|
|
|
if (@$old_username == strtolower('admin') ||
|
|
@$old_username == strtolower('administrator'))
|
|
return false;
|
|
|
|
### Get the current account details from the local db
|
|
$sql= "SELECT * FROM " . AGILE_DB_PREFIX . "account WHERE
|
|
id = " . $db->qstr($account_id) . " AND
|
|
site_id = " . $db->qstr(DEFAULT_SITE);
|
|
$result=$db->Execute($sql);
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_edit(2)', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
### Create the sql update statement
|
|
unset($db);
|
|
$dbm = new db_mapping;
|
|
$db = $dbm->DB_connect(false, $MAP_this->map['map']);
|
|
eval ( '@$db_prefix = DB2_PREFIX'. strtoupper($MAP_this->map['map']) .';' );
|
|
$sql = "UPDATE " .
|
|
$db_prefix . "" . $MAP_this->map['account_map_field'] . ' SET ';
|
|
|
|
|
|
### Define the main fields
|
|
$comma=false;
|
|
reset ( $MAP_this->map['account_fields'] );
|
|
while ( list ($key, $val) = each ( $MAP_this->map['account_fields'] ))
|
|
{
|
|
if ( $val['map_field'] && $key != 'id')
|
|
{
|
|
if($comma) $sql .= " , ";
|
|
$sql .= $val['map_field'] . " = ". $db->qstr($result->fields[$key]);
|
|
$comma = true;
|
|
}
|
|
}
|
|
|
|
### Define any custom fields
|
|
for($i=0; $i<count($MAP_this->map['extra_field']); $i++)
|
|
{
|
|
if ( $MAP_this->map['extra_field'][$i]['edit'] )
|
|
{
|
|
if($comma) $sql .= " , ";
|
|
$sql .= $MAP_this->map['extra_field'][$i]['name'] . " = ".
|
|
$db->qstr($MAP_this->map['extra_field'][$i]['value']);
|
|
$comma = true;
|
|
}
|
|
}
|
|
|
|
### Update the account in the remote db
|
|
$sql .= " WHERE " . $MAP_this->map['account_fields']['username']['map_field'] .
|
|
' = ' . $db->qstr($old_username);
|
|
$result = $db->Execute($sql);
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_edit(3)', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
############################################################################
|
|
#>>>>> default Account Deletion method
|
|
############################################################################
|
|
|
|
function MAP_account_delete($account_id, $username, $MAP_this)
|
|
{
|
|
### Check if delete is allowed for this db map:
|
|
if ( !isset($MAP_this->map['account_sync_field']['delete']) ||
|
|
!$MAP_this->map['account_sync_field']['delete'] )
|
|
return false;
|
|
|
|
### Check if username is defined
|
|
if ( $username == '')
|
|
{
|
|
### Get the username:
|
|
$db = &DB();
|
|
$sql = 'SELECT username FROM ' . AGILE_DB_PREFIX . 'account WHERE
|
|
site_id = ' . $db->qstr(DEFAULT_SITE) . ' AND
|
|
id = ' . $db->qstr($account_id);
|
|
$result = $db->Execute($sql);
|
|
|
|
### error reporting:
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_delete', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
if($result->RecordCount > 0)
|
|
{
|
|
$username = $result->fields['username'];
|
|
}
|
|
}
|
|
|
|
###################################################################
|
|
### Get the remote account ID:
|
|
$dbm = new db_mapping;
|
|
$db2 = $dbm->DB_connect(false, $MAP_this->map['map']);
|
|
eval ( '@$db_prefix = DB2_PREFIX'. strtoupper($MAP_this->map['map']) .';' );
|
|
$sql = "SELECT " . $MAP_this->map['account_fields']['id']['map_field'] . " FROM " .
|
|
$db_prefix . "" . $MAP_this->map['account_map_field'] . ' WHERE ' .
|
|
$MAP_this->map['account_fields']['username']['map_field'] . " = " .
|
|
$db2->qstr($username);
|
|
$result = $db2->Execute($sql);
|
|
|
|
### error reporting:
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','Map_account_delete', $db2->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
$fld = $MAP_this->map['account_fields']['id']['map_field'];
|
|
$remote_account_id = $result->fields[$fld];
|
|
|
|
####################################################################
|
|
### Delete the remote account:
|
|
$sql = "DELETE FROM " .
|
|
$db_prefix . "" . $MAP_this->map['account_map_field'] . ' WHERE ' .
|
|
$MAP_this->map['account_fields']['id']['map_field'] . " = " .
|
|
$db2->qstr($remote_account_id);
|
|
$result = $db2->Execute($sql);
|
|
|
|
### error reporting:
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_delete', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
####################################################################
|
|
### Delete the remote groups:
|
|
if ( $MAP_this->map['group_type'] == 'db' || $MAP_this->map['group_type'] == 'hardcode' )
|
|
{
|
|
$sql = "DELETE FROM " .
|
|
$db_prefix . "" . $MAP_this->map['group_account_map']['table'] . ' WHERE ' .
|
|
$MAP_this->map['group_account_map']['account_id'] . " = " .
|
|
$db2->qstr($remote_account_id);
|
|
$result = $db2->Execute($sql);
|
|
|
|
### error reporting:
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_delete', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
return $remote_account_id;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
########################################################################
|
|
#>>>>> default Account Import method
|
|
########################################################################
|
|
|
|
function MAP_account_import($remote_account_id, $MAP_this)
|
|
{
|
|
####################################################################
|
|
### Get the remote account details:
|
|
$dbm = new db_mapping;
|
|
$db2 = $dbm->DB_connect(false, $MAP_this->map['map']);
|
|
eval ( '@$db_prefix = DB2_PREFIX'. strtoupper($MAP_this->map['map']) .';' );
|
|
$sql = "SELECT * FROM " .
|
|
$db_prefix . "" . $MAP_this->map['account_map_field'] . ' WHERE ' .
|
|
$MAP_this->map['account_fields']['id']['map_field'] . " = " .
|
|
$db2->qstr($remote_account_id);
|
|
$result = $db2->Execute($sql);
|
|
|
|
### error reporting:
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_import', $db2->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
if ($result->RecordCount() == 0) return false;
|
|
|
|
####################################################################
|
|
### get a unique account id:
|
|
|
|
$db = &DB();
|
|
$account_id = $db->GenID(AGILE_DB_PREFIX . 'account_id');
|
|
|
|
$fld = $MAP_this->map['account_fields']['username']['map_field'];
|
|
@$username = $result->fields[$fld];
|
|
|
|
$fld = $MAP_this->map['account_fields']['password']['map_field'];
|
|
@$password = $result->fields[$fld];
|
|
|
|
if ( !$MAP_this->map['account_fields']['company']['map_field'] )
|
|
{
|
|
$company = '';
|
|
}
|
|
else
|
|
{
|
|
$fld = $MAP_this->map['account_fields']['company']['map_field'];
|
|
@$company = $result->fields[$fld];
|
|
}
|
|
|
|
$fld = $MAP_this->map['account_fields']['email']['map_field'];
|
|
@$email = $result->fields[$fld];
|
|
|
|
$fld = $MAP_this->map['account_fields']['email_type']['map_field'];
|
|
@$email_type = $result->fields[$fld];
|
|
|
|
$fld = $MAP_this->map['account_fields']['date_last']['map_field'];
|
|
@$date_last = $result->fields[$fld];
|
|
if ($date_last <= 0) $date_last = time();
|
|
|
|
$fld = $MAP_this->map['account_fields']['date_orig']['map_field'];
|
|
@$date_orig = $result->fields[$fld];
|
|
if ($date_orig <= 0) $date_orig = time();
|
|
|
|
|
|
if ( !$MAP_this->map['account_fields']['last_name']['map_field'] )
|
|
{
|
|
$status = '1';
|
|
}
|
|
else
|
|
{
|
|
$fld = $MAP_this->map['account_fields']['status']['map_field'];
|
|
@$status = $result->fields[$fld];
|
|
if ($status != '0' && $status != '1') $status = '1';
|
|
}
|
|
|
|
|
|
$fld = $MAP_this->map['account_fields']['first_name']['map_field'];
|
|
@$first_name = $result->fields[$fld];
|
|
@$name_arr = explode(' ', $first_name);
|
|
|
|
if ( !$MAP_this->map['account_fields']['last_name']['map_field'] )
|
|
{
|
|
if (count($name_arr) >= 3)
|
|
{
|
|
@$first_name = $name_arr["0"];
|
|
@$middle_name = $name_arr["1"];
|
|
@$last_name = $name_arr["2"];
|
|
}
|
|
elseif (count($name_arr) == 2)
|
|
{
|
|
@$first_name = $name_arr["0"];
|
|
$middle_name = '';
|
|
@$last_name = $name_arr["1"];
|
|
}
|
|
else
|
|
{
|
|
$middle_name = '';
|
|
$last_name = '';
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$fld = $MAP_this->map['account_fields']['middle_name']['map_field'];
|
|
@$middle_name = $result->fields[$fld];
|
|
|
|
$fld = $MAP_this->map['account_fields']['last_name']['map_field'];
|
|
@$last_name = $result->fields[$fld];
|
|
}
|
|
|
|
|
|
|
|
####################################################################
|
|
### Create the sql update statement
|
|
|
|
$sql = "INSERT INTO ". AGILE_DB_PREFIX ."account SET
|
|
id = ".$db->qstr($account_id).",
|
|
site_id = ".$db->qstr(DEFAULT_SITE).",
|
|
language_id = ".$db->qstr(DEFAULT_LANGUAGE).",
|
|
affiliate_id= ".$db->qstr(DEFAULT_AFFILIATE).",
|
|
reseller_id = ".$db->qstr(DEFAULT_RESELLER).",
|
|
currency_id = ".$db->qstr(DEFAULT_CURRENCY).",
|
|
theme_id = ".$db->qstr(DEFAULT_THEME).",
|
|
status = ".$db->qstr($status).",
|
|
date_orig = ".$db->qstr($date_orig).",
|
|
date_last = ".$db->qstr($date_last).",
|
|
username = ".$db->qstr($username).",
|
|
password = ".$db->qstr($password).",
|
|
first_name = ".$db->qstr($first_name).",
|
|
middle_name = ".$db->qstr($middle_name).",
|
|
last_name = ".$db->qstr($last_name).",
|
|
company = ".$db->qstr($company).",
|
|
email = ".$db->qstr($email).",
|
|
email_type = ".$db->qstr($email_type);
|
|
$result = $db->Execute($sql);
|
|
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_import', $db->ErrorMsg() . " --- ". $sql);
|
|
return;
|
|
}
|
|
|
|
|
|
####################################################################
|
|
### add the user to the default group:
|
|
|
|
$group_id = $db->GenID(AGILE_DB_PREFIX . "" . 'account_id');
|
|
$sql = '
|
|
INSERT INTO ' . AGILE_DB_PREFIX . 'account_group SET
|
|
id = ' . $db->qstr ( $group_id ) . ',
|
|
site_id = ' . $db->qstr ( DEFAULT_SITE ) . ',
|
|
date_orig = ' . $db->qstr ( time() ) . ',
|
|
group_id = ' . $db->qstr ( DEFAULT_GROUP ) . ',
|
|
account_id = ' . $db->qstr ( $account_id ) . ',
|
|
active = ' . $db->qstr ('1');
|
|
$db->Execute($sql);
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_import', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
########################################################################
|
|
#>>>>> default Account Import method ( FOR 'DB' based groups... )
|
|
########################################################################
|
|
|
|
function MAP_account_group_sync_db($account_id, $MAP_this)
|
|
{
|
|
### Get the local account details
|
|
|
|
$db = &DB();
|
|
$sql= 'SELECT username,email FROM '.AGILE_DB_PREFIX.'account WHERE
|
|
site_id = '.$db->qstr(DEFAULT_SITE).' AND
|
|
id = '.$db->qstr($account_id);
|
|
$result = $db->Execute($sql);
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_group_sync_db1', $db->ErrorMsg(). ' ---> ' . $sql);
|
|
return;
|
|
}
|
|
|
|
$user = $result->fields['username'];
|
|
$email = $result->fields['email'];
|
|
|
|
### Get the remote account id:
|
|
$dbm = new db_mapping;
|
|
$db2 = $dbm->DB_connect(false, $MAP_this->map['map']);
|
|
eval ( '@$db_prefix = DB2_PREFIX'. strtoupper($MAP_this->map['map']) .';' );
|
|
$sql = "SELECT " .
|
|
$MAP_this->map['account_fields']['id']['map_field']
|
|
. " FROM " .
|
|
$db_prefix . "" . $MAP_this->map['account_map_field'] . ' WHERE ' .
|
|
$MAP_this->map['account_fields']['username']['map_field'] . " = " .
|
|
$db2->qstr($user);
|
|
$result = $db2->Execute($sql);
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_group_sync_db2', $db2->ErrorMsg(). ' ---> ' . $sql);
|
|
return;
|
|
}
|
|
|
|
$fld_remote_id = $MAP_this->map['account_fields']['id']['map_field'];
|
|
$remote_account_id = $result->fields[$fld_remote_id];
|
|
|
|
### Delete all current groups for this account id:
|
|
if(!empty($MAP_this->map['group_account_map']['account_id'])) {
|
|
$sql = "DELETE FROM " .
|
|
$db_prefix . "" . $MAP_this->map['group_account_map']['table']
|
|
. ' WHERE ' .
|
|
$MAP_this->map['group_account_map']['account_id'] . " = " .
|
|
$db2->qstr($remote_account_id);
|
|
$result = $db2->Execute($sql);
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_group_sync_db3', $db2->ErrorMsg(). ' ---> ' . $sql);
|
|
return;
|
|
}
|
|
}
|
|
|
|
### Get the group_map array for this database map:
|
|
if(!isset($this->group_arr))
|
|
{
|
|
$db = &DB();
|
|
$sql = "SELECT group_map FROM ".AGILE_DB_PREFIX."db_mapping WHERE
|
|
map_file = ".$db->qstr($MAP_this->map['map'])." AND
|
|
site_id = ".$db->qstr(DEFAULT_SITE);
|
|
$result = $db->Execute($sql);
|
|
|
|
### error reporting:
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_group_sync_db4', $db->ErrorMsg(). ' ---> ' . $sql);
|
|
return;
|
|
}
|
|
@$MAP_this->group_arr = unserialize( $result->fields['group_map'] );
|
|
}
|
|
|
|
|
|
####################################################################
|
|
### Determine the groups the selected account is authorize for:
|
|
|
|
$db = &DB();
|
|
$sql = "SELECT group_id,date_start,date_expire FROM ".
|
|
AGILE_DB_PREFIX."account_group WHERE
|
|
account_id = ".$db->qstr($account_id)." AND
|
|
active = ".$db->qstr(1)." AND
|
|
site_id = ".$db->qstr(DEFAULT_SITE);
|
|
$result = $db->Execute($sql);
|
|
|
|
### error reporting:
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_group_sync_db4', $db->ErrorMsg(). ' ---> ' . $sql);
|
|
return;
|
|
}
|
|
|
|
if($result->RecordCount() == 0) return;
|
|
while( !$result->EOF )
|
|
{
|
|
$start = $result->fields['date_start'];
|
|
$expire = $result->fields['date_expire'];
|
|
$group = $result->fields['group_id'];
|
|
|
|
### Group access started and not expired:
|
|
if
|
|
(($expire >= time() || $expire == '' || $expire == '0')
|
|
&&
|
|
($start <= time() || $start == '' || $start == '0'))
|
|
{
|
|
### Group is authorized:
|
|
### Get the associated remote group(s) this account needs
|
|
### to be added to:
|
|
|
|
reset ($MAP_this->group_arr);
|
|
while ( list ($key, $val) = each ($MAP_this->group_arr))
|
|
{
|
|
if ($key == $group)
|
|
{
|
|
### what remote group(s) is this group mapped to?
|
|
while ( list ($remote_group, $add) = each ($val))
|
|
{
|
|
if ($add)
|
|
{
|
|
### create this group in the remote DB:
|
|
$dbm = new db_mapping;
|
|
$db2 = $dbm->DB_connect(false, $MAP_this->map['map']);
|
|
eval ( '@$db_prefix = DB2_PREFIX'. strtoupper($MAP_this->map['map']) .';' );
|
|
$sql = "INSERT INTO " .
|
|
$db_prefix . "" .
|
|
$MAP_this->map['group_account_map']['table'] . ' SET ' .
|
|
$MAP_this->map['group_account_map']['group_id'] . " = " .
|
|
$db2->qstr($remote_group) . ", " .
|
|
$MAP_this->map['group_account_map']['account_id'] . " = " .
|
|
$db2->qstr($remote_account_id);
|
|
$group_result = $db2->Execute($sql);
|
|
if ($group_result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_group_sync_db5', $db2->ErrorMsg(). ' ---> ' . $sql);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$result->MoveNext();
|
|
}
|
|
return $remote_account_id;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
########################################################################
|
|
#>>>>> default Account Import method ( FOR 'DB' based groups... )
|
|
########################################################################
|
|
|
|
function MAP_account_group_sync_status($account_id, $MAP_this)
|
|
{
|
|
####################################################################
|
|
### Get the local account details
|
|
|
|
$db = &DB();
|
|
$sql= 'SELECT username,email FROM '.AGILE_DB_PREFIX.'account WHERE
|
|
site_id = '.$db->qstr(DEFAULT_SITE).' AND
|
|
id = '.$db->qstr($account_id);
|
|
$result = $db->Execute($sql);
|
|
|
|
### error reporting:
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_group_sync_status', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
$user = $result->fields['username'];
|
|
$email = $result->fields['email'];
|
|
|
|
|
|
|
|
####################################################################
|
|
### Get the remote account id:
|
|
|
|
$dbm = new db_mapping;
|
|
$db2 = $dbm->DB_connect(false, $MAP_this->map['map']);
|
|
eval ( '@$db_prefix = DB2_PREFIX'. strtoupper($MAP_this->map['map']) .';' );
|
|
$sql = "SELECT " .
|
|
$MAP_this->map['account_fields']['id']['map_field']
|
|
. " FROM " .
|
|
$db_prefix . "" . $MAP_this->map['account_map_field'] . ' WHERE ' .
|
|
$MAP_this->map['account_fields']['username']['map_field'] . " = " .
|
|
$db2->qstr($user);
|
|
$result = $db2->Execute($sql);
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_group_sync_status', $db2->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
$fld_remote_id = $MAP_this->map['account_fields']['id']['map_field'];
|
|
$remote_account_id = $result->fields[$fld_remote_id];
|
|
|
|
|
|
####################################################################
|
|
### Get the group_map array for this database map:
|
|
|
|
if(!isset($this->group_arr))
|
|
{
|
|
$db = &DB();
|
|
$sql = "SELECT group_map FROM ".AGILE_DB_PREFIX."db_mapping WHERE
|
|
map_file = ".$db->qstr($MAP_this->map['map'])." AND
|
|
site_id = ".$db->qstr(DEFAULT_SITE);
|
|
$result = $db->Execute($sql);
|
|
|
|
### error reporting:
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_group_sync_status', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
@$MAP_this->group_arr = unserialize( $result->fields['group_map'] );
|
|
}
|
|
|
|
|
|
####################################################################
|
|
### Determine the groups the selected account is authorize for:
|
|
|
|
$db = &DB();
|
|
$sql = "SELECT group_id,date_start,date_expire FROM ".
|
|
AGILE_DB_PREFIX."account_group WHERE
|
|
account_id = ".$db->qstr($account_id)." AND
|
|
active = ".$db->qstr(1)." AND
|
|
site_id = ".$db->qstr(DEFAULT_SITE);
|
|
$result = $db->Execute($sql);
|
|
|
|
### error reporting:
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_group_sync_status', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
if($result->RecordCount() == 0) return;
|
|
|
|
$MAP_this->status = 0;
|
|
|
|
while( !$result->EOF )
|
|
{
|
|
$start = $result->fields['date_start'];
|
|
$expire = $result->fields['date_expire'];
|
|
$group = $result->fields['group_id'];
|
|
|
|
### Group access started and not expired:
|
|
if
|
|
(($expire >= time() || $expire == '' || $expire == '0')
|
|
&&
|
|
($start <= time() || $start == '' || $start == '0'))
|
|
{
|
|
### Group is authorized:
|
|
### Get the associated remote group(s) this account needs
|
|
### to be added to:
|
|
|
|
|
|
if(is_array($MAP_this->group_arr))
|
|
{
|
|
reset ($MAP_this->group_arr);
|
|
while ( list ($key, $add) = each ($MAP_this->group_arr))
|
|
{
|
|
if ($key == $group)
|
|
{
|
|
if ($add != '' && gettype($add) != 'string')
|
|
{
|
|
if ( $MAP_this->status < $add )
|
|
$MAP_this->status = $add;
|
|
}
|
|
else
|
|
{
|
|
$MAP_this->status = $add;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$result->MoveNext();
|
|
}
|
|
|
|
### Update the remote account:
|
|
$dbm = new db_mapping;
|
|
$db2 = $dbm->DB_connect(false, $MAP_this->map['map']);
|
|
eval ( '@$db_prefix = DB2_PREFIX'. strtoupper($MAP_this->map['map']) .';' );
|
|
$sql = "UPDATE " .
|
|
$db_prefix . "" .
|
|
$MAP_this->map['account_map_field'] . ' SET ' .
|
|
$MAP_this->map['account_status_field'] . " = " .
|
|
$db2->qstr($MAP_this->status) . " WHERE " .
|
|
$MAP_this->map['account_fields']['id']['map_field'] . " = " .
|
|
$db2->qstr($remote_account_id);
|
|
$group_result = $db2->Execute($sql);
|
|
|
|
### error reporting:
|
|
if ($group_result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_group_sync_status', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
return $remote_account_id;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
########################################################################
|
|
#>>>>> default Account Import method ( FOR 'DB' based groups... )
|
|
########################################################################
|
|
|
|
function MAP_account_group_sync_db_status($account_id, $MAP_this)
|
|
{
|
|
### Get the local account details
|
|
$db = &DB();
|
|
$sql= 'SELECT username,email FROM '.AGILE_DB_PREFIX.'account WHERE
|
|
site_id = '.$db->qstr(DEFAULT_SITE).' AND
|
|
id = '.$db->qstr($account_id);
|
|
$result = $db->Execute($sql);
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_group_sync_status', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
$user = $result->fields['username'];
|
|
$email = $result->fields['email'];
|
|
|
|
|
|
### Get the remote account id:
|
|
$dbm = new db_mapping;
|
|
$db2 = $dbm->DB_connect(false, $MAP_this->map['map']);
|
|
eval ( '@$db_prefix = DB2_PREFIX'. strtoupper($MAP_this->map['map']) .';' );
|
|
$sql = "SELECT " .
|
|
$MAP_this->map['account_fields']['id']['map_field']
|
|
. " FROM " .
|
|
$db_prefix . "" . $MAP_this->map['account_map_field'] . ' WHERE ' .
|
|
$MAP_this->map['account_fields']['username']['map_field'] . " = " .
|
|
$db2->qstr($user);
|
|
$result = $db2->Execute($sql);
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_group_sync_status', $db2->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
$fld_remote_id = $MAP_this->map['account_fields']['id']['map_field'];
|
|
$remote_account_id = $result->fields[$fld_remote_id];
|
|
|
|
### Get the group_map array for this database map:
|
|
if(!isset($this->group_arr))
|
|
{
|
|
$db = &DB();
|
|
$sql = "SELECT group_map,group_rank FROM ".AGILE_DB_PREFIX."db_mapping WHERE
|
|
map_file = ".$db->qstr($MAP_this->map['map'])." AND
|
|
site_id = ".$db->qstr(DEFAULT_SITE);
|
|
$result = $db->Execute($sql);
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_group_sync_status', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
@$MAP_this->group_arr = unserialize( $result->fields['group_map'] );
|
|
@$MAP_this->group_rank = unserialize( $result->fields['group_rank']);
|
|
}
|
|
|
|
### Determine the groups the selected account is authorize for:
|
|
$db = &DB();
|
|
$sql = "SELECT group_id,date_start,date_expire FROM ".
|
|
AGILE_DB_PREFIX."account_group WHERE
|
|
account_id = ".$db->qstr($account_id)." AND
|
|
active = ".$db->qstr(1)." AND
|
|
site_id = ".$db->qstr(DEFAULT_SITE);
|
|
$result = $db->Execute($sql);
|
|
|
|
### error reporting:
|
|
if ($result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_group_sync_status', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
|
|
if($result->RecordCount() == 0) return;
|
|
|
|
$MAP_this->status = 0;
|
|
if($result->RecordCount() == 0) return;
|
|
$rank = 0;
|
|
while( !$result->EOF )
|
|
{
|
|
$start = $result->fields['date_start'];
|
|
$expire = $result->fields['date_expire'];
|
|
$group = $result->fields['group_id'];
|
|
|
|
### Group access started and not expired:
|
|
if
|
|
(($expire >= time() || $expire == '' || $expire == '0')
|
|
&&
|
|
($start <= time() || $start == '' || $start == '0'))
|
|
{
|
|
### Group is authorized:
|
|
### Get the associated remote group(s) this account needs
|
|
### to be added to:
|
|
|
|
if(!empty($MAP_this->group_arr) && is_array($MAP_this->group_arr))
|
|
{
|
|
reset ($MAP_this->group_arr);
|
|
foreach($MAP_this->group_arr as $key => $val)
|
|
{
|
|
if ($key == $group)
|
|
{
|
|
### what remote group(s) is this group mapped to?
|
|
foreach($val as $remote_group => $add) {
|
|
if (!empty($add) && $MAP_this->group_rank[$key]['rank'] > $rank)
|
|
{
|
|
$MAP_this->status = $add;
|
|
$rank = $MAP_this->group_rank[$key]['rank'];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$result->MoveNext();
|
|
}
|
|
|
|
### Update the remote account:
|
|
$dbm = new db_mapping;
|
|
$db2 = $dbm->DB_connect(false, $MAP_this->map['map']);
|
|
eval ( '@$db_prefix = DB2_PREFIX'. strtoupper($MAP_this->map['map']) .';' );
|
|
$sql = "UPDATE " .
|
|
$db_prefix . "" .
|
|
$MAP_this->map['account_map_field'] . ' SET ' .
|
|
$MAP_this->map['account_status_field'] . " = " .
|
|
$db2->qstr($MAP_this->status) . " WHERE " .
|
|
$MAP_this->map['account_fields']['id']['map_field'] . " = " .
|
|
$db2->qstr($remote_account_id);
|
|
$group_result = $db2->Execute($sql);
|
|
if ($group_result === false)
|
|
{
|
|
global $C_debug;
|
|
$C_debug->error('db_mapping.inc.php','MAP_account_group_sync_status', $db->ErrorMsg());
|
|
return;
|
|
}
|
|
return $remote_account_id;
|
|
}
|
|
}
|
|
?>
|