예제 #1
0
def edit_role(request, id=None):
    context = {
        'page_title': u'Papéis',
        'edit_name': 'role',
        'has_back': False,
        'features': get_user_features(request)
    }
    t = get_template('edit.html')
    role = None
    form = RoleForm()
    try:
        if request.method == 'POST':
            form = RoleForm(request.POST)
            if form.is_valid():
                cd = form.cleaned_data
                role = _save_role(cd)
                initial = role.__dict__
                messages.success(request, 'Papel salvo com sucesso.')
                form = RoleForm(initial={})

        elif id:
            role = Role.objects.get(id=id)
            initial = role.__dict__
            form = RoleForm(initial=initial)
    except Exception as e:
        log.error(e)
        messages.error(
            request,
            u'Ocorreu um erro ao processar a requisição, por favor tente novamente.'
        )
    context = _set_role_form_context(role, form, context)
    return render_to_response('edit.html',
                              context,
                              context_instance=RequestContext(request))
예제 #2
0
파일: views.py 프로젝트: nikhila05/pietrack
def member_role_create(request, slug):
    project = Project.objects.get(slug=slug)
    form = RoleForm(request.POST, project=project)
    if(form.is_valid()):
        role = form.save()
        return HttpResponse(json.dumps({'error': False, 'role_id': role.id, 'role_name': role.name, 'slug': role.slug}), content_type="application/json")
    else:
        return HttpResponse(json.dumps({'error': True, 'errors': form.errors}), content_type="application/json")
예제 #3
0
def add_edit_role(request, *args, **kwargs):
    """Takes in the project id and allows you to add a new role."""

    project_name = kwargs['project_name']
    project = get_object_or_404(CollabProject, slug=project_name)
    id = project.id

    # If the user is not the project admin, just return him to the project page.
    if not project.admin.filter(
            id=request.user.id) and not request.user.is_superuser:
        request.user.message_set.create(
            message="You do not have privileges to edit roles!")
        return HttpResponseRedirect(project.get_absolute_url())

    if 'role_id' in kwargs:
        role_id = kwargs['role_id']
        role = get_object_or_404(Role, id=role_id)
        # Check if the role exists in that project!
        if role.project.id != project.id:
            request.user.message_set.create(
                message="The role does not exist in that project!")
            return HttpResponseRedirect(project.get_absolute_url())
        edit, instance, initial = True, role, None
    else:
        edit, instance, initial = False, None, {}

    if request.method == 'POST':
        form = RoleForm(project.id,
                        request.POST,
                        instance=instance,
                        clean=(not edit),
                        initial=initial)
        if form.is_valid():
            if not edit:
                new_role = Role()
                message = "The role was added."
            else:
                message = "The role was modified."
            new_role = form.save(commit=False)
            new_role.project = project
            new_role.save()
            # Need this as I have a many to many field and did commit=False.
            form.save_m2m()

            # It's possible that a user gave some Editable privileges without the corresponding Viewable. The
            # following code automatically adds those Viewable privileges.
            for privilege in form.cleaned_data["privileges"]:
                if privilege.permission_type == 'Editable':
                    new_privilege = get_object_or_404(
                        Privilege,
                        project=project,
                        related_model=privilege.related_model,
                        permission_type='Viewable')
                    new_role.privileges.add(new_privilege)
            new_role.save()

            if form.cleaned_data["make_default"] == True:
                if project.default_role != new_role:
                    project.default_role = new_role
                    project.save()

            request.user.message_set.create(message=message)
            return HttpResponseRedirect(
                reverse('roles_overview',
                        kwargs={'project_name': project.slug}))
    else:
        form = RoleForm(project.id, instance=instance, initial=initial)
    return render_to_response('project/addrole.html', {
        'form': form,
        'project': project,
        'edit': edit,
        'role': instance
    },
                              context_instance=RequestContext(request))