Ga naar hoofdinhoud

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.CorTyd en ItmTab.CorGebIdt, voor resp. datum, tijd en gebruikers-id van de laatste bewerking (Cor = correctie)
  • ItmTab.CreDtm, ItmTab.CreTyd en ItmTab.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.FstPubTyd voor datum en tijd van eerste publicatie
  • ItmTab.LstPubDtm, ItmTab.LstPubTyd en ItmTab.LstPubGebIdt voor datum, tijd en gebruikers-id van laatste/jongste publicatie

3. Parent verwijzing in route

  • ItmTab.LblUrlParIdt als 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 van ItmTab.Lbl gebruikt; de input wordt vervolgens door de logica van FolderNameChecker gehaald.

5. Volgorde van sibling items bijwerken

  • RaiseAdding triggert een StructureEvents.RaiseAdding event, met huidige unit en context als StructureEventArgs parameter.
  • Dat triggert dan weer StructureEvents.ItemAdding, waarop in Iprox.OpenApi.Cms.Triggers.OrderMonitor wordt aangehaakt, om volgorde van sibling items in de StructureEventArgs bij te werken.
  • Als volgorde van sibling items moet worden bijgewerkt, wordt voor deze items aan TransactionEvent.BeforeCommit een edit actie met een ShiftDownHint of ShiftUpHint geregistreerd.

OnAfterAdd

Nadat de ProcessUnit voor de ItmTab wordt verwerkt, worden een aantal stappen uitgevoerd in de OnAfterAdd trigger.

Stap "Compleetheid checken"

  • ItemChecker.SetComplete wordt aangeroepen om de volledigheid van het item te controleren en eventueel de ItmTab.Cmp bij te werken. Als het item niet compleet is, wordt de gewenste publicatiestatus afgewaardeerd.
  • De compleetheid wordt ingevuld in kolommen ItmTab.Cmp (compleetheid) en ItmTab.Wcg (voldoet aan WCAG) en ItmTab.Gry (bevat geen grijze-lijst items).

Stap "Structure events"

  • Triggert een StructureEvents.RaiseAdded event, met een StructureInfo object als parameter.
  • Dat triggert StructureEvents.ItemAdded, waarop de volgende subprocessen worden geregistreerd:
  1. InfoProjects.Iprox.Events.PublicationEvents, om eventuele voor onderliggende items ook weer deze events te triggeren
  2. InfoProjects.Iprox.Handler.FillAncDscHandler, om de AncDscTab bij te werken (hulptabel voor structuur)
  3. InfoProjects.Iprox.Shared.FolderNameChecker, om (nogmaals/recursief) de mapnaam te bepalen
  4. InfoProjects.Iprox.Structure.SiteTables, om een add opdracht in de StructureJobFactory te triggeren.
  5. InfoProjects.Iprox.Trigger.AuditTrail, om de actie (item_added) te registreren (in de MutTab).
  6. Iprox.OpenApi.Cms.Triggers.OrderMonitor, om (nogmaals/recursief) volgorde van sibling items in de StructureEventArgs bij te werken. Als volgorde van sibling items moet worden bijgewerkt, wordt voor deze items aan TransactionEvent.BeforeCommit een edit actie met een ShiftDownHint of ShiftUpHint geregistreerd.

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.CorTyd en ItmTab.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.FstPubTyd voor datum en tijd van eerste publicatie
  • ItmTab.LstPubDtm, ItmTab.LstPubTyd en ItmTab.LstPubGebIdt voor datum, tijd en gebruikers-id van laatste/jongste publicatie

3. Parent verwijzing in route

  • ItmTab.LblUrlParIdt als 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.NxtDtm als dat wordt ingesteld, wordt in ItmTab.NxtGebIdt geregistreerd wie die opdracht heeft gegeven.
  • Als dat NIET is ingesteld, worden zowel ItmTab.NxtDtm, ItmTab.NxtTyd als ItmTab.NxtGebIdt geleegd.

5. Check op toegestane typerelaties

  • Als een wijziging plaatsvindt op ItmTyp, PagTypIdt of ParIdt, wordt een TransactionEvent.BeforeCommit actie toegevoegd: TriggersItmTab.CheckTypeRelations, waarin met PagTypRelTab, ItmTypRelTab, PagTypItmTypRelTab en ItmTypPagTypRelTab wordt bekeken of de beoogde relatie wel is toegestaan. Zo niet, wordt de transactie afgeblazen.

6. Voorkomen typewijziging transparante map

  • PreventTransparentFolderMutation zorgt 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.Sts gaat naar 1 ("nieuw") als geen doel (ItmTab.NarItmIdt) is aangewezen

