/**
 * Add sidebars to project overview page
 *
 * @param array $sidebars
 * @param Project $project
 * @param User $user
 * @return null
 */
function system_handle_on_project_overview_sidebars(&$sidebars, &$project, &$user)
{
    // only project leader, system administrators and project manages can see last activity
    $can_see_last_activity = $user->isProjectLeader($project) || $user->isAdministrator() || $user->isProjectManager();
    $project_users = $project->getUsers();
    if (is_foreachable($project_users)) {
        $smarty =& Smarty::instance();
        require_once SYSTEM_MODULE_PATH . '/helpers/function.user_link.php';
        require_once SMARTY_PATH . '/plugins/modifier.ago.php';
        $output = '';
        $sorted_users = Users::groupByCompany($project_users);
        foreach ($sorted_users as $sorted_user) {
            $company = $sorted_user['company'];
            $users = $sorted_user['users'];
            if (is_foreachable($users)) {
                $output .= '<h3><a href="' . $company->getViewUrl() . '">' . clean($company->getName()) . '</a></h3>';
                $output .= '<ul class="company_users">';
                foreach ($users as $current_user) {
                    $last_seen = '';
                    if ($can_see_last_activity && $user->getId() != $current_user->getId()) {
                        $last_seen = smarty_modifier_ago($current_user->getLastActivityOn());
                    }
                    // if
                    $output .= '<li><span class="icon_holder"><img src="' . $current_user->getAvatarUrl() . '" /></span> ' . smarty_function_user_link(array('user' => $current_user), $smarty) . ' ' . $last_seen . '</li>';
                }
                // foreach
                $output .= '</ul>';
            }
            // if
        }
        // foreach
        $sidebars[] = array('label' => lang('People on This Project'), 'is_important' => false, 'id' => 'project_people', 'body' => $output);
    }
    // if
}
/**
 * Handle on project options event
 *
 * @param NamedList $options
 * @param Project $project
 * @param User $user
 * @return null
 */
function project_exporter_handle_on_project_options(&$options, $project, $user)
{
    if ($user->isAdministrator() || $user->isProjectLeader($project) || $user->isProjectManager()) {
        $options->add('export_project', array('url' => assemble_url('project_exporter', array('project_id' => $project->getId())), 'text' => lang('Export Project')));
    }
    //
}
 /**
  * Return all groups ordered by name
  * 
  * This function will return only groups visible to given user
  * 
  * If $return_all is set to true all groups will be loaded and returned. 
  * This is used in situations where we need all of them regardels of user 
  * previous assignments (like select project group helper)
  *
  * @param User $user
  * @param boolean $return_all
  * @return array
  */
 function findAll($user, $return_all = false)
 {
     if ($return_all || $user->isAdministrator() || $user->isProjectManager()) {
         return ProjectGroups::find(array('order' => 'name'));
     }
     // if
     $project_ids = Projects::findProjectIdsByUser($user);
     if (is_foreachable($project_ids)) {
         $projects_table = TABLE_PREFIX . 'projects';
         $project_groups_table = TABLE_PREFIX . 'project_groups';
         return ProjectGroups::findBySQL("SELECT DISTINCT {$project_groups_table}.* FROM {$projects_table}, {$project_groups_table} WHERE {$project_groups_table}.id = {$projects_table}.group_id AND {$projects_table}.id IN (?) ORDER BY {$project_groups_table}.name", array($project_ids));
     } else {
         return null;
     }
     // if
 }
 /**
  * Return true if $user can delete this group
  *
  * @param User $user
  * @return boolean
  */
 function canDelete($user)
 {
     return ($user->isProjectManager() || $user->isAdministrator()) && $this->getProjectsCount() == 0 && ProjectGroups::count() > 1;
 }
 /**
  * Paginate trashed objects
  *
  * @param User $user
  * @param integer $page
  * @param integer $per_page
  * @return null
  */
 function paginateTrashed($user, $page = 1, $per_page = 30)
 {
     if ($user->isAdministrator() || $user->isProjectManager()) {
         return ProjectObjects::paginate(array('conditions' => array("state = ? AND visibility >= ?", STATE_DELETED, $user->getVisibility()), 'order' => 'updated_on'), $page, $per_page);
     } else {
         $type_filter = ProjectUsers::getVisibleTypesFilter($user, array(PROJECT_STATUS_ACTIVE, PROJECT_STATUS_PAUSED, PROJECT_STATUS_CANCELED, PROJECT_STATUS_COMPLETED));
         if ($type_filter) {
             return ProjectObjects::paginate(array('conditions' => array($type_filter . ' AND state = ? AND visibility >= ?', STATE_DELETED, $user->getVisibility()), 'order' => 'updated_on'), $page, $per_page);
         } else {
             return array(null, new Pager(1, 0, $per_page));
         }
         // if
     }
     // if
 }
 /**
  * Return project ID => project name map for a given user
  * 
  * If $all_for_admins_and_pms is set to true system will return all projects 
  * if user is administrator or project manager
  *
  * @param User $user
  * @param array $statuses
  * @param array $exclude_ids
  * @param boolean $all_for_admins_and_pms
  * @return null
  */
 function findNamesByUser($user, $statuses = null, $exclude_ids = null, $all_for_admins_and_pms = false)
 {
     $projects_table = TABLE_PREFIX . 'projects';
     $project_users_table = TABLE_PREFIX . 'project_users';
     $exclude_filter = null;
     if (is_foreachable($exclude_ids)) {
         $exclude_filter = " AND {$projects_table}.id NOT IN (" . implode(', ', $exclude_ids) . ") ";
     }
     // if
     if ($all_for_admins_and_pms && ($user->isAdministrator() || $user->isProjectManager())) {
         if ($statuses) {
             $rows = db_execute_all("SELECT {$projects_table}.id, {$projects_table}.name FROM {$projects_table} WHERE {$projects_table}.type = ? AND {$projects_table}.status IN (?) {$exclude_filter} ORDER BY {$projects_table}.name", PROJECT_TYPE_NORMAL, $statuses);
         } else {
             $rows = db_execute_all("SELECT {$projects_table}.id, {$projects_table}.name FROM {$projects_table} WHERE {$projects_table}.type = ? {$exclude_filter} ORDER BY {$projects_table}.name", PROJECT_TYPE_NORMAL);
         }
         // if
     } else {
         if ($statuses) {
             $rows = db_execute_all("SELECT {$projects_table}.id, {$projects_table}.name FROM {$projects_table}, {$project_users_table} WHERE {$project_users_table}.user_id = ? AND {$project_users_table}.project_id = {$projects_table}.id AND {$projects_table}.type = ? AND {$projects_table}.status IN (?) {$exclude_filter} ORDER BY {$projects_table}.name", $user->getId(), PROJECT_TYPE_NORMAL, $statuses);
         } else {
             $rows = db_execute_all("SELECT {$projects_table}.id, {$projects_table}.name FROM {$projects_table}, {$project_users_table} WHERE {$project_users_table}.user_id = ? AND {$project_users_table}.project_id = {$projects_table}.id AND {$projects_table}.type = ? {$exclude_filter} ORDER BY {$projects_table}.name", $user->getId(), PROJECT_TYPE_NORMAL);
         }
         // if
     }
     // if
     $result = array();
     if (is_foreachable($rows)) {
         foreach ($rows as $row) {
             $result[(int) $row['id']] = $row['name'];
         }
         // foreach
     }
     // if
     return $result;
 }
 /**
  * Returns true if $user can change this users permissions on a $project
  *
  * @param User $user
  * @param Project $project
  * @return boolean
  */
 function canChangeProjectPermissions($user, $project)
 {
     if ($user->isProjectLeader($project) || $user->isProjectManager() || $user->isAdministrator()) {
         return false;
     }
     // if
     return $this->isProjectLeader($project) || $this->isPeopleManager() || $this->isAdministrator();
 }
 /**
  * Returns true if $user is member of $project
  *
  * @param User $user
  * @param Project $project
  * @param boolean $use_cache
  * @return boolean
  */
 function isProjectMember($user, $project, $use_cache = true)
 {
     static $cache = array();
     $user_id = $user->getId();
     $project_id = $project->getId();
     if ($use_cache && isset($cache[$project_id]) && isset($cache[$project_id][$user_id])) {
         return $cache[$project_id][$user_id];
     }
     // if
     if (!isset($cache[$project_id])) {
         $cache[$project_id] = array();
     }
     // if
     if (!isset($cache[$project_id][$user_id])) {
         $cache[$project_id][$user_id] = array();
     }
     // if
     if ($user->isAdministrator() || $user->isProjectManager()) {
         $cache[$project_id][$user_id] = true;
     } else {
         $cache[$project_id][$user_id] = (bool) ProjectUsers::count(array('user_id = ? AND project_id = ?', $user_id, $project_id));
     }
     // if
     return $cache[$project_id][$user_id];
 }
