コード例 #1
0
 /**
  * Check if this user is part of specific project
  *
  * @param Project $project
  * @return boolean
  */
 function isProjectUser(Project $project)
 {
     if (!isset($this->is_project_user_cache[$project->getId()])) {
         $project_user = ProjectUsers::findById(array('project_id' => $project->getId(), 'user_id' => $this->getId()));
         // findById
         $this->is_project_user_cache[$project->getId()] = $project_user instanceof ProjectUser;
     }
     // if
     return $this->is_project_user_cache[$project->getId()];
 }
コード例 #2
0
 /**
  * Delete project - company relation
  * 
  * This function needs to remove relation from the database and all user - project relations
  *
  * @param void
  * @return boolean
  */
 function delete()
 {
     $company = $this->getCompany();
     $project = $this->getProject();
     if ($company instanceof Company && $project instanceof Project) {
         $users = $company->getUsers();
         if (is_array($users)) {
             foreach ($users as $user) {
                 $relation = ProjectUsers::findById(array('project_id' => $project->getId(), 'user_id' => $user->getId()));
                 //findById
                 if ($relation instanceof ProjectUser) {
                     $relation->delete();
                 }
                 // if
             }
             // foreach
         }
         // if
     }
     // if
     return parent::delete();
 }
コード例 #3
0
ファイル: User.class.php プロジェクト: pombredanne/ArcherSys
    /**
    * Return project permission for specific user if he is on project. In case of any error $default is returned
    *
    * @access public
    * @param Project $project
    * @param string $permission Permission name
    * @param boolean $default Default value
    * @return boolean
    */
    function getProjectPermission(Project $project, $permission, $default = false) {
      trace(__FILE__,"getProjectPermission($permission, $default)");
      if (is_null($project)) return false;
      static $valid_permissions;
      if (!isset($valid_permissions)) {
        trace(__FILE__,"getProjectPermission($permission, $default):getPermissionsText()");
        $valid_permissions = array_keys(permission_manager()->getPermissionsText());
      } // if
      
      if (!in_array($permission, $valid_permissions)) {
        return $default;
      } // if
      
      trace(__FILE__,"getProjectPermission($permission, $default):findById project={$project->getId()}");
      $project_user = ProjectUsers::findById(array(
        'project_id' => $project->getId(),
        'user_id' => $this->getId()
      )); // findById
      if (!($project_user instanceof ProjectUser)) {
        return $default;
      } // if

      trace(__FILE__,"getProjectPermission($permission, $default):getPermissions()");
      $value = in_array($permission,$project_user->getPermissions()) ? true : false;
      return $value;
    } // getProjectPermission
コード例 #4
0
ファイル: User.class.php プロジェクト: ukd1/Project-Pier
 /**
  * Return project permission for specific user if he is on project. In case of any error $default is returned
  *
  * @access public
  * @param Project $project
  * @param string $permission Permission name
  * @param boolean $default Default value
  * @return boolean
  */
 function getProjectPermission(Project $project, $permission, $default = false)
 {
     static $valid_permissions = null;
     if (is_null($valid_permissions)) {
         $valid_permissions = ProjectUsers::getPermissionColumns();
     }
     // if
     if (!in_array($permission, $valid_permissions)) {
         return $default;
     }
     // if
     $project_user = ProjectUsers::findById(array('project_id' => $project->getId(), 'user_id' => $this->getId()));
     // findById
     if (!$project_user instanceof ProjectUser) {
         return $default;
     }
     // if
     $getter = 'get' . Inflector::camelize($permission);
     return $project_user->{$getter}();
 }
コード例 #5
0
 /**
  * Remove company from project
  *
  * @param void
  * @return null
  */
 function remove_company()
 {
     if (!active_project()->canChangePermissions(logged_user())) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     // if
     $project = Projects::findById(get_id('project_id'));
     if (!$project instanceof Project) {
         flash_error(lang('project dnx'));
         ajx_current("empty");
         return;
     }
     // if
     $company = Companies::findById(get_id('company_id'));
     if (!$company instanceof Company) {
         flash_error(lang('company dnx'));
         ajx_current("empty");
         return;
     }
     // if
     $project_company = ProjectCompanies::findById(array('project_id' => $project->getId(), 'company_id' => $company->getId()));
     if (!$project_company instanceof ProjectCompany) {
         flash_error(lang('company not on project'));
         ajx_current("empty");
         return;
     }
     // if
     try {
         DB::beginWork();
         $project_company->delete();
         $users = ProjectUsers::getCompanyUsersByProject($company, $project);
         if (is_array($users)) {
             foreach ($users as $user) {
                 $project_user = ProjectUsers::findById(array('project_id' => $project->getId(), 'user_id' => $user->getId()));
                 if ($project_user instanceof ProjectUser) {
                     $project_user->delete();
                 }
             }
             // foreach
         }
         // if
         DB::commit();
         flash_success(lang('success remove company from project'));
         ajx_current("reload");
     } catch (Exception $e) {
         DB::rollback();
         flash_error(lang('error remove company from project'));
         ajx_current("empty");
     }
     // try
 }
