Triggers op bewerkingen op de ItmTab
De ItmTab is een van de belangrijkste tabellen van iprox.cms. Structuren (sites en containers) bestaan uit items die (oa. hierarchisch) aan elkaar gerelateerd zijn.
Wanneer in het CMS bewerkingen op de ItmTab worden gedaan, wordt een aantal triggers geactiveerd, die op hun beurt ook weer deelprocessen starten.
Toevoegen (Add)
OnBeforeAdd
Voordat de ProcessUnit voor de ItmTab wordt verwerkt, worden een aantal stappen uitgevoerd in de OnBeforeAdd trigger.
Stap SetItemAspects
1. Registratie aanmaak en laatste bewerking
ItmTab.CorDtm,ItmTab.CorTydenItmTab.CorGebIdt, voor resp. datum, tijd en gebruikers-id van de laatste bewerking (Cor= correctie)ItmTab.CreDtm,ItmTab.CreTydenItmTab.CreGebIdt, voor resp. datum, tijd en gebruikers-id van aanmaak (Cre= creatie)
2. Registratie eerste en laatste publicatie (als een item een gepubliceerd-status (3, 4, 7) krijgt (in het CMS nooit direct))
ItmTab.FstPubDtm,ItmTab.FstPubTydvoor datum en tijd van eerste publicatieItmTab.LstPubDtm,ItmTab.LstPubTydenItmTab.LstPubGebIdtvoor datum, tijd en gebruikers-id van laatste/jongste publicatie
3. Parent verwijzing in route
ItmTab.LblUrlParIdtals een item onder een transparante map komt is dit verwijzing naar het eerst bovenliggende niet-transparante item, anders naar de parent
4. Mapnaam bepaling (slug)
ItmTab.LblUrl, default wordt als input de waarde vanItmTab.Lblgebruikt; de input wordt vervolgens door de logica vanFolderNameCheckergehaald.
5. Volgorde van sibling items bijwerken
RaiseAddingtriggert eenStructureEvents.RaiseAddingevent, met huidigeunitencontextalsStructureEventArgsparameter.- Dat triggert dan weer
StructureEvents.ItemAdding, waarop inIprox.OpenApi.Cms.Triggers.OrderMonitorwordt aangehaakt, om volgorde van sibling items in deStructureEventArgsbij te werken. - Als volgorde van sibling items moet worden bijgewerkt, wordt voor deze items aan
TransactionEvent.BeforeCommiteen edit actie met eenShiftDownHintofShiftUpHintgeregistreerd.
OnAfterAdd
Nadat de ProcessUnit voor de ItmTab wordt verwerkt, worden een aantal stappen uitgevoerd in de OnAfterAdd trigger.
Stap "Compleetheid checken"
ItemChecker.SetCompletewordt aangeroepen om de volledigheid van het item te controleren en eventueel deItmTab.Cmpbij te werken. Als het item niet compleet is, wordt de gewenste publicatiestatus afgewaardeerd.- De compleetheid wordt ingevuld in kolommen
ItmTab.Cmp(compleetheid) enItmTab.Wcg(voldoet aan WCAG) enItmTab.Gry(bevat geen grijze-lijst items).
Stap "Structure events"
- Triggert een
StructureEvents.RaiseAddedevent, met eenStructureInfoobject als parameter. - Dat triggert
StructureEvents.ItemAdded, waarop de volgende subprocessen worden geregistreerd:
InfoProjects.Iprox.Events.PublicationEvents, om eventuele voor onderliggende items ook weer deze events te triggerenInfoProjects.Iprox.Handler.FillAncDscHandler, om deAncDscTabbij te werken (hulptabel voor structuur)InfoProjects.Iprox.Shared.FolderNameChecker, om (nogmaals/recursief) de mapnaam te bepalenInfoProjects.Iprox.Structure.SiteTables, om een add opdracht in deStructureJobFactoryte triggeren.InfoProjects.Iprox.Trigger.AuditTrail, om de actie (item_added) te registreren (in deMutTab).Iprox.OpenApi.Cms.Triggers.OrderMonitor, om (nogmaals/recursief) volgorde van sibling items in deStructureEventArgsbij te werken. Als volgorde van sibling items moet worden bijgewerkt, wordt voor deze items aanTransactionEvent.BeforeCommiteen edit actie met eenShiftDownHintofShiftUpHintgeregistreerd.
Stap "UI terugkoppeling: SetPublished"
Zet een Published property in het result van de ProcessUnit, voor verwerking in de UI.
Stap "Opslag versie"
Voegt een TransactionEvent.CommitComplete actie toe, namelijk: StoreVersion, die op zijn beurt weer VrsTab en eventueel VrsMwtTab vult, en assets kopieert (naar een map voor die versie)
- TODO: na IPCMS-1600 / IPCMS-1471 wordt dit anders
Bewerken (Edit)
OnBeforeEdit
Voordat de ProcessUnit voor de ItmTab wordt verwerkt, worden een aantal stappen uitgevoerd in de OnBeforeEdit trigger.
Stap CheckGone
Niet relevant, want wordt alleen gedaan bij ItemUnlessGoneHint
Stap SetItemAspects
1. Registratie aanmaak en laatste bewerking
ItmTab.CorDtm,ItmTab.CorTydenItmTab.CorGebIdt, voor resp. datum, tijd en gebruikers-id van de laatste bewerking (Cor= correctie)
2. Registratie eerste en laatste publicatie (als een item een gepubliceerd-status (3, 4, 7) krijgt)
ItmTab.FstPubDtm,ItmTab.FstPubTydvoor datum en tijd van eerste publicatieItmTab.LstPubDtm,ItmTab.LstPubTydenItmTab.LstPubGebIdtvoor datum, tijd en gebruikers-id van laatste/jongste publicatie
3. Parent verwijzing in route
ItmTab.LblUrlParIdtals een item onder een transparante map komt is dit verwijzing naar het eerst bovenliggende niet-transparante item, anders naar de parent
4. Publicatie in de toekomst
ItmTab.NxtDtmals dat wordt ingesteld, wordt inItmTab.NxtGebIdtgeregistreerd wie die opdracht heeft gegeven.- Als dat NIET is ingesteld, worden zowel
ItmTab.NxtDtm,ItmTab.NxtTydalsItmTab.NxtGebIdtgeleegd.
5. Check op toegestane typerelaties
- Als een wijziging plaatsvindt op
ItmTyp,PagTypIdtofParIdt, wordt eenTransactionEvent.BeforeCommitactie toegevoegd:TriggersItmTab.CheckTypeRelations, waarin metPagTypRelTab,ItmTypRelTab,PagTypItmTypRelTabenItmTypPagTypRelTabwordt bekeken of de beoogde relatie wel is toegestaan. Zo niet, wordt de transactie afgeblazen.
6. Voorkomen typewijziging transparante map
PreventTransparentFolderMutationzorgt ervoor dat dit niet mag (NB: als we dit toe zouden staan zou dit in de huidige opzet een zeer complexe herberekening betekenen van mapnamen en parent verwijzingen in een item thread)
7. Statusmanipulatie voor verwijzende types (interne link, koppeling, automatische structuurkoppeling, redactionele structuurkoppeling)
ItmTab.Stsgaat naar1("nieuw") als geen doel (ItmTab.NarItmIdt) is aangewezen
8. Mapnaam bepaling (slug)
ItmTab.LblUrl, default wordt als input de waarde vanItmTab.Lblgebruikt; de input wordt vervolgens door de logica vanFolderNameCheckergehaald.
9. Volgorde van sibling items bijwerken en wijziging asynchroon verwerken in publicatietabellen
RaiseChangingtriggert eenStructureEvents.RaiseChangingevent, met huidigeunitencontextalsStructureEventArgsparameter.- Dat triggert
StructureEvents.ItemChanging, waarop de volgende subprocessen worden geregistreerd:
InfoProjects.Iprox.Structure.SiteTables, om een edit opdracht in deStructureJobFactoryte triggeren.Iprox.OpenApi.Cms.Triggers.OrderMonitor, om volgorde van sibling items in deStructureEventArgsbij te werken. Als volgorde van sibling items moet worden bijgewerkt, wordt voor deze items aanTransactionEvent.BeforeCommiteen edit actie met eenShiftDownHintofShiftUpHintgeregistreerd.
Stap CheckLinkToParent
Bij items van type koppeling (alle 3, dus enkelvoudig, automatisch en redactioneel structuurkoppeling) wordt hier een lus voorkomen door de opdracht af te blazen als het bovenliggend item wordt aangewezen.
Stap PublishTree
In het CMS dient dit om - middels een PublishTreeHint - een hele tak in één keer te publiceren.
OnAfterEdit
Voordat de ProcessUnit voor de ItmTab wordt verwerkt, worden een aantal stappen uitgevoerd in de OnAfterEdit trigger.
Stap "Compleetheid checken"
ItemChecker.SetCompletewordt aangerepen om de volledigheid van het item te controleren en eventueel deItmTab.Cmpbij te werken. Als het item niet compleet is, wordt de gewenste publicatiestatus afgewaardeerd.- De compleetheid wordt ingevuld in kolommen
ItmTab.Cmp(compleetheid) enItmTab.Wcg(voldoet aan WCAG) enItmTab.Gry(bevat geen grijze-lijst items).
Stap "Gerelateerde items" (FixRelatedItems)
- Voegt een
TransactionEvent.CommitCompleteactie toe, namelijk:StoreVersion, die op zijn beurt weerVrsTaben eventueelVrsMwtTabvult, en assets kopieert (naar een map voor die versie) - Bepaalt met
CheckBranchAllowedInSiteof er in een te kopieren tak niet nog een kopie gaaande is, en of alle voorkomende typen in de tak wel toegestaan zijn in de doelstructuur. Gooit een exceptie als zoiets aan de hand is.
Stap FixDescendants
Voor onderliggende items:
- Bij verplaatsing naar prullenbak worden alle voorkomende koppelingen verwijderd;
- Wordt kolom
ItmTab.OrgSitIdtgevuld met de oorspronkelijke structuur id; - Werkt in geval van transparante mappen de parent id verwijzing en mapnamen bij (wederom met
SanitizedFolderName)
Bij verplaatsing naar prullenbak
- Worden voor redactionele structuurkoppelingen de keuzes gewist (uit de
LnkItmTab) - Worden koppelingen en verwijzingen naar de te verplaatsen items verwijderd
- Worden verwijzingen naar items vanuit HTML velden als
deadLinkgemarkeerd, en dat wordt ook inItmTab.DeaLnkgemarkeerd ("heeft dode links").
Registratie in publicatie-queue tabellen PubTab en SitPubTab
- Door bij verplaatsing naar nieuwe parent of andere structuur
InfoProjects.Iprox.Shared.Publishing.PublishSitesaan te roepen, ontstaat een entry in deSitPubTab. Deze tabel speelt een rol in deFillSiteTablesHandler, om sitestructuren te herbouwen (om alleen te doen wat 'nodig' is). - Als een item gepubliceerd is, komt een entry in de
PubTab. Met die tabel wordt in iprox.modules in deInfoProjects.Iprox.Modules.Backend.Handler.PublishPagesStep>PublishPagealles geregeld wat er specifiek voor de iprox.modules nodig is.
Stap "Structure events"
- Triggert een
StructureEvents.RaiseChangedevent, met 2StructureInfoobjecten (oud en nieuw) als parameters. - Dat triggert
StructureEvents.ItemChanged, waarop de volgende subprocessen worden geregistreerd:
InfoProjects.Iprox.Events.PublicationEvents, om eventuele voor onderliggende items ook weer deze events te triggerenInfoProjects.Iprox.Handler.FillAncDscHandler, om deAncDscTabbij te werken (hulptabel voor structuur)InfoProjects.Iprox.Shared.FolderNameChecker, om (nogmaals/recursief) de mapnaam te bepalenInfoProjects.Iprox.Structure.SiteTables, om een edit opdracht in deStructureJobFactoryte triggeren.InfoProjects.Iprox.Trigger.AuditTrail, om de actie (item_changed, of een van de vele andereitem_*acties) te registreren (in deMutTab).Iprox.OpenApi.Cms.Triggers.OrderMonitor, om (nogmaals/recursief) volgorde van sibling items in deStructureEventArgsbij te werken. Als volgorde van sibling items moet worden bijgewerkt, wordt voor deze items aanTransactionEvent.BeforeCommiteen edit actie met eenShiftDownHintofShiftUpHintgeregistreerd.
Overige triggers
Er zijn nog meer triggers, die qua stappen deels overlap hebben met Add/Edit. (nader uit te werken)
OnBeforeCopy/OnAfterCopyOnBeforeDown/OnAfterDownOnBeforeUp/OnAfterUpOnBeforeDeleteOnBeforeReplaceOnBeforeOrder