Skip to content

Commit

Permalink
Merge pull request #33 from simplesconsultoria/issue_32
Browse files Browse the repository at this point in the history
Issue 32 - Add cover tile
  • Loading branch information
hvelarde committed Aug 25, 2015
2 parents c0fc98a + b03380f commit 7e6e4c1
Show file tree
Hide file tree
Showing 22 changed files with 295 additions and 18 deletions.
3 changes: 2 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ python: 2.7
sudo: false
cache:
directories:
- eggs
- eggs
- parts/node
env:
- PLONE_VERSION=4.3
- PLONE_VERSION=5.0
Expand Down
4 changes: 4 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ There's a frood who really knows where his towel is.
1.0b4 (unreleased)
^^^^^^^^^^^^^^^^^^

- Add Embedder tile for collective.cover (closes `#32`_).
[rodfersou]

- Brazilian Portuguese and Spanish translations were updated.
[rodfersou, hvelarde]

Expand Down Expand Up @@ -89,3 +92,4 @@ There's a frood who really knows where his towel is.
.. _`#3`: https://github.com/simplesconsultoria/sc.embedder/issues/3
.. _`#14`: https://github.com/simplesconsultoria/sc.embedder/issues/14
.. _`#20`: https://github.com/simplesconsultoria/sc.embedder/issues/20
.. _`#32`: https://github.com/simplesconsultoria/sc.embedder/issues/32
3 changes: 2 additions & 1 deletion buildout.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ extends =
https://raw.github.com/collective/buildout.plonetest/master/test-4.3.x.cfg
https://raw.github.com/collective/buildout.plonetest/master/qa.cfg
https://raw.github.com/plone/plone.app.robotframework/master/versions.cfg
https://raw.github.com/collective/collective.cover/master/versions-4.3.x.cfg

package-name = sc.embedder
package-extras = [test]
Expand Down Expand Up @@ -44,6 +45,6 @@ recipe = collective.recipe.omelette
eggs = ${test:eggs}

[versions]
plone.recipe.codeanalysis = 2.0b1
plone.recipe.codeanalysis = 2.0
# use latest version of setuptools
setuptools =
4 changes: 2 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
# -*- coding: utf-8 -*-

from setuptools import find_packages
from setuptools import setup

import os

