Beispiel #1
0
 def get_remote_url(self):
     """
     Resolve uid and return ref absolute url
     """
     if ILink.providedBy(self.context):
         value = getattr(self.context, "remoteUrl", "")
     else:
         value = self.context.getRemoteUrl
     if not value:
         return ""
     if value.startswith("http"):
         # it isn't an internal link, so we can return it
         return value
     path = replace_link_variables_by_paths(context=self.context, url=value)
     match = RESOLVEUID_RE.match(path)
     if match:
         uid, suffix = match.groups()
         return uuidToURL(uid)
     else:
         portal = api.portal.get()
         try:
             ref_obj = portal.restrictedTraverse(path, None)
             if ref_obj:
                 return ref_obj.absolute_url()
         except Exception:
             return ""
     return ""
    def test_fix_interface_for_link(self):
        self.obj.portal_type = 'Link'
        self.catalog.reindexObject(self.obj)

        self.portal.restrictedTraverse('fix_base_classes')()

        self.assertTrue(ILink.providedBy(self.obj))
    def test_fix_interface_for_link(self):
        self.obj.portal_type = 'Link'
        self.catalog.reindexObject(self.obj)

        self.portal.restrictedTraverse('fix_base_classes')()

        self.assertTrue(ILink.providedBy(self.obj))
 def test_factory(self):
     fti = queryUtility(
         IDexterityFTI,
         name='Link'
     )
     factory = fti.factory
     new_object = createObject(factory)
     self.assertTrue(ILink.providedBy(new_object))
 def test_factory(self):
     fti = queryUtility(
         IDexterityFTI,
         name='Link'
     )
     factory = fti.factory
     new_object = createObject(factory)
     self.assertTrue(ILink.providedBy(new_object))
 def is_printable(self):
     if ILink.providedBy(self.context):
         return False
     if IFile.providedBy(self.context):
         return IIconifiedPreview(self.context).is_convertible()
     if IImage.providedBy(self.context):
         return True
     return True
Beispiel #7
0
 def test_link_is_migrated(self):
     from Products.ATContentTypes.content.link import ATLink
     from plone.app.contenttypes.migration.migration import LinkMigrator
     from plone.app.contenttypes.interfaces import ILink
     at_link = self.createATCTobject(ATLink, 'link')
     migrator = self.get_migrator(at_link, LinkMigrator)
     migrator.migrate()
     new_link = self.portal['link']
     self.assertTrue(ILink.providedBy(new_link))
     self.assertTrue(at_link is not new_link)
 def test_link_is_migrated(self):
     from plone.app.contenttypes.migration.migration import LinkMigrator
     from plone.app.contenttypes.interfaces import ILink
     self.portal.invokeFactory('Link', 'link')
     at_link = self.portal['link']
     applyProfile(self.portal, 'plone.app.contenttypes:default')
     migrator = self.get_migrator(at_link, LinkMigrator)
     migrator.migrate()
     dx_link = self.portal['link']
     self.assertTrue(ILink.providedBy(dx_link))
     self.assertTrue(dx_link is not at_link)
Beispiel #9
0
 def test_link_content_is_migrated(self):
     from plone.app.contenttypes.migration.migration import LinkMigrator
     from plone.app.contenttypes.interfaces import ILink
     from Products.ATContentTypes.content.link import ATLink
     at_link = self.createATCTobject(ATLink, 'link')
     field = at_link.getField('remoteUrl')
     field.set(at_link, 'http://plone.org')
     migrator = self.get_migrator(at_link, LinkMigrator)
     migrator.migrate()
     new_link = self.portal['link']
     self.assertTrue(ILink.providedBy(new_link.link))
     self.assertEqual(new_link.link.remoteUrl, u'http://plone.org')
 def test_link_content_is_migrated(self):
     from plone.app.contenttypes.migration.migration import LinkMigrator
     from plone.app.contenttypes.interfaces import ILink
     self.portal.invokeFactory('Link', 'link')
     at_link = self.portal['link']
     field = at_link.getField('remoteUrl')
     field.set(at_link, 'http://plone.org')
     applyProfile(self.portal, 'plone.app.contenttypes:default')
     migrator = self.get_migrator(at_link, LinkMigrator)
     migrator.migrate()
     dx_link = self.portal['link']
     self.assertTrue(ILink.providedBy(dx_link.link))
     self.assertEqual(dx_link.link.remoteUrl, u'http://plone.org')
