def _validate_subscription(self, **kw):
        """ Validate add/edit subscription for authorized and anonymous users

        """
        if (kw['notif_type'] not in self.available_notif_types(kw['location']) and
                    not (kw['notif_type'] == 'administrative' and
                    self.checkPermissionPublishObjects())):
            raise i18n_exception(ValueError, 'Subscribing to ${notif_type} '
                        'notifications in "${location}" not allowed',
                        location=kw['location'] or self.getSite().title, notif_type=kw['notif_type'])
        try:
            obj = self.getSite().restrictedTraverse(kw['location'])
        except:
            raise i18n_exception(ValueError,
                                 'This path is invalid or protected')
        try:
            subscription_container = ISubscriptionContainer(obj)
        except:
            raise i18n_exception(ValueError, 'Cannot subscribe to this folder')

        if kw.get('anonymous', False):
            #Check if subscription exists for this anonymous subscriber
            if not is_valid_email(kw.get('email', '')):
                raise i18n_exception(ValueError,
                            'Your e-mail address does not appear to be valid.')
            for id, subscription in subscription_container.list_with_keys():
                #Normal subscriptions don't have e-mail
                if isinstance(subscription, AnonymousSubscription):
                    if (subscription.email == kw['email'] and
                        subscription.notif_type == kw['notif_type'] and
                        subscription.lang == kw['lang']):
                        raise i18n_exception(ValueError,
                                                 'Subscription already exists')
    def _validate_subscription(self, **kw):
        """ Validate add/edit subscription for authorized and anonymous users

        """
        if kw['notif_type'] not in self.available_notif_types(kw['location']):
            raise i18n_exception(ValueError, 'Subscribing to notifications in '
                        '"${location}" not allowed', location=kw['location'])
        try:
            obj = self.getSite().restrictedTraverse(kw['location'])
        except:
            raise i18n_exception(ValueError,
                                 'This path is invalid or protected')
        try:
            subscription_container = ISubscriptionContainer(obj)
        except:
            raise i18n_exception(ValueError, 'Cannot subscribe to this folder')

        if not kw.get('anonymous', False):
            n = utils.match_account_subscription(subscription_container,
                                           kw['user_id'], kw['notif_type'],
                                           kw['lang'])
            if n is not None:
                raise i18n_exception(ValueError, 'Subscription already exists')
        else: #Check if subscription exists for this anonymous subscriber
            if not is_valid_email(kw.get('email', '')):
                raise i18n_exception(ValueError,
                            'Your e-mail address does not appear to be valid.')
            for id, subscription in subscription_container.list_with_keys():
                #Normal subscriptions don't have e-mail
                if isinstance(subscription, AnonymousSubscription):
                    if (subscription.email == kw['email'] and
                        subscription.notif_type == kw['notif_type'] and
                        subscription.lang == kw['lang']):
                        raise i18n_exception(ValueError,
                                                 'Subscription already exists')
Beispiel #3
0
    def send_email(self, from_email, subject, body_text, cc_emails, REQUEST,
                   to_uids=None):
        """ """
        errors = []
        if not to_uids:
            to_uids = []
        if not (to_uids or cc_emails):
            errors.append('Please select at least on recipient')
        if not (subject or body_text):
            errors.append('Subject and message body cannot both be empty')
        for email in cc_emails:
            if not is_valid_email(email):
                errors.append('Invalid email "%s" in CC field' % email)
        if errors:
            self.setSessionErrorsTrans(errors)
            return REQUEST.RESPONSE.redirect(REQUEST.HTTP_REFERER)
        participants = self.getParticipants()
        subscriptions = participants.getSubscriptions()
        signup_emails = [participants.getAttendeeInfo(uid)['email']
                         for uid in to_uids if
                         subscriptions._is_signup(uid)]
        account_emails = [participants.getAttendeeInfo(uid)['email']
                          for uid in to_uids if not
                          subscriptions._is_signup(uid)]
        to_emails = signup_emails + account_emails

        if (self.eionet_meeting() and
                '*****@*****.**' not in cc_emails):
            cc_emails.append('*****@*****.**')
            # TODO validate cc_emails

        # We need to send the emails to signups one by one since each email
        # might be different (if they contain links to documents for
        # which the authentication keys is inserted into the link)
        for uid in to_uids:
            if subscriptions._is_signup(uid):
                signup_email = participants.getAttendeeInfo(uid)['email']
                signup_body_text = self.insert_auth_link(body_text, uid)
                result = self._send_email(
                    from_email, [signup_email], cc_emails, subject,
                    signup_body_text, only_to=True)

        if account_emails:
            result = self._send_email(from_email, account_emails, cc_emails,
                                      subject, body_text)

        save_bulk_email(self.getSite(), to_emails, from_email, subject,
                        body_text,
                        where_to_save=path_in_site(self.getMeeting()),
                        addr_cc=cc_emails)

        return self.getFormsTool().getContent(
            {'here': self,
             'meeting': self.getMeeting(),
             'result': result},
            'naaya.content.meeting.email_sendstatus')
