def getSignupMessage(self):
     """ returns signup message for signupsheet_view """
     if self.getSignupStatus(nextstatus=1) == 'open':
         msg = _(u'sign_up', default='Sign up!')
     else:
         msg = _(u'sign_up_for_waitinglist', default='Signup for waiting list')
     return msg
    def __call__(self):
        if not 'importRegistrants' in self.request.form:
            return self.template()
        else:
            csvfile = self.request.get('uploaded_csv', None)
            if not csvfile:
                response = _("No file loaded")
                return self.template(**{'status': 'error',
                                        'import_response': response})
            else:
                lines = csvfile.readlines()
                #clean the line
                reg_folder = self.get_registrants_folder()
                # We emulate on success
                csvfields = lines[0].replace('\n', '').replace('\r', '').split(';')
                form_fields = self.context._getFieldObjects()

                for line in lines[1:len(lines)]:
                    line_values = line.replace('\n', '').replace('\r', '').split(';')
                    for index in range(0, len(csvfields)):
                        self.request.form[csvfields[index]] = line_values[index]
                    self.request.form['last_referer'] = self.context.absolute_url()
                    reg_folder.onSuccess(form_fields, self.request)
                translator = zope.i18n.translate
                response = translator(_(u"registrants_imported",
                           default=u"Created ${registrants} new registrant",
                           mapping={'registrants': len(lines) - 1}),
                        context=self.context.REQUEST)
                return self.template(**{'status': 'done',
                                        'import_response': response})
Пример #3
0
 def getSignupMessage(self):
     """ returns signup message for signupsheet_view """
     if self.getSignupStatus(nextstatus=1) == 'open':
         msg = _(u'sign_up', default='Sign up!')
     else:
         msg = _(u'sign_up_for_waitinglist',
                 default='Signup for waiting list')
     return msg
Пример #4
0
    def _notify(self, form):
        context = self.context
        request = self.request
        registrants = form.get('registrants', [])
        subject = form.get('subject', None)
        message = form.get('message', None)

        if not registrants:
            self.errors['registrants'] = translate(_(
                'registrants_required',
                default=u"Please, provide at least one registrants"),
                                                   context=request)
        if not subject:
            self.errors['subject'] = translate(_(
                'subject_required',
                default=u"Subject is required. Please provide it"),
                                               context=request)
        if not message:
            self.errors['message'] = translate(_(
                'message_required',
                default=u"Message is required. Please provide it"),
                                               context=request)

        if self.errors:
            return

        parsedMessage = self._parseMessage(message)
        mail_host = getToolByName(context, 'MailHost')
        catalog = getToolByName(context, 'portal_catalog')
        portal = getToolByName(context, 'portal_url').getPortalObject()
        storage = catalog(
            path='/'.join(context.getPhysicalPath()),
            object_provides=IFormSaveData2ContentAdapter.__identifier__)
        mailer = getattr(context, 'user_notification_mailer', None)
        mfrom = mailer and mailer.getRecipient_email() or portal.getProperty(
            'email_from_address')
        storage = storage[0].getObject()
        cnt = 0
        for registrant in registrants:
            email = getattr(getattr(storage, registrant, None), 'email', None)
            if email:
                mail_host.secureSend(parsedMessage,
                                     mto=email,
                                     mfrom=mfrom,
                                     subject=subject)
                cnt += 1
        plone_utils = getToolByName(self.context, 'plone_utils')
        plone_utils.addPortalMessage(
            _('sent_notification_count',
              default=u"Message sent to $count registrants",
              mapping={'count': cnt}))
    def _notify(self, form):
        context = self.context
        request = self.request
        registrants = form.get('registrants', [])
        subject = form.get('subject', None)
        message = form.get('message', None)
        
        if not registrants:
            self.errors['registrants'] = translate(_('registrants_required',
                                                     default=u"Please, provide at least one registrants"),
                                                   context=request)
        if not subject:
            self.errors['subject'] = translate(_('subject_required',
                                                     default=u"Subject is required. Please provide it"),
                                               context=request)
        if not message:
            self.errors['message'] = translate(_('message_required',
                                                     default=u"Message is required. Please provide it"),
                                               context=request)

        if self.errors:
            return

        parsedMessage = self._parseMessage(message)
        mail_host = getToolByName(context, 'MailHost')
        catalog = getToolByName(context, 'portal_catalog')
        portal = getToolByName(context, 'portal_url').getPortalObject()
        storage = catalog(path='/'.join(context.getPhysicalPath()),
                          object_provides=IFormSaveData2ContentAdapter.__identifier__)
        mailer = getattr(context, 'user_notification_mailer', None)
        mfrom = mailer and mailer.getRecipient_email() or portal.getProperty('email_from_address')
        storage = storage[0].getObject()
        cnt = 0
        for registrant in registrants:
            email = getattr(getattr(storage, registrant, None), 'email', None)
            if email:
                mail_host.secureSend(parsedMessage, mto=email, mfrom=mfrom, subject=subject)
                cnt += 1
        plone_utils = getToolByName(self.context, 'plone_utils')
        plone_utils.addPortalMessage(_('sent_notification_count',
                                       default=u"Message sent to $count registrants",
                                       mapping={'count': cnt}))
