Ejemplo n.º 1
0
 def _setTextField(self, obj, fieldname, text):
     obj_base = aq_base(obj)
     if getattr(obj_base, 'Schema', None):
         # Archetypes
         field = obj_base.getField(fieldname)
         if field is None:
             logger.warn('Field %s not found for %s',
                         fieldname, obj.getId())
             return
         field.set(obj, text)
     else:
         # Dexterity
         field = self._getField(obj_base, fieldname)
         if field is None:
             logger.warn('Field %s not found for %s',
                         fieldname, obj.getId())
             return
         if IRichText.providedBy(field):
             # Get mimetype from old value.
             old = field.get(obj)
             if old is None:
                 text = RichTextValue(text)
             else:
                 text = RichTextValue(
                     text, old.mimeType, old.outputMimeType)
         field.set(obj, text)
def setTextField(obj, fieldname, text):
    text = six.text_type(text)
    obj_base = aq_base(obj)
    if getattr(obj_base, "Schema", None):
        # Archetypes
        field = obj_base.getField(fieldname)
        if field is None:
            logger.warn("Field %s not found for %s", fieldname, obj.getId())
            return
        field.set(obj, text)
    else:
        # Dexterity
        field = getField(obj_base, fieldname)
        if field is None:
            logger.warn("Field %s not found for %s", fieldname, obj.getId())
            return
        if IRichText.providedBy(field):
            # Get mimetype from old value.
            old = field.get(obj)
            if old is None:
                text = RichTextValue(text)
            else:
                text = RichTextValue(text, old.mimeType, old.outputMimeType)
        if ITuple.providedBy(field) and ITextLine.providedBy(field.value_type):
            text = tuple(text.split("\n"))
        setattr(field.interface(obj), field.__name__, text)
 def test_richtextvalue_output_relative_to(self):
     if HAS_RICH_TEXT_VALUE:
         value = RichTextValue(
             raw='<p>Hello World</p>',
             mimeType='text/html',
             outputMimeType='text/html',
             encoding='utf-8'
         )
         alsoProvides(self.layer['request'], IThemingLayer)
         adapter = getMultiAdapter((value, self.layer['request']),
                                   name='output_relative_to')
         self.assertEqual(
             value.output_relative_to(self.layer['portal']),
             adapter(self.layer['portal'])
         )
Ejemplo n.º 4
0
    def setUp(self):
        self.portal = self.layer["portal"]
        self.request = self.layer["request"]

        setRoles(self.portal, TEST_USER_ID, ["Manager"])

        self.channel = api.content.create(
            container=self.portal,
            type='Channel',
            title=u'Example channel',
            is_subscribable=True,
        )

        self.message = api.content.create(
            container=self.channel,
            type='Message',
            title=u'Newsletter Foo vol. 1',
            text=RichTextValue(u'This is the first message'),
        )
        api.content.transition(obj=self.message, transition='publish')

        self.adapter = getMultiAdapter(
            (self.channel, self.request), IChannelSender
        )

        api.portal.set_registry_record(
            'queue_endpoint',
            QUEUE_URL,
            interface=INewsletterPluginFlaskSettings,
        )
Ejemplo n.º 5
0
    def test_existing_content_tile_show_title(self):
        """
        """
        page_id = self.portal.invokeFactory('Document',
                                            'an-another-page',
                                            title=u'An another page',
                                            description=u'A description',
                                            text=u'Hello World!')
        self.portal[page_id].text = RichTextValue(u'Hello World!')

        page_uuid = IUUID(self.portal[page_id])

        transaction.commit()
        self.unprivileged_browser.open(
            self.portalURL +
            '/@@plone.app.standardtiles.existingcontent/unique?content_uid=' +
            page_uuid + '&show_title=True')

        self.assertIn(u'An another page', self.unprivileged_browser.contents)

        self.unprivileged_browser.open(
            self.portalURL +
            '/@@plone.app.standardtiles.existingcontent/unique?content_uid=' +
            page_uuid)

        self.assertNotIn(u'An another page',
                         self.unprivileged_browser.contents)
 def testNewsItemCreate(self):
     self.folder.invokeFactory('News Item',
                               id='newsitem',
                               text=RichTextValue(u'data'),
                               title='Foo')
     self.assertEqual(self.folder.newsitem.text.raw, 'data')
     self.assertEqual(self.folder.newsitem.Title(), 'Foo')
    def test_portlet_text(self):
        renderer = self.renderer(
            assignment=existing_content_portlet.Assignment(
                content_uid=self.doc.UID(),
                show_text=True,
            ), )

        self.assertEqual(
            renderer.text,
            self.doc.text,
        )

        self.doc.text = RichTextValue(
            '<p>lorem ipsum dolor ...</p>',
            mimeType='text/html',
            outputMimeType='text/x-html-safe',
        )
        self.doc.reindexObject()

        renderer = self.renderer(assignment=renderer.data)

        self.assertEqual(
            renderer.text,
            self.doc.text.output,
        )
