Important: Contacts without a visible profile are skipped 

Description 

A contact of a page points at a contract of EXT:academic_persons, and that contract points at a profile. Both are relations, and Extbase resolves a relation with fresh query settings: a hidden contract, or a profile that is hidden, outside its start and end time or restricted to a frontend user group the visitor does not belong to, resolved to nothing instead of raising an error. The contact record itself was still visible, so the contacts of a page rendered an empty card below its role heading. A person who had left the institution kept a slot on the page.

The contacts content element and the data processor \FGTCLB\AcademicContacts4pages\DataProcessing\ContactsProcessor now leave such a contact out. Both ask the same service for the contacts of a page, so they cannot drift apart, and a page template of a project no longer needs a guard of its own.

Impact 

  • A contact whose contract or profile is not visible to the visitor is not rendered, in the content element and in the page data processor alike.
  • A role heading is rendered only while at least one shown contact carries that role. The role of a single hidden person disappears with that person, instead of heading an empty group.
  • The plugin option Show hidden records is unchanged in meaning: it shows hidden contact records, and never a hidden contract or profile. A hidden contact pointing at a visible person is still shown with the option enabled. A visible contact pointing at a hidden person is not.
  • The view variable {contacts} and the processed key contacts are now a plain list instead of a query result. <f:for> and <f:count> behave identically, but a template reading {contacts.first} now gets nothing, and PHP reading either as a query result has to accept a list.
  • ContactsProcessor is published as a service and takes its collaborator through the constructor. A project that subclasses the processor and names the subclass in TypoScript has to let its own Services.yaml autowire that subclass. Otherwise TYPO3 instantiates it without arguments, and the page fails with a PHP error.

Nothing has to be configured, and no data is migrated. Making a person visible again restores every contact pointing at it. TYPO3 v12 and v13 behave alike here.

Affected Installations 

Every installation rendering page contacts whose database holds a hidden contract, or a profile that is hidden, timed or restricted to a frontend user group. Installations that carry a patch or a template guard against empty contact cards can drop it.