Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions castle/cms/indexing/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -42,5 +42,13 @@
<adapter name="last_modified_by" factory=".indexers.last_modified_by" />
<adapter name="image_info" factory=".indexers.image_info" />
<adapter name="has_custom_markup" factory=".indexers.has_custom_markup" />
<adapter name="querylist_searchabletext" factory=".indexers.press_release_body_content" />
<adapter name="querylist_searchabletext" factory=".indexers.file_body_content" />
<adapter name="querylist_searchabletext" factory=".indexers.image_body_content" />
<adapter name="querylist_searchabletext" factory=".indexers.video_body_content" />
<adapter name="querylist_searchabletext" factory=".indexers.audio_body_content" />
<adapter name="querylist_searchabletext" factory=".indexers.story_body_content" />
<adapter name="querylist_searchabletext" factory=".indexers.speech_body_content" />
<adapter name="querylist_searchabletext" factory=".indexers.testimony_body_content" />

</configure>
56 changes: 56 additions & 0 deletions castle/cms/indexing/indexers.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
from AccessControl import Unauthorized
from Acquisition import aq_base, aq_parent
from bs4 import BeautifulSoup
from wildcard.hps.interfaces import IReindexActive
from OFS.interfaces import IItem
from plone import api
from plone.app.uuid.utils import uuidToCatalogBrain as get_brain
from plone.app.contenttypes.interfaces import IFile, IImage
from plone.app.textfield import RichTextValue
from plone.dexterity.interfaces import IDexterityContent
from plone.event.interfaces import IEvent
from plone.indexer.decorator import indexer
Expand All @@ -18,6 +20,12 @@
from castle.cms.interfaces import IHasDefaultImage
from castle.cms.interfaces import IReferenceNamedImage
from castle.cms.interfaces import ITrashed
import logging
from fbigov.contenttypes.interfaces.pressrelease import IPressRelease
from castle.cms.interfaces import IVideo, IAudio
from fbigov.contenttypes.interfaces.speech import ISpeech
from fbigov.contenttypes.interfaces.story import IStory
from fbigov.contenttypes.interfaces.testimony import ITestimony


@indexer(IItem)
Expand Down Expand Up @@ -220,3 +228,51 @@ def self_or_child_has_title_description_and_image(obj):
def has_custom_markup(image):
if image.custom_markup:
return True

# full content query indexers

def get_description(obj, _type):
return obj.Description()

def get_raw_text(obj, _type):
logging.info('setting display_full_content for {} object'.format(_type))
text = getattr(obj, 'text', '')
if text is not None:
if type(text) is RichTextValue:
return text.raw
return text
else:
return ''

@indexer(IPressRelease)
def press_release_body_content(obj):
return get_raw_text(obj, 'Press Release')

@indexer(IFile)
def file_body_content(obj):
return 'Click here for more information'

@indexer(IImage)
def image_body_content(obj):
return get_description(obj, 'Image')

@indexer(IVideo)
def video_body_content(obj):
return get_description(obj, 'Video')


@indexer(IAudio)
def audio_body_content(obj):
return get_description(obj, 'Audio')

@indexer(IStory)
def story_body_content(obj):
return get_description(obj, 'Story')

@indexer(ISpeech)
def speech_body_content(obj):
return get_raw_text(obj, 'Speech')

@indexer(ITestimony)
def testimony_body_content(obj):
return get_description(obj, 'Story')
10 changes: 10 additions & 0 deletions castle/cms/profiles/3017/catalog.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0"?>
<object name="portal_catalog" meta_type="Plone Catalog Tool">
<index name="querylist_searchabletext" meta_type="ZCTextIndex">
<indexed_attr value="querylist_searchabletext"/>
<extra name="index_type" value="Okapi BM25 Rank"/>
<extra name="lexicon_id" value="plone_lexicon"/>
</index>

<column value="querylist_searchabletext"/>
</object>
8 changes: 8 additions & 0 deletions castle/cms/profiles/default/catalog.xml
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,12 @@

<column value="has_custom_markup"/>

<index name="querylist_searchabletext" meta_type="ZCTextIndex">
<indexed_attr value="querylist_searchabletext"/>
<extra name="index_type" value="Okapi BM25 Rank"/>
<extra name="lexicon_id" value="plone_lexicon"/>
</index>

<column value="querylist_searchabletext"/>

</object>
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions castle/cms/tiles/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,12 @@
for="plone.dexterity.interfaces.IDexterityContent ..interfaces.ICastleLayer"
factory=".querylisting.TiledView"
/>
<adapter
name="querylisting.full-content"
provides="..interfaces.ITileView"
for="plone.dexterity.interfaces.IDexterityContent ..interfaces.ICastleLayer"
factory=".querylisting.FullContentView"
/>
<adapter
name="querylisting.tagged"
provides="..interfaces.ITileView"
Expand Down
11 changes: 10 additions & 1 deletion castle/cms/tiles/querylisting.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,15 @@ class TiledView(BaseTileView):
tile_name = 'querylisting'