Example #9
0
/**
 * Returns true if $user can see $profile calendar
 *
 * @param User $user
 * @param User $profile
 * @return boolean
 */
function can_access_profile_calendar($user, $profile)
{
    return $user->isProjectManager();
}
 /**
  * Can use delete this object
  *
  * @param User $user
  * @return boolean
  */
 function canDelete($user)
 {
     return $user->isProjectManager() || $user->isAdministrator();
 }
 /**
  * Return object ID-s by user
  *
  * @param User $user
  * @return array
  */
 function findObjectIdsByUser($user)
 {
     $project_objects_table = TABLE_PREFIX . 'project_objects';
     $starred_objects_table = TABLE_PREFIX . 'starred_objects';
     if ($user->isProjectManager()) {
         $rows = db_execute_all("SELECT object_id FROM {$starred_objects_table} WHERE user_id = ?", $user->getId());
     } else {
         $type_filter = ProjectUsers::getVisibleTypesFilter($user, array(PROJECT_STATUS_ACTIVE, PROJECT_STATUS_PAUSED, PROJECT_STATUS_CANCELED, PROJECT_STATUS_COMPLETED));
         if ($type_filter) {
             $rows = db_execute_all("SELECT {$project_objects_table}.id AS 'object_id' FROM {$project_objects_table}, {$starred_objects_table} WHERE {$type_filter} AND {$starred_objects_table}.object_id = {$project_objects_table}.id AND {$starred_objects_table}.user_id = ? AND {$project_objects_table}.state >= ? AND {$project_objects_table}.visibility >= ? ORDER BY {$project_objects_table}.priority DESC", $user->getId(), STATE_VISIBLE, $user->getVisibility());
         } else {
             $rows = null;
         }
         // if
     }
     // if
     $result = array();
     if (is_foreachable($rows)) {
         foreach ($rows as $row) {
             $result[] = (int) $row['object_id'];
         }
         // foreach
     }
     // if
     return $result;
 }
 /**
  * Return true if specific user can copy this object
  *
  * @param User $user
  * @return boolean
  */
 function canCopy($user)
 {
     if (!$this->can_be_copied) {
         return false;
     }
     // if
     return $user->isProjectManager() || $user->isProjectLeader($this->getProject());
 }
 /**
  * Returns true if user can delete this category
  *
  * @param User $user
  * @return boolean
  */
 function canDelete($user)
 {
     return $user->isProjectLeader($this->getProject()) || $user->isProjectManager();
 }