Skip to main content

Helper package to setup a RedTurtle's Plone site ready to work with Volto.

Project description

This is an helper package that setup a RedTurtle’s Plone site ready to work with Volto.

python version ci

Features

Content-types

  • Disabled Collection

  • Document, News Item and Event are folderish types (thanks to collective.folderishtypes.dx)

  • News Item and Event can only contain Links, Images and Files

  • Plone Site is a DX content

  • Revert News Item and Event to be non-folderish (collective.folderishtypes.dx makes them folderish)

Blocks

volto.blocks behavior is enabled by default for these content-types:

  • Document

  • News Item

  • Event

Custom blocks transformers

There are custom transformers for serializer and deserializer to better manage resolveuids.

There is an edge-case when a block refers its context: in this case, to avoid maximum recursion depth in uids resolving, that uid will be expanded with the Summary json version and not the full object.

@context-navigation endpoint

plone.restapi’s @navigation endpoint always return the navigation tree from the site root.

There is a @context-navigation endpoint that returns the contextual navigation tree:

> curl -i http://localhost:8080/Plone/folder?context-navigation -H ‘Accept: application/json’

This is the result:

{
    '@id': 'http://localhost:8080/Plone/folder',
    'items': [
        {'@id': 'http://localhost:8080/Plone/folder/folder-a',
            'description': '',
            'title': 'Folder A'},
        {'@id': 'http://localhost:8080/Plone/folder/folder-b',
            'description': '',
            'title': 'Folder B'},
        {'@id': 'http://localhost:8080/Plone/folder/folder-c',
            'description': '',
            'title': 'Folder C'}
    ]
}

By default only first level is shown. You can pass an expand.navigation.depth parameter to set the depth:

> curl -i http://localhost:8080/Plone/folder?context-navigation?expand.navigation.depth=2 -H 'Accept: application/json'

And this is the result:

{
    '@id': 'http://localhost:8080/Plone/folder',
    'items': [
        {
            '@id': 'http://localhost:8080/Plone/folder/folder-a',
            'description': '',
            'items': [
                {
                    '@id': 'http://localhost:8080/Plone/folder/folder-a/folder-aa',
                    'description': '',
                    'title': 'Folder AA',
                },
                {
                    '@id': 'http://localhost:8080/Plone/folder/folder-a/folder-ab',
                    'description': '',
                    'title': 'Folder AB',
                },
            ],
            'title': 'Folder A',
        },
        {
            '@id': 'http://localhost:8080/Plone/folder/folder-b',
            'description': '',
            'title': 'Folder B',
        },
        {
            '@id': 'http://localhost:8080/Plone/folder/folder-c',
            'description': '',
            'title': 'Folder C',
        },
    ],
}

@site-search endpoint

This endpoint works exactly like @search but take care of types not searchable settings.

@sitemap-settings

Endpoint that returns sitemap settings for anonymous users (that can’t access registry entries).

Returns a data structure like this:

{
    'depth': 3,
}

@search endpoint

We customized @search endpoint for that bug: https://github.com/plone/plone.restapi/pull/1066

@querystring-search endpoint customization

If we are searching only for Event types, do a special search using get_events method to search events: that method handle recurrences and avoid wrong results.

Otherwise, perform a default querystring-search.

Disallow bot indexing

There is a custom viewlet that add a <meta> tag in the <head> section to prevent bot indexing.

For reference: https://developers.google.com/search/docs/advanced/crawling/block-indexing?visit_id=637489966041845317-1328107746&rd=1

Patches

Keywords vocabulary

We copied the patch from kitconcept.volto for special characters in keywords vocabulary (used for example in Subjects field).

Products.PortalTransforms

See https://github.com/plone/Products.PortalTransforms/pull/43

There is a monkeypatch to apply that changes.

Events recurrence

There is a monkeypatch for Events recurrences that fix their duration.

If it works well, we can make a pr in p.a.event.

Respect locally allowed types on paste

