diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index 1a39e01ac8..e6e67f90c8 100644 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -16,15 +16,15 @@ from project_setup.api import register_setup from documents.models import (Document, DocumentPage, DocumentPageTransformation, DocumentType, DocumentTypeFilename, DocumentVersion) -from documents.literals import PERMISSION_DOCUMENT_CREATE, \ - PERMISSION_DOCUMENT_PROPERTIES_EDIT, PERMISSION_DOCUMENT_VIEW, \ - PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_DOWNLOAD, \ - PERMISSION_DOCUMENT_TRANSFORM, PERMISSION_DOCUMENT_TOOLS, \ - PERMISSION_DOCUMENT_EDIT -from documents.literals import PERMISSION_DOCUMENT_TYPE_EDIT, \ - PERMISSION_DOCUMENT_TYPE_DELETE, PERMISSION_DOCUMENT_TYPE_CREATE -from documents.literals import HISTORY_DOCUMENT_CREATED, \ - HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED +from documents.literals import (PERMISSION_DOCUMENT_CREATE, + PERMISSION_DOCUMENT_PROPERTIES_EDIT, PERMISSION_DOCUMENT_VIEW, + PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_DOWNLOAD, + PERMISSION_DOCUMENT_TRANSFORM, PERMISSION_DOCUMENT_TOOLS, + PERMISSION_DOCUMENT_EDIT, PERMISSION_DOCUMENT_VERSION_REVERT) +from documents.literals import (PERMISSION_DOCUMENT_TYPE_EDIT, + PERMISSION_DOCUMENT_TYPE_DELETE, PERMISSION_DOCUMENT_TYPE_CREATE) +from documents.literals import (HISTORY_DOCUMENT_CREATED, + HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED) from documents.conf.settings import ZOOM_MAX_LEVEL from documents.conf.settings import ZOOM_MIN_LEVEL from documents.conf import settings as document_settings @@ -56,6 +56,7 @@ register_permission(PERMISSION_DOCUMENT_DELETE) register_permission(PERMISSION_DOCUMENT_DOWNLOAD) register_permission(PERMISSION_DOCUMENT_TRANSFORM) register_permission(PERMISSION_DOCUMENT_TOOLS) +register_permission(PERMISSION_DOCUMENT_VERSION_REVERT) # Document type permissions set_namespace_title('documents_setup', _(u'Documents setup')) @@ -80,8 +81,8 @@ document_edit = {'text': _(u'edit'), 'view': 'document_edit', 'args': 'object.id document_preview = {'text': _(u'preview'), 'class': 'fancybox', 'view': 'document_preview', 'args': 'object.id', 'famfam': 'magnifier', 'permissions': [PERMISSION_DOCUMENT_VIEW]} document_download = {'text': _(u'download'), 'view': 'document_download', 'args': 'object.id', 'famfam': 'page_save', 'permissions': [PERMISSION_DOCUMENT_DOWNLOAD]} document_version_download = {'text': _(u'download'), 'view': 'document_version_download', 'args': 'object.pk', 'famfam': 'page_save', 'permissions': [PERMISSION_DOCUMENT_DOWNLOAD]} -document_find_duplicates = {'text': _(u'find duplicates'), 'view': 'document_find_duplicates', 'args': 'object.id', 'famfam': 'page_refresh', 'permissions': [PERMISSION_DOCUMENT_VIEW]} -document_find_all_duplicates = {'text': _(u'find all duplicates'), 'view': 'document_find_all_duplicates', 'famfam': 'page_refresh', 'permissions': [PERMISSION_DOCUMENT_VIEW], 'description': _(u'Search all the documents\' checksums and return a list of the exact matches.')} +document_find_duplicates = {'text': _(u'find duplicates'), 'view': 'document_find_duplicates', 'args': 'object.id', 'famfam': 'page_white_copy', 'permissions': [PERMISSION_DOCUMENT_VIEW]} +document_find_all_duplicates = {'text': _(u'find all duplicates'), 'view': 'document_find_all_duplicates', 'famfam': 'page_white_copy', 'permissions': [PERMISSION_DOCUMENT_VIEW], 'description': _(u'Search all the documents\' checksums and return a list of the exact matches.')} document_update_page_count = {'text': _(u'update office documents\' page count'), 'view': 'document_update_page_count', 'famfam': 'page_white_csharp', 'permissions': [PERMISSION_DOCUMENT_TOOLS], 'description': _(u'Update the page count of the office type documents. This is useful when enabling office document support after there were already office type documents in the database.')} document_clear_transformations = {'text': _(u'clear transformations'), 'view': 'document_clear_transformations', 'args': 'object.id', 'famfam': 'page_paintbrush', 'permissions': [PERMISSION_DOCUMENT_TRANSFORM]} document_multiple_clear_transformations = {'text': _(u'clear transformations'), 'view': 'document_multiple_clear_transformations', 'famfam': 'page_paintbrush', 'permissions': [PERMISSION_DOCUMENT_TRANSFORM]} @@ -113,6 +114,7 @@ document_page_view_reset = {'text': _(u'reset view'), 'class': 'no-parent-histor # Document versions document_version_list = {'text': _(u'versions'), 'view': 'document_version_list', 'args': 'object.pk', 'famfam': 'page_world', 'permissions': [PERMISSION_DOCUMENT_VIEW]} +document_version_revert = {'text': _(u'revert'), 'view': 'document_version_revert', 'args': 'object.pk', 'famfam': 'page_refresh', 'permissions': [PERMISSION_DOCUMENT_VERSION_REVERT]} # Document type related links document_type_list = {'text': _(u'document type list'), 'view': 'document_type_list', 'famfam': 'layout', 'permissions': [PERMISSION_DOCUMENT_VIEW]} @@ -141,7 +143,7 @@ register_links(Document, [document_edit, document_print, document_delete, docume register_multi_item_links(['document_find_duplicates', 'folder_view', 'index_instance_list', 'document_type_document_list', 'search', 'results', 'document_group_view', 'document_list', 'document_list_recent'], [document_multiple_clear_transformations, document_multiple_delete]) # Document Version links -register_links(DocumentVersion, [document_version_download]) +register_links(DocumentVersion, [document_version_revert, document_version_download]) secondary_menu_links = [document_list_recent, document_list, document_create_multiple] diff --git a/apps/documents/literals.py b/apps/documents/literals.py index 30b0284f5f..54df1d03d2 100644 --- a/apps/documents/literals.py +++ b/apps/documents/literals.py @@ -13,6 +13,7 @@ PERMISSION_DOCUMENT_DELETE = {'namespace': 'documents', 'name': 'document_delete PERMISSION_DOCUMENT_DOWNLOAD = {'namespace': 'documents', 'name': 'document_download', 'label': _(u'Download documents')} PERMISSION_DOCUMENT_TRANSFORM = {'namespace': 'documents', 'name': 'document_transform', 'label': _(u'Transform documents')} PERMISSION_DOCUMENT_TOOLS = {'namespace': 'documents', 'name': 'document_tools', 'label': _(u'Execute document modifying tools')} +PERMISSION_DOCUMENT_VERSION_REVERT = {'namespace': 'documents', 'name': 'document_version_revert', 'label': _(u'Revert documents to a previous version')} PERMISSION_DOCUMENT_TYPE_EDIT = {'namespace': 'documents_setup', 'name': 'document_type_edit', 'label': _(u'Edit document types')} PERMISSION_DOCUMENT_TYPE_DELETE = {'namespace': 'documents_setup', 'name': 'document_type_delete', 'label': _(u'Delete document types')} diff --git a/apps/documents/static/images/icons/page_white_copy.png b/apps/documents/static/images/icons/page_white_copy.png new file mode 100644 index 0000000000..4c21085e2b Binary files /dev/null and b/apps/documents/static/images/icons/page_white_copy.png differ diff --git a/apps/documents/urls.py b/apps/documents/urls.py index 239ec62df4..14193c1d8a 100644 --- a/apps/documents/urls.py +++ b/apps/documents/urls.py @@ -36,6 +36,7 @@ urlpatterns = patterns('documents.views', url(r'^(?P\d+)/version/all/$', 'document_version_list', (), 'document_version_list'), url(r'^document/version/(?P\d+)/download/$', 'document_download', (), 'document_version_download'), + url(r'^document/version/(?P\d+)/revert/$', 'document_version_revert', (), 'document_version_revert'), url(r'^multiple/clear_transformations/$', 'document_multiple_clear_transformations', (), 'document_multiple_clear_transformations'), url(r'^duplicates/list/$', 'document_find_all_duplicates', (), 'document_find_all_duplicates'), diff --git a/apps/documents/views.py b/apps/documents/views.py index 4b08e9f5ee..2bff281ef9 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -36,14 +36,15 @@ from documents.conf.settings import ROTATION_STEP from documents.conf.settings import PRINT_SIZE from documents.conf.settings import RECENT_COUNT -from documents.literals import PERMISSION_DOCUMENT_CREATE, \ - PERMISSION_DOCUMENT_PROPERTIES_EDIT, \ - PERMISSION_DOCUMENT_VIEW, \ - PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_DOWNLOAD, \ - PERMISSION_DOCUMENT_TRANSFORM, \ - PERMISSION_DOCUMENT_EDIT, PERMISSION_DOCUMENT_TOOLS -from documents.literals import HISTORY_DOCUMENT_CREATED, \ - HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED +from documents.literals import (PERMISSION_DOCUMENT_CREATE, + PERMISSION_DOCUMENT_PROPERTIES_EDIT, + PERMISSION_DOCUMENT_VIEW, + PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_DOWNLOAD, + PERMISSION_DOCUMENT_TRANSFORM, + PERMISSION_DOCUMENT_EDIT, PERMISSION_DOCUMENT_TOOLS, + PERMISSION_DOCUMENT_VERSION_REVERT) +from documents.literals import (HISTORY_DOCUMENT_CREATED, + HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED) from documents.forms import (DocumentTypeSelectForm, DocumentForm_edit, DocumentPropertiesForm, @@ -1188,3 +1189,26 @@ def document_version_list(request, document_pk): return render_to_response('generic_list.html', context, context_instance=RequestContext(request)) + + +def document_version_revert(request, document_version_pk): + check_permissions(request.user, [PERMISSION_DOCUMENT_VERSION_REVERT]) + + previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/'))) + + if request.method == 'POST': + #try: + document_version = get_object_or_404(DocumentVersion, pk=document_version_pk) + document_version.revert() + messages.success(request, _(u'Document version reverted successfully')) + #except Exception, msg: + # messages.error(request, _(u'Error reverting document version; %s') % msg) + + return HttpResponseRedirect(previous) + + return render_to_response('generic_confirm.html', { + 'previous': previous, + 'title': _(u'Are you sure you wish to revert to this version?'), + 'message': _(u'All later version after this one will be deleted too.'), + 'form_icon': u'page_refresh.png', + }, context_instance=RequestContext(request))