For developers 

This chapter documents the programmatic surface this extension ships: the events that let a project narrow what the plugins show and add to what they render, the events of the frontend user synchronisation and of the import writer, the event that announces every change of a profile, and the one that decides what is written as the metadata of a profile image. Each event has a page of its own. The topics behind them, the profile lists, the frontend user synchronisation, the import of persons, the translation synchronisation and the plugin action context, have pages of their own as well.

Which classes of this extension are public API, and what that promises, is stated for all academic extensions on the extension points page of academic_base. Every event a listener may rely on is public API. A listener registers with the attribute of TYPO3, \TYPO3\CMS\Core\Attribute\AsEventListener . Symfony's attribute of the same name registers nothing, and the listener never runs.

Events 

Event Dispatched What a listener can change Owner
ModifyProfileDemandEvent in the list, list-and-detail and card plugins, before the profile query, the query of the letter navigation and the cache lifetime query are built from the demand replace the demand this extension
ModifyProfileQueryEvent right before the profile query of the list, list-and-detail and card plugins, of the letter navigation and of the selected-profiles plugin is executed add conditions this extension
ModifyContractQueryEvent right before the contract query of the selected-contracts plugin is executed add conditions this extension
ModifyProfileTitlePlaceholderReplacementEvent in the detail view, once per placeholder of the page title format replace the value of the placeholder this extension
ModifyPluginViewEvent in every plugin, once each time an action renders its view assign further view variables academic_base
ModifyTcaSelectFieldItemsEvent when the backend builds the items of the shown fields of the plugins and of the contract selects reorder, remove or add items academic_base
ModifyProfileImageMetadataEvent right before the metadata of a profile image is written, for the file and for the file reference change or empty the fields that are written this extension
AfterProfileUpdateEvent after a profile was created or updated: by a backend save or an import, by the frontend user commands, and by the profile editing of academic_persons_edit react to it, the event is read only this extension
BeforeImportedRecordWriteEvent in the import writer, once for every record of a person before it is written change the values that are written, veto the record this extension
ChooseProfileFactoryEvent in the commands academic:createprofiles and academic:updateprofiles , once per frontend user choose the profile factory this extension
BeforeProfileMappedFromFrontendUserEvent in the same commands, before the data of a frontend user is mapped onto a profile add or change values, skip the frontend user or the profile this extension
AfterProfileMappedFromFrontendUserEvent in the same commands, after the mapping and before the profile is saved change the profile this extension
ModifyProfileCommandEnvironmentStateBuildContextForFrontendUserEvent in the same commands, before the environment of a frontend user's site is set up nothing a project should rely on: the event is @internal and experimental, like the environment handling it belongs to this extension, internal

Topics 

The profile lists
Which letters of the letter navigation lead somewhere, and what the links of the pagination and the navigation carry.
Taking part in the frontend user synchronisation
The order in which the commands academic:createprofiles and academic:updateprofiles dispatch their events.
Importing persons
Finding what an import wrote by its identifier, and writing the persons of another source with the import writer.
Translation synchronisation
The synchronizer that keeps the translations of a profile in step, and how it behaves in workspaces. Experimental.
The plugin action context
The context the plugin events carry, and the names of the plugins.

See also