Ejemplo n.º 8
0
    def test_mailonly_filter_in_issue_public_view(self):
        self.issue = api.content.create(
            type="Newsletter Issue",
            id="issue",
            title="Issue 1",
            container=self.newsletter,
        )
        self.issue.title = "Test Newsletter Issue"
        body = (
            '<h1>This is the newsletter body!</h1><div class="mailonly">'
            "This test should only visible in mails not in public view!</div>")
        self.issue.text = RichTextValue(
            raw=body,
            mimeType="text/html",
            outputMimeType="text/x-plone-outputfilters-html",
            encoding="utf-8",
        )
        self.issue.prologue = self.default_prologue
        self.issue.epilogue = self.default_epilogue
        self.issue.output_template = "output_default"
        zt.commit()
        view = getMultiAdapter((self.issue, self.portal.REQUEST),
                               name="get-public-body")
        view_result = view()

        self.assertTrue(
            "mailonly" not in safe_unicode(view_result),
            "get-public-body view contains mailonly elements,"
            " this should filtert out!",
        )
Ejemplo n.º 9
0
def add_textarea_to_page(portal):
    setSite(portal)
    content_page = create(Builder('sl content page').titled(u'contentpage'))
    textarea_having_link = create(
        Builder('sl textblock').within(content_page).having(
            text=RichTextValue('...')).titled('textarea'))
    return textarea_having_link
Ejemplo n.º 10
0
    def test_existing_content_tile_private(self):
        """When the current user does not have enough permissions to view
        the content linked to existing content tile, the tile renders
        empty"""
        self.portal.portal_workflow.setDefaultChain(
            'simple_publication_workflow')

        page_id = self.portal.invokeFactory('Document',
                                            'an-another-page',
                                            title=u'An another page',
                                            description=u'A description',
                                            text=u'Hello World!')
        self.portal[page_id].text = RichTextValue(u'Hello World!')

        page_uuid = IUUID(self.portal[page_id])

        transaction.commit()

        browser = Browser(self.layer['app'])
        browser.handleErrors = False
        browser.open(
            self.portalURL +
            '/@@plone.app.standardtiles.existingcontent/unique?content_uid=' +
            page_uuid)

        self.assertNotIn(u'Hello World!', browser.contents)
        self.assertIn(u'<body></body>', browser.contents)
Ejemplo n.º 11
0
    def send_sample_message(self, body):
        self.assertSequenceEqual(self.mailhost.messages, [])
        self.issue = api.content.create(
            type="Newsletter Issue",
            id="issue",
            title="with image",
            container=self.newsletter,
        )
        self.issue.text = RichTextValue(
            raw=body,
            mimeType="text/html",
            outputMimeType="text/x-plone-outputfilters-html",
        )
        self.issue.prologue = self.default_prologue
        self.issue.epilogue = self.default_epilogue
        self.issue.output_template = "output_default"

        self.portal.REQUEST.form.update({
            "sender_name": self.newsletter.sender_name,
            "sender_email": self.newsletter.sender_email,
            "test_receiver": self.newsletter.test_email,
            "subject": self.issue.title,
            "test": "submit",
        })
        self.portal.REQUEST["REQUEST_METHOD"] = "POST"
        zt.commit()
        view = getMultiAdapter((self.issue, self.portal.REQUEST),
                               name="send-issue")

        view()

        self.assertEqual(len(self.mailhost.messages), 1)
        self.assertTrue(self.mailhost.messages[0])
        return safe_unicode(self.mailhost.messages[0])
