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)
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
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}))
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))
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 })
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)