コード例 #6
0
 /**
  * Show update permissions page
  *
  * @param void
  * @return null
  */
 function update_permissions()
 {
     $user = Users::findById(get_id());
     if (!$user instanceof User) {
         flash_error(lang('user dnx'));
         $this->redirectToReferer(get_url('dashboard'));
     }
     // if
     if (!$user->canUpdatePermissions(logged_user())) {
         flash_error(lang('no access permissions'));
         $this->redirectToReferer(get_url('dashboard'));
     }
     // if
     $company = $user->getCompany();
     if (!$company instanceof Company) {
         flash_error(lang('company dnx'));
         $this->redirectToReferer(get_url('dashboard'));
     }
     // if
     $projects = $company->getProjects();
     if (!is_array($projects) || !count($projects)) {
         flash_error(lang('no projects owned by company'));
         $this->redirectToReferer($company->getViewUrl());
     }
     // if
     $permissions = ProjectUsers::getNameTextArray();
     $redirect_to = array_var($_GET, 'redirect_to');
     if (trim($redirect_to) == '' || !is_valid_url($redirect_to)) {
         $redirect_to = $user->getCardUrl();
     }
     // if
     tpl_assign('user', $user);
     tpl_assign('company', $company);
     tpl_assign('projects', $projects);
     tpl_assign('permissions', $permissions);
     tpl_assign('redirect_to', $redirect_to);
     if (array_var($_POST, 'submitted') == 'submitted') {
         DB::beginWork();
         foreach ($projects as $project) {
             $relation = ProjectUsers::findById(array('project_id' => $project->getId(), 'user_id' => $user->getId()));
             // findById
             if (array_var($_POST, 'project_permissions_' . $project->getId()) == 'checked') {
                 if (!$relation instanceof ProjectUser) {
                     $relation = new ProjectUser();
                     $relation->setProjectId($project->getId());
                     $relation->setUserId($user->getId());
                 }
                 // if
                 foreach ($permissions as $permission => $permission_text) {
                     $permission_value = array_var($_POST, 'project_permission_' . $project->getId() . '_' . $permission) == 'checked';
                     $setter = 'set' . Inflector::camelize($permission);
                     $relation->{$setter}($permission_value);
                 }
                 // foreach
                 $relation->save();
             } else {
                 if ($relation instanceof ProjectUser) {
                     $relation->delete();
                 }
                 // if
             }
             // if
         }
         // if
         DB::commit();
         flash_success(lang('success user permissions updated'));
         $this->redirectToUrl($redirect_to);
     }
     // if
 }
コード例 #7
0
 /**
  * Return project user instance for this user and $project
  *
  * @param Project $project
  * @return ProjectUser
  */
 function getProjectUserInstance($project)
 {
     $project_id = $project->getId();
     if (!array_key_exists($project_id, $this->project_users)) {
         $this->project_users[$project->getId()] = ProjectUsers::findById(array('user_id' => $this->getId(), 'project_id' => $project->getId()));
     }
     // if
     return $this->project_users[$project->getId()];
 }
コード例 #8
0
 /**
  * Return top level types user can see in $project
  *
  * @param User $user
  * @param Project $project
  * @param boolean $use_cache
  * @return array
  */
 function getVisibleTypesByProject($user, $project, $use_cache = true)
 {
     $project_id = $project->getId();
     $cache_id = 'visible_project_types_for_' . $user->getId();
     $cached_value = cache_get($cache_id);
     if (!is_array($cached_value)) {
         $cached_value = array();
     }
     // if
     if ($use_cache && isset($cached_value[$project_id])) {
         return $cached_value[$project_id];
     }
     // if
     if ($user->isAdministrator() || $user->isProjectManager() || $user->isProjectLeader($project)) {
         $cached_value[$project_id] = array_keys(Permissions::findProject());
         cache_set($cache_id, $cached_value);
         return $cached_value[$project_id];
     }
     // if
     $project_user = ProjectUsers::findById(array('user_id' => $user->getId(), 'project_id' => $project->getId()));
     if (instance_of($project_user, 'ProjectUser')) {
         $role = $project_user->getRole();
         if (instance_of($role, 'Role')) {
             $permissions = $role->getPermissions();
         } else {
             $permissions = $project_user->getPermissions();
         }
         // if
         if (is_array($permissions)) {
             $types = array();
             foreach ($permissions as $permission_name => $permission_value) {
                 if ($permission_value >= PROJECT_PERMISSION_ACCESS) {
                     $types[] = $permission_name;
                 }
                 // if
             }
             // foreach
             $cached_value[$project_id] = $types;
             cache_set($cache_id, $cached_value);
             return $cached_value[$project_id];
         }
         // if
     }
     // if
     $cached_value[$project_id] = array();
     cache_set($cache_id, $cached_value);
     return array();
 }
