Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Quaive app for merge part 3: ploneintranet module #309

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions docs/changes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@ Changelog
11.0.0 (unreleased)
-------------------

- Add ``quaive-publish`` page with the text for publishing a survey to the client.
[maurits]

- Add views to create or edit content from within Quaive.
[maurits]

- Add ``@navtree`` REST API endpoint.
[maurits]

Expand Down
1 change: 1 addition & 0 deletions src/osha/oira/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
<include package=".content" />
<include package=".tiles" />
<include package=".nuplone" />
<include package=".ploneintranet" />
<include package=".upgrade" />
<include package=".statistics" />
<include package=".services" />
Expand Down
Empty file.
155 changes: 155 additions & 0 deletions src/osha/oira/ploneintranet/configure.zcml
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser"
i18n_domain="euphorie"
>

<include package=".z3cform" />

<browser:page
name="quaive-edit"
for="euphorie.content.country.ICountry"
class=".quaive_edit.CountryQuaiveEditForm"
template="templates/quaive-form.pt"
permission="cmf.ModifyPortalContent"
layer="osha.oira.interfaces.IOSHAContentSkinLayer"
/>

<browser:page
name="quaive-edit"
for="euphorie.content.module.IModule"
class=".quaive_edit.ModuleQuaiveEditForm"
template="templates/quaive-form.pt"
permission="cmf.ModifyPortalContent"
layer="osha.oira.interfaces.IOSHAContentSkinLayer"
/>

<browser:page
name="quaive-edit"
for="euphorie.content.profilequestion.IProfileQuestion"
class=".quaive_edit.ProfileQuestionQuaiveEditForm"
template="templates/quaive-form.pt"
permission="cmf.ModifyPortalContent"
layer="osha.oira.interfaces.IOSHAContentSkinLayer"
/>

<browser:page
name="quaive-edit"
for="euphorie.content.risk.IRisk"
class=".quaive_edit.RiskQuaiveEditForm"
template="templates/quaive-form.pt"
permission="cmf.ModifyPortalContent"
layer="osha.oira.interfaces.IOSHAContentSkinLayer"
/>

<browser:page
name="quaive-edit"
for="euphorie.content.sector.ISector"
class=".quaive_edit.SectorQuaiveEditForm"
template="templates/quaive-form.pt"
permission="cmf.ModifyPortalContent"
layer="osha.oira.interfaces.IOSHAContentSkinLayer"
/>

<browser:page
name="quaive-edit"
for="euphorie.content.solution.ISolution"
class=".quaive_edit.SolutionQuaiveEditForm"
template="templates/quaive-form.pt"
permission="cmf.ModifyPortalContent"
layer="osha.oira.interfaces.IOSHAContentSkinLayer"
/>

<browser:page
name="quaive-edit"
for="euphorie.content.survey.ISurvey"
class=".quaive_edit.SurveyQuaiveEditForm"
template="templates/quaive-form.pt"
permission="cmf.ModifyPortalContent"
layer="osha.oira.interfaces.IOSHAContentSkinLayer"
/>


<browser:page
name="quaive-edit"
for="euphorie.content.surveygroup.ISurveyGroup"
class=".quaive_edit.SurveyGroupQuaiveEditForm"
template="templates/quaive-form.pt"
permission="cmf.ModifyPortalContent"
layer="osha.oira.interfaces.IOSHAContentSkinLayer"
/>

<browser:page
name="quaive-publish"
for="euphorie.content.survey.ISurvey"
class=".quaive_publish.PublishSurveyQuaiveForm"
template="templates/quaive-publish.pt"
permission="euphorie.client.PublishSurvey"
layer="plonetheme.nuplone.skin.interfaces.NuPloneSkin"
/>

<browser:page
name="quaive-create-euphorie.sector"
for="*"
class=".quaive_create.QuaiveCreateEuphorieSectorView"
permission="cmf.AddPortalContent"
layer="osha.oira.interfaces.IOSHAContentSkinLayer"
/>

<browser:page
name="quaive-create-euphorie.country"
for="*"
class=".quaive_create.QuaiveCreateEuphorieCountryView"
permission="cmf.AddPortalContent"
layer="osha.oira.interfaces.IOSHAContentSkinLayer"
/>

<browser:page
name="quaive-create-euphorie.risk"
for="*"
class=".quaive_create.QuaiveCreateEuphorieRiskView"
permission="cmf.AddPortalContent"
layer="osha.oira.interfaces.IOSHAContentSkinLayer"
/>