8. Mapnaam bepaling (slug)

  • ItmTab.LblUrl, default wordt als input de waarde van ItmTab.Lbl gebruikt; de input wordt vervolgens door de logica van FolderNameChecker gehaald.

9. Volgorde van sibling items bijwerken en wijziging asynchroon verwerken in publicatietabellen

  • RaiseChanging triggert een StructureEvents.RaiseChanging event, met huidige unit en context als StructureEventArgs parameter.
  • Dat triggert StructureEvents.ItemChanging, waarop de volgende subprocessen worden geregistreerd:
  1. InfoProjects.Iprox.Structure.SiteTables, om een edit opdracht in de StructureJobFactory te triggeren.
  2. Iprox.OpenApi.Cms.Triggers.OrderMonitor, om volgorde van sibling items in de StructureEventArgs bij te werken. Als volgorde van sibling items moet worden bijgewerkt, wordt voor deze items aan TransactionEvent.BeforeCommit een edit actie met een ShiftDownHint of ShiftUpHint geregistreerd.

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.SetComplete wordt aangerepen om de volledigheid van het item te controleren en eventueel de ItmTab.Cmp bij te werken. Als het item niet compleet is, wordt de gewenste publicatiestatus afgewaardeerd.
  • De compleetheid wordt ingevuld in kolommen ItmTab.Cmp (compleetheid) en ItmTab.Wcg (voldoet aan WCAG) en ItmTab.Gry (bevat geen grijze-lijst items).

Stap "Gerelateerde items" (FixRelatedItems)

  • 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)
  • Bepaalt met CheckBranchAllowedInSite of 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:

  1. Bij verplaatsing naar prullenbak worden alle voorkomende koppelingen verwijderd;
  2. Wordt kolom ItmTab.OrgSitIdt gevuld met de oorspronkelijke structuur id;
  3. Werkt in geval van transparante mappen de parent id verwijzing en mapnamen bij (wederom met SanitizedFolderName)

Bij verplaatsing naar prullenbak

  1. Worden voor redactionele structuurkoppelingen de keuzes gewist (uit de LnkItmTab)
  2. Worden koppelingen en verwijzingen naar de te verplaatsen items verwijderd
  3. Worden verwijzingen naar items vanuit HTML velden als deadLink gemarkeerd, en dat wordt ook in ItmTab.DeaLnk gemarkeerd ("heeft dode links").

Registratie in publicatie-queue tabellen PubTab en SitPubTab

  1. Door bij verplaatsing naar nieuwe parent of andere structuur InfoProjects.Iprox.Shared.Publishing.PublishSites aan te roepen, ontstaat een entry in de SitPubTab. Deze tabel speelt een rol in de FillSiteTablesHandler, om sitestructuren te herbouwen (om alleen te doen wat 'nodig' is).
  2. Als een item gepubliceerd is, komt een entry in de PubTab. Met die tabel wordt in iprox.modules in de InfoProjects.Iprox.Modules.Backend.Handler.PublishPagesStep > PublishPage alles geregeld wat er specifiek voor de iprox.modules nodig is.

Stap "Structure events"

  • Triggert een StructureEvents.RaiseChanged event, met 2 StructureInfo objecten (oud en nieuw) als parameters.
  • Dat triggert StructureEvents.ItemChanged, waarop de volgende subprocessen worden geregistreerd:
  1. InfoProjects.Iprox.Events.PublicationEvents, om eventuele voor onderliggende items ook weer deze events te triggeren
  2. InfoProjects.Iprox.Handler.FillAncDscHandler, om de AncDscTab bij te werken (hulptabel voor structuur)
  3. InfoProjects.Iprox.Shared.FolderNameChecker, om (nogmaals/recursief) de mapnaam te bepalen
  4. InfoProjects.Iprox.Structure.SiteTables, om een edit opdracht in de StructureJobFactory te triggeren.
  5. InfoProjects.Iprox.Trigger.AuditTrail, om de actie (item_changed, of een van de vele andere item_* acties) te registreren (in de MutTab).
  6. Iprox.OpenApi.Cms.Triggers.OrderMonitor, om (nogmaals/recursief) volgorde van sibling items in de StructureEventArgs bij te werken. Als volgorde van sibling items moet worden bijgewerkt, wordt voor deze items aan TransactionEvent.BeforeCommit een edit actie met een ShiftDownHint of ShiftUpHint geregistreerd.

Overige triggers

Er zijn nog meer triggers, die qua stappen deels overlap hebben met Add/Edit. (nader uit te werken)

  • OnBeforeCopy / OnAfterCopy
  • OnBeforeDown / OnAfterDown
  • OnBeforeUp / OnAfterUp
  • OnBeforeDelete
  • OnBeforeReplace
  • OnBeforeOrder