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
 }
Example #4
0
 /**
  * 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
 }