$extra = null;
$err = '';
$xml = '';
$idents = array();
$last_action_time = 0;
$last_actionident_time = 0;
$action = 'CustomerQuery';
$xml = file_get_contents(dirname(__FILE__) . '/../docs/responses/CustomerQuery.xml');
QuickBooks_Server_SQL_Callbacks::CustomerQueryResponse($requestID, $user, $action, $ID, $extra, $err, $last_action_time, $last_actionident_time, $xml, $idents);
$action = 'InvoiceQuery';
$xml = file_get_contents(dirname(__FILE__) . '/../docs/responses/InvoiceQuery.xml');
QuickBooks_Server_SQL_Callbacks::InvoiceQueryResponse($requestID, $user, $action, $ID, $extra, $err, $last_action_time, $last_actionident_time, $xml, $idents);
$action = 'AccountQuery';
$xml = file_get_contents(dirname(__FILE__) . '/../docs/responses/AccountQuery.xml');
QuickBooks_Server_SQL_Callbacks::AccountQueryResponse($requestID, $user, $action, $ID, $extra, $err, $last_action_time, $last_actionident_time, $xml, $idents);
$action = 'EmployeeQuery';
$xml = file_get_contents(dirname(__FILE__) . '/../docs/responses/EmployeeQuery.xml');
QuickBooks_Server_SQL_Callbacks::EmployeeQueryResponse($requestID, $user, $action, $ID, $extra, $err, $last_action_time, $last_actionident_time, $xml, $idents);
$action = 'ClassQuery';
$xml = file_get_contents(dirname(__FILE__) . '/../docs/responses/ClassQuery.xml');
QuickBooks_Server_SQL_Callbacks::ClassQueryResponse($requestID, $user, $action, $ID, $extra, $err, $last_action_time, $last_actionident_time, $xml, $idents);
$action = 'ItemQuery';
$xml = file_get_contents(dirname(__FILE__) . '/../docs/responses/ItemQuery.xml');
QuickBooks_Server_SQL_Callbacks::ItemQueryResponse($requestID, $user, $action, $ID, $extra, $err, $last_action_time, $last_actionident_time, $xml, $idents);
$action = 'VendorQuery';
$xml = file_get_contents(dirname(__FILE__) . '/../docs/responses/VendorQuery.xml');
QuickBooks_Server_SQL_Callbacks::VendorQueryResponse($requestID, $user, $action, $ID, $extra, $err, $last_action_time, $last_actionident_time, $xml, $idents);
$action = 'TermsQuery';
$xml = file_get_contents(dirname(__FILE__) . '/../docs/responses/TermsQuery.xml');
QuickBooks_Server_SQL_Callbacks::TermsQueryResponse($requestID, $user, $action, $ID, $extra, $err, $last_action_time, $last_actionident_time, $xml, $idents);
 /**
  * Used to build the xml that limits the results to only updated results
  * 
  * @param string $user		Same deal: pass along the $user parameter
  * @param string $action	Ditto with $action parameter
  * @param array $extra		Simply pass in the $extra value that is passed to the function you're calling this from.
  * @param boolean $filter_wrap
  * @return string
  */
 protected static function _buildFilter($user, $action, $extra, $filter_wrap = false)
 {
     $Driver = QuickBooks_Driver_Singleton::getInstance();
     $xml = '';
     $type = '';
     $key_prev = QuickBooks_Server_SQL_Callbacks::_keySyncPrev($action);
     $key_curr = QuickBooks_Server_SQL_Callbacks::_keySyncCurr($action);
     $module = __CLASS__;
     //$action = null;
     $type = null;
     $opts = null;
     // 					configRead($user, $module, $key, &$type, &$opts)
     $prev_sync_datetime = $Driver->configRead($user, $module, $key_prev, $type, $opts);
     // last sync started...
     if (!$prev_sync_datetime) {
         // If this query has *never* run before, let's get *all* of the records
         $timestamp = time() - 60 * 60 * 24 * 365 * 25;
         $prev_sync_datetime = date('Y-m-d', $timestamp) . 'T' . date('H:i:s', $timestamp);
         $extra = array();
         // If an iterator exists, get rid of it (this should *never* happen... how could it?)
         //			configWrite($user, $module, $key, $value, $type, $opts
         $Driver->configWrite($user, $module, $key_prev, $prev_sync_datetime, null);
     }
     if (!is_array($extra) or empty($extra['iteratorID'])) {
         // Start of a new iterator!
         // Store when we started to do this iterator (this will become the $prev_sync_datetime after we finish with this iterator)
         $curr_sync_datetime = date('Y-m-d') . 'T' . date('H:i:s');
         $Driver->configWrite($user, $module, $key_curr, $curr_sync_datetime, null);
         if ($filter_wrap) {
             if ($action == QUICKBOOKS_QUERY_DELETEDITEMS || $action == QUICKBOOKS_QUERY_DELETEDTXNS) {
                 $xml .= '<DeletedDateRangeFilter>' . "\n";
                 $xml .= '	<FromDeletedDate>' . $prev_sync_datetime . '</FromDeletedDate>' . "\n";
                 $xml .= '</DeletedDateRangeFilter>' . "\n";
             } else {
                 $xml .= '<ModifiedDateRangeFilter>' . "\n";
                 $xml .= '	<FromModifiedDate>' . $prev_sync_datetime . '</FromModifiedDate>' . "\n";
                 $xml .= '</ModifiedDateRangeFilter>' . "\n";
             }
         } else {
             $xml .= '<FromModifiedDate>' . $prev_sync_datetime . '</FromModifiedDate>';
         }
     } else {
         if ($filter_wrap) {
             if ($action == QUICKBOOKS_QUERY_DELETEDITEMS || $action == QUICKBOOKS_QUERY_DELETEDTXNS) {
                 $xml .= '<DeletedDateRangeFilter>' . "\n";
                 $xml .= '	<FromDeletedDate>' . $prev_sync_datetime . '</FromDeletedDate>' . "\n";
                 $xml .= '</DeletedDateRangeFilter>' . "\n";
             } else {
                 $xml .= '<ModifiedDateRangeFilter>' . "\n";
                 $xml .= '	<FromModifiedDate>' . $prev_sync_datetime . '</FromModifiedDate>' . "\n";
                 $xml .= '</ModifiedDateRangeFilter>' . "\n";
             }
         } else {
             $xml .= '<FromModifiedDate>' . $prev_sync_datetime . '</FromModifiedDate>';
         }
     }
     return $xml;
 }