Beispiel #1
0
/**
 * Get a list of the relationship records that have been modified within a 
 * specified date range.  This is used to perform a sync with a mobile client.
 * The results are paged.
 *
 * @param xsd:string $session
 * @param xsd:string $module_name
 * @param xsd:string $related_module
 * @param xsd:string $from_date
 * @param xsd:string $to_date
 * @param xsd:int $offset
 * @param xsd:int $max_results
 * @param xsd:int $deleted
 * @param xsd:int $module_id
 * @param tns:select_fields $select_fields
 * @param tns:select_fields $ids
 * @param xsd:string $relationship_name
 * @param xsd:string $deletion_date
 * @param xsd:int $php_serialize
 * @return 
 */
function sync_get_modified_relationships($session, $module_name, $related_module, $from_date, $to_date, $offset, $max_results, $deleted, $module_id = '', $select_fields = array(), $ids = array(), $relationship_name = '', $deletion_date = '', $php_serialize = 1)
{
    global $beanList, $beanFiles;
    $error = new SoapError();
    $output_list = array();
    if (!validate_authenticated($session)) {
        $error->set_error('invalid_login');
        return array('result_count' => -1, 'entry_list' => array(), 'error' => $error->get_soap_array());
    }
    if (empty($beanList[$module_name]) || empty($beanList[$related_module])) {
        $error->set_error('no_module');
        return array('result_count' => -1, 'entry_list' => array(), 'error' => $error->get_soap_array());
    }
    global $current_user;
    if (!check_modules_access($current_user, $module_name, 'read') || !check_modules_access($current_user, $related_module, 'read')) {
        $error->set_error('no_access');
        return array('result_count' => -1, 'entry_list' => array(), 'error' => $error->get_soap_array());
    }
    // Cast to integer
    $deleted = (int) $deleted;
    if ($max_results > 0 || $max_results == '-99') {
        global $sugar_config;
        $sugar_config['list_max_entries_per_page'] = $max_results;
    }
    $date_query = "(m1.date_modified > " . db_convert("'" . $GLOBALS['db']->quote($from_date) . "'", 'datetime') . " AND m1.date_modified <= " . db_convert("'" . $GLOBALS['db']->quote($to_date) . "'", 'datetime') . " AND {0}.deleted = {$deleted})";
    if (isset($deletion_date) && !empty($deletion_date)) {
        $date_query .= " OR ({0}.date_modified > " . db_convert("'" . $GLOBALS['db']->quote($deletion_date) . "'", 'datetime') . " AND {0}.date_modified <= " . db_convert("'" . $GLOBALS['db']->quote($to_date) . "'", 'datetime') . " AND {0}.deleted = 1)";
    }
    $in = '';
    if (isset($ids) && !empty($ids)) {
        foreach ($ids as $value) {
            if (empty($in)) {
                $in .= "('" . $GLOBALS['db']->quote($value) . "'";
            } else {
                $in .= ",'" . $GLOBALS['db']->quote($value) . "'";
            }
        }
        $in .= ')';
    }
    $query = '';
    if (isset($in) && !empty($in)) {
        $query .= "( {$date_query} AND m1.id IN {$in}) OR (m1.id NOT IN {$in} AND {0}.deleted = 0)";
    } else {
        $query .= "( {0}.deleted = 0)";
    }
    if (isset($module_id) && !empty($module_id)) {
        //if(isset($in) && !empty($in)){
        $query .= " AND";
        //}
        $query .= " m2.id = '" . $GLOBALS['db']->quote($module_id) . "'";
    }
    if ($related_module == 'Meetings' || $related_module == 'Calls') {
        $query = string_format($query, array('m1'));
    }
    $results = retrieve_modified_relationships($module_name, $related_module, $query, $deleted, $offset, $max_results, $select_fields, $relationship_name);
    $list = $results['result'];
    $xml = '<?xml version="1.0" encoding="utf-8"?><items>';
    foreach ($list as $value) {
        $val = array_get_return_value($value, $results['table_name']);
        if ($php_serialize == 0) {
            $xml .= get_name_value_xml($val, $module_name);
        }
        $output_list[] = $val;
    }
    $xml .= '</items>';
    $next_offset = $offset + sizeof($output_list);
    if ($php_serialize == 0) {
        $myoutput = base64_encode($xml);
    } else {
        $myoutput = get_encoded($output_list);
    }
    return array('result_count' => sizeof($output_list), 'next_offset' => 0, 'total_count' => sizeof($output_list), 'field_list' => array(), 'entry_list' => $myoutput, 'error' => $error->get_soap_array());
}
Beispiel #2
0
 for (; $ri < sizeof($sync_modules[$sync_module_index]['related']); $ri++) {
     $related = $sync_modules[$sync_module_index]['related'][$ri];
     if (!isset($_REQUEST['rel_offset'])) {
         $rel_offset = 0;
     } else {
         $rel_offset = $_REQUEST['rel_offset'];
     }
     if ($rel_offset == 0) {
         add_to_msg('Retrieving Local Relationships - ' . $related . '<br>', false);
         update_progress_bar('records', 0, 100);
         if ($clean_sync == 1) {
             clean_relationships_for_sync($sync_module, $related);
         }
         $altered_relation = get_altered_relationships($sync_module, $related, $local_last_sync, $local_time);
         if (isset($altered_relation['result_count']) && $altered_relation['result_count'] > 0) {
             $commit_relation = get_encoded($altered_relation['entry_list']);
             update_progress_bar('records', 50, 100);
             add_to_msg('Sending ' . sizeof($altered_relation['entry_list']) . ' Modified Relationship Records<br>', false);
             $result = $soapclient->call('sync_set_relationships', array('session' => $session, 'module_name' => $sync_module, 'related_module' => $related, 'from_date' => $last_sync, 'to_date' => $start_time, 'sync_entry_list' => $commit_relation, 'deleted' => -1));
         }
         update_progress_bar('records', 100, 100);
     }
     if ($rel_offset > 0 || !has_error($result)) {
         update_progress_bar('records', 0, 100);
         $next_off = $rel_offset + $rel_max;
         add_to_msg('Retrieving Server Relationships - ' . $related . "[{$rel_offset} - {$next_off}] <br>", false);
         if ($clean_sync == 1) {
             $result = $soapclient->call('get_quick_sync_data', array('session' => $session, 'module_name' => $sync_module, 'related_module_name' => $related, 'start' => $rel_offset, 'count' => $rel_max, 'db_type' => $sugar_config['dbconfig']['db_type'], 'deleted' => 2));
         } else {
             $result = $soapclient->call('sync_get_relationships', array('session' => $session, 'module_name' => $sync_module, 'related_module' => $related, 'from_date' => $last_sync, 'to_date' => $start_time, 'offset' => $rel_offset, 'max_results' => $rel_max, 'deleted' => 2));
         }
Beispiel #3
0
function sync_set_relationships($session, $module_name, $related_module, $from_date, $to_date, $sync_entry_list, $deleted)
{
    global $beanList, $beanFiles;
    global $current_user;
    $error = new SoapError();
    $output_list = array();
    if (!validate_authenticated($session)) {
        $error->set_error('invalid_login');
        return array('result_count' => -1, 'entry_list' => array(), 'error' => $error->get_soap_array());
    }
    if (empty($beanList[$module_name]) || empty($beanList[$related_module])) {
        $error->set_error('no_module');
        return array('result_count' => -1, 'entry_list' => array(), 'error' => $error->get_soap_array());
    }
    require_once 'modules/Sync/SyncController.php';
    if (!check_modules_access($current_user, $module_name, 'write') && !in_array($module_name, $read_only_override) || !check_modules_access($current_user, $related_module, 'write') && !in_array($related_module, $read_only_override)) {
        $error->set_error('no_access');
        return array('result_count' => -1, 'entry_list' => array(), 'error' => $error->get_soap_array());
    }
    $entry_list = get_decoded($sync_entry_list);
    $done = server_save_relationships($entry_list, $from_date, $to_date);
    $conflicts = array();
    $con_enc = get_encoded($conflicts);
    return array('conflicts' => $con_enc, 'status' => 'success', 'ids' => $done['ids'], 'error' => $error->get_soap_array());
}
Beispiel #4
0
     echo '<br><br>Modifying Local and Through Soap - Should Have Conflict - test sync_set_entries' . $id;
     $current_user = new User();
     $current_user->retrieve('1');
     $contact = new Contact();
     echo 'saving ' . $id;
     $contact->retrieve($id);
     $contact->first_name = 'modifed local';
     $contact->save();
     $contact->retrieve($id);
     $contact->first_name = 'modifed server';
     $timestart = microtime(true);
     $commit = array();
     $commit[] = get_return_value($contact, 'Contacts');
     $commit[0]['resolve'] = 0;
     echo 'RESOLVING ' . $commit[0]['resolve'];
     $commit = get_encoded($commit);
     $result = $soapclient->call('sync_set_entries', array('session' => $session, 'module_name' => 'Contacts', 'from_date' => $dm, 'sync_entry_list' => $commit));
     $diff = microtime(true) - $timestart;
     echo "<b>Time for retrieving the contacts added list is {$diff} </b> <br><br>";
     print_result($result);
 }
 echo '<BR>TESTING NOTES<BR>';
 echo '<br><br><b>Set A Note - set_entry test:</b><BR>';
 $time = $timedate->nowDb();
 $date = $timedate->asDbDate($timedate->getNow()->get("+" + rand(0, 360000) + "seconds"));
 $hour = $timedate->asDbTime($timedate->getNow()->get("+" + rand(0, 360000) + "seconds"));
 $result = $soapclient->call('set_entry', array('session' => $session, 'module_name' => 'Notes', 'name_value_list' => array(array('name' => 'name', 'value' => "{$time} Note {$i}"))));
 $note_id = $result['id'];
 print_result($result);
 echo '<br><br><b>Set A Note attachment - set_note_attachment test:</b><BR>';
 $file = base64_encode('This is an attached file');