What does it do? 

This TYPO3 extension assigns people to pages and displays them in the frontend, for example the dean's office of a faculty page, the participants of a research page or the contact persons of a study programme.

A person is not maintained here: the extension builds on EXT:academic_persons and points at one of the contracts of a profile. Everything that is displayed - the name, the position, the location, the email addresses, the phone numbers and the physical addresses - comes from that contract, so a change to the person has to be made once and reaches every page the person is a contact of.

Contact records 

A contact is a record of its own, maintained either in the Contacts tab of a page or in the Linked pages tab of a contract. Both edit the same record, so a person can be added from the page it belongs on as well as from the person itself.

A contact record consists of:

Page
The page the person is a contact of. Filled automatically when the record is created from a page.
Contract
The contract of the person to display. Filled automatically when the record is created from a contract.
Role
An optional role, for example Dean's office or Student advisors. Contacts sharing a role are rendered as a group below the name of that role, contacts without a role are rendered below the grouped ones — unless Group by role is switched off in the content element, see Group by role. Roles are records of their own and are usually kept in a storage folder.

Frontend output 

The contacts of a page are rendered either with the content element Contacts for this page, which can be placed anywhere on the page, or directly in a page template through the data processor academic-page-contacts, which adds the contacts, their roles and the contacts without a role to the page rendering, see The contacts in a page template. Both display the person through the Profile/Item partial of EXT:academic_persons, so contacts look like the profiles rendered by that extension. The content element renders it through a partial of its own, Contacts/Item.html, which a site package overrides to change the card, see The contact item partial.

A contact is only shown while the person behind it is visible in the frontend. A contact whose contract is hidden, or whose profile is hidden, outside its start and end time or restricted to a frontend user group the visitor is not in, is left out of both — together with its role, if it is the only contact holding it. Hiding a profile therefore removes the person from every page it is a contact of, without editing a single contact record.

Contacts and page translations 

The Page field of a contact always stores the uid of the default-language page — that is how TYPO3 models references to pages, and it does not change when the contact is translated.

Since version 3.0 a contact follows its page's translations: localizing a contact — directly, by translating the contract or profile above it, or through the translation synchronisation of EXT:academic_persons — only yields a translated contact when the page it points at is translated into that language. For an untranslated page the freshly localized contact is removed again immediately (in the live workspace as a regular soft delete, in a workspace the new record is discarded), because such a translation carries no content of its own and would only make the contact appear twice on the page.

The frontend shows each contact exactly once per language: where a translation exists it represents the contact, otherwise the default-language record is shown. Translated contact duplicates created by versions before 3.0 therefore stop rendering without any database cleanup; the rows themselves are left untouched. Contacts copied into a language without a connection to a default-language record (free mode) are independent records and are exempt from all of this.