Пример #6
0
    def __call__(self):
        if not 'importRegistrants' in self.request.form:
            return self.template()
        else:
            csvfile = self.request.get('uploaded_csv', None)
            if not csvfile:
                response = _("No file loaded")
                return self.template(**{
                    'status': 'error',
                    'import_response': response
                })
            else:
                lines = csvfile.readlines()
                #clean the line
                reg_folder = self.get_registrants_folder()
                # We emulate on success
                csvfields = lines[0].replace('\n', '').replace('\r',
                                                               '').split(';')
                form_fields = self.context._getFieldObjects()

                for line in lines[1:len(lines)]:
                    line_values = line.replace('\n', '').replace('\r',
                                                                 '').split(';')
                    for index in range(0, len(csvfields)):
                        self.request.form[
                            csvfields[index]] = line_values[index]
                    self.request.form[
                        'last_referer'] = self.context.absolute_url()
                    reg_folder.onSuccess(form_fields, self.request)
                translator = zope.i18n.translate
                response = translator(_(
                    u"registrants_imported",
                    default=u"Created ${registrants} new registrant",
                    mapping={'registrants': len(lines) - 1}),
                                      context=self.context.REQUEST)
                return self.template(**{
                    'status': 'done',
                    'import_response': response
                })
Пример #7
0
    def form_initializer(self, **kwargs):
        """
        The same as PloneformGen do, but we overrides to create objects we
        are interest on: name, surname, status, email
        """
        self.form.setSubmitLabel(translate(
                                    _(u'signupsheet_formfolder_signup',
                                      u'Sign up'),
                                 context=self.form.REQUEST))
        self.form.setResetLabel(translate(
                                    _(u'signupsheet_formfolder_reset',
                                      u'Reset'),
                                 context=self.form.REQUEST))

        oids = self.form.objectIds()
        if not oids:
            form_name = self.form.REQUEST.form.get('title', '').decode('utf-8')
            # create a name field
            self.form.invokeFactory('FormStringField', 'name')

            obj = self.form['name']
            obj.fgField.__name__ = 'name'

            obj.setTitle(translate(
                         _(u'signupsheet_namefield_title', u'Your Name'),
                         context=self.form.REQUEST))
            obj.setFgTDefault('here/@@default_name_value')
            self.form._pfFixup(obj)

            # create a surname field
            self.form.invokeFactory('FormStringField', 'surname')
            obj = self.form['surname']
            obj.fgField.__name__ = 'surname'
            obj.setTitle(translate(
                        _(u'signupsheet_surnamefield_title', u'Your surname'),
                        context=self.form.REQUEST))
            obj.setFgTDefault('here/@@default_surname_value')
            self.form._pfFixup(obj)

            # create a mail field
            self.form.invokeFactory('FormStringField', 'email')
            obj = self.form['email']
            obj.fgField.__name__ = 'email'
            obj.setTitle(translate(
                         _(u'signupsheet_emailfield_title',
                           u'E-Mail Address'),
                          context=self.form.REQUEST))
            obj.fgField.required = True
            obj.setFgTDefault('here/@@default_email_value')
            obj.setFgStringValidator('isEmail')
            self.form._pfFixup(obj)

            #according to FormSaveData2ContentAdapter security seems that only
            #manager can create this kind of adapter
            pt = getToolByName(self.form, 'portal_types')
            type_info = pt.getTypeInfo('FormSaveData2ContentAdapter')
            obj = type_info._constructInstance(self.form, 'registrants')
            # CMFCore compatibility
            if hasattr(type_info, '_finishConstruction'):
                type_info._finishConstruction(obj)
            obj.setTitle(translate(
                         _(u'pfg_registrants_title', u'Registrants'),
                         context=self.form.REQUEST))
            obj.setEntryType('registrant')
            obj.setTitleField('email')
            obj.setNiceIds(True)
            obj.setDynamicTitle("here/@@get_registrant_title")
            self.form._pfFixup(obj)

            #Create first mailer; notification after registration
            self.form.invokeFactory('FormMailerAdapter',
                                    'user_notification_mailer')
            mailer = self.form['user_notification_mailer']
            mailer.setIncludeEmpties(False)
            mailer.setTitle(translate(
                _(u'pfg_user_notification_mailer', u'User notification mailer'),
                context=self.form.REQUEST))
            mailer.setDescription(
                translate(
                  _(u'pfg_user_notification_mailer_description',
                    u'E-Mails Form Input for subscribers'),
                  context=self.form.REQUEST))
            mailer.setTo_field('email')
            mailer.setReplyto_field('email')
            subject = translate(_(u"mailer_registration_subject_overrides",
                                  default=u"Your registration to \"${title}\" has been received",
                                  mapping={'title': form_name}),
                                context=self.form.REQUEST,)
            mailer.setMsg_subject(subject)
            mailer.setExecCondition("request/review_state|nothing")
            mailer.setBody_pt(INITIAL_MAIL % translate(
                               _(u'subscription_mail',
                                 default=u"""<p>
    Thank you for registering to <tal:title tal:replace="here/aq_inner/aq_parent/Title"/>
</p>

<p tal:condition="request/review_state|nothing">Your registration state is:
    <tal:review_state tal:replace="request/review_state" />
</p>

<p>You provided the following information:</p>"""),
                                context=self.form.REQUEST),)
            self.form._pfFixup(mailer)

            #Create second mailer; subscription notification
            self.form.invokeFactory('FormMailerAdapter',
                                    'manager_notification_mailer')
            mailer = self.form['manager_notification_mailer']
            mailer.setIncludeEmpties(False)
            mailer.setTitle(translate(
                _(u'pfg_manager_notification_mailer',
                  u'Manager notification mailer'),
                context=self.form.REQUEST))
            mailer.setDescription(
                translate(
                  _(u'pfg_manager_notification_mailer_description',
                    u'E-Mails Form Input for signup sheet editors: this mailer sends notifications to signupsheet managers'),
                  context=self.form.REQUEST))
            mailer.setTo_field('#NONE#')
            mailer.setReplyto_field('#NONE#')
            mailer.setExecCondition("python:context.restrictedTraverse('@@check_mailer')()")
            subject = translate(_(u"mailer_registration_subject_overrides_manager",
                                  default=u"A new registration to \"${title}\" has been received",
                                  mapping={'title': form_name}),
                                context=self.form.REQUEST,)
            mailer.setMsg_subject(subject)
            mailer.setBody_pt(MANAGER_MAIL % translate(
                               _(u'manager_subscription_mail',
                                default=u"""<p>
    New registrant registered to <tal:s tal:content="here/aq_inner/aq_parent/Title" />
</p>

<p>
    Please check current registrants status at:
    <a href="" tal:attributes="href string:${here/aq_inner/aq_parent/absolute_url}/view_registrants"
       tal:content="string:${here/aq_inner/aq_parent/absolute_url}/view_registrants">
    </a>
</p>"""),
                                context=self.form.REQUEST),)
            mailer.setExecCondition("python: here.restrictedTraverse('@@check_manager_mail_form')()")
            self.form._pfFixup(mailer)

            # create a thanks page
            self.form.invokeFactory('FormThanksPage', 'thank-you')
            obj = self.form['thank-you']
            obj.setIncludeEmpties(False)
            obj.setTitle(translate(
                         _(u'pfg_thankyou_title', u'Thank You'),
                         context=self.form.REQUEST))
            obj.setDescription('')
            obj.setThanksPrologue(translate(_(u"thanks_prologue",
                                              default=u"Thank you for registering, we will contact you shortly. <br/>\nYou provided the following information:"),
                                              context=self.form.REQUEST))
            self.form._pfFixup(obj)
            self.form.addActionAdapter('registrants')
            self.form.addActionAdapter('manager_notification_mailer')
            self.form.thanksPage = 'thank-you'
