2015-10-15 15:20:52 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
from aldryn_search.helpers import get_plugin_index_data
|
|
|
|
from aldryn_search.utils import get_index_base, strip_tags
|
2015-10-20 17:52:42 +00:00
|
|
|
from django.utils.encoding import force_text
|
2015-10-15 20:29:32 +00:00
|
|
|
from haystack import indexes
|
2016-07-12 23:12:25 +00:00
|
|
|
from parler.utils.context import switch_language
|
2015-10-15 20:29:32 +00:00
|
|
|
|
2015-10-15 15:20:52 +00:00
|
|
|
from .models import Post
|
|
|
|
from .settings import get_setting
|
|
|
|
|
|
|
|
|
|
|
|
class PostIndex(get_index_base()):
|
|
|
|
haystack_use_for_indexing = get_setting('ENABLE_SEARCH')
|
|
|
|
|
|
|
|
index_title = True
|
|
|
|
|
2015-10-16 10:54:42 +00:00
|
|
|
author = indexes.CharField(indexed=True, model_attr='get_author')
|
|
|
|
keywords = indexes.CharField(null=True)
|
2016-02-15 16:06:04 +00:00
|
|
|
tags = indexes.CharField(null=True, model_attr='get_tags')
|
2015-10-16 10:54:42 +00:00
|
|
|
post_text = indexes.CharField(null=True)
|
|
|
|
|
2015-10-15 15:20:52 +00:00
|
|
|
def get_title(self, post):
|
2016-02-19 11:31:11 +00:00
|
|
|
return post.get_title()
|
2015-10-15 15:20:52 +00:00
|
|
|
|
|
|
|
def get_description(self, post):
|
2015-10-15 20:29:32 +00:00
|
|
|
return post.get_description()
|
|
|
|
|
|
|
|
def prepare_pub_date(self, post):
|
2016-02-15 16:06:04 +00:00
|
|
|
return post.date_published
|
2015-10-15 15:20:52 +00:00
|
|
|
|
|
|
|
def index_queryset(self, using=None):
|
|
|
|
self._get_backend(using)
|
|
|
|
language = self.get_current_language(using)
|
|
|
|
filter_kwargs = self.get_index_kwargs(language)
|
|
|
|
qs = self.get_index_queryset(language)
|
|
|
|
if filter_kwargs:
|
|
|
|
return qs.translated(language, **filter_kwargs)
|
|
|
|
return qs
|
|
|
|
|
|
|
|
def get_index_queryset(self, language):
|
|
|
|
return self.get_model().objects.published().active_translations(
|
|
|
|
language_code=language)
|
|
|
|
|
|
|
|
def get_model(self):
|
|
|
|
return Post
|
|
|
|
|
|
|
|
def get_search_data(self, post, language, request):
|
2016-07-12 23:12:25 +00:00
|
|
|
with switch_language(post, language):
|
|
|
|
description = post.get_description()
|
|
|
|
abstract = strip_tags(post.safe_translation_getter('abstract', default=''))
|
|
|
|
keywords = post.get_keywords()
|
2016-02-15 16:06:04 +00:00
|
|
|
|
2016-07-12 23:12:25 +00:00
|
|
|
text_bits = []
|
|
|
|
if abstract:
|
|
|
|
text_bits.append(abstract)
|
|
|
|
if description:
|
|
|
|
text_bits.append(description)
|
|
|
|
if keywords:
|
|
|
|
text_bits.append(' '.join(keywords))
|
|
|
|
self.prepared_data['keywords'] = ','.join(keywords)
|
|
|
|
for category in post.categories.all():
|
|
|
|
text_bits.append(
|
|
|
|
force_text(category.safe_translation_getter('name')))
|
|
|
|
for tag in post.tags.all():
|
|
|
|
text_bits.append(force_text(tag.name))
|
2016-02-15 16:06:04 +00:00
|
|
|
|
2016-07-12 23:12:25 +00:00
|
|
|
if get_setting('USE_PLACEHOLDER'):
|
|
|
|
plugins = post.content.cmsplugin_set.filter(language=language)
|
|
|
|
content_bits = []
|
|
|
|
for base_plugin in plugins:
|
|
|
|
content = get_plugin_index_data(base_plugin, request)
|
|
|
|
content_bits.append(' '.join(content))
|
|
|
|
post_text = ' '.join(content_bits)
|
|
|
|
else:
|
|
|
|
post_text = post.safe_translation_getter('post_text')
|
|
|
|
if post_text:
|
|
|
|
post_text = strip_tags(post_text)
|
|
|
|
self.prepared_data['post_text'] = post_text
|
|
|
|
text_bits.append(post_text)
|
2015-10-16 10:54:42 +00:00
|
|
|
|
2016-07-12 23:12:25 +00:00
|
|
|
return ' '.join(text_bits)
|