team-5/integrate-symfony-ux #28
No reviewers
Labels
No labels
No milestone
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
HNNW/core!28
Loading…
Reference in a new issue
No description provided.
Delete branch "team-5/integrate-symfony-ux"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
er zijn voor 3 pages live components toegevoegd edit-participants, invite-participants en projects in deze pages is de main functionaliteit in javascript vervangen voor symfony UX live components en de javascript files en referenties zijn verwijderd.
Er zijn 2 symfony twig components toegevoegd een alert pop up en een profile card.
in commit
3c62fa48b3heb ik de import './styles/app.css'; uit assets/app.js verwijderd omdat dat er voor zorgde dat live components niet werkte met toestemming van de PO.Paginering in projects view is bewust weg gehaald
In projectService word gebruik gemaakt van statusFixtures die wel in de develop branch staat.
Goed werk om de drie pagina's om te zetten naar Live Components, er is veel losse JavaScript weg en de Alert/ProfileCard-components zijn herbruikbaar. Het weghalen van
import './styles/app.css'klopt ook: dat bestand bestaat niet in develop.Dit moet nog aangepast worden:
Moet opgelost worden
ProjectsView::getProjects()gebruikt$this->profileRepository->findOneBy([]). Dat haalt een willekeurig profiel op, dus iedereen ziet de projecten van een willekeurige gebruiker. Gebruik het ingelogde profiel (bijv. via deCurrentProfileProvider).InviteParticipantsSearch:projectIdis eenLiveProp(writable: true)eninviteSelectedProfiles()controleert niet of de gebruiker dit project mag beheren. Via een aangepaste request kan iemand dan deelnemers toevoegen aan elk project. MaakprojectIdniet writable en doe in de LiveAction een permissiecheck (bijv.denyAccessUnlessGrantedmet de ProjectVoter).ModifyParticipantsTable: de participant-ID's en role-ID's inrolesByParticipantworden niet gecontroleerd. Zo kun je rollen wijzigen van deelnemers in andere projecten. Controleer dat participant én rol bij$this->projectIdhoren.InviteParticipantsServicezet de status metfindOneBy([])("random entity for now"). Gebruik de juiste status. Haal het project ook één keer op buiten de loop, controleer of het bestaat, en doe deflush()na de loop in plaats van per profiel.ProfileRepository::searchExcluding(): heeft een project nog geen deelnemers, dan is$excludedProfileIdsleeg. Doctrine maakt vanNOT IN (:ids)met een lege lijstNOT IN (NULL), en dan komt er niets terug. Bij een nieuw project kun je dus niemand vinden. Voeg dieandWherealleen toe als de lijst niet leeg is.Verbeterpunten
6. In het projectoverzicht zijn de paginering en de keuze voor items per pagina verdwenen. Is dat bewust?
7. De link
href="org/projects/{{ project.slug }}"is relatief. Gebruikpath().8. Er staan ongebruikte imports en constructor-dependencies in:
Security,LiveArgenProjectParticipantRepositoryin ProjectsView, enNotFoundHttpExceptionin ProfileRepository.9. Het oude formulier in
modify-participants.html.twigstaat er nog als comment. Haal het weg.10. De component-templates (Alert, ProfileCard) hebben een
{% block stylesheets %}met een<link>. Die wordt bij elk gebruik van het component opnieuw in de body gerenderd. Laad de CSS liever via de pagina of de layout.11.
ProfileCard.html.twiggebruikt{{ type }}, maar dat is geen property van het component.12.
{% if this.projects == [] %}kan{% if this.projects is empty %}worden.Let op: PR #15 (team 6) wijzigt
modify-participants.html.twigook, op een andere manier. Stem af wie wat doet.Goed werk met de feedback:
projectIdis niet meer writable, er is eenProjectVotermet een permissions-mask,ModifyParticipantsTablecontroleert nu of deelnemer en rol bij het project horen,searchExcluding()werkt met een lege lijst, het project wordt één keer opgehaald met een enkeleflush(), het oude formulier in comments is weg, en de link gebruikt nupath(). Er zit alleen nog een blokkerende fout in de autorisatie.Moet opgelost worden
ProjectVoterisabstract class. Symfony registreert geen abstracte classes als service, dus de voter doet niet mee. Daardoor geeftisGranted('PROJECT_INVITE' / 'PROJECT_EDIT')altijdfalse, en kan niemand deelnemers uitnodigen of rollen wijzigen. Haalabstractweg (eventueelfinal).ProjectsView::getProjects()geeft het resultaat vanCurrentProfileProvider::getProfile()door aanfindByProfileOnQuery(string $query, Profile $profile).getProfile()kannullgeven: niet ingelogd, of ingelogd via de huidige sessie-login, want de provider op develop kijkt alleen naar Symfony Security. Dan krijg je een TypeError. Handelnullaf (lege lijst teruggeven). PR #12 (team 3) maakt de provider geschikt voor de sessie-login, dus stem af wie eerst merget.isActiveParticipant()doet nufindActiveParticipantsByProjectAndProfile(...) !== null. Die methode geeft altijd een array terug, nooitnull, dus iedereen is "actieve deelnemer". Daardoor kan iedereen zich inschrijven op taken (WorkPackageTaskEnrollmentService). Gebruik!== []offindLatestActiveParticipantByProjectAndProfile(...) !== null.InviteParticipantsServicezet de status nog steeds metfindOneBy([])("random entity for now"). Haal de status op met scopeProjectParticipant(zieStatusFixtures). Controleer ook of$projectbestaat.ProjectParticipantUpdateRoleHandler::handle()roept$role->getProject()aan zonder te checken of$rolebestaat. Een onbekend of leeg role-ID geeft een fatal error. Voegif (!$role) { continue; }toe.Verbeterpunten
6.
use SebastianBergmann\CodeCoverage\StaticAnalysis\Visibility;inProjectVoteris een per ongeluk toegevoegde import uit PHPUnit. Haal die weg, net als de andere ongebruikte imports:Security,LiveArg,ProjectParticipantRepositoryenProfileRepositoryinProjectsView.7.
getProject(): project(kleine letter) inInviteParticipantsSearchenModifyParticipantsTablegeeft een TypeError als het project niet bestaat. SchrijfProjecten handelnullaf.8.
$errorMessageiswritable: true. Dat is niet nodig, en zo kan de client de melding zelf zetten. Maak hem niet-writable. De meldingen zijn nu Engels ("You are not allowed to invite profile…"), terwijl de rest van de site Nederlands is.9.
findActiveParticipant()is hernoemd naarfindActiveParticipantsByProjectAndProfile(). PR #12 (team 3) implementeert juistfindActiveParticipant(), dus dat geeft een conflict. Stem af welke naam blijft.10. De projectkaarten in het org-panel linken nu naar
main.projects.detail(de publieke projectpagina) in plaats van naar de beheerpagina in het org-panel. Is dat bewust? De paginering en de keuze voor items per pagina (punt 6 vorige review) zijn nog steeds weg.Let op: PR #46 (zelfde auteur) gebruikt deze
ProjectVoterook en kan pas werken als deze PR gemerged is.Bij participants/invite en modify krijg je een exception wanneer je weizigingen probeert door te voeren. Dit komt, omdat er aan de alert in InviteParticipantsSearcht en ModifyParticipantsTable 'this.errorMessage' wordt gegeven als content, terwijl alert geen errorMessage property heeft. Om dit op te lossen verwijder de "this" uit die regel, hierdoor wordt de errorMessage property van de parent gebruikt.
Goed werk, alle blokkerende punten uit de vorige review zijn opgelost.
ProjectVoteris nufinalen doet dus mee,getProjects()geeft een lege lijst zonder profiel,isActiveParticipant()checkt op!== [], de status komt uit scopeProjectParticipanten een onbekende rol wordt overgeslagen. Ook het punt van Patrick over{{ errorMessage }}is verwerkt.(punt 1 t/m 5 vorige review) opgelost
Dit moet nog aangepast worden:
Moet opgelost worden
InviteParticipantsSearch::getProject()heeft return-typeProject, maar geeftnullterug als het project niet bestaat. Dat geeft een TypeError, dus deerrorMessagedie je daar zet wordt nooit getoond. Maak het return-type?Projecten handelnullaf waar jegetProject()gebruikt.ModifyParticipantsTable::getProject()heeft hetzelfde probleem (enprojectmet kleine letter).$errorMessageinModifyParticipantsTableis nog#[LiveProp(writable: true)]. Dan kan de browser de foutmelding zelf aanpassen. Haalwritable: trueweg, net als inInviteParticipantsSearch.InviteParticipantsServiceimporteertApp\DataFixtures\Common\StatusFixtures. Productiecode mag niet naar fixtures verwijzen (fixtures zijn er in productie niet). Haal de import weg.Verbeterpunten
4. (punt 6 vorige review) Ongebruikte imports/dependencies in
ProjectsView:Security,LiveArg,ProfileRepositoryenProjectParticipantRepository.5.
findActiveParticipant()inProjectParticipantRepositorywordt nergens gebruikt en geeft een exception bij meer dan één participant-rij. Is hij voor PR #12? Stem dan af wie hem houdt, anders weghalen.6. De meldingen zijn Engels en de melding in
ModifyParticipantsTable::updateParticipants()heeft het over "invite" terwijl het om rollen wijzigen gaat.7. (punt 10 vorige review) De paginering in
ProjectsViewis weg. Is dat bewust?Let op: PR #12 (team 3) voegt dezelfde
findActiveParticipant()toe. PR #46 (zelfde auteur) hangt van deze PR af.Netjes opgepakt.
getProject()geeft nu in beide components?Projectterug en de acties stoppen met een foutmelding als het project niet bestaat,errorMessageinModifyParticipantsTableis niet meer writable, de fixtures-import is weg,findActiveParticipant()is verwijderd en de melding bij rollen wijzigen klopt nu. Ookimportmap('app')staat nu buiten hetjavascript-block, zodat Stimulus op alle org-pagina's laadt.(punt 1, 2, 3, 5 en 6 vorige review) opgelost
Dit moet nog aangepast worden:
Moet opgelost worden
ProjectsView::getProjects()haalt alle projecten in één keer op en de "Items per page"/"Page x of y"-controls uitprojects.html.twigzijn verwijderd. Bij veel projecten wordt de pagina lang en traag. Zet de paginering terug (bijv. een#[LiveProp(writable: true)] int $pagemet limit/offset infindByProfileOnQuery()), of laat in de PR weten dat het bewust weg is en dat dit is afgestemd.ProjectsViewkrijgt nog steedsProfileRepositoryenProjectParticipantRepositoryin de constructor, maar gebruikt ze nergens. Dat suggereert dat de component profielen zelf ophaalt (zoals eerst metfindOneBy([])). Haal beide dependencies en hun imports weg;SecurityenLiveArgzijn al weg.Verbeterpunten
3. In
ProjectsView.html.twigstaatPublic page:{{ project.slug }}enEdit page:{{ project.slug }}zonder spatie na de dubbele punt.4. Kleine opmaak:
return[],if ($project === null){enisGranted('PROJECT_INVITE',$project)missen spaties. Laat eventueel PHP-CS-Fixer erover lopen.Let op: PR #46 (zelfde auteur) hangt van deze PR af en wijzigt ook
org.base.html.twig(importmap). Rebase #46 op develop nadat deze PR gemerged is.Goed dat je de ongebruikte
ProfileRepositoryenProjectParticipantRepositoryuitProjectsViewhebt gehaald, en dat er nu een limiet op het aantal projecten zit. De spaties in "Public page:" / "Edit page:",return []enisGranted('PROJECT_INVITE', $project)zijn ook netjes.Vorige review
if ($project === null){inInviteParticipantsSearchmist nog een spatie.Dit moet nog aangepast worden:
Moet opgelost worden
ProjectsView::getProjects()roept nog steedsfindByProfileOnQuery($this->query, $profile)aan, zonder$this->maxResults. Daardoor gebruikt de repository altijd de standaard30en verandert er niets als je het "Max Results"-veld aanpast. Geef de waarde mee:findByProfileOnQuery($this->query, $profile, $this->maxResults). Begrens hem ook, wantmaxResultsis een writable LiveProp en de gebruiker kan dus elk getal sturen (0, negatief of heel groot). Bijvoorbeeldmax(1, min($this->maxResults, 100))ingetProjects()enmin="1" max="100"op het input-veld. ZetmaxResultsinreset()ook terug naar 30.findByProfileOnQuery()staatsetMaxResults()zonderorderBy(). PostgreSQL geeft dan geen vaste volgorde terug, dus welke 30 projecten je ziet kan per keer verschillen. Voeg een sortering toe, bijv.->orderBy('project.title', 'ASC').#[LiveProp(writable: true)] int $pagemetsetFirstResult(($page - 1) * $maxResults)en vorige/volgende-knoppen), of laat in de PR weten dat een limiet in plaats van paginering bewust is en dat dit is afgestemd.Verbeterpunten
4. Geef
$maxResultsinfindByProfileOnQuery()een type en spaties:int $maxResults = 30. OokfindByProfileOnQuery($this->query,$profile)enif ($project === null){missen een spatie.Let op: PR #46 (zelfde auteur) hangt van deze PR af. Ik heb getest dat #46 na deze PR zonder conflicten merget. Met de huidige develop geeft de proefmerge van deze PR ook geen conflicten.
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.