Ejemplo n.º 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());
}
Ejemplo n.º 2
0
function sync_get_relationships($session, $module_name, $related_module, $from_date, $to_date, $offset, $max_results, $deleted)
{
    global $beanList;
    $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());
    }
    if ($max_results > 0 || $max_results == '-99') {
        global $sugar_config;
        $sugar_config['list_max_entries_per_page'] = $max_results;
    }
    $results = retrieve_relationships($module_name, $related_module, "rt.date_modified > " . db_convert("'" . $GLOBALS['db']->quote($from_date) . "'", 'datetime') . " AND rt.date_modified <= " . db_convert("'" . $GLOBALS['db']->quote($to_date) . "'", 'datetime'), $deleted, $offset, $max_results);
    $list = $results['result'];
    foreach ($list as $value) {
        $output_list[] = array_get_return_value($value, $results['table_name']);
    }
    $next_offset = $offset + sizeof($output_list);
    $myoutput = get_encoded($output_list);
    return array('result_count' => sizeof($output_list), 'next_offset' => $next_offset, 'total_count' => $results['total_count'], 'field_list' => array(), 'entry_list' => $myoutput, 'error' => $error->get_soap_array());
}
Ejemplo n.º 3
0
function get_altered_relationships($module_name, $related_module, $from_date, $to_date)
{
    global $disable_date_format;
    $disable_date_format = true;
    $db = DBManagerFactory::getInstance();
    $where = "rt.date_modified > {$db->convert($db->quoted($from_date), 'datetime')}";
    $where .= " AND rt.date_modified <= {$db->convert($db->quoted($to_date), 'datetime')}";
    $results = retrieve_relationships($module_name, $related_module, $where, 2, 0, -99);
    $list = $results['result'];
    $output_list = array();
    foreach ($list as $value) {
        $output_list[] = array_get_return_value($value, $results['table_name']);
        //force accept server
        $output_list[sizeof($output_list) - 1]['resolve'] = 1;
    }
    return array('result_count' => sizeof($output_list), 'entry_list' => $output_list);
}
Ejemplo n.º 4
0
function get_modified_entries($session, $module_name, $ids, $select_fields)
{
    global $beanList, $beanFiles;
    $error = new SoapError();
    $field_list = array();
    $output_list = array();
    if (!validate_authenticated($session)) {
        $error->set_error('invalid_login');
        return array('field_list' => $field_list, 'entry_list' => array(), 'error' => $error->get_soap_array());
    }
    if (empty($beanList[$module_name])) {
        $error->set_error('no_module');
        return array('field_list' => $field_list, 'entry_list' => array(), 'error' => $error->get_soap_array());
    }
    global $current_user;
    if (!check_modules_access($current_user, $module_name, 'read')) {
        $error->set_error('no_access');
        return array('field_list' => $field_list, 'entry_list' => array(), 'error' => $error->get_soap_array());
    }
    $class_name = $beanList[$module_name];
    require_once $beanFiles[$class_name];
    $seed = new $class_name();
    //rsmith
    $in = '';
    $field_select = '';
    $table_name = $seed->table_name;
    if (isset($ids)) {
        foreach ($ids as $value) {
            if (empty($in)) {
                $in .= "('" . $value . "'";
            } else {
                $in .= ",'" . $value . "'";
            }
        }
        //end foreach
    }
    $index = 0;
    foreach ($select_fields as $field) {
        $field_select .= $table_name . "." . $field;
        if ($index < count($select_fields) - 1) {
            $field_select .= ",";
            $index++;
        }
    }
    //end foreach
    $ids = array();
    //end rsmith
    if (!empty($in)) {
        $in .= ')';
    }
    $query = $seed->create_list_query($seed->process_order_by('', null), "{$table_name}.id IN {$in}", -2);
    $pattern = '/SELECT.*(' . $table_name . '\\.\\*.*?)/is';
    // ignores the case
    $replacement = 'SELECT ' . $field_select . ' ';
    $modified_select_query = preg_replace($pattern, $replacement, $query);
    $result = $seed->db->query($modified_select_query, true, "Error running count query for {$seed->object_name} List: ");
    $xml = '<?xml version="1.0" encoding="utf-8"?><items>';
    while ($row = $seed->db->fetchByAssoc($result)) {
        $val = array_get_return_value($row, $table_name);
        $xml .= get_name_value_xml($val, $module_name);
    }
    $xml .= "</items>";
    $xml = base64_encode($xml);
    return array('result' => $xml, 'error' => $error->get_soap_array());
}