function plugin_tracker_permission_process_update_fields_permissions($group_id, $atid, $fields, $permissions_wanted_by_user) { //The actual permissions $stored_ugroups_permissions = plugin_tracker_permission_get_field_tracker_ugroups_permissions($group_id, $atid, $fields); $permissions_updated = false; //some special ugroup names $anonymous_name = $GLOBALS['Language']->getText('project_ugroup', ugroup_get_name_from_id($GLOBALS['UGROUP_ANONYMOUS'])); $registered_name = $GLOBALS['Language']->getText('project_ugroup', ugroup_get_name_from_id($GLOBALS['UGROUP_REGISTERED'])); //We process the request foreach ($permissions_wanted_by_user as $field_id => $ugroups_permissions) { if (is_numeric($field_id) && isset($stored_ugroups_permissions[$field_id])) { $the_field_can_be_submitted = $stored_ugroups_permissions[$field_id]['field']['field']->isSubmitable(); $the_field_can_be_updated = $stored_ugroups_permissions[$field_id]['field']['field']->isUpdateable(); $fake_object_id = $field_id; //small variables for history $add_submit_to_history = false; $add_read_to_history = false; $add_update_to_history = false; //We look for anonymous and registered users' permissions, both in the user's request and in the db $user_set_anonymous_to_submit = isset($ugroups_permissions[$GLOBALS['UGROUP_ANONYMOUS']]) && isset($ugroups_permissions[$GLOBALS['UGROUP_ANONYMOUS']]['submit']) && $ugroups_permissions[$GLOBALS['UGROUP_ANONYMOUS']]['submit'] === "on"; $user_set_anonymous_to_read = isset($ugroups_permissions[$GLOBALS['UGROUP_ANONYMOUS']]) && isset($ugroups_permissions[$GLOBALS['UGROUP_ANONYMOUS']]['others']) && $ugroups_permissions[$GLOBALS['UGROUP_ANONYMOUS']]['others'] === "0"; $user_set_anonymous_to_update = isset($ugroups_permissions[$GLOBALS['UGROUP_ANONYMOUS']]) && isset($ugroups_permissions[$GLOBALS['UGROUP_ANONYMOUS']]['others']) && $ugroups_permissions[$GLOBALS['UGROUP_ANONYMOUS']]['others'] === "1"; $user_set_registered_to_submit = isset($ugroups_permissions[$GLOBALS['UGROUP_REGISTERED']]) && isset($ugroups_permissions[$GLOBALS['UGROUP_REGISTERED']]['submit']) && $ugroups_permissions[$GLOBALS['UGROUP_REGISTERED']]['submit'] === "on"; $user_set_registered_to_read = isset($ugroups_permissions[$GLOBALS['UGROUP_REGISTERED']]) && isset($ugroups_permissions[$GLOBALS['UGROUP_REGISTERED']]['others']) && $ugroups_permissions[$GLOBALS['UGROUP_REGISTERED']]['others'] === "0"; $user_set_registered_to_update = isset($ugroups_permissions[$GLOBALS['UGROUP_REGISTERED']]) && isset($ugroups_permissions[$GLOBALS['UGROUP_REGISTERED']]['others']) && $ugroups_permissions[$GLOBALS['UGROUP_REGISTERED']]['others'] === "1"; $anonymous_is_already_set_to_submit = isset($stored_ugroups_permissions[$field_id]['ugroups'][$GLOBALS['UGROUP_ANONYMOUS']]['permissions']['PLUGIN_TRACKER_FIELD_SUBMIT']); $anonymous_is_already_set_to_read = isset($stored_ugroups_permissions[$field_id]['ugroups'][$GLOBALS['UGROUP_ANONYMOUS']]['permissions']['PLUGIN_TRACKER_FIELD_READ']); $anonymous_is_already_set_to_update = isset($stored_ugroups_permissions[$field_id]['ugroups'][$GLOBALS['UGROUP_ANONYMOUS']]['permissions']['PLUGIN_TRACKER_FIELD_UPDATE']); $registered_is_already_set_to_submit = isset($stored_ugroups_permissions[$field_id]['ugroups'][$GLOBALS['UGROUP_REGISTERED']]['permissions']['PLUGIN_TRACKER_FIELD_SUBMIT']); $registered_is_already_set_to_read = isset($stored_ugroups_permissions[$field_id]['ugroups'][$GLOBALS['UGROUP_REGISTERED']]['permissions']['PLUGIN_TRACKER_FIELD_READ']); $registered_is_already_set_to_update = isset($stored_ugroups_permissions[$field_id]['ugroups'][$GLOBALS['UGROUP_REGISTERED']]['permissions']['PLUGIN_TRACKER_FIELD_UPDATE']); //ANONYMOUS //////////////////////////////////////////////////////////////// //Firstly we set permissions for anonymous users if (isset($ugroups_permissions[$GLOBALS['UGROUP_ANONYMOUS']])) { $ugroup_permissions = $ugroups_permissions[$GLOBALS['UGROUP_ANONYMOUS']]; //SUBMIT Permission //----------------- if ($the_field_can_be_submitted && !$anonymous_is_already_set_to_submit && $user_set_anonymous_to_submit) { //if the ugroup is anonymous, we have to erase submit permissions for other ugroups foreach ($stored_ugroups_permissions[$field_id]['ugroups'] as $stored_ugroup_id => $stored_ugroup_permissions) { if ($stored_ugroup_id === $GLOBALS['UGROUP_ANONYMOUS']) { permission_add_ugroup($group_id, 'PLUGIN_TRACKER_FIELD_SUBMIT', $fake_object_id, $stored_ugroup_id); $add_submit_to_history = true; $anonymous_is_already_set_to_submit = true; } else { if (isset($stored_ugroup_permissions['permissions']['PLUGIN_TRACKER_FIELD_SUBMIT']) && (!isset($ugroups_permissions[$stored_ugroup_id]) || !isset($ugroups_permissions[$stored_ugroup_id]['submit']) || $ugroups_permissions[$stored_ugroup_id]['submit'] !== "on")) { $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('tracker_admin_permissions', 'ignore_g_anon_submit', array($stored_ugroup_permissions['ugroup']['name'], $anonymous_name))); permission_clear_ugroup_object($group_id, 'PLUGIN_TRACKER_FIELD_SUBMIT', $stored_ugroup_id, $fake_object_id); $add_submit_to_history = true; } } } } else { if ($anonymous_is_already_set_to_submit && !$user_set_anonymous_to_submit) { permission_clear_ugroup_object($group_id, 'PLUGIN_TRACKER_FIELD_SUBMIT', $GLOBALS['UGROUP_ANONYMOUS'], $fake_object_id); $add_submit_to_history = true; $anonymous_is_already_set_to_submit = false; } } //UPDATE Permission //--------------- if ($the_field_can_be_updated && !$anonymous_is_already_set_to_update && $user_set_anonymous_to_update) { //if the ugroup is anonymous, we have to erase submt permissions for other ugroups foreach ($stored_ugroups_permissions[$field_id]['ugroups'] as $stored_ugroup_id => $stored_ugroup_permissions) { if ($stored_ugroup_id === $GLOBALS['UGROUP_ANONYMOUS']) { permission_add_ugroup($group_id, 'PLUGIN_TRACKER_FIELD_UPDATE', $fake_object_id, $stored_ugroup_id); $add_update_to_history = true; $anonymous_is_already_set_to_update = true; } else { if (!isset($ugroups_permissions[$stored_ugroup_id]) || !isset($ugroups_permissions[$stored_ugroup_id]['others']) || $ugroups_permissions[$stored_ugroup_id]['others'] !== "100") { if (isset($stored_ugroup_permissions['permissions']['PLUGIN_TRACKER_FIELD_UPDATE'])) { $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('tracker_admin_permissions', 'ignore_g_anon_update', array($stored_ugroup_permissions['ugroup']['name'], $anonymous_name))); permission_clear_ugroup_object($group_id, 'PLUGIN_TRACKER_FIELD_UPDATE', $stored_ugroup_id, $fake_object_id); $add_update_to_history = true; } if (isset($stored_ugroup_permissions['permissions']['PLUGIN_TRACKER_FIELD_READ'])) { $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('tracker_admin_permissions', 'ignore_g_anon_update', array($stored_ugroup_permissions['ugroup']['name'], $anonymous_name))); permission_clear_ugroup_object($group_id, 'PLUGIN_TRACKER_FIELD_READ', $stored_ugroup_id, $fake_object_id); $add_read_to_history = true; } } } } } else { if ($anonymous_is_already_set_to_update && !$user_set_anonymous_to_update) { permission_clear_ugroup_object($group_id, 'PLUGIN_TRACKER_FIELD_UPDATE', $GLOBALS['UGROUP_ANONYMOUS'], $fake_object_id); $add_update_to_history = true; $anonymous_is_already_set_to_update = false; } } //READ Permission //--------------- if (!$anonymous_is_already_set_to_read && $user_set_anonymous_to_read) { //if the ugroup is anonymous, we have to erase submit permissions for other ugroups foreach ($stored_ugroups_permissions[$field_id]['ugroups'] as $stored_ugroup_id => $stored_ugroup_permissions) { if ($stored_ugroup_id === $GLOBALS['UGROUP_ANONYMOUS']) { permission_add_ugroup($group_id, 'PLUGIN_TRACKER_FIELD_READ', $fake_object_id, $stored_ugroup_id); $add_read_to_history = true; $anonymous_is_already_set_to_read = true; } else { if (!isset($ugroups_permissions[$stored_ugroup_id]) || !isset($ugroups_permissions[$stored_ugroup_id]['others']) || $ugroups_permissions[$stored_ugroup_id]['others'] !== "100") { if (isset($stored_ugroup_permissions['permissions']['PLUGIN_TRACKER_FIELD_READ'])) { $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('tracker_admin_permissions', 'ignore_g_anon_read', array($stored_ugroup_permissions['ugroup']['name'], $anonymous_name))); permission_clear_ugroup_object($group_id, 'PLUGIN_TRACKER_FIELD_READ', $stored_ugroup_id, $fake_object_id); $add_read_to_history = true; } } } } } else { if ($anonymous_is_already_set_to_read && !$user_set_anonymous_to_read) { permission_clear_ugroup_object($group_id, 'PLUGIN_TRACKER_FIELD_READ', $GLOBALS['UGROUP_ANONYMOUS'], $fake_object_id); $add_read_to_history = true; $anonymous_is_already_set_to_read = false; } } } //REGISTERED //////////////////////////////////////////////////////////////// //Secondly we set permissions for registered users if (isset($ugroups_permissions[$GLOBALS['UGROUP_REGISTERED']])) { $ugroup_permissions = $ugroups_permissions[$GLOBALS['UGROUP_REGISTERED']]; //SUBMIT Permission //----------------- if ($the_field_can_be_submitted && !$registered_is_already_set_to_submit && $user_set_registered_to_submit) { //if the ugroup is registered, we have to: // 1. check consistency with current permissions for anonymous users if ($user_set_anonymous_to_submit || $anonymous_is_already_set_to_submit) { $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('tracker_admin_permissions', 'ignore_g_anon_submit', array($stored_ugroups_permissions[$field_id]['ugroups'][$GLOBALS['UGROUP_REGISTERED']]['ugroup']['name'], $anonymous_name))); } else { // 2. erase submit permissions for other ugroups foreach ($stored_ugroups_permissions[$field_id]['ugroups'] as $stored_ugroup_id => $stored_ugroup_permissions) { if ($stored_ugroup_id === $GLOBALS['UGROUP_REGISTERED']) { permission_add_ugroup($group_id, 'PLUGIN_TRACKER_FIELD_SUBMIT', $fake_object_id, $stored_ugroup_id); $add_submit_to_history = true; $registered_is_already_set_to_submit = true; } else { if ($stored_ugroup_id !== $GLOBALS['UGROUP_ANONYMOUS']) { if (isset($stored_ugroup_permissions['permissions']['PLUGIN_TRACKER_FIELD_SUBMIT']) && (!isset($ugroups_permissions[$stored_ugroup_id]) || !isset($ugroups_permissions[$stored_ugroup_id]['submit']) || $ugroups_permissions[$stored_ugroup_id]['submit'] !== "on")) { $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('tracker_admin_permissions', 'ignore_g_regis_submit', array($stored_ugroup_permissions['ugroup']['name'], $registered_name))); permission_clear_ugroup_object($group_id, 'PLUGIN_TRACKER_FIELD_SUBMIT', $stored_ugroup_id, $fake_object_id); $add_submit_to_history = true; } } } } } } else { if ($registered_is_already_set_to_submit && !$user_set_registered_to_submit) { permission_clear_ugroup_object($group_id, 'PLUGIN_TRACKER_FIELD_SUBMIT', $GLOBALS['UGROUP_REGISTERED'], $fake_object_id); $add_submit_to_history = true; $registered_is_already_set_to_submit = false; } } //UPDATE Permission //--------------- if ($the_field_can_be_updated && !$registered_is_already_set_to_update && $user_set_registered_to_update) { //if the ugroup is registered, we have to: // 1. check consistency with current permissions for anonymous users if ($user_set_anonymous_to_update || $anonymous_is_already_set_to_update) { $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('tracker_admin_permissions', 'ignore_g_anon_update', array($stored_ugroups_permissions[$field_id]['ugroups'][$GLOBALS['UGROUP_REGISTERED']]['ugroup']['name'], $anonymous_name))); } else { // 2. erase update permissions for other ugroups foreach ($stored_ugroups_permissions[$field_id]['ugroups'] as $stored_ugroup_id => $stored_ugroup_permissions) { if ($stored_ugroup_id === $GLOBALS['UGROUP_REGISTERED']) { permission_add_ugroup($group_id, 'PLUGIN_TRACKER_FIELD_UPDATE', $fake_object_id, $stored_ugroup_id); $add_update_to_history = true; $registered_is_already_set_to_update = true; } else { if ($stored_ugroup_id !== $GLOBALS['UGROUP_ANONYMOUS']) { //ugroups other than anonymous if (!isset($ugroups_permissions[$stored_ugroup_id]) || !isset($ugroups_permissions[$stored_ugroup_id]['others']) || $ugroups_permissions[$stored_ugroup_id]['others'] !== "100") { if (isset($stored_ugroup_permissions['permissions']['PLUGIN_TRACKER_FIELD_UPDATE'])) { $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('tracker_admin_permissions', 'ignore_g_regis_update', array($stored_ugroup_permissions['ugroup']['name'], $registered_name))); permission_clear_ugroup_object($group_id, 'PLUGIN_TRACKER_FIELD_UPDATE', $stored_ugroup_id, $fake_object_id); $add_update_to_history = true; } if (isset($stored_ugroup_permissions['permissions']['PLUGIN_TRACKER_FIELD_READ'])) { $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('tracker_admin_permissions', 'ignore_g_regis_update', array($stored_ugroup_permissions['ugroup']['name'], $registered_name))); permission_clear_ugroup_object($group_id, 'PLUGIN_TRACKER_FIELD_READ', $stored_ugroup_id, $fake_object_id); $add_read_to_history = true; } } } } } } } else { if ($registered_is_already_set_to_update && !$user_set_registered_to_update) { permission_clear_ugroup_object($group_id, 'PLUGIN_TRACKER_FIELD_UPDATE', $GLOBALS['UGROUP_REGISTERED'], $fake_object_id); $add_update_to_history = true; $registered_is_already_set_to_update = false; } } //READ Permission //--------------- if (!$registered_is_already_set_to_read && $user_set_registered_to_read) { //if the ugroup is registered, we have to: // 1. check consistency with current permissions for anonymous users if ($user_set_anonymous_to_read || $anonymous_is_already_set_to_read || $anonymous_is_already_set_to_update) { $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('tracker_admin_permissions', 'ignore_g_anon_read', array($stored_ugroups_permissions[$field_id]['ugroups'][$GLOBALS['UGROUP_REGISTERED']]['ugroup']['name'], $anonymous_name))); } else { // 2. erase read permissions for other ugroups foreach ($stored_ugroups_permissions[$field_id]['ugroups'] as $stored_ugroup_id => $stored_ugroup_permissions) { if ($stored_ugroup_id === $GLOBALS['UGROUP_REGISTERED']) { permission_add_ugroup($group_id, 'PLUGIN_TRACKER_FIELD_READ', $fake_object_id, $stored_ugroup_id); $add_read_to_history = true; $registered_is_already_set_to_read = true; } else { if ($stored_ugroup_id !== $GLOBALS['UGROUP_ANONYMOUS']) { //ugroups other than anonymous if (!isset($ugroups_permissions[$stored_ugroup_id]) || !isset($ugroups_permissions[$stored_ugroup_id]['others']) || $ugroups_permissions[$stored_ugroup_id]['others'] !== "100") { if (isset($stored_ugroup_permissions['permissions']['PLUGIN_TRACKER_FIELD_READ'])) { $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('tracker_admin_permissions', 'ignore_g_regis_read', array($stored_ugroup_permissions['ugroup']['name'], $registered_name))); permission_clear_ugroup_object($group_id, 'PLUGIN_TRACKER_FIELD_READ', $stored_ugroup_id, $fake_object_id); $add_read_to_history = true; } } } } } } } else { if ($registered_is_already_set_to_read && !$user_set_registered_to_read) { permission_clear_ugroup_object($group_id, 'PLUGIN_TRACKER_FIELD_READ', $GLOBALS['UGROUP_REGISTERED'], $fake_object_id); $registered_is_already_set_to_read = false; } } } //OTHER INSIGNIFIANT UGROUPS //////////////////////////////////////////////////////////////// foreach ($ugroups_permissions as $ugroup_id => $ugroup_permissions) { if (is_numeric($ugroup_id) && $ugroup_id != $GLOBALS['UGROUP_REGISTERED'] && $ugroup_id != $GLOBALS['UGROUP_ANONYMOUS']) { $name_of_ugroup = $stored_ugroups_permissions[$field_id]['ugroups'][$ugroup_id]['ugroup']['name']; //SUBMIT Permission //----------------- if ($the_field_can_be_submitted && !isset($stored_ugroups_permissions[$field_id]['ugroups'][$ugroup_id]['permissions']['PLUGIN_TRACKER_FIELD_SUBMIT']) && isset($ugroup_permissions['submit']) && $ugroup_permissions['submit'] === "on") { //if the ugroup is not anonymous and not registered, we have to: // check consistency with current permissions for anonymous users // and current permissions for registered users if ($user_set_anonymous_to_submit || $anonymous_is_already_set_to_submit) { $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('tracker_admin_permissions', 'ignore_g_anon_submit', array($name_of_ugroup, $anonymous_name))); } else { if ($user_set_registered_to_submit || $registered_is_already_set_to_submit) { $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('tracker_admin_permissions', 'ignore_g_regis_submit', array($name_of_ugroup, $registered_name))); } else { permission_add_ugroup($group_id, 'PLUGIN_TRACKER_FIELD_SUBMIT', $fake_object_id, $ugroup_id); $add_submit_to_history = true; } } } else { if (isset($stored_ugroups_permissions[$field_id]['ugroups'][$ugroup_id]['permissions']['PLUGIN_TRACKER_FIELD_SUBMIT']) && isset($ugroup_permissions['submit']) && $ugroup_permissions['submit'] !== "on") { //If we don't have already clear the permissions if (!$user_set_anonymous_to_submit && !$user_set_registered_to_submit) { permission_clear_ugroup_object($group_id, 'PLUGIN_TRACKER_FIELD_SUBMIT', $ugroup_id, $fake_object_id); $add_submit_to_history = true; } } } //UPDATE Permission //----------------- if ($the_field_can_be_updated && !isset($stored_ugroups_permissions[$field_id]['ugroups'][$ugroup_id]['permissions']['PLUGIN_TRACKER_FIELD_UPDATE']) && isset($ugroup_permissions['others']) && $ugroup_permissions['others'] === "1") { //if the ugroup is not anonymous and not registered, we have to: // check consistency with current permissions for anonymous users // and current permissions for registered users if ($user_set_anonymous_to_update || $anonymous_is_already_set_to_update) { $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('tracker_admin_permissions', 'ignore_g_anon_update', array($name_of_ugroup, $anonymous_name))); } else { if ($user_set_registered_to_update || $registered_is_already_set_to_update) { $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('tracker_admin_permissions', 'ignore_g_regis_update', array($name_of_ugroup, $registered_name))); } else { permission_add_ugroup($group_id, 'PLUGIN_TRACKER_FIELD_UPDATE', $fake_object_id, $ugroup_id); $add_update_to_history = true; } } } else { if (isset($stored_ugroups_permissions[$field_id]['ugroups'][$ugroup_id]['permissions']['PLUGIN_TRACKER_FIELD_UPDATE']) && isset($ugroup_permissions['others']) && $ugroup_permissions['others'] !== "1") { //If we don't have already clear the permissions if (!$user_set_anonymous_to_update && !$user_set_registered_to_update) { permission_clear_ugroup_object($group_id, 'PLUGIN_TRACKER_FIELD_UPDATE', $ugroup_id, $fake_object_id); $add_update_to_history = true; } } } //READ Permission //----------------- if (!isset($stored_ugroups_permissions[$field_id]['ugroups'][$ugroup_id]['permissions']['PLUGIN_TRACKER_FIELD_READ']) && isset($ugroup_permissions['others']) && $ugroup_permissions['others'] === "0") { //if the ugroup is not anonymous and not registered, we have to: // check consistency with current permissions for anonymous users // and current permissions for registered users if ($user_set_anonymous_to_read || $anonymous_is_already_set_to_read) { $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('tracker_admin_permissions', 'ignore_g_anon_read', array($name_of_ugroup, $anonymous_name))); } else { if ($user_set_registered_to_read || $registered_is_already_set_to_read) { $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('tracker_admin_permissions', 'ignore_g_regis_read', array($name_of_ugroup, $registered_name))); } else { if ($user_set_anonymous_to_update || $anonymous_is_already_set_to_update) { $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('tracker_admin_permissions', 'ignore_g_anon_update', array($name_of_ugroup, $anonymous_name))); } else { if ($user_set_registered_to_update || $registered_is_already_set_to_update) { $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('tracker_admin_permissions', 'ignore_g_regis_update', array($name_of_ugroup, $registered_name))); } else { permission_add_ugroup($group_id, 'PLUGIN_TRACKER_FIELD_READ', $fake_object_id, $ugroup_id); $add_read_to_history = true; } } } } } else { if (isset($stored_ugroups_permissions[$field_id]['ugroups'][$ugroup_id]['permissions']['PLUGIN_TRACKER_FIELD_READ']) && isset($ugroup_permissions['others']) && $ugroup_permissions['others'] !== "0") { //If we don't have already clear the permissions if (!$user_set_anonymous_to_read && !$user_set_registered_to_read) { permission_clear_ugroup_object($group_id, 'PLUGIN_TRACKER_FIELD_READ', $ugroup_id, $fake_object_id); $add_read_to_history = true; } } } } } //history if ($add_submit_to_history) { permission_add_history($group_id, 'PLUGIN_TRACKER_FIELD_SUBMIT', $fake_object_id); } if ($add_read_to_history) { permission_add_history($group_id, 'PLUGIN_TRACKER_FIELD_READ', $fake_object_id); } if ($add_update_to_history) { permission_add_history($group_id, 'PLUGIN_TRACKER_FIELD_UPDATE', $fake_object_id); } if (!$permissions_updated && ($add_submit_to_history || $add_read_to_history || $add_update_to_history)) { $permissions_updated = true; } } } return $permissions_updated; //$GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('project_admin_userperms', 'perm_upd')); }
public function displayAdminPermsFields(Tracker_IDisplayTrackerLayout $layout, $request, $current_user) { $items = $this->getPermsItems(); $title = $items['fields']['title']; $breadcrumbs = array($items['fields']); $this->displayAdminPermsHeader($layout, $title, $breadcrumbs); echo '<h2>' . $title . '</h2>'; $hp = Codendi_HTMLPurifier::instance(); $group_first = $request->get('group_first') ? 1 : 0; $selected_id = $request->get('selected_id'); $selected_id = $selected_id ? $selected_id : false; $ugroups_permissions = plugin_tracker_permission_get_field_tracker_ugroups_permissions($this->getGroupId(), $this->getId(), Tracker_FormElementFactory::instance()->getUsedFields($this), false); $submit_permission = 'PLUGIN_TRACKER_FIELD_SUBMIT'; $read_permission = 'PLUGIN_TRACKER_FIELD_READ'; $update_permission = 'PLUGIN_TRACKER_FIELD_UPDATE'; $none = 'PLUGIN_TRACKER_NONE'; $attributes_for_selected = 'selected="selected" style="background:#EEE;"'; //TODO: put style in stylesheet $html = ''; //form $url_action_without_group_first = '?tracker=' . (int) $this->getID() . '&func=admin-perms-fields'; $url_action_with_group_first = $url_action_without_group_first . '&group_first=' . $group_first; //The change form $group_first_value = $group_first; $group_id = (int) $this->getGroupID(); $atid = (int) $this->getID(); $url_action_with_group_first_for_js = str_replace('&', '&', $url_action_with_group_first) . '&selected_id='; $html .= <<<EOS <script type="text/javascript"> <!-- function changeFirstPartId(wanted) { location.href = '{$url_action_with_group_first_for_js}' + wanted; } //--> </script> EOS; if ($group_first) { //We reorganize the associative array $tablo = $ugroups_permissions; $ugroups_permissions = array(); foreach ($tablo as $key_field => $value_field) { foreach ($value_field['ugroups'] as $key_ugroup => $value_ugroup) { if (!isset($ugroups_permissions[$key_ugroup])) { $ugroups_permissions[$key_ugroup] = array('values' => $value_ugroup['ugroup'], 'related_parts' => array(), 'tracker_permissions' => $value_ugroup['tracker_permissions']); } $ugroups_permissions[$key_ugroup]['related_parts'][$key_field] = array('values' => $value_field['field'], 'permissions' => $value_ugroup['permissions']); } } ksort($ugroups_permissions); $header = array($GLOBALS['Language']->getText('plugin_tracker_admin_permissions', 'ugroup'), $GLOBALS['Language']->getText('plugin_tracker_include_report', 'field_label'), $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', $submit_permission), $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', 'permissions')); } else { foreach ($ugroups_permissions as $key_field => $value_field) { $ugroups_permissions[$key_field]['values'] =& $ugroups_permissions[$key_field]['field']; $ugroups_permissions[$key_field]['related_parts'] =& $ugroups_permissions[$key_field]['ugroups']; foreach ($value_field['ugroups'] as $key_ugroup => $value_ugroup) { $ugroups_permissions[$key_field]['related_parts'][$key_ugroup]['values'] =& $ugroups_permissions[$key_field]['related_parts'][$key_ugroup]['ugroup']; } ksort($ugroups_permissions[$key_field]['related_parts']); reset($ugroups_permissions[$key_field]['related_parts']); } $header = array($GLOBALS['Language']->getText('plugin_tracker_include_report', 'field_label'), $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', 'ugroup'), $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', $submit_permission), $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', 'permissions')); } reset($ugroups_permissions); list($key, $value) = each($ugroups_permissions); //header if ($group_first && count($ugroups_permissions) < 1 || !$group_first && count($ugroups_permissions[$key]['related_parts']) < 1) { $html .= $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', 'fields_no_ugroups'); } else { //The permission form $html .= '<form name="form_tracker_permissions" action="' . $url_action_with_group_first . '" method="post">'; $html .= '<div>'; $html .= '<input type="hidden" name="selected_id" value="' . (int) $selected_id . '" />'; //intro $html .= $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', 'fields_tracker_intro'); //We display 'group_first' or 'field_first' if ($group_first) { $html .= $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', 'fields_tracker_toggle_field', $url_action_without_group_first . '&group_first=0'); } else { $html .= $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', 'fields_tracker_toggle_group', $url_action_without_group_first . '&group_first=1'); } $html .= html_build_list_table_top($header); //body $i = 0; $a_star_is_displayed = false; $related_parts = array(); //The select box for the ugroups or fields (depending $group_first) $html .= '<tr class="' . util_get_alt_row_color($i++) . '">'; $html .= '<td rowspan="' . (count($ugroups_permissions[$key]['related_parts']) + 1) . '" style="vertical-align:top;">'; $html .= '<select onchange="changeFirstPartId(this.options[this.selectedIndex].value);">'; foreach ($ugroups_permissions as $part_permissions) { if ($selected_id === false) { $selected_id = $part_permissions['values']['id']; } $html .= '<option value="' . (int) $part_permissions['values']['id'] . '" '; if ($part_permissions['values']['id'] === $selected_id) { $first_part = $part_permissions['values']; $related_parts = $part_permissions['related_parts']; $html .= $attributes_for_selected; } $html .= ' >'; $html .= $part_permissions['values']['name']; if ($group_first) { if (isset($part_permissions['tracker_permissions']) && count($part_permissions['tracker_permissions']) === 0) { $html .= ' *'; $a_star_is_displayed = true; } } $html .= '</option>'; } $html .= '</select>'; $html .= '</td>'; $is_first = true; //The permissions for the current item (field or ugroup, depending $group_id) foreach ($related_parts as $ugroup_permissions) { $second_part = $ugroup_permissions['values']; $permissions = $ugroup_permissions['permissions']; //The group if (!$is_first) { $html .= '<tr class="' . util_get_alt_row_color($i++) . '">'; } else { $is_first = false; } $html .= '<td>'; $name = '<a href="' . $url_action_without_group_first . '&selected_id=' . (int) $second_part['id'] . '&group_first=' . ($group_first ? 0 : 1) . '">'; $name .= $hp->purify($second_part['name'], $group_first ? CODENDI_PURIFIER_DISABLED : CODENDI_PURIFIER_BASIC); $name .= '</a>'; if (!$group_first && isset($ugroup_permissions['tracker_permissions']) && count($ugroup_permissions['tracker_permissions']) === 0) { $name = '<span >' . $name . ' *</span>'; //TODO css $a_star_is_displayed = true; } $html .= $name; $html .= '</td>'; //Submit permission $html .= '<td style="text-align:center;">'; if ($group_first) { $name_of_variable = "permissions[" . (int) $second_part['id'] . "][" . (int) $first_part['id'] . "]"; } else { $name_of_variable = "permissions[" . (int) $first_part['id'] . "][" . (int) $second_part['id'] . "]"; } $html .= '<input type="hidden" name="' . $name_of_variable . '[submit]" value="off"/>'; $can_submit = $group_first && $second_part['field']->isSubmitable() || !$group_first && $first_part['field']->isSubmitable(); $can_update = $group_first && $second_part['field']->isUpdateable() || !$group_first && $first_part['field']->isUpdateable(); $html .= "<input type='checkbox' name=\"" . $name_of_variable . '[submit]" ' . (isset($permissions[$submit_permission]) ? "checked='checked'" : "") . " " . ($can_submit ? "" : "disabled='disabled'") . " /> "; $html .= "</td><td>"; //Other permissions (R/W) $html .= "<select name='" . $name_of_variable . "[others]' >"; $html .= "<option value='100' " . (!isset($permissions[$read_permission]) && !isset($permissions[$update_permission]) ? $attributes_for_selected : "") . " >" . $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', $none) . "</option>"; $html .= "<option value='0' " . (isset($permissions[$read_permission]) && !isset($permissions[$update_permission]) ? $attributes_for_selected : "") . " >" . $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', $read_permission) . "</option>"; if ($can_update) { $html .= "<option value='1' " . (isset($permissions[$update_permission]) ? $attributes_for_selected : "") . " >" . $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', $update_permission) . "</option>"; } $html .= "</select>"; $html .= "</td>"; $html .= "</tr>\n"; } //end of table $html .= "</table>"; if ($a_star_is_displayed) { $html .= $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', 'ug_may_have_no_access', TRACKER_BASE_URL . "/admin/?group_id=" . (int) $this->getGroupID() . "&atid=" . (int) $this->getID() . "&func=permissions&perm_type=tracker"); } $html .= "<input type='submit' name='update' value=\"" . $GLOBALS['Language']->getText('project_admin_permissions', 'submit_perm') . "\" />"; //{{{20050602 NTY: removed. what is default permissions ??? //$html .= "<input type='submit' name='reset' value=\"".$GLOBALS['Language']->getText('project_admin_permissions','reset_to_def')."\" />"; //}}} } $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>"; print $html; $this->displayFooter($layout); }