<browser:page
name="quaive-create-euphorie.surveygroup"
for="*"
class=".quaive_create.QuaiveCreateEuphorieSurveyGroupView"
permission="cmf.AddPortalContent"
layer="osha.oira.interfaces.IOSHAContentSkinLayer"
/>

<browser:page
name="quaive-create-euphorie.survey"
for="*"
class=".quaive_create.QuaiveCreateEuphorieSurveyView"
permission="cmf.AddPortalContent"
layer="osha.oira.interfaces.IOSHAContentSkinLayer"
/>

<browser:page
name="quaive-create-euphorie.module"
for="*"
class=".quaive_create.QuaiveCreateEuphorieModuleView"
permission="cmf.AddPortalContent"
layer="osha.oira.interfaces.IOSHAContentSkinLayer"
/>

<browser:page
name="quaive-create-euphorie.profilequestion"
for="*"
class=".quaive_create.QuaiveCreateEuphorieProfileQuestionView"
permission="cmf.AddPortalContent"
layer="osha.oira.interfaces.IOSHAContentSkinLayer"
/>

<browser:page
name="quaive-create-euphorie.solution"
for="*"
class=".quaive_create.QuaiveCreateEuphorieSolutionView"
permission="cmf.AddPortalContent"
layer="osha.oira.interfaces.IOSHAContentSkinLayer"
/>

</configure>
5 changes: 5 additions & 0 deletions src/osha/oira/ploneintranet/interfaces.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from zope.interface import Interface


class IQuaiveForm(Interface):
"""Marker interface for views that are designed to be embedded in Quaive"""
128 changes: 128 additions & 0 deletions src/osha/oira/ploneintranet/quaive_create.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
from euphorie.content.browser.country import AddView as EuphorieCountryAddView
from euphorie.content.browser.module import AddView as EuphorieModuleAddView
from euphorie.content.browser.survey import AddView as EuphorieSurveyAddView
from euphorie.content.browser.surveygroup import AddView as EuphorieSurveyGroupAddView
from osha.oira.content.browser.risk import AddView as EuphorieRiskAddView
from osha.oira.content.browser.sector import AddView as EuphorieSectorAddView
from osha.oira.content.browser.solution import AddView as EuphorieSolutionAddView
from osha.oira.ploneintranet.interfaces import IQuaiveForm
from plone import api
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from zope.i18nmessageid import MessageFactory
from zope.interface import alsoProvides
from zope.interface import implementer


from euphorie.content.browser.profilequestion import ( # isort:skip
AddView as EuphorieProfileQuestionAddView,
)

_ = MessageFactory("nuplone")


@implementer(IQuaiveForm)
class QuaiveCreateFormMixin:
template = ViewPageTemplateFile("templates/quaive-panel-form.pt")

def update(self):
super().update()
for group in getattr(self, "groups", []):
# This is needed to pick up the custom Quaive widgets
alsoProvides(group, IQuaiveForm)


class QuaiveCreateViewMixin:
def __init__(self, context, request):
portal_type = self.__name__.rpartition("-")[-1]
fti = api.portal.get_tool("portal_types")[portal_type]
super().__init__(context, request, fti)


class QuaiveCreateEuphorieSectorForm(QuaiveCreateFormMixin, EuphorieSectorAddView.form):
template = ViewPageTemplateFile("templates/quaive-form.pt")

def updateWidgets(self):
super().updateWidgets()
self.widgets["logo"].field.description = _(
"help_sector_logo",
default=(
"The logo will appear on the client side app "
"that your user group will see. "
"Make sure your image is of format png, jpg or gif "
"and does not contain any special characters. "
"The new logo will only become visible "
"after you've saved your changes and published the OiRA tool."
),
)


class QuaiveCreateEuphorieSectorView(QuaiveCreateViewMixin, EuphorieSectorAddView):
form = QuaiveCreateEuphorieSectorForm


class QuaiveCreateEuphorieCountryForm(
QuaiveCreateFormMixin, EuphorieCountryAddView.form
):
pass


class QuaiveCreateEuphorieCountryView(QuaiveCreateViewMixin, EuphorieCountryAddView):
form = QuaiveCreateEuphorieCountryForm


class QuaiveCreateEuphorieRiskForm(QuaiveCreateFormMixin, EuphorieRiskAddView.form):
template = ViewPageTemplateFile("templates/quaive-form.pt")


class QuaiveCreateEuphorieRiskView(QuaiveCreateViewMixin, EuphorieRiskAddView):
form = QuaiveCreateEuphorieRiskForm


