def is_subscribable(self):
     if self.data.subscribability == NOT_SUBSCRIBABLE:
         return False
     if self.data.subscribability == SUBSCRIBABLE:
         return True
     parent = ISubscriptionManager(aq_parent(self.context))
     return parent.is_subscribable()
Пример #2
0
    def request_subscription(self, content, email):
        # Send out request for subscription
        # NOTE: no doc string, so, not *publishable* TTW
        #
        if not self.are_subscriptions_enabled():
            raise errors.NotSubscribableError()

        manager = ISubscriptionManager(content, None)
        # see if content is subscribable
        if manager is None or not manager.is_subscribable():
            raise errors.NotSubscribableError()

        # validate address
        if not isValidMailAddress(email):
            raise errors.InvalidEmailaddressError()

        # check if not yet subscribed
        subscription = manager.get_subscription(email)
        if subscription is not None:
            # send an email informing about this situation
            self._send_confirmation(
                content, subscription.content, email,
                'already_subscribed_template', 'confirm_subscription')
            raise errors.AlreadySubscribedError()

        # send confirmation email to emailaddress
        self._send_confirmation(
            content, content, email,
            'subscription_confirmation_template', 'confirm_subscription')
Пример #3
0
 def are_subscriptions_enabled(self, context=None):
     if not self._enabled:
         return False
     if context is not None:
         manager = ISubscriptionManager(context, None)
         if manager is None:
             return False
         return manager.is_subscribable()
     return True
Пример #4
0
 def update(self):
     settings = ISubscriptionManager(self.context)
     self.is_enabled = settings.is_subscribable()
     self.all_subscribers = len(settings.subscriptions)
     self.locally_subscribers = len(settings.locally_subscribed_emails)
     self.above_subscribers = self.all_subscribers - self.locally_subscribers
     if self.is_enabled:
         url = absoluteURL(self.context, self.request)
         self.subscribe_url = url + "/subscriptions.html"
    def test_post_and_subscribe(self):
        """Test posting and subscribing to a topic.
        """
        testing.enable_subscription(self.root.forum)
        testing.set_member_email('dummy', '*****@*****.**')

        self.assertEqual(len(self.root.service_mailhost.messages), 0)

        browser = self.layer.get_browser(forum_settings)
        browser.login('dummy', 'dummy')
        self.assertEqual(browser.open('/root/forum'), 200)

        form = browser.get_form('post')
        form.get_control("topic").value = "topic"
        self.assertEqual(form.get_control("subscribe").checked, True)
        self.assertEqual(form.get_control("action.post").click(), 200)

        self.assertEqual(
            browser.inspect.feedback,
            ["Topic added.",
             "A confirmation mail have been sent for your subscription."])

        subscriptions = ISubscriptionManager(self.root.forum.topic)
        self.assertEqual(subscriptions.is_subscribable(), True)

        subscription_request = self.root.service_mailhost.read_last_message()
        self.assertNotEqual(subscription_request, None)
        self.assertEqual(subscription_request.mto, ['*****@*****.**'])
        self.assertEqual(subscription_request.mfrom, '*****@*****.**')
        self.assertEqual(
            subscription_request.subject,
            'Subscription confirmation to "topic"')
        self.assertEqual(len(subscription_request.urls), 2)

        # the confirmation link is the last url in the mail
        confirmation_url = subscription_request.urls[-1]
        self.assertEqual(browser.open(confirmation_url), 200)
        self.assertEqual(
            browser.location,
            '/root/forum/topic/subscriptions.html/@@confirm_subscription')
        self.assertEqual(
            browser.html.xpath('//p[@class="subscription-result"]/text()'),
            ['You have been successfully subscribed. '
             'You will now receive email notifications.'])

        self.assertEqual(subscriptions.is_subscribed('*****@*****.**'), True)
    def test_subscribability(self):
        """Test the subscribability setting.
        """
        manager = ISubscriptionManager(self.root.document)
        self.assertEqual(manager.is_subscribable(), False)
        self.assertEqual(manager.subscribability, ACQUIRE_SUBSCRIBABILITY)

        # You can enable or disable that setting
        manager.subscribability = SUBSCRIBABLE
        self.assertEqual(manager.is_subscribable(), True)
        self.assertEqual(manager.subscribability, SUBSCRIBABLE)

        manager.subscribability = NOT_SUBSCRIBABLE
        self.assertEqual(manager.is_subscribable(), False)
        self.assertEqual(manager.subscribability, NOT_SUBSCRIBABLE)

        # You can set the setting on the parent root
        manager_root = ISubscriptionManager(self.root)
        self.assertEqual(manager_root.is_subscribable(), False)
        self.assertEqual(manager_root.subscribability, NOT_SUBSCRIBABLE)

        # You can change the setting. Not to acquired.
        manager_root.subscribability = SUBSCRIBABLE
        self.assertEqual(manager_root.is_subscribable(), True)
        self.assertEqual(manager_root.subscribability, SUBSCRIBABLE)

        self.assertRaises(AssertionError, setattr, manager_root, "subscribability", ACQUIRE_SUBSCRIBABILITY)
        self.assertEqual(manager_root.is_subscribable(), True)
        self.assertEqual(manager_root.subscribability, SUBSCRIBABLE)

        # The setting was disabled on the document, it is still is.
        # However if we set it to acquired it will be enabled (since root is)
        self.assertEqual(manager.is_subscribable(), False)
        self.assertEqual(manager.subscribability, NOT_SUBSCRIBABLE)

        manager.subscribability = ACQUIRE_SUBSCRIBABILITY
        self.assertEqual(manager.is_subscribable(), True)
        self.assertEqual(manager.subscribability, ACQUIRE_SUBSCRIBABILITY)