Disallow paste items that are not allowed into destination folder.

Fixed dependencies versions

There are some dependencies fixed in setup.py file. When Plone 5.2 will be released, we can remove these:

  • waitress >= 1.4.3

  • plone.app.contenttypes >= 2.1.6

  • plone.rest >= 1.6.1

  • plone.dexterity >= 2.9.5

  • Products.ZCatalog >= 5.1

  • plone.namedfile >= 5.4.0

  • Products.PloneHotfix20200121 >= 1.0

New Criteria

There is one new criteria for Collections and Listing blocks that search on exclude_from_nav index.

Events recurrence patch

There is a monkeypatch for Events recurrences that fix their duration.

If it works well, we can make a pr in p.a.event.

Caching controlpanel

After installation the caching control panel is populated with custom policies while caching is globally enabled by default. Please, set the caching proxies properly.

@vocabularies endpoint

Grant plone.restapi: Access Plone vocabularies permission to Anonymous users.

This allows users to potentially access to all vocabularies.

To avoid this, we patched the @vocabularies endpoint and add an additional checks:

  • Anonymous can’t access to the vocabularies list (@vocabularies)

  • Anonymous can only access to a limited list of vocabularies (see below)

  • Simple users (users that only have basic roles like Member and Authenticated) can access to the vocabularies list

  • Simple users can only acces to a limited list of vocabularies (see below)

  • Advanced users can access to all vocabularies

Available vocabularies

  • plone.app.vocabularies.Keywords

Customize available vocabularies list

There is a check in @vocabularies endpoint that checks if the given vocabulary name is in a whitelist.

That list is composed joining a list of names provided by some utilities.

There is a base list in this package, but you can extend it registering an utility like this:

<utility
    provides="redturtle.volto.interfaces.IRestapiPublicVocabularies"
    factory=".my_utility.allowed_vocabularies"
/>

And in my_utility.py file:

def allowed_vocabularies():
    return ["my.vocabulary", "my.other.vocabulary"]

The endpoint get all registered utilities and join all values.

Installation

Install redturtle.volto by adding it to your buildout:

[buildout]

...

eggs =
    redturtle.volto

and then running bin/buildout

Contribute

License

The project is licensed under the GPLv2.

Authors

This product was developed by RedTurtle Technology team.

RedTurtle Technology Site

Contributors

Changelog

3.2.2 (2021-08-24)

  • Enable Anonymous to access Plone vocabularies with restapi. @vocabularies endpoint has been customized to limit the vocabularies that anonymous can actually access. [cekk]

3.2.1 (2021-08-04)

  • Remove customized @workflow endpoint. Is now merged in plone.restapi >= 8.7.1. [cekk]

3.2.0 (2021-08-02)

  • Customize @workflow endpoint for plone.restapi #1184 and #1190 pr. [cekk]

  • Remove default cache proxy address on install. [cekk]

3.1.3 (2021-06-30)

  • Fix b_size conversion in upgrade-step for Volto 13. [cekk]

3.1.2 (2021-06-18)

  • Fix also linkMore in volto13 migration. [cekk]

3.1.1 (2021-06-17)

  • Handle contents with old Richtext values in volto13 migration. [cekk]

3.1.0 (2021-06-17)

  • [BREAKING CHANGE] Volto 13 support. The upgrade-step will update listing blocks data. [cekk]

3.0.1 (2021-06-08)

  • review caching profile [mamico]

3.0.0 (2021-05-28)

  • Provided basic setup for caching policies in control panel. [daniele]

2.1.2 (2021-05-11)

  • Additional fix in start and end values handling in querystring-search. [cekk]

2.1.1 (2021-05-11)

  • Fix start and end values handling in querystring-search. [cekk]

2.1.0 (2021-05-05)

  • Compatibility with changes in plone.restapi 7.3.2. [cekk]

2.0.2 (2021-05-05)

  • Handle also limit in querystringsearch patch. [cekk]

