---
title: "Feature: Restrict the backend contract selects"
manual: "Academic Profiles"
version: "main"
source: "Changelog/3.0/Feature-RestrictTheBackendContractSelects.rst"
rendered: "2026-09-22T18:32:44+00:00"
---

# Feature: Restrict the backend contract selects {#feature-restrict-the-backend-contract-selects}

## Description {#description}

The two backend fields that let an editor pick a contract — the
**Contract** of a page contact record of
[`fgtclb/academic-contacts4pages`](https://packagist.org/packages/fgtclb/academic-contacts4pages), and **Selected contracts**
of the **Profiles: Selected Contracts** content element — offer every
contract of the installation. In an installation with more than one site that
is every site's contracts, each labelled with a person's name.

Page TSconfig now restricts a field to the pages its contracts are stored on:

**Page TSconfig of a site root**

```typoscript
# The "Contract" field of a page contact record.
TCEFORM.tx_academiccontacts4pages_domain_model_contact.contract.itemsProcFunc {
    storagePids = 42,84
    recursive = 1
}

# The "Selected contracts" field of the content element.
TCEFORM.tt_content.pi_flexform.academicpersons_selectedcontracts.sDEF.settings\.selectedContracts.itemsProcFunc {
    storagePids = 42,84
    recursive = 1
}
```

`storagePids` is a comma-separated list of page uids and
`recursive` the number of levels below each of them to include; a
hidden folder is included as well, because a storage folder is regularly
hidden.

A contract the edited record already references stays selectable wherever it is
stored, so that opening and saving a record never drops a relation it has.

## Impact {#impact}

The setting is opt-in and without it the selects offer what they offered
before, so an installation that does not configure it is unaffected.

Respecting the Extbase storage page instead is deliberately not done: a page
tree without an explicitly configured storage page would get an empty select
and no error.

The restriction is applied before
`\FGTCLB\AcademicBase\Event\ModifyTcaSelectFieldItemsEvent` is dispatched,
so a listener of that event still has the last word — including one that adds
items back.