Ejemplo n.º 12
0
 def get_text(self, department, mode="raw"):
     """Returns the text saved for the selected department
     """
     row = self.context.getResultsInterpretationByDepartment(department)
     rt = RichTextValue(row.get("richtext", ""), "text/plain", "text/html")
     if mode == "output":
         return rt.output
     return rt.raw
 def __call__(self):
     text = self.render_aggregation_sources()
     self.context.text = RichTextValue(
         raw=text,
         mimeType="text/html",
         outputMimeType="text/html",
     )
     return self.request.response.redirect(self.context.absolute_url(), status=301)
Ejemplo n.º 14
0
 def _set_text(self, obj, text):
     if IDexterityContent.providedBy(obj):
         # Dexterity
         obj.text = RichTextValue(text)
     else:
         # Archetypes
         obj.setText(text, mimetype='text/html')
     modified(obj)
Ejemplo n.º 15
0
    def test_remove_cleans_ref_catalog(self):
        doc1 = self.portal['doc1']
        doc1.text = RichTextValue('<a href="doc1">doc1</a>')
        modified(doc1)
        ref_catalog = self.portal.reference_catalog
        self.assertEquals(1, len(ref_catalog()))

        self.portal.manage_delObjects(['doc1'])
        self.assertEquals(0, len(ref_catalog()))
 def setUp(self):
     self.portal = self.layer['portal']
     setRoles(self.portal, TEST_USER_ID, ['Manager'])
     self.portal.invokeFactory('Document', 'doc1')
     self.doc1 = getattr(self.portal, 'doc1')
     self.doc1.setTitle("Ploneは素晴らしい。")
     text = "このページは予想している通り、テストです。 Pages Testing."
     self.doc1.text = RichTextValue(text, 'text/html', 'text/x-html-safe')
     self.doc1.reindexObject()
Ejemplo n.º 17
0
 def getText(self, department, mode='raw'):
     """ Returns the text saved for the selected department.
     """
     row = self.context.getResultsInterpretationByDepartment(department)
     rt = RichTextValue(row.get('richtext', ''), 'text/plain', 'text/html')
     if mode == 'output':
         return rt.output
     else:
         return rt.raw
    def setUp(self):
        self.mail_settings = get_portal_mail_settings()
        self.portal = self.layer["portal"]
        self.request = self.layer["request"]
        setRoles(self.portal, TEST_USER_ID, ["Manager"])
        login(self.portal, TEST_USER_NAME)
        self.portal.invokeFactory("Folder", "test-folder")
        self.folder = self.portal["test-folder"]
        self.portal = self.layer["portal"]
        self.folder.invokeFactory("Newsletter", "newsletter")
        self.newsletter = self.folder.newsletter
        self.newsletter.sender_email = "*****@*****.**"
        self.newsletter.sender_name = "ACME newsletter"
        self.newsletter.test_email = "*****@*****.**"
        prologue_output = self.newsletter.default_prologue.output
        self.default_prologue = RichTextValue(
            raw=prologue_output,
            mimeType="text/html",
            outputMimeType="text/x-plone-outputfilters-html",
        )
        epilogue_output = self.newsletter.default_epilogue.output
        self.default_epilogue = RichTextValue(
            raw=epilogue_output,
            mimeType="text/html",
            outputMimeType="text/x-plone-outputfilters-html",
        )

        # Set up a mock mailhost
        self.portal._original_MailHost = self.portal.MailHost
        self.portal.MailHost = mailhost = MockMailHost("MailHost")
        sm = getSiteManager(context=self.portal)
        sm.unregisterUtility(provided=IMailHost)
        sm.registerUtility(mailhost, provided=IMailHost)
        # We need to fake a valid mail setup
        # self.mail_settings.email_from_address = u'*****@*****.**'
        self.mailhost = self.portal.MailHost
        # image for image testing
        self.folder.invokeFactory("Image", "image")
        self.image = self.folder.image
        image = self.folder["image"]
        image.title = "My Image"
        image.description = "This is my image."
        image.image = dummy_image(image)
        self.image = image