Beispiel #11
0
    def GET(self):
        """ Return the links from Menu Gestion folder and Menu ControlPanel """
        language = self.params['language']
        portal = api.portal.get()

        resultsGestion = {}
        try:
            path = portal['gestion']['menu'][language]  # fixed en code... always in this path
            folders = api.content.find(context=path, portal_type=('Folder', 'privateFolder'), depth=1)
            found = True
        except:
            # 'Menu Gestion not configured or Language not found.'
            resultsGestion = ''
            found = False

        if found:
            # Links from gestion folder
            for folder in folders:
                resultsGestion[folder.Title] = []
                menufolder = folder.getObject().items()
                for item in menufolder:
                    if ILink.providedBy(item[1]):
                        menuLink = dict(url=item[1].remoteUrl,
                                        title=item[1].title,
                                        )
                        resultsGestion[folder.Title].append(menuLink)

            if not resultsGestion:
                # 'No Menu Gestion configured in this Site.'
                resultsGestion = ''

        registry = getUtility(IRegistry)
        settings = registry.forInterface(IUlearnControlPanelSettings, check=False)

        # Links from controlpanel
        resultsControlPanel = []
        if settings.quicklinks_table:
            for item in settings.quicklinks_table:
                quickLink = dict(title=item['text'],
                                 url=item['link'],
                                 icon=item['icon'],
                                 )
                resultsControlPanel.append(quickLink)

        if not resultsControlPanel:
            # 'Menu Quicklinks not configured in the ControlPanel.'
            resultsControlPanel = ''

        values = {'Menu_Gestion': resultsGestion, 'Menu_Controlpanel': resultsControlPanel}

        return ApiResponse(values)
Beispiel #12
0
    def test_migrate_class_also_updates_provided_interfaces_info(self):
        if getFSVersionTuple() > (5, ):
            from plone.app.contenttypes.content import Link
            from plone.app.contenttypes.interfaces import ILink
            from plone.app.contenttypes.interfaces import IDocument
        else:
            from Products.ATContentTypes.content.link import ATLink as Link
            from Products.ATContentTypes.interfaces import IATLink as ILink
            from Products.ATContentTypes.interfaces import IATDocument as IDocument

        obj = create(Builder('document'))
        self.assertTrue(IDocument.providedBy(obj))
        self.assertFalse(ILink.providedBy(obj))

        class Step(UpgradeStep):
            def __call__(self):
                self.migrate_class(obj, Link)

        Step(self.portal_setup)
        self.assertFalse(IDocument.providedBy(obj),
                         'Document interface not removed in migration')
        self.assertTrue(ILink.providedBy(obj),
                        'Link interface not added in migration')
 def get_remote_url(self):
     if ILink.providedBy(self.context):
         value = getattr(self.context, "remoteUrl", "")
     else:
         value = self.context.getRemoteUrl
     if not value:
         return ""
     path = replace_link_variables_by_paths(context=self.context, url=value)
     match = RESOLVEUID_RE.match(path)
     if match:
         uid, suffix = match.groups()
         return uuidToURL(uid)
     else:
         portal = getMultiAdapter(
             (self.context, self.context.REQUEST), name="plone_portal_state"
         ).portal()
         ref_obj = portal.restrictedTraverse(path, None)
         if ref_obj:
             return ref_obj.absolute_url()
     return value
 def test_adding(self):
     self.portal.invokeFactory(
         'Link',
         'doc1'
     )
     self.assertTrue(ILink.providedBy(self.portal['doc1']))
 def test_adding(self):
     self.portal.invokeFactory('Link', 'doc1')
     self.assertTrue(ILink.providedBy(self.portal['doc1']))
 def test_adding_l2(self):
     self.assertTrue(ILink.providedBy(self.l2))
