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
1 change: 1 addition & 0 deletions castle/cms/indexing/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -42,5 +42,6 @@
<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="raw_output" factory=".indexers.raw_output" />

</configure>
21 changes: 21 additions & 0 deletions castle/cms/indexing/indexers.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from wildcard.hps.interfaces import IReindexActive
from OFS.interfaces import IItem
from plone import api
from plone.app.textfield.value import RichTextValue
from plone.app.uuid.utils import uuidToCatalogBrain as get_brain
from plone.app.contenttypes.interfaces import IFile, IImage
from plone.dexterity.interfaces import IDexterityContent
Expand All @@ -13,6 +14,7 @@
from Products.CMFCore.interfaces._content import IFolderish
from ZODB.POSException import POSKeyError
from zope.globalrequest import getRequest
import six

from castle.cms.behaviors.location import ILocation
from castle.cms.interfaces import IHasDefaultImage
Expand Down Expand Up @@ -220,3 +222,22 @@ def self_or_child_has_title_description_and_image(obj):
def has_custom_markup(image):
if image.custom_markup:
return True


@indexer(IItem)
def raw_output(obj):
text = getattr(obj, 'text', None)

if not text:
return u''

if hasattr(text, 'raw'):
try:
return text.raw or u''
except Exception:
return u''

try:
return six.text_type(text)
except Exception:
return u''
4 changes: 4 additions & 0 deletions castle/cms/profiles/3020/catalog.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0"?>
<object name="portal_catalog" meta_type="Plone Catalog Tool">
<column value="raw_output"/>
</object>
2 changes: 2 additions & 0 deletions castle/cms/profiles/default/catalog.xml
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,6 @@

<column value="has_custom_markup"/>

<column value="raw_output"/>

</object>
2 changes: 1 addition & 1 deletion castle/cms/profiles/default/metadata.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
<metadata>
<version>3019</version>
<version>3020</version>
<dependencies>
<dependency>profile-plone.app.querystring:default</dependency>
<dependency>profile-plone.app.mosaic:default</dependency>
Expand Down
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 @@ -446,6 +446,12 @@
for="plone.dexterity.interfaces.IDexterityContent ..interfaces.ICastleLayer"
factory=".querylisting.BlogView"
/>
<adapter
name="querylisting.full-content"
provides="..interfaces.ITileView"
for="plone.dexterity.interfaces.IDexterityContent ..interfaces.ICastleLayer"
factory=".querylisting.FullContentView"
/>

<!-- gallery views -->
<adapter
Expand Down
9 changes: 9 additions & 0 deletions castle/cms/tiles/querylisting.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,15 @@ class BlogView(BaseTileView):
tile_name = 'querylisting'


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


class QueryListingTile(BaseTile, DisplayTypeTileMixin):
implements(IPersistentTile)

Expand Down
74 changes: 74 additions & 0 deletions castle/cms/tiles/templates/querylisting/full-content.pt
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
<style>
.dt-default li .focuspoint.overlay-image-container img.overlay-image {
position: absolute;
bottom: 0;
left: 0;
top: unset;
height: 20%;
width: 100%;
min-height: 25px;
max-height: 50px;
}
.full-content-item {
border-bottom: 1px solid #eee;

}
.full-content-item:last-child {
border-bottom: none;
}
</style>
<ul class="dt-default"
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']">
<li tal:define="base_url item/getURL;
url python: utils.get_object_url(item);
has_image python: 'image' in df and utils.has_image(item);
effective item/effective|nothing;
start item/start|nothing;
end item/end|nothing;"
class="portal-type-${python: utils.normalize(item.portal_type)} full-content-item">
<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>
<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>
<h2 class="full-content-title">
<a href="${url}">${item/Title}</a>
</h2>
<p class="full-content-date"
tal:condition="context/effective"
tal:content="python: context.toLocalizedTime(context.effective())">
Publication date
</p>
<div class="full-content-body"
tal:on-error=""
tal:condition="item/raw_output"
tal:content="structure item/raw_output"
>
<p class="read-more"><a href="${url}" class="button">More →</a></p>
</div>
</div>
<hr>
</li>
</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 @@ -312,5 +312,26 @@
profile="castle.cms:default"
/>

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

</configure>
9 changes: 9 additions & 0 deletions castle/cms/upgrades/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from Products.CMFPlone.resources.browser.cook import cookWhenChangingSettings
from Products.CMFCore.utils import getToolByName
from zope.interface import noLongerProvides
from OFS.interfaces import IItem

import plone.api as api

Expand Down Expand Up @@ -144,3 +145,11 @@ def upgrade_3011(site, logger=CASTLE_LOGGER):
upgrade_3017 = default_upgrade_factory('3017')
upgrade_3018 = default_upgrade_factory('3018')
upgrade_3019 = default_upgrade_factory('3019')


upgrade_3020a = default_upgrade_factory('3020')
def upgrade_3020b(context):
catalog = getToolByName(context, 'portal_catalog')
for brain in catalog():
obj = brain.getObject()
catalog.catalog_object(obj, idxs=[])