2.0.1 (2021-05-05)

  • Handle sort order in querystringsearch patch. [cekk]

2.0.0 (2021-04-30)

  • Remove @events-search endpoint and customize @querystring-search one to handle Events like @events-search. [cekk]

1.3.0 (2021-04-19)

  • Monkeypatch to respect locally allowed types also on content paste. [cekk]

1.2.4 (2021-04-15)

  • Customize translation for remoteUrl field description only for restapi call. [cekk]

1.2.3 (2021-04-01)

  • added block type ‘searchEvents’ to EXCLUDE_TYPES [giuliaghisini]

1.2.2 (2021-03-25)

  • Added upgrade step to import p.a.c. profile. [daniele]

1.2.1 (2021-03-17)

  • Monkeypatch for Events recurrences. [cekk]

  • Fix profile name in upgrade-steps. [cekk]

1.2.0 (2021-03-02)

  • New endpoint to search Events: @events-search.

  • Better handle serialization for recursion problems: now only serialize with ISerializeToJsonSummary if the referred item is the current context. [cekk]

1.1.0 (2021-03-01)

  • Expand uids with ISerializeToJsonSummary and not with fullobject to gain space and avoid maximum recursion depth it a block has an internal reference to the current context. [cekk]

1.0.9 (2021-02-23)

  • Handle unauthorized in blocks serializer. [cekk]

1.0.8 (2021-02-19)

  • Fix typo. [cekk]

1.0.7 (2021-02-19)

  • Do not run dependencies when upgrading plone.app.registry. [cekk]

1.0.6 (2021-02-15)

  • Disallow Plone site indexing: add noindex in <head> [cekk]

  • Revert robots.txt customization because is in conflict to noindex directive. [cekk]

1.0.5 (2021-02-11)

1.0.4 (2021-02-10)

  • Customize robots.txt to disallow /api entry. [cekk]

1.0.3 (2021-02-09)

1.0.2 (2021-02-09)

  • Re-add remoteUrl field serializer. [cekk]

1.0.1 (2021-02-08)

  • [new] Add here from modena the RSS.pt template override [lucabel]

  • Remove text block serializer that is already merged into plone.restapi. [cekk]

  • Register generic serializer also for site root. [cekk]

1.0.0 (2020-12-07)

  • Add exclude_from_nav as Collection criteria (used also in Volto’s listing blocks). [cekk]

  • Add custom TextLine adapter to return the proper widget for remoteUrl field. [cekk]

0.1.6 (2020-11-25)

  • Allow Products.PloneHotfix20200121 versions greater than 1.0. [pnicolli]

  • Fix generic serializer/deserializer. [cekk]

  • Skip also “calendar” when check for url deserializing blocks [lucabel]

  • Fix document template. [cekk]

0.1.5 (2020-10-20)

  • Remove resolveuid serializer/deserializer for blocks: now they are integrated in plone.restapi. [cekk]

  • Add custom transformers for blocks to handle link in generic blocks. [cekk]

  • Enable Editor and Contributor to access Plone vocabularies with restapi. [cekk]

  • Add @sitemap-settings endpoint. [cekk]

0.1.4 (2020-07-16)

  • Add keywords vocabulary patch. [cekk]

0.1.3 (2020-06-22)

  • Added default homepages [nzambello]

  • Added blocks behavior to LRF [nzambello]

  • Made editable and viewable Plone Site with blocks behavior [nzambello]

  • Remove richtext behavior from News Items, Events and Documents. [cekk]

  • News Item and Event are folderish and can only contain Links, Images and Files. [cekk]

0.1.2 (2020-05-25)

  • Revert to Event and News Item default behaviors. [cekk]

0.1.1 (2020-05-22)

  • Install also collective.volto.cookieconsent. [cekk]

0.1.0 (2020-05-22)

  • Initial release. [cekk]

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

redturtle.volto-3.2.2.tar.gz (51.7 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page