function save_permission_group() { ajx_current("empty"); if (!can_manage_dimension_members(logged_user())) { flash_error(lang('no access permissions')); return; } $member = Members::findById(array_var($_REQUEST, 'member_id')); if (!$member instanceof Member) { flash_error(lang('member dnx')); return; } $members = array($member); // if apply to submembers is checked get submembers verifying logged user permissions if (array_var($_REQUEST, 'apply_submembers') > 0) { $dimension = $member->getDimension(); $pg_ids_str = implode(',', logged_user()->getPermissionGroupIds()); $extra_conditions = ""; if (!$dimension->hasAllowAllForContact($pg_ids_str)) { $extra_conditions = " AND EXISTS (SELECT cmp.member_id FROM " . TABLE_PREFIX . "contact_member_permissions cmp \r\n\t\t\t\t\tWHERE cmp.member_id=" . TABLE_PREFIX . "members.id AND cmp.permission_group_id IN (" . $pg_ids_str . "))"; } $childs = $member->getAllChildren(true, null, $extra_conditions); $members = array_merge($members, $childs); } $pg_id = array_var($_REQUEST, 'pg_id'); $permissions = array_var($_REQUEST, 'perms'); $all_permissions = array(); foreach ($members as $member) { $all_permissions[$member->getId()] = json_decode($permissions); foreach ($all_permissions[$member->getId()] as &$perm) { $perm->m = $member->getId(); } } $all_permissions_str = json_encode(array_flat($all_permissions)); $_POST['permissions'] = $all_permissions_str; try { DB::beginWork(); $_POST['root_perm_genid'] = 'dummy_root_perm_genid'; save_user_permissions_background(logged_user(), $pg_id, false, array(), true); $null = null; Hook::fire('after_save_member_permissions_for_pg', $_REQUEST, $null); DB::commit(); flash_success(lang("permissions successfully saved")); } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); } }
/** * Show update permissions page * * @param void * @return null */ function update_permissions() { $user = Contacts::findById(get_id()); if (!($user instanceof Contact && $user->isUser()) || $user->getDisabled()) { flash_error(lang('user dnx')); ajx_current("empty"); return; } // if if (!$user->canUpdatePermissions(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $redirect_to = array_var($_GET, 'redirect_to'); if (trim($redirect_to) == '' || !is_valid_url($redirect_to)) { $redirect_to = $user->getCardUserUrl(); } // if $sys_permissions_data = array_var($_POST, 'sys_perm'); if (!is_array($sys_permissions_data)) { $pg_id = $user->getPermissionGroupId(); $parameters = permission_form_parameters($pg_id); // Module Permissions $module_permissions = TabPanelPermissions::findAll(array("conditions" => "`permission_group_id` = {$pg_id}")); $module_permissions_info = array(); foreach ($module_permissions as $mp) { $module_permissions_info[$mp->getTabPanelId()] = 1; } $all_modules = TabPanels::findAll(array("conditions" => "`enabled` = 1", "order" => "ordering")); $all_modules_info = array(); foreach ($all_modules as $module) { $all_modules_info[] = array('id' => $module->getId(), 'name' => lang($module->getTitle()), 'ot' => $module->getObjectTypeId()); } // System Permissions $system_permissions = SystemPermissions::findById($pg_id); tpl_assign('module_permissions_info', $module_permissions_info); tpl_assign('all_modules_info', $all_modules_info); if (!$system_permissions instanceof SystemPermission) { $system_permissions = new SystemPermission(); } tpl_assign('system_permissions', $system_permissions); tpl_assign('permission_parameters', $parameters); $more_permissions = array(); Hook::fire('add_user_permissions', $pg_id, $more_permissions); tpl_assign('more_permissions', $more_permissions); tpl_assign('pg_id', $pg_id); // Permission Groups $groups = PermissionGroups::getNonPersonalSameLevelPermissionsGroups('`parent_id`,`id` ASC'); tpl_assign('groups', $groups); $roles = SystemPermissions::getAllRolesPermissions(); tpl_assign('roles', $roles); $tabs = TabPanelPermissions::getAllRolesModules(); tpl_assign('tabs_allowed', $tabs); tpl_assign('guest_groups', PermissionGroups::instance()->getGuestPermissionGroups()); } tpl_assign('user', $user); tpl_assign('redirect_to', $redirect_to); if (array_var($_POST, 'submitted') == 'submitted') { $user_data = array_var($_POST, 'user'); if (!is_array($user_data)) { $user_data = array(); } try { DB::beginWork(); $do_rollback = true; $pg_id = $user->getPermissionGroupId(); $type = array_var(array_var(array_var($_POST, 'contact'), 'user'), 'type'); $user->setUserType($type); $user->save(); DB::commit(); $do_rollback = false; save_user_permissions_background(logged_user(), $pg_id, $user->isGuest()); flash_success(lang('success user permissions updated')); ajx_current("back"); } catch (Exception $e) { if ($do_rollback) { DB::rollback(); } flash_error($e->getMessage()); ajx_current("empty"); } } // if }
/** * Edit specific contact * * @access public * @param void * @return null */ function edit() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $this->setTemplate('edit_contact'); $contact = Contacts::findById(get_id()); if (!$contact instanceof Contact) { flash_error(lang('contact dnx')); ajx_current("empty"); return; } // if if (!$contact->canEdit(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $im_types = ImTypes::findAll(array('order' => '`id`')); // telephone types $all_telephone_types = TelephoneTypes::getAllTelephoneTypesInfo(); tpl_assign('all_telephone_types', $all_telephone_types); // address types $all_address_types = AddressTypes::getAllAddressTypesInfo(); tpl_assign('all_address_types', $all_address_types); // webpage types $all_webpage_types = WebpageTypes::getAllWebpageTypesInfo(); tpl_assign('all_webpage_types', $all_webpage_types); // email types $all_email_types = EmailTypes::getAllEmailTypesInfo(); tpl_assign('all_email_types', $all_email_types); $contact_data = array_var($_POST, 'contact'); // Populate form fields if (!is_array($contact_data)) { // set layout for modal form if (array_var($_REQUEST, 'modal')) { $this->setLayout("json"); tpl_assign('modal', true); } $contact_data = $this->get_contact_data_from_contact($contact); if ($contact->isUser()) { $_REQUEST['is_user'] = 1; tpl_assign('user_type', $contact->getUserType()); } if (is_array($im_types)) { foreach ($im_types as $im_type) { $contact_data['im_' . $im_type->getId()] = $contact->getImValue($im_type); } // foreach } // if $null = null; Hook::fire('before_edit_contact_form', array('object' => $contact), $null); } // if tpl_assign('isEdit', array_var($_GET, 'isEdit', false)); tpl_assign('contact', $contact); tpl_assign('contact_data', $contact_data); tpl_assign('im_types', $im_types); tpl_assign('active_tab', array_var($_REQUEST, 'active_tab')); //Contact Submit if (is_array(array_var($_POST, 'contact'))) { foreach ($contact_data as $k => &$v) { $v = remove_scripts($v); } try { DB::beginWork(); $contact_data['email'] = trim($contact_data['email']); $contact_data['contact_type'] = 'contact'; Contacts::validate($contact_data, get_id()); $newCompany = false; if (array_var($contact_data, 'isNewCompany') == 'true' && is_array(array_var($_POST, 'company'))) { $company_data = array_var($_POST, 'company'); $company_data['contact_type'] = 'company'; Contacts::validate($company_data); $company = new Contact(); $company->setFromAttributes($company_data); $company->setIsCompany(true); $company->setObjectName(); $company->save(); // save phones, addresses and webpages $this->save_phones_addresses_webpages($company_data, $company); if ($company_data['email'] != "") { $company->addEmail($company_data['email'], 'work', true); } $newCompany = true; } $contact_data['birthday'] = getDateValue($contact_data["birthday"]); if (isset($contact_data['specify_username'])) { if ($contact_data['user']['username'] != "") { $contact_data['name'] = $contact_data['user']['username']; } else { $contact_data['name'] = $contact_data['first_name'] . " " . $contact_data['surname']; } } else { $contact_data['name'] = $contact_data['first_name'] . " " . $contact_data['surname']; } $user_data = array_var($_POST, 'user'); if (is_array($user_data) && trim(array_var($user_data, 'username', '')) != "") { $contact_data['username'] = trim(array_var($user_data, 'username', '')); } $contact->setFromAttributes($contact_data); if ($newCompany) { $contact->setCompanyId($company->getId()); } $contact->setObjectName(); $contact->save(); // save phones, addresses and webpages $this->save_phones_addresses_webpages($contact_data, $contact); //Emails $personal_email_type_id = EmailTypes::getEmailTypeId('personal'); $main_emails = $contact->getMainEmails(); $more_main_emails = array(); $main_mail = null; foreach ($main_emails as $me) { if ($main_mail == null) { $main_mail = $me; } else { $more_main_emails[] = $me; } } if ($main_mail) { $main_mail->editEmailAddress($contact_data['email']); } else { if ($contact_data['email'] != "") { $contact->addEmail($contact_data['email'], 'personal', true); } } foreach ($more_main_emails as $mme) { $mme->setIsMain(false); $mme->save(); } // save additional emails $this->save_non_main_emails($contact_data, $contact); // autodetect timezone $autotimezone = array_var($contact_data, 'autodetect_time_zone', null); if ($autotimezone !== null) { set_user_config_option('autodetect_time_zone', $autotimezone, $contact->getId()); } // IM values $contact->clearImValues(); foreach ($im_types as $im_type) { $value = trim(array_var($contact_data, 'im_' . $im_type->getId())); if ($value != '') { $contact_im_value = new ContactImValue(); $contact_im_value->setContactId($contact->getId()); $contact_im_value->setImTypeId($im_type->getId()); $contact_im_value->setValue($value); $contact_im_value->setIsMain(array_var($contact_data, 'default_im') == $im_type->getId()); $contact_im_value->save(); } // if } // foreach $member_ids = json_decode(array_var($_POST, 'members')); $object_controller = new ObjectController(); if (!is_null($member_ids)) { $object_controller->add_to_members($contact, $member_ids); } $no_perm_members_ids = json_decode(array_var($_POST, 'no_perm_members')); if (count($no_perm_members_ids)) { $object_controller->add_to_members($contact, $no_perm_members_ids); } if ($newCompany) { $object_controller->add_to_members($company, $member_ids); } $object_controller->link_to_new_object($contact); $object_controller->add_subscribers($contact); $object_controller->add_custom_properties($contact); // User settings $user = array_var(array_var($_POST, 'contact'), 'user'); if ($user && $contact->canUpdatePermissions(logged_user())) { $user_type_changed = false; if (array_var($user, 'type')) { $user_type_changed = $contact->getUserType() != array_var($user, 'type'); $contact->setUserType(array_var($user, 'type')); $contact->save(); } if ($user_type_changed) { $this->cut_max_user_permissions($contact); } // update user groups if (isset($_REQUEST['user_groups'])) { $insert_values = ""; $group_ids = explode(',', $_REQUEST['user_groups']); foreach ($group_ids as $gid) { if (trim($gid) == "" || !is_numeric($gid)) { continue; } $insert_values .= ($insert_values == "" ? "" : ",") . "(" . $contact->getId() . ", {$gid})"; } ContactPermissionGroups::instance()->delete("contact_id=" . $contact->getId() . " AND permission_group_id <> " . $contact->getPermissionGroupId()); if ($insert_values != "") { DB::execute("INSERT INTO " . TABLE_PREFIX . "contact_permission_groups VALUES {$insert_values} ON DUPLICATE KEY UPDATE contact_id=contact_id;"); } ContactMemberCaches::updateContactMemberCacheAllMembers($contact); } } $null = null; Hook::fire('after_edit_contact', $contact, $null); DB::commit(); // save user permissions if ($user && $contact->canUpdatePermissions(logged_user())) { save_user_permissions_background(logged_user(), $contact->getPermissionGroupId(), $contact->isGuest()); } if (array_var($contact_data, 'isNewCompany') == 'true' && is_array(array_var($_POST, 'company'))) { ApplicationLogs::createLog($company, ApplicationLogs::ACTION_ADD); } ApplicationLogs::createLog($contact, ApplicationLogs::ACTION_EDIT); flash_success(lang('success edit contact', $contact->getObjectName())); ajx_current("back"); if (array_var($_REQUEST, 'modal')) { evt_add("reload current panel"); } } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } // try } // if }
/** * Edit group * * @param void * @return null */ function edit() { $this->setTemplate('add'); if (!can_manage_security(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $group = PermissionGroups::findById(get_id()); if (!$group instanceof PermissionGroup) { flash_error(lang('group dnx')); $this->redirectTo('administration', 'groups'); } // if $group_data = array_var($_POST, 'group'); if (!is_array($group_data)) { $pg_id = $group->getId(); $parameters = permission_form_parameters($pg_id); // Module Permissions $module_permissions = TabPanelPermissions::findAll(array("conditions" => "`permission_group_id` = {$pg_id}")); $module_permissions_info = array(); foreach ($module_permissions as $mp) { $module_permissions_info[$mp->getTabPanelId()] = 1; } $all_modules = TabPanels::findAll(array("conditions" => "`enabled` = 1", "order" => "ordering")); $all_modules_info = array(); foreach ($all_modules as $module) { $all_modules_info[] = array('id' => $module->getId(), 'name' => lang($module->getTitle()), 'ot' => $module->getObjectTypeId()); } // System Permissions $system_permissions = SystemPermissions::findById($pg_id); tpl_assign('module_permissions_info', $module_permissions_info); tpl_assign('all_modules_info', $all_modules_info); tpl_assign('system_permissions', $system_permissions); tpl_assign('permission_parameters', $parameters); // users $group_users = array(); $cpgs = ContactPermissionGroups::findAll(array("conditions" => "`permission_group_id` = {$pg_id}")); foreach ($cpgs as $cpg) { $group_users[] = $cpg->getContactId(); } tpl_assign('groupUserIds', $group_users); tpl_assign('users', Contacts::getAllUsers()); tpl_assign('pg_id', $group->getId()); tpl_assign('group', $group); tpl_assign('group_data', array('name' => $group->getName())); add_page_action(lang('delete'), "javascript:if(confirm(lang('confirm delete group'))) og.openLink('" . $group->getDeleteUrl() . "');", 'ico-trash', null, null, true); } else { try { $group->setFromAttributes($group_data); DB::beginWork(); $group->save(); // set permissions $pg_id = $group->getId(); //save_permissions($pg_id); $gr_users = $group->getUsers(); $gr_users_ids = array(); if ($post_users = array_var($_POST, 'user')) { foreach ($post_users as $user_id => $val) { if ($val == '1' && is_numeric($user_id)) { $gr_users_ids[] = $user_id; } } } foreach ($gr_users as $us) { if (!in_array($us->getId(), $gr_users_ids)) { $gr_users_ids[] = $us->getId(); } } // save users ContactPermissionGroups::delete("`permission_group_id` = {$pg_id}"); if ($users = array_var($_POST, 'user')) { foreach ($users as $user_id => $val) { if ($val == '1' && is_numeric($user_id) && Contacts::findById($user_id) instanceof Contact) { $cpg = new ContactPermissionGroup(); $cpg->setPermissionGroupId($pg_id); $cpg->setContactId($user_id); $cpg->save(); } } } //ApplicationLogs::createLog($group, ApplicationLogs::ACTION_EDIT); DB::commit(); flash_success(lang('success edit group', $group->getName())); ajx_current("back"); } catch (Exception $e) { DB::rollback(); tpl_assign('error', $e); return; } try { save_user_permissions_background(logged_user(), $pg_id, false, $gr_users_ids); } catch (Exception $e) { tpl_assign('error', $e); } } }
function create_user($user_data, $permissionsString, $rp_permissions_data = array(), $save_permissions = true) { // try to find contact by some properties $contact_id = array_var($user_data, "contact_id"); $contact = Contacts::instance()->findById($contact_id); if (!is_valid_email(array_var($user_data, 'email'))) { throw new Exception(lang("email value is required")); } if (!$contact instanceof Contact) { // Create a new user $contact = new Contact(); $contact->setUsername(array_var($user_data, 'username')); $contact->setDisplayName(array_var($user_data, 'display_name')); $contact->setCompanyId(array_var($user_data, 'company_id')); $contact->setUserType(array_var($user_data, 'type')); $contact->setTimezone(array_var($user_data, 'timezone')); $contact->setFirstname($contact->getObjectName() != "" ? $contact->getObjectName() : $contact->getUsername()); $contact->setObjectName(); $user_from_contact = false; } else { // Create user from contact $contact->setUserType(array_var($user_data, 'type')); if (array_var($user_data, 'company_id')) { $contact->setCompanyId(array_var($user_data, 'company_id')); } $contact->setUsername(array_var($user_data, 'username')); $contact->setTimezone(array_var($user_data, 'timezone')); $user_from_contact = true; } $contact->save(); if (is_valid_email(array_var($user_data, 'email'))) { $user = Contacts::getByEmail(array_var($user_data, 'email')); if (!$user) { $contact->addEmail(array_var($user_data, 'email'), 'personal', true); } } //permissions $additional_name = ""; $tmp_pg = PermissionGroups::findOne(array('conditions' => "`name`='User " . $contact->getId() . " Personal'")); if ($tmp_pg instanceof PermissionGroup) { $additional_name = "_" . gen_id(); } $permission_group = new PermissionGroup(); $permission_group->setName('User ' . $contact->getId() . $additional_name . ' Personal'); $permission_group->setContactId($contact->getId()); $permission_group->setIsContext(false); $permission_group->setType("permission_groups"); $permission_group->save(); $contact->setPermissionGroupId($permission_group->getId()); $null = null; Hook::fire('on_create_user_perm_group', $permission_group, $null); $contact_pg = new ContactPermissionGroup(); $contact_pg->setContactId($contact->getId()); $contact_pg->setPermissionGroupId($permission_group->getId()); $contact_pg->save(); if (can_manage_security(logged_user())) { $sp = new SystemPermission(); if (!$user_from_contact) { $rol_permissions = SystemPermissions::getRolePermissions(array_var($user_data, 'type')); if (is_array($rol_permissions)) { foreach ($rol_permissions as $pr) { $sp->setPermission($pr); } } } $sp->setPermissionGroupId($permission_group->getId()); if (isset($user_data['can_manage_security'])) { $sp->setCanManageSecurity(array_var($user_data, 'can_manage_security')); } if (isset($user_data['can_manage_configuration'])) { $sp->setCanManageConfiguration(array_var($user_data, 'can_manage_configuration')); } if (isset($user_data['can_manage_templates'])) { $sp->setCanManageTemplates(array_var($user_data, 'can_manage_templates')); } if (isset($user_data['can_manage_time'])) { $sp->setCanManageTime(array_var($user_data, 'can_manage_time')); } if (isset($user_data['can_add_mail_accounts'])) { $sp->setCanAddMailAccounts(array_var($user_data, 'can_add_mail_accounts')); } if (isset($user_data['can_manage_dimensions'])) { $sp->setCanManageDimensions(array_var($user_data, 'can_manage_dimensions')); } if (isset($user_data['can_manage_dimension_members'])) { $sp->setCanManageDimensionMembers(array_var($user_data, 'can_manage_dimension_members')); } if (isset($user_data['can_manage_tasks'])) { $sp->setCanManageTasks(array_var($user_data, 'can_manage_tasks')); } if (isset($user_data['can_task_assignee'])) { $sp->setCanTasksAssignee(array_var($user_data, 'can_task_assignee')); } if (isset($user_data['can_manage_billing'])) { $sp->setCanManageBilling(array_var($user_data, 'can_manage_billing')); } if (isset($user_data['can_view_billing'])) { $sp->setCanViewBilling(array_var($user_data, 'can_view_billing')); } if (isset($user_data['can_see_assigned_to_other_tasks'])) { $sp->setColumnValue('can_see_assigned_to_other_tasks', array_var($user_data, 'can_see_assigned_to_other_tasks')); } Hook::fire('add_user_permissions', $sp, $other_permissions); if (!is_null($other_permissions) && is_array($other_permissions)) { foreach ($other_permissions as $k => $v) { $sp->setColumnValue($k, array_var($user_data, $k)); } } $sp->save(); $permissions_sent = array_var($_POST, 'manual_permissions_setted') == 1; // give permissions for user if user type defined in "give_member_permissions_to_new_users" config option $allowed_user_type_ids = config_option('give_member_permissions_to_new_users'); if ($contact->isAdministrator() || !$permissions_sent && in_array($contact->getUserType(), $allowed_user_type_ids)) { ini_set('memory_limit', '512M'); $permissions = array(); $default_permissions = RoleObjectTypePermissions::instance()->findAll(array('conditions' => 'role_id = ' . $contact->getUserType())); $dimensions = Dimensions::findAll(); foreach ($dimensions as $dimension) { if ($dimension->getDefinesPermissions()) { $cdp = ContactDimensionPermissions::findOne(array("conditions" => "`permission_group_id` = " . $contact->getPermissionGroupId() . " AND `dimension_id` = " . $dimension->getId())); if (!$cdp instanceof ContactDimensionPermission) { $cdp = new ContactDimensionPermission(); $cdp->setPermissionGroupId($contact->getPermissionGroupId()); $cdp->setContactDimensionId($dimension->getId()); } $cdp->setPermissionType('check'); $cdp->save(); // contact member permisssion entries $members = DB::executeAll('SELECT * FROM ' . TABLE_PREFIX . 'members WHERE dimension_id=' . $dimension->getId()); foreach ($members as $member) { foreach ($default_permissions as $p) { // Add persmissions to sharing table $perm = new stdClass(); $perm->m = $member['id']; $perm->r = 1; $perm->w = $p->getCanWrite(); $perm->d = $p->getCanDelete(); $perm->o = $p->getObjectTypeId(); $permissions[] = $perm; } } } } $_POST['permissions'] = json_encode($permissions); } else { if ($permissions_sent) { $_POST['permissions'] = $permissionsString; } else { $_POST['permissions'] = ""; } } if (config_option('let_users_create_objects_in_root') && ($contact->isAdminGroup() || $contact->isExecutive() || $contact->isManager())) { if ($permissions_sent) { foreach ($rp_permissions_data as $name => $value) { $ot_id = substr($name, strrpos($name, '_') + 1); $cmp = new ContactMemberPermission(); $cmp->setPermissionGroupId($permission_group->getId()); $cmp->setMemberId(0); $cmp->setObjectTypeId($ot_id); $cmp->setCanDelete($value >= 3); $cmp->setCanWrite($value >= 2); $cmp->save(); } } else { $default_permissions = RoleObjectTypePermissions::instance()->findAll(array('conditions' => 'role_id = ' . $contact->getUserType())); foreach ($default_permissions as $p) { $cmp = new ContactMemberPermission(); $cmp->setPermissionGroupId($permission_group->getId()); $cmp->setMemberId(0); $cmp->setObjectTypeId($p->getObjectTypeId()); $cmp->setCanDelete($p->getCanDelete()); $cmp->setCanWrite($p->getCanWrite()); $cmp->save(); } } } } if (!isset($_POST['sys_perm']) && !$user_from_contact) { $rol_permissions = SystemPermissions::getRolePermissions(array_var($user_data, 'type')); $_POST['sys_perm'] = array(); if (is_array($rol_permissions)) { foreach ($rol_permissions as $pr) { $_POST['sys_perm'][$pr] = 1; } } } if (!isset($_POST['mod_perm']) && !$user_from_contact) { $tabs_permissions = TabPanelPermissions::getRoleModules(array_var($user_data, 'type')); $_POST['mod_perm'] = array(); foreach ($tabs_permissions as $pr) { $_POST['mod_perm'][$pr] = 1; } } $password = ''; if (array_var($user_data, 'password_generator') == 'specify') { $perform_password_validation = true; // Validate input $password = array_var($user_data, 'password'); if (trim($password) == '') { throw new Error(lang('password value required')); } // if if ($password != array_var($user_data, 'password_a')) { throw new Error(lang('passwords dont match')); } // if } else { $user_data['password_generator'] = 'link'; $perform_password_validation = false; } $contact->setPassword($password); $contact->save(); $user_password = new ContactPassword(); $user_password->setContactId($contact->getId()); $user_password->setPasswordDate(DateTimeValueLib::now()); $user_password->setPassword(cp_encrypt($password, $user_password->getPasswordDate()->getTimestamp())); $user_password->password_temp = $password; $user_password->perform_validation = $perform_password_validation; $user_password->save(); if (array_var($user_data, 'autodetect_time_zone', 1) == 1) { set_user_config_option('autodetect_time_zone', 1, $contact->getId()); } /* create contact for this user*/ ApplicationLogs::createLog($contact, ApplicationLogs::ACTION_ADD); // Set role permissions for active members $active_context = active_context(); $sel_members = array(); if (is_array($active_context) && !$permissions_sent) { $tmp_perms = array(); if ($_POST['permissions'] != "") { $tmp_perms = json_decode($_POST['permissions']); } foreach ($active_context as $selection) { if ($selection instanceof Member) { $sel_members[] = $selection; $has_project_permissions = ContactMemberPermissions::instance()->count("permission_group_id = '" . $contact->getPermissionGroupId() . "' AND member_id = " . $selection->getId()) > 0; if (!$has_project_permissions) { $new_cmps = RoleObjectTypePermissions::createDefaultUserPermissions($contact, $selection); foreach ($new_cmps as $new_cmp) { $perm = new stdClass(); $perm->m = $new_cmp->getMemberId(); $perm->r = 1; $perm->w = $new_cmp->getCanWrite(); $perm->d = $new_cmp->getCanDelete(); $perm->o = $new_cmp->getObjectTypeId(); $tmp_perms[] = $perm; } } } } if (count($tmp_perms) > 0) { $_POST['permissions'] = json_encode($tmp_perms); } } if ($save_permissions) { //save_permissions($contact->getPermissionGroupId(), $contact->isGuest()); save_user_permissions_background(logged_user(), $contact->getPermissionGroupId(), $contact->isGuest()); } Hook::fire('after_user_add', $contact, $null); // add user content object to associated members if (count($sel_members) > 0) { ObjectMembers::addObjectToMembers($contact->getId(), $sel_members); $contact->addToSharingTable(); } return $contact; }