Breaking: Replaced the profile editing view
See also
The upgrade chapter of academic_persons is the order in which the 3.0 changes have to be applied.
Description
The Profile editing content element used to be a set of Extbase forms: one page per record, a form submission per change, a redirect after every save. It is replaced by a single view that edits the profile in place and writes through JSON endpoints of the same plugin - see Profile editing for what it does and Important: Profile editing is replaced in place for why nothing has to be migrated in the page tree.
The plugin identity is unchanged: the content type stays
academicpersonsedit_profileediting, the plugin stays
AcademicPersonsEdit / ProfileEditing, the request namespace stays
tx_academicpersonsedit_profileediting, the site sets keep their names and
the default action stays list. Everything below the plugin is new.
Removed controllers and actions
Five of the six controllers are removed. ProfileController is the only one
the plugin registers, and its action list is new:
| Removed | Replacement |
|---|---|
Contract,
Profile,
Physical,
Email,
Phone, each with list, show, new,
create, edit, update, confirmDelete, delete,
sort and partly toggleVisibility | The documentForm/createDocument/updateDocument/
deleteDocument/sortDocument/toggleDocumentVisibility and
contractContactForm/createContractContact/
updateContractContact/deleteContractContact/
sortContractContact/toggleContractContactVisibility
JSON actions of
Profile |
Profile,
edit,
edit,
add,
remove,
toggle |
index for the view, and the update,
uploadImage, deleteImage and updateSkipSync actions |
Abstract,
\Property\,
\Service\,
\Exception\ |
\Service\,
\Domain\ and
\Service\ |
\Domain\,
Contract,
Email,
Phone,
Profile | The validation set of the section a record belongs to, resolved from the settings graph - see Profile editor and validation |
Domain\,
deprecated since 2.3 and announced for removal in 3.0 |
Domain\ |
An installation that links to one of the removed actions - a
f:link.action in an override, a hand written URL, a bookmark - gets a
500, not a fallback view. Extbase throws
Invalid (1313855173) for a removed controller and
Invalid (1313855175) for a removed action; the
fallback to the default action only happens where
config. is
set, and this extension does not set it.
Removed templates, layouts and partials
Every Fluid file of the form flow is removed. An override of one of them is dead: the file is no longer rendered, and the project keeps a copy of a view that no longer exists.
Resources/Private/ Layouts/ Profile Edit. html Resources/,Private/ Templates/ Profile/ Edit. html Profile/,Edit Image. html Profile/Show. html Resources/and the same three files forPrivate/ Templates/ Contract/ {Edit,New,Show}. html Email,Address/ Phone,Number/ PhysicalandAddress/ ProfileInformation/ Resources/Private/ Partials/ Profile/ Buttons/ {Delete Cancel,Save Exit Cancel}. html Resources/Private/ Partials/ Profile/ Forms/ {Checkbox,Date Time,Errors,Field Wrapper,Select,Textarea,Textfield}. html Resources/Private/ Partials/ Profile/ List/ {Contracts,Email Addresses,Phone Numbers,Physical Addresses,Profile Information}. html Resources/Private/ Partials/ Profile/ Properties/ {Contract,Email Address,Phone Number,Physical Address,Profile,Profile Information}. html Resources/Private/ Partials/ Profile/ Show/ {Image,Personal}. html
The plugin renders without a Fluid layout since, so the TypoScript constant
plugin. and the
view. block it filled are removed as well. A site
package that still sets the constant sets something nothing reads.
Resources/ is kept and rewritten,
and Resources/ with the
thirty-one partials below Partials/ is the new tree: four of
them - Header., Status,
Button and Prototypes. - directly in that
directory and the rest in {Documents,Field,Image,Profile}/.
Overriding templates describes what may be overridden.
The JavaScript module of the removed form flow goes with it:
Resources/, addressed by the bare
specifier @fgtclb/, configured
CKEditor 4 for Templates/ and is deleted. A site package
that still loads that specifier loads nothing. Rich text is CKEditor 5 from
EXT: now, created by the editing view itself - see
Profile editing.
Removed icons
The ten icon files 2.4 shipped for the form flow are deleted:
add-, add-, back-,
cancel-, delete-, edit-,
save-, sort-, sort-,
view-.
Five of the ten identifiers they were registered under go with them:
academic-persons-edit-add-image, -add-item, -cancel, -sort and
-to-top. The other five - academic-persons-edit-edit, -view,
-delete, -save and -back - stay and now resolve to the new artwork.
They also resolve through a different icon provider:
\FGTCLB\
inlines the <svg> where TYPO3's own
Svg emitted an
<img>. A site package styling the editor's icons through a rule such as
.t3js-icon img therefore stops matching, and styles the <svg> instead;
the Feature: Icon provider for icons that follow the text colour entry of
EXT: describes the provider.
Thirteen action icons are registered, under the identifiers listed in
Icon identifiers; the extension icon persons_edit_icon is the
fourteenth entry of Configuration/ and is unchanged. They are
Bootstrap Icons (MIT) drawn in currentColor and rendered inline, so they
take the colour of the control they sit in - see
Feature: The profile editing icon set.
Removed labels
Resources/ goes from 208 to 145
trans-units: 144 are removed and 81 are new. 64 survive, all of them
byte-identical. The
German de. follows one to one. That is not a list worth
printing - the authoritative one is the diff of the file for this release -
but the shape of it is:
- Everything the removed Extbase form flow needed goes with it: every
*.create.success/*.update.success/*.delete.success/*.sort.successmessage, every*.placeholder, everylist.no*Foundentry exceptlist.noProfilesFound, which the profile overview still renders, theactions.hide/show/translate/saveAndExit/setToTop/setToBottom/replaceactions,back,list.hidden.badge,list.contract.position, theprofile.*section headings and every*FormData.*.error.*unit. contract.published.labelwas a stale duplicate ofcontract.publish.label, which stays, and is removed;emailAddress.emailAddress.labelis replaced by the shorteremailAddress.email.label, which is new in this release.- The year fields of a timeline entry keep their labels
profileInformation.year.label,profileInformation.yearStart.labelandprofileInformation.yearEnd.label; their*.placeholdercompanions are removed with the form flow that rendered them. - The new view brings its own vocabulary under the
profileEditing.*prefix - status messages, empty states, the image editor, the document section labels and the controls of full form editing (Feature: Full form editing applies as one form).
All of them are overridable through
locallang, so an
installation that translated or reworded one of the 149 removed units loses
that override silently: the key is simply not read any more. Compare the
overrides against the shipped file after the update.
Removed extension configuration
profile.autoCreateProfiles and profile.createProfileForUserGroups are
removed from ext_. Neither is read by any code path of
this extension. Their stored values are not lost by the removal - the extension
configuration merges the current values over the template and prunes nothing -
and they are still the source the
academicPersons_MigrateProfileAutoCreateExtensionsConfiguration upgrade
wizard of EXT: reads to carry both settings over.
profile.allowedLanguages is unchanged.
New page type
The JSON endpoints are reached through a
PAGE
object named
academicPersonsProfileEditingAjax with
type,
delivered by the site set fgtclb/academic-persons-edit-profile-editing and
by the static template. A project with a PageType route enhancer, a web
application firewall or a reverse proxy in front of TYPO3 has to let that page
type and the X-Requested-With header through - see
The page type of the JSON endpoints.
There was no such page type in 2.4, where the editor was an Extbase form
flow, so a site package that copied the TypoScript of this extension into its
own instead of including the site set or the static template has the editor and
not the page type. Every save is then answered with the site's error page where
the browser expects JSON, and the editor can do nothing about it. The editor
therefore looks the page type up while it renders: when no PAGE object of
this site carries
type, it writes an error naming
the cause to the TYPO3 log and tells the visitor that the profile cannot be
saved, instead of letting them find out on their first change. The object is
matched by its
type, not by its name, so a project that
declares it under a name of its own is recognised.
Impact
- Overrides of any removed Fluid file stop having an effect. The editing view renders from the shipped templates.
- Links to the removed actions are a 500 rather than a fallback view.
- Templates and PHP code referring to the five removed icon identifiers,
labels or controller classes fail: an unknown icon identifier renders
TYPO3's
default-not-foundplaceholder, an unknown label renders its own key, and an unknown class is a fatal error. - A form posting
profileInformationFormData[year],contractFormData[...],addressFormData[...],emailFormData[...]orphoneNumberFormData[...]to one of the removed actions is not processed. The editor posts JSON, under the property namesyear,yearStartandyearEnd. - The two removed extension configuration options disappear from the Settings module. A stored value is ignored.
Affected Installations
All installations using the Profile editing content element of
EXT:, and in particular every installation that
overrides one of its Fluid files or links to one of its actions.
Migration
- Remove the overrides of the deleted Fluid files, and re-apply the project specific changes on top of the new template tree where they are still wanted. Overriding templates names the files that carry the hooks the JavaScript binds to; changing those breaks the editor rather than the layout.
- Replace links to the removed actions with a link to the
indexaction and theprofileUidargument, or with the profile overview. - Replace the five removed icon identifiers with the ones of
Icon identifiers, and re-point CSS that selected the icons as
an
<img>. - Confirm that the site actually delivers page type
1733735. Include the site setfgtclb/academic-persons-edit-profile-editingor the static template of this extension; a site package that maintains a copy of the extension's TypoScript adds theacademicPersonsProfileEditingAjaxPAGEobject to that copy. The editor reports a missing page type in the TYPO3 log and on the page itself, but it reports it, it cannot repair it. - Let page type
1733735and theX-Requested-Withheader pass through route enhancers and firewalls. - Drop
profile.autoCreateProfilesandprofile.createProfileForUserGroupsfrom the deployment configuration - but only after theacademicPersons_MigrateProfileAutoCreateExtensionsConfigurationupgrade wizard has run, because that wizard reads them.