Beispiel #17
0
    def staticpages_single(self):
        """saticpages/single View

        Context: INavigationRoot content

        Get parameter:

            * lang: language folder, multiple allowed to set fallback, required
            * path: path to item relative to the lang folder

        Traverse to the content under lang/path and return the rendered html
        of the default view.

        @return: JSON dictionary with html representation

        """
        item = None
        view = None
        link = None
        response_data = {}
        lang = u''
        data = self._get_data()
        if data['langs'] == [] or data['path'] == '':
            raise KeyError
        if data['path'].startswith("author/")\
                or data['path'].startswith("sitemap"):
            view = self.context.restrictedTraverse(data['path'])
        else:
            for lang in data['langs']:
                try:
                    item = self.context\
                        .restrictedTraverse("/".join([lang, data['path']]))
                    lang = lang
                    if item is not None:
                        break
                except (KeyError, TraversalError):
                    pass
            if item is None:
                raise KeyError
        if ILink.providedBy(item):
            link = item
            item = None
        response_data['lang'] = lang
        response_data['private'] = False

        html = ''
        tree = None
        redirect_url = u''
        if link:
            portal_state = link.restrictedTraverse("@@plone_portal_state")
            if "${navigation_root_url}" in link.remoteUrl:
                navigation_root_url = portal_state.navigation_root_url()
                redirect_url = link.remoteUrl.replace("${navigation_root_url}",
                                                      navigation_root_url)
            elif "${portal_url}" in link.remoteUrl:
                portal_url = portal_state.portal_url()
                redirect_url = link.remoteUrl.replace("${portal_url}",
                                                      portal_url)
            else:
                redirect_url = link.remoteUrl
        if view:
            html = view()
        if item:
            default_page_view = getMultiAdapter((item, self.request),
                                                name="default_page")
            default_page = default_page_view.getDefaultPage()
            item = item[default_page] if default_page else item

            viewname = item.getLayout() or item.getDefaultLayout()
            view = None
            try:
                view = getMultiAdapter((item, self.request), name=viewname)
            except ComponentLookupError:
                viewname = 'view'
                view = getMultiAdapter((item, self.request), name=viewname)
            view.request.URL = item.absolute_url() + "/" + viewname
            view.request.response.setHeader('Content-Type', 'text/html')
            view.request['plone.app.blocks.enabled'] = True
            html_no_tiles = view()
            parser = etree.HTMLParser()
            tree = etree.parse(StringIO(html_no_tiles), parser)
            renderTiles(view.request, tree)
            html = etree.tostring(tree.getroot(), method="html",
                                  pretty_print=True)

        soup = BeautifulSoup(html)

        css_classes_soup = soup.body['class'] if soup.body else None
        response_data['css_classes'] = css_classes_soup\
            if css_classes_soup else []
        column_r_soup = soup.find(id='portal-column-two')
        response_data['column_right'] = column_r_soup.encode('utf-8').strip()\
            if column_r_soup else u''
        nav_soup = soup.find(id='portal-globalnav')
        response_data['nav'] = nav_soup.encode('utf-8').strip()\
            if nav_soup else u''

        content_soup = soup.find(id="content")
        remove_ids = ['plone-document-byline']
        for id_ in remove_ids:
            tag = content_soup.find(id=id_) if content_soup else None
            if tag:
                tag.extract()
        remove_tags = ['script']
        for tag in remove_tags:
            tags_ = content_soup.find_all(tag) if content_soup else []
            for tag_ in tags_:
                tag_.extract()
        title_soup = content_soup.find(class_='documentFirstHeading')\
            if content_soup else None
        response_data['title'] = title_soup.extract().get_text().strip()\
            if title_soup else u''
        descr_soup = content_soup.find(class_='documentDescription')\
            if content_soup else None
        response_data['description'] = descr_soup.extract().get_text().strip()\
            if descr_soup else u''
        response_data['body'] = content_soup.encode("utf-8").strip()\
            if content_soup else u''
        response_data['redirect_url'] = redirect_url

        return response_data
 def test_adding_l2(self):
     self.assertTrue(ILink.providedBy(self.l2))