class FullContentView(BaseTileView):
name = 'full-content'
label = 'Full Webpage'
preview = '++plone++castle/images/previews/querylisting/full-content.png'
order = 3
index = ViewPageTemplateFile('templates/querylisting/full-content.pt')
tile_name = 'querylisting'


class TaggedView(BaseTileView):
name = 'tagged'
preview = '++plone++castle/images/previews/querylisting/tagged.png'
Expand Down Expand Up @@ -396,7 +405,7 @@ class IQueryListingTileSchema(model.Schema):
SimpleTerm('image', 'image', u'Image'),
SimpleTerm('date', 'date', u'Publication (Effective) Date'),
SimpleTerm('eventstartend', 'eventstartend', u'Event Start and End'),
SimpleTerm('description', 'description', u'Overview/Summary')
SimpleTerm('description', 'description', u'Overview/Summary'),
])
)
)
Expand Down
44 changes: 44 additions & 0 deletions castle/cms/tiles/templates/querylisting/full-content.pt
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<ul class="dt-tagged filter-listing" tal:define="results view/tile/results;
utils view/tile/utils;
df view/tile/display_fields;" style="${python: view.font_sizes.get('query_listing','')}">
<tal:item tal:repeat="item python: results['items']">
<div>
<li tal:define="url python: utils.get_object_url(item);
effective item/effective|nothing;
start item/start|nothing;
end item/end|nothing;
has_image python: 'image' in df and utils.has_image(item);" class="portal-type-${python: utils.normalize(item.portal_type)}">

<div class="row">
<div class="col-lg-2 col-md-3 col-sm-4" tal:condition="has_image">
<a href="${url}">
<div tal:replace="structure python: utils.focal_image_tag(item, 'mini', attempt_overlay=True)"></div>
</a>
</div>
<h2 class="fullcontent-title">
<a href="${url}">${item/Title}</a>
</h2>
<div class="col-lg-10 col-md-9 col-sm-8"
tal:attributes="class python: has_image and 'col-md-9' or 'col-md-12'">
<p class="pat-moment date" tal:content="python: utils.format_date(effective, 'notime')"
tal:condition="python: 'date' in df and utils.valid_date(effective)"></p>
<p tal:condition="python: 'eventstartend' in df and start and end">
<span class="pat-moment date" tal:content="python: utils.format_date(start)"></span>
to
<span class="pat-moment date" tal:condition="python: start.date() == end.date()"
tal:content="python: utils.format_date(end, 'nodate')"></span>
<span class="pat-moment date" tal:condition="python: start.date() <> end.date()"
tal:content="python: utils.format_date(end)"></span>
</p>
<div class="full-content"
tal:on-error=""
tal:condition="item/querylist_searchabletext"
tal:content="structure item/querylist_searchabletext"
>
</div>
</div>
</div>
</li>
</div>
</tal:item>
</ul>
21 changes: 21 additions & 0 deletions castle/cms/upgrades.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -261,4 +261,25 @@
profile="castle.cms:default"
/>

<genericsetup:registerProfile
name="3017"
title="CastleCMS upgrade to 3017 profile"
directory="profiles/3017"
provides="Products.GenericSetup.interfaces.EXTENSION"
/>
<genericsetup:upgradeSteps
source="*"
destination="3017"
profile="castle.cms:default"
>
<genericsetup:upgradeStep
title="add metadata column querylist_searchabletext"
handler="castle.cms.upgrades.upgrade_3017a"
/>
<genericsetup:upgradeStep
title="index querylist_searchabletext"
handler="castle.cms.upgrades.upgrade_3017b"
/>
</genericsetup:upgradeSteps>

</configure>
18 changes: 17 additions & 1 deletion castle/cms/upgrades/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,12 @@
from zope.interface import noLongerProvides

import plone.api as api

from fbigov.contenttypes.interfaces.pressrelease import IPressRelease
from castle.cms.interfaces import IVideo, IAudio
from fbigov.contenttypes.interfaces.speech import ISpeech
from fbigov.contenttypes.interfaces.story import IStory
from fbigov.contenttypes.interfaces.testimony import ITestimony
from plone.app.contenttypes.interfaces import IFile, IImage

CASTLE_LOGGER = getLogger('castle.cms')
PROFILE_ID = 'profile-castle.cms:default'
Expand Down Expand Up @@ -141,3 +146,14 @@ def upgrade_3011(site, logger=CASTLE_LOGGER):
upgrade_3014 = default_upgrade_factory('3014')
upgrade_3015 = default_upgrade_factory('3015')
upgrade_3016 = default_upgrade_factory('3016')
upgrade_3017a = default_upgrade_factory('3017')

def upgrade_3017b(site, logger=CASTLE_LOGGER):
logger.info('3017b')
query = api.content.find(
object_provides=[IFile, IPressRelease, IImage, IVideo, IAudio, IStory, ISpeech, ITestimony])
for item in query:
print('reindexing object {}'.format(item.Title))
obj = item.getObject()
obj.reindexObject(idxs=['querylist_searchabletext'])
print('upgrade completed')