diff --git a/openslides/participant/models.py b/openslides/participant/models.py index 1442a5b0a..793b435f0 100644 --- a/openslides/participant/models.py +++ b/openslides/participant/models.py @@ -42,6 +42,21 @@ class Profile(models.Model): self.user.set_password(self.firstpassword) self.user.save() + + @models.permalink + def get_absolute_url(self, link='edit'): + """ + Return the URL to this user. + + link can be: + * edit + * delete + """ + if link == 'edit': + return ('user_edit', [str(self.user.id)]) + if link == 'delete': + return ('user_delete', [str(self.user.id)]) + def __unicode__(self): if self.group: return "%s (%s)" % (self.user.get_full_name(), self.group) diff --git a/openslides/participant/views.py b/openslides/participant/views.py index 40e043bcb..ea1bc176b 100644 --- a/openslides/participant/views.py +++ b/openslides/participant/views.py @@ -15,9 +15,10 @@ from __future__ import with_statement import csv import utils.csv_ext from urllib import urlencode + try: from urlparse import parse_qs -except ImportError: # old python version, grab it from cgi +except ImportError: # python <= 2.5 grab it from cgi from cgi import parse_qs from django.http import HttpResponse @@ -33,9 +34,12 @@ from django.db import transaction from participant.models import Profile from participant.api import gen_username, gen_password -from participant.forms import UserNewForm, UserEditForm, ProfileForm, UsersettingsForm, UserImportForm, GroupForm, AdminPasswordChangeForm +from participant.forms import (UserNewForm, UserEditForm, ProfileForm, + UsersettingsForm, UserImportForm, GroupForm, + AdminPasswordChangeForm) from application.models import Application -from utils.utils import template, permission_required, gen_confirm_form, ajax_request +from utils.utils import (template, permission_required, gen_confirm_form, + ajax_request, decodedict, encodedict) from utils.pdf import print_userlist, print_passwords from utils.template import Tab from system import config @@ -46,17 +50,6 @@ from django.db.models import Avg, Max, Min, Count @permission_required('participant.can_see_participant') @template('participant/overview.html') def get_overview(request): - def decodedict(dict): - newdict = {} - for key in dict: - newdict[key] = [dict[key][0].encode('utf-8')] - return newdict - - def encodedict(dict): - newdict = {} - for key in dict: - newdict[key] = [unicode(dict[key][0].decode('utf-8'))] - return newdict try: sortfilter = encodedict(parse_qs(request.COOKIES['participant_sortfilter'])) except KeyError: @@ -347,7 +340,7 @@ def user_import(request): if form.is_valid(): try: with transaction.commit_on_success(): - + old_users = {} applications_mapped = 0 applications_review = 0 diff --git a/openslides/utils/utils.py b/openslides/utils/utils.py index aaaa9aecb..f679c1a20 100644 --- a/openslides/utils/utils.py +++ b/openslides/utils/utils.py @@ -110,3 +110,16 @@ def _propper_unicode(text): res = text return res + +def decodedict(dict): + newdict = {} + for key in dict: + newdict[key] = [dict[key][0].encode('utf-8')] + return newdict + + +def encodedict(dict): + newdict = {} + for key in dict: + newdict[key] = [unicode(dict[key][0].decode('utf-8'))] + return newdict diff --git a/openslides/utils/views.py b/openslides/utils/views.py index 5bac17f7d..e5ea0d7d5 100644 --- a/openslides/utils/views.py +++ b/openslides/utils/views.py @@ -31,6 +31,7 @@ from django.views.generic import ( ListView as _ListView, ) from django.views.generic.detail import SingleObjectMixin +from django.views.generic.list import TemplateResponseMixin from django.utils.importlib import import_module from django.core.context_processors import csrf import settings @@ -45,6 +46,14 @@ FREE_TO_GO = 'free to go' View = _View +class SetCookieMixin(object): + def render_to_response(self, context, **response_kwargs): + response = TemplateResponseMixin.render_to_response(self, context, **response_kwargs) + if 'cookie' in context: + response.set_cookie(context['cookie'][0], context['cookie'][1]) + return response + + class LoginMixin(object): @method_decorator(login_required) def dispatch(self, request, *args, **kwargs): @@ -76,7 +85,7 @@ class TemplateView(PermissionMixin, _TemplateView): return context -class ListView(PermissionMixin, _ListView): +class ListView(PermissionMixin, SetCookieMixin, _ListView): def get_context_data(self, **kwargs): context = super(ListView, self).get_context_data(**kwargs) template_manipulation.send(sender=self, request=self.request, context=context)