Exemplo n.º 1
0
function sync_users($soapclient, $session, $clean = false, $is_conversion = false)
{
    $timedate = TimeDate::getInstance();
    global $current_user;
    $last_sync = '1980-07-09 12:00:00';
    $user_id = $soapclient->call('get_user_id', array('session' => $session));
    if ($user_id == '-1') {
        return false;
    }
    if (!$clean && file_exists('modules/Sync/config.php')) {
        require_once 'modules/Sync/config.php';
        if (isset($sync_info['last_syncUsers'])) {
            $last_sync = $sync_info['last_syncUsers'];
        }
    } else {
        clean_for_sync('Users');
        $clean = true;
    }
    $start_time = $timedate->nowDb();
    $GLOBALS['sugar_config']['disable_team_sanity_check'] = true;
    //rrs: bug 27579. This works fine for most installs, but we had a customer in switzerland and the quotes where being
    //removed from the users.id = '<GUID>' in the where clause causing the query to fail.
    $soapclient->charencoding = false;
    $result = $soapclient->call('sync_get_entries', array('session' => $session, 'module_name' => 'Users', 'from_date' => $last_sync, 'to_date' => $start_time, 'offset' => 0, 'max_results' => -99, 'select_fields' => array(), 'query' => "users.id = '{$user_id}'", 'deleted' => 2));
    add_to_msg('Retrieve Current User Record<br>', true, true);
    if (!has_error($result)) {
        //update_progress_bar('records', 55 , 100);
        add_to_msg('Retrieved ' . $result['result_count'] . ' current User Record<br>', true, true);
        $get_entry_list = get_decoded($result['entry_list']);
        //update_progress_bar('records', 65 , 100);
        $done = save_altered('Users', $get_entry_list);
        //update_progress_bar('records', 100 , 100);
        $offset = 0;
        while (true) {
            $result = $soapclient->call('sync_get_entries', array('session' => $session, 'module_name' => 'Users', 'from_date' => $last_sync, 'to_date' => $start_time, 'offset' => $offset, 'max_results' => 50, 'select_fields' => array('user_name', 'id', 'first_name', 'last_name', 'phone_mobile', 'phone_work', 'employee_status', 'reports_to_id', 'title', 'email1', 'email2', 'deleted', 'status'), 'query' => "users.id != '{$user_id}'", 'deleted' => 2));
            if (!has_error($result)) {
                //update_progress_bar('records', 55 , 100);
                add_to_msg('Retrieved ' . $result['result_count'] . ' Records<br>', true, true);
                $get_entry_list = get_decoded($result['entry_list']);
                //update_progress_bar('records', 65 , 100);
                $done = save_altered('Users', $get_entry_list);
                //update_progress_bar('records', 100 , 100);
                add_to_msg('Added ' . $done['add'] . ' Records <br>', true, true);
                add_to_msg('Modified ' . $done['modify'] . ' Records <br>', true, true);
                add_to_msg('Done<br>', true, true);
                if ($result['next_offset'] > $result['total_count']) {
                    break;
                } else {
                    $offset = $result['next_offset'];
                }
            }
        }
        //end while
        restoreUserPassword($user_id);
        require_once 'modules/Sync/config.php';
        $sync_info['last_syncUsers'] = $start_time;
        add_to_msg('Storing Sync Info<BR>', true, true);
        write_array_to_file('sync_info', $sync_info, 'modules/Sync/config.php');
        if ($clean) {
            //now save the admin account/current user back if it's a clean sync just so we can make sure they still exist
            if (empty($current_user->id)) {
                //retrieve the admin user
                $current_user = BeanFactory::getBean('Users', '1');
            }
            $temp_user = BeanFactory::getBean('Users');
            if (!$temp_user->retrieve($current_user->id)) {
                $current_user->new_with_id = true;
                $current_user->team_exists = true;
            }
            unset($current_user->user_preferences);
            //rrs: bug - 32739
            $current_user->default_team = null;
            if (!isset($is_conversion) || $is_conversion == false) {
                $current_user->save(false);
            }
        }
        $GLOBALS['sugar_config']['disable_team_sanity_check'] = false;
        return true;
    }
    if ($clean) {
        //now save the admin account/current user back if it's a clean sync just so we can make sure they still exist
        $temp_user = BeanFactory::getBean('Users');
        if (!$temp_user->retrieve($current_user->id)) {
            $current_user->new_with_id = true;
            $current_user->team_exists = true;
        }
        unset($current_user->user_preferences);
        //rrs: bug - 32739
        $current_user->default_team = null;
        if (!isset($is_conversion) || $is_conversion == false) {
            $current_user->save(false);
        }
    }
    $GLOBALS['sugar_config']['disable_team_sanity_check'] = false;
    return false;
}
Exemplo n.º 2
0
     } else {
         $result = $soapclient->call('sync_get_entries', array('session' => $session, 'module_name' => $sync_module, 'from_date' => $last_sync, 'to_date' => $start_time, 'offset' => $offset, 'max_results' => $max, 'select_fields' => array(), 'query' => '', 'deleted' => 2));
     }
 }
 if (!isset($_REQUEST['rel_offset']) || !has_error($result)) {
     if (empty($_REQUEST['rel_offset'])) {
         update_progress_bar('records', 55, 100);
         if ($clean_sync == 1) {
             $result_arr = unserialize(base64_decode($result['result']));
             execute_query($sync_module, $result_arr['data']);
             execute_query($sync_module, $result_arr['cstm']);
         } else {
             add_to_msg('Retrieved ' . $result['result_count'] . ' Records<br>', false);
             $get_entry_list = get_decoded($result['entry_list']);
             update_progress_bar('records', 65, 100);
             $done = save_altered($sync_module, $get_entry_list);
             update_progress_bar('records', 100, 100);
             add_to_msg('Added ' . $done['add'] . ' Records <br>', false);
             add_to_msg('Modified ' . $done['modify'] . ' Records <br>', false);
         }
         add_to_msg('Done<br>', false);
         if ($result['next_offset'] < $result['total_count']) {
             store_msg();
             echo '<input type="hidden" name="sync_module_index" value="' . $sync_module_index . '">';
             echo "<input type='hidden' id='offset' name='offset' value='" . $result['next_offset'] . "'>";
             echo "<input type='hidden' id='count' name='count' value='" . $result['total_count'] . "'>";
             echo "<input type='hidden' id='clean_sync' name='clean_sync' value='" . $clean_sync . "'>";
             echo '<script>document.getElementById("sync").submit();</script>';
             sugar_cleanup(true);
         }
         update_progress_bar('records', 100, 100);