def __call__(self, context): values = [{ "MALE": _("MALE", u"Male") }, { "FEMALE": _("FEMALE", u"Female") }] return dict_list_2_vocabulary(values)
def __call__(self, context): values = [{ "FOR": _("FOR", u"For") }, { "AGAINST": _("AGAINST", u"Against") }] return dict_list_2_vocabulary(values)
def send_mail(self, url): lang = api.portal.get_current_language()[:2] email = api.portal.get_registry_record( "ideabox.policy.browser.controlpanel.IIdeaBoxSettingsSchema.project_manager_email", default=None, ) if email is None: logger.warn("missing email for project submission notification") return list_mail = email.split(";") body = translate( _( u"email_body_project_submission", default=u"""A new project has been created you can access it at the following url: ${url} """, mapping={u"url": url}, ), target_language=lang, ) for mail in list_mail: api.portal.send_email( recipient=mail, subject=translate(_(u"New project submission"), target_language=lang), body=body, )
class ITimelineTile(Schema): """A tile that displays a listing of content items""" steps = schema.Text( title=_(u"Steps for timeline"), description=_(u"Title; Date; Link"), required=True, )
class IdeaBoxSettingsEditForm(controlpanel.RegistryEditForm): schema = IIdeaBoxSettingsSchema label = _(u"Configuration for ideabox product") description = _(u"") def updateFields(self): super(IdeaBoxSettingsEditForm, self).updateFields() def updateWidgets(self): super(IdeaBoxSettingsEditForm, self).updateWidgets()
class IIdeaBoxSettingsSchema(Interface): project_manager_email = schema.TextLine( title=_(u"Email address of the project manager"), description= _(u"If there are multiple email addresses, separate them with semicolons" ), ) project_submission = schema.Bool( title=_(u"Enable / Disable project submission"), default=True)
def add_taxonomies(): current_lang = api.portal.get_current_language()[:2] data_theme = { "taxonomy": "theme", "field_title": translate(_("Theme"), target_language=current_lang), "field_description": "", "default_language": "fr", "filename": "taxonomy-settings-theme.xml", } data_district = { "taxonomy": "district", "field_title": translate(_("District"), target_language=current_lang), "field_description": "", "default_language": "fr", "filename": "taxonomy-settings-district.xml", } data_iam = { "taxonomy": "iam", "field_title": translate(_("I am"), target_language=current_lang), "field_description": "", "default_language": "fr", "filename": "taxonomy-settings-iam.xml", } portal = api.portal.get() sm = portal.getSiteManager() theme_item = "collective.taxonomy.theme" district_item = "collective.taxonomy.district" iam_item = "collective.taxonomy.iam" utility_theme = sm.queryUtility(ITaxonomy, name=theme_item) utility_district = sm.queryUtility(ITaxonomy, name=district_item) utility_iam = sm.queryUtility(ITaxonomy, name=iam_item) if utility_theme and utility_district and utility_iam: return create_taxonomy_object(data_theme, portal) create_taxonomy_object(data_district, portal) create_taxonomy_object(data_iam, portal) # remove taxonomy test item = "collective.taxonomy.test" utility = sm.queryUtility(ITaxonomy, name=item) if utility: utility.unregisterBehavior() sm.unregisterUtility(utility, ITaxonomy, name=item) sm.unregisterUtility(utility, IVocabularyFactory, name=item) sm.unregisterUtility(utility, ITranslationDomain, name=item)
def add_taxonomies(): current_lang = api.portal.get_current_language()[:2] data_theme = { "taxonomy": "theme", "field_title": translate(_("Theme"), target_language=current_lang), "field_description": "", "default_language": "fr", "filename": "taxonomy-settings-theme.xml", } data_district = { "taxonomy": "district", "field_title": translate(_("District"), target_language=current_lang), "field_description": "", "default_language": "fr", "filename": "taxonomy-settings-district.xml", } data_iam = { "taxonomy": "iam", "field_title": translate(_("I am"), target_language=current_lang), "field_description": "", "default_language": "fr", "filename": "taxonomy-settings-iam.xml", } portal = api.portal.get() sm = portal.getSiteManager() theme_item = "collective.taxonomy.theme" district_item = "collective.taxonomy.district" iam_item = "collective.taxonomy.iam" utility_theme = sm.queryUtility(ITaxonomy, name=theme_item) utility_district = sm.queryUtility(ITaxonomy, name=district_item) utility_iam = sm.queryUtility(ITaxonomy, name=iam_item) if utility_theme and utility_district and utility_iam: return create_taxonomy_object(data_theme, portal) create_taxonomy_object(data_district, portal) create_taxonomy_object(data_iam, portal) # remove taxonomy test item = "collective.taxonomy.test" utility = sm.queryUtility(ITaxonomy, name=item) if utility: utility.unregisterBehavior() sm.unregisterUtility(utility, ITaxonomy, name=item) sm.unregisterUtility(utility, IVocabularyFactory, name=item) sm.unregisterUtility(utility, ITranslationDomain, name=item)
def get_summary(self): return ( { "title": "study_in_progress", "count": self.count("study_in_progress"), "description": _(u"diagnose and analysis"), }, { "title": "in_progress", "count": self.count("in_progress"), "description": _(u"Setting up"), }, {"title": "realized", "count": self.count("realized"), "description": None}, )
class IProjectsTile(Schema): """A tile that displays a listing of content items""" title = schema.TextLine(title=_(u"Title"), required=True, default=_(u"Projects")) limit = schema.Int( title=_(u"Limit"), description=_(u"Limit projects"), required=False, default=6, min=1, max=15, )
def update_user(self, user, data): updates = {} new_properties = { "last_name": data["last_name"] or translate(_(u"Anonymous"), context=self.request), "first_name": data["first_name"], "gender": data["gender"], "birthdate": data["birthdate"], "zip_code": data["zip_code"], "iam": data["iam"], "address": data["address"], } for field, new_value in new_properties.items(): if not new_value: continue if user.getProperty(field) != new_value: updates[field] = new_value user.setMemberProperties(mapping=updates)
def create_user(self, data): if data["mail"]: existing_user = api.user.get(userid=data["mail"].lower()) if existing_user: self.update_user(existing_user, data) return existing_user properties = dict( last_name=data["last_name"] or translate(_(u"Anonymous"), context=self.request), first_name=data["first_name"], gender=data["gender"], birthdate=data["birthdate"], zip_code=data["zip_code"], iam=data["iam"], address=data["address"], ) if not data["mail"]: normalizer = getUtility(IIDNormalizer) mail = "{0}_{1}@liege2025.be".format( normalizer.normalize(data["last_name"])[:15], hashlib.md5(str(time.time())).hexdigest()[:10], ) else: mail = data["mail"] return api.user.create( email=mail.lower(), password="******".format(password_generator.generate()), properties=properties, )
def create_user(self, data): if data["mail"]: existing_user = api.user.get(userid=data["mail"].lower()) if existing_user: self.update_user(existing_user, data) return existing_user properties = dict( last_name=data["last_name"] or translate(_(u"Anonymous"), context=self.request), first_name=data["first_name"], gender=data["gender"], birthdate=data["birthdate"], zip_code=data["zip_code"], iam=data["iam"], address=data["address"], ) if not data["mail"]: normalizer = getUtility(IIDNormalizer) mail = "{0}_{1}_{2}@liege2025.be".format( normalizer.normalize(data["title"]), data["last_name"], hashlib.md5(str(time.time())).hexdigest()[:4], ) else: mail = data["mail"] return api.user.create( email=mail.lower(), password="******".format(password_generator.generate()), properties=properties, )
class IVoteEncoding(IEnhancedUserDataSchema): mail = schema.Email(title=_(u"Email"), required=False) form.widget(vote=RadioFieldWidget) vote = schema.Choice(title=_(u"Vote"), required=True, vocabulary=u"ideabox.vocabularies.vote") form.widget(project=MultiSelect2FieldWidget) project = schema.List( title=_(u"Project(s)"), value_type=schema.Choice( title=_(u"Project"), vocabulary=u"ideabox.vocabularies.projects", ), required=True, )
def get_summary(self): return ( { "title": "study_in_progress", "count": self.count("study_in_progress"), "description": _(u"diagnose and analysis"), }, { "title": "in_progress", "count": self.count("in_progress"), "description": _(u"Setting up"), }, { "title": "realized", "count": self.count("realized"), "description": None }, )
def handleApply(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return self.send_request(data) messages = IStatusMessage(self.request) messages.add(_(u"The votes have been encoded correctly"), type=u"info")
class PositiveRatingRenderer(ExtendedRenderer): name = _(u"Positive rating ") def render_value(self, obj): annotations = IAnnotations(obj) vote = annotations.get("cioppino.twothumbs.yays") if vote: return len(annotations["cioppino.twothumbs.yays"]) return 0
class NegativeVotersListRenderer(ExtendedRenderer): name = _(u"Voters opposed") def render_value(self, obj): annotations = IAnnotations(obj) voters = [] vote = annotations.get("cioppino.twothumbs.nays") if vote: for voter in annotations["cioppino.twothumbs.nays"]: voters.append(voter) return ",".join(voters)
class IProject(model.Schema): """IProject""" title = schema.TextLine(title=DXMF(u"label_title", default=u"Title"), required=True) form.widget(project_theme=MultiSelect2FieldWidget) project_theme = schema.List( title=_(u"Domain(s) concerned"), value_type=schema.Choice(title=_(u"Domain(s) concerned"), vocabulary=u"collective.taxonomy.theme"), required=True, ) form.widget(project_district=MultiSelect2FieldWidget) project_district = schema.List( title=_(u"District(s) concerned"), value_type=schema.Choice( title=_(u"District(s) concerned"), vocabulary=u"collective.taxonomy.district", ), required=True, ) body = RichText(title=_(u"Content"), required=True) form.widget("body", RichTextFieldWidget) model.primary("body") form.mode(original_author="hidden") original_author = schema.TextLine(title=_(u"Original author"), required=False)
class UserVotesRenderer(ExtendedRenderer): name = _(u"Votes") def render_value(self, obj): projects = [] userid = obj.getProperty("id") portal = api.portal.get()["projets"] for project in api.content.find(context=portal, portal_type="Project"): annotations = IAnnotations(project.getObject()) vote = annotations.get("cioppino.twothumbs.yays") if vote: if userid in annotations["cioppino.twothumbs.yays"]: projects.append(project.Title) return projects
class WorkflowHistoryForm(Form): implements(IWorkflowForm) ignoreContext = True _states = ( "deposited", "project_analysis", "vote", "result_analysis", "selected", "rejected", "study_in_progress", "in_progress", "realized", ) @property def workflow(self): return self.context.workflow_history.values()[0] def update(self): current_state = api.content.get_state(obj=self.context) states = self._states[:self._states.index(current_state) + 1] for idx, state in enumerate(states): self.fields += Fields( InterfaceClass( "IWorkflowHistory{0}", attrs={ state: schema.Date(title=translate(state, domain="plone"), required=True) for l in self.workflow if l.get("review_state") == state }, )) super(WorkflowHistoryForm, self).update() @button.buttonAndHandler(_(u"Save"), name="save") def handleApply(self, action): data, errors = self.extractData() workflow_history = self.context.workflow_history for line in workflow_history.values()[0]: state = line.get("review_state") if state in data: line["time"] = DateTime( datetime.combine(data[state], datetime.min.time())) self.context.workflow_history = PersistentMapping( workflow_history.items()) self.request.response.redirect(self.context.absolute_url())
class UserBirthdateRenderer(UserPropertyRenderer): name = _(u"Birthdate") prop = "birthdate" def render_collection_entry(self, obj, value): return value.strftime("%d/%m/%Y") def render_style(self, obj, base_style): base_style.num_format_str = "dd/mm/yyyy" return base_style def render_value(self, obj): value = super(UserBirthdateRenderer, self).render_value(obj) if value: return self.render_collection_entry(obj, value)
class UserGenderRenderer(UserPropertyRenderer): name = _(u"Gender") prop = "gender" def render_value(self, obj): value = super(UserGenderRenderer, self).render_value(obj) if value: factory = getUtility(IVocabularyFactory, "ideabox.vocabularies.gender") vocabulary = factory(self.context) try: return translate( vocabulary.getTerm(obj.getProperty("gender")).title, target_language=api.portal.get_current_language(), ) except KeyError: return
class UserIamRenderer(UserPropertyRenderer): name = _(u"I am") prop = "iam" def render_value(self, obj): value = super(UserIamRenderer, self).render_value(obj) if value: factory = getUtility(IVocabularyFactory, "collective.taxonomy.iam") vocabulary = factory(self.context) try: return translate( vocabulary.getTerm(obj.getProperty("iam")).title, target_language=api.portal.get_current_language(), ) except KeyError: return
def update_user(self, user, data): updates = {} new_properties = { "last_name": data["last_name"] or translate(_(u"Anonymous"), context=self.request), "first_name": data["first_name"], "gender": data["gender"], "birthdate": data["birthdate"], "zip_code": data["zip_code"], "iam": data["iam"], "address": data["address"], } for field, new_value in new_properties.items(): if not new_value: continue if user.getProperty(field) != new_value: updates[field] = new_value user.setMemberProperties(mapping=updates)
class IEnhancedUserDataSchema(model.Schema): last_name = schema.TextLine(title=_(u"Last name or institution"), required=True) first_name = schema.TextLine(title=_(u"First name"), required=False) address = schema.Text(title=_(u"Address"), required=False) gender = schema.Choice(title=_(u"Gender"), required=True, vocabulary=u"ideabox.vocabularies.gender") birthdate = schema.Date(title=_(u"Birthdate"), required=True) zip_code = schema.Choice(title=_(u"Zip code"), required=True, vocabulary=u"ideabox.vocabularies.zip_code") iam = schema.Choice(title=_(u"I am"), required=True, vocabulary=u"collective.taxonomy.iam")
class UserAddressRenderer(UserPropertyRenderer): name = _(u"Address") prop = "address"
class UserFirstNameRenderer(UserPropertyRenderer): name = _(u"First name") prop = "first_name"
class UserLastNameRenderer(UserPropertyRenderer): name = _(u"Last name") prop = "last_name"
def title(self): return _("Projects in progression")
def title(self): return _("The 7 main themes")
def title(self): return _("The 7 main themes")
def title(self): return _("Projects in progression")
class UserZipCodeRenderer(UserPropertyRenderer): name = _(u"Zip code") prop = "zip_code"
class UserIdRenderer(UserPropertyRenderer): name = _(u"User ID") prop = "id"
def __call__(self, context): values = [{"MALE": _("MALE", u"Male")}, {"FEMALE": _("FEMALE", u"Female")}] return dict_list_2_vocabulary(values)
def title(self): return self.data.get("title") or _(u"Projects")