Upgrading from 2.3 to 3.0
This page takes an installation of academic_jobs 2.3 straight to
3.0, without the step to 2.4. Version 3.0 drops TYPO3 12, applies the
validation settings to the backend record editor as well and renders the job
views with speaking classes and new icons. From 2.4 it takes over the
configuration per component, the content elements that stay hidden until a site
enables them, and the upgrade wizards for the job contacts and the jobs of the
old new job form. The page leaves out the 2.4 state that 3.0 replaces: the
editor configuration Java, see
Breaking: The editor configuration moved. 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, new since 2.4, which academic_base 3.0 requires. Composer installs it on its own. A classic installation installs environment_state_manager 2.x before it activates academic_base 3.0.
- fgtclb/academic-base 3.0, the same release as this extension.
ext_ names the system extensions rte_ckeditor
and fluid_styled_content by their extension keys since 2.4. A
classic installation resolves its dependencies from that file, so both have to
be active. See Important: Dependencies are named by their extension keys.
A site package that ships its own
Configuration/ changes it in the same
deployment as the update:
- Replace
numberwithteloncontact, or remove the field from the file so the shipped flags apply. The shipped file of 2.3 marked the field withPhone number, and so does a copy of it. The flags reach the backend record editor of a job now, and anumberthere stores+49 30 123as49when an editor saves the job. Move a TCA override ofrequiredorreadof a job field into the settings file, the settings win over it now. See Breaking: The job validation settings reach the backend and Important: The new job form stores the chosen values.Only - The files of all packages are merged per field now. A field the copy left out to make it optional keeps the flags academic_jobs ships. Name it with an empty list instead, and drop the fields the site package does not change. See Breaking: The job validation settings are merged per field.
- Flags are read regardless of case, a flag outside the shared vocabulary is
ignored, and
readonly,disabledandfrontendreadonlytake effect. Check the flags of the file against Validation settings, see Important: The job validation flags follow the persons vocabulary.
A site without the site set also includes the page TSconfig of the components in the same deployment, or the content elements are not offered for new content, see Include the components.
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.3, 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_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'
On a classic installation, install environment_state_manager 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/ instead
of
vendor/.
vendor/bin/typo3 cache:flush
Update the database
vendor/bin/typo3 extension:setup
Or apply the changes in Admin Tools > Maintenance > Analyze Database Structure.
For this extension the comparison adds and changes:
company_,name sector,required_anddegree contractual_ofrelationship tx_become nullable. No data is converted, see Important: Four job columns are nullable now.academicjobs_ domain_ model_ job l10n_is added to the same table, where a translation records the record it was made from. Existing rows getsource 0, see Important: The job table records its translation source.
It also applies the changes of the index definitions TYPO3 13.4.35 and 14.3.7 bring.
Warning
Do not remove the old job contact table and field yet. Version 2.1 dropped
tx_ and the field
contact
of
the job table, and the analyzer offers both in its remove section, first
to rename them to
zzz_
and
zzz_, then to drop them. Renaming is harmless.
Dropping them deletes the contacts the wizard of the next section still
has to copy, see Important: The job contact wizard finds the renamed old schema.
extension: removes nothing, it applies additions and changes
only.
Run the upgrade wizards
The wizards need the database changes of the previous section. Run them on TYPO3 13, in this order, in Admin Tools > Upgrade > Upgrade Wizard or on the command line.
-
academic, Migrate job contact records from relation to fields directly in the job record. It copies the contact record of a job into the contact fields of the job. Up to 2.3 it left out every job that was hidden, scheduled or expired while it ran, which includes every job submitted through the frontend form and not yet approved. It now reads every job and leaves a job alone that has a contact of its own. An installation that already ran it has it recorded as done and marks it undone first. For a wizard that was never recorded as done, the command reports an error, which is harmless. Then run the wizard:Jobs_ contact Relation vendor/bin/typo3 upgrade:mark:undone academicJobs_contactRelation vendor/bin/typo3 upgrade:run academicJobs_contactRelationCopied!Read Important: The job contact wizard migrates invisible jobs before running it: a job whose contact fields an editor emptied on purpose gets its old contact back.
-
academic, Repair the jobs stored by the old new job form of academic jobs. It moves the start date and the application deadline the old form stored with the time of day of the submission to whole days, and lists the jobs that kept an unchosen Employment Type or Job Type for an editor. It writes the database directly, in the time zone of the process that runs it, and a wrong zone moves the dates in a way that cannot be taken back. Check the time zone its description names first. If it is not the zone the form ran in, setJobs_ repair New Job Form Values $GLOBALS, or run the wizard from the upgrade module, which runs in the web server like the form did:['TYPO3_ CONF_ VARS'] ['SYS'] ['php Time Zone'] vendor/bin/typo3 upgrade:list vendor/bin/typo3 upgrade:run academicJobs_repairNewJobFormValues vendor/bin/typo3 cache:flushCopied!Keep the list of jobs it prints, it is shown once. Correct those jobs in the backend. See Important: A wizard repairs the jobs of the old new job form.
-
academic, 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 pluginsJobs_ plugin Content academicjobs_,newjobform academicjobs_orlist academicjobs_into a content element of the type of the same name. Such elements are left from version 1.x. The wizard readsdetail tt_, which TYPO3 14 removes, so run it before the core moves to TYPO3 14, by its name:content. list_ type vendor/bin/typo3 upgrade:run academicJobs_pluginContentCopied!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_matches ontype CTypeinstead. 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/.
Adapt the configuration
The TypoScript and the page TSconfig are delivered per content element since 2.4, and the three content elements are hidden in the whole installation until the page TSconfig of their component is included. See Breaking: Site sets and static templates have been restructured.
The upgrade check
The console command
academic: 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, 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 compares the template overrides of the site with the templates this extension ships:
vendor/bin/typo3 academic:upgrade:check academic_jobs --site=<site identifier>
Each finding, and what to do about it, is described in the upgrade check of academic_base.
Include the components
- Site set. A site that depends on the set
fgtclb/needs no change. The set keeps its name and brings the page TSconfig of all three content elements along.academic- jobs - Static template. The stored entry of 2.3 keeps working as Academic Jobs: Shared plugin settings (academic_jobs). Replace it with Academic Jobs: All components (academic_jobs), or with the entries of the content elements the site uses, in the field Include TypoScript sets on the tab Advanced Options of the template record.
- Page TSconfig. A site without the site set adds Academic Jobs: All components (academic_jobs) in the field Include static Page TSconfig (from extensions) on the tab Resources of its root page, see Include static page TSconfig. Without it the content elements are not offered for new content.
- Use one of the two mechanisms per site, see Do not combine both.
Until a component is included, an existing content element of it keeps rendering and keeps its type: academic_base shows the stored type in the field Type followed by (not enabled on this page), and saving keeps it. The warning of the 2.4 changelog entry that saving such a record rewrites its type describes the state before a fix that academic_base 2.4 carries as well, see its changelog entry. A content element that a page TSconfig of your own already turned into another type is not repaired. Correct it by hand from its record history.
Adjust your own configuration
- The page TSconfig directory is
Configuration/now, and its files were reorganised. Take the new path of everyTSconfig/ @importfrom the table of the changelog entry linked above, see also Important: The page TSconfig directory is now spelled TSconfig. An import of a missing file fails silently. - A site whose content element layout renders no header sets
plugin., also available as a site setting. The plugins no longer render the header themselves, see Important: The job plugins leave the content element header to the layout.tx_ academicjobs. render Content Element Header = 1 - Label overrides move from
plugin.totx_ academic_ jobs._ LOCAL_ LANG plugin., see Important: Label overrides are read from the documented path.tx_ academicjobs._ LOCAL_ LANG - An empty
plugin.accepts every media type. List the accepted types to keep restricting the logo, see Important: An empty mime type list accepts every upload.tx_ academicjobs. job Avatar Image. validation. mime Type. allowed Mime Types - The job detail page answers
404without a job. Hide it in menus, a menu link carries no job. The labeltx_it showed before is removed, so an override of it has no effect any more. See Important: The job detail answers "not found" without a job.academicjobs. fe. alert. job_ not_ found. body - The job detail page sets the page title. A site whose own page title
provider has to win orders it before
academic, see Important: The job detail sets the page title.Jobs - A site that imports
Configuration/needs no change. A site that copied the route enhancer into its own configuration setsRoutes/ Detail. yaml defaultin the copy, see Route enhancers.Controller: 'Job:: show' - The notification mail about a new job is rendered from the Fluid mail
template
Job, with a default message in the language of the page. A site that setCreated plugin.keeps its own text in the mail. See Feature: The notification mail about a new job is a Fluid template and The notification mail about a submitted job.tx_ academicjobs. email. template - A site that loads its own editor, or none, switches the two scripts of the
job form off with
plugin., see Feature: The scripts of the new job form can be switched off.tx_ academicjobs. assets. js = 0
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 ships no stylesheet, 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/
}
The editor configuration
The editor configuration of the new job form is an ES module now:
| Old path | New path |
|---|---|
EXT: | EXT:,
loaded as the module @fgtclb/ |
An override of Templates/ loads it with
<f:.
<f: 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/ and rendered with ab:, 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
Versions 2.4 and 3.0 change 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 of 3.0 and take over the changes. The paths below are relative to
Resources/:
| File | What changed | Entry |
|---|---|---|
Templates/,
Templates/,
Templates/ | The header renders only with
settings., and the
templates carry speaking classes. | Important: The job plugins leave the content element header to the layout, Classes and styles |
Templates/ | The list renders one page of the paginator while the pagination is enabled. A project that paginated the list itself removes its own switch. | Feature: The job list can be paginated |
Templates/ | The contact box renders only for a job with contact data. | Important: The job headings and the contact box are corrected |
Templates/ | Loads the editor configuration as a module, only while
settings. is set, and renders the new
partial Partials/. | The editor configuration, Feature: The scripts of the new job form can be switched off, Feature: Additional fields partial in new job form |
Templates/ | Renders the confirmation for a visitor who returns to the form,
with
<f:.
A copy without this line shows no confirmation. | Important: The job form returns to its page with the confirmation, Keep the confirmation in a copy of the form template |
Partials/ | The heading level is corrected, the flags and the link row are new, a hidden job is not linked, the image renders through the image partial of academic_base, and a list of properties maps each property to the name of its icon. | Important: The job headings and the contact box are corrected, Important: Job views label flags and render the link, Important: The job detail answers "not found" without a job, The job image, Icons |
Partials/ | The flags and the link row are new, and a list of properties maps each property to the name of its icon. | Important: Job views label flags and render the link |
Partials/ | The heading level is corrected, the phone link is dialable, and the block renders its own phone and e-mail icons. | Important: The job headings and the contact box are corrected, Important: The job contact phone link is dialable, Important: The job contact block shows its own icons |
Partials/,
Partials/ | They take the class of the heading as class instead of
position. | Classes and styles |
Partials/ | A Please choose option for the two selects, the two
job flags as checkboxes, and a select reads disabled from its
element. | Important: New job form offers an unchosen option, Important: New job form offers the job flags, Important: The new job form renders the shared form partials |
Partials/ | They render the shared form partials of academic_base,
which mark rejected fields and show their message. The ViewHelpers
j: and
j: are removed, a copy
that calls them fails. It reads the validation with
validation of academic_base. | Important: The new job form marks rejected fields, Adapt your code, Change the fields of the new job form |
Every template and partial also passes the extension name
Academic to its translations, see
Important: Label overrides are read from the documented path.
Adapt your code
- A class that extends
\FGTCLB\and overridesAcademic Jobs\ Domain\ Repository\ Job Repository findadds the parameterBy Job Type () bool $include. One that declaresHidden = false findorAll Jobs () findrenames it. See Breaking: Extended JobRepository method signatures.Uids With Hidden Default Record () - A listener of
\FGTCLB\that sets a redirect page ofAcademic Jobs\ Event\ After Save Job Event 0or below now sends the visitor back to the form page, which shows the form and the confirmation, see Important: A redirect page of 0 or below from a listener means none. - Code that reads the answer to a submitted job gets an empty
303now, and a page that renders the messages of the form no longer gets the error message of Extbase after a rejected submission, see Important: The job form returns to its page with the confirmation. - A listener of
\FGTCLB\that changes the job types of the job record changes the option Job Type of the job list as well now. One meant for the record alone returns early whenAcademic Base\ Event\ Modify Tca Select Field Items Event flexis set, see Important: Job list offers the job types of listeners.Parent Database Row - A listener of
\FGTCLB\is no longer called. It listens toAcademic Jobs\ Event\ Modify Job Controller New Action View Event \FGTCLB\instead and returns early for every other plugin, see Breaking: The view event of the new job form is gone, Feature: The plugins dispatch the plugin view event and ModifyPluginViewEvent.Academic Base\ Event\ Modify Plugin View Event - PHP code that uses
\FGTCLB\,Academic Jobs\ Loader\ Academic Jobs Settings Loader \FGTCLB\or the exceptions ofAcademic Jobs\ Registry\ Academic Jobs Settings Registry \FGTCLB\uses the settings classes of academic_base, see Breaking: The validation settings classes of jobs were removed.Academic Jobs\ Exception - Code that names
\FGTCLB\importsAcademic Jobs\ Save Form\ Flash Message Creation Mode \FGTCLB\. The old name keeps working until version 4.0, see Deprecation: FlashMessageCreationMode moved to EXT:academic_base.Academic Base\ Form\ Flash Message Creation Mode - The FlexForm files moved from
Configuration/andFlexforms/ Core12/ Configuration/to one file each inFlexforms/ Core13/ Configuration/. Own TCA that names a data structure of this extension by its path takes over the new one, see Important: The FlexForm files moved to Configuration/FlexForms/.Flex Forms/
Check the result
- The upgrade check exits with
0, without and with the extension key, see The upgrade check. - The content elements Job Form, Job List and Job Details, as they are called now, are offered for new content on the pages that should have them, and existing ones keep their type. See Important: Content elements have new titles and descriptions.
- Jobs that were hidden, scheduled or expired when the contact wizard first ran show their contact.
- The jobs the repair wizard listed carry a chosen employment type and job type.
- The header of the job content elements appears once.
- A job submitted through a form without a redirect page returns the visitor to the form, which shows the confirmation.
- 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 job submitted through the form reaches the editors. A notification mail that cannot be sent is logged instead of failing the form, so check the log after a change of the mail configuration, see Important: A notification mail that cannot be sent no longer fails the form.
- Jobs submitted with 2.3 may share one logo file. The query in Important: An uploaded job logo no longer replaces an existing file finds them. A logo uploaded now is stored with a random suffix to its file name, and a form shown again with errors asks for the logo once more, see Important: Job image upload uses native Extbase upload handling.