Ejemplo n.º 19
0
 def afterSetUp(self):
     super(TestRenderBody, self).afterSetUp()
     self.folder.invokeFactory('News Item', 'news1')
     self.folder.invokeFactory('News Item', 'news2')
     self.news1 = self.folder.news1
     self.news1.setTitle('News 1')
     self.news1.setDescription('The news item #1')
     self.news1.text = RichTextValue(BODY_TEXT, 'text/html', 'text/html')
     self.news2 = self.folder.news2
     self.news2.setTitle('News 2')
     self.news2.text = RichTextValue(ROOTED_BODY_TEXT, 'text/html',
                                     'text/html')
     # Enable syndication on folder
     registry = getUtility(IRegistry)
     self.site_settings = registry.forInterface(ISiteSyndicationSettings)
     settings = IFeedSettings(self.folder)
     settings.enabled = True
     settings.render_body = True
     self.folder_settings = settings
Ejemplo n.º 20
0
 def afterSetUp(self):
     self.syndication = getToolByName(self.portal, 'portal_syndication')
     self.folder.invokeFactory('Document', 'doc')
     self.folder.invokeFactory('Document', 'doc1')
     self.folder.invokeFactory('News Item', 'news1')
     self.folder.invokeFactory('News Item', 'news2')
     self.folder.invokeFactory('File', 'file')
     self.doc1 = self.folder.doc1
     self.news1 = self.folder.news1
     self.news1.text = RichTextValue(BODY_TEXT, 'text/html', 'text/html')
     self.news2 = self.folder.news2
     self.news2.text = RichTextValue(ROOTED_BODY_TEXT, 'text/html',
                                     'text/html')
     self.file = self.folder.file
     # Enable syndication on folder
     registry = getUtility(IRegistry)
     self.site_settings = registry.forInterface(ISiteSyndicationSettings)
     settings = IFeedSettings(self.folder)
     settings.enabled = True
     self.folder_settings = settings
Ejemplo n.º 21
0
    def test_edit_existing_content_tile(self):
        """The existing content tile takes the uuid of a content object in the
        site and displays the result of calling its default view's content-core
        macro

        """
        page_id = self.portal.invokeFactory('Document', 'an-another-page')
        page = self.portal[page_id]
        page_uuid = IUUID(page)
        page.text = RichTextValue(u'Hello World!')

        transaction.commit()

        self.browser.open(
            '{}/@@edit-tile/plone.app.standardtiles.existingcontent/unique'.
            format(page.absolute_url()))
        self.browser.getControl(
            name='plone.app.standardtiles.existingcontent.content_uid'
        ).value = page_uuid
        self.browser.getControl(name='buttons.save').click()

        self.assertIn(u'not select the same content', self.browser.contents)

        page2_id = self.portal.invokeFactory('Document',
                                             'an-another-page-2',
                                             title=u'An another page',
                                             description=u'A description',
                                             text=u'Hello World!')
        page2 = self.portal[page2_id]
        page2_uuid = IUUID(page2)
        page2.text = RichTextValue(u'Hello World!')

        transaction.commit()

        self.browser.getControl(
            name='plone.app.standardtiles.existingcontent.content_uid'
        ).value = page2_uuid
        self.browser.getControl(name='buttons.save').click()
        self.assertIn(u'Hello World!', self.browser.contents)
 def setup_acessibilidade(self):
     with api.env.adopt_roles(['Manager', 'Reviewer']):
         pasta = api.content.create(type='Folder',
                                    id='acessibilidade',
                                    title='Pasta de Acessibilidade',
                                    description='Acessibilidade no Portal',
                                    container=self.portal)
         acessibilidade = api.content.create(
             type='Document',
             id='acessibilidade',
             title='Documento de Acessibilidade',
             description='Acessibilidade no Brasil',
             container=pasta)
         acessibilidade.text = RichTextValue(u'Homenagem à @garotadpi')
     return acessibilidade
