diff --git a/src/ploneconf/site/browser/controlpanel.py b/src/ploneconf/site/browser/controlpanel.py index 13b3b05..9b868ec 100644 --- a/src/ploneconf/site/browser/controlpanel.py +++ b/src/ploneconf/site/browser/controlpanel.py @@ -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): diff --git a/src/ploneconf/site/configure.zcml b/src/ploneconf/site/configure.zcml index e2fc61a..7db6fe0 100644 --- a/src/ploneconf/site/configure.zcml +++ b/src/ploneconf/site/configure.zcml @@ -17,6 +17,7 @@ + + + diff --git a/src/ploneconf/site/content/sponsor.py b/src/ploneconf/site/content/sponsor.py new file mode 100644 index 0000000..014f412 --- /dev/null +++ b/src/ploneconf/site/content/sponsor.py @@ -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""" diff --git a/src/ploneconf/site/profiles/default/metadata.xml b/src/ploneconf/site/profiles/default/metadata.xml index 3fcf1da..07ef1d3 100644 --- a/src/ploneconf/site/profiles/default/metadata.xml +++ b/src/ploneconf/site/profiles/default/metadata.xml @@ -1,6 +1,6 @@ - 1000 + 1001 diff --git a/src/ploneconf/site/profiles/default/types.xml b/src/ploneconf/site/profiles/default/types.xml index 521f014..678a854 100644 --- a/src/ploneconf/site/profiles/default/types.xml +++ b/src/ploneconf/site/profiles/default/types.xml @@ -1,4 +1,5 @@ - + + diff --git a/src/ploneconf/site/profiles/default/types/sponsor.xml b/src/ploneconf/site/profiles/default/types/sponsor.xml new file mode 100644 index 0000000..bd9c4e8 --- /dev/null +++ b/src/ploneconf/site/profiles/default/types/sponsor.xml @@ -0,0 +1,45 @@ + + + Sponsor + + string:${portal_url}/document_icon.png + sponsor + string:${folder_url}/++add++sponsor + + view + True + True + + False + view + + + + False + cmf.AddPortalContent + ploneconf.site.content.sponsor.ISponsor + ploneconf.site.content.sponsor.Sponsor + + + + + + + + dexterity + + + + + + + + + + + \ No newline at end of file diff --git a/src/ploneconf/site/upgrades.py b/src/ploneconf/site/upgrades.py new file mode 100644 index 0000000..d0a1004 --- /dev/null +++ b/src/ploneconf/site/upgrades.py @@ -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") diff --git a/src/ploneconf/site/upgrades.zcml b/src/ploneconf/site/upgrades.zcml new file mode 100644 index 0000000..6d21910 --- /dev/null +++ b/src/ploneconf/site/upgrades.zcml @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/src/ploneconf/site/vocabularies.py b/src/ploneconf/site/vocabularies.py index 2278544..6bba030 100644 --- a/src/ploneconf/site/vocabularies.py +++ b/src/ploneconf/site/vocabularies.py @@ -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] + )