diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py
index 959b09c86f..5ff5a84c9a 100644
--- a/apps/documents/__init__.py
+++ b/apps/documents/__init__.py
@@ -6,7 +6,7 @@ from common.utils import validate_path, encapsulate
from navigation.api import register_links, register_top_menu, \
register_model_list_columns, register_multi_item_links, \
register_sidebar_template
-from main.api import register_diagnostic, register_maintenance
+from main.api import register_diagnostic, register_maintenance_links
from permissions.api import register_permission, set_namespace_title
from tags.widgets import get_tags_inline_widget_simple
from history.api import register_history_type
@@ -29,7 +29,6 @@ from documents.conf.settings import ZOOM_MIN_LEVEL
from documents.conf import settings as document_settings
from documents.widgets import document_thumbnail
-
# Document page links expressions
def is_first_page(context):
return context['page'].page_number <= 1
@@ -81,6 +80,7 @@ document_preview = {'text': _(u'preview'), 'class': 'fancybox', 'view': 'documen
document_download = {'text': _(u'download'), 'view': 'document_download', 'args': 'object.id', '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_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]}
document_print = {'text': _(u'print'), 'view': 'document_print', 'args': 'object.id', 'famfam': 'printer', 'permissions': [PERMISSION_DOCUMENT_VIEW]}
@@ -158,17 +158,16 @@ register_links(['document_page_transformation_edit', 'document_page_transformati
register_diagnostic('documents', _(u'Documents'), document_missing_list)
-register_maintenance(document_find_all_duplicates, namespace='documents', title=_(u'documents'))
+register_maintenance_links([document_find_all_duplicates, document_update_page_count], namespace='documents', title=_(u'documents'))
-
-def document_exists(document):
- try:
- if document.exists():
- return u''
- else:
- return u''
- except Exception, exc:
- return exc
+#def document_exists(document):
+# try:
+# if document.exists():
+# return u''
+# else:
+# return u''
+# except Exception, exc:
+# return exc
register_model_list_columns(Document, [
{'name':_(u'thumbnail'), 'attribute':
diff --git a/apps/documents/urls.py b/apps/documents/urls.py
index 28e88e3e34..c20d04c47a 100644
--- a/apps/documents/urls.py
+++ b/apps/documents/urls.py
@@ -32,6 +32,7 @@ urlpatterns = patterns('documents.views',
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'),
+ url(r'^maintenance/update_page_count/$', 'document_update_page_count', (), 'document_update_page_count'),
url(r'^page/(?P\d+)/$', 'document_page_view', (), 'document_page_view'),
url(r'^page/(?P\d+)/text/$', 'document_page_text', (), 'document_page_text'),
diff --git a/apps/documents/views.py b/apps/documents/views.py
index a8b8ee5b01..b4251dc1b0 100644
--- a/apps/documents/views.py
+++ b/apps/documents/views.py
@@ -19,6 +19,7 @@ from common.literals import PAGE_SIZE_DIMENSIONS, \
from common.conf.settings import DEFAULT_PAPER_SIZE
from converter.literals import DEFAULT_ZOOM_LEVEL, DEFAULT_ROTATION, \
DEFAULT_PAGE_NUMBER
+from converter.office_converter import OfficeConverter
from filetransfers.api import serve_file
from metadata.forms import MetadataFormSet, MetadataSelectionForm
from navigation.utils import resolve_to_name
@@ -40,7 +41,7 @@ from documents.literals import PERMISSION_DOCUMENT_CREATE, \
PERMISSION_DOCUMENT_VIEW, \
PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_DOWNLOAD, \
PERMISSION_DOCUMENT_TRANSFORM, \
- PERMISSION_DOCUMENT_EDIT
+ PERMISSION_DOCUMENT_EDIT, PERMISSION_DOCUMENT_TOOLS
from documents.literals import HISTORY_DOCUMENT_CREATED, \
HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED
@@ -117,14 +118,14 @@ def document_view(request, document_id, advanced=False):
{'label': _(u'File extension'), 'field': 'file_extension'},
{'label': _(u'File mimetype'), 'field': 'file_mimetype'},
{'label': _(u'File mime encoding'), 'field': 'file_mime_encoding'},
- {'label': _(u'File size'), 'field':lambda x: pretty_size(x.file.storage.size(x.file.path)) if x.exists() else '-'},
+ {'label': _(u'File size'), 'field':lambda x: pretty_size(x.size) if x.size else '-'},
{'label': _(u'Exists in storage'), 'field': 'exists'},
{'label': _(u'File path in storage'), 'field': 'file'},
{'label': _(u'Date added'), 'field':lambda x: x.date_added.date()},
{'label': _(u'Time added'), 'field':lambda x: unicode(x.date_added.time()).split('.')[0]},
{'label': _(u'Checksum'), 'field': 'checksum'},
{'label': _(u'UUID'), 'field': 'uuid'},
- {'label': _(u'Pages'), 'field': lambda x: x.documentpage_set.count()},
+ {'label': _(u'Pages'), 'field': 'page_count'},
])
subtemplates_list.append(
@@ -471,6 +472,37 @@ def document_find_all_duplicates(request):
return _find_duplicate_list(request, include_source=True)
+def document_update_page_count(request):
+ check_permissions(request.user, [PERMISSION_DOCUMENT_TOOLS])
+
+ previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/')))
+ office_converter = OfficeConverter()
+ qs = Document.objects.exclude(file_extension__iendswith='dxf').filter(file_mimetype__in=office_converter.mimetypes())
+
+ if request.method == 'POST':
+ updated = 0
+ processed = 0
+ for document in qs:
+ old_page_count = document.page_count
+ document.update_page_count()
+ processed += 1
+ if old_page_count != document.page_count:
+ updated += 1
+
+ messages.success(request, _(u'Page count update complete. Documents processed: %(total)d, documents with changed page count: %(change)d') % {
+ 'total': processed,
+ 'change': updated
+ })
+ return HttpResponseRedirect(previous)
+
+ return render_to_response('generic_confirm.html', {
+ 'previous': previous,
+ 'title': _(u'Are you sure you wish to update the page count for the office documents (%d)?') % qs.count(),
+ 'message': _(u'On large databases this operation may take some time to execute.'),
+ 'form_icon': u'page_white_csharp.png',
+ }, context_instance=RequestContext(request))
+
+
def document_clear_transformations(request, document_id=None, document_id_list=None):
check_permissions(request.user, [PERMISSION_DOCUMENT_TRANSFORM])