Exemple #1
0
def index(request, project_slug):
    """ Invite for a project """
    # Get Project
    project = get_object_or_404(Project,
                                slug=project_slug,
                                members=request.user)

    # Get Permissions
    perm = ProjectPermission(request.user)
    if not perm.change_project(project):
        raise Http404

    # Member suggestions
    suggestions = Invite.objects.get_suggestions(request.user, project)

    # Forms
    user_form = InviteUserForm(project)

    initial_email = {
        'pm': INITIAL_INVITE_PM,
    }
    email_form = InviteEmailForm(project, initial=initial_email)

    if request.method == "POST":
        # Which form was posted?
        if request.POST.has_key('usernames'):
            user_form = InviteUserForm(project, request.POST)
            if user_form.is_valid():
                invites = user_form.save(request.user)
                request.user.message_set.create(
                    message=_('%(amount)s invite(s) has been sent out.' %
                              {'amount': invites}))
                return HttpResponseRedirect(
                    reverse('project-detail', kwargs={'slug': project.slug}))

        elif request.POST.has_key('email_addresses'):
            email_form = InviteEmailForm(project, request.POST)
            if email_form.is_valid():
                (useri, emaili) = email_form.save(request.user)
                if len(emaili) == 1 and useri == 0:
                    request.user.message_set.create(message=_(
                        'Your invite to %(invited)s has been sent out.' %
                        {'invited': emaili[0]}))
                else:
                    request.user.message_set.create(
                        message=_('%(amount)s invites has been sent out.' %
                                  {'amount': useri + len(emaili)}))
                return HttpResponseRedirect(
                    reverse('project-detail', kwargs={'slug': project.slug}))

    extra_context = {
        'user_form': user_form,
        'email_form': email_form,
        'project': project,
        'members': suggestions
    }

    return direct_to_template(request,
                              template='blinvite/index.html',
                              extra_context=extra_context)
Exemple #2
0
def add_edit(request, slug=None):
    """ Add/Edit Project """
    form = ProjectForm(request.POST or None,
                       instance=slug and Project.objects.get(slug__iexact=slug))

    tags = Tag.objects.usage_for_queryset(Project.objects.filter(members=request.user), counts=True)
    project = None
    if slug:
        check = ProjectPermission(request.user)
        project = Project.objects.get(slug__iexact=slug)
        if not check.change_project(project):
            raise Http404

    if request.method == "POST" and form.is_valid():
        project = form.save(request.user, slug)
        form.save_m2m()

        # Notification
        if slug:
            msg = _("Project '%(project)s' has been updated" % {'project': project.name })
            project.create_activity(request.user, Activity.UPDATE)
        else:
            msg = _("Project '%(project)s' has been created" % {'project': project.name })
            project.create_activity(request.user, Activity.START)
        request.user.message_set.create(message=msg)
        
        return HttpResponseRedirect(reverse('project-detail', kwargs = {'slug': project.slug}))

    return direct_to_template(request,
                              template='blproject/form.html',
                              extra_context={'form':form,
                                             'project': project,
                                             'tags': tags})
Exemple #3
0
def delete(request, slug):
    """ Delete project """
    project = get_object_or_404(Project, slug__iexact=slug)
    check = ProjectPermission(request.user)

    if check.delete_project(project):
        project.delete()
        request.user.message_set.create(message=_("Project '%(project)s' has been deleted" % {'project': project.name }))
        
        return HttpResponseRedirect(reverse('project-list'))
    else:
        raise Http404
Exemple #4
0
def delete(request, slug):
    """ Delete project """
    project = get_object_or_404(Project, slug__iexact=slug)
    check = ProjectPermission(request.user)

    if check.delete_project(project):
        project.delete()
        request.user.message_set.create(
            message=_("Project '%(project)s' has been deleted" %
                      {'project': project.name}))

        return HttpResponseRedirect(reverse('project-list'))
    else:
        raise Http404
