basic types and a viewlet

This commit is contained in:
Frédéric Péters 2013-07-11 22:41:14 +02:00
parent 85baaaf11e
commit 4db3e282ab
12 changed files with 235 additions and 0 deletions

6
src/pfwbged/__init__.py Normal file
View File

@ -0,0 +1,6 @@
# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
try:
__import__('pkg_resources').declare_namespace(__name__)
except ImportError:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

View File

@ -0,0 +1,12 @@
# -*- coding: utf-8 -*-
"""Init and utils."""
from zope.i18nmessageid import MessageFactory
_ = MessageFactory("pfwbged.folder")
from folder import IFolder, Folder
from link import ILink, Link
def initialize(context):
"""Initializer called when used as a Zope 2 product."""

View File

@ -0,0 +1,22 @@
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:five="http://namespaces.zope.org/five"
xmlns:grok="http://namespaces.zope.org/grok"
xmlns:i18n="http://namespaces.zope.org/i18n"
xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
xmlns:browser="http://namespaces.zope.org/browser"
i18n_domain="pfwbged.folder">
<five:registerPackage package="." initialize=".initialize" />
<include package="five.grok" />
<grok:grok package="." />
<genericsetup:registerProfile
name="default"
title="PFWB Folder"
directory="profiles/default"
provides="Products.GenericSetup.interfaces.EXTENSION"
/>
</configure>

View File

@ -0,0 +1,18 @@
from zope.interface import implements
from five import grok
from zope import schema
from plone.directives import form
from plone.dexterity.content import Container
from plone.supermodel import model
from . import _
class IFolder(model.Schema):
""" """
class Folder(Container):
""" """
implements(IFolder)

View File

@ -0,0 +1,47 @@
from zope.interface import implements
from five import grok
from zope import schema
from plone.directives import form
from plone.dexterity.content import Item
from plone.supermodel import model
from plone.formwidget.contenttree import ObjPathSourceBinder
from z3c.relationfield.schema import RelationChoice
from . import _
class ILink(model.Schema):
""" """
folder = RelationChoice(title=_(u'Folder'), required=True,
source=ObjPathSourceBinder())
class Link(Item):
""" """
implements(ILink)
from collective.dms.basecontent.dmsdocument import IDmsDocument
grok.templatedir('templates')
grok.context(IDmsDocument)
from collective.dms.basecontent.browser.viewlets import BaseViewlet, DmsBelowContentViewletManager
class LinkViewlet(grok.Viewlet):
grok.template('linksviewlet')
grok.viewletmanager(DmsBelowContentViewletManager)
grok.order(15)
portal_type = 'pfwbgedlink'
label = _(u"Filed in Folders")
def links(self):
links = []
for child in self.context.values():
if child.portal_type != 'pfwbgedlink':
continue
links.append(child)
return links

View File

@ -0,0 +1,14 @@
<?xml version="1.0"?>
<object name="portal_css">
<stylesheet title=""
id="++resource++pfwb.folder.css"
media="screen"
rel="stylesheet"
rendering="link"
cacheable="True"
compression="safe"
cookable="True"
enabled="1"/>
</object>

View File

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<object name="portal_javascripts">
<javascript id="++resource++pfwb.folder.js"
cacheable="True" compression="none" cookable="True" enabled="True"
expression="" inline="False" />
</object>

View File

@ -0,0 +1,7 @@
<metadata>
<version>0.1</version>
<dependencies>
<dependency>profile-plone.formwidget.querystring:default</dependency>
</dependencies>
</metadata>

View File

@ -0,0 +1,6 @@
<?xml version="1.0"?>
<object name="portal_types" meta_type="Plone Types Tool">
<property name="title">Controls the available content types in your portal</property>
<object name="pfwbgedfolder" meta_type="Dexterity FTI"/>
<object name="pfwbgedlink" meta_type="Dexterity FTI"/>
</object>

View File

