diff --git a/apps/common/forms.py b/apps/common/forms.py index 93bf87db86..c0d410b210 100644 --- a/apps/common/forms.py +++ b/apps/common/forms.py @@ -1,5 +1,4 @@ from django import forms -from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ from django.db import models @@ -77,7 +76,7 @@ class FilterForm(forms.Form): self.fields[list_filter['name']] = forms.ModelChoiceField( queryset=list_filter['queryset'], label=label[0].upper() + label[1:], required=False) - + class ChoiceForm(forms.Form): """ diff --git a/apps/common/utils.py b/apps/common/utils.py index 32db044fc0..1881fe8cf7 100644 --- a/apps/common/utils.py +++ b/apps/common/utils.py @@ -317,7 +317,7 @@ def parse_range(astr): x = part.split(u'-') result.update(range(int(x[0]), int(x[-1]) + 1)) return sorted(result) - + def generate_choices_w_labels(choices, display_object_type=True): results = [] diff --git a/apps/common/views.py b/apps/common/views.py index 5a66364669..c6b236665e 100644 --- a/apps/common/views.py +++ b/apps/common/views.py @@ -1,13 +1,11 @@ from django.shortcuts import redirect from django.utils.translation import ugettext_lazy as _ -from django.contrib import messages from django.http import HttpResponseRedirect -from django.shortcuts import render_to_response, get_object_or_404 +from django.shortcuts import render_to_response from django.template import RequestContext from django.contrib import messages from django.contrib.contenttypes.models import ContentType -from common.utils import generate_choices_w_labels from common.forms import ChoiceForm @@ -44,12 +42,12 @@ def get_obj_from_content_type_string(string): model, pk = string.split(u',') ct = ContentType.objects.get(model=model) return ct.get_object_for_this_type(pk=pk) - + def assign_remove(request, left_list, right_list, add_method, remove_method, left_list_title, right_list_title, obj=None, object_name=None, decode_content_type=False): left_list_name = u'left_list' right_list_name = u'right_list' - + if request.method == 'POST': if u'%s-submit' % left_list_name in request.POST.keys(): unselected_list = ChoiceForm(request.POST, @@ -101,7 +99,7 @@ def assign_remove(request, left_list, right_list, add_method, remove_method, lef 'title': left_list_title, 'submit_label': _(u'Add'), } - }, + }, { 'name':'generic_form_subtemplate.html', 'grid': 6, @@ -121,13 +119,13 @@ def assign_remove(request, left_list, right_list, add_method, remove_method, lef 'object': obj } ) - + if object_name: context.update( { 'object_name': object_name, } ) - + return render_to_response('generic_form.html', context, context_instance=RequestContext(request)) diff --git a/apps/documents/forms.py b/apps/documents/forms.py index 39b190baea..a81336be5a 100644 --- a/apps/documents/forms.py +++ b/apps/documents/forms.py @@ -298,13 +298,13 @@ class DocumentCreateWizard(BoundFormWizard): self.initial = {2: initial_data} if not initial_data: # If there is no metadata selected end wizard - self.form_list=[DocumentTypeSelectForm, MetadataSelectionForm] + self.form_list = [DocumentTypeSelectForm, MetadataSelectionForm] if isinstance(form, MetadataFormSet): for identifier, metadata in enumerate(form.cleaned_data): self.query_dict['metadata%s_id' % identifier] = metadata['id'] self.query_dict['metadata%s_value' % identifier] = metadata['value'] - + def get_template(self, step): return 'generic_wizard.html' @@ -313,10 +313,10 @@ class DocumentCreateWizard(BoundFormWizard): view = 'upload_document_multiple' else: view = 'upload_document' - + if self.document_type: self.query_dict['document_type_id'] = self.document_type.pk - + url = urlquote(reverse(view), self.query_dict) return HttpResponseRedirect(url) diff --git a/apps/documents/statistics.py b/apps/documents/statistics.py index 1c0dec27bc..786f902651 100644 --- a/apps/documents/statistics.py +++ b/apps/documents/statistics.py @@ -60,7 +60,7 @@ def get_statistics(): ] ) #[(day_count['date_added'].strftime('%Y-%m-%d'), day_count['id__count']) for day_count in Document.objects.values('date_added').annotate(Count("id"))] - + return { 'title': _(u'Document statistics'), 'paragraphs': paragraphs diff --git a/apps/documents/views.py b/apps/documents/views.py index 130fe77bb3..064ac4319c 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -105,7 +105,7 @@ def document_create_sibling(request, document_id, multiple=True): if document.document_type_id: query_dict['document_type_id'] = document.document_type_id - + url = reverse(view) return HttpResponseRedirect('%s?%s' % (url, urlencode(query_dict))) @@ -126,7 +126,7 @@ def _handle_save_document(request, document, form=None): warnings = update_indexes(document) if request.user.is_staff or request.user.is_superuser: for warning in warnings: - messages.warning(request, warning) + messages.warning(request, warning) def _handle_zip_file(request, uploaded_file, document_type): @@ -150,13 +150,13 @@ def _handle_zip_file(request, uploaded_file, document_type): def upload_document_with_type(request, multiple=True): check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_CREATE]) - + document_type_id = request.GET.get('document_type_id', None) if document_type_id: document_type = get_object_or_404(DocumentType, pk=document_type_id) else: document_type = None - + local_form = DocumentForm(prefix='local', initial={'document_type': document_type}) if USE_STAGING_DIRECTORY: staging_form = StagingDocumentForm(prefix='staging', @@ -240,10 +240,10 @@ def upload_document_with_type(request, multiple=True): 'hide_link': True, } }, - ) + ) else: subtemplates_list.append(local_upload_form) - + context = { 'document_type_id': document_type_id, 'subtemplates_list': subtemplates_list, @@ -280,7 +280,7 @@ def document_view_simple(request, document_id): 'form': preview_form, 'object': document, } - }, + }, ) subtemplates_list.append( { @@ -851,7 +851,7 @@ def document_page_view(request, document_page_id): 'object': document_page, 'web_theme_hide_menus': True, 'form': document_page_form, - 'title': _(u'details for: %s') % document_page, + 'title': _(u'details for: %s') % document_page, }, context_instance=RequestContext(request)) diff --git a/apps/grouping/__init__.py b/apps/grouping/__init__.py index b36e41abf3..0fcd10bc36 100644 --- a/apps/grouping/__init__.py +++ b/apps/grouping/__init__.py @@ -1,23 +1,11 @@ from django.utils.translation import ugettext_lazy as _ -#from django.core.urlresolvers import reverse -#from django.conf import settings -from navigation.api import register_links, register_menu, \ - register_model_list_columns, register_multi_item_links -from main.api import register_diagnostic, register_tool -from permissions.api import register_permissions -from tags.widgets import get_tags_inline_widget_simple +from navigation.api import register_links -#from documents.models import Document, DocumentPage, DocumentPageTransformation -#from documents.staging import StagingFile -#from documents.conf.settings import ENABLE_SINGLE_DOCUMENT_UPLOAD from documents.literals import PERMISSION_DOCUMENT_CREATE, PERMISSION_DOCUMENT_VIEW -#from documents import document_multiple_clear_transformations document_group_link = {'text': _(u'group actions'), 'view': 'document_group_view', 'famfam': 'page_go', 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_VIEW]}} document_group_back_to_document = {'text': _(u'return to document'), 'view': 'document_view_simple', 'args': 'ref_object.id', 'famfam': 'page', 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_VIEW]}} document_group_create_sibling = {'text': _(u'upload new document using same metadata'), 'view': 'document_create_sibling', 'args': 'ref_object.id', 'famfam': 'page_copy', 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_CREATE]}} -#register_multi_item_links(['document_group_view'], [document_multiple_clear_transformations, document_multiple_delete]) - register_links(['document_group_view'], [document_group_back_to_document, document_group_create_sibling], menu_name='sidebar') diff --git a/apps/grouping/forms.py b/apps/grouping/forms.py index 989a88043b..f3599c39c3 100644 --- a/apps/grouping/forms.py +++ b/apps/grouping/forms.py @@ -1,27 +1,12 @@ from django import forms from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext -from django.http import HttpResponseRedirect -from django.utils.http import urlencode from django.core.urlresolvers import reverse from django.utils.safestring import mark_safe -from django.forms.formsets import formset_factory from django.template.defaultfilters import capfirst from django.conf import settings from tags.widgets import get_tags_inline_widget -#from common.wizard import BoundFormWizard -#from common.forms import DetailForm -#from common.literals import PAGE_SIZE_CHOICES, PAGE_ORIENTATION_CHOICES -#from common.conf.settings import DEFAULT_PAPER_SIZE -#from common.conf.settings import DEFAULT_PAGE_ORIENTATION -#from common.utils import urlquote -#from metadata.models import MetadataSet, MetadataType -#from metadata.forms import MetadataFormSet - -#from documents.staging import StagingFile -#from documents.models import Document, DocumentType, \ -# DocumentPage, DocumentPageTransformation class DocumentGroupImageWidget(forms.widgets.Widget): diff --git a/apps/grouping/managers.py b/apps/grouping/managers.py index 081f9fd9d0..4ed9a174d4 100644 --- a/apps/grouping/managers.py +++ b/apps/grouping/managers.py @@ -2,7 +2,6 @@ from django.db import models from django.db.models import Q from metadata.classes import MetadataObject -from metadata.models import DocumentMetadata from documents.models import Document from grouping.literals import INCLUSION_AND, INCLUSION_OR @@ -18,7 +17,7 @@ class DocumentGroupManager(models.Manager): eval_dict = {} eval_dict['document'] = document eval_dict['metadata'] = MetadataObject(metadata_dict) - + if group_obj: groups_qs = self.model.objects.filter(Q(enabled=True) & Q(pk=group_obj.pk)) else: @@ -39,7 +38,7 @@ class DocumentGroupManager(models.Manager): total_query &= query elif item.inclusion == INCLUSION_OR: total_query |= query - + elif cls == u'document': value_query = Q(**{ '%s__%s' % (attribute, item.operator): eval(item.expression, eval_dict) @@ -51,8 +50,8 @@ class DocumentGroupManager(models.Manager): if item.inclusion == INCLUSION_AND: total_query &= query elif item.inclusion == INCLUSION_OR: - total_query |= query - + total_query |= query + except Exception, e: errors.append(e) value_query = Q() @@ -66,7 +65,7 @@ class DocumentGroupManager(models.Manager): errors.append(e) else: document_groups[group] = {'documents': []} - + if group.dynamic_title: try: document_groups[group]['title'] = eval(group.dynamic_title, eval_dict) @@ -74,7 +73,7 @@ class DocumentGroupManager(models.Manager): document_groups[group]['title'] = 'Error; %s' % e else: document_groups[group]['title'] = group.title - + if group_obj: # Return a single group if documents even if there were # many matches diff --git a/apps/grouping/models.py b/apps/grouping/models.py index f92665958c..8111d74586 100644 --- a/apps/grouping/models.py +++ b/apps/grouping/models.py @@ -1,8 +1,6 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ -from documents.models import Document - from grouping.managers import DocumentGroupManager from grouping.literals import OPERATOR_CHOICES, INCLUSION_AND, \ INCLUSION_CHOICES @@ -28,7 +26,7 @@ class DocumentGroupItem(models.Model): inclusion = models.CharField(default=INCLUSION_AND, max_length=16, choices=INCLUSION_CHOICES, help_text=_(u'The inclusion is ignored for the first item.')) foreign_document_data = models.CharField(max_length=32, verbose_name=_(u'foreign document data'), help_text=_(u'This represents the metadata of all other documents. Available objects: `document.` and `metadata.`.')) operator = models.CharField(max_length=16, choices=OPERATOR_CHOICES) - + #local_document_data = models.ForeignKey(MetadataType, related_name='metadata_type_local', verbose_name=_(u'local metadata'), help_text=_(u'This represents the metadata of the current document.')) expression = models.TextField(verbose_name=_(u'expression'), help_text=_(u'This expression will be evaluated against the current selected document. The document metadata is available as variables `metadata` and document properties under the variable `document`.')) negated = models.BooleanField(default=False, verbose_name=_(u'negated'), help_text=_(u'Inverts the logic of the operator.')) diff --git a/apps/grouping/views.py b/apps/grouping/views.py index bec63324f7..48179b89d4 100644 --- a/apps/grouping/views.py +++ b/apps/grouping/views.py @@ -6,7 +6,6 @@ from django.template import RequestContext from documents.literals import PERMISSION_DOCUMENT_VIEW from documents.models import Document -from documents.views import document_list from permissions.api import check_permissions from grouping.models import DocumentGroup diff --git a/apps/metadata/__init__.py b/apps/metadata/__init__.py index 8ebc25e07f..954bb27e4b 100644 --- a/apps/metadata/__init__.py +++ b/apps/metadata/__init__.py @@ -1,10 +1,7 @@ from django.utils.translation import ugettext_lazy as _ -from navigation.api import register_links, register_menu, \ - register_model_list_columns, register_multi_item_links -from main.api import register_diagnostic, register_tool +from navigation.api import register_links, register_multi_item_links from permissions.api import register_permissions - from documents.models import Document PERMISSION_METADATA_DOCUMENT_EDIT = u'metadata_document_edit' diff --git a/apps/metadata/api.py b/apps/metadata/api.py index f55a262726..eebdd2eb87 100644 --- a/apps/metadata/api.py +++ b/apps/metadata/api.py @@ -3,7 +3,6 @@ from urllib import unquote_plus from django.shortcuts import get_object_or_404 -from django.utils.translation import ugettext_lazy as _ from metadata.models import DocumentMetadata, MetadataType @@ -39,21 +38,6 @@ def save_metadata_list(metadata_list, document, create=False): for item in metadata_list: save_metadata(item, document, create) - #if item['value']: - # save_metadata(item, document) - #else: - # #If there is no metadata value, delete the metadata entry - # #completely from the document - # try: - # metadata_type = MetadataType.objects.get(id=item['id']) - # document_metadata = DocumentMetadata.objects.get( - # document=document, - # metadata_type=metadata_type - # ) - # document_metadata.delete() - # except ObjectDoesNotExist: - # pass - def save_metadata(metadata_dict, document, create=False): """save metadata_dict""" diff --git a/apps/metadata/forms.py b/apps/metadata/forms.py index 7bee8872e7..36ff617f81 100644 --- a/apps/metadata/forms.py +++ b/apps/metadata/forms.py @@ -4,9 +4,9 @@ from django.forms.formsets import formset_factory from metadata.conf.settings import AVAILABLE_MODELS from metadata.conf.settings import AVAILABLE_FUNCTIONS -from metadata.models import MetadataType, DocumentMetadata +from metadata.models import MetadataType + - class MetadataForm(forms.Form): def __init__(self, *args, **kwargs): super(MetadataForm, self).__init__(*args, **kwargs) @@ -63,5 +63,5 @@ class AddMetadataForm(forms.Form): class MetadataRemoveForm(MetadataForm): update = forms.BooleanField(initial=False, label=_(u'Remove'), required=False) - + MetadataRemoveFormSet = formset_factory(MetadataRemoveForm, extra=0) diff --git a/apps/metadata/views.py b/apps/metadata/views.py index 2310d729df..fa212963a7 100644 --- a/apps/metadata/views.py +++ b/apps/metadata/views.py @@ -25,7 +25,7 @@ def metadata_edit(request, document_id=None, document_id_list=None): documents = [get_object_or_404(Document, pk=document_id)] if documents[0].documentmetadata_set.count() == 0: messages.warning(request, _(u'The selected document doesn\'t have any metadata.')) - return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) + return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) elif document_id_list: documents = [get_object_or_404(Document, pk=document_id) for document_id in document_id_list.split(',')] else: @@ -60,8 +60,8 @@ def metadata_edit(request, document_id=None, document_id_list=None): warnings = delete_indexes(document) if request.user.is_staff or request.user.is_superuser: for warning in warnings: - messages.warning(request, _(u'Error deleting document indexes; %s') % warning) - + messages.warning(request, _(u'Error deleting document indexes; %s') % warning) + errors = [] for form in formset.forms: if form.cleaned_data['update']: @@ -80,7 +80,7 @@ def metadata_edit(request, document_id=None, document_id_list=None): warnings = update_indexes(document) if warnings and (request.user.is_staff or request.user.is_superuser): for warning in warnings: - messages.warning(request, _(u'Error updating document indexes; %s') % warning) + messages.warning(request, _(u'Error updating document indexes; %s') % warning) else: messages.success(request, _(u'Document indexes updated successfully.')) @@ -118,7 +118,6 @@ def metadata_add(request, document_id=None, document_id_list=None): messages.error(request, _(u'Must provide at least one document.')) return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) - metadata = {} for document in documents: RecentDocument.objects.add_document_for_user(request.user, document) @@ -142,7 +141,7 @@ def metadata_add(request, document_id=None, document_id_list=None): else: form = AddMetadataForm() - + context = { #'form_display_mode_table': True, 'form': form, @@ -169,7 +168,7 @@ def metadata_remove(request, document_id=None, document_id_list=None): if documents[0].documentmetadata_set.count() == 0: messages.warning(request, _(u'The selected document doesn\'t have any metadata.')) return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) - + elif document_id_list: documents = [get_object_or_404(Document, pk=document_id) for document_id in document_id_list.split(',')] else: @@ -204,8 +203,8 @@ def metadata_remove(request, document_id=None, document_id_list=None): warnings = delete_indexes(document) if request.user.is_staff or request.user.is_superuser: for warning in warnings: - messages.warning(request, _(u'Error deleting document indexes; %s') % warning) - + messages.warning(request, _(u'Error deleting document indexes; %s') % warning) + for form in formset.forms: if form.cleaned_data['update']: metadata_type = get_object_or_404(MetadataType, pk=form.cleaned_data['id']) @@ -221,7 +220,7 @@ def metadata_remove(request, document_id=None, document_id_list=None): warnings = update_indexes(document) if warnings and (request.user.is_staff or request.user.is_superuser): for warning in warnings: - messages.warning(request, _(u'Error updating document indexes; %s') % warning) + messages.warning(request, _(u'Error updating document indexes; %s') % warning) else: messages.success(request, _(u'Document indexes updated successfully.')) @@ -229,7 +228,7 @@ def metadata_remove(request, document_id=None, document_id_list=None): return HttpResponseRedirect(document.get_absolute_url()) elif len(documents) > 1: return HttpResponseRedirect(reverse('document_list_recent')) - + context = { 'form_display_mode_table': True, 'form': formset, diff --git a/apps/ocr/tasks.py b/apps/ocr/tasks.py index 553c0737da..54fb0df20d 100644 --- a/apps/ocr/tasks.py +++ b/apps/ocr/tasks.py @@ -28,7 +28,7 @@ if CACHE_URI: cache_backend = get_cache(CACHE_URI) except ImportError: # TODO: display or log error - cache_backend = None + cache_backend = None else: cache_backend = None @@ -95,7 +95,7 @@ def task_process_document_queues(): # reset_orphans() # Causes problems with big clusters increased latency - # Disabled until better solution + # Disabled until better solution q_pending = Q(state=QUEUEDOCUMENT_STATE_PENDING) q_delayed = Q(delay=True) q_delay_interval = Q(datetime_submitted__lt=datetime.now() - timedelta(seconds=REPLICATION_DELAY)) diff --git a/apps/permissions/models.py b/apps/permissions/models.py index 6792bf36ed..1facbe2b21 100644 --- a/apps/permissions/models.py +++ b/apps/permissions/models.py @@ -26,10 +26,10 @@ class Permission(models.Model): def __unicode__(self): return self.label - + def get_holders(self): return [holder.holder_object for holder in self.permissionholder_set.all()] - + def has_permission(self, requester): if isinstance(requester, User): if requester.is_superuser or requester.is_staff: @@ -38,8 +38,8 @@ class Permission(models.Model): # Request is one of the permission's holders? if requester in self.get_holders(): return True - - # If not check if the requesters memberships objects is one of + + # If not check if the requesters memberships objects is one of # the permission's holder? roles = RoleMember.objects.get_roles_for_member(requester) @@ -47,7 +47,7 @@ class Permission(models.Model): groups = requester.groups.all() else: groups = [] - + for membership in list(set(roles) | set(groups)): if self.has_permission(membership): return True diff --git a/apps/permissions/views.py b/apps/permissions/views.py index ffaca0d0d6..1c5338fd7d 100644 --- a/apps/permissions/views.py +++ b/apps/permissions/views.py @@ -191,19 +191,19 @@ def add_role_member(role, selection): new_member, created = RoleMember.objects.get_or_create(role=role, member_type=ct, member_id=pk) if not created: raise Exception - - + + def remove_role_member(role, selection): model, pk = selection.split(u',') ct = ContentType.objects.get(model=model) member = RoleMember.objects.get(role=role, member_type=ct, member_id=pk) member.delete() - + def role_members(request, role_id): check_permissions(request.user, 'permissions', [PERMISSION_ROLE_EDIT]) role = get_object_or_404(Role, pk=role_id) - + return assign_remove( request, left_list=lambda: generate_choices_w_labels(get_non_role_members(role)), diff --git a/apps/smart_settings/api.py b/apps/smart_settings/api.py index e2e5063d87..51ff694320 100644 --- a/apps/smart_settings/api.py +++ b/apps/smart_settings/api.py @@ -7,11 +7,11 @@ settings = {} def register_setting(namespace, module, name, global_name, default, exists=False, description=u'', hidden=False): # Create namespace if it doesn't exists settings.setdefault(namespace, []) - + # If passed a string and not a module, import it if isinstance(module, basestring): module = import_module(module) - + setting = { 'module': module, 'name': name, @@ -21,14 +21,14 @@ def register_setting(namespace, module, name, global_name, default, exists=False 'default': default, 'hidden': hidden, } - + # Avoid multiple appends if setting not in settings[namespace]: settings[namespace].append(setting) - + # Get the global value value = getattr(django_settings, global_name, default) - + # Create the local entity setattr(module, name, value) return value diff --git a/apps/user_management/__init__.py b/apps/user_management/__init__.py index b95089df2c..c399227e8f 100644 --- a/apps/user_management/__init__.py +++ b/apps/user_management/__init__.py @@ -24,7 +24,7 @@ register_permissions('user_management', [ {'name': PERMISSION_GROUP_CREATE, 'label': _(u'Create new groups')}, {'name': PERMISSION_GROUP_EDIT, 'label': _(u'Edit existing groups')}, {'name': PERMISSION_GROUP_VIEW, 'label': _(u'View existing groups')}, - {'name': PERMISSION_GROUP_DELETE, 'label': _(u'Delete existing groups')}, + {'name': PERMISSION_GROUP_DELETE, 'label': _(u'Delete existing groups')}, ]) user_list = {'text': _(u'user list'), 'view': 'user_list', 'famfam': 'user', 'permissions': {'namespace': 'user_management', 'permissions': [PERMISSION_USER_VIEW]}} @@ -43,9 +43,9 @@ group_multiple_delete = {u'text': _('delete'), 'view': 'group_multiple_delete', group_members = {'text': _(u'members'), 'view': 'group_members', 'args': 'object.id', 'famfam': 'group_link', 'permissions': {'namespace': 'user_management', 'permissions': [PERMISSION_GROUP_EDIT]}} register_links(User, [user_edit, user_set_password, user_delete]) -register_links(['user_multiple_set_password', 'user_set_password', 'user_multiple_delete', 'user_delete', 'user_edit', 'user_list','user_add'], [user_add, user_list], menu_name=u'sidebar') +register_links(['user_multiple_set_password', 'user_set_password', 'user_multiple_delete', 'user_delete', 'user_edit', 'user_list', 'user_add'], [user_add, user_list], menu_name=u'sidebar') register_multi_item_links(['user_list'], [user_multiple_set_password, user_multiple_delete]) register_links(Group, [group_edit, group_members, group_delete]) -register_links(['group_multiple_delete', 'group_delete', 'group_edit', 'group_list','group_add', 'group_members'], [group_add, group_list], menu_name=u'sidebar') +register_links(['group_multiple_delete', 'group_delete', 'group_edit', 'group_list', 'group_add', 'group_members'], [group_add, group_list], menu_name=u'sidebar') register_multi_item_links(['group_list'], [group_multiple_delete]) diff --git a/apps/user_management/urls.py b/apps/user_management/urls.py index 163b5c264c..4343e2d47f 100644 --- a/apps/user_management/urls.py +++ b/apps/user_management/urls.py @@ -8,7 +8,7 @@ urlpatterns = patterns('user_management.views', url(r'^user/multiple/delete/$', 'user_multiple_delete', (), 'user_multiple_delete'), url(r'^user/(?P\d+)/set_password/$', 'user_set_password', (), 'user_set_password'), url(r'^user/multiple/set_password/$', 'user_multiple_set_password', (), 'user_multiple_set_password'), - + url(r'^group/list/$', 'group_list', (), 'group_list'), url(r'^group/add/$', 'group_add', (), 'group_add'), url(r'^group/(?P\d+)/edit/$', 'group_edit', (), 'group_edit'), diff --git a/apps/user_management/views.py b/apps/user_management/views.py index 98312f1e36..aad76493ec 100644 --- a/apps/user_management/views.py +++ b/apps/user_management/views.py @@ -6,7 +6,6 @@ from django.contrib import messages from django.views.generic.list_detail import object_list from django.core.urlresolvers import reverse from django.contrib.auth.models import User, Group -from django.contrib.contenttypes.models import ContentType from permissions.api import check_permissions from common.utils import generate_choices_w_labels, two_state_template @@ -38,7 +37,8 @@ def user_list(request): { 'name': _(u'email'), 'attribute': 'email' - }, { + }, + { 'name': _(u'active'), 'attribute': lambda x: two_state_template(x.is_active), } @@ -56,7 +56,7 @@ def user_edit(request, user_id): if user.is_superuser or user.is_staff: messages.error(request, _(u'Super user and staff user editing is not allowed, use the admin interface for these cases.')) return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) - + if request.method == 'POST': form = UserForm(instance=user, data=request.POST) if form.is_valid(): @@ -145,8 +145,8 @@ def user_multiple_delete(request): return user_delete( request, user_id_list=request.GET.get('id_list', []) ) - - + + def user_set_password(request, user_id=None, user_id_list=None): check_permissions(request.user, 'user_management', [PERMISSION_USER_EDIT]) post_action_redirect = None @@ -181,7 +181,7 @@ def user_set_password(request, user_id=None, user_id_list=None): except Exception, e: messages.error(request, _(u'Error reseting password for user "%(user)s": %(error)s') % { 'user': user, 'error': e - }) + }) return HttpResponseRedirect(next) else: @@ -198,7 +198,7 @@ def user_set_password(request, user_id=None, user_id_list=None): context['title'] = _(u'Reseting password for user: %s') % ', '.join([unicode(d) for d in users]) elif len(users) > 1: context['title'] = _(u'Reseting password for users: %s') % ', '.join([unicode(d) for d in users]) - + return render_to_response('generic_form.html', context, context_instance=RequestContext(request)) @@ -207,7 +207,7 @@ def user_multiple_set_password(request): return user_set_password( request, user_id_list=request.GET.get('id_list', []) ) - + def group_list(request): check_permissions(request.user, 'user_management', [PERMISSION_GROUP_VIEW]) @@ -319,7 +319,7 @@ def group_multiple_delete(request): return group_delete( request, group_id_list=request.GET.get('id_list', []) ) - + def get_group_members(group): return group.user_set.all() @@ -332,12 +332,12 @@ def get_non_group_members(group): def group_members(request, group_id): check_permissions(request.user, 'user_management', [PERMISSION_GROUP_EDIT]) group = get_object_or_404(Group, pk=group_id) - + return assign_remove( request, left_list=lambda: generate_choices_w_labels(get_non_group_members(group), display_object_type=False), right_list=lambda: generate_choices_w_labels(get_group_members(group), display_object_type=False), - add_method=lambda x: group.user_set.add(x), + add_method=lambda x: group.user_set.add(x), remove_method=lambda x: group.user_set.remove(x), left_list_title=_(u'non members of group: %s') % group, right_list_title=_(u'members of group: %s') % group,