Exemple #5
0
def index(request, project_slug):
    """ Invite for a project """
    # Get Project
    project = get_object_or_404(Project, slug=project_slug, members=request.user)
    
    # Get Permissions
    perm = ProjectPermission(request.user)
    if not perm.change_project(project):
        raise Http404

    # Member suggestions
    suggestions = Invite.objects.get_suggestions(request.user, project)

    # Forms
    user_form = InviteUserForm(project)

    initial_email = {'pm': INITIAL_INVITE_PM,}
    email_form = InviteEmailForm(project, initial=initial_email)

    if request.method == "POST":
        # Which form was posted?
        if request.POST.has_key('usernames'):
            user_form = InviteUserForm(project, request.POST)
            if user_form.is_valid():
                invites = user_form.save(request.user)
                request.user.message_set.create(message=_('%(amount)s invite(s) has been sent out.' % {'amount': invites}))
                return HttpResponseRedirect(reverse('project-detail', kwargs={'slug': project.slug}))

        elif request.POST.has_key('email_addresses'):
            email_form = InviteEmailForm(project, request.POST)
            if email_form.is_valid():
                (useri, emaili) = email_form.save(request.user)
                if len(emaili) == 1 and useri == 0:
                    request.user.message_set.create(message=_('Your invite to %(invited)s has been sent out.' % {'invited': emaili[0]}))
                else:
                    request.user.message_set.create(message=_('%(amount)s invites has been sent out.' % {'amount': useri + len(emaili)}))
                return HttpResponseRedirect(reverse('project-detail', kwargs={'slug': project.slug}))

    extra_context = {'user_form': user_form,
                     'email_form': email_form,
                     'project': project,
                     'members': suggestions}

    return direct_to_template(request,
                              template='blinvite/index.html',
                              extra_context=extra_context)
Exemple #6
0
def add_edit(request, slug=None):
    """ Add/Edit Project """
    form = ProjectForm(request.POST or None,
                       instance=slug
                       and Project.objects.get(slug__iexact=slug))

    tags = Tag.objects.usage_for_queryset(
        Project.objects.filter(members=request.user), counts=True)
    project = None
    if slug:
        check = ProjectPermission(request.user)
        project = Project.objects.get(slug__iexact=slug)
        if not check.change_project(project):
            raise Http404

    if request.method == "POST" and form.is_valid():
        project = form.save(request.user, slug)
        form.save_m2m()

        # Notification
        if slug:
            msg = _("Project '%(project)s' has been updated" %
                    {'project': project.name})
            project.create_activity(request.user, Activity.UPDATE)
        else:
            msg = _("Project '%(project)s' has been created" %
                    {'project': project.name})
            project.create_activity(request.user, Activity.START)
        request.user.message_set.create(message=msg)

        return HttpResponseRedirect(
            reverse('project-detail', kwargs={'slug': project.slug}))

    return direct_to_template(request,
                              template='blproject/form.html',
                              extra_context={
                                  'form': form,
                                  'project': project,
                                  'tags': tags
                              })
Exemple #7
0
def make_admin(request, model, model_slug, member_slug, permitted=False):
    """ Give administrator rights """
    model = get_model(*model.split('.'))
    model_object = get_object_or_404(model,
                                     slug=model_slug,
                                     members=request.user)

    user = get_object_or_404(User, username=member_slug)

    if isinstance(model_object, Group):
        redirect_reverse = 'group-detail'
        codename = 'group_permission.change_group'
        check = GroupPermission(request.user)
        if check.change_group(model_object):
            permitted = True

    elif isinstance(model_object, Project):
        redirect_reverse = 'project-detail'
        codename = 'project_permission.change_project'
        check = ProjectPermission(request.user)
        if check.change_project(model_object):
            permitted = True

    if permitted:
        permission = Permission(
            codename=codename,
            content_type=ContentType.objects.get_for_model(model),
            object_id=model_object.id,
            user=user,
            approved=True)
        permission.save()

        # Notification
        model_object.create_activity(request.user, Activity.ADMIN, user)
        request.user.message_set.create(message=_(
            "Member '%(member)s' has been granted admin permissions for '%(project)s'"
            % {
                'member': user.username,
                'project': model_object.name
            }))

    return HttpResponseRedirect(
        reverse(redirect_reverse, kwargs={'slug': model_object.slug}))