class QuaiveCreateEuphorieSurveyGroupForm(
QuaiveCreateFormMixin, EuphorieSurveyGroupAddView.form
):
pass


class QuaiveCreateEuphorieSurveyGroupView(
QuaiveCreateViewMixin, EuphorieSurveyGroupAddView
):
form = QuaiveCreateEuphorieSurveyGroupForm


class QuaiveCreateEuphorieSurveyForm(QuaiveCreateFormMixin, EuphorieSurveyAddView.form):
template = ViewPageTemplateFile("templates/quaive-form.pt")


class QuaiveCreateEuphorieSurveyView(QuaiveCreateViewMixin, EuphorieSurveyAddView):
form = QuaiveCreateEuphorieSurveyForm


class QuaiveCreateEuphorieModuleForm(QuaiveCreateFormMixin, EuphorieModuleAddView.form):
template = ViewPageTemplateFile("templates/quaive-form.pt")


class QuaiveCreateEuphorieModuleView(QuaiveCreateViewMixin, EuphorieModuleAddView):
form = QuaiveCreateEuphorieModuleForm


class QuaiveCreateEuphorieProfileQuestionForm(
QuaiveCreateFormMixin, EuphorieProfileQuestionAddView.form
):
template = ViewPageTemplateFile("templates/quaive-form.pt")


class QuaiveCreateEuphorieProfileQuestionView(
QuaiveCreateViewMixin, EuphorieProfileQuestionAddView
):
form = QuaiveCreateEuphorieProfileQuestionForm


class QuaiveCreateEuphorieSolutionForm(
QuaiveCreateFormMixin, EuphorieSolutionAddView.form
):
template = ViewPageTemplateFile("templates/quaive-form.pt")


class QuaiveCreateEuphorieSolutionView(QuaiveCreateViewMixin, EuphorieSolutionAddView):
form = QuaiveCreateEuphorieSolutionForm
41 changes: 41 additions & 0 deletions src/osha/oira/ploneintranet/quaive_edit.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
from euphorie.content.browser.country import EditForm as CountryEditForm
from euphorie.content.browser.module import EditForm as ModuleEditForm
from euphorie.content.browser.profilequestion import EditForm as ProfileQuestionEditForm
from osha.oira.content.browser.risk import EditForm as RiskEditForm
from osha.oira.content.browser.sector import EditForm as SectorEditForm
from osha.oira.content.browser.solution import EditForm as SolutionEditForm
from osha.oira.content.browser.survey import EditForm as SurveyEditForm
from osha.oira.ploneintranet.quaive_mixin import QuaiveEditFormMixin
from plone.dexterity.browser.edit import DefaultEditForm


class CountryQuaiveEditForm(QuaiveEditFormMixin, CountryEditForm):
"""Custom edit form designed to be embedded in Quaive"""


class ModuleQuaiveEditForm(QuaiveEditFormMixin, ModuleEditForm):
"""Custom edit form designed to be embedded in Quaive"""


class ProfileQuestionQuaiveEditForm(QuaiveEditFormMixin, ProfileQuestionEditForm):
"""Custom edit form designed to be embedded in Quaive"""


class RiskQuaiveEditForm(QuaiveEditFormMixin, RiskEditForm):
"""Custom edit form designed to be embedded in Quaive"""


class SectorQuaiveEditForm(QuaiveEditFormMixin, SectorEditForm):
"""Custom edit form designed to be embedded in Quaive"""


class SolutionQuaiveEditForm(QuaiveEditFormMixin, SolutionEditForm):
"""Custom edit form designed to be embedded in Quaive"""


class SurveyQuaiveEditForm(QuaiveEditFormMixin, SurveyEditForm):
"""Custom edit form designed to be embedded in Quaive"""


class SurveyGroupQuaiveEditForm(QuaiveEditFormMixin, DefaultEditForm):
"""Custom edit form designed to be embedded in Quaive"""
24 changes: 24 additions & 0 deletions src/osha/oira/ploneintranet/quaive_mixin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from osha.oira.ploneintranet.interfaces import IQuaiveForm
from zope.interface import alsoProvides
from zope.interface import implementer


@implementer(IQuaiveForm)
class QuaiveEditFormMixin:
@property
def template(self):
return self.index

def nextURL(self):
return f"{self.context.absolute_url()}/@@{self.__name__}"

@property
def is_edit_form(self):
"""Is this the main edit form or is it some other form?"""
return self.__name__ == "quaive-edit"

def update(self):
super().update()
for group in getattr(self, "groups", []):
# This is needed to pick up the custom Quaive widgets
alsoProvides(group, IQuaiveForm)
Loading