diff --git a/apps/documents/views.py b/apps/documents/views.py index d90a7ebd73..a3c3630281 100755 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -701,28 +701,38 @@ def document_find_duplicates(request, document_id): raise Http404(e) document = get_object_or_404(Document, pk=document_id) - return _find_duplicate_list(request, [document]) + return _find_duplicate_list(request, [document], include_source=True, confirmation=False) -def _find_duplicate_list(request, source_document_list=Document.objects.all(), include_source=False): +def _find_duplicate_list(request, source_document_list=Document.objects.all(), include_source=False, confirmation=True): permissions = [PERMISSION_DOCUMENT_VIEW] try: check_permissions(request.user, 'documents', permissions) except Unauthorized, e: raise Http404(e) - - duplicated = [] - for document in source_document_list: - results = Document.objects.filter(checksum=document.checksum) - if not include_source: - results = results.exclude(id=document.id) - duplicated.extend(results) + previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', None))) + + if confirmation and request.method != 'POST': + return render_to_response('generic_confirm.html', { + #'title':_(u'dupli'), + 'previous':previous, + 'message':_(u'On large databases this operation may take some time to execute.'), + }, context_instance=RequestContext(request)) + else: + duplicated = [] + for document in source_document_list: + if document not in duplicated: + results = Document.objects.filter(checksum=document.checksum).exclude(id__in=[d.id for d in duplicated]).exclude(id=document.id) + duplicated.extend(results) - return render_to_response('generic_list.html', { - 'object_list':duplicated, - 'title':_(u'duplicated documents'), - }, context_instance=RequestContext(request)) + if include_source: + duplicated.extend(source_document_list) + + return render_to_response('generic_list.html', { + 'object_list':duplicated, + 'title':_(u'duplicated documents'), + }, context_instance=RequestContext(request)) def document_find_all_duplicates(request): @@ -732,4 +742,4 @@ def document_find_all_duplicates(request): except Unauthorized, e: raise Http404(e) - return _find_duplicate_list(request, include_source=True) + return _find_duplicate_list(request, include_source=False) diff --git a/apps/main/__init__.py b/apps/main/__init__.py index 28b2dfc6a8..c071262148 100755 --- a/apps/main/__init__.py +++ b/apps/main/__init__.py @@ -12,7 +12,7 @@ check_settings = {'text':_(u'settings'), 'view':'check_settings', 'famfam':'cog' register_menu([ {'text':_(u'home'), 'view':'home', 'famfam':'house', 'position':0}, - {'text':_(u'tools'), 'view':'document_find_all_duplicates', 'links': [ + {'text':_(u'tools'), 'view':'tools_menu', 'links': [ document_find_all_duplicates, ],'famfam':'wrench', 'name':'tools','position':7}, diff --git a/apps/main/urls.py b/apps/main/urls.py index a129934103..8d0d3b631a 100755 --- a/apps/main/urls.py +++ b/apps/main/urls.py @@ -3,5 +3,6 @@ from django.conf.urls.defaults import * urlpatterns = patterns('main.views', url(r'^$', 'home', (), 'home'), - url(r'^check_settings/$', 'check_settings', (), 'check_settings') + url(r'^check_settings/$', 'check_settings', (), 'check_settings'), + url(r'^tools_menu/$', 'blank_menu', (), 'tools_menu') ) diff --git a/apps/main/views.py b/apps/main/views.py index ea80f0ff62..efeb997b0e 100755 --- a/apps/main/views.py +++ b/apps/main/views.py @@ -64,8 +64,8 @@ def check_settings(request): 'hide_object':True, 'extra_columns':[ {'name':_(u'name'), 'attribute':'name'}, - {'name':_(u'value'), 'attribute': lambda x: return_type(x['value'])}, - {'name':_(u'exists'), 'attribute':lambda x: exists(x['value']) if 'exists' in x else ''}, + {'name':_(u'value'), 'attribute': lambda x: _return_type(x['value'])}, + {'name':_(u'exists'), 'attribute':lambda x: _exists(x['value']) if 'exists' in x else ''}, ] } @@ -73,7 +73,7 @@ def check_settings(request): context_instance=RequestContext(request)) -def return_type(value): +def _return_type(value): if isinstance(value, types.FunctionType): return _(u'function found') elif isinstance(value, types.ClassType): @@ -85,8 +85,16 @@ def return_type(value): else: return value -def exists(path): +def _exists(path): try: return os.path.exists(path) except Exception, exc: return exc + + +def blank_menu(request): + return render_to_response('generic_template.html', { + 'title':_(u'Tools menu'), + 'content':_(u'"Find all duplicates": Search all the documents\' checksums and return a list of the exact matches.') + }, + context_instance=RequestContext(request))