Ejemplo n.º 23
0
    def test_slider_pane_with_title_and_with_text(self, browser):
        """
        This test makes sure that a slider pane configured to show the title
        and having some text will render both the title and the text.
        """
        container = create(
            Builder('slider container').titled(u'Slider Container'))
        create(
            Builder('slider pane').titled(u'The title of the pane').having(
                text=RichTextValue('The text of the pane')).having(
                    show_title=True).with_dummy_image().within(container))

        browser.visit(container, view='slider_view')
        self.assertEqual(['The title of the pane The text of the pane'],
                         browser.css('.sliderPane').text)
Ejemplo n.º 24
0
    def test_slider_pane_with_text_does_only_render_the_text(self, browser):
        """
        This test makes sure that a slider pane having some text will really
        render the text.
        """
        container = create(
            Builder('slider container').titled(u'Slider Container'))
        create(
            Builder('slider pane').titled(u'The title of the pane').having(
                text=RichTextValue('The text of the pane')).with_dummy_image().
            within(container))

        browser.visit(container, view='slider_view')
        self.assertEqual(['The text of the pane'],
                         browser.css('.sliderPane').text)
 def __call__(self):
     text = self.render_aggregation_sources()
     self.context.text = RichTextValue(
         raw=text,
         mimeType="text/html",
         outputMimeType="text/html",
     )
     api.portal.show_message(
         message=_("Newsletter content successfully aggregated."),
         request=self.request,
         type="info",
     )
     self.request.response.setHeader("Pragma", "no-cache")
     self.request.response.setHeader("Cache-Control", "no-cache")
     return self.request.response.redirect(self.context.absolute_url(), status=301)
Ejemplo n.º 26
0
def reset_datagridfields(context, logger=None):
    """Reset some data grid fields to empty rich text fields.
    Some data grid fields were replaced by a rich text field showing new
    contained objects. """

    if logger is None:
        # Called as upgrade step: define our own logger.
        logger = logging.getLogger('uwosh.oie.studyabroadstudent')

    catalog = api.portal.get_tool('portal_catalog')
    brains = catalog(portal_type='OIEStudyAbroadProgram')
    count = 0
    for brain in brains:
        obj = brain.getObject()
        if not isinstance(obj.courses, RichText):
            obj.courses = \
                RichTextValue(raw='<em>There are currently no courses</em>')
        if (getattr(obj.add_course_link, 'raw', None) and
            len(obj.add_course_link.raw) == 0) or \
            (not getattr(obj.add_course_link, 'raw', None) and
             len(obj.add_course_link) == 0):
            obj.add_course_link = \
                RichTextValue(
                    raw='<em>You can add courses after saving this program</em>',  # noqa
                )
        if not isinstance(obj.health_safety_security_documents, RichText):
            obj.health_safety_security_documents = \
                RichTextValue(
                    raw='<em>There are currently no documents</em>',
                )
        if (getattr(obj.add_health_document_link, 'raw', None) and
            len(obj.add_health_document_link.raw) == 0) or \
            (not getattr(obj.add_health_document_link, 'raw', None) and
             len(obj.add_health_document_link) == 0):
            obj.add_health_document_link = \
                RichTextValue(
                    raw='<em>You can add health documents after saving this program</em>',  # noqa
                )
        if not isinstance(obj.travelDatesTransitionsAndDestinations, RichText):
            obj.travelDatesTransitionsAndDestinations = \
                RichTextValue(
                    raw='<em>There are currently no transitions</em>',
                )
        if (getattr(obj.add_transition_link, 'raw', None) and
            len(obj.add_transition_link.raw) == 0) or \
            (not getattr(obj.add_transition_link, 'raw', None) and
             len(obj.add_transition_link) == 0):
            obj.add_transition_link = \
                RichTextValue(
                    raw='<em>You can add transitions after saving this program</em>',  # noqa
                )
        logger.info('updated rich text fields for {0}'.format(obj.title))
        count += 1

    logger.info('{0} items migrated'.format(count))
Ejemplo n.º 27
0
def upgrade_3(context):
    pages = plone.api.portal.get_tool('portal_catalog')(portal_type='Document')
    for page in pages:
        changed = False
        page = page.getObject()
        if page.text:
            soup = BeautifulSoup(page.text.raw, 'html.parser')
            for elem in soup.find_all('img'):
                src = elem.attrs.get('src')
                if '@@latex' in src:
                    elem.attrs['data-mce-object'] = 'latex'
                    changed = True
            if changed:
                page.text = RichTextValue(
                    str(soup),
                    mimeType=page.text.mimeType,
                    outputMimeType=page.text.outputMimeType)
