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]
+ )