@ -0,0 +1,45 @@
<?xml version="1.0"?>
<object name="pfwbgedfolder" meta_type="Dexterity FTI" i18n:domain="plone"
xmlns:i18n="http://xml.zope.org/namespaces/i18n">
<property name="title" i18n:translate="">Saved Search</property>
<property name="description" i18n:translate="">PFWB Saved Search</property>
<property name="icon_expr">string:${portal_url}/++resource++pfwbgedfolder_icon.png</property>
<property name="factory">pfwbgedfolder</property>
<property name="add_view_expr">string:${folder_url}/++add++pfwbgedfolder</property>
<property name="link_target"></property>
<property name="immediate_view">view</property>
<property name="global_allow">True</property>
<property name="filter_content_types">True</property>
<property name="allowed_content_types">
<element value="dmskeyword"/>
</property>
<property name="allow_discussion">False</property>
<property name="default_view">view</property>
<property name="view_methods">
<element value="view"/>
</property>
<property name="default_view_fallback">False</property>
<property name="add_permission">cmf.AddPortalContent</property>
<property name="klass">pfwbged.folder.Folder</property>
<property name="behaviors">
<element value="plone.app.dexterity.behaviors.metadata.IBasic"/>
<element value="plone.app.content.interfaces.INameFromTitle"/>
</property>
<!-- DO NOT use a model_source or it removes manually added fields while reapplying the profile -->
<!--property name="model_source" /-->
<property name="schema">pfwbged.folder.IFolder</property>
<alias from="(Default)" to="(dynamic view)"/>
<alias from="edit" to="@@edit"/>
<alias from="sharing" to="@@sharing"/>
<alias from="view" to="(selected layout)"/>
<action title="View" action_id="view" category="object" condition_expr=""
description="" icon_expr="" link_target="" url_expr="string:${object_url}"
visible="True">
<permission value="View"/>
</action>
<action title="Edit" action_id="edit" category="object" condition_expr=""
description="" icon_expr="" link_target=""
url_expr="string:${object_url}/edit" visible="True">
<permission value="Modify portal content"/>
</action>
</object>

View File

@ -0,0 +1,39 @@
<?xml version="1.0"?>
<object name="pfwbgedlink" meta_type="Dexterity FTI" i18n:domain="plone"
xmlns:i18n="http://xml.zope.org/namespaces/i18n">
<property name="title" i18n:translate="">Link to Folder</property>
<property name="icon_expr">string:${portal_url}/++resource++pfwbgedlink_icon.png</property>
<property name="factory">pfwbgedlink</property>
<property name="add_view_expr">string:${folder_url}/++add++pfwbgedlink</property>
<property name="link_target"></property>
<property name="immediate_view">view</property>
<property name="global_allow">False</property>
<property name="filter_content_types">True</property>
<property name="allow_discussion">False</property>
<property name="default_view">view</property>
<property name="view_methods">
<element value="view"/>
</property>
<property name="default_view_fallback">False</property>
<property name="add_permission">cmf.AddPortalContent</property>
<property name="klass">pfwbged.folder.Link</property>
<property name="behaviors">
</property>
<!-- DO NOT use a model_source or it removes manually added fields while reapplying the profile -->
<!--property name="model_source" /-->
<property name="schema">pfwbged.folder.ILink</property>
<alias from="(Default)" to="(dynamic view)"/>
<alias from="edit" to="@@edit"/>
<alias from="sharing" to="@@sharing"/>
<alias from="view" to="(selected layout)"/>
<action title="View" action_id="view" category="object" condition_expr=""
description="" icon_expr="" link_target="" url_expr="string:${object_url}"
visible="True">
<permission value="View"/>
</action>
<action title="Edit" action_id="edit" category="object" condition_expr=""
description="" icon_expr="" link_target=""
url_expr="string:${object_url}/edit" visible="True">
<permission value="Modify portal content"/>
</action>
</object>

View File

@ -0,0 +1,10 @@
<fieldset>
<legend
i18n:translate=""
tal:content="viewlet/label">label</legend>
<ul>
<li tal:repeat="link viewlet/links"><a tal:attributes="href
link/folder/to_object/absolute_url"
tal:content="link/folder/to_object/Title">plop</a></li>
</ul>
</fieldset>