def sendPasswdResetMail(member, event): """ """ state = event.new_state.getId() if state == "enabled": registration = getToolByName(member, 'portal_registration') email = member.email request = member.REQUEST try: response = registration.registeredNotify(email) IStatusMessage(request).addStatusMessage( _p(u'create_membrane_account_succesful', default=u"Your account has been created,we " "have sent instructions for setting a " "password to this email address: ${address}", mapping={u'address': email}), type='info') # return obj except ConflictError: # Let Zope handle this exception. raise except Exception: portal = getSite() ctrlOverview = getMultiAdapter((portal, request), name='overview-controlpanel') mail_settings_correct = not ctrlOverview.mailhost_warning() if mail_settings_correct: # The email settings are correct, so the most # likely cause of an error is a wrong email # address. We remove the account: # Remove the account: self.context.acl_users.userFolderDelUsers( [user_id], REQUEST=request) IStatusMessage(request).addStatusMessage( _p(u'status_fatal_password_mail', default=u"Failed to create your account: we were " "unable to send instructions for setting a password " "to your email address: ${address}", mapping={u'address': email}), type='error') return else: # This should only happen when an admin registers # a user. The admin should have seen a warning # already, but we warn again for clarity. IStatusMessage(request).addStatusMessage( _p(u'status_nonfatal_password_mail', default=u"This account has been created, but we " "were unable to send instructions for setting a " "password to this email address: ${address}", mapping={u'address': email}), type='warning') return else: pass
def workflowHistory(self, complete=True): """Return workflow history of this context. Taken from plone_scripts/getWorkflowHistory.py """ context = aq_inner(self.context) # check if the current user has the proper permissions # if not (_checkPermission('Request review', context) or # _checkPermission('Review portal content', context)): # return [] workflow = getToolByName(context, 'portal_workflow') membership = getToolByName(context, 'portal_membership') review_history = [] try: # get total history # import pdb # pdb.set_trace() review_history = workflow.getInfoFor(context, 'review_history') if not complete: # filter out automatic transitions. review_history = [r for r in review_history if r['action']] else: review_history = list(review_history) portal_type = context.portal_type anon = _p(u'label_anonymous_user', default=u'Anonymous User') for r in review_history: r['type'] = 'workflow' r['transition_title'] = workflow.getTitleForTransitionOnType( r['action'], portal_type) or _p("Create") r['state_title'] = workflow.getTitleForStateOnType( r['review_state'], portal_type) actorid = r['actor'] r['actorid'] = actorid if actorid is None: # action performed by an anonymous user r['actor'] = {'username': anon, 'fullname': anon} r['actor_home'] = '' else: r['actor'] = membership.getMemberInfo(actorid) if r['actor'] is not None: r['actor_home'] = self.navigation_root_url + '/author/' + actorid else: # member info is not available # the user was probably deleted r['actor_home'] = '' review_history.reverse() except WorkflowException: log('plone.app.layout.viewlets.content: ' '%s has no associated workflow' % context.absolute_url(), severity=logging.DEBUG) return review_history
def handle_edit_action(self, action, data): CheckAuthenticator(self.request) if form.applyChanges(self.context, self.form_fields, data, self.adapters): self.status = _p("Changes saved.") notify(ConfigurationChangedEvent(self, data)) self._on_save(data) else: self.status = _p("No changes made.")
def __call__(self): self.request.set('disable_border', True) self.errors = {} props = getToolByName(self.context, 'portal_properties').pcommerce_properties if self.request.form.has_key('pcommerce_save'): adapter = ITaxes(self.context) taxes = [] raw = self.request.form.get('taxes', []) for tax in raw: if not tax.has_key('remove') or not tax['remove']: try: tax = {'id': tax['id'], 'tax': float(tax['tax']), 'zone': tax['zone'], 'taxname': tax['taxname']} if tax['zone'] == '': self.errors[tax['id']] = _(u'Please provide a zone name') elif tax['taxname'] == '': self.errors[tax['id']] = _(u'Please provide a tax name') if not self.errors.has_key(tax['id']): taxes.append(tax) except: self.errors[tax['id']] = _(u'Please enter a floating point number (e.g. 7.6)') for prop in self.properties: self.values[prop] = self.request.form.get(prop, '') taxincl = None tax = self.request.form.get('taxincl.tax', '') taxname = self.request.form.get('taxincl.taxname', '') try: if taxname == '' and tax != '': self.errors['taxincl'] = _(u'Please provide a tax name') else: if tax == '': tax = 0.0 taxincl = (float(tax), taxname) except: self.errors['taxincl'] = _(u'Please enter a floating point number (e.g. 7.6)') if not self.errors: adapter.edit(taxes) adapter.taxincl = taxincl IStatusMessage(self.request).addStatusMessage(_p('Properties saved'), 'info') for prop in self.properties: if prop == 'columns': self.values[prop] = int(self.values[prop]) props._setPropValue(prop, self.values[prop]) else: IStatusMessage(self.request).addStatusMessage(_p(u'Please correct the indicated errors'), 'error') for prop in self.properties: self.values[prop] = props.getProperty(prop, '') return self.template()
def validate(self, tag): errors = {} required = self.required data = self.request.get(tag, {}) for field in required: if not data.get(field, None): errors[tag+'.'+field] = _p(u'This field is required, please provide some information.') if not email_re.match(data.get('email', '')): errors[tag+'.'+'email'] = _p(u'Please submit a valid email address.') return errors
def handle_rename_action(self, action, data): context = aq_inner(self.context) oldid = context.getId() oldtranslatedids = self.handler.get_translated_ids(oldid) descriptions = applyData(context, self.form_fields, data, self.adapters) statusmessage = IStatusMessage(self.request) if descriptions: statusmessage.addStatusMessage(_p(u'Changes saved.'), u'success'); else: statusmessage.addStatusMessage(_p(u'No changes made.')); self.request.RESPONSE.redirect(context.absolute_url())
def send(self, action, message, recipients): """ send the notifications """ mailhost = getToolByName(self.context, 'MailHost') portal = getToolByName(self.context, 'portal_url').getPortalObject() mfrom = '%s <%s>' % (portal.getProperty('email_from_name', ''), portal.getProperty('email_from_address', '')) #subject = translate(_('email_subject', default='New notification from ${site}', mapping={'site': portal.getProperty('title', '')}), context=self.context.request) subject = translate(_('email_subject', default='New notification from ${site}', mapping={'site': portal.getProperty('title', '')}), context=self.context.REQUEST) wftool = getToolByName(self.context, 'portal_workflow') utils = getToolByName(self.context, 'plone_utils') mship = getToolByName(self.context, 'portal_membership') wnutils = getMultiAdapter((self.context, self.context.REQUEST), name=u'workflownotification') workflow = wftool.getWorkflowById(wnutils.getWorkflowFor(self.context)) tdef = workflow.transitions.get(action, None) if not tdef: return issuer = mship.getMemberInfo() if not issuer: issuer = {'username': '******'} replacement = dict(name='', title=self.context.Title(), url=self.context.absolute_url(), #old_state=translate(_p(utils.getReviewStateTitleFor(self.context)), context=self.context.request), #new_state=translate(_p(wftool.getTitleForStateOnType(tdef.new_state_id, self.context.portal_type)), context=self.context.request), #transition=translate(_p(tdef.actbox_name), context=self.context.request), old_state=translate(_p(utils.getReviewStateTitleFor(self.context)), context=self.context.REQUEST), new_state=translate(_p(wftool.getTitleForStateOnType(tdef.new_state_id, self.context.portal_type)), context=self.context.REQUEST), transition=translate(_p(tdef.actbox_name), context=self.context.REQUEST), issuer=safe_unicode(issuer.get('fullname', issuer['username']))) try: anon_message = message % replacement except: # replacement failed anon_message = message sent = [] receivers = [] for r in recipients: replacement.update(dict(name=r.name)) try: msg = message % replacement except: # replacement failed msg = message if not r.email in sent: mailhost.send(msg, mto=r.email, mfrom=mfrom, subject=subject, charset='utf-8') sent.append(r.email) receivers.append(r) return receivers, anon_message
def setProperties(self): context = aq_inner(self.context) new = self.request.form.get('new_definition', None) columns = self.request.form.get('new_definition_columns', []) error = 0 if new and new['name']: try: self._definitions.addDefinition(new['name'], new['style'], self._formatColumns(columns)) except: transaction.abort() error = _(u'Unable to parse the columns field of the definition to be added') modify = self.request.form.get('definitions', [])[:] for definition in modify: if definition.has_key('delete'): self._definitions.removeDefinition(definition['id']) if definition.has_key('delete'): continue try: columns = self.request.form.get('definition_columns_%s' % definition['origname'], []) self._definitions.addDefinition(definition['name'], definition['style'], self._formatColumns(columns), definition['id']) except: transaction.abort() error = _(u'Unable to parse the columns field of one of the definitions to be modified') statusmessage = IStatusMessage(self.request) if error: statusmessage.addStatusMessage(error, 'error') else: statusmessage.addStatusMessage(_p(u'Changes saved.'), 'info')
def submit(self, action): data, errors = self.extractData() if errors: self.status = _(u"Please correct errors") return inc = str(int(getattr(self.context, 'registrant_increment', '0')) + 1) data['id'] = '%s' % inc self.context.registrant_increment = inc obj = _createObjectByType("dexterity.membrane.sponsormember", self.context, data['id']) # del data['agree'] for k, v in data.items(): setattr(obj, k, v) obj.reindexObject() email = data.get('email', '') IStatusMessage(self.request).addStatusMessage( _p(u'create_membrane_account_succesful_pending_audit', default=u"Your account:${address} has been created,Please wait for audit", mapping={u'address': email}), type='info') return
def set_portal_message(self, message, msg_type='info'): """ Adds or update the portal message. It hides both portal messages (the normal one and the KSS one and recreates a fresh one. """ # We hide the existing ones. self('dl.portalMessage').hide() # We delete our portal message. self('#jq_portal_msg').remove() # And create a fresh one. html = '<dl id="jq_portal_msg" class="portalMessage %s">' +\ '<dt>%s</dt><dd>%s</dd></dl>' # We get the correct title (Info, Warning, Error) if not msg_type in ['info', 'warning', 'error']: msg_type='info' lang = self._get_default_language() msg_title = translate(_p(unicode(msg_type.capitalize())), target_language=lang) # The message might not be translated. if type(message) == Message: message = translate(message, target_language=lang) self('#viewlet-above-content').before(html % (msg_type, msg_title, message))
def create(self, data): inc = str(int(getattr(self.context, 'registrant_increment', '999999')) + 1) data['id'] = '%s' % inc self.context.registrant_increment = inc obj = _createObjectByType("dexterity.membrane.member", self.context, data['id']) # publishinfo = data['publishinfo'] del data['privacy'] del data['agree'] del data['captcha'] # del data['publishinfo'] for k, v in data.items(): setattr(obj, k, v) registration = getToolByName(self.context, 'portal_registration') # portal_workflow = getToolByName(self.context, 'portal_workflow') # if publishinfo: # portal_workflow.doActionFor(obj, 'anon_publish') # else: # portal_workflow.doActionFor(obj, 'anon_hide') obj.reindexObject() email = data.get('email', '') IStatusMessage(self.request).addStatusMessage( _p(u'create_membrane_account_succesful_pending_audit', default=u"Your account:${address} has been created,Please wait for audit", mapping={u'address': email}), type='info') return obj
def handle_cancel_action(self, action, data): IStatusMessage(self.request).addStatusMessage(_p("Changes canceled."), type="info") url = getMultiAdapter((self.context, self.request), name='absolute_url')() self.request.response.redirect(url + '/plone_control_panel') return ''
def submit(self, action): data, errors = self.extractData() if not(data['agree']): self.status = "must agree this private policy" return inc = str(int(getattr(self.context, 'registrant_increment', '999999')) + 1) data['id'] = '%s' % inc self.context.registrant_increment = inc obj = _createObjectByType("dexterity.membrane.member", self.context, data['id']) del data['agree'] for k, v in data.items(): setattr(obj, k, v) urltool = getToolByName(self.context, 'portal_url') portal = urltool.getPortalObject() self.request.response.redirect(portal.absolute_url()) email = data.get('email', '') IStatusMessage(self.request).addStatusMessage( _p(u'create_membrane_account_succesful_pending_audit', default=u"Your account:${address} has been created,Please wait for audit", mapping={u'address': email}), type='info') return
def _parse(self, menu): di = OrderedDict() for value in menu: id = value.get('id', value.get('title')) extra = value.get('extra', None) separator = False if extra: separator = extra.get('separator', None) title = value.get('title') if isinstance(title, str): translated_title = translate(_p(title), context=self.request) else: translated_title = translate(value.get('title'), domain=_p, context=self.request) su = OrderedDict(label=translated_title, action=self._action(value.get('action', '')), icon=value.get('icon', ''), _class=value.get('class', ''), separator_before=separator, _disabled=(not value.get('action', False) and separator) and True or False, ) if value.get('submenu', None): su.update(OrderedDict(submenu=self._parse(value.get('submenu')))) di[id] = su return di
def update(self): super(FoundationDashboard, self).update() if self.empty() and self.can_edit(): status = IStatusMessage(self.request) msg = _p(u"info_empty_dashboard") msg = translate(msg, domain='plone', context=self.request) status.add(msg, "info")
def setProperties(self): context = aq_inner(self.context) utils = getToolByName(context, 'plone_utils') self.errors = {} for prop in self.properties: self.values[prop] = self.request.form.get(prop, None) if self.values[prop] == '': self.values[prop] = None if prop in self.required and self.values[prop] is None: self.errors[prop] = _p(u'This field is required') if len(self.errors) > 0: utils.addPortalMessage(_p(u'Please correct the indicated errors')) else: props = getToolByName(context, 'portal_properties').saferpay_properties for property in self.properties: props._setPropValue(property, self.values[property]) utils.addPortalMessage(_p(u'Properties saved'))
def workflowHistory(self, complete=True): """Return workflow history of this context. Taken from plone_scripts/getWorkflowHistory.py """ context = aq_inner(self.context) # check if the current user has the proper permissions # if not (_checkPermission('Request review', context) or # _checkPermission('Review portal content', context)): # return [] workflow = getToolByName(context, "portal_workflow") membership = getToolByName(context, "portal_membership") review_history = [] try: # get total history # import pdb # pdb.set_trace() review_history = workflow.getInfoFor(context, "review_history") if not complete: # filter out automatic transitions. review_history = [r for r in review_history if r["action"]] else: review_history = list(review_history) portal_type = context.portal_type anon = _p(u"label_anonymous_user", default=u"Anonymous User") for r in review_history: r["type"] = "workflow" r["transition_title"] = workflow.getTitleForTransitionOnType(r["action"], portal_type) or _p("Create") r["state_title"] = workflow.getTitleForStateOnType(r["review_state"], portal_type) actorid = r["actor"] r["actorid"] = actorid if actorid is None: # action performed by an anonymous user r["actor"] = {"username": anon, "fullname": anon} r["actor_home"] = "" else: r["actor"] = membership.getMemberInfo(actorid) if r["actor"] is not None: r["actor_home"] = self.navigation_root_url + "/author/" + actorid else: # member info is not available # the user was probably deleted r["actor_home"] = "" review_history.reverse() except WorkflowException: log( "plone.app.layout.viewlets.content: " "%s has no associated workflow" % context.absolute_url(), severity=logging.DEBUG, ) return review_history
def setProperties(self): context = aq_inner(self.context) utils = getToolByName(context, 'plone_utils') self.errors = {} for prop in self.properties: self.values[prop] = self.request.form.get(prop, None) if self.values[prop] == '': self.values[prop] = None if prop in self.required and self.values[prop] is None: self.errors[prop] = _p(u'This field is required') if len(self.errors) > 0: utils.addPortalMessage(_p(u'Please correct the indicated errors')) else: props = getToolByName(context, 'portal_properties').paypal_properties for property in self.properties: props._setPropValue(property, self.values[property]) utils.addPortalMessage(_p(u'Properties saved'))
class ArticleSchema(form.Schema, IDocument): """An audio file. """ image = NamedBlobImage(title=_(u"Image"), required=False) image_position = schema.Choice(title=_(u"Image position"), vocabulary=vocabularies.image_position, required=False) text = RichText(title=_p(u"Text"), required=False)
class FavoritingActionAddForm(AddForm): form_fields = form.FormFields(IFavoritingAction) label = _(u'Add favoriting action') description = _(u'An action which can add or remove an object ' u'to the user favorites') form_name = _p(u'Configure element') def create(self, data): a = FavoritingAction() form.applyChanges(a, self.form_fields, data) return a
class WatchingActionAddForm(AddForm): form_fields = form.FormFields(IWatchingAction) label = _(u'Add watching action') description = _(u'An action which can add or remove a user ' u'from the watchers list') form_name = _p(u'Configure element') def create(self, data): a = WatchingAction() form.applyChanges(a, self.form_fields, data) return a
def testPasswordValidity(self, password, confirm=None): # We escape the test if it looks like a generated password (with default length of 56 chars) if password is not None and password.startswith('G-') and len(password) == len(self.origGeneratePassword()) + 2: return None err = self.pasValidation('password', password) if err: return err if confirm is not None and confirm != password: return _p(u'Your password and confirmation did not match. ' u'Please try again.') return None
def getMenuItems(self, context, request): """Return menu item entries in a TAL-friendly form.""" results = BaseFactoriesMenu.getMenuItems(self, context, request) factories_view = getMultiAdapter((context, request), name='folder_factories') haveMore = False include = None addContext = factories_view.default_page_add_context() if not addContext: return results allowedTypes = _allowedTypes(request, addContext) constraints = IConstrainTypes(addContext, None) if constraints is not None: include = constraints.getImmediatelyAddableTypes() if len(include) < len(allowedTypes): haveMore = True results.append({'title' : _p(u'folder_add_to_default_page', default=u'Add to default page'), 'description' : _p(u'Add content to the default page'), 'action' : None, 'selected' : False, 'icon' : None, 'extra' : {'id': 'add-to-default', 'separator': 'actionSeparator', 'class': ''}, 'submenu' : None, }) results += factories_view.default_page_addable_types(include=include) if haveMore: url = '%s/folder_factories' % (addContext.absolute_url(),) results.append({ 'title' : _p(u'folder_add_more', default=u'More\u2026'), 'description' : _p(u'Show all available content types'), 'action' : url, 'selected' : False, 'icon' : None, 'extra' : {'id': 'more', 'separator': None, 'class': ''}, 'submenu' : None, }) constraints = ISelectableConstrainTypes(addContext, None) if constraints is not None: if constraints.canSetConstrainTypes() and constraints.getDefaultAddableTypes(): url = '%s/folder_constraintypes_form' % (addContext.absolute_url(),) results.append({'title' : _p(u'folder_add_settings', default=u'Restrictions\u2026'), 'description' : _p(u'title_configure_addable_content_types', default=u'Configure which content types can be added here'), 'action' : url, 'selected' : False, 'icon' : None, 'extra' : {'id': 'settings', 'separator': None, 'class': ''}, 'submenu' : None, }) return results
def testPasswordValidity(self, password, confirm=None): # We escape the test if it looks like a generated password (with default length of 56 chars) if password is not None and password.startswith('G-') and len(password) == len(self.origGeneratePassword()) + 2: return None # We also skip the test if a skip_password_check session variable is set if password is not None and self.REQUEST['SESSION'].get('skip_password_check'): return None err = self.pasValidation('password', password) if err: return err if confirm is not None and confirm != password: return _p(u'Your password and confirmation did not match. ' u'Please try again.') return None
def collections(self): plone = component.getMultiAdapter((self.context, self.request), name=u'plone') provider = ICollectionsProvider(self.context) manageable = interfaces.IManageable(self.context) items = manageable.getList(provider.getCollections(component=self.component), component=self.component) i = 0 l = len(items) collections = [] for item in items: more_link = item['obj'].Schema()['more'].get(item['obj']) item.update({'title': item['brain'].Title, 'class': self._class(item['brain'], i, l), 'description': item['brain'].Description, 'url': item['brain'].getURL(), 'results': [], 'more': False, 'more_link': more_link if more_link else _p(u'read_more', default=u'Read More…')}) results = item['obj'].queryCatalog() limit = self.results if item['obj'].getLimitNumber(): limit = item['obj'].getItemCount() rl = min(limit, len(results)) if limit > 0 else len(results) ri = 0 for record in results: if limit > 0 and len(item['results']) == limit: item['more'] = self.more break result = {'title': record.Title, 'class': _css_class(ri, rl), 'description': record.Description, 'url': record.getURL(), 'brain': record, } if self.date: date = getattr(record, self.date, None) if date is not None: try: result['date'] = plone.toLocalizedTime(date) except ValueError: # not properly initialized fields might have values # before 999 that can't be handled pass item['results'].append(result) ri += 1 if len(item['results']): collections.append(item) i += 1 return collections
def render(self): """ 项目状态转换按钮 后台响应逻辑。 input:{subject:'please approve';actionid:'chuyang'} output:{result,status,message} """ data = self.request.form subject = data['subject'] #workflow transition id actionid = data['actionid'] actiontype = data['actiontype'] if actiontype == 'submit': transition = "submit2%s" % actionid else: transition = "retract2%s" % actionid context = aq_inner(self.context) brains = self.getChildrens(context) # import pdb # pdb.set_trace() for bn in brains: try: obj = bn.getObject() self.wf().doActionFor(obj, transition, comment=subject) except: continue try: self.wf().doActionFor(context, transition, comment=subject) newstatus = self.context.translate(_p(actionid)) ajaxtext = u"%(project)s项目已成功切换到:<strong>%(status)s</strong>状态。" % ( { "project": context.title, "status": newstatus }) callback = { "result": True, "status": newstatus, "message": ajaxtext } except: callback = {"result": False, "status": "", "message": ""} self.request.response.setHeader('Content-Type', 'application/json') return json.dumps(callback)
def __call__(self): self.errors = {} if 'header_table_submitted' in self.request: schema = self.context.Schema() fields = schema.fields() form = self.request.form for field in fields: fieldname = field.getName() if fieldname in form: if fieldname + "_uid" in form: # references (process_form would normally do *_uid trick) field.getMutator(self.context)(form[fieldname + "_uid"]) else: # other fields field.getMutator(self.context)(form[fieldname]) message = _p("Changes saved.") self.context.plone_utils.addPortalMessage(message, 'info') return self.template()
def render(self): """ 项目状态转换按钮 后台响应逻辑。 input:{subject:'please approve';actionid:'chuyang'} output:{result,status,message} """ data = self.request.form subject = data["subject"] # workflow transition id actionid = data["actionid"] actiontype = data["actiontype"] if actiontype == "submit": transition = "submit2%s" % actionid else: transition = "retract2%s" % actionid context = aq_inner(self.context) brains = self.getChildrens(context) # import pdb # pdb.set_trace() for bn in brains: try: obj = bn.getObject() self.wf().doActionFor(obj, transition, comment=subject) except: continue try: self.wf().doActionFor(context, transition, comment=subject) newstatus = self.context.translate(_p(actionid)) ajaxtext = u"%(project)s项目已成功切换到:<strong>%(status)s</strong>状态。" % ( {"project": context.title, "status": newstatus} ) callback = {"result": True, "status": newstatus, "message": ajaxtext} except: callback = {"result": False, "status": "", "message": ""} self.request.response.setHeader("Content-Type", "application/json") return json.dumps(callback)
def update(self): wftool = getToolByName(aq_inner(self.context), 'portal_workflow') transitions = [t['id'] for t in wftool.getTransitionsFor(aq_inner(self.context))] if not self.workflow_action in transitions: raise Unauthorized if self.standalone: self.template = self.template_standalone self.utils = getMultiAdapter((self.context, self.request), name=u'workflownotification') self.recipients = self.utils.getRecipientsFor(self.context, self.workflow_action) self.message_template = self.utils.getTemplateFor(self.context, self.workflow_action) actions = form.Actions() for name, a in self.actions.byname.items(): if name == 'form.actions.label_send': a.label = _p(wftool.getTitleForTransitionOnType(self.workflow_action, self.context.portal_type)) actions.append(a) self.actions = actions self.form_fields.get('message').field.default = self.message_template super(NotificationForm, self).update()
def __call__(self): self.errors = {} if 'header_table_submitted' in self.request: schema = self.context.Schema() fields = schema.fields() form = self.request.form for field in fields: fieldname = field.getName() if fieldname in form: # Handle (multiValued) reference fields # https://github.com/bikalims/bika.lims/issues/2270 uid_fieldname = "{}_uid".format(fieldname) if uid_fieldname in form: value = form[uid_fieldname] if field.multiValued: value = value.split(",") field.getMutator(self.context)(value) else: # other fields field.getMutator(self.context)(form[fieldname]) message = _p("Changes saved.") self.context.plone_utils.addPortalMessage(message, 'info') return self.template()
def output(self,braindata): "根据参数total,braindata,返回jason 输出" outhtml = "" k = 0 for i in braindata: status = self.context.translate(_p(i.review_state)) out = """<tr class="text-left"> <td class="col-md-1 text-center">%(num)s</td> <td class="col-md-3 text-left"><a href="%(objurl)s">%(title)s</a></td> <td class="col-md-6 text-left">%(description)s</td> <td class="col-md-1 text-center">%(status)s</td> <td class="col-md-1 text-center">%(date)s</td> </tr> """% dict(objurl="%s/@@view" % i.getURL(), num=str(k + 1), title=i.Title, description= i.Description, status = status.encode('utf-8'), date = i.created.strftime('%Y-%m-%d')) outhtml = "%s%s" %(outhtml ,out) k = k + 1 return outhtml
def output(self, braindata): "根据参数total,braindata,返回jason 输出" outhtml = "" k = 0 for i in braindata: status = self.context.translate(_p(i.review_state)) out = """<tr class="text-left"> <td class="col-md-1 text-center">%(num)s</td> <td class="col-md-3 text-left"><a href="%(objurl)s">%(title)s</a></td> <td class="col-md-6 text-left">%(description)s</td> <td class="col-md-1 text-center">%(status)s</td> <td class="col-md-1 text-center">%(date)s</td> </tr> """ % dict( objurl="%s/@@view" % i.getURL(), num=str(k + 1), title=i.Title, description=i.Description, status=status.encode('utf-8'), date=i.created.strftime('%Y-%m-%d')) outhtml = "%s%s" % (outhtml, out) k = k + 1 return outhtml
def build(self): menu = getMenu('plone_contentmenu', self.context, self.request) menu = self.separateMenu(menu) results = self._parse(menu) context_state = getMultiAdapter((self.context, self.request), name=u'plone_context_state') actions = context_state.actions action_list = [] if context_state.is_structural_folder(): action_list = actions('folder') action_list.extend(self.filterActionlist(actions('object'))) contentaction = OrderedDict() for action in action_list: di = OrderedDict(label=translate(_p(action.get('title')), context=self.request), action=self._action(action.get('url')), icon=action.get('id'), ) contentaction[action.get('id')] = di results['contentaction'] = OrderedDict(label=translate(_('Content actions'), context=self.request), submenu=contentaction) return results
class WatchingActionEditForm(EditForm): form_fields = form.FormFields(IWatchingAction) label = _(u'Edit watching action') description = _(u'An action which can add or remove a user ' u'from the watchers list') form_name = _p(u'Configure element')
def __call__(self): self.request.set('disable_border', True) self.errors = {} props = getToolByName(self.context, 'portal_properties').pcommerce_properties if self.request.form.has_key('pcommerce_save'): adapter = ITaxes(self.context) taxes = [] raw = self.request.form.get('taxes', []) for tax in raw: if not tax.has_key('remove') or not tax['remove']: try: tax = { 'id': tax['id'], 'tax': float(tax['tax']), 'zone': tax['zone'], 'taxname': tax['taxname'] } if tax['zone'] == '': self.errors[tax['id']] = _( u'Please provide a zone name') elif tax['taxname'] == '': self.errors[tax['id']] = _( u'Please provide a tax name') if not self.errors.has_key(tax['id']): taxes.append(tax) except: self.errors[tax['id']] = _( u'Please enter a floating point number (e.g. 7.6)') for prop in self.properties: self.values[prop] = self.request.form.get(prop, '') taxincl = None tax = self.request.form.get('taxincl.tax', '') taxname = self.request.form.get('taxincl.taxname', '') try: if taxname == '' and tax != '': self.errors['taxincl'] = _(u'Please provide a tax name') else: if tax == '': tax = 0.0 taxincl = (float(tax), taxname) except: self.errors['taxincl'] = _( u'Please enter a floating point number (e.g. 7.6)') if not self.errors: adapter.edit(taxes) adapter.taxincl = taxincl IStatusMessage(self.request).addStatusMessage( _p('Properties saved'), 'info') for prop in self.properties: if prop == 'columns': self.values[prop] = int(self.values[prop]) props._setPropValue(prop, self.values[prop]) else: IStatusMessage(self.request).addStatusMessage( _p(u'Please correct the indicated errors'), 'error') for prop in self.properties: self.values[prop] = props.getProperty(prop, '') return self.template()
max_size='no', sizes={ 'large': (768, 768), 'preview': (400, 400), 'mini': (200, 200), 'thumb': (128, 128), 'tile': (64, 64), 'icon': (32, 32), 'listing': (16, 16), }, validators=( ('isNonEmptyFile', V_REQUIRED), ('checkImageMaxSize', V_REQUIRED), ), widget=ImageWidget( label=_p(u'label_news_image', default=u'Image'), show_content_type=False, ), ), StringField(name='imageCaption', required=False, searchable=True, widget=StringWidget(description='', label=_p(u'label_image_caption', default=u'Image Caption'), size=40)), )) for field in ( 'creators', 'contributors',
# -*- coding: utf-8 -*- message = """<html> <body> <p>%(from)s</p> %(message)s <hr/> <p><a href="%(url)s">%(url_text)s</a></p> </body> </html> """ # dummy i18n helper for workflow states #from zope.i18nmessageid import MessageFactory from Products.CMFPlone import PloneMessageFactory as _p #workflow status dummy = _p("fangan")
def __call__(self, context): sm = getGlobalSiteManager() registrations = [a for a in sm.registeredAdapters() if a.provided == ICompoundCriterionFilter] terms = [SimpleTerm(adapter.name, adapter.name, _p(adapter.name)) for adapter in registrations] return SimpleVocabulary(terms)
class FavoritingActionEditForm(EditForm): form_fields = form.FormFields(IFavoritingAction) label = _(u'Edit favoriting action') description = _(u'An action which can add or remove an object ' u'to the user favorites') form_name = _p(u'Configure element')
class LeadImagePrefsForm(ControlPanelForm): """ The view class for the lead image preferences form. """ implements(ILeadImagePrefsForm) form_fields = form.FormFields(ILeadImagePrefsForm) label = _(u'Content Lead Image Settings Form') description = _(u'Select properties for Content Lead Image') form_name = _(u'Content Lead Image Settings') # handle_edit_action and handle_cancel_action are copied from # ControlPanelForm because they are overriden by my handle_scales_action @form.action(_p(u'label_save', default=u'Save'), name=u'save') def handle_edit_action(self, action, data): CheckAuthenticator(self.request) if form.applyChanges(self.context, self.form_fields, data, self.adapters): self.status = _p("Changes saved.") notify(ConfigurationChangedEvent(self, data)) self._on_save(data) else: self.status = _p("No changes made.") @form.action(_p(u'label_cancel', default=u'Cancel'), validator=null_validator, name=u'cancel') def handle_cancel_action(self, action, data): IStatusMessage(self.request).addStatusMessage(_p("Changes canceled."), type="info") url = getMultiAdapter((self.context, self.request), name='absolute_url')() self.request.response.redirect(url + '/plone_control_panel') return '' @form.action(_(u'label_recreate_scales', default=u'Recreate scales'), name=u'scales', validator=null_validator) def handle_scales_action(self, action, data): CheckAuthenticator(self.request) number = 0 ctool = getToolByName(self.context, 'portal_catalog') items = ctool(hasContentLeadImage=True) for i in items: obj = i.getObject() if obj is None: continue if not ILeadImageable.providedBy(obj): continue try: state = obj._p_changed except (ConflictError, KeyboardInterrupt): raise except: state = 0 field = obj.getField(config.IMAGE_FIELD_NAME) if field is not None: field.removeScales(obj) field.createScales(obj) number = number + 1 if state is None: obj._p_deactivate() self.status = _(u"text_scales_recreated", default=u"${number} scales recreated.", mapping={'number': number})
def getMenuItems(self, context, request): """Return menu item entries in a TAL-friendly form.""" results = BaseFactoriesMenu.getMenuItems(self, context, request) factories_view = getMultiAdapter((context, request), name='folder_factories') haveMore = False include = None addContext = factories_view.default_page_add_context() if not addContext: return results allowedTypes = _allowedTypes(request, addContext) constraints = IConstrainTypes(addContext, None) if constraints is not None: include = constraints.getImmediatelyAddableTypes() if len(include) < len(allowedTypes): haveMore = True results.append({ 'title': _p(u'folder_add_to_default_page', default=u'Add to default page'), 'description': _p(u'Add content to the default page'), 'action': None, 'selected': False, 'icon': None, 'extra': { 'id': 'add-to-default', 'separator': 'actionSeparator', 'class': '' }, 'submenu': None, }) results += factories_view.default_page_addable_types(include=include) if haveMore: url = '%s/folder_factories' % (addContext.absolute_url(), ) results.append({ 'title': _p(u'folder_add_more', default=u'More\u2026'), 'description': _p(u'Show all available content types'), 'action': url, 'selected': False, 'icon': None, 'extra': { 'id': 'more', 'separator': None, 'class': '' }, 'submenu': None, }) constraints = ISelectableConstrainTypes(addContext, None) if constraints is not None: if constraints.canSetConstrainTypes( ) and constraints.getDefaultAddableTypes(): url = '%s/folder_constraintypes_form' % ( addContext.absolute_url(), ) results.append({ 'title': _p(u'folder_add_settings', default=u'Restrictions\u2026'), 'description': _p(u'title_configure_addable_content_types', default= u'Configure which content types can be added here'), 'action': url, 'selected': False, 'icon': None, 'extra': { 'id': 'settings', 'separator': None, 'class': '' }, 'submenu': None, }) return results
class RegistrationForm(form.SchemaForm): grok.name('write_message') grok.context(IOutputbox) grok.require("emc.memberArea.send_message") grok.layer(IThemeSpecific) schema = IMessage ignoreContext = True label = _(u"send message to member") def update(self): self.request.set('disable_border', True) return super(RegistrationForm, self).update() def updateWidgets(self): super(RegistrationForm, self).updateWidgets() # self.widgets['privacy'].label = u'' # self.widgets['privacy'].mode = 'display' # self.widgets['privacy'].autoresize = True self.widgets['title'].addClass("form-control") self.widgets['text'].addClass("form-control") self.widgets['sendto'].addClass("form-control") def updateActions(self): super(RegistrationForm, self).updateActions() self.actions['submit'].addClass("btn-primary btn-block btn-lg") self.actions['cancel'].addClass("btn-default btn-block btn-lg") @button.buttonAndHandler(_p(u"submit")) def submit(self, action): from plone import api current = api.user.get_current() data, errors = self.extractData() if errors: self.status = _(u"Please correct errors") return # a simple rule for composing object id inc = str(int(getattr(self.context, 'registrant_increment', '0')) + 1) data['id'] = '%s_%s' % (current.id, inc) self.context.registrant_increment = inc obj = _createObjectByType("emc.memberArea.message", self.context, data['id']) del data['id'] title = data['title'] for k, v in data.items(): setattr(obj, k, v) obj.reindexObject() # notify object created event, #the subscriber of the event will be put message into incoming box of the receivers. notify(MessageCreatedEvent(obj)) # urltool = getToolByName(self.context, 'portal_url') # portal = urltool.getPortalObject() # self.request.response.redirect(portal.absolute_url() + "/login_form") self.request.response.redirect(self.context.absolute_url()) IStatusMessage(self.request).addStatusMessage(_( u'create_message_succesful', default=u"Your message:${title} has been sent.", mapping={u'title': title}), type='info') return @button.buttonAndHandler(_p(u"Cancel")) def cancel(self, action): self.request.response.redirect(self.context.absolute_url()) return
from Products.CMFPlone import PloneMessageFactory as _p #_p = MessageFactory('plone') dummy = _p("FangAn") dummy = _p("ChuYang") dummy = _p("ChuYang1") dummy = _p("ChuYang2") dummy = _p("ShiYang") dummy = _p("ShiYang1") dummy = _p("ShiYang2") dummy = _p("ZhengYang") dummy = _p("ZhengYang1") dummy = _p("ZhengYang2") dummy = _p("DingXing")
) ), ReferenceField('referenceField', relationship = 'relatesTo', multiValued = False, isMetadata = True, languageIndependent = False, index = 'KeywordIndex', write_permission = ModifyPortalContent, widget = ReferenceBrowserWidget( allow_search = True, allow_browse = True, show_indexes = False, force_close_on_insert = True, label = _p(u'label_related_items', default=u'Related Items'), description = '', visible = {'edit' : 'visible', 'view' : 'invisible' } ) ), )) for field in ('creators', 'contributors', 'rights', 'subject', 'language', 'location', 'allowDiscussion'): if ShowcaseImageSchema.has_key(field): ShowcaseImageSchema[field].widget.visible = 0 ShowcaseImageSchema.changeSchemataForField('x', 'settings') ShowcaseImageSchema.changeSchemataForField('y', 'settings') ShowcaseImageSchema.changeSchemataForField('clipWidth', 'settings') ShowcaseImageSchema.changeSchemataForField('clipHeight', 'settings') ShowcaseImageSchema.changeSchemataForField('clipLeft', 'settings') ShowcaseImageSchema.changeSchemataForField('clipTop', 'settings')
# -*- coding: utf-8 -*- message = """<html> <body> <p>%(from)s</p> %(message)s <hr/> <p><a href="%(url)s">%(url_text)s</a></p> </body> </html> """ # dummy i18n helper for workflow states #from zope.i18nmessageid import MessageFactory from Products.CMFPlone import PloneMessageFactory as _p #_p = MessageFactory('plone') dummy = _p("published")
ImageField( name='image', languageIndependent=True, swallowResizeExceptions=True, max_size='no', sizes={'large' : (768, 768), 'preview' : (400, 400), 'mini' : (200, 200), 'thumb' : (128, 128), 'tile' : (64, 64), 'icon' : (32, 32), 'listing' : (16, 16), }, validators=(('isNonEmptyFile', V_REQUIRED), ('checkImageMaxSize', V_REQUIRED),), widget=ImageWidget(label= _p(u'label_news_image', default=u'Image'), show_content_type = False,), ), StringField( name='imageCaption', required = False, searchable = True, widget = StringWidget(description = '', label = _p(u'label_image_caption', default=u'Image Caption'), size = 40) ), )) for field in ('creators','contributors','location','subject','language','rights','presentation', 'tableContents',):