Ejemplo n.º 1
0
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'));
}
Ejemplo n.º 2
0
    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() . '&amp;func=admin-perms-fields';
        $url_action_with_group_first = $url_action_without_group_first . '&amp;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('&amp;', '&', $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 . '&amp;group_first=0');
            } else {
                $html .= $GLOBALS['Language']->getText('plugin_tracker_admin_permissions', 'fields_tracker_toggle_group', $url_action_without_group_first . '&amp;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 . '&amp;selected_id=' . (int) $second_part['id'] . '&amp;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);
    }