Beispiel #4
0
def info_check(parent, request, ob):
    """
    Receive and check what the user entered; save the name & email on
    the newly created object.
    """

    errors = {}
    required = info_required(parent, request)

    # check Captcha/reCaptcha
    if required['captcha']:
        recaptcha_response = request.form.get('g-recaptcha-response', '')
        captcha_errors = parent.validateCaptcha(recaptcha_response, request)
        if captcha_errors:
            errors['captcha'] = captcha_errors

    # check name/email, if they are required
    if required['name_and_email']:
        info = {
            'name': request.form.get('submitter-name', ''),
            'email': request.form.get('submitter-email', ''),
        }

        request.SESSION['submitter-info'] = info

        name_and_email_errors = {}
        if not info['name']:
            name_and_email_errors['submitter-name'] = ([
                "Submitter name is mandatory"
            ])
        if not info['email']:
            name_and_email_errors['submitter-email'] = ([
                "Submitter email is mandatory"
            ])
        elif not is_valid_email(info['email']):
            name_and_email_errors['submitter-email'] = ([
                "Invalid email address"
            ])

        if name_and_email_errors:
            errors.update(name_and_email_errors)
        else:
            ob.submitter_info = info

    return errors
Beispiel #5
0
def info_check(parent, request, ob):
    """
    Receive and check what the user entered; save the name & email on
    the newly created object.
    """

    errors = {}
    required = info_required(parent, request)

    # check Captcha/reCaptcha
    if required['captcha']:
        recaptcha_response = request.form.get('g-recaptcha-response', '')
        captcha_errors = parent.validateCaptcha(recaptcha_response, request)
        if captcha_errors:
            errors['captcha'] = captcha_errors

    # check name/email, if they are required
    if required['name_and_email']:
        info = {
            'name': request.form.get('submitter-name', ''),
            'email': request.form.get('submitter-email', ''),
        }

        request.SESSION['submitter-info'] = info

        name_and_email_errors = {}
        if not info['name']:
            name_and_email_errors['submitter-name'] = (
                ["Submitter name is mandatory"])
        if not info['email']:
            name_and_email_errors['submitter-email'] = (
                ["Submitter email is mandatory"])
        elif not is_valid_email(info['email']):
            name_and_email_errors['submitter-email'] = (
                ["Invalid email address"])

        if name_and_email_errors:
            errors.update(name_and_email_errors)
        else:
            ob.submitter_info = info

    return errors
Beispiel #6
0
def info_check(parent, request, ob):
    """
    Receive and check what the user entered; save the name & email on
    the newly created object.
    """

    errors = {}
    required = info_required(parent, request)

    # check Captcha/reCaptcha
    if required["captcha"]:
        contact_word = request.form.get("contact_word", "")
        captcha_errors = parent.validateCaptcha(contact_word, request)
        if captcha_errors:
            errors["captcha"] = captcha_errors

    # check name/email, if they are required
    if required["name_and_email"]:
        info = {"name": request.form.get("submitter-name", ""), "email": request.form.get("submitter-email", "")}

        request.SESSION["submitter-info"] = info

        name_and_email_errors = {}
        if not info["name"]:
            name_and_email_errors["submitter-name"] = ["Submitter name is mandatory"]
        if not info["email"]:
            name_and_email_errors["submitter-email"] = ["Submitter email is mandatory"]
        elif not is_valid_email(info["email"]):
            name_and_email_errors["submitter-email"] = ["Invalid email address"]

        if name_and_email_errors:
            errors.update(name_and_email_errors)
        else:
            ob.submitter_info = info

    return errors