Ejemplo n.º 1
0
function build_relationship_tree($contact)
{
    global $sugar_config;
    $contact->retrieve($contact->id);
    get_accounts_from_contact($contact->id);
    set_module_in(array('list' => array($contact->id), 'in' => "('" . $GLOBALS['db']->quote($contact->id) . "')"), 'Contacts');
    $accounts = $_SESSION['viewable']['Accounts'];
    foreach ($accounts as $id) {
        if (!isset($sugar_config['portal_view']) || $sugar_config['portal_view'] != 'single_user') {
            get_contacts_from_account($id);
        }
    }
}
function portal_set_entry($session, $module_name, $name_value_list)
{
    global $beanList, $beanFiles, $valid_modules_for_contact;
    $error = new SoapError();
    if (!portal_validate_authenticated($session)) {
        $error->set_error('invalid_session');
        return array('id' => -1, 'error' => $error->get_soap_array());
    }
    if (empty($beanList[$module_name])) {
        $error->set_error('no_module');
        return array('id' => -1, 'error' => $error->get_soap_array());
    }
    if ($_SESSION['type'] == 'lead' && $module_name != 'Leads') {
        $error->set_error('no_access');
        return array('id' => -1, 'error' => $error->get_soap_array());
    }
    if ($_SESSION['type'] == 'contact' && !key_exists($module_name, $valid_modules_for_contact)) {
        $error->set_error('no_access');
        return array('id' => -1, 'error' => $error->get_soap_array());
    }
    $class_name = $beanList[$module_name];
    require_once $beanFiles[$class_name];
    $seed = new $class_name();
    $is_update = false;
    $values_set = array();
    foreach ($name_value_list as $value) {
        if ($value['name'] == 'id' && !empty($value['value'])) {
            $seed->disable_row_level_security = true;
            $seed->retrieve($value['value']);
            $is_update = true;
            break;
        }
        $values_set[$value['name']] = $value['value'];
        $seed->{$value}['name'] = $value['value'];
    }
    // If it was an update, we have to set the values again
    if ($is_update) {
        foreach ($name_value_list as $value) {
            $seed->{$value}['name'] = $value['value'];
        }
    }
    if (!isset($_SESSION['viewable'][$module_name])) {
        $_SESSION['viewable'][$module_name] = array();
    }
    if (!$is_update) {
        if (isset($_SESSION['assigned_user_id']) && (!key_exists('assigned_user_id', $values_set) || empty($values_set['assigned_user_id']))) {
            $seed->assigned_user_id = $_SESSION['assigned_user_id'];
        }
        if (isset($_SESSION['account_id']) && (!key_exists('account_id', $values_set) || empty($values_set['account_id']))) {
            $seed->account_id = $_SESSION['account_id'];
        }
        $seed->portal_flag = 1;
        $seed->portal_viewable = true;
    }
    $id = $seed->save();
    set_module_in(array('in' => "('" . $GLOBALS['db']->quote($id) . "')", 'list' => array($id)), $module_name);
    if ($_SESSION['type'] == 'contact' && $module_name != 'Contacts' && !$is_update) {
        if ($module_name == 'Notes') {
            $seed->contact_id = $_SESSION['user_id'];
            if (isset($_SESSION['account_id'])) {
                $seed->parent_type = 'Accounts';
                $seed->parent_id = $_SESSION['account_id'];
            }
            $id = $seed->save();
        } else {
            $contact = new Contact();
            $contact->disable_row_level_security = TRUE;
            $contact->retrieve($_SESSION['user_id']);
            $seed->contact_id = $contact;
            if (isset($_SESSION['account_id'])) {
                $seed->account_id = $_SESSION['account_id'];
            }
            $seed->save_relationship_changes(false);
        }
    }
    return array('id' => $id, 'error' => $error->get_soap_array());
}