Upgrading from 2.4 to 3.0
Version 3.0 drops TYPO3 12, changes the shape of
Configuration/, rebuilds the public
detail view and makes the person records workspace aware. Work through the
sections in order. Skip a step that does not apply to the installation.
Before you start
Version 3.0 runs on TYPO3 13.4 from 13.4.35 on and on TYPO3 14.3 from 14.3.7 on, with PHP 8.2 or later.
academic_persons 3.0 needs these packages. Upgrade them first or in the same deployment, in this order:
-
fgtclb/environment-state-manager
2.x, in place of 1.x, which
this extension and academic_base 3.0 require. It is declared in
composer.asjson ^2.and in0. 1 ext_asemconf. php 2.. Composer updates it on its own. A classic installation updates environment_state_manager to 2.x before it activates academic_base 3.0 or this extension.0. 1- 2. 99. 99 - fgtclb/academic-base 3.0, the same release as this extension.
The extensions that require this one follow it in the same deployment, where installed: academic_persons_edit, academic_contacts4pages and academic_persons_sync. Where academic_persons_edit is installed, its upgrade chapter is due in the same deployment, because its editor is replaced and one of its wizards repairs the profile images of this extension.
These changes have to ship in the same deployment as the update:
- The contract rows the database update cannot convert are corrected first, see Update the database.
- Project code that extends a class, implements an interface or overrides a method of this extension whose signature changed follows it, or it fails with a fatal error, see Adapt your code.
The module paths on this page are those of TYPO3 13, where the upgrade runs.
Update TYPO3 first
Update TYPO3 to 13.4.35 or later while the site still runs 2.4, which supports TYPO3 13.4. Version 3.0 no longer installs on TYPO3 12, and Composer and the Extension Manager refuse it next to an older patch release of TYPO3 13.
Stay on TYPO3 13 until the upgrade is complete. The content element wizard
academic of this extension
reads the column
tt_, which TYPO3 14 removes, so it
only runs on TYPO3 13. The same holds for the content element wizards of
academic_jobs, academic_persons_edit and
academic_projects when the installation also has them. Move to
TYPO3 14.3.7 or later once they have run.
See Breaking: Removed TYPO3 v12 support and Important: TYPO3 13.4.35 or 14.3.7 is required.
Update the package
composer require -W \
'fgtclb/academic-base':'~3.0.0' \
'fgtclb/academic-persons':'~3.0.0'
On a classic installation, update environment_state_manager to 2.x
from the TER in Admin Tools > Extensions first, because neither
academic_base 3.0 nor this extension can be activated without it.
Then update academic_base, academic_persons and the
extensions that require it there, in this order. Run the commands of this page
with
typo3/ instead of
vendor/.
vendor/bin/typo3 cache:flush
Update the database
Three of the changes cannot be applied to every database as it is. Check them before the update:
- The contract columns
organisational_,unit function_andtype locationbecomeNOT NULL. The change fails on PostgreSQL and on MySQL in strict mode while a row holdsNULL, which rows saved before 2.4 or by Extbase on TYPO3 12 do. Update those rows to0first, Important: Contract relation columns are NOT NULL now has the statements. - The year columns of the timeline entries become unsigned. Correct a negative year first, which nothing of the extension ever wrote. See Important: The timeline year fields are constrained.
- The contract column
publishis removed. Do not accept its removal yet, The contract field "publish" decides whether its values are carried over first.
vendor/bin/typo3 extension:setup
Or apply the changes in Admin Tools > Maintenance > Analyze Database Structure.
Version 3.0 changes these tables, and the comparison also applies the changes of the index definitions TYPO3 13.4.35 and 14.3.7 bring:
- The nine record tables of this extension are workspace aware now and get
the columns
t3ver_,oid t3ver_,wsid t3ver_andstate t3ver_with an index. Until they exist, the backend record lists of the extension and the frontend rendering of a translated profile fail with a database error. On SQLite, check afterwards that the nine tables really carry the four columns, the command line path of TYPO3 adds only the index there. See Breaking: Person records are workspace aware.stage tx_andacademicpersons_ domain_ model_ function_ type tx_get aacademicpersons_ domain_ model_ organisational_ unit slugcolumn, which an upgrade wizard of the next step fills.- The three contract relation columns and the three year columns change as described above.
tx_gets an index onacademicpersons_ domain_ model_ address import_, see Feature: Import identifiers are shown, searchable and can be looked up.identifier
The analyzer offers
tx_
for removal. It never drops a column on its own.
Run the upgrade wizards
Run the wizards in this order, after the database update, and on TYPO3 13:
academic, Migrate "EXT:academic_persons" from list elements to content elements (list_type => CType), only if it is still offered.Persons_ Migrate List Type To CType Content Elements academic, Generate the URL segments of academic function types and organisational units.Persons_ fill Filter Slugs academic, Repair the profile image relations of academic profiles, of academic_persons_edit, where that extension is installed.Persons Edit_ repair Localized Profile Images
vendor/bin/typo3 upgrade:run academicPersons_MigrateListTypeToCTypeContentElements
vendor/bin/typo3 upgrade:run academicPersons_fillFilterSlugs
A wizard that TYPO3 recorded as done is offered again once it is marked
undone. TYPO3 13 marks a wizard undone with
vendor/.
The two repeatable wizards of this step are never recorded as done.
The content element wizard
academic shipped with 2.x
already and moves content elements stored as list with a
list_ of this extension onto their own
CType
. An
installation that ran it there has nothing more to do. TYPO3 14 no longer has
tt_, so the wizard has to run on TYPO3 13, before the
core update. Run it by its identifier and not with a bare
vendor/: the wizard is not repeatable, and a run
on TYPO3 14 that finds nothing records it as done although it migrated
nothing. Replace own TypoScript, TSconfig or SQL that matches on
list_ with a condition on
CType
. See
Breaking: Extbase plugins require CType on TYPO3 v14.
The URL segments of the filter records
The wizard Generate the URL segments of academic function types and
organisational units, academic, is new in 3.0. It
gives every live function type and organisational unit without a slug the one
a backend save would generate from its name, and leaves a slug that is set
alone. The filters of the profile list read the slug, so a list filtered by a
function type reads /persons/, see
Filtered lists. Without it a filter keeps
working as a query argument. See Feature: A filter form and speaking URLs for the visitor list.
The wizard is repeatable. It is offered again whenever a record has no slug, for example after an import of a project wrote one without it.
The profile images of translations
The profile image is translatable now. A translation follows the image of the
default language until it gets an image of its own. The image relations that
academic_persons_edit wrote before 3.0 do not always fit that, and
its repeatable wizard academic
repairs them through the DataHandler, without deleting a file. Run it where
that extension is installed and profiles have images, before editors use the
new editor of a multilingual site. Its upgrade chapter describes the wizard.
See Breaking: The profile image translates.
Code that read the image of a translation through the record of the default language resolves the reference of the translation now.
The contract field "publish"
The contract toggle Show this contract online? is removed with its
column
publish
. No view of the extension has ever read it, so the
visibility of every contract stays as it is. See
Breaking: The contract field "publish" has been removed.
Only a project whose own code gave the flag a meaning, and left contracts out
that were not published, carries it over to the visibility of the contract.
The wizard academic does that, and it
ships unregistered, because on every other installation it would hide all
contracts. Register it in the Configuration/Services.yaml of the site
package, flush the caches, run it, flush the frontend caches, and remove the
registration again. Important: The contract publish wizard has to be registered by hand has the
registration and the order.
Then let the database analyzer drop the column. Once it is dropped, nothing can be migrated any more.
Adapt the configuration
The upgrade check
The console command
academic: of academic_base
reads the stored configuration of the installation and reports what no longer
reaches the academic extensions. For this extension it reports two fields of
the settings that write one column, and a site that still depends on the set
fgtclb/ or fgtclb/,
which keep working as aliases of fgtclb/. Run it on the
staging copy right after the package update, and again once the steps of this
section are done:
vendor/bin/typo3 academic:upgrade:check
With the extension key and a site it also finds the template overrides of the site whose file is gone, and copies that are identical to the shipped file:
vendor/bin/typo3 academic:upgrade:check academic_persons --site=<site identifier>
Each finding, and what to do about it, is described in the upgrade check of academic_base.
The settings file
A site package that ships its own
Configuration/ has to be migrated. The
file is built from four maps now,
profile
,
special
,
contracts
and
document, and the top-level keys
validations
and
profile of 2.4 are gone. See
Breaking: Section-based AcademicPersons settings.
A file that still ships the old keys keeps working for now. They are mapped onto the new maps at runtime, with a warning in the log, until version 4.0. The migration command prints the maps that replace them:
vendor/bin/typo3 academic:persons:settings:migrate
It never writes the file, and it exits with 1 while a package ships an old
key. Paste the printed maps into the site package in place of the old keys,
review them and flush all caches. Read the notes the command prints: a changed
type
or
field of a timeline type is not applied, a
timeline type of a project needs its own column in a TCA override of the
profile table. See Feature: Legacy settings overlay and migration command
and Migrating a pre-3.0 override.
The settings files are merged recursively now. A key the override leaves out
is inherited from academic_persons, at every level, where leaving
it out removed it before. An entry that is to be gone is set to
~
, a
flag list that is to be empty to
[]
. Compare the override with the
shipped file key by key, -- prints the keys a copied map leaves out:
vendor/bin/typo3 academic:persons:settings:migrate --delta
See Breaking: Settings files merge recursively and Feature: Settings overrides are reported and shrunk.
The shipped defaults changed as well: the gender of a profile and the start
date of a contract are required, the website, the publications link and the
links of the timeline entries carry the
url
flag, and the type of an
email address or a phone number is no longer required.
Change them in the override where the installation wants the old behaviour,
Profile sections documents every key.
A file that still names contracts. logs a warning, remove
the key, see The contract field "publish".
TCA overrides of the person tables
The settings set required and read of a column after every TCA
override of a site package now, not before. A site package that sets either of
them on a configured column in Configuration/ loses that
value. Move the lock or the requirement into the settings file. See
Breaking: Settings apply after the TCA overrides.
A site package that names a FlexForm data structure of this extension by path
checks the path. Core12/ is gone, Selected and
Selected are directly in
Configuration/ now, List. and Detail.
have a Core13/ and a Core14/ variant. See
Important: FlexForm paths change for the plugin structures.
Labels
A translation of locallang. into a further language takes over the
units the detail view adds,
detail.,
detail. and
detail..
detail. and
detail. are no longer rendered by the shipped
templates. See Important: Label changes of the public profile.
Adapt templates and assets
An override keeps its own copy and does not receive a change of the shipped
file. The upgrade check with the extension key and a site finds overrides of
files that are gone, and copies that are identical to the shipped file, see
The upgrade check. Compare every other override with
the shipped file of 3.0 and take the changes over. Overriding templates
describes how the overrides are set up. The paths below are relative to
Resources/:
| File | What changed | Entry |
|---|---|---|
Templates/ | Rewritten. It dispatches the configured elements to the partials
below Partials/. An override keeps
rendering its own copy and loses the configurable layout. | Feature: Configurable public profile |
Partials/ | Deleted. A template that still renders it fails at render time.
Partials/ and
Partials/ are no longer rendered
by the detail view. | Breaking: The partials of the detail view change |
Partials/,
Partials/ | Take the class of the heading as the argument class in place
of position. | Breaking: Header partials take a class argument |
Partials/,
Partials/ | Built from small partials below Partials/ and
Partials/. A copy of the two files does not
reach the small ones, and a copy of the contract partial reads
detail in place of detail. | Important: The profile item and list are built from partials |
Partials/ | Renders the office hours as HTML. | Important: List items render office hours as HTML |
Partials/,
Templates/ | Letters without profiles are disabled, and a list with a manual selection renders no letter navigation. | Important: Letters without profiles are disabled in the letter navigation, Important: No letter navigation for a manual selection |
The profile image
The profile card and the detail view render the image as a
<picture>
through the image partial of academic_base, and
a card of a profile without an image shows a placeholder. Adjust CSS that
selected the image as a direct child. Set
plugin. to an empty
value to keep such cards without an image. A view whose partial root paths are
replaced as a whole adds
-1 = EXT:. See
Breaking: Profile images render as a responsive picture and
Profile image.
Classes and styles
The templates carry the speaking ace-* classes the academic extensions
share, in place of the classes of the Bootstrap card, the list group and the
pagination. Only the grid classes, the button classes and
visually- of Bootstrap stay. Move the selectors of the site
stylesheet to the new classes, the chapter Styling shows the
markup of every view. See Breaking: Profile templates carry speaking classes.
The extension ships no stylesheet, as in 2.4. Only the development versions
of 3.0 shipped one for the profile views. The detail view needs two rules of
the site to work: one that hides the expand or the collapse glyph of a
fold-out entry by its
aria- state, and one that makes the
navigation of the left column sticky. The stylesheet of the development
instances is an example, see An example and
Breaking: The profile views ship no stylesheet.
The detail view loads the module
@fgtclb/. A site that brings a script
of its own switches it off with
plugin., see
Feature: The script of the public profile can be switched off.
Icons
Every icon of this extension is renamed, without an alias. The record icons are
tx- now, the content element icon persons_
has three successors tx-, and the icon files of 2.4
below Resources/ are deleted. An old identifier renders
TYPO3's default- placeholder. Replace the identifiers in templates,
TSconfig, TCA, PHP and CSS of the site package, and move a replacement icon to
the new identifier. See
Breaking: Renamed icons and a frontend icon registry.
Adapt your code
- The list, detail, selected profiles and selected contracts plugins no
longer dispatch
Modify,List Profiles Event Modify,Detail Profile Event ModifyandSelected Profiles Event Modify, and the classes are removed. A listener of one of them is never called again, without an error. Search the project code for the four class names. A listener that assigns view variables moves toSelected Contracts Event Modifyof academic_base, a change of the demand toPlugin View Event Modify. See Breaking: The list, detail and selection events of the plugins are gone and ModifyPluginViewEvent.Profile Demand Event - An override of
Profilein a subclass or an XCLASS is a fatal error until it takes the new trailing context parameter. An override of eitherRepository:: find By Demand () findkeeps loading and is no longer called by the selected profiles and selected contracts plugins. Move both to a listener of the query events. See Breaking: The plugins call different repository finders and Narrowing what a plugin shows.By Uids () - A class of a project that implements
\FGTCLB\addsAcademic Persons\ Domain\ Model\ Dto\ Plugin Controller Action Context Interface get, or is a fatal error. See Breaking: The persons plugin action context extends the one of academic_base. The interface and its class are deprecated and removed in 4.0. Type new code against the interface of academic_base, see Deprecation: The plugin action context of academic_persons.Content Object Renderer () Synchronizermoved from the namespaceContext \Dto\toSyncronizer \Dto\, and its property and named argument lost the same misspelling. See Breaking: The synchronizer context namespace is fixed.Synchronizer - A DataHandler hook of the project that dispatched
Afterafter a backend save is removed. The extension announces a backend save itself now, and the hook would announce it a second time. See Important: Backend saves announce profile updates.Profile Update Event - Code that calls
set,Publish () isorPublish () getof a contract, or reads or writesPublish () publish, uses the visibility of the contract, see The contract field "publish". - A query of the project with its own
Queryon one of the nine tables sees workspace versions as rows now. Add the workspace restriction and the version overlay, as the entry linked in Update the database shows.Builder - Code that uses
Validation,Validationor theSet validationViewHelper of this extension imports them from academic_base, where they moved without an alias. See Important: Validation primitives moved to EXT:academic_base.Ensure
Check the result
- The upgrade check exits with
0, without and with the extension key, see The upgrade check. vendor/exits withbin/ typo3 academic: persons: settings: migrate 0, and the log carries no warning about legacy settings.- The new content element wizard offers the content elements under the titles of 3.0, see Important: Content elements have new titles and descriptions.
- The backend record lists of the extension open, and a translated profile renders in the frontend.
- A timeline entry shows its year in the frontend and in the backend form.
- A profile list filtered by a function type or an organisational unit shows the slug in the URL.
- A translated profile shows an image in every language.
- The detail view folds its entries in and out, and the site stylesheet reaches the lists, the card and the detail view.
- A list and a selected profiles content element show what the code of the project intends, where that code was a repository subclass, an XCLASS or a listener of a removed event.