Ejemplo n.º 28
0
    def test_rename_updates_ref_catalog(self):
        doc1 = self.portal['doc1']
        doc2 = self.portal['doc2']
        ref_catalog = self.portal.reference_catalog
        doc1.text = RichTextValue('<a href="doc2">doc2</a>')
        modified(doc1)
        self.assertEquals(1, len(ref_catalog()))

        self.assertEquals([doc2], IReferenceable(doc1).getReferences())
        ref_brain = ref_catalog()[0]
        self.assertTrue(ref_brain.getPath().startswith('doc1'))
        self.portal.manage_renameObject(id='doc1', new_id='new_name')
        modified(doc1)
        self.assertEquals(1, len(ref_catalog()))
        ref_brain = ref_catalog()[0]
        self.assertTrue(ref_brain.getPath().startswith('new_name'))
        self.assertEquals([doc2], IReferenceable(doc1).getReferences())
    def test_permission(self):
        setRoles(self.portal, TEST_USER_ID, ["Editor"])
        self.portal.REQUEST.set("ACTUAL_URL", "http://nohost")
        self.issue = api.content.create(
            type="Newsletter Issue",
            id="issue",
            title=u"Issue 1",
            container=self.newsletter,
        )
        self.issue.title = "Test Newsletter Issue"
        body = "<h1>This is the newsletter body!"
        self.issue.text = RichTextValue(
            raw=body,
            mimeType="text/html",
            outputMimeType="text/x-plone-outputfilters-html",
            encoding="utf-8",
        )
        self.issue.prologue = self.default_prologue
        self.issue.epilogue = self.default_epilogue
        self.issue.output_template = "output_default"

        view = getMultiAdapter(
            (self.newsletter, self.portal.REQUEST), name="newsletter-drafts"
        )
        view_result = view()
        self.assertIn("test-folder/newsletter/issue", view_result)

        view = self.newsletter.restrictedTraverse("issue/send-issue-form")
        view_result = view()

        self.assertIn("Test Newsletter", view_result)

        # Editor is not allowed to call the one-step send-issue meant for cron
        # XXX
        # with self.assertRaises(Unauthorized):
        #     self.newsletter.restrictedTraverse("issue/send-issue-immediately")

        # check for postonly
        view = self.newsletter.restrictedTraverse("issue/send-issue")
        with self.assertRaises(Forbidden):
            view()
    def test_portlet_rendering(self):
        self.doc.description = 'a description'
        self.doc.text = RichTextValue(
            '<p>lorem ipsum dolor ...</p>',
            mimeType='text/html',
            outputMimeType='text/x-html-safe',
        )
        self.doc.reindexObject()

        renderer = self.renderer(
            assignment=existing_content_portlet.Assignment(
                content_uid=self.doc.UID(),
                show_title=True,
                show_description=True,
                show_text=True,
            ), )

        renderer_output = renderer.render()
        self.assertIn(self.doc.title, renderer_output)
        self.assertIn(self.doc.description, renderer_output)
        self.assertIn(self.doc.text.output, renderer_output)
Ejemplo n.º 31
0
    def setUpPloneSite(self, portal):
        # Install into Plone site using portal_setup
        if 'Document' not in portal.portal_types:
            applyProfile(portal, 'plone.app.contenttypes:default')
        setRoles(portal, TEST_USER_ID, ['Manager'])
        login(portal, TEST_USER_NAME)
        for i in range(0, 12):
            portal.invokeFactory(
                'Document',
                'my-page' + str(i),
                text=RichTextValue(u'spam spam ham eggs', 'text/html',
                                   'text/x-html-safe'),
            )
            # Sleep before creating the next one, otherwise ordering by date is
            # not deterministic.
            time.sleep(0.1)
        setRoles(portal, TEST_USER_ID, ['Member'])

        # Commit so that the test browser sees these objects
        import transaction
        transaction.commit()