unclean SPARC

This commit is contained in:
STEINNI
2025-08-27 07:03:09 +00:00
commit f308460931
430 changed files with 54426 additions and 0 deletions
@@ -0,0 +1,41 @@
/*
Typical TODO-list for new app feature:
=> New route:
=> Delegating route in baseRoutes.json (without method)
=> Add real route(s) in the xxxController.json (section:routes)
=> New controller :
=> Create xxxController.json (minimum: routes, views to load, model to load)
=> Create xxxController.js
=> (!) make sure to have a correct "app.registerClass"(same as filename !)
=> (!) make sure the class name is unique across the universe
=> Create the methods used in the route(s) definition
=> Add this.loadWindow in the method(s)
=> second param is object of anything to pass to view, such ass model(s) (1)
=> New model :
=> Create xxxModel.js
=> (!) make sure to have a correct "app.registerClass" (same as filename !)
=> (!) make sure the class name is unique across the universe
=> New view :
=> Create xxxView.html
=> Create xxxView.js
=> (!) make sure to have a correct "app.registerClass" (same as filename !)
=> (!) make sure the class name is unique across the universe
=> Needs at least a method "DOMContentLoaded(options)"
=> probably want to use "ui.eicfy(this.el)"
=> setup all your dom & components references
=> probably want to get stuff from the controller via options.xxx
=> typical: "this.model = this.options.model" (see (1))
or: like "for(let model in options.models) this[model] = options.models[model]"
=> Make a menu entry :
=> Add an entry in "/app/assets/json/global/app-menu-map.json"
=> (!) Make sure to select the proper roles (or "*" for open-bar)
*/
+106
View File
@@ -0,0 +1,106 @@
<PIC>889194733</PIC> Granted
<PIC>934188280</PIC> Granted
<PIC>892649679</PIC> Granted
<PIC>917568106</PIC> Granted
<PIC>904060759</PIC> Granted
<PIC>888564233</PIC> Granted
<PIC>888330366</PIC> Granted
<PIC>888554145</PIC> Granted
<PIC>898827900</PIC> Granted
<PIC>888323091</PIC> Granted
<PIC>888325128</PIC> Granted
<PIC>888511562</PIC> Granted
<PIC>892722235</PIC> Granted
<PIC>913000861</PIC> Granted
<PIC>889396978</PIC> Granted
<PIC>890403838</PIC> Granted
<PIC>898781534</PIC> Granted
<PIC>931664437</PIC> Granted
<PIC>904105282</PIC> Granted
<PIC>886470682</PIC> Granted
<PIC>894431763</PIC> Granted
<PIC>910667138</PIC> Granted
<PIC>886482710</PIC> Granted
<PIC>890038730</PIC> Granted
<PIC>892657148</PIC> Granted
<PIC>910897028</PIC> Granted
<PIC>886501625</PIC> Granted
<PIC>904414615</PIC> Granted
<PIC>910449664</PIC> Granted
<PIC>907587485</PIC> Granted
<PIC>889228295</PIC> Granted
<PIC>891358221</PIC> Granted
<PIC>886526845</PIC> Granted
<PIC>936304335</PIC> Granted
<PIC>894423712</PIC> Granted
<PIC>907679247</PIC> Granted
<PIC>925244783</PIC> Granted
<PIC>885790324</PIC> Granted
<PIC>885800315</PIC> Granted
<PIC>931630681</PIC> Granted
<PIC>891563279</PIC> Granted
<PIC>898815387</PIC> Granted
<PIC>911172023</PIC> Granted
<PIC>911227992</PIC> Granted
<PIC>885787123</PIC> Granted
<PIC>891010476</PIC> Granted
<PIC>894993878</PIC> Granted
<PIC>885846390</PIC> Granted
<PIC>895010174</PIC> Granted
<PIC>889226258</PIC> Granted
<PIC>886396671</PIC> Granted
927984548 Granted
891694714
891087979
995981645
905736531 NIKE
***************************** SHORTPROPS *****************************
User Org SP
n0005lk9 / /
n0005lka 891808301 /
n0005lkb 888657256 190157586
n0005lkd / 190116115
steinic 886396671 created
n0005lke / Z8bltqvKewuraPkGN0rS (not in the BE yet --> need onboarding) / 190117162
n0005lkf (not in the BE yet --> need onboarding) 923569011 190138101
n0005lk9 --> l'utilisateur existe mais n'a accès à rien
n0005lka --> l'utilisateur existe et est admin de l'organisation 891808301 (qui existe elle aussi)
n0005lkb --> l'utilisateur est admin de l'organisation et de la short mentionnées
n0005lkd --> l'utilisateur est admin de la short mentionnée (qui n'a pas de PIC) ; il n'est membre d'aucune organisation
n0005lke --> l'utilisateur n'existe pas encore dans le BE mais son EULogin est lié à une short existante (qui n'a pas de PIC)
n0005lkf --> l'utilisateur n'existe pas encore dans le BE mais son EULogin est lié à une short existante, qui elle-même est liée à une organisation (qui n'existe pas encore dans le BE)
n0005lkl
n0005lki
n0005lkj
T3stE2E@eic.EU
Gavin.eic1@gmail.com: n000110z / Easme12345678901 => Z8bltqvKewuraPkGN0rS
samantha.patelle@gmail.com Easme12345
n0005jin / uraPkGN0rSZ8bltqvKew : BP_SPOC_FastTrack
https://myeic.dev.eismea.eu/applicant/999519720
999507207
999513706
999516519
999519720
999588784
999678121
999770950
999780262
999796946
999833612
999906459
+17
View File
@@ -0,0 +1,17 @@
{
"success" : true,
"payload": [
{
"family_name": "Stein",
"given_name": "Nicolas",
"email": "nicolas.stein@disney.com",
"https://ecas.ec.europa.eu/claims/uid":"steinni"
},
{
"family_name": "Lapraline",
"given_name": "Toto",
"email": "toto@gmail.com",
"https://ecas.ec.europa.eu/claims/uid":"piperto"
}
]
}
+32
View File
@@ -0,0 +1,32 @@
[
{
"role": "BP_PO",
"permissions": {
"tokens": [ "list", "setSettings", "getSettings" ],
"users": [ "list", "search", "create", "revoke" ],
"company": [ "search", "grant", "revoke" ],
"templates": ["list", "search", "create", "clone", "edit", "reject", "approve" ]
}
},
{ "role": "BP_HoU",
"permissions": {
"tokens": [ "list" ],
"users": [ ],
"company": [ ]
}
},
{ "role": "BP_SPOC_FastTrack",
"permissions": {
"tokens": [ "list" ],
"users": [ "list", "search", "create", "revoke" ],
"company": [ "search", "grant" ]
}
},
{ "role": "BP_SPOC_Plugin",
"permissions": {
"tokens": [ "list", "getPrograms", "addProgram", "removeProgram" ],
"users": [ "list", "search", "create", "revoke" ],
"company": [ "search", "grant" ]
}
}
]
+116
View File
@@ -0,0 +1,116 @@
<button primary eicbutton xlarge icon="icon-stop"></button>
<button primary eicbutton xlarge icon="icon-play"></button>
<button primary eicbutton xlarge icon="icon-history"></button>
<button primary eicbutton xlarge icon="icon-spinner"></button>
<button primary eicbutton xlarge icon="icon-cog"></button>
<button primary eicbutton xlarge icon="icon-star-empty"></button>
<button primary eicbutton xlarge icon="icon-star-half"></button>
<button primary eicbutton xlarge icon="icon-star-full"></button>
<button primary eicbutton xlarge icon="icon-heart"></button>
<button primary eicbutton xlarge icon="icon-happy"></button>
<button primary eicbutton xlarge icon="icon-face-smile"></button>
<button primary eicbutton xlarge icon="icon-face-tongue"></button>
<button primary eicbutton xlarge icon="icon-face-sad"></button>
<button primary eicbutton xlarge icon="icon-face-wink"></button>
<button primary eicbutton xlarge icon="icon-face-baffled"></button>
<button primary eicbutton xlarge icon="icon-face-confused"></button>
<button primary eicbutton xlarge icon="icon-youtube"></button>
<button primary eicbutton xlarge icon="icon-linkedin"></button>
<button primary eicbutton xlarge icon="icon-pdf"></button>
<button primary eicbutton xlarge icon="icon-pen"></button>
<button primary eicbutton xlarge icon="icon-coaching"></button>
<button primary eicbutton xlarge icon="icon-cart"></button>
<button primary eicbutton xlarge icon="icon-phone"></button>
<button primary eicbutton xlarge icon="icon-hour-glass"></button>
<button primary eicbutton xlarge icon="icon-refresh"></button>
<button primary eicbutton xlarge icon="icon-complaint"></button>
<button primary eicbutton xlarge icon="icon-evaluation"></button>
<button primary eicbutton xlarge icon="icon-link"></button>
<button primary eicbutton xlarge icon="icon-loop"></button>
<button primary eicbutton xlarge icon="icon-image"></button>
<button primary eicbutton xlarge icon="icon-new"></button>
<button primary eicbutton xlarge icon="icon-map"></button>
<button primary eicbutton xlarge icon="icon-pin"></button>
<button primary eicbutton xlarge icon="icon-user-check"></button>
<button primary eicbutton xlarge icon="icon-cogs"></button>
<button primary eicbutton xlarge icon="icon-bin"></button>
<button primary eicbutton xlarge icon="icon-attachment"></button>
<button primary eicbutton xlarge icon="icon-xls"></button>
<button primary eicbutton xlarge icon="icon-big-bullet"></button>
<button primary eicbutton xlarge icon="icon-code"></button>
<button primary eicbutton xlarge icon="icon-check-rounded"></button>
<button primary eicbutton xlarge icon="icon-dashboard"></button>
<button primary eicbutton xlarge icon="icon-more"></button>
<button primary eicbutton xlarge icon="icon-locked"></button>
<button primary eicbutton xlarge icon="icon-unlocked"></button>
<button primary eicbutton xlarge icon="icon-menu"></button>
<button primary eicbutton xlarge icon="icon-reply"></button>
<button primary eicbutton xlarge icon="icon-back"></button>
<button primary eicbutton xlarge icon="icon-link-ext"></button>
<button primary eicbutton xlarge icon="icon-share"></button>
<button primary eicbutton xlarge icon="icon-workflow"></button>
<button primary eicbutton xlarge icon="icon-health"></button>
<button primary eicbutton xlarge icon="icon-copy"></button>
<button primary eicbutton xlarge icon="icon-filter"></button>
<button primary eicbutton xlarge icon="icon-deny"></button>
<button primary eicbutton xlarge icon="icon-home"></button>
<button primary eicbutton xlarge icon="icon-pause"></button>
<button primary eicbutton xlarge icon="icon-market"></button>
<button primary eicbutton xlarge icon="icon-thumbs-down"></button>
<button primary eicbutton xlarge icon="icon-thumbs-up"></button>
<button primary eicbutton xlarge icon="icon-trash"></button>
<button primary eicbutton xlarge icon="icon-bolt"></button>
<button primary eicbutton xlarge icon="icon-check"></button>
<button primary eicbutton xlarge icon="icon-cancel"></button>
<button primary eicbutton xlarge icon="icon-close"></button>
<button primary eicbutton xlarge icon="icon-download"></button>
<button primary eicbutton xlarge icon="icon-envelope"></button>
<button primary eicbutton xlarge icon="icon-company"></button>
<button primary eicbutton xlarge icon="icon-servers"></button>
<button primary eicbutton xlarge icon="icon-review"></button>
<button primary eicbutton xlarge icon="icon-correction"></button>
<button primary eicbutton xlarge icon="icon-mediation"></button>
<button primary eicbutton xlarge icon="icon-writing"></button>
<button primary eicbutton xlarge icon="icon-sort-asc"></button>
<button primary eicbutton xlarge icon="icon-sort-desc"></button>
<button primary eicbutton xlarge icon="icon-unsorted"></button>
<button primary eicbutton xlarge icon="icon-help"></button>
<button primary eicbutton xlarge icon="icon-plus"></button>
<button primary eicbutton xlarge icon="icon-search"></button>
<button primary eicbutton xlarge icon="icon-user"></button>
<button primary eicbutton xlarge icon="icon-logoff"></button>
<button primary eicbutton xlarge icon="icon-edit"></button>
<button primary eicbutton xlarge icon="icon-checked"></button>
<button primary eicbutton xlarge icon="icon-info"></button>
<button primary eicbutton xlarge icon="icon-expand"></button>
<button primary eicbutton xlarge icon="icon-warning"></button>
<button primary eicbutton xlarge icon="icon-calendar"></button>
<button primary eicbutton xlarge icon="icon-comment"></button>
<button primary eicbutton xlarge icon="icon-twitter"></button>
<button primary eicbutton xlarge icon="icon-facebook"></button>
<button primary eicbutton xlarge icon="icon-square-o"></button>
<button primary eicbutton xlarge icon="icon-website"></button>
<button primary eicbutton xlarge icon="icon-users"></button>
<button primary eicbutton xlarge icon="icon-list-ul"></button>
<button primary eicbutton xlarge icon="icon-table"></button>
<button primary eicbutton xlarge icon="icon-exchange"></button>
<button primary eicbutton xlarge icon="icon-alert"></button>
<button primary eicbutton xlarge icon="icon-chevron-left"></button>
<button primary eicbutton xlarge icon="icon-chevron-right"></button>
<button primary eicbutton xlarge icon="icon-angle-left"></button>
<button primary eicbutton xlarge icon="icon-angle-right"></button>
<button primary eicbutton xlarge icon="icon-angle-up"></button>
<button primary eicbutton xlarge icon="icon-angle-down"></button>
<button primary eicbutton xlarge icon="icon-zip"></button>
<button primary eicbutton xlarge icon="icon-send"></button>
<button primary eicbutton xlarge icon="icon-preview"></button>
<button primary eicbutton xlarge icon="icon-stats"></button>
<button primary eicbutton xlarge icon="icon-toggle-off"></button>
<button primary eicbutton xlarge icon="icon-toggle-on"></button>
<button primary eicbutton xlarge icon="icon-user-add"></button>
<button primary eicbutton xlarge icon="icon-calendar-plus"></button>
<button primary eicbutton xlarge icon="icon-calendar-minus"></button>
<button primary eicbutton xlarge icon="icon-calendar-failed"></button>
<button primary eicbutton xlarge icon="icon-calendar-check"></button>
<button primary eicbutton xlarge icon="icon-graduate"></button>
@@ -0,0 +1,11 @@
CNS infos:
Home page in confluence:
https://citnet.tech.ec.europa.eu/CITnet/confluence/display/CNS/CNS+Home
API swagger:
https://webgate.acceptance.ec.europa.eu/cns/restapi/?ticket=ST-3492070-ib8qIagzgjT0HjAnhZogjDJSwITAq4YOCQaPzSEzqkjXKYaMeSCdzzdjIxd6OCLEzgJYDCWfcAwTXd4czOpzwnrU-zGrcc7GCOy8q7wCXbuuQ9K-QDr1sFx5wNzYWsj7jNzSnl6VPOBo2YiHpKMXIlWXUDD7sVt23FD6R4fZfIxnlYH4pcAATXPFU5UaOFC1UzHyzvm#/
+80
View File
@@ -0,0 +1,80 @@
***********************************************
* Raiders of the lost-arcmodel (archaïc model)*
***********************************************
===> Le comportement zarb:
On édite une propal, on refocus le dashboard, on clique sur view de la même propal (probablement idem si edit) :
La propal se re-focus, mais les dernières données encodées n'y sont pas.
Biensur, réessayé en veillant bien à attendre le temps de l'auto-save,
vérifié en voyant passer le PUT en console-network mais le blème est bien côté FE.
===> L'enquête:
- Suivit le reloading des données en les dumpant partout, depuis le modèle (reload OK, données fraiches, donc effectivement c'est pas le BE)
jusque dans la vue ou -surprise- elles sont périmées.
- Pourtant séquence temporelle correcte, on a bien le model.getPropa avant le view.fill
- Finalement soupçon sur l'instantiation des modèles => mise (temoraire) d'un UUID random comme propriété du modèle dans son constructeur.
Du coup on peux tracer les changements d'instance.
===> Le diagnostique:
L'utilisateur sur le dashboard, fait un "Edit" sur la propal (première ouverture de cette propal):
- Route vers "SubmissionController::proposal"
- Ctrl instancie le model submissionModel (instance SM1)
- Ctrl load les datas dans SM1.data
THEN il fait un this.loadwindow (SumissionShortForm2023View), passe tous les modeles (dont SM1)
son ancêtre "EICcontroller" fait un "createwindow", et un "loadview" : param "data.models" =tous les modeles (dont SM1)
- "DOMContentLoaded(options)" est lancé dans la view "SubmissionShortForm2023View", SM1 arrive par "options.models", devient "this.submission"
- La view-propal fait des "fill()" pour tous les tabs, prend ses datas dans "this.submission" donc dans SM1.data ===> all good
- Ensuite, le user refocus la fenetre dashboard et fait un "view" sur la même propal. (probablement un "edit" aurais le même comportement)
- Route vers "SubmissionController::proposal"
- Ctrl instancie le model submissionModel (instance SM2) ====> aie !
- Ctrl load les datas fraiches dans SM2.data
THEN il fait un loadwindow (SumissionShortForm2023View), passe tous les modeles (dont SM2)
son ancetre "EICcontroller" conmait cette fenetre, et donc fait un "this.focus" (pas un create) param "data" = tous les modeles (dont SM2)
- "DOMContentFocused(data)" est lancé dans la view "SubmissionShortForm2023View", qui recoit SM2 via options.models
- MAIS "DOMContentFocused" se fout pas mal de options.models ====> ouille !
This.submission reste donc l'instance SM1 pas fraiche ====> et bardaf, c'est l'embardée !
- Biensur, Si on continue les allez-retour, il y a chaque fois une nouvelle instance de modèle,
mais les tabs continuent d'utiliser la toute première instance ===> aie-ouille-bardaf !
===> Le fix:
1. Patché d'abord en réassignant les modèles dans DOMContentFocused de "SubmissionShortForm2023View". (fastoche)
!!! Oui mais, dans le cas des Tabs ca ne suffit pas, car les tabs ne sont pas réinstanciés nonplus.
De plus, leur "DOMContentFocused" n'est jamais appelé.
2. Ajouté un appel à "DOMContentFocused" pour tous les chunks.view dans "SubmissionShortForm2023View::DOMContentFocused" pour propager le focus aux tabs
3. Ensuite ajouté un "DOMContentFocused" dans la maman des tabs "SubmissionShortFormTabView" qui assigne this.model avec options.models.sumbission (options.models étant maintenant dispo)
Du coup les vues & tabs ont la dernière instance du modèle, créée en réentrant dans le CTRL et donc les données fraiches.
...Reste a espérer qu'il ne traine plus de refs sur la vielle instance de modèle et qu'elle soit donc proprement garbage-collectée.
Attention, du coup sémentiquement : "DOMContentFocused" d'un tab veux dire "la fenêtre à laquelle le tab appartient est refocussée",
a ne pas confondre évidemment avec le focus du tab lui-même ( = event 'selected' du composant).
Makes me wonder : dommage qu'on réinstancie le modèle (en général, même fenêtre (avec mêm url dont params) = mêmes données,
le rafraichissement éventuel des données pourrais aussi bien se faire sans changer d'instance de modèle.
Mais lorsque EICcontroller teste pour voir si c'est une fenetre connue, il est déjà trop tard :
le ctrl-fiston a déjà instancié et choppé les datas, d'ailleurs c'est même obligatoirement synchrone avant de lancer la fenetre : via le THEN)
D'un autre côté, créer une association modèle-window (pour savoir si on l'a déjà plus tôt) n'est clairement pas un bon pattern...
... A méditer avec un malibu-ananas.
Si on reste sur le patch ci-dessus, faut bien garder ca en tête paske ce pattern => bug potientiel va se retrouver ailleurs !
===> Side-effect & Fix on the fix :
Dans certains cas les focus sont appelés sans options (lorsqu'on clicke sur les badges fenêtre).
=> rajouté un test pour ne pas tenter de recopier les modèles si pas d'options.
Pas grave parceque ca correspond au cas ou on refocus la fenêtre sans rerouter, donc avec modèles non-réinstanciés.
Mais j'adore pas tout ca... faudrat qu'on en cause, voir si on peut clarifier/simplifier.
@@ -0,0 +1,14 @@
{
"blockedUUIDs": [
"n0005lka"
],
"platformRestrictions": {
"allowedRoles": [
"EIC_Admin",
"EIC_Dev"
],
"allowedUUIDs": [
"n0005i29"
]
}
}
@@ -0,0 +1,18 @@
# Test log from 2023-06-23
#
# - means bug
# + means missing feature
# + means change request
#
- /organisations/PIC/ => sends an array of organisations (ony 1 item though). there should be only 1 object
- /organisations/PIC/members => CORS error
- /organisations/PIC/proposals => CORS error
- logged under user fallimi => received ORG_MEMBER and SP_ADMIN roles but no permissions on /organisations (?!?)
+ missing /users/search => same as /bypass/users/search (could be global)
+ missing /organisations/PIC/members/UID GET => retrieve details of a member (in order to update...)
+ missing "phone" property in organisation member => align to proposal fields
* change "function" property in organisation member to "position" => align to proposal fields
* change "administrator" property in organisation member to "admin" => align to member profile
+2
View File
@@ -0,0 +1,2 @@
Converting SELECT OPTIONS to meta (json) from console:
Array.prototype.slice.call(document.querySelectorAll('[name="ref2selector"] option')).map(o => `{"id": "${o.value}", "label": "${o.innerHTML}"}`).join(",")