def publish(self, publishers=[], accounts={}):
     obj = self.context
     selected_publishers = self.request.get('publishers', publishers)
     if not selected_publishers:
         msg = _(u"Select at list one publisher!")
         self.update_message(msg, type="error")
         return
     published = {}
     self._update_settings(publishers=publishers, accounts=accounts)
     content = self.get_content()
     manager = IPublishStorageManager(obj)
     if manager.get_text() and not self.request.get('one_shot_text'):
         content = manager.get_text()
     published['content'] = content
     selected_accounts = self.request.get('accounts', accounts)
     for pub in selected_publishers:
         account_id = selected_accounts.get(pub)
         self._publish(content, pub, account_id)
         published[pub] = account_id
     msg = _(u'content_published',
             default=u"Content published on ${published_on}",
             mapping={'published_on': ', '.join(selected_publishers)})
     translated = self.context.translate(msg)
     self.update_message(translated)
     return published
예제 #2
0
 def publish(self, publishers=[], accounts={}):
     obj = self.context
     selected_publishers = self.request.get('publishers', publishers)
     if not selected_publishers:
         msg = _(u"Select at list one publisher!")
         self.update_message(msg, type="error")
         return
     published = {}
     self._update_settings(publishers=publishers, accounts=accounts)
     content = self.get_content()
     manager = IPublishStorageManager(obj)
     if manager.get_text() and not self.request.get('one_shot_text'):
         content = manager.get_text()
     published['content'] = content
     selected_accounts = self.request.get('accounts', accounts)
     for pub in selected_publishers:
         account_id = selected_accounts.get(pub)
         self._publish(content, pub, account_id)
         published[pub] = account_id
     msg = _(u'content_published',
             default=u"Content published on ${published_on}",
             mapping={'published_on': ', '.join(selected_publishers)})
     translated = self.context.translate(msg)
     self.update_message(translated)
     return published
예제 #3
0
    def test_publish(self):
        test_utils.register_fake_publisher()
        utility = component.queryUtility(ISocialPublisherUtility,
                                         name=test_utils.FakePublisher.id)
        # let's create an event
        event = self.create_event()
        # and get its manager
        manager = IPublishStorageManager(event)
        # we must have empty values here
        self.assertEqual(manager.get_accounts(), {})
        self.assertEqual(manager.get_text(), '')

        # we can now publish it using `social-publish` view
        view = event.restrictedTraverse('@@social-publish')
        publishers = [test_utils.FakePublisher.id]
        accounts = {test_utils.FakePublisher.id: 'simahawk'}
        result = view.publish(publishers=publishers, accounts=accounts)
        # we expect the content of the publication to be equal `get_text` result
        # and the publisher/account mapping matching the one we pass to the publisher
        expected = {
            'content': 'Great event http://nohost/plone/event',
            'fakepub': 'simahawk'
        }
        self.assertEqual(result, expected)
        # publisher/account mapping is saved by default by the publishing view
        self.assertEqual(manager.get_accounts(), {'fakepub': 'simahawk'})
 def _update_settings(self, publishers=[], accounts={}):
     obj = self.context
     selected_publishers = self.request.get('publishers', publishers)
     manager = IPublishStorageManager(obj)
     custom_text = self.request.get('text', '').strip()
     if not self.request.get('one_shot_text'):
         manager.set_text(custom_text)
     selected_accounts = self.request.get('accounts', accounts)
     for pub in selected_publishers:
         account_id = selected_accounts.get(pub)
         manager.set_account(pub, account_id)
 def accounts(self):
     res = {}
     manager = IPublishStorageManager(self.context, None)
     selected = ""
     for pub in self.publishers:
         selected = None
         if manager:
             selected = manager.get_account(pub.id)
         accounts = pub.get_accounts()
         res[pub.id] = [
             dict(id=x, selected=x == selected) for x in accounts.keys()
         ]
     return res
 def accounts(self):
     res = {}
     manager = IPublishStorageManager(self.context, None)
     selected = ""
     for pub in self.publishers:
         selected = None
         if manager:
             selected = manager.get_account(pub.id)
         accounts = pub.get_accounts()
         res[pub.id] = [
                         dict(id = x,
                              selected = x == selected)
                         for x in accounts.keys()
                     ]
     return res