version = '1.0b4.dev0'
description = 'This packages contains a Dexterity-based content type that '
Expand Down Expand Up @@ -75,7 +73,9 @@
],
extras_require={
'test': [
'collective.cover',
'httmock',
'mock',
'plone.app.robotframework',
'plone.app.testing [robot] >=4.2.2',
'plone.browserlayer',
Expand Down
17 changes: 17 additions & 0 deletions src/sc/embedder/Extensions/Install.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# -*- coding: utf-8 -*-
from plone import api
from sc.embedder.config import PROJECTNAME


def remove_tile(portal):
tiles = api.portal.get_registry_record('plone.app.tiles')
if u'sc.embedder' in tiles:
tiles.remove(u'sc.embedder')


def uninstall(portal):
remove_tile(portal)
profile = 'profile-%s:uninstall' % PROJECTNAME
setup_tool = api.portal.get_tool(name='portal_setup')
setup_tool.runAllImportStepsFromProfile(profile)
return 'Ran all uninstall steps.'
Empty file.
1 change: 1 addition & 0 deletions src/sc/embedder/config.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
# -*- coding: utf-8 -*-
PROJECTNAME = 'sc.embedder'
PROFILE = PROJECTNAME + ':default'
15 changes: 7 additions & 8 deletions src/sc/embedder/configure.zcml
Original file line number Diff line number Diff line change
@@ -1,28 +1,27 @@
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:five="http://namespaces.zope.org/five"
xmlns:browser="http://namespaces.zope.org/browser"
xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
xmlns:i18n="http://namespaces.zope.org/i18n"
xmlns:grok="http://namespaces.zope.org/grok"
xmlns:z3c="http://namespaces.zope.org/z3c"
xmlns:zcml="http://namespaces.zope.org/zcml"
i18n_domain="sc.embedder">

<five:registerPackage package="." />
<includeDependencies package="." />
<i18n:registerTranslations directory="locales" />

<grok:grok package="." />

<include file="profiles.zcml"/>
<include file="skins.zcml"/>
<include package=".browser"/>
<include package=".tiles" zcml:condition="installed collective.cover" />

<!-- Permissions -->
<permission
id="sc.embedder.AddEmbedder"
title="sc.embedder: Add Embedder"
/>
id="sc.embedder.AddEmbedder"
title="sc.embedder: Add Embedder"
/>

<grok:grok package=".content" />

<adapter factory=".content.embedder.EmbedderImageFieldWidget" />

Expand Down
4 changes: 2 additions & 2 deletions src/sc/embedder/profiles.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@
i18n:attributes="title; description"
/>

<!-- <include package=".upgrades" /> -->
<include package=".upgrades" />

</configure>
</configure>
4 changes: 2 additions & 2 deletions src/sc/embedder/profiles/default/metadata.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<metadata>
<version>1000</version>
<version>1001</version>
<dependencies>
<dependency>profile-plone.app.dexterity:default</dependency>
</dependencies>
</metadata>
</metadata>
12 changes: 12 additions & 0 deletions src/sc/embedder/profiles/default/registry.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0"?>
<registry xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="plone">
<record name="plone.app.tiles">
<field type="plone.registry.field.List">
<title>Tiles</title>
<value_type type="plone.registry.field.TextLine" />
</field>
<value purge="false">
<element>sc.embedder</element>
</value>
</record>
</registry>
5 changes: 3 additions & 2 deletions src/sc/embedder/testing.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,13 @@ class Fixture(PloneSandboxLayer):
defaultBases = (PLONE_FIXTURE,)

def setUpZope(self, app, configurationContext):
# Load ZCML
import collective.cover
self.loadZCML(package=collective.cover)
import sc.embedder
self.loadZCML(package=sc.embedder)

def setUpPloneSite(self, portal):
# Install into Plone site using portal_setup
self.applyProfile(portal, 'collective.cover:default')
self.applyProfile(portal, 'sc.embedder:default')

FIXTURE = Fixture()
Expand Down
9 changes: 9 additions & 0 deletions src/sc/embedder/tests/test_setup.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from plone import api
from plone.browserlayer.utils import registered_layers
from sc.embedder.config import PROJECTNAME
from sc.embedder.testing import INTEGRATION_TESTING
Expand Down Expand Up @@ -47,6 +48,10 @@ def test_add_permissions(self):
expected = ['Contributor', 'Manager', 'Owner', 'Site Administrator']
self.assertListEqual(roles, expected)

def test_tile(self):
tiles = api.portal.get_registry_record('plone.app.tiles')
self.assertIn(u'sc.embedder', tiles)


class UninstallTest(unittest.TestCase):

Expand All @@ -73,3 +78,7 @@ def test_css_removed(self):
resource_ids = self.portal.portal_css.getResourceIds()
for id in CSS:
self.assertNotIn(id, resource_ids, '%s not removed' % id)

def test_tile_removed(self):
tiles = api.portal.get_registry_record('plone.app.tiles')
self.assertNotIn(u'sc.embedder', tiles)
73 changes: 73 additions & 0 deletions src/sc/embedder/tests/test_upgrades.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# -*- coding: utf-8 -*-
from plone import api
from sc.embedder.config import PROFILE
from sc.embedder.testing import INTEGRATION_TESTING

import unittest


class UpgradeTestCaseBase(unittest.TestCase):

layer = INTEGRATION_TESTING

def setUp(self, from_version, to_version):
self.portal = self.layer['portal']
self.setup = self.portal['portal_setup']
self.from_version = from_version
self.to_version = to_version

def _get_upgrade_step(self, title):
"""Get one of the upgrade steps.
:param title: [required] the title used to register the upgrade step
:type obj: str
"""
self.setup.setLastVersionForProfile(PROFILE, self.from_version)
upgrades = self.setup.listUpgrades(PROFILE)
steps = [s for s in upgrades[0] if s['title'] == title]
return steps[0] if steps else None

def _do_upgrade_step(self, step):
"""Execute an upgrade step.
:param step: [required] the step we want to run
:type step: str
"""
request = self.layer['request']
request.form['profile_id'] = PROFILE
request.form['upgrades'] = [step['id']]
self.setup.manage_doUpgrades(request=request)

def _how_many_upgrades_to_do(self):
self.setup.setLastVersionForProfile(PROFILE, self.from_version)
upgrades = self.setup.listUpgrades(PROFILE)
assert len(upgrades) > 0
return len(upgrades[0])


class Upgrade1000to1001TestCase(UpgradeTestCaseBase):

def setUp(self):
UpgradeTestCaseBase.setUp(self, u'1000', u'1001')

def test_upgrade_to_1001_registrations(self):
version = self.setup.getLastVersionForProfile(PROFILE)[0]
self.assertGreaterEqual(int(version), int(self.to_version))
self.assertEqual(self._how_many_upgrades_to_do(), 1)

def test_add_embedder_tile(self):
# check if the upgrade step is registered
title = u'Add embedder tile'
step = self._get_upgrade_step(title)
self.assertIsNotNone(step)

# simulate state on previous version
from sc.embedder.Extensions.Install import remove_tile
remove_tile(api.portal.get())
tiles = api.portal.get_registry_record('plone.app.tiles')
self.assertNotIn(u'sc.embedder', tiles)

# run the upgrade step to validate the update
self._do_upgrade_step(step)
tiles = api.portal.get_registry_record('plone.app.tiles')
self.assertIn(u'sc.embedder', tiles)
1 change: 1 addition & 0 deletions src/sc/embedder/tiles/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# -*- coding: utf-8 -*-
21 changes: 21 additions & 0 deletions src/sc/embedder/tiles/configure.zcml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:i18n="http://namespaces.zope.org/i18n"
xmlns:plone="http://namespaces.plone.org/plone"
i18n_domain="sc.embedder">

<include package="plone.tiles" file="meta.zcml" />

<plone:tile
name="sc.embedder"
title="Embedder"
description="Embedder tile, can reproduce embeded files."
add_permission="cmf.ModifyPortalContent"
schema=".embedder.IEmbedderTile"
class=".embedder.EmbedderTile"
permission="zope2.View"
for="*"
i18n:attributes="title; description"
/>

</configure>
18 changes: 18 additions & 0 deletions src/sc/embedder/tiles/embedder.pt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:metal="http://xml.zope.org/namespaces/metal"
xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
i18n:domain="brasil.gov.tiles">

<body tal:define="tile_id view/id;">
<div class="video-tile"
tal:attributes="id string:video-$tile_id"
tal:define="results view/data;">
<div class="video-container" tal:content="structure results/embed_code"></div>
<a href="" tal:content="results/title" tal:attributes="href results/url"></a>
</div>
<noscript>
<div class="error" i18n:translate="">Your internet browser this not support JavaScript, therefore some features of the website may not be accessible.</div>
</noscript>
</body>
</html>
70 changes: 70 additions & 0 deletions src/sc/embedder/tiles/embedder.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# -*- coding: utf-8 -*-
from collective.cover.tiles.base import IPersistentCoverTile
from collective.cover.tiles.base import PersistentCoverTile
from plone.tiles.interfaces import ITileDataManager
from plone.uuid.interfaces import IUUID
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from sc.embedder import MessageFactory as _
from zope import schema


class IEmbedderTile(IPersistentCoverTile):
"""
"""

title = schema.TextLine(
title=_(u'Title'),
required=False,
)

embed_code = schema.TextLine(
title=_(u'Videos'),
required=False,
readonly=True,
)

url = schema.TextLine(
title=_(u'Videos'),
required=False,
readonly=True,
)

uuids = schema.List(
title=_(u'Videos'),
value_type=schema.TextLine(),
required=False,
readonly=True,
)


class EmbedderTile(PersistentCoverTile):
index = ViewPageTemplateFile('embedder.pt')
is_configurable = False
is_editable = True
limit = 1

def populate_with_object(self, obj):
super(EmbedderTile, self).populate_with_object(obj) # check permission

# here we should check if the embeded item has its a video
# XXX
if obj.portal_type in self.accepted_ct():

title = obj.Title()
url = obj.absolute_url()
uuid = IUUID(obj)
embed = obj.embed_html
data_mgr = ITileDataManager(self)
data_mgr.set({'title': title,
'url': url,
'uuid': uuid,
'embed_code': embed
})

def get_uid(self, obj):
return IUUID(obj)

def accepted_ct(self):
""" Return a list of content types accepted by the tile.
"""
return ['sc.embedder']
17 changes: 17 additions & 0 deletions src/sc/embedder/upgrades/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# -*- coding: utf-8 -*-
from sc.embedder.logger import logger
from plone import api


def cook_css_resources(context):
"""Cook css resources."""
css_tool = api.portal.get_tool('portal_css')
css_tool.cookResources()
logger.info('CSS resources were cooked')


def cook_javascript_resources(context):
"""Cook javascript resources."""
js_tool = api.portal.get_tool('portal_javascripts')
js_tool.cookResources()
logger.info('Javascript resources were cooked')
Loading

0 comments on commit 7e6e4c1

Please sign in to comment.