Initial commit to support per page search.
This commit is contained in:
@@ -68,13 +68,14 @@ from .permissions import (
|
||||
permission_document_trash, permission_document_version_revert,
|
||||
permission_document_view
|
||||
)
|
||||
from .search import document_search, document_page_search
|
||||
from .settings import setting_thumbnail_size
|
||||
from .statistics import (
|
||||
new_documents_per_month, new_document_pages_per_month,
|
||||
new_document_versions_per_month, total_document_per_month,
|
||||
total_document_page_per_month, total_document_version_per_month
|
||||
)
|
||||
from .widgets import document_thumbnail
|
||||
from .widgets import document_html_widget, document_thumbnail
|
||||
|
||||
|
||||
class DocumentsApp(MayanAppConfig):
|
||||
@@ -90,6 +91,7 @@ class DocumentsApp(MayanAppConfig):
|
||||
DeletedDocument = self.get_model('DeletedDocument')
|
||||
Document = self.get_model('Document')
|
||||
DocumentPage = self.get_model('DocumentPage')
|
||||
DocumentPageResult = self.get_model('DocumentPageResult')
|
||||
DocumentType = self.get_model('DocumentType')
|
||||
DocumentTypeFilename = self.get_model('DocumentTypeFilename')
|
||||
DocumentVersion = self.get_model('DocumentVersion')
|
||||
@@ -159,6 +161,36 @@ class DocumentsApp(MayanAppConfig):
|
||||
source=Document, label=_('Type'), attribute='document_type'
|
||||
)
|
||||
|
||||
SourceColumn(
|
||||
source=DocumentPage, label=_('Thumbnail'),
|
||||
func=lambda context: document_html_widget(
|
||||
document_page=context['object'],
|
||||
click_view='documents:document_display',
|
||||
click_view_arguments=(context['object'].document.pk,),
|
||||
gallery_name='documents:document_page_list',
|
||||
preview_click_view='documents:document_page_view',
|
||||
size=setting_thumbnail_size.value,
|
||||
title=unicode(context['object']),
|
||||
)
|
||||
)
|
||||
|
||||
SourceColumn(
|
||||
source=DocumentPageResult, label=_('Thumbnail'),
|
||||
func=lambda context: document_html_widget(
|
||||
document_page=context['object'],
|
||||
click_view='documents:document_display',
|
||||
click_view_arguments=(context['object'].document.pk,),
|
||||
gallery_name='documents:document_page_list',
|
||||
preview_click_view='documents:document_page_view',
|
||||
size=setting_thumbnail_size.value,
|
||||
title=unicode(context['object']),
|
||||
)
|
||||
)
|
||||
SourceColumn(
|
||||
source=DocumentPageResult, label=_('Type'),
|
||||
attribute='document_version.document.document_type'
|
||||
)
|
||||
|
||||
SourceColumn(
|
||||
source=DocumentType, label=_('Documents'),
|
||||
func=lambda context: context['object'].get_document_count(
|
||||
|
||||
@@ -774,6 +774,14 @@ class DocumentPage(models.Model):
|
||||
return '{}-{}'.format(self.document_version.uuid, self.pk)
|
||||
|
||||
|
||||
class DocumentPageResult(DocumentPage):
|
||||
class Meta:
|
||||
ordering = ('document_version__document', 'page_number')
|
||||
proxy = True
|
||||
verbose_name = _('Document page')
|
||||
verbose_name_plural = _('Document pages')
|
||||
|
||||
|
||||
class NewVersionBlock(models.Model):
|
||||
document = models.ForeignKey(Document, verbose_name=_('Document'))
|
||||
|
||||
|
||||
@@ -7,7 +7,8 @@ from dynamic_search.classes import SearchModel
|
||||
from .permissions import permission_document_view
|
||||
|
||||
document_search = SearchModel(
|
||||
'documents', 'Document', permission=permission_document_view,
|
||||
app_label='documents', model_name='Document',
|
||||
permission=permission_document_view,
|
||||
serializer_string='documents.serializers.DocumentSerializer'
|
||||
)
|
||||
|
||||
@@ -19,3 +20,24 @@ document_search.add_model_field(
|
||||
)
|
||||
document_search.add_model_field(field='label', label=_('Label'))
|
||||
document_search.add_model_field(field='description', label=_('Description'))
|
||||
|
||||
document_page_search = SearchModel(
|
||||
app_label='documents', model_name='DocumentPageResult',
|
||||
permission=permission_document_view,
|
||||
serializer_string='documents.serializers.DocumentPageSerializer'
|
||||
)
|
||||
|
||||
document_page_search.add_model_field(
|
||||
field='document_version__document__document_type__label',
|
||||
label=_('Document type')
|
||||
)
|
||||
document_page_search.add_model_field(
|
||||
field='document_version__document__versions__mimetype',
|
||||
label=_('MIME type')
|
||||
)
|
||||
document_page_search.add_model_field(
|
||||
field='document_version__document__label', label=_('Label')
|
||||
)
|
||||
document_page_search.add_model_field(
|
||||
field='document_version__document__description', label=_('Description')
|
||||
)
|
||||
|
||||
@@ -83,7 +83,7 @@ class DocumentPagesCarouselWidget(forms.widgets.Widget):
|
||||
|
||||
def document_thumbnail(document, **kwargs):
|
||||
return document_html_widget(
|
||||
document.latest_version.pages.first(),
|
||||
document_page=document.latest_version.pages.first(),
|
||||
click_view='documents:document_display', **kwargs
|
||||
)
|
||||
|
||||
@@ -94,7 +94,7 @@ def document_link(document):
|
||||
)
|
||||
|
||||
|
||||
def document_html_widget(document_page, click_view=None, click_view_arguments=None, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION, gallery_name=None, fancybox_class='fancybox', image_class='lazy-load', title=None, size=setting_thumbnail_size.value, nolazyload=False, post_load_class=None, disable_title_link=False):
|
||||
def document_html_widget(document_page, click_view=None, click_view_arguments=None, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION, gallery_name=None, fancybox_class='fancybox', image_class='lazy-load', title=None, size=setting_thumbnail_size.value, nolazyload=False, post_load_class=None, disable_title_link=False, preview_click_view=None):
|
||||
result = []
|
||||
|
||||
alt_text = _('Document page image')
|
||||
@@ -110,6 +110,7 @@ def document_html_widget(document_page, click_view=None, click_view_arguments=No
|
||||
'zoom': zoom,
|
||||
'rotation': rotation,
|
||||
'size': size,
|
||||
'page': document_page.page_number
|
||||
}
|
||||
|
||||
if gallery_name:
|
||||
@@ -132,7 +133,13 @@ def document_html_widget(document_page, click_view=None, click_view_arguments=No
|
||||
|
||||
if title:
|
||||
if not disable_title_link:
|
||||
preview_click_link = document.get_absolute_url()
|
||||
if not preview_click_view:
|
||||
preview_click_link = document.get_absolute_url()
|
||||
else:
|
||||
preview_click_link = reverse(
|
||||
preview_click_view, args=(document_page.pk,)
|
||||
)
|
||||
|
||||
title_template = 'data-caption="<a class=\'a-caption\' href=\'{url}\'>{title}</a>"'.format(
|
||||
title=strip_tags(title), url=preview_click_link or '#'
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user