private function getUGroupList(Tracker $tracker)
 {
     $ugroup_list = array();
     $ugroups_permissions = plugin_tracker_permission_get_tracker_ugroups_permissions($tracker->getGroupId(), $tracker->getId());
     ksort($ugroups_permissions);
     reset($ugroups_permissions);
     foreach ($ugroups_permissions as $ugroup_permissions) {
         $ugroup = $ugroup_permissions['ugroup'];
         $permissions = $ugroup_permissions['permissions'];
         if ($ugroup['id'] != ProjectUGroup::PROJECT_ADMIN) {
             $ugroup_list[] = new Tracker_Permission_PermissionUgroupPresenter($ugroup['id'], $ugroup['name'], isset($ugroup['link']) ? $ugroup['link'] : '', $this->getPermissionTypeList($ugroup['id'], $permissions));
         }
     }
     return $ugroup_list;
 }
/**
 * @returns array the permissions for the ugroups
 */
function plugin_tracker_permission_get_field_tracker_ugroups_permissions($group_id, $atid, $fields)
{
    $tracker_permissions = plugin_tracker_permission_get_tracker_ugroups_permissions($group_id, $atid);
    //Anonymous can access ?
    if (isset($tracker_permissions[$GLOBALS['UGROUP_ANONYMOUS']]) && isset($tracker_permissions[$GLOBALS['UGROUP_ANONYMOUS']]['permissions']) && count($tracker_permissions[$GLOBALS['UGROUP_ANONYMOUS']]['permissions']) > 0) {
        //Do nothing
    } else {
        //We remove the id
        if (isset($tracker_permissions[$GLOBALS['UGROUP_ANONYMOUS']])) {
            unset($tracker_permissions[$GLOBALS['UGROUP_ANONYMOUS']]);
        }
        //Registered can access ?
        if (isset($tracker_permissions[$GLOBALS['UGROUP_REGISTERED']]) && isset($tracker_permissions[$GLOBALS['UGROUP_REGISTERED']]['permissions']) && count($tracker_permissions[$GLOBALS['UGROUP_REGISTERED']]['permissions']) > 0) {
            //Do nothing
        } else {
            //We remove the id
            if (isset($tracker_permissions[$GLOBALS['UGROUP_REGISTERED']])) {
                unset($tracker_permissions[$GLOBALS['UGROUP_REGISTERED']]);
            }
            //Each group can access ?
            foreach ($tracker_permissions as $key => $value) {
                if (!isset($value['permissions']) || count($value['permissions']) < 1) {
                    unset($tracker_permissions[$key]);
                }
            }
        }
    }
    $ugroups_that_can_access_to_tracker = $tracker_permissions;
    $ugroups_permissions = array();
    foreach ($fields as $field) {
        $fake_id = $field->getID();
        $ugroups = permission_get_ugroups_permissions($group_id, $fake_id, array('PLUGIN_TRACKER_FIELD_READ', 'PLUGIN_TRACKER_FIELD_UPDATE', 'PLUGIN_TRACKER_FIELD_SUBMIT'), false);
        //{{{ We remove the ugroups which can't access to tracker and don't have permissions
        /*foreach($ugroups as $key => $value) {
              if (!isset($ugroups_that_can_access_to_tracker[$key]) && count($ugroups[$key]['permissions']) == 0) {
                  unset($ugroups[$key]);
              }
          }*/
        //}}}
        //We store permission for the current field
        $ugroups_permissions[$field->getID()] = array('field' => array('shortname' => $field->getName(), 'name' => $field->getLabel() . ($field->isRequired() ? ' *' : ''), 'id' => $field->getID(), 'field' => $field, 'link' => '/tracker/admin/index.php?group_id=' . $group_id . '&atid=' . $atid . '&func=display_field_update&field_id=' . $field->getID()), 'ugroups' => $ugroups);
        //{{{ We store tracker permissions
        foreach ($ugroups_permissions[$field->getID()]['ugroups'] as $key => $ugroup) {
            if (isset($tracker_permissions[$key])) {
                $ugroups_permissions[$field->getID()]['ugroups'][$key]['tracker_permissions'] = $tracker_permissions[$key]['permissions'];
            } else {
                $ugroups_permissions[$field->getID()]['ugroups'][$key]['tracker_permissions'] = array();
            }
        }
        //}}}
    }
    return $ugroups_permissions;
}
Example #3
0
 public function displayAdminPermsTracker(Tracker_IDisplayTrackerLayout $layout, $request, $current_user)
 {
     $items = $this->getPermsItems();
     $title = $items['tracker']['title'];
     $breadcrumbs = array($items['tracker']);
     $this->displayAdminPermsHeader($layout, $title, $breadcrumbs);
     echo '<h2>' . $title . '</h2>';
     $hp = Codendi_HTMLPurifier::instance();
     $admin_permission = 'PLUGIN_TRACKER_ADMIN';
     $full_permission = 'PLUGIN_TRACKER_ACCESS_FULL';
     $assignee_permission = 'PLUGIN_TRACKER_ACCESS_ASSIGNEE';
     $submitter_permission = 'PLUGIN_TRACKER_ACCESS_SUBMITTER';
     $none = 'PLUGIN_TRACKER_NONE';
     $html = '';
     //form
     $html .= '<form name="form_tracker_permissions" action="?tracker=' . (int) $this->getId() . '&amp;func=admin-perms-tracker" method="post">';
     $html .= '<div>';
     //intro
     $html .= $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', 'tracker_intro');
     //header
     $html .= html_build_list_table_top(array($GLOBALS['Language']->getText('plugin_tracker_admin_permissions', 'ugroup'), $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', 'permissions')));
     //body
     $ugroups_permissions = plugin_tracker_permission_get_tracker_ugroups_permissions($this->getGroupId(), $this->getId());
     ksort($ugroups_permissions);
     reset($ugroups_permissions);
     $i = 0;
     foreach ($ugroups_permissions as $ugroup_permissions) {
         $ugroup = $ugroup_permissions['ugroup'];
         $permissions = $ugroup_permissions['permissions'];
         $html .= '<tr class="' . util_get_alt_row_color($i++) . '">';
         $html .= '<td>';
         $name = $hp->purify($ugroup['name'], CODENDI_PURIFIER_CONVERT_HTML);
         if (isset($ugroup['link'])) {
             $html .= '<a href="' . $ugroup['link'] . '">';
             $html .= $name;
             $html .= '</a>';
         } else {
             $html .= $name;
         }
         $html .= '</td>';
         $html .= '<td>';
         $html .= '<select name="permissions_' . $ugroup['id'] . '">';
         $attributes_for_selected = 'selected="selected" style="background:#EEE;"';
         //TODO: put style in stylesheet
         $html .= '<option value="100" ' . (count($permissions) == 0 ? $attributes_for_selected : "") . ' >' . $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', $none) . '</option>';
         $html .= '<option value="0" ' . (isset($permissions[$full_permission]) ? $attributes_for_selected : "") . ' >' . $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', $full_permission) . '</option>';
         //We don't show specific access permissions for anonymous users and registered
         if ($ugroup['id'] != $GLOBALS['UGROUP_ANONYMOUS'] && $ugroup['id'] != $GLOBALS['UGROUP_REGISTERED']) {
             $html .= '<option value="1" ' . (isset($permissions[$assignee_permission]) && !isset($permissions[$submitter_permission]) ? $attributes_for_selected : "") . " >" . $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', $assignee_permission) . '</option>';
             $html .= '<option value="2" ' . (!isset($permissions[$assignee_permission]) && isset($permissions[$submitter_permission]) ? $attributes_for_selected : "") . " >" . $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', $submitter_permission) . '</option>';
             $html .= '<option value="3" ' . (isset($permissions[$assignee_permission]) && isset($permissions[$submitter_permission]) ? $attributes_for_selected : "") . " >" . $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', $assignee_permission . '_AND_' . $submitter_permission) . '</option>';
             $html .= '<option value="4" ' . (isset($permissions[$admin_permission]) && isset($permissions[$admin_permission]) ? $attributes_for_selected : "") . " >" . $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', $admin_permission) . '</option>';
         }
         $html .= '</select></td>';
         $html .= '</tr>';
     }
     //end of table
     $html .= '</table>';
     $html .= '<input type="submit" name="update" value="' . $GLOBALS['Language']->getText('project_admin_permissions', 'submit_perm') . '" />';
     $html .= '</div></form>';
     $html .= '<p>';
     $html .= $GLOBALS['Language']->getText('project_admin_permissions', 'admins_create_modify_ug', array('/project/admin/editugroup.php?func=create&group_id=' . (int) $this->getGroupID(), '/project/admin/ugroup.php?group_id=' . (int) $this->getGroupID()));
     $html .= '</p>';
     echo $html;
     $this->displayFooter($layout);
 }
 private function getPermissionSetter()
 {
     return new Tracker_Permission_PermissionSetter($this->tracker, plugin_tracker_permission_get_tracker_ugroups_permissions($this->tracker->getGroupId(), $this->tracker->getId()), PermissionsManager::instance());
 }