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()
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')
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
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)