Skip to content

Commit

Permalink
Add sponsor content type and upgrade step
Browse files Browse the repository at this point in the history
Use vocabularies in talk
  • Loading branch information
ksuess committed Sep 1, 2023
1 parent 6c6c8ba commit 8b94dd8
Show file tree
Hide file tree
Showing 9 changed files with 179 additions and 2 deletions.
46 changes: 46 additions & 0 deletions src/ploneconf/site/browser/controlpanel.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,52 @@ class IPloneconfSettings(Interface):
},
)

sponsor_levels = schema.JSONField(
title="Sponsor levels",
description="Level of sponsoring",
required=False,
schema=VOCABULARY_SCHEMA,
default={
"items": [
{
"token": "platinum",
"titles": {
"en": "Platinum",
"de": "Platin",
},
},
{
"token": "gold",
"titles": {
"en": "Gold",
"de": "Gold",
},
},
{
"token": "silver",
"titles": {
"en": "Silver",
"de": "Silber",
},
},
{
"token": "bronze",
"titles": {
"en": "Bronze",
"de": "Bronze",
},
},
]
},
missing_value={"items": []},
)
directives.widget(
"sponsor_levels",
frontendOptions={
"widget": "vocabularyterms",
},
)


@adapter(Interface, Interface)
class PloneConfRegistryConfigletPanel(RegistryConfigletPanel):
Expand Down
5 changes: 5 additions & 0 deletions src/ploneconf/site/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
<include package=".behaviors" />

<include file="permissions.zcml" />
<include file="upgrades.zcml" />

<genericsetup:registerProfile
name="default"
Expand Down Expand Up @@ -53,4 +54,8 @@
name="ploneconf.rooms"
component="ploneconf.site.vocabularies.RoomsVocabularyFactory" />

<utility
name="ploneconf.sponsor_levels"
component="ploneconf.site.vocabularies.SponsorLevelVocabulary" />

</configure>
40 changes: 40 additions & 0 deletions src/ploneconf/site/content/sponsor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from plone.app.textfield import RichText
from plone.autoform import directives
from plone.dexterity.content import Container
from plone.namedfile import field as namedfile
from plone.supermodel import model
from plone.supermodel.directives import fieldset
from zope import schema
from zope.interface import implementer


class ISponsor(model.Schema):
"""Dexterity Schema for Sponsors"""

level = schema.Choice(
title="Sponsoring Level", vocabulary="ploneconf.sponsor_levels", required=True
)

text = RichText(title="Text", required=False)

url = schema.URI(title="Link", required=False)

fieldset("Images", fields=["logo", "advertisement"])
logo = namedfile.NamedBlobImage(
title="Logo",
required=False,
)

advertisement = namedfile.NamedBlobImage(
title="Advertisement (Gold-sponsors and above)",
required=False,
)

directives.read_permission(notes="cmf.ManagePortal")
directives.write_permission(notes="cmf.ManagePortal")
notes = RichText(title="Secret Notes (only for site-admins)", required=False)


@implementer(ISponsor)
class Sponsor(Container):
"""Sponsor instance class"""
2 changes: 1 addition & 1 deletion src/ploneconf/site/profiles/default/metadata.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<version>1000</version>
<version>1001</version>
<dependencies>
<!--<dependency>profile-plone.app.dexterity:default</dependency>-->
</dependencies>
Expand Down
3 changes: 2 additions & 1 deletion src/ploneconf/site/profiles/default/types.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?xml version="1.0"?>
<object name="portal_types" meta_type="Plone Types Tool">
<object name="talk" meta_type="Dexterity FTI"/>
<object name="talk" meta_type="Dexterity FTI"/>
<object name="sponsor" meta_type="Dexterity FTI"/>
</object>
45 changes: 45 additions & 0 deletions src/ploneconf/site/profiles/default/types/sponsor.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?xml version="1.0"?>
<object name="sponsor" meta_type="Dexterity FTI" i18n:domain="plone"
xmlns:i18n="http://xml.zope.org/namespaces/i18n">
<property name="title" i18n:translate="">Sponsor</property>
<property name="description" i18n:translate=""></property>
<property name="icon_expr">string:${portal_url}/document_icon.png</property>
<property name="factory">sponsor</property>
<property name="add_view_expr">string:${folder_url}/++add++sponsor</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"/>
<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="schema">ploneconf.site.content.sponsor.ISponsor</property>
<property name="klass">ploneconf.site.content.sponsor.Sponsor</property>
<property name="behaviors">
<element value="plone.dublincore"/>
<element value="plone.namefromtitle"/>
<element value="plone.versioning"/>
</property>
<property name="model_source"></property>
<property name="model_file"></property>
<property name="schema_policy">dexterity</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>
12 changes: 12 additions & 0 deletions src/ploneconf/site/upgrades.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from plone import api
import logging

logger = logging.getLogger("ploneconf.site")

PROFILE_ID = "profile-ploneconf.site:default"


def updateRegistry(context):
setup = api.portal.get_tool("portal_setup")
setup.runImportStepFromProfile(PROFILE_ID, "plone.app.registry")
logger.info("Registry updated")
17 changes: 17 additions & 0 deletions src/ploneconf/site/upgrades.zcml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:i18n="http://namespaces.zope.org/i18n"
xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
i18n_domain="ploneconf.site">

<genericsetup:upgradeStep
title="Update registry"
description="Add vocabulary sponsor_levels"
source="1000"
destination="1001"
handler="ploneconf.site.upgrades.updateRegistry"
sortkey="1"
profile="ploneconf.site:default"
/>

</configure>
11 changes: 11 additions & 0 deletions src/ploneconf/site/vocabularies.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,14 @@ def RoomsVocabularyFactory(context):
return SimpleVocabulary.fromItems(
[[item["token"], item["token"], item["titles"][lang]] for item in items]
)


@provider(IVocabularyFactory)
def SponsorLevelVocabulary(context):
name = "ploneconf.sponsor_levels"
registry_record_value = api.portal.get_registry_record(name)
items = registry_record_value.get("items", [])
lang = api.portal.get_current_language()
return SimpleVocabulary.fromItems(
[[item["token"], item["token"], item["titles"][lang]] for item in items]
)

0 comments on commit 8b94dd8

Please sign in to comment.