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; }
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() . '&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()); }