def schema(self): language = negotiate(context=self.request) or u'' return load_schema( aq_base(self.context).schema, language=language, cache_key=aq_base(self.context).schema_digest, )
def getContent(self): language = negotiate(context=self.request) or u'' context_language = get_navigation_root_language(self.context) if context_language.startswith(language): return self.context else: proxy = LanguageFieldsProxy(self.context) proxy._language = language return proxy
def __init__(self, context, request, content): language = negotiate(context=request) or u'' self.content = content self.schema = load_schema( aq_base(content).schema, language=language, cache_key=aq_base(content).schema_digest, ) super(SubmissionView, self).__init__(context, request)
def _createFolderStructure(self, folder, structure='ymd', date=None): """ Create a folder structure and then return our innermost folder """ if not date: date = DateTime() dateFormat = structure if '%B' in dateFormat: translation = getToolByName(self.context, 'translation_service') PLMF = MessageFactory('plonelocales') dateFormat = dateFormat.replace('%B', '%m') date = date.strftime(dateFormat) folderStructure = [str(p) for p in date.split('/')] index = dateFormat.split('/').index('%m') month_msgid = PLMF(translation.month_msgid(folderStructure[index])) try: target_language = i18n.negotiate(self.context.REQUEST) except: target_language = None transale_month = translate(month_msgid, target_language=target_language) folderStructure[index] = transale_month else: date = date.strftime(dateFormat) folderStructure = [str(p) for p in date.split('/')] container = self.element.container language = folder.Language() normalizer = getUtility(IIDNormalizer) portal_workflow = getToolByName(self.context, 'portal_workflow') pw = portal_workflow.doActionFor # We run IRuleExecutor here to make sure other rules will be # executed for the newly created folders executor = IRuleExecutor(self.context, None) for fId in folderStructure: fTitle = fId fId = normalizer.normalize(fId) if not fId in folder.objectIds(): _createObjectByType(container, folder, id=normalizer.normalize(fId), title=fTitle, description=fTitle) folder = folder[fId] pw(folder, 'publish') # this makes happy multilang sites folder.setLanguage(language) event = ObjectAddedEvent(folder, aq_parent(folder), fId) if executor is not None: executor(event) else: folder = folder[fId] return folder
def __init__(self, context, request): super(SubFlowSubmitForm, self).__init__(context, request) language = negotiate(context=request) or u'' context_language = get_navigation_root_language(self.context) if context_language.startswith(language or context_language): self.localized_context = context else: proxy = LanguageFieldsProxy(self.context) proxy._language = language self.localized_context = proxy
def __init__(self, context, request): super(SubmissionEditForm, self).__init__(context, request) language = negotiate(context=request) or u'' context_language = get_navigation_root_language(self.context) if context_language.startswith(language or context_language): self._locale_postfix = '' else: self._locale_postfix = '_' + language self.buttons = button.Buttons() self.handlers = button.Handlers()
def save_schema_from_schema_context(schema_context, event=None): assert event language = negotiate(context=getRequest()) or u'' context_language = get_navigation_root_language(schema_context.content) save_schema( schema_context.content, schema=schema_context.schema, language=not context_language.startswith(language or context_language) and language or u'', )
def default_fieldset_label(self): language = negotiate(context=self.request) or u'' try: try: return getattr( self.context, DEFAULT_FIELDSET_LABEL_FIELD + '_' + language, ) except AttributeError: return getattr(self.context, DEFAULT_FIELDSET_LABEL_FIELD) except AttributeError: return _(u'Form')
def schema(self): language = negotiate(context=self.request) or u'' try: return load_schema( aq_base(self.context).schema, language=language, cache_key=aq_base(self.context).schema_digest, ) except AttributeError: self.request.response.redirect( '{0:s}/@@design'.format(self.context.absolute_url()), ) return load_schema(DEFAULT_SCHEMA, cache_key=None)
def default_fieldset_label(self): language = negotiate(context=self.request) or u'' try: try: return self.context.aq_explicit.aq_acquire( DEFAULT_FIELDSET_LABEL_FIELD + '_' + language, ) except AttributeError: return self.context.aq_explicit.aq_acquire( DEFAULT_FIELDSET_LABEL_FIELD, ) except AttributeError: return _(u'Form')
def schema(self): try: language = negotiate(context=self.request) or u'' schema = load_schema( aq_base(self.context).schema, name='@@impersonate', language=language, cache_key=aq_base(self.context).schema_digest, ) alsoProvides(schema, IImpersonateFlowSchemaDynamic) return schema except (AttributeError, KeyError): return IFlowImpersonation
def __init__(self, context, request): super(FlowSubmitForm, self).__init__(context, request) language = negotiate(context=self.request) or u'' context_language = get_navigation_root_language(self.context) if context_language.startswith(language or context_language): self.localized_context = context else: proxy = LanguageFieldsProxy(self.context) proxy._language = language self.localized_context = proxy self.buttons = button.Buttons() self.handlers = button.Handlers() if 'disable_border' in self.request.form: del self.request.form['disable_border']
def __init__(self, context, request): language = negotiate(context=request) or u'' try: schema = load_schema( aq_base(context).schema, language=language, cache_key=None, ) except AttributeError: schema = load_schema(DEFAULT_SCHEMA, cache_key=None) super(FlowSchemaContext, self).__init__( schema, request, name='@@{0:s}'.format(self.__name__), title=_(u'design'), ) self.content = context
def render(self, target_language=None, **context): # We always include a ``request`` variable; it is (currently) # depended on in various expression types and must be defined request = context.setdefault("request", None) if target_language is None: try: target_language = i18n.negotiate(request) except Exception: target_language = None context["target_language"] = target_language # bind translation-method to request def translate( msgid, domain=None, mapping=None, target_language=None, default=None, context=None, ): if msgid is MV: # Special case handling of Zope2's Missing.MV # (Missing.Value) used by the ZCatalog but is # unhashable. # This case cannot arise in ordinary templates; msgid # comes from i18n:translate attributes, which does not # take a TALES expression, just a literal string. # However, the 'context' argument is available as an # implementation detail for macros return return fast_translate(msgid, domain, mapping, request, target_language, default) context["translate"] = translate if request is not None and not isinstance(request, six.string_types): content_type = self.content_type or "text/html" response = request.response if response and not response.getHeader("Content-Type"): response.setHeader("Content-Type", content_type) base_renderer = super(BaseTemplate, self).render return base_renderer(**context)
def get_submission_title(form, submission): language = negotiate(context=getRequest()) or u'' try: try: template = submission.aq_explicit.aq_acquire( SUBMISSION_TITLE_TEMPLATE_FIELD + '_' + language, ) except AttributeError: template = submission.aq_explicit.aq_acquire( SUBMISSION_TITLE_TEMPLATE_FIELD, ) return datetime.utcnow().strftime( interpolate(template, submission).encode('utf-8', 'ignore'), ).decode( 'utf-8', 'ignore') except AttributeError: return u'{0:s} {1:s}'.format( form.title, datetime.utcnow().strftime('%Y-%#m-%#d'), )
def fixed_language(language, request=None): """Context manager for forcing the current language by temporarily replacing the global language negotiator with a fixed language negotiator """ if request is None: request = getRequest() current_language = negotiate(context=request) or u'' if current_language != language: original = queryUtility(INegotiator) if original is not None: gsm = getGlobalSiteManager() replacement = FixedNegotiator(language) gsm.registerUtility(replacement, provided=INegotiator) try: yield finally: gsm.unregisterUtility(replacement, provided=INegotiator) gsm.registerUtility(original, provided=INegotiator) else: yield else: yield
def render(self, target_language=None, **context): # We always include a ``request`` variable; it is (currently) # depended on in various expression types and must be defined request = context.setdefault('request', None) if target_language is None: try: target_language = i18n.negotiate(request) except: target_language = None context['target_language'] = target_language # bind translation-method to request def translate(msgid, domain=None, mapping=None, target_language=None, default=None, context=None): if msgid is MV: # Special case handling of Zope2's Missing.MV # (Missing.Value) used by the ZCatalog but is # unhashable return return fast_translate(msgid, domain, mapping, request, target_language, default) context["translate"] = translate if request is not None and not isinstance(request, six.string_types): content_type = self.content_type or 'text/html' response = request.response if response and not response.getHeader("Content-Type"): response.setHeader("Content-Type", content_type) base_renderer = super(BaseTemplate, self).render return base_renderer(**context)
def schema(self): language = negotiate(context=self.request) or u'' try: try: schema = load_schema( aq_base(self.context).schema, name='++add++', language=language, cache_key=aq_base(self.context).schema_digest, ) alsoProvides(schema, IAddFlowSchemaDynamic) return schema except KeyError: schema = aq_base(self.context).schema.replace( 'flow.AuthorPortalContent', 'zope2.View', ) key = hashlib.md5(schema).hexdigest() return load_schema(schema, language=language, cache_key=key) except AttributeError: self.request.response.redirect( u'{0}/@@design'.format(self.context.absolute_url()), ) return load_schema(DEFAULT_SCHEMA, cache_key=None)
def render(self, target_language=None, **context): # We always include a ``request`` variable; it is (currently) # depended on in various expression types and must be defined request = context.setdefault('request', None) if target_language is None: try: target_language = i18n.negotiate(request) except: target_language = None context['target_language'] = target_language # bind translation-method to request def translate( msgid, domain=None, mapping=None, target_language=None, default=None, context=None): if msgid is MV: # Special case handling of Zope2's Missing.MV # (Missing.Value) used by the ZCatalog but is # unhashable return return fast_translate( msgid, domain, mapping, request, target_language, default) context["translate"] = translate if request is not None and not isinstance(request, six.string_types): content_type = self.content_type or 'text/html' response = request.response if response and not response.getHeader("Content-Type"): response.setHeader( "Content-Type", content_type) base_renderer = super(BaseTemplate, self).render return base_renderer(**context)
def translate( msgid, domain=None, mapping=None, context=None, target_language=None, default=None, plural=None, n=None): """Translate text. First setup some test components: >>> from zope import component, interface >>> import zope.i18n.interfaces >>> class TestDomain: ... interface.implements(zope.i18n.interfaces.ITranslationDomain) # noqa ... ... def __init__(self, **catalog): ... self.catalog = catalog ... ... def translate(self, text, *_, **__): ... return self.catalog[text] Normally, the translation system will use a domain utility: >>> component.provideUtility(TestDomain(eek=u'ook'), name='my.domain') >>> translate(u'eek', 'my.domain') u'ook' Normally, if no domain is given, or if there is no domain utility for the given domain, then the text isn't translated: >>> translate(u'eek') u'eek' Moreover the text will be converted to unicode: >>> translate('eek', 'your.domain') u'eek' A fallback domain factory can be provided. This is normally used for testing: >>> def fallback(domain=u''): ... return TestDomain(eek=u'test-from-' + domain) >>> interface.directlyProvides( # noqa ... fallback, ... zope.i18n.interfaces.IFallbackTranslationDomainFactory, ... ) >>> component.provideUtility(fallback) >>> translate(u'eek') u'test-from-' >>> translate(u'eek', 'your.domain') u'test-from-your.domain' """ if isinstance(msgid, Message): domain = msgid.domain default = msgid.default if mapping is None: mapping = msgid.mapping if default is None: default = unicode(msgid) if domain: util = queryUtility(ITranslationDomain, domain) if util is None: util = queryUtility(IFallbackTranslationDomainFactory) if util is not None: util = util(domain) else: util = queryUtility(IFallbackTranslationDomainFactory) if util is not None: util = util() if util is None: return interpolate(default, mapping) if target_language is None and context is not None: target_language = negotiate(context) return util.translate( msgid, mapping, context, target_language, default, plural, n, )
def handleApply(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return settings = IFeedSettings(self.context) api_key = settings.mailchimp_api_key next_url = self.nextURL() try: list_id = ( data.pop('list_id', None) or self.getContent().mailinglist ) try: name = data.pop('name') except KeyError: name = '' email = data.pop('email') interests = data.pop('interests') content = self.getContent() preselected = getattr(content, 'preselected_interest_groups', None) if preselected: if not interests: interests = preselected else: interests = interests + preselected if api_key: api = greatape.MailChimp(api_key, debug=False) # Negotiate language language = negotiate(self.request) # Split full name into first (given) and last name. try: fname, lname = queryUtility( INameSplitter, name=language, default=GenericNameSplitter ).split_name(name) except AttributeError: fname, lname = u'', u'' # Log subscription attempt. logger.info(("listSubscribe(%r, %r, %r, %r)" % ( list_id, email, fname, lname)).encode('utf-8')) merge_vars = { 'FNAME': fname.encode('utf-8'), 'LNAME': lname.encode('utf-8'), 'GROUPINGS': [ dict( id=grouping_id, groups=",".join( group. encode('utf-8'). replace(',', '\\,') for group in group_names ), ) for (grouping_id, group_names) in create_groupings(interests).items() ] } for name, value in data.items(): if value is not None: merge_vars[name.upper()] = value.encode('utf-8') try: result = api( method="listSubscribe", id=list_id, email_address=email, update_existing=True, replace_interests=False, merge_vars=merge_vars ) except greatape.MailChimpError, exc: logger.warn(exc.msg) # ... is not a valid interest grouping id for the list if exc.code == 270: return IStatusMessage(self.request).addStatusMessage( _(u"There was a problem signing you up for " u"the selected interest groups. This could " u"mean that the subscription service is " u"configured incorrectly. Please contact " u"the webmaster."), "error", ) else: if result: next_url += ('?' in next_url and '&' or '?') + 'success=yes' return IStatusMessage(self.request).addStatusMessage( _(u"Thank you for signing up. We'll send you a " u"confirmation message by e-mail shortly."), "info" ) IStatusMessage(self.request).addStatusMessage( _(u"An error occurred while processing your " u"request to sign up for ${email}. " u"Please try again!", mapping={'email': email}), "error")
def handleApply(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return settings = IFeedSettings(self.context) api_key = settings.mailchimp_api_key next_url = self.nextURL() try: list_id = (data.pop('list_id', None) or self.getContent().mailinglist) try: name = data.pop('name') except KeyError: name = '' email = data.pop('email') interests = data.pop('interests') content = self.getContent() preselected = getattr(content, 'preselected_interest_groups', None) if preselected: if not interests: interests = preselected else: interests = interests + preselected if api_key: api = greatape.MailChimp(api_key, debug=False) # Negotiate language language = negotiate(self.request) # Split full name into first (given) and last name. try: fname, lname = queryUtility( INameSplitter, name=language, default=GenericNameSplitter).split_name(name) except AttributeError: fname, lname = u'', u'' # Log subscription attempt. logger.info(("listSubscribe(%r, %r, %r, %r)" % (list_id, email, fname, lname)).encode('utf-8')) merge_vars = { 'FNAME': fname.encode('utf-8'), 'LNAME': lname.encode('utf-8'), 'GROUPINGS': [ dict( id=grouping_id, groups=",".join( group.encode('utf-8').replace(',', '\\,') for group in group_names), ) for (grouping_id, group_names ) in create_groupings(interests).items() ] } for name, value in data.items(): if value is not None: merge_vars[name.upper()] = value.encode('utf-8') try: result = api(method="listSubscribe", id=list_id, email_address=email, update_existing=True, replace_interests=False, merge_vars=merge_vars) except greatape.MailChimpError, exc: logger.warn(exc.msg) # ... is not a valid interest grouping id for the list if exc.code == 270: return IStatusMessage(self.request).addStatusMessage( _(u"There was a problem signing you up for " u"the selected interest groups. This could " u"mean that the subscription service is " u"configured incorrectly. Please contact " u"the webmaster."), "error", ) else: if result: next_url += ('?' in next_url and '&' or '?') + 'success=yes' return IStatusMessage(self.request).addStatusMessage( _(u"Thank you for signing up. We'll send you a " u"confirmation message by e-mail shortly."), "info") IStatusMessage(self.request).addStatusMessage( _( u"An error occurred while processing your " u"request to sign up for ${email}. " u"Please try again!", mapping={'email': email}), "error")
def handleApply(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return settings = IFeedSettings(self.context) api_key = settings.mailchimp_api_key try: list_id = self.context.mailinglist email = data['email'] name = data['name'] interests = data['interests'] if api_key: api = greatape.MailChimp(api_key, debug=False) # Negotiate language language = negotiate(self.request) # Split full name into first (given) and last name. fname, lname = queryUtility( INameSplitter, name=language, default=GenericNameSplitter ).split_name(name) try: result = api( method="listSubscribe", id=list_id, email_address=email, update_existing=True, replace_interests=False, merge_vars={ 'FNAME': fname.encode('utf-8'), 'LNAME': lname.encode('utf-8'), 'GROUPINGS': [ dict( id=grouping_id, groups=",".join( group.\ encode('utf-8').\ replace(',', '\\,') for group in group_names ), ) for (grouping_id, group_names) in create_groupings(interests).items() ] }, ) except greatape.MailChimpError, exc: logger.warn(exc.msg) else: if result: return IStatusMessage(self.request).addStatusMessage( _(u"Thank you for signing up. We'll send you a " u"confirmation message by e-mail shortly."), "info" ) IStatusMessage(self.request).addStatusMessage( _(u"An error occurred while processing your " u"request to sign up for ${email}. " u"Please try again!", mapping={'email': email}), "error")