Upgrading from 2.4 to 3.0 

Version 3.0 drops TYPO3 12, applies the validation settings of academic_jobs to the backend record editor as well, renders the job views with speaking classes and their icons from the frontend icon registry of academic_base, and loads the editor configuration of the job form as an ES module. It changes no database table of this extension. 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_jobs 3.0 needs these packages. Upgrade them first or in the same deployment, in this order:

  • fgtclb/environment-state-manager 2.x, which academic_base 3.0 requires instead of 1.x. Composer updates it on its own. A classic installation replaces environment_state_manager 1.x with 2.x before it activates academic_base 3.0.
  • fgtclb/academic-base 3.0, the same release as this extension.

A site package that ships its own Configuration/AcademicJobs/Settings.yaml changes it in the same deployment as the update:

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 academicJobs_pluginContent of this extension reads the column tt_content.list_type , which TYPO3 14 removes, so it only runs on TYPO3 13. The same holds for the content element wizards of academic_persons, 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-jobs':'~3.0.0'
Copied!

On a classic installation, update environment_state_manager to 2.x from the TER in Admin Tools > Extensions first, then update academic_base and academic_jobs there, in this order. Run the commands of this page with typo3/sysext/core/bin/typo3 instead of vendor/bin/typo3 .

vendor/bin/typo3 cache:flush
Copied!

Update the database 

vendor/bin/typo3 extension:setup
Copied!

Or apply the changes in Admin Tools > Maintenance > Analyze Database Structure.

The comparison changes no table of this extension. It applies the changes of the index definitions TYPO3 13.4.35 and 14.3.7 bring, and the columns other academic extensions add in 3.0.

Run the upgrade wizards 

  1. academicJobs_pluginContent, Migrate plugin list element from academic_jobs to normal content elements. It turns every content element that is still stored as Insert plugin with one of the plugins academicjobs_newjobform, academicjobs_list or academicjobs_detail into a content element of the type of the same name. Such elements are left from version 1.x. The wizard reads tt_content.list_type , which TYPO3 14 removes, so run it on TYPO3 13, by its name, in Admin Tools > Upgrade > Upgrade Wizard or on the command line:

    vendor/bin/typo3 upgrade:run academicJobs_pluginContent
    Copied!

    Once the column is gone, the wizard finds nothing to do, and the elements it would have migrated keep a type nothing renders. TypoScript, page TSconfig or SQL of a site package that names one of the plugins through list_type matches on CType instead. See Breaking: Extbase plugins require CType on TYPO3 v14.

A wizard that TYPO3 recorded as done is offered again once it is marked undone. TYPO3 13 marks a wizard undone with vendor/bin/typo3 upgrade:mark:undone <identifier>.

Adapt the configuration 

The upgrade check 

The console command academic:upgrade:check of academic_base reads the stored configuration of the installation and reports the static templates, page TSconfig imports and site sets that no longer reach an academic extension. Run it on the staging copy right after the package update:

vendor/bin/typo3 academic:upgrade:check
Copied!

With the extension key and a site it also compares the template overrides of the site with the templates this extension ships:

vendor/bin/typo3 academic:upgrade:check academic_jobs --site=<site identifier>
Copied!

Each finding, and what to do about it, is described in the upgrade check of academic_base.

Adjust your own configuration 

The site set, the static templates and the page TSconfig of this extension keep their names and paths from 2.4.

Adapt templates and assets 

Classes and styles 

The templates render speaking classes now, shared by all academic extensions, and no classes of the theme they were developed with. The extension shipped no stylesheet in 2.4 and ships none in 3.0, so a site that relied on the card and list group classes of a Bootstrap theme styles the new classes itself. Move the selectors of the site stylesheet to the classes in the table of Breaking: Job templates carry speaking classes. The chapter Styling describes the markup, and An example names the stylesheet of the development instances as a starting point. The new job form renders the form partials of academic_base, whose classes are described in its changelog.

The job image 

