2008-11-26 22:50:40 +00:00
< ? 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 " ;
2009-03-28 05:20:19 +00:00
$this -> method [ " $type " ] = explode ( " , " , $this -> method [ " $type " ]);
2008-11-26 22:50:40 +00:00
# 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 " ;
2009-03-26 04:30:13 +00:00
$this -> method [ " $type " ] = explode ( " , " , $this -> method [ " $type " ]);
2008-11-26 22:50:40 +00:00
$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 " ;
2009-03-28 05:20:19 +00:00
$this -> method [ " $type " ] = explode ( " , " , $this -> method [ " $type " ]);
2008-11-26 22:50:40 +00:00
$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 != '.' )
{
2009-03-26 04:30:13 +00:00
$result [ $count ][ 'name' ] = preg_replace ( '/.php/' , '' , $file_name );
2008-11-26 22:50:40 +00:00
$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 ];
2009-03-28 05:20:19 +00:00
@ $name_arr = explode ( ' ' , $first_name );
2008-11-26 22:50:40 +00:00
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 ;
}
}
?>