from collective.signupsheet import signupsheetMessageFactory as _
from collective.signupsheet.config import PROJECTNAME, logger
from collective.signupsheet.interfaces import ISignupSheet
from collective.signupsheet.interfaces import ISignupSheetInitializer


SignupSheetSchema = FormFolderSchema.copy() + Schema((
    IntegerField('eventsize',
        required=1,
        default=0,
        read_permission="SignupSheet: View Registration Info",
        validators=('isInt',),
        widget=StringWidget(
            visible={'edit': 'visible', 'view': 'invisible'},
            size=6,
            label=_('field_eventsize',
                    default=u'Number of registrants'),
            description=_('fieldhelp_eventsize',
                          default=u"Set to 0 for unlimited registration",)
             )
       ),
    IntegerField('waitlist_size',
        required=1,
        default=0,
        read_permission="SignupSheet: View Registration Info",
        validators=('isInt',),
        widget=StringWidget(
            visible={'edit': 'visible', 'view': 'invisible'},
            size=6,
            label=_('field_waitlist_size',
                    default=u'Size of wait list',),
            )
 def translate(self, value):
     return zope.i18n.translate(_(value), context=self.request)
from collective.signupsheet import signupsheetMessageFactory as _
from collective.signupsheet.config import PROJECTNAME, logger
from collective.signupsheet.interfaces import ISignupSheet
from collective.signupsheet.interfaces import ISignupSheetInitializer


SignupSheetSchema = FormFolderSchema.copy() + Schema((
    IntegerField('eventsize',
        required=1,
        default=0,
        read_permission="SignupSheet: View Registration Info",
        validators=('isInt',),
        widget=StringWidget(
            visible={'edit': 'visible', 'view': 'invisible'},
            size=6,
            label=_('field_eventsize',
                    default=u'Number of registrants'),
            description=_('fieldhelp_eventsize',
                          default=u"Set to 0 for unlimited registration",)
             )
       ),
    IntegerField('waitlist_size',
        required=1,
        default=0,
        read_permission="SignupSheet: View Registration Info",
        validators=('isInt',),
        widget=StringWidget(
            visible={'edit': 'visible', 'view': 'invisible'},
            size=6,
            label=_('field_waitlist_size',
                    default=u'Size of wait list',),
            )
Пример #11
0
 def translate(self, value):
     return zope.i18n.translate(_(value), context=self.request)