def server_edit_votes(request, server_id): server = get_object_or_404(Server.active.select_related(), pk=server_id) moderator = server.moderators.filter(user=request.user) if server.owner != request.user and (not moderator or not moderator[0].edit_votes_allowed): raise Http404 moderator = moderator[0] if moderator else None if request.method == 'POST': vote = Vote(server=server, command='command', title='New vote') vote.save() votes = server.config_votes.all() return render_to_response('mod/server_detail_edit_votes.html', { 'server': server, 'votes': votes, 'moderator': moderator }, context_instance=RequestContext(request))
def update_votes(request, server_id): server = get_object_or_404(Server.active.select_related(), pk=server_id) moderator = server.moderators.filter(user=request.user) if server.owner != request.user and not moderator: raise Http404 moderator = moderator[0] if moderator else None if server.owner != request.user and not moderator.edit_votes_allowed: raise Http404 next = request.REQUEST.get('next', reverse('server_edit_votes', kwargs={'server_id': server.id})) votes = server.config_votes.all() post = request.POST.copy() id_done_list = [] title_done_list = [] for key in post: if ' ' not in key: continue input_type = key.split(' ', 1)[0] if input_type not in ['title', 'command']: continue vote_id = key.rsplit(' ', 1)[-1] if vote_id == 'new': if not post[key]: continue vote_id = key.rsplit(' ', 2)[-2] if vote_id in id_done_list: continue if vote_id.isdigit: if input_type == 'title': if post[key] in title_done_list: continue other = 'command' else: other = 'title' vars()[input_type] = post[key] for _key in post: if not post[_key] or ' ' not in _key: continue if _key.rsplit(' ', 1)[-1] == 'new' and _key.split(' ', 1)[0] == other: check_id = key.rsplit(' ', 2)[-2] if check_id == vote_id: if input_type == 'command': if post[_key] in title_done_list: break vars()[other] = post[_key] new_vote = Vote(server=server, command=vars()['command'].splitlines()[0], title=vars()['title'].splitlines()[0]) new_vote.save() id_done_list.append(vote_id) title_done_list.append(vars()['title']) break elif vote_id.isdigit(): if input_type == 'title': vote = votes.filter(title=post[key]).exclude(pk=vote_id) if vote: vote.delete() vote = votes.filter(pk=vote_id) if len(vote) != 1: continue vote = vote[0] if not post[key]: vote.delete() else: setattr(vote, input_type, post[key].splitlines()[0]) vote.save() return render_to_response('mod/settings_updated.html', {'next': next}, context_instance=RequestContext(request))