コード例 #9
0
 /**
  * Remove given user from this project
  *
  * @param User $user
  * @return boolean
  */
 function removeUser($user)
 {
     $project_user = ProjectUsers::findById(array('user_id' => $user->getId(), 'project_id' => $this->getId()));
     if (instance_of($project_user, 'ProjectUser')) {
         db_begin_work();
         $delete = $project_user->delete();
         if ($delete && !is_error($delete)) {
             clean_user_permissions_cache($user);
             event_trigger('on_project_user_removed', array($this, $user));
             db_commit();
             return true;
         } else {
             db_rollback();
             return $delete;
         }
         // if
     }
     // if
     return true;
 }
コード例 #10
0
 function view_today_page()
 {
     if ($this->request->get('async')) {
         $object_id = $this->request->post('object_id');
         $priority = $this->request->post('priority');
         $link = mysql_connect(DB_HOST, DB_USER, DB_PASS);
         mysql_select_db(DB_NAME);
         mysql_query("update healingcrystals_project_objects set priority='" . $priority . "' where id='" . $object_id . "'");
         mysql_close($link);
         exit;
     }
     $selected_project = $_GET['selected_project'];
     $order_by = $_GET['order_by'];
     $sort_order = $_GET['sort_order'];
     $tab = empty($_GET['tab']) ? 'tab01' : $_GET['tab'];
     $user = Users::findById($this->request->getId('user_id'));
     $project_user = ProjectUsers::findById(array('user_id' => $user->getId(), 'project_id' => $this->active_project->getId()));
     if ($tab == 'tab01') {
         $entries = $this->logged_user->getOwnedTickets($user->getId(), $selected_project, $order_by, $sort_order);
         $this->smarty->assign(array('active_user' => $user, 'project_user' => $project_user, 'entries' => $entries, 'user_projects' => $user->getActiveProjects(), 'selected_project' => $selected_project, 'tab' => $tab));
     } elseif ($tab == 'tab03') {
         $content = $this->logged_user->getHomeTabContent($user_id);
         $this->smarty->assign(array('active_user' => $user, 'project_user' => $project_user, 'page_view' => $page_view, 'tab' => $tab, 'home_tab_content' => $content));
     } elseif ($tab == 'tab04') {
         $entries = $this->logged_user->getSubscribedTickets($user->getId(), $selected_project, $order_by, $sort_order);
         $this->smarty->assign(array('active_user' => $user, 'project_user' => $project_user, 'entries' => $entries, 'user_projects' => $user->getActiveProjects(), 'selected_project' => $selected_project, 'tab' => $tab));
     } elseif ($tab == 'tab02') {
         $mark_completed = $_GET['mark_completed'];
         $completed_count = '';
         $project_id = $this->active_project->getId();
         $user_id = $user->getId();
         $fyi_query = array();
         if (!empty($mark_completed)) {
             $ids = explode(',', $mark_completed);
             $tickets = Tickets::findByIds($ids, STATE_VISIBLE, $this->logged_user->getVisibility());
             foreach ($tickets as $ticket) {
                 if ($ticket->isOpen() && $ticket->canChangeCompleteStatus($this->logged_user)) {
                     $complete = $ticket->complete($this->logged_user);
                     if ($complete && !is_error($complete)) {
                         $updated++;
                         $fyi_query[] = "update healingcrystals_assignments_action_request a , healingcrystals_project_objects b set a.is_fyi='-1', last_modified=now() where a.comment_id=b.id and b.type='Comment' and b.project_id='" . $ticket->getProjectId() . "' and b.parent_id='" . $ticket->getId() . "' and a.user_id='" . $this->logged_user->getId() . "' and a.is_fyi='1'";
                     }
                     // if
                 }
                 // if
             }
             // foreach
         }
         $link = mysql_connect(DB_HOST, DB_USER, DB_PASS);
         mysql_select_db(DB_NAME, $link);
         foreach ($fyi_query as $query) {
             mysql_query($query, $link);
         }
         $entries = array();
         $temp = array();
         $query = "select b.*, a.is_owner, d.category_name, f.object_id as temp\n                        from healingcrystals_assignments a \n\t\t\tinner join healingcrystals_project_objects b on (a.object_id=b.id and (b.type='Ticket' or (b.type='Task' and b.parent_type='Ticket'))) \n\t\t\tleft outer join healingcrystals_project_objects e on b.milestone_id=e.id   \n\t\t\tleft outer join healingcrystals_project_object_categories c on b.id=c.object_id \n\t\t\tleft outer join healingcrystals_project_milestone_categories d on c.category_id=d.id \n\t\t\tleft outer join healingcrystals_starred_objects f on (b.id=f.object_id and f.user_id='" . $user_id . "') \n\t\t\tinner join healingcrystals_assignments_action_request g on (g.user_id='" . $user_id . "' and g.is_fyi='1' and exists(select * from healingcrystals_project_objects h where h.id=g.comment_id and h.parent_id=b.id))  \n\t\t\twhere a.user_id='" . $user_id . "' and \n                        (a.is_owner='1' or g.user_id='" . $user_id . "') and \n                        b.project_id='" . $this->active_project->getId() . "' and \n\t\t\tb.completed_on is null and b.state='3' and b.visibility='1' \n                        order by b.due_on desc";
         $result = mysql_query($query);
         while ($entry = mysql_fetch_assoc($result)) {
             $item_class = array_var($entry, 'type');
             $item = new $item_class();
             $item->loadFromRow($entry);
             if (!in_array($entry['id'], $temp)) {
                 $milestone_id = $item->getMilestoneId();
                 if (!empty($milestone_id)) {
                     $query_1 = "select * from healingcrystals_project_objects where id='" . $milestone_id . "'";
                     $result_1 = mysql_query($query_1);
                     if (mysql_num_rows($result_1)) {
                         $item_1 = new Milestone($milestone_id);
                     }
                 }
                 $entries[] = array('obj' => $item, 'id' => $entry['id'], 'logged_user_is_responsible' => $entry['is_owner'], 'department' => array($entry['category_name']), 'milestone_obj' => $item_1, 'team_name' => $entry['team_name']);
                 $temp[] = $entry['id'];
                 if (!empty($milestone_id)) {
                     unset($item_1);
                 }
             } else {
                 $entries[array_search($entry['id'], $temp)]['department'][] = $entry['category_name'];
             }
             unset($item);
         }
         $action_request_comments = array();
         $fyi_comments = array();
         $fyi_read_comments = array();
         $query = "select b.id \n                        from healingcrystals_assignments_action_request a \n\t\t\tinner join healingcrystals_project_objects b on a.comment_id=b.id \n\t\t\tinner join healingcrystals_projects c on b.project_id=c.id \n\t\t\twhere a.is_action_request='1' and a.user_id='" . $user_id . "' \n\t\t\tand b.project_id='" . $this->active_project->getId() . "' \n\t\t\torder by c.name, a.date_added desc";
         $result = mysql_query($query);
         while ($entry = mysql_fetch_assoc($result)) {
             $action_request_comments[] = new Comment($entry['id']);
         }
         $query = "select b.id \n                        from healingcrystals_assignments_action_request a \n\t\t\tinner join healingcrystals_project_objects b on a.comment_id=b.id \n\t\t\tinner join healingcrystals_projects c on b.project_id=c.id \n\t\t\twhere a.is_fyi='1' and a.user_id='" . $user_id . "' \n\t\t\tand b.project_id='" . $this->active_project->getId() . "' \n\t\t\torder by c.name, a.date_added desc";
         $result = mysql_query($query);
         while ($entry = mysql_fetch_assoc($result)) {
             $fyi_comments[] = new Comment($entry['id']);
         }
         $query = "select b.id \n                        from healingcrystals_assignments_action_request a \n\t\t\tinner join healingcrystals_project_objects b on a.comment_id=b.id \n\t\t\tinner join healingcrystals_projects c on b.project_id=c.id \n\t\t\twhere a.is_fyi='R' and a.user_id='" . $user_id . "' \n\t\t\tand b.project_id='" . $this->active_project->getId() . "' \n\t\t\torder by a.fyi_marked_read_on, a.last_modified desc, c.name";
         $result = mysql_query($query);
         while ($entry = mysql_fetch_assoc($result)) {
             $fyi_read_comments[] = new Comment($entry['id']);
         }
         mysql_close($link);
         $this->smarty->assign(array('active_user' => $user, 'project_user' => $project_user, 'entries' => $entries, 'user_projects' => $user->getActiveProjects(), 'selected_project' => $selected_project, 'tab' => $tab, 'action_request_comments' => $action_request_comments, 'fyi_comments' => $fyi_comments, 'fyi_read_comments' => $fyi_read_comments, 'home_tab_content' => $home_tab_content));
     }
 }
コード例 #11
0
 /**
  * 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
 }