The job image is a <picture> with WebP sources now. CSS that selects the image as a direct child of the card no longer matches. The job views and the new job form render partials of academic_base, so a site that replaced the partial root paths of the plugin completely adds the path of academic_base below its own:

plugin.tx_academicjobs.view.partialRootPaths {
    -1 = EXT:academic_base/Resources/Private/Partials/
}
Copied!

See Breaking: Job images render as a responsive picture.

The editor configuration 

The editor configuration of the new job form is an ES module now:

Old path New path
EXT:academic_jobs/Resources/Public/JavaScript/frontend/ckeditor.js EXT:academic_jobs/Resources/Public/JavaScript/frontend/rich-text.js, loaded as the module @fgtclb/academic-jobs/frontend/rich-text.js

An override of Templates/Job/New.html loads it with <f:asset.module identifier="@fgtclb/academic-jobs/frontend/rich-text.js" /> . <f:asset.script> does not execute a module. See Breaking: The editor configuration is an ES module.

Icons 

Every icon of the extension has a new identifier. The icons of the job properties and of the contact block are registered for the frontend icon registry of academic_base in Configuration/FrontendIcons.php and rendered with ab:icon, the icons of the content elements and of the job record stay backend icons in Configuration/Icons.php. The old identifiers and the icon files of the extension are removed. Replace the identifiers in templates, TCA, page TSconfig and PHP code, register a replacement icon under its new identifier in the matching file of a site package that depends on academic_jobs, and adapt a stylesheet that selected the icon as an <img> . See Breaking: The job icons are renamed and moved to the frontend icons, Important: The job contact block shows its own icons and Replace the icon of a job property.

Template overrides 

Version 3.0 changes these templates and partials. A copy of one of them in a site package keeps rendering the copy, so compare each copy with the shipped file and take over the changes. The paths below are relative to Resources/Private/:

File What changed Entry
Templates/Job/List.html The jobs and the new pagination sit in an ace-content, and the list renders one page of the paginator while the pagination is enabled. A project that paginated the list itself removes its own switch. Classes and styles, Feature: The job list can be paginated
Templates/Job/Show.html Speaking classes, the description in a ce-bodytext. Classes and styles
Templates/Job/New.html Loads the editor configuration as a module, only while settings.assets.js is set, and renders the new partial Partials/Job/Forms/AdditionalFields.html. The editor configuration, Feature: The scripts of the new job form can be switched off, Feature: Additional fields partial in new job form
Partials/Job/Item.html, Partials/Job/Information.html Speaking classes, the image through the image partial of academic_base, and a list of properties that maps each property to the name of its icon. Classes and styles, The job image, Icons
Partials/Job/Contact.html Speaking classes, and its own phone and e-mail icons. Important: The job contact block shows its own icons
Partials/Job/Header.html, Partials/Job/SectionHeader.html They take the class of the heading as class instead of positionClass. Classes and styles
Partials/Job/Properties/Job.html The two job flags are offered as checkboxes, and a select reads disabled from its element. Important: New job form offers the job flags, Important: The new job form renders the shared form partials
Partials/Job/Forms/*.html They render the shared form partials of academic_base. The ViewHelpers j:validation.requiredFromValidation and j:validation.fieldTypeFromValidation are removed, a copy that calls them fails. It reads the validation with validationEnsure of academic_base. Partials/Job/Forms/ErrorMessage.html is removed. Adapt your code, Change the fields of the new job form

Adapt your code 

Check the result 

  • The upgrade check exits with 0, without and with the extension key, see The upgrade check.
  • The content elements are offered as Job Form, Job List and Job Details now, see Important: Content elements have new titles and descriptions.
  • Saving a job in the backend keeps its contact phone number, and a job without a company name or a description can only be saved there once both are filled in, unless the settings make them optional.
  • A logo uploaded through the form is stored with a random suffix to its file name, and a form shown again with errors asks for the logo once more. Check code that relies on the file name of an uploaded logo, see Important: Job image upload uses native Extbase upload handling.
  • The rich text fields of the form start the editor, and the job views show their icons in the colour of the text.