* @copyright 2009 Deon George * @link http://osb.leenooks.net * * @link http://www.agileco.com/ * @copyright 2004-2008 Agileco, LLC. * @license http://www.agileco.com/agilebill/license1-4.txt * @author Tony Landis * @package AgileBill * @subpackage Modules:Import */ /** * The main AgileBill Import Class * * @package AgileBill * @subpackage Modules:Import */ class import extends OSB_module { protected $actions = array(); /** * Test remote database connectivity */ protected function test() { global $C_debug,$VAR; # Connect to the remote DB $dbr = &NewADOConnection($this->type); $dbr->Connect($this->host,$this->user,$this->pass,$this->db); if (! empty($dbr->_errorMsg)) $C_debug->alert(sprintf('Failed: %s',$dbr->_errorMsg)); else $this->pre_test(); # Return to main import page printf("",$VAR['plugin']); } /** * Record pre-setup tests */ protected function pre_test() { global $C_debug,$VAR; $C_debug->alert('Marked Done!'); $db = &DB(); # Insert the import record $this->import_transaction($this->plugin,$VAR['action'],null,null,null,null,$db); # Return to main import page printf("",$VAR['plugin']); } # Store import id protected function import_transaction($plugin,$action,$ab_table,$ab_id,$remote_table,$remote_id,&$db) { # Check that this record has not already been imported: $sql = sqlSelect($db,'import','id', sprintf('plugin = %s AND action = %s AND ab_table = %s AND ab_id = %s AND remote_table = %s AND remote_id = %s', $db->qstr($plugin), $db->qstr($action), $db->qstr($ab_table), $db->qstr($ab_id), $db->qstr($remote_table), $db->qstr($remote_id) )); $rs = $db->Execute($sql); # Check results if ($rs === false || $rs->RecordCount() > 0) { $db->FailTrans(); return false; } # Insert the record $update = array( 'date_orig'=>time(), 'plugin'=>$plugin, 'action'=>$action, 'ab_table'=>$ab_table, 'ab_id'=>$ab_id, 'remote_table'=>$remote_table, 'remote_id'=>$remote_id); $db->Execute(sqlInsert($db,'import',$update)); return true; } # Do an action for a specific plugin: public function do_action($VAR) { # Load the plugin if (! is_file($file = sprintf('%simport/%s.php',PATH_PLUGINS,$VAR['plugin']))) return false; # New instance include_once($file); $import_plugin = new import_plugin; # Call the required method call_user_func(array($import_plugin,$VAR['action']),$VAR,$import_plugin); } # Do an action for a specific plugin: public function undo_action($VAR) { $db = &DB(); # Make sure this action is done... $rs = $db->Execute(sqlSelect($db,'import','ab_table,ab_id',sprintf('plugin=::%s:: AND action=::%s::',$VAR['plugin'],$VAR['action']))); if ($rs->RecordCount() == 0) { echo 'There is nothing to undo!'; return; } while (! $rs->EOF) { if (trim($rs->fields['ab_table']) && trim($rs->fields['ab_id'])) $db->Execute(sqlDelete($db,$rs->fields['ab_table'],sprintf('id=%s',$rs->fields['ab_id']))); $rs->MoveNext(); } # Delete the selected action $db->Execute(sqlDelete($db,'import',sprintf('plugin=::%s:: AND action=::%s::',$VAR['plugin'],$VAR['action']))); } /** * View import plugins */ public function view($VAR) { # Load the plugin if (! is_file($file = sprintf('%simport/%s.php',PATH_PLUGINS,$VAR['plugin']))) return false; $db = &DB(); include_once($file); $import_plugin = new import_plugin; # Loop through each action to determine its availibility status $actions = $import_plugin->actions; $done = false; for ($i=0; $iExecute(sqlSelect($db,'import','id',sprintf('plugin=::%s:: AND action=::%s::',$import_plugin->name,$actions[$i]['name']))); if ($rs->RecordCount() > 0) { $actions[$i]['status'] = 'done'; $actions[$i]['records'] = $rs->RecordCount(); $done[$actions[$i]['name']] = true; } } } global $smarty; $smarty->assign('name',$import_plugin->name); $smarty->assign('instructions',$import_plugin->instructions); $smarty->assign('import',$actions); } /** * Search for available plugs * * @uses CORE_search */ public function search($VAR) { # Read the contents of the directory $count = 0; $dir = opendir(PATH_PLUGINS.'import'); while ($file_name = readdir($dir)) if (! in_array($file_name,array('.','..')) && ! preg_match('/^_/',$file_name) && preg_match('/.php$/',$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); } } /** * Show search results */ public function search_show($VAR) { # Read the contents of the directory $count = 0; $dir = opendir(PATH_PLUGINS.'import'); while ($file_name = readdir($dir)) { if (! in_array($file_name,array('.','..')) && ! preg_match('/^_/',$file_name) && preg_match('/.php$/',$file_name)) { $result[$count]['name'] = preg_replace('/.php$/','',$file_name); $result[$count]['id'] = $count; $count++; } } $class_name = true; for ($i=0; $iassign('search_show',$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 array for menu $smarty->assign('page_arr',''); } /** * Read a plugin map file, for some default values * * @uses CORE_xml; */ protected function read_map() { # If there is a map file, open it $pmap = array(); if (file_exists($mapfile = sprintf('%simport/%s_map.xml',PATH_PLUGINS,$this->plugin))) { $C_xml = new CORE_xml; $map = $C_xml->xml_to_array($mapfile); if (isset($map['map'])) foreach ($map['map'] as $index => $details) foreach ($map['map'][$index] as $values) { $a = $values['id']; unset($values['id']); $pmap[$index][$a] = $values; } } return $pmap; } } ?>