예제 #7
0
    def publish(self):
        settings = utils.get_global_settings()
        if not settings.autopublish_enabled:
            self.logger.info(self.msg_autopublish_disabled)
            return self.msg_autopublish_disabled

        for brain in self.get_items():
            obj = brain.getObject()
            manager = IPublishStorageManager(obj)
            # XXX: we should delegate default text get to manager (?)
            content = manager.get_text() or utils.get_text(obj)
            for publisher, account_id in manager.get_accounts().items():
                self._publish(content, publisher, account_id=account_id)

        self.logger.info(self.msg_autopublish_done)
        return self.msg_autopublish_done
    def publish(self):
        settings = utils.get_global_settings()
        if not settings.autopublish_enabled:
            self.logger.info(self.msg_autopublish_disabled)
            return self.msg_autopublish_disabled

        for brain in self.get_items():
            obj = brain.getObject()
            manager = IPublishStorageManager(obj)
            # XXX: we should delegate default text get to manager (?)
            content = manager.get_text() or utils.get_text(obj)
            for publisher, account_id in manager.get_accounts().items():
                self._publish(content, publisher, account_id=account_id)

        self.logger.info(self.msg_autopublish_done)
        return self.msg_autopublish_done
예제 #9
0
def get_text(obj):
    # XXX: make this smarter (using per-type adapters?)
    LIMIT = 140
    manager = IPublishStorageManager(obj)
    if manager.get_text():
        txt = manager.get_text()[:LIMIT]
    else:
        txt = obj.Title()
        link = obj.absolute_url()
        # XXX: handle this is an smart way
        # short_link = getTinyURL(link)
        short_link = None 
        if short_link:
            link = short_link
        else:
            short_link = link
        available_chars = LIMIT - (len(short_link)+1)
        txt = "%s %s" % (txt[:available_chars],short_link)
    return txt
    def test_publish(self):
        test_utils.register_fake_publisher()
        utility = component.queryUtility(ISocialPublisherUtility,
                                         name=test_utils.FakePublisher.id)
        # let's create an event
        event = self.create_event()
        # and get its manager
        manager = IPublishStorageManager(event)
        # we must have empty values here
        self.assertEqual(manager.get_accounts(),{})
        self.assertEqual(manager.get_text(),'')

        # we can now publish it using `social-publish` view
        view = event.restrictedTraverse('@@social-publish')
        publishers = [test_utils.FakePublisher.id]
        accounts = {test_utils.FakePublisher.id:'simahawk'}
        result = view.publish(publishers=publishers,accounts=accounts)
        # we expect the content of the publication to be equal `get_text` result
        # and the publisher/account mapping matching the one we pass to the publisher
        expected = {'content': 'Great event http://nohost/plone/event', 'fakepub': 'simahawk'}
        self.assertEqual(result,expected)
        # publisher/account mapping is saved by default by the publishing view
        self.assertEqual(manager.get_accounts(),{'fakepub': 'simahawk'})
예제 #11
0
 def _update_settings(self, publishers=[], accounts={}):
     obj = self.context
     selected_publishers = self.request.get('publishers', publishers)
     manager = IPublishStorageManager(obj)
     custom_text = self.request.get('text', '').strip()
     if not self.request.get('one_shot_text'):
         manager.set_text(custom_text)
     selected_accounts = self.request.get('accounts', accounts)
     for pub in selected_publishers:
         account_id = selected_accounts.get(pub)
         manager.set_account(pub, account_id)
 def get_text(self):
     manager = IPublishStorageManager(self.context, None)
     saved = manager.get_text()
     default = utils.get_text(self.context)
     return saved or default
예제 #13
0
 def get_text(self):
     manager = IPublishStorageManager(self.context, None)
     saved = manager.get_text()
     default = utils.get_text(self.context)
     return saved or default