What is kitconcept.core?#
It is a backend and frontend setup that serves as the baseline and foundation for all kitconcept GmbH distributions built on top of Plone.
It includes common features, add-ons, configuration, best practices, and shared components that are used across multiple projects.
Backend Package#
Named kitconcept.core, the backend package provides all the building blocks needed to create a new Plone-based distribution.
Site creation#
This package enhances Products.CMFPlone's site creation mechanism by allowing a new base profile—rather than Products.CMFPlone:plone—to signal to the upgrade machinery that a new version is available.
To do so, kitconcept.core specializes the MigrationTool kitconcept.core.tool.migration.MigrationTool to support a new base profile and a dynamic list of dependencies. We use kitconcept.core.factory.add_site—instead of
Products.CMFPlone.factory.addPloneSite—to work with this enhanced MigrationTool.
Generic Setup profiles#
When you run a Generic Setup profile, the order of execution is:
Run the pre_handler defined in the profile registration
Install the dependencies listed on
metadata.xml, in the order they are definedRun every other import step defined in the profile (XML files)
Run the post_handler defined in the profile registration
Considering this order, we need more than one profile to complete site creation, and based on the existing logic from Products.CMFPlone, we created distinct profiles:
kitconcept.core:base#
The first profile is a replacement for Products.CMFPlone:plone. It defines the Dexterity content type definition for Plone Site. This is required to create the site instance.
This profile also contains configuration that does not require the Plone Site creation to be finalized, such as registering workflows, permissions, and the catalog.
The profile metadata.xml has no dependencies on other Generic Setup profiles and defines the "version" for kitconcept.core.
There is a post_handler script (kitconcept.core.setuphandlers.base.import_final_steps) that finalizes site creation by:
Initialize the MigrationTool by setting the base profile and package.
Purge profile versions on
portal_setupSet the initial version on
portal_setupRun the
kitconcept.core:cmfdependenciesprofileRun the
kitconcept.core:dependenciesprofileRun additional functions to set up the site:
Products.CMFPlone.setuphandlers.replace_local_role_managerProducts.CMFPlone.setuphandlers.addCacheHandlersProducts.CMFPlone.setuphandlers.first_weekday_setupProducts.CMFPlone.setuphandlers.timezone_setup
kitconcept.core:cmfdependencies#
This profile is a replacement for Products.CMFPlone:dependencies and installs core add-ons—using their Generic Setup profiles—that implement features required by other add-ons and the distributions (i.e., the registry, portlets, theming, and versioning).
This profile installs a list of other profiles during its installation (examples: Products.CMFEditions:CMFEditions, plone.app.registry:default, plone.app.users:default).
In Products.CMFPlone, registry records, portlet managers, and assignments are set by this profile. In our profile, we keep the registry records and portlet managers (to avoid issues with third-party add-ons), but do not assign any portlet.
kitconcept.core:dependencies#
The third profile is the one with all the settings we want to be shared across all our distributions.
This profile will install our required dependencies:
Plone RESTAPI (
plone.restapi:default)Plone Volto (
plone.volto:default)Collective Person (
collective.person:default)Volto Light Theme (
kitconcept.voltolighttheme:default)Volto Form Support (
collective.volto.formsupport:default)Social Media Support (
plonegovbr.socialmedia:default)
Also, it sets:
Content types
Versioning
Catalog indexes and metadata
Control panels
Registry records
Upgrade / Migration#
Note
The migration / upgrade warnings in the user interface no longer refer to new versions of Plone, but new versions of kitconcept.core -- defined in the metadata.xml of the kitconcept.core:base Generic Setup profile.
After bumping the version of kitconcept.core:base, we need to create a new upgrade step, like the one below:
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
>
<genericsetup:upgradeSteps
profile="kitconcept.core:base"
source="20251209001"
destination="20260122001"
>
<genericsetup:upgradeStep
title="Upgrade dependencies for Plone 6.1.4"
handler="..utils.null_upgrade_step"
/>
<genericsetup:upgradeDepends
title="Adds disable_profile_links setting to kitconcept settings"
import_profile="kitconcept.core:dependencies"
import_steps="plone.app.registry"
/>
</genericsetup:upgradeSteps>
</configure>
Dependencies listed on kitconcept.core.factory.LocalAddonList will be upgraded to their latest installed version automatically when an upgrade of the base profile is run.