function assign_users() { if (!logged_user()->isAdministrator()) { flash_error(lang("no access permissions")); ajx_current("empty"); return; } $users_data = array_var($_POST, 'users'); if (is_array($users_data)) { try { DB::beginWork(); foreach ($users_data as $user_id => $user_billing) { $user = Users::findById($user_id); if ($user_billing != $user->getDefaultBillingId()) { $user->setDefaultBillingId($user_billing); $user->save(); } } DB::commit(); flash_success(lang("success assign user billing categories")); ajx_current("back"); } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } } tpl_assign('users_by_company', Users::getGroupedByCompany()); tpl_assign('billing_categories', BillingCategories::findAll()); }
/** * Edit logged user profile. * Called with different POST format from "administration/users/edit user profile " and from "profile/edit my profile" * * @access public * @param void * @return null */ function edit_profile() { ajx_set_panel(""); $user = Contacts::findById(get_id()); if (!($user instanceof Contact && $user->isUser()) || $user->getDisabled()) { flash_error(lang('user dnx')); ajx_current("empty"); return; } // if $company = $user->getCompany(); /*if(!($company instanceof Contact)) { flash_error(lang('company dnx')); ajx_current("empty"); return; } // if */ if (!$user->canUpdateProfile(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 tpl_assign('redirect_to', null); $user_data = array_var($_POST, 'user'); if (!is_array($user_data)) { $user_data = array('username' => $user->getUsername(), 'email' => $user->getEmailAddress(), 'display_name' => $user->getObjectName(), 'timezone' => $user->getTimezone(), 'company_id' => $user->getCompanyId(), 'is_admin' => $user->isAdministrator(), 'type' => $user->getUserType()); // array } // if tpl_assign('user', $user); tpl_assign('company', $company); tpl_assign('user_data', $user_data); tpl_assign('billing_categories', BillingCategories::findAll()); // 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); // Submit user if (is_array(array_var($_POST, 'user'))) { $company_id = array_var($user_data, 'company_id'); if ($company_id && !Contacts::findById($company_id) instanceof Contact) { ajx_current("empty"); flash_error(lang("company dnx")); return; } try { DB::beginWork(); $user->setUserType(array_var($user_data, 'type')); $user->setTimezone(array_var($user_data, 'timezone')); $user->setDefaultBillingId(array_var($user_data, 'default_billing_id')); $user->setUpdatedOn(DateTimeValueLib::now()); if (logged_user()->isAdministrator()) { //if ($user->getId() != 2) { // System admin cannot change it's company (from Feng 2.0 onwards administrador has id = 2) // $user->setCompanyId(array_var($user_data,'company_id')); //} $user->setUsername(array_var($user_data, 'username')); } else { $user->setCompanyId(array_var($user_data, 'company_id')); } if (!isset($_POST['sys_perm'])) { $rol_permissions = SystemPermissions::getRolePermissions(array_var($user_data, 'type')); $_POST['sys_perm'] = array(); $not_rol_permissions = SystemPermissions::getNotRolePermissions(array_var($user_data, 'type')); foreach ($not_rol_permissions as $npr) { $_POST['sys_perm'][$npr] = 0; } foreach ($rol_permissions as $pr) { $_POST['sys_perm'][$pr] = 1; } } if (!isset($_POST['mod_perm'])) { $tabs_permissions = TabPanelPermissions::getRoleModules(array_var($user_data, 'type')); $_POST['mod_perm'] = array(); foreach ($tabs_permissions as $pr) { $_POST['mod_perm'][$pr] = 1; } } $user->save(); $autotimezone = array_var($user_data, 'autodetect_time_zone', null); if ($autotimezone !== null) { set_user_config_option('autodetect_time_zone', $autotimezone, $user->getId()); } $object_controller = new ObjectController(); $object_controller->add_custom_properties($user); $ret = null; Hook::fire('after_edit_profile', $user, $ret); $pg_id = $user->getPermissionGroupId(); save_permissions($pg_id, $user->isGuest()); DB::commit(); flash_success(lang('success update profile')); ajx_current("back"); ajx_add("overview-panel", "reload"); } catch (Exception $e) { DB::rollback(); ajx_current("empty"); flash_error($e->getMessage()); } // try } // if }
/** * Edit logged user profile. * Called with different POST format from "administration/users/edit user profile " and from "profile/edit my profile" * * @access public * @param void * @return null */ function edit_profile() { $user = Users::findById(get_id()); if (!$user instanceof User) { flash_error(lang('user dnx')); ajx_current("empty"); return; } // if $company = $user->getCompany(); if (!$company instanceof Company) { flash_error(lang('company dnx')); ajx_current("empty"); return; } // if if (!$user->canUpdateProfile(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->getCardUrl(); } // if tpl_assign('redirect_to', null); $user_data = array_var($_POST, 'user'); if (!is_array($user_data)) { $user_data = array('username' => $user->getUsername(), 'email' => $user->getEmail(), 'display_name' => $user->getDisplayName(), 'title' => $user->getTitle(), 'timezone' => $user->getTimezone(), 'auto_assign' => $user->getAutoAssign(), 'company_id' => $user->getCompanyId(), 'is_admin' => $user->isAdministrator(), 'type' => $user->getType()); // array } // if tpl_assign('user', $user); tpl_assign('company', $company); tpl_assign('user_data', $user_data); tpl_assign('billing_categories', BillingCategories::findAll()); if (is_array(array_var($_POST, 'user'))) { if (array_var($user_data, 'company_id') && !Companies::findById(array_var($user_data, 'company_id')) instanceof Company) { ajx_current("empty"); flash_error(lang("company dnx")); return; } try { DB::beginWork(); $user->setDisplayName(array_var($user_data, 'display_name')); $user->setEmail(array_var($user_data, 'email')); $user->setType(array_var($user_data, 'type')); $user->setTimezone(array_var($user_data, 'timezone')); $user->setTitle(array_var($user_data, 'title')); $user->setUpdatedOn(DateTimeValueLib::now()); if (logged_user()->isAdministrator()) { if ($user->getId() != 1) { // System admin cannot change it's company $user->setCompanyId(array_var($user_data, 'company_id')); } $user->setDefaultBillingId(array_var($user_data, 'default_billing_id')); $user->setUsername(array_var($user_data, 'username')); $project = Projects::findById(array_var($user_data, 'personal_project_id')); if ($project instanceof Project && $user->getPersonalProjectId() != $project->getId()) { $user->setPersonalProjectId($project->getId()); $project_user = ProjectUsers::findById(array('project_id' => $project->getId(), 'user_id' => $user->getId())); if (!$project_user) { $project_user = new ProjectUser(); $project_user->setUserId($user->getId()); $project_user->setProjectId($project->getId()); } $project_user->setAllPermissions(true); $project_user->save(); } } $user->save(); $autotimezone = array_var($user_data, 'autodetect_time_zone', null); if ($autotimezone !== null) { set_user_config_option('autodetect_time_zone', $autotimezone, $user->getId()); } $object_controller = new ObjectController(); $object_controller->add_custom_properties($user); if ($user->getId() != 1) { //System admin cannot change its own admin status if ($user->getType() == 'admin') { if ($user->getCompanyId() != owner_company()->getId()) { // external users can't be admins => set as Normal $user->setType('normal'); $user->setAsAdministrator(false); } else { $user->setAsAdministrator(true); } } else { $user->setAsAdministrator(false); } } DB::commit(); flash_success(lang('success update profile')); ajx_current("back"); ajx_add("overview-panel", "reload"); } catch (Exception $e) { DB::rollback(); ajx_current("empty"); flash_error($e->getMessage()); } // try } // if }
/** * Returns an array with a list of values and information about where they were obtained from * * @param array $billing_category_ids */ function getBillingAmounts($billing_categories = null) { if (!$billing_categories) { $billing_categories = BillingCategories::findAll(); } if ($billing_categories && count($billing_categories) > 0) { $result = array(); $billing_category_ids = array(); foreach ($billing_categories as $category) { $billing_category_ids[] = $category->getId(); } $wsBillingCategories = WorkspaceBillings::findAll(array('conditions' => 'project_id = ' . $this->getId() . ' and billing_id in (' . implode(',', $billing_category_ids) . ')')); if ($wsBillingCategories) { foreach ($wsBillingCategories as $wsCategory) { for ($i = 0; $i < count($billing_categories); $i++) { if ($billing_categories[$i]->getId() == $wsCategory->getBillingId()) { $result[] = array('category' => $billing_categories[$i], 'value' => $wsCategory->getValue(), 'origin' => $this->getId()); array_splice($billing_categories, $i, 1); array_splice($billing_category_ids, $i, 1); break; } } } } if (count($billing_categories) > 0) { if ($this->getParentWorkspace() instanceof Project) { $resultToConcat = $this->getParentWorkspace()->getBillingAmounts($billing_categories); foreach ($resultToConcat as $resultValue) { $result[] = array('category' => $resultValue['category'], 'value' => $resultValue['value'], 'origin' => $resultValue['origin'] == 'default' ? 'default' : 'inherited'); } } else { foreach ($billing_categories as $category) { $result[] = array('category' => $category, 'value' => $category->getDefaultValue(), 'origin' => 'default'); } } } return $result; } else { return null; } }
/** * Add user * * @access public * @param void * @return null */ function add() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $max_users = config_option('max_users'); if ($max_users && Users::count() >= $max_users) { flash_error(lang('maximum number of users reached error')); ajx_current("empty"); return; } $this->setTemplate('add_user'); $company = Companies::findById(get_id('company_id')); if (!$company instanceof Company) { $company = owner_company(); } // if if (!User::canAdd(logged_user(), $company)) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $user = new User(); $user_data = array_var($_POST, 'user'); if (!is_array($user_data)) { //if it is a new user $contact_id = get_id('contact_id'); $contact = Contacts::findById($contact_id); if ($contact instanceof Contact) { //if it will be created from a contact $user_data = array('username' => $this->generateUserNameFromContact($contact), 'display_name' => $contact->getFirstname() . $contact->getLastname(), 'email' => $contact->getEmail(), 'contact_id' => $contact->getId(), 'password_generator' => 'random', 'company_id' => $company->getId(), 'timezone' => $contact->getTimezone(), 'create_contact' => false, 'type' => 'normal', 'can_manage_time' => true); // array } else { // if it is new, and created from admin interface $user_data = array('password_generator' => 'random', 'company_id' => $company->getId(), 'timezone' => $company->getTimezone(), 'create_contact' => true, 'send_email_notification' => true, 'type' => 'normal', 'can_manage_time' => true); // array } } // if $permissions = ProjectUsers::getNameTextArray(); tpl_assign('user', $user); tpl_assign('company', $company); tpl_assign('permissions', $permissions); tpl_assign('user_data', $user_data); tpl_assign('billing_categories', BillingCategories::findAll()); if (is_array(array_var($_POST, 'user'))) { if (!array_var($user_data, 'createPersonalProject')) { $user_data['personal_project'] = 0; } try { DB::beginWork(); $user = $this->createUser($user_data, array_var($_POST, 'permissions')); $object_controller = new ObjectController(); $object_controller->add_custom_properties($user); DB::commit(); flash_success(lang('success add user', $user->getDisplayName())); ajx_current("back"); } catch (Exception $e) { DB::rollback(); ajx_current("empty"); flash_error($e->getMessage()); } // try } // if }