Exemple #8
0
def delete_member(request, model, model_slug, member_slug):
    """ Delete member """
    model = get_model(*model.split('.'))
    model_object = get_object_or_404(model,
                                     slug=model_slug,
                                     members=request.user)

    user = get_object_or_404(User, username=member_slug)

    kwargs = {}
    msg = _("Member '%(member)s' has been removed from '%(project)s'" % {
        'member': user.username,
        'project': model_object.name
    })
    if isinstance(model_object, Group):
        redirect_reverse = 'group-detail'
        check = GroupPermission(request.user)
        if not check.change_group(model_object):
            raise Http404

    elif isinstance(model_object, Project):
        redirect_reverse = 'project-detail'
        kwargs['slug'] = model_object.slug
        check = ProjectPermission(request.user)
        if not check.change_project(model_object) and user != request.user:
            raise Http404
        if user == request.user:
            redirect_reverse = 'project-list'
            kwargs = {}
            msg = _("You have resigned from '%(project)s'" %
                    {'project': model_object.name})

    if model_object.members.count() > 1:
        model_object.members.remove(user.id)
        model_object.save()

        # Notification
        model_object.create_activity(request.user, Activity.DELETE, user)
        request.user.message_set.create(message=msg)

    return HttpResponseRedirect(reverse(redirect_reverse, kwargs=kwargs))
Exemple #9
0
def add_member(request,
               model,
               model_slug,
               template='blprofile/includes/form.html'):
    """ Add member to model """
    model = get_model(*model.split('.'))
    model_object = get_object_or_404(model,
                                     slug=model_slug,
                                     members=request.user)

    if isinstance(model_object, Group):
        redirect_reverse = 'group-detail'
        extra_context = {'group': model_object}
        check = GroupPermission(request.user)
        if not check.change_group(model_object):
            raise Http404

    elif isinstance(model_object, Project):
        redirect_reverse = 'project-detail'
        extra_context = {'project': model_object}
        check = ProjectPermission(request.user)
        if not check.change_project(model_object):
            raise Http404

    form = MemberForm()
    invite_form = InviteForm()
    msg = ''

    # Load every member of your projects
    projects = Project.objects.filter(members=request.user).distinct()
    members = []
    for project in projects:
        for member in project.members.all():
            if member not in members and member not in model_object.members.all(
            ):
                members.append(member)

    if request.method == "POST":
        if 'invite' in request.POST.keys():
            invite_form = InviteForm(request.POST)
            if invite_form.is_valid():
                invite = invite_form.save(request.user, model, model_object.id)
                msg = _(
                    "Invite for '%(project)s' has been send to '%(invite)s'" %
                    {
                        'project': model_object.name,
                        'invite': invite
                    })
        else:
            form = MemberForm(request.POST)
            if form.is_valid():
                members = form.save(model, model_object.id)

                member_string = ''
                for member in members:
                    member_string = member_string + member.strip() + ", "
                if len(members) > 1:
                    msg = _(
                        "Members '%(member)s' have been invited to '%(project)s'"
                        % {
                            'member': member_string[:-2],
                            'project': model_object.name
                        })
                    model_object.create_activity(request.user, Activity.INVITE)
                else:
                    msg = _(
                        "Member '%(member)s' has been invited to '%(project)s'"
                        % {
                            'member': member_string[:-2],
                            'project': model_object.name
                        })
                    user = User.objects.get(username__iexact=member)
                    model_object.create_activity(request.user, Activity.INVITE,
                                                 user)

        # Notification
        request.user.message_set.create(message=msg)

        return HttpResponseRedirect(
            reverse(redirect_reverse, kwargs={
                'slug': model_slug,
            }))

    extra_context['form'] = form
    extra_context['inviteform'] = invite_form
    extra_context['members'] = members
    return simple.direct_to_template(request,
                                     template=template,
                                     extra_context=extra_context)