diff --git a/apps/main/__init__.py b/apps/main/__init__.py index 3c6f626777..7244f7b71b 100644 --- a/apps/main/__init__.py +++ b/apps/main/__init__.py @@ -7,6 +7,7 @@ from navigation.api import register_links from history import history_list from converter import formats_list from documents import document_type_views +from metadata import setup_metadata_type_list, metadata_setup_view from main.conf.settings import SIDE_BAR_SEARCH @@ -45,11 +46,12 @@ register_top_menu('about', link={'text': _(u'about'), 'view': 'about', 'famfam': register_links(['tools_menu', 'statistics', 'history_list', 'history_view', 'formats_list'], [tools_menu, statistics, history_list, formats_list, sentry], menu_name='secondary_menu') -tool_links = [check_settings, role_list, user_list, group_list, document_types, admin_site] -register_links(['setting_list'], tool_links, menu_name='secondary_menu') -register_links(permission_views, tool_links, menu_name='secondary_menu') -register_links(user_management_views, tool_links, menu_name='secondary_menu') -register_links(document_type_views, tool_links, menu_name='secondary_menu') +setup_links = [check_settings, role_list, user_list, group_list, document_types, setup_metadata_type_list, admin_site] +register_links(['setting_list'], setup_links, menu_name='secondary_menu') +register_links(permission_views, setup_links, menu_name='secondary_menu') +register_links(user_management_views, setup_links, menu_name='secondary_menu') +register_links(document_type_views, setup_links, menu_name='secondary_menu') +register_links(metadata_setup_view, setup_links, menu_name='secondary_menu') def get_version(): diff --git a/apps/metadata/__init__.py b/apps/metadata/__init__.py index 22ccb4432a..6ed08e848c 100644 --- a/apps/metadata/__init__.py +++ b/apps/metadata/__init__.py @@ -3,6 +3,7 @@ from django.utils.translation import ugettext_lazy as _ from navigation.api import register_links, register_multi_item_links from permissions.api import register_permission, set_namespace_title from documents.models import Document +from metadata.models import MetadataType PERMISSION_METADATA_DOCUMENT_EDIT = {'namespace': 'metadata', 'name': u'metadata_document_edit', 'label': _(u'Edit a document\'s metadata')} PERMISSION_METADATA_DOCUMENT_ADD = {'namespace': 'metadata', 'name': u'metadata_document_add', 'label': _(u'Add metadata to a document')} @@ -20,5 +21,16 @@ metadata_multiple_add = {'text': _(u'add metadata'), 'view': 'metadata_multiple_ metadata_remove = {'text': _(u'remove metadata'), 'view': 'metadata_remove', 'args': 'object.id', 'famfam': 'xhtml_delete', 'permissions': [PERMISSION_METADATA_DOCUMENT_REMOVE]} metadata_multiple_remove = {'text': _(u'remove metadata'), 'view': 'metadata_multiple_remove', 'famfam': 'xhtml_delete', 'permissions': [PERMISSION_METADATA_DOCUMENT_REMOVE]} +setup_metadata_type_list = {'text': _(u'metadata types'), 'view': 'setup_metadata_type_list', 'famfam': 'xhtml_go'}#, 'permissions': [PERMISSION_METADATA_DOCUMENT_EDIT]} +setup_metadata_type_edit = {'text': _(u'edit'), 'view': 'setup_metadata_type_edit', 'args': 'object.id', 'famfam': 'xhtml'}#, 'permissions': [PERMISSION_METADATA_DOCUMENT_EDIT]} +setup_metadata_type_delete = {'text': _(u'delete'), 'view': 'setup_metadata_type_delete', 'args': 'object.id', 'famfam': 'xhtml_delete'}#, 'permissions': [PERMISSION_METADATA_DOCUMENT_EDIT]} +setup_metadata_type_create = {'text': _(u'create new'), 'view': 'setup_metadata_type_create', 'famfam': 'xhtml_add'}#, 'permissions': [PERMISSION_METADATA_DOCUMENT_EDIT]} + + register_links(Document, [metadata_add, metadata_edit, metadata_remove]) register_multi_item_links(['document_type_document_list', 'search', 'results', 'document_group_view', 'document_list', 'document_list_recent'], [metadata_multiple_add, metadata_multiple_edit, metadata_multiple_remove]) + +register_links(MetadataType, [setup_metadata_type_edit, setup_metadata_type_delete]) +register_links(['setup_metadata_type_delete', 'setup_metadata_type_edit', 'setup_metadata_type_list', 'setup_metadata_type_create'], [setup_metadata_type_create], menu_name='sidebar') + +metadata_setup_view = ['setup_metadata_type_list', 'setup_metadata_type_edit', 'setup_metadata_type_delete', 'setup_metadata_type_create'] diff --git a/apps/metadata/forms.py b/apps/metadata/forms.py index 72ed829f8a..4a44c723a8 100644 --- a/apps/metadata/forms.py +++ b/apps/metadata/forms.py @@ -94,3 +94,8 @@ class MetadataSelectionForm(forms.Form): ) MetadataRemoveFormSet = formset_factory(MetadataRemoveForm, extra=0) + + +class MetadataTypeForm(forms.ModelForm): + class Meta: + model = MetadataType diff --git a/apps/metadata/urls.py b/apps/metadata/urls.py index 3e5e841a3c..3d45d5382a 100644 --- a/apps/metadata/urls.py +++ b/apps/metadata/urls.py @@ -7,4 +7,9 @@ urlpatterns = patterns('metadata.views', url(r'^multiple/add/$', 'metadata_multiple_add', (), 'metadata_multiple_add'), url(r'^(?P\d+)/remove/$', 'metadata_remove', (), 'metadata_remove'), url(r'^multiple/remove/$', 'metadata_multiple_remove', (), 'metadata_multiple_remove'), + + url(r'^setup/type/list/$', 'setup_metadata_type_list', (), 'setup_metadata_type_list'), + url(r'^setup/type/create/$', 'setup_metadata_type_create', (), 'setup_metadata_type_create'), + url(r'^setup/type/(?P\d+)/edit/$', 'setup_metadata_type_edit', (), 'setup_metadata_type_edit'), + url(r'^setup/type/(?P\d+)/delete/$', 'setup_metadata_type_delete', (), 'setup_metadata_type_delete'), ) diff --git a/apps/metadata/views.py b/apps/metadata/views.py index 313f3883cd..167766b88d 100644 --- a/apps/metadata/views.py +++ b/apps/metadata/views.py @@ -13,7 +13,8 @@ from document_indexing.api import update_indexes, delete_indexes from metadata import PERMISSION_METADATA_DOCUMENT_EDIT, \ PERMISSION_METADATA_DOCUMENT_ADD, PERMISSION_METADATA_DOCUMENT_REMOVE -from metadata.forms import MetadataFormSet, AddMetadataForm, MetadataRemoveFormSet +from metadata.forms import MetadataFormSet, AddMetadataForm, \ + MetadataRemoveFormSet, MetadataTypeForm from metadata.api import save_metadata_list from metadata.models import DocumentMetadata, MetadataType @@ -260,3 +261,98 @@ def metadata_remove(request, document_id=None, document_id_list=None): def metadata_multiple_remove(request): return metadata_remove(request, document_id_list=request.GET.get('id_list', [])) + + +def setup_metadata_type_list(request): + #check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW]) + + context = { + 'object_list': MetadataType.objects.all(), + 'title': _(u'metadata types'), + 'hide_link': True, + 'extra_columns': [ + { + 'name': _(u'internal name'), + 'attribute': 'name', + }, + ] + } + + return render_to_response('generic_list.html', context, + context_instance=RequestContext(request)) + + +def setup_metadata_type_edit(request, metadatatype_id): + #check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW]) + metadata_type = get_object_or_404(MetadataType, pk=metadatatype_id) + + if request.method == 'POST': + form = MetadataTypeForm(instance=metadata_type, data=request.POST) + if form.is_valid(): + #folder.title = form.cleaned_data['title'] + try: + form.save() + messages.success(request, _(u'Metadata type edited successfully')) + return HttpResponseRedirect(reverse('setup_metadata_type_list')) + except Exception, e: + messages.error(request, _(u'Error editing metadata type; %s') % e) + pass + else: + form = MetadataTypeForm(instance=metadata_type) + + return render_to_response('generic_form.html', { + 'title': _(u'edit metadata type: %s') % metadata_type, + 'form': form, + 'object': metadata_type, + 'object_name': _(u'metadata type'), + }, + context_instance=RequestContext(request)) + + +def setup_metadata_type_create(request): + if request.method == 'POST': + form = MetadataTypeForm(request.POST) + if form.is_valid(): + form.save() + messages.success(request, _(u'Metadata type created successfully')) + return HttpResponseRedirect(reverse('setup_metadata_type_list')) + else: + form = MetadataTypeForm() + + return render_to_response('generic_form.html', { + 'title': _(u'create metadata type'), + 'form': form, + }, + context_instance=RequestContext(request)) + + +def setup_metadata_type_delete(request, metadatatype_id): + metadata_type = get_object_or_404(MetadataType, pk=metadatatype_id) + + post_action_redirect = reverse('setup_metadata_type_list') + + previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', post_action_redirect))) + next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', post_action_redirect))) + + if request.method == 'POST': + try: + metadata_type.delete() + messages.success(request, _(u'Metadata type: %s deleted successfully.') % metadata_type) + except Exception, e: + messages.error(request, _(u'Folder: %(metadata_type)s delete error: %(error)s') % { + 'metadata_type': metadata_type, 'error': e}) + + return HttpResponseRedirect(next) + + context = { + 'object_name': _(u'metadata type'), + 'delete_view': True, + 'next': next, + 'previous': previous, + 'object': metadata_type, + 'title': _(u'Are you sure you with to delete the metadata type: %s?') % metadata_type, + 'form_icon': u'xhtml_delete.png', + } + + return render_to_response('generic_confirm.html', context, + context_instance=RequestContext(request)) diff --git a/site_media/images/icons/xhtml_delete.png b/site_media/images/icons/xhtml_delete.png new file mode 100644 index 0000000000..eb44af3cba Binary files /dev/null and b/site_media/images/icons/xhtml_delete.png differ