diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2172dbd03..4b6da4216 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -18,7 +18,7 @@ before_script: # Bring in any services we need http://docs.gitlab.com/ee/ci/docker/using_docker_images.html#what-is-a-service # See http://docs.gitlab.com/ee/ci/services/README.html for examples. services: - - name: postgres:12 + - name: postgis/postgis:12-3.1-alpine alias: db - name: redis alias: redis diff --git a/src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php b/src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php index 8338af8c6..25b7e5860 100644 --- a/src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php +++ b/src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php @@ -43,16 +43,16 @@ use Symfony\Component\Serializer\SerializerInterface; */ class CRUDController extends AbstractController { - + /** - * The crud configuration + * The crud configuration * * This configuration si defined by `chill_main['crud']`. * * @var array */ protected $crudConfig; - + /** * @param array $config */ @@ -60,7 +60,7 @@ class CRUDController extends AbstractController { $this->crudConfig = $config; } - + /** * @param $parameter * @return Response @@ -69,7 +69,7 @@ class CRUDController extends AbstractController { return new Response($parameter); } - + /** * @param Request $request * @param $id @@ -79,7 +79,7 @@ class CRUDController extends AbstractController { return $this->deleteAction('delete', $request, $id); } - + /** * @param string $action * @param Request $request @@ -90,78 +90,78 @@ class CRUDController extends AbstractController protected function deleteAction(string $action, Request $request, $id, $formClass = null) { $this->onPreDelete($action, $request, $id); - + $entity = $this->getEntity($action, $id, $request); - + $postFetch = $this->onPostFetchEntity($action, $request, $entity); - + if ($postFetch instanceof Response) { return $postFetch; } - + if (NULL === $entity) { throw $this->createNotFoundException(sprintf("The %s with id %s " . "is not found"), $this->getCrudName(), $id); } - + $response = $this->checkACL($action, $entity); if ($response instanceof Response) { return $response; } - + $response = $this->onPostCheckACL($action, $request, $entity); if ($response instanceof Response) { return $response; } - + $form = $this->createFormFor($action, $entity, $formClass); - + $form->handleRequest($request); - + if ($form->isSubmitted() && $form->isValid()) { $this->onFormValid($entity, $form, $request); $em = $this->getDoctrine()->getManager(); - + $this->onPreRemove($action, $entity, $form, $request); $this->removeEntity($action, $entity, $form, $request); $this->onPostRemove($action, $entity, $form, $request); - + $this->onPreFlush($action, $entity, $form, $request); $em->flush(); $this->onPostFlush($action, $entity, $form, $request); - + $this->addFlash('success', $this->generateFormSuccessMessage($action, $entity)); - + $result = $this->onBeforeRedirectAfterSubmission($action, $entity, $form, $request); - + if ($result instanceof Response) { return $result; } - + return $this->redirectToRoute('chill_crud_'.$this->getCrudName().'_view', ['id' => $entity->getId()]); - + } elseif ($form->isSubmitted()) { $this->addFlash('error', $this->generateFormErrorMessage($action, $form)); } - + $defaultTemplateParameters = [ 'form' => $form->createView(), 'entity' => $entity, 'crud_name' => $this->getCrudName() ]; - + return $this->render( - $this->getTemplateFor($action, $entity, $request), + $this->getTemplateFor($action, $entity, $request), $this->generateTemplateParameter($action, $entity, $request, $defaultTemplateParameters) ); } - + /** * @param string $action * @param Request $request */ protected function onPreDelete(string $action, Request $request) {} - + /** * @param string $action * @param $entity @@ -169,7 +169,7 @@ class CRUDController extends AbstractController * @param Request $request */ protected function onPreRemove(string $action, $entity, FormInterface $form, Request $request) {} - + /** * @param string $action * @param $entity @@ -177,7 +177,7 @@ class CRUDController extends AbstractController * @param Request $request */ protected function onPostRemove(string $action, $entity, FormInterface $form, Request $request) {} - + /** * @param string $action * @param $entity @@ -190,10 +190,10 @@ class CRUDController extends AbstractController ->getManager() ->remove($entity); } - + /** * Base method called by index action. - * + * * @param Request $request * @return type */ @@ -201,14 +201,14 @@ class CRUDController extends AbstractController { return $this->indexEntityAction('index', $request); } - + /** * Build an index page. - * + * * Some steps may be overriden during this process of rendering. - * + * * This method: - * + * * 1. Launch `onPreIndex` * x. check acl. If it does return a response instance, return it * x. launch `onPostCheckACL`. If it does return a response instance, return it @@ -219,15 +219,15 @@ class CRUDController extends AbstractController * x. fetch the results, using `getQueryResult` * x. Launch `onPostIndexFetchQuery`. If it does return a response instance, return it * 4. create default parameters: - * - * The default parameters are: - * + * + * The default parameters are: + * * * entities: the list en entities ; * * crud_name: the name of the crud ; * * paginator: a paginator element ; - * 5. Launch rendering, the parameter is fetch using `getTemplateFor` + * 5. Launch rendering, the parameter is fetch using `getTemplateFor` * The parameters may be personnalized using `generateTemplateParameter`. - * + * * @param string $action * @param Request $request * @return type @@ -235,80 +235,80 @@ class CRUDController extends AbstractController protected function indexEntityAction($action, Request $request) { $this->onPreIndex($action, $request); - + $response = $this->checkACL($action, null); if ($response instanceof Response) { return $response; } - + if (!isset($entity)) { $entity = ''; } - + $response = $this->onPostCheckACL($action, $request, $entity); if ($response instanceof Response) { return $response; } - + $totalItems = $this->countEntities($action, $request); $paginator = $this->getPaginatorFactory()->create($totalItems); - - $response = $this->onPreIndexBuildQuery($action, $request, $totalItems, + + $response = $this->onPreIndexBuildQuery($action, $request, $totalItems, $paginator); - + if ($response instanceof Response) { return $response; } - + $query = $this->queryEntities($action, $request, $paginator); - - $response = $this->onPostIndexBuildQuery($action, $request, $totalItems, + + $response = $this->onPostIndexBuildQuery($action, $request, $totalItems, $paginator, $query); - + if ($response instanceof Response) { return $response; } - + $entities = $this->getQueryResult($action, $request, $totalItems, $paginator, $query); - - $response = $this->onPostIndexFetchQuery($action, $request, $totalItems, + + $response = $this->onPostIndexFetchQuery($action, $request, $totalItems, $paginator, $entities); - + if ($response instanceof Response) { return $response; } - + $defaultTemplateParameters = [ 'entities' => $entities, 'crud_name' => $this->getCrudName(), 'paginator' => $paginator ]; - + return $this->render( - $this->getTemplateFor($action, $entities, $request), + $this->getTemplateFor($action, $entities, $request), $this->generateTemplateParameter($action, $entities, $request, $defaultTemplateParameters) ); } - + /** * @param string $action * @param Request $request */ protected function onPreIndex(string $action, Request $request) { } - + /** * method used by indexAction - * + * * @param string $action * @param Request $request * @param int $totalItems * @param PaginatorInterface $paginator */ protected function onPreIndexBuildQuery(string $action, Request $request, int $totalItems, PaginatorInterface $paginator) { } - + /** * method used by indexAction - * + * * @param string $action * @param Request $request * @param int $totalItems @@ -316,10 +316,10 @@ class CRUDController extends AbstractController * @param mixed $query */ protected function onPostIndexBuildQuery(string $action, Request $request, int $totalItems, PaginatorInterface $paginator, $query) { } - + /** * method used by indexAction - * + * * @param string $action * @param Request $request * @param int $totalItems @@ -327,14 +327,14 @@ class CRUDController extends AbstractController * @param mixed $entities */ protected function onPostIndexFetchQuery(string $action, Request $request, int $totalItems, PaginatorInterface $paginator, $entities) { } - + /** * Build the base query for listing all entities, normally use in a listing * page. - * + * * This base query does not contains any `WHERE` or `SELECT` clauses. Those * are added by other methods, like `queryEntities` and `countQueries`. - * + * * @param string $action * @param Request $request * @return QueryBuilder @@ -347,16 +347,16 @@ class CRUDController extends AbstractController ->from($this->getEntityClass(), 'e') ; } - + /** * Query the entity. - * + * * By default, get all entities. - * + * * The method `orderEntity` is called internally to order entities. - * + * * It returns, by default, a query builder. - * + * * @param string $action * @param Request $request * @param PaginatorInterface $paginator @@ -367,15 +367,15 @@ class CRUDController extends AbstractController $query = $this->buildQueryEntities($action, $request) ->setFirstResult($paginator->getCurrentPage()->getFirstItemNumber()) ->setMaxResults($paginator->getItemsPerPage()); - + // allow to order queries and return the new query return $this->orderQuery($action, $query, $request, $paginator); } - - + + /** * Add ordering fields in the query build by self::queryEntities - * + * * @param string $action * @param QueryBuilder|mixed $query by default, an instance of QueryBuilder * @param Request $request @@ -386,10 +386,10 @@ class CRUDController extends AbstractController { return $query; } - + /** * Get the result of the query - * + * * @param string $action * @param Request $request * @param int $totalItems @@ -397,14 +397,14 @@ class CRUDController extends AbstractController * @param mixed $query * @return mixed */ - protected function getQueryResult(string $action, Request $request, int $totalItems, PaginatorInterface $paginator, $query) + protected function getQueryResult(string $action, Request $request, int $totalItems, PaginatorInterface $paginator, $query) { return $query->getQuery()->getResult(); } - + /** * Count the number of entities - * + * * @param string $action * @param Request $request * @return int @@ -417,12 +417,12 @@ class CRUDController extends AbstractController ->getSingleScalarResult() ; } - + /** * BAse method for edit action - * + * * IMplemented by the method formEditAction, with action as 'edit' - * + * * @param Request $request * @param mixed $id * @return Response @@ -431,12 +431,12 @@ class CRUDController extends AbstractController { return $this->formEditAction('edit', $request, $id); } - + /** * Base method for new action - * + * * Implemented by the method formNewAction, with action as 'new' - * + * * @param Request $request * @return Response */ @@ -444,12 +444,12 @@ class CRUDController extends AbstractController { return $this->formCreateAction('new', $request); } - + /** * Base method for the view action. - * + * * Implemented by the method viewAction, with action as 'view' - * + * * @param Request $request * @param mixed $id * @return Response @@ -458,28 +458,28 @@ class CRUDController extends AbstractController { return $this->viewAction('view', $request, $id); } - + /** * The view action. - * + * * Some steps may be overriden during this process of rendering: - * + * * This method: - * + * * 1. fetch the entity, using `getEntity` * 2. launch `onPostFetchEntity`. If postfetch is an instance of Response, * this response is returned. * 2. throw an HttpNotFoundException if entity is null * 3. check ACL using `checkACL` ; - * 4. launch `onPostCheckACL`. If the result is an instance of Response, + * 4. launch `onPostCheckACL`. If the result is an instance of Response, * this response is returned ; * 5. generate default template parameters: - * + * * * `entity`: the fetched entity ; * * `crud_name`: the crud name - * 6. Launch rendering, the parameter is fetch using `getTemplateFor` + * 6. Launch rendering, the parameter is fetch using `getTemplateFor` * The parameters may be personnalized using `generateTemplateParameter`. - * + * * @param string $action * @param Request $request * @param mixed $id @@ -488,23 +488,23 @@ class CRUDController extends AbstractController protected function viewAction(string $action, Request $request, $id, $_format = 'html'): Response { $entity = $this->getEntity($action, $id, $request); - + $postFetch = $this->onPostFetchEntity($action, $request, $entity); - + if ($postFetch instanceof Response) { return $postFetch; } - + if (NULL === $entity) { throw $this->createNotFoundException(sprintf("The %s with id %s " . "is not found", $this->getCrudName(), $id)); } - + $response = $this->checkACL($action, $entity); if ($response instanceof Response) { return $response; } - + $response = $this->onPostCheckACL($action, $request, $entity); if ($response instanceof Response) { return $response; @@ -515,9 +515,9 @@ class CRUDController extends AbstractController 'entity' => $entity, 'crud_name' => $this->getCrudName() ]; - + return $this->render( - $this->getTemplateFor($action, $entity, $request), + $this->getTemplateFor($action, $entity, $request), $this->generateTemplateParameter($action, $entity, $request, $defaultTemplateParameters) ); } elseif ($_format === 'json') { @@ -537,45 +537,45 @@ class CRUDController extends AbstractController { return []; } - - + + /** * The edit action. - * + * * Some steps may be overriden during this process of rendering: - * + * * This method: - * + * * 1. fetch the entity, using `getEntity` * 2. launch `onPostFetchEntity`. If postfetch is an instance of Response, * this response is returned. * 2. throw an HttpNotFoundException if entity is null * 3. check ACL using `checkACL` ; - * 4. launch `onPostCheckACL`. If the result is an instance of Response, + * 4. launch `onPostCheckACL`. If the result is an instance of Response, * this response is returned ; * 5. generate a form using `createFormFor`, and handle request on this form; - * + * * If the form is valid, the entity is stored and flushed, and a redirection * is returned. - * + * * In this case, those hooks are available: - * + * * * onFormValid * * onPreFlush * * onPostFlush - * * onBeforeRedirectAfterSubmission. If this method return an instance of + * * onBeforeRedirectAfterSubmission. If this method return an instance of * Response, this response is returned. - * + * * 5. generate default template parameters: - * + * * * `entity`: the fetched entity ; * * `crud_name`: the crud name ; * * `form`: the formview instance. - * - * 6. Launch rendering, the parameter is fetch using `getTemplateFor` + * + * 6. Launch rendering, the parameter is fetch using `getTemplateFor` * The parameters may be personnalized using `generateTemplateParameter`. - * + * * @param string $action * @param Request $request * @param mixed $id @@ -587,98 +587,98 @@ class CRUDController extends AbstractController protected function formEditAction(string $action, Request $request, $id, string $formClass = null, array $formOptions = []): Response { $entity = $this->getEntity($action, $id, $request); - + if (NULL === $entity) { throw $this->createNotFoundException(sprintf("The %s with id %s " - . "is not found"), $this->getCrudName(), $id); + . "is not found", $this->getCrudName(), $id)); } - + $response = $this->checkACL($action, $entity); if ($response instanceof Response) { return $response; } - + $response = $this->onPostCheckACL($action, $request, $entity); if ($response instanceof Response) { return $response; } - + $form = $this->createFormFor($action, $entity, $formClass, $formOptions); - + $form->handleRequest($request); - + if ($form->isSubmitted() && $form->isValid()) { $this->onFormValid($entity, $form, $request); $em = $this->getDoctrine()->getManager(); - + $this->onPreFlush($action, $entity, $form, $request); $em->flush(); $this->onPostFlush($action, $entity, $form, $request); - + $this->addFlash('success', $this->generateFormSuccessMessage($action, $entity)); - + $result = $this->onBeforeRedirectAfterSubmission($action, $entity, $form, $request); - + if ($result instanceof Response) { return $result; } - + return $this->redirectToRoute('chill_crud_'.$this->getCrudName().'_index'); - + } elseif ($form->isSubmitted()) { $this->addFlash('error', $this->generateFormErrorMessage($action, $form)); } - + $defaultTemplateParameters = [ 'form' => $form->createView(), 'entity' => $entity, 'crud_name' => $this->getCrudName() ]; - + return $this->render( - $this->getTemplateFor($action, $entity, $request), + $this->getTemplateFor($action, $entity, $request), $this->generateTemplateParameter($action, $entity, $request, $defaultTemplateParameters) ); } - + /** * The new (or creation) action. - * + * * Some steps may be overriden during this process of rendering: - * + * * This method: - * + * * 1. Create or duplicate an entity: - * - * If the `duplicate` parameter is present, the entity is duplicated + * + * If the `duplicate` parameter is present, the entity is duplicated * using the `duplicate` method. - * + * * If not, the entity is created using the `create` method. * 3. check ACL using `checkACL` ; - * 4. launch `onPostCheckACL`. If the result is an instance of Response, + * 4. launch `onPostCheckACL`. If the result is an instance of Response, * this response is returned ; * 5. generate a form using `createFormFor`, and handle request on this form; - * + * * If the form is valid, the entity is stored and flushed, and a redirection * is returned. - * + * * In this case, those hooks are available: - * + * * * onFormValid * * onPreFlush * * onPostFlush - * * onBeforeRedirectAfterSubmission. If this method return an instance of + * * onBeforeRedirectAfterSubmission. If this method return an instance of * Response, this response is returned. - * + * * 5. generate default template parameters: - * + * * * `entity`: the fetched entity ; * * `crud_name`: the crud name ; * * `form`: the formview instance. - * - * 6. Launch rendering, the parameter is fetch using `getTemplateFor` + * + * 6. Launch rendering, the parameter is fetch using `getTemplateFor` * The parameters may be personnalized using `generateTemplateParameter`. - * + * * @param string $action * @param Request $request * @param type $formClass @@ -691,62 +691,62 @@ class CRUDController extends AbstractController } else { $entity = $this->createEntity($action, $request); } - + $response = $this->checkACL($action, $entity); if ($response instanceof Response) { return $response; } - + $response = $this->onPostCheckACL($action, $request, $entity); if ($response instanceof Response) { return $response; } - + $form = $this->createFormFor($action, $entity, $formClass); - + $form->handleRequest($request); - + if ($form->isSubmitted() && $form->isValid()) { $this->onFormValid($entity, $form, $request); $em = $this->getDoctrine()->getManager(); - + $this->onPrePersist($action, $entity, $form, $request); $em->persist($entity); $this->onPostPersist($action, $entity, $form, $request); - + $this->onPreFlush($action, $entity, $form, $request); $em->flush(); $this->onPostFlush($action, $entity, $form, $request); $this->getPaginatorFactory(); $this->addFlash('success', $this->generateFormSuccessMessage($action, $entity)); - + $result = $this->onBeforeRedirectAfterSubmission($action, $entity, $form, $request); - + if ($result instanceof Response) { return $result; } - + return $this->redirectToRoute('chill_crud_'.$this->getCrudName().'_view', ['id' => $entity->getId()]); - + } elseif ($form->isSubmitted()) { $this->addFlash('error', $this->generateFormErrorMessage($action, $form)); } - + $defaultTemplateParameters = [ 'form' => $form->createView(), 'entity' => $entity, 'crud_name' => $this->getCrudName() ]; - + return $this->render( - $this->getTemplateFor($action, $entity, $request), + $this->getTemplateFor($action, $entity, $request), $this->generateTemplateParameter($action, $entity, $request, $defaultTemplateParameters) ); } - + /** * get the instance of the entity with the given id - * + * * @param string $id * @return object */ @@ -756,10 +756,10 @@ class CRUDController extends AbstractController ->getRepository($this->getEntityClass()) ->find($id); } - + /** * Duplicate an entity - * + * * @param string $action * @param Request $request * @return mixed @@ -768,24 +768,24 @@ class CRUDController extends AbstractController { $id = $request->query->get('duplicate_id', 0); $originalEntity = $this->getEntity($action, $id, $request); - + $this->getDoctrine()->getManager() ->detach($originalEntity); - + return $originalEntity; } - + /** - * + * * @return string the complete fqdn of the class */ protected function getEntityClass(): string { return $this->crudConfig['class']; } - + /** - * + * * @return string the crud name */ protected function getCrudName(): string @@ -795,13 +795,13 @@ class CRUDController extends AbstractController /** * check the acl. Called by every action. - * - * By default, check the role given by `getRoleFor` for the value given in + * + * By default, check the role given by `getRoleFor` for the value given in * $entity. - * + * * Throw an \Symfony\Component\Security\Core\Exception\AccessDeniedHttpException * if not accessible. - * + * * @param string $action * @param mixed $entity * @throws \Symfony\Component\Security\Core\Exception\AccessDeniedHttpException @@ -810,10 +810,10 @@ class CRUDController extends AbstractController { $this->denyAccessUnlessGranted($this->getRoleFor($action), $entity); } - + /** * get the role given from the config. - * + * * @param string $action * @return string */ @@ -822,27 +822,27 @@ class CRUDController extends AbstractController if (\array_key_exists('role', $this->getActionConfig($action))) { return $this->getActionConfig($action)['role']; } - + return $this->buildDefaultRole($action); } /** * build a default role name, using the crud resolver. - * + * * This method should not be overriden. Override `getRoleFor` instead. - * + * * @param string $action * @return string */ protected function buildDefaultRole($action) { - return $this->getCrudResolver()->buildDefaultRole($this->getCrudName(), + return $this->getCrudResolver()->buildDefaultRole($this->getCrudName(), $action); } - + /** * get the default form class from config - * + * * @param string $action * @return string the FQDN of the form class */ @@ -852,27 +852,27 @@ class CRUDController extends AbstractController return $this->crudConfig[$action]['form_class'] ?? $this->getDefaultDeleteFormClass($action); } - + return $this->crudConfig[$action]['form_class'] ?? $this->crudConfig['form_class']; } - + protected function getDefaultDeleteFormClass($action) { return CRUDDeleteEntityForm::class; } - + /** * Create a form - * + * * use the method `getFormClassFor` - * + * * A hook is available: `customizeForm` allow you to customize the form * if needed. - * + * * It is preferable to override customizeForm instead of overriding * this method. - * + * * @param string $action * @param mixed $entity * @param string $formClass @@ -882,17 +882,17 @@ class CRUDController extends AbstractController protected function createFormFor(string $action, $entity, string $formClass = null, array $formOptions = []): FormInterface { $formClass = $formClass ?? $this->getFormClassFor($action); - + $form = $this->createForm($formClass, $entity, $formOptions); - + $this->customizeForm($action, $form); - + return $form; } - + /** * Customize the form created by createFormFor. - * + * * @param string $action * @param FormInterface $form */ @@ -900,12 +900,12 @@ class CRUDController extends AbstractController { } - + /** * Generate a message which explains an error about the form. - * + * * Used in form actions - * + * * @param string $action * @param FormInterface $form * @return string @@ -913,13 +913,13 @@ class CRUDController extends AbstractController protected function generateFormErrorMessage(string $action, FormInterface $form): string { $msg = 'This form contains errors'; - + return $this->getTranslator()->trans($msg); } - + /** * Generate a success message when a form could be flushed successfully - * + * * @param string $action * @param mixed $entity * @return string @@ -939,13 +939,13 @@ class CRUDController extends AbstractController default: $msg = "crud.default.success"; } - + return $this->getTranslator()->trans($msg); } - + /** * Customize template parameters. - * + * * @param string $action * @param mixed $entity * @param Request $request @@ -953,9 +953,9 @@ class CRUDController extends AbstractController * @return array */ protected function generateTemplateParameter( - string $action, - $entity, - Request $request, + string $action, + $entity, + Request $request, array $defaultTemplateParameters = [] ) { return $defaultTemplateParameters; @@ -963,7 +963,7 @@ class CRUDController extends AbstractController /** * Create an entity. - * + * * @param string $action * @param Request $request * @return object @@ -971,17 +971,17 @@ class CRUDController extends AbstractController protected function createEntity(string $action, Request $request): object { $type = $this->getEntityClass(); - + return new $type; } - + /** * Get the template for the current crud. - * - * This template may be defined in configuration. If any template are - * defined, return the default template for the actions new, edit, index, + * + * This template may be defined in configuration. If any template are + * defined, return the default template for the actions new, edit, index, * and view. - * + * * @param string $action * @param mixed $entity the entity for the current request, or an array of entities * @param Request $request @@ -993,11 +993,11 @@ class CRUDController extends AbstractController if ($this->hasCustomTemplate($action, $entity, $request)) { return $this->getActionConfig($action)['template']; } - + switch ($action) { case 'new': return '@ChillMain/CRUD/new.html.twig'; - case 'edit': + case 'edit': return '@ChillMain/CRUD/edit.html.twig'; case 'index': return '@ChillMain/CRUD/index.html.twig'; @@ -1011,7 +1011,7 @@ class CRUDController extends AbstractController . "action"); } } - + /** * @param $action * @param $entity @@ -1022,7 +1022,7 @@ class CRUDController extends AbstractController { return !empty($this->getActionConfig($action)['template']); } - + /** * @param string $action * @param $entity @@ -1032,7 +1032,7 @@ class CRUDController extends AbstractController protected function onPreFlush(string $action, $entity, FormInterface $form, Request $request) { } - + /** * @param string $action * @param $entity @@ -1042,7 +1042,7 @@ class CRUDController extends AbstractController protected function onPostFlush(string $action, $entity, FormInterface $form, Request $request) { } - + /** * @param string $action * @param $entity @@ -1052,7 +1052,7 @@ class CRUDController extends AbstractController protected function onPrePersist(string $action, $entity, FormInterface $form, Request $request) { } - + /** * @param string $action * @param $entity @@ -1062,7 +1062,7 @@ class CRUDController extends AbstractController protected function onPostPersist(string $action, $entity, FormInterface $form, Request $request) { } - + /** * @param $action * @param Request $request @@ -1073,7 +1073,7 @@ class CRUDController extends AbstractController { return null; } - + /** * @param $action * @param Request $request @@ -1084,7 +1084,7 @@ class CRUDController extends AbstractController { return null; } - + /** * @param object $entity * @param FormInterface $form @@ -1093,16 +1093,16 @@ class CRUDController extends AbstractController protected function onFormValid(object $entity, FormInterface $form, Request $request) { } - + /** * Return a redirect response depending on the value of submit button. - * + * * The handled values are : - * + * * * save-and-close: return to index of current crud ; * * save-and-new: return to new page of current crud ; * * save-and-view: return to view page of current crud ; - * + * * @param string $action * @param mixed $entity * @param FormInterface $form @@ -1124,7 +1124,7 @@ class CRUDController extends AbstractController ]); } } - + /** * Include services * @@ -1135,7 +1135,7 @@ class CRUDController extends AbstractController { return $this->crudConfig['actions'][$action]; } - + /** * @return PaginatorFactory */ @@ -1143,7 +1143,7 @@ class CRUDController extends AbstractController { return $this->container->get('chill_main.paginator_factory'); } - + /** * @return TranslatorInterface */ @@ -1151,7 +1151,7 @@ class CRUDController extends AbstractController { return $this->container->get('translator'); } - + /** * @return AuthorizationHelper */ @@ -1159,19 +1159,19 @@ class CRUDController extends AbstractController { return $this->container->get(AuthorizationHelper::class); } - + /** * @param Role $role * @param Scope|null $scope * @return \Chill\MainBundle\Entity\Center[] */ - protected function getReachableCenters(Role $role, Scope $scope = null) + protected function getReachableCenters(Role $role, Scope $scope = null) { return $this->getAuthorizationHelper() ->getReachableCenters($this->getUser(), $role, $scope) ; } - + /** * @return EventDispatcherInterface */ @@ -1179,7 +1179,7 @@ class CRUDController extends AbstractController { return $this->get(EventDispatcherInterface::class); } - + /** * @return Resolver */ @@ -1187,7 +1187,7 @@ class CRUDController extends AbstractController { return $this->get(Resolver::class); } - + /** * @return array */ diff --git a/src/Bundle/ChillMainBundle/Resources/public/modules/bootstrap/bootstrap.scss b/src/Bundle/ChillMainBundle/Resources/public/modules/bootstrap/bootstrap.scss index 4d3b86ed3..8a77ac48f 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/modules/bootstrap/bootstrap.scss +++ b/src/Bundle/ChillMainBundle/Resources/public/modules/bootstrap/bootstrap.scss @@ -28,7 +28,7 @@ // @import "bootstrap/scss/card"; // @import "bootstrap/scss/breadcrumb"; // @import "bootstrap/scss/pagination"; -// @import "bootstrap/scss/badge"; +@import "bootstrap/scss/badge"; // @import "bootstrap/scss/jumbotron"; // @import "bootstrap/scss/alert"; // @import "bootstrap/scss/progress"; @@ -41,7 +41,7 @@ // @import "bootstrap/scss/popover"; // @import "bootstrap/scss/carousel"; // @import "bootstrap/scss/spinners"; -// @import "bootstrap/scss/utilities"; +@import "bootstrap/scss/utilities"; // @import "bootstrap/scss/print"; @import "custom"; diff --git a/src/Bundle/ChillMainBundle/Resources/public/modules/scratch/custom/modules/_buttons.scss b/src/Bundle/ChillMainBundle/Resources/public/modules/scratch/custom/modules/_buttons.scss index e94aa494e..0b7af263b 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/modules/scratch/custom/modules/_buttons.scss +++ b/src/Bundle/ChillMainBundle/Resources/public/modules/scratch/custom/modules/_buttons.scss @@ -5,7 +5,7 @@ @include button($green, $white); } - &.bt-reset, &.bt-delete { + &.bt-reset, &.bt-delete, &.bt-remove { @include button($red, $white); } @@ -24,6 +24,7 @@ &.bt-save::before, &.bt-new::before, &.bt-delete::before, + &.bt-remove::before, &.bt-update::before, &.bt-edit::before, &.bt-cancel::before, @@ -56,7 +57,12 @@ // add a trash content: ""; } - + + &.bt-remove::before { + // add a times + content: ""; + } + &.bt-edit::before, &.bt-update::before { // add a pencil content: ""; @@ -94,6 +100,7 @@ &.bt-save::before, &.bt-new::before, &.bt-delete::before, + &.bt-remove::before, &.bt-update::before, &.bt-edit::before, &.bt-cancel::before, @@ -123,6 +130,7 @@ &.bt-save::before, &.bt-new::before, &.bt-delete::before, + &.bt-remove::before, &.bt-update::before, &.bt-edit::before, &.bt-cancel::before, diff --git a/src/Bundle/ChillMainBundle/Resources/public/scss/chillmain.scss b/src/Bundle/ChillMainBundle/Resources/public/scss/chillmain.scss index 4f9ecf46d..a27dcdc42 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/scss/chillmain.scss +++ b/src/Bundle/ChillMainBundle/Resources/public/scss/chillmain.scss @@ -39,6 +39,8 @@ div.subheader { height: 130px; } +//// VUEJS //// + div.vue-component { padding: 1.5em; margin: 2em 0; @@ -55,3 +57,97 @@ div.vue-component { } dd { margin-left: 1em; } } + +//// MODAL //// +.modal-mask { + position: fixed; + z-index: 9998; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.75); + display: table; + transition: opacity 0.3s ease; +} +.modal-header .close { // bootstrap classes, override sc-button 0 radius + border-top-right-radius: 0.3rem; +} + +/* +* The following styles are auto-applied to elements with +* transition="modal" when their visibility is toggled +* by Vue.js. +* +* You can easily play with the modal transition by editing +* these styles. +*/ +.modal-enter { + opacity: 0; +} +.modal-leave-active { + opacity: 0; +} +.modal-enter .modal-container, +.modal-leave-active .modal-container { + -webkit-transform: scale(1.1); + transform: scale(1.1); +} + +//// AddPersons modal +div.modal-body.up { + margin: auto 4em; + div.search { + position: relative; + input { + padding: 1.2em 1.5em 1.2em 2.5em; + margin: 1em 0; + } + i { + position: absolute; + top: 50%; + left: 0.5em; + padding: 0.65em 0; + opacity: 0.5; + } + + } +} +div.results { + div.count { + margin: -0.5em 0 0.7em; + display: flex; + justify-content: space-between; + } + div.list-item { + line-height: 26pt; + padding: 0.3em 0.8em; + display: flex; + flex-direction: row; + &.checked { + background-color: #ececec; + border-bottom: 1px dotted #8b8b8b; + } + div.container { + & > input { + margin-right: 0.8em; + } + } + div.right_actions { + margin: 0 0 0 auto; + & > * { + margin-left: 0.5em; + } + a.sc-button { + border: 1px solid lightgrey; + font-size: 70%; + padding: 4px; + } + } + } +} + +.discret { + color: grey; + margin-right: 1em; +} diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/Modal.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/Modal.vue new file mode 100644 index 000000000..cbd2d0738 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/Modal.vue @@ -0,0 +1,45 @@ + + + diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/_js/i18n.js b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_js/i18n.js new file mode 100644 index 000000000..4f5c64e30 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_js/i18n.js @@ -0,0 +1,55 @@ +import { createI18n } from 'vue-i18n' + +const datetimeFormats = { + fr: { + short: { + year: "numeric", + month: "numeric", + day: "numeric" + }, + long: { + year: "numeric", + month: "short", + day: "numeric", + weekday: "short", + hour: "numeric", + minute: "numeric", + hour12: false + } + } +}; +const messages = { + fr: { + action: { + actions: "Actions", + show: "Voir", + edit: "Modifier", + create: "Créer", + remove: "Enlever", + delete: "Supprimer", + save: "Enregistrer", + add: "Ajouter", + show_modal: "Ouvrir une modale", + ok: "OK", + cancel: "Annuler", + close: "Fermer", + next: "Suivant", + previous: "Précédent", + back: "Retour", + check_all: "cocher tout", + reset: "réinitialiser" + }, + } +}; + +const _createI18n = (appMessages) => { + Object.assign(messages.fr, appMessages.fr); + return createI18n({ + locale: 'fr', + fallbackLocale: 'fr', + datetimeFormats, + messages, + }) +}; + +export { _createI18n } diff --git a/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseController.php b/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseController.php index 9bc732d87..05a1934e6 100644 --- a/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseController.php +++ b/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseController.php @@ -121,7 +121,7 @@ class AccompanyingCourseController extends Controller * @Route( * "/{_locale}/person/api/1.0/accompanying-course/{accompanying_period_id}/participation.{_format}", * name="chill_person_accompanying_course_api_add_participation", - * methods={"POST"}, + * methods={"POST","DELETE"}, * format="json", * requirements={ * "_format": "json", @@ -129,7 +129,7 @@ class AccompanyingCourseController extends Controller * ) * @ParamConverter("accompanyingCourse", options={"id": "accompanying_period_id"}) */ - public function addParticipationAPI(Request $request, AccompanyingPeriod $accompanyingCourse, $_format): Response + public function participationAPI(Request $request, AccompanyingPeriod $accompanyingCourse, $_format): Response { switch ($_format) { case 'json': @@ -146,7 +146,9 @@ class AccompanyingCourseController extends Controller } // TODO add acl - $accompanyingCourse->addPerson($person); + $participation = ($request->getMethod() === 'POST') ? + $accompanyingCourse->addPerson($person) : $accompanyingCourse->removePerson($person); + $errors = $this->validator->validate($accompanyingCourse); if ($errors->count() > 0) { @@ -156,6 +158,6 @@ class AccompanyingCourseController extends Controller $this->getDoctrine()->getManager()->flush(); - return new JsonResponse(); + return $this->json($participation); } } diff --git a/src/Bundle/ChillPersonBundle/Controller/PersonController.php b/src/Bundle/ChillPersonBundle/Controller/PersonController.php index bfb32654e..02320aed3 100644 --- a/src/Bundle/ChillPersonBundle/Controller/PersonController.php +++ b/src/Bundle/ChillPersonBundle/Controller/PersonController.php @@ -38,6 +38,7 @@ use Symfony\Component\Translation\TranslatorInterface; use Chill\MainBundle\Search\SearchProvider; use Chill\PersonBundle\Repository\PersonRepository; use Chill\PersonBundle\Config\ConfigPersonAltNamesHelper; +use Chill\PersonBundle\Repository\PersonNotDuplicateRepository; use Symfony\Component\Validator\Validator\ValidatorInterface; use Doctrine\ORM\EntityManagerInterface; @@ -290,7 +291,7 @@ final class PersonController extends AbstractController return $errors; } - public function reviewAction(Request $request) + public function reviewAction(Request $request, PersonNotDuplicateRepository $personNotDuplicateRepository) { if ($request->getMethod() !== 'POST') { $r = new Response("You must send something to review the creation of a new Person"); @@ -299,7 +300,6 @@ final class PersonController extends AbstractController } $form = $this->createForm( - //CreationPersonType::NAME, CreationPersonType::class, new Person(), array( @@ -326,7 +326,7 @@ final class PersonController extends AbstractController } $form = $this->createForm( - CreationPersonType::NAME, + CreationPersonType::class, $person, array( 'action' => $this->generateUrl('chill_person_review'), @@ -342,8 +342,7 @@ final class PersonController extends AbstractController $this->em->persist($person); - $alternatePersons = $this->similarPersonMatcher - ->matchPerson($person); + $alternatePersons = $this->similarPersonMatcher->matchPerson($person, $personNotDuplicateRepository); if (count($alternatePersons) === 0) { return $this->forward('ChillPersonBundle:Person:create'); diff --git a/src/Bundle/ChillPersonBundle/Controller/PersonDuplicateController.php b/src/Bundle/ChillPersonBundle/Controller/PersonDuplicateController.php index aa2e2768a..d30ddebae 100644 --- a/src/Bundle/ChillPersonBundle/Controller/PersonDuplicateController.php +++ b/src/Bundle/ChillPersonBundle/Controller/PersonDuplicateController.php @@ -19,6 +19,7 @@ use Symfony\Component\Translation\TranslatorInterface; use Chill\ActivityBundle\Entity\Activity; use Chill\DocStoreBundle\Entity\PersonDocument; use Chill\EventBundle\Entity\Participation; +use Chill\PersonBundle\Repository\PersonNotDuplicateRepository; use Chill\TaskBundle\Entity\SingleTask; class PersonDuplicateController extends Controller @@ -62,7 +63,7 @@ class PersonDuplicateController extends Controller $this->eventDispatcher = $eventDispatcher; } - public function viewAction($person_id) + public function viewAction($person_id, PersonNotDuplicateRepository $personNotDuplicateRepository) { $person = $this->_getPerson($person_id); if ($person === null) { @@ -74,10 +75,9 @@ class PersonDuplicateController extends Controller "You are not allowed to see this person."); $duplicatePersons = $this->similarPersonMatcher-> - matchPerson($person, 0.5, SimilarPersonMatcher::SIMILAR_SEARCH_ORDER_BY_ALPHABETICAL); + matchPerson($person, $personNotDuplicateRepository, 0.5, SimilarPersonMatcher::SIMILAR_SEARCH_ORDER_BY_ALPHABETICAL); - $notDuplicatePersons = $this->getDoctrine()->getRepository(PersonNotDuplicate::class) - ->findNotDuplicatePerson($person); + $notDuplicatePersons = $personNotDuplicateRepository->findNotDuplicatePerson($person); return $this->render('ChillPersonBundle:PersonDuplicate:view.html.twig', [ 'person' => $person, @@ -97,7 +97,7 @@ class PersonDuplicateController extends Controller $person1->counters = $this->_getCounters($person1_id); $person2->counters = $this->_getCounters($person2_id); - + if ($person1 === null) { throw $this->createNotFoundException("Person with id $person1_id not" . " found on this server"); @@ -264,17 +264,17 @@ class PersonDuplicateController extends Controller return [$person1, $person2]; } - + private function _getCounters($id): ?array { $em = $this->getDoctrine()->getManager(); - + $nb_activity = $em->getRepository(Activity::class)->findBy(['person'=>$id]); $nb_document = $em->getRepository(PersonDocument::class)->findBy(['person'=>$id]); $nb_event = $em->getRepository(Participation::class)->findBy(['person'=>$id]); $nb_task = $em->getRepository(SingleTask::class)->countByParameters(['person'=>$id]); $person = $em->getRepository(Person::class)->findOneBy(['id'=>$id]); - + return [ 'nb_activity' => count($nb_activity), 'nb_document' => count($nb_document), diff --git a/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadAccompanyingPeriod.php b/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadAccompanyingPeriod.php new file mode 100644 index 000000000..a30943bcb --- /dev/null +++ b/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadAccompanyingPeriod.php @@ -0,0 +1,88 @@ +, + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +namespace Chill\PersonBundle\DataFixtures\ORM; + +use Doctrine\Common\DataFixtures\AbstractFixture; +use Doctrine\Common\DataFixtures\OrderedFixtureInterface; +use Doctrine\Persistence\ObjectManager; +use Symfony\Component\DependencyInjection\ContainerAwareInterface; + +use Chill\PersonBundle\Entity\AccompanyingPeriod; +use Chill\PersonBundle\Entity\Person; + +/** + * Description of LoadAccompanyingPeriod + * + * @author Champs-Libres Coop + */ +class LoadAccompanyingPeriod extends AbstractFixture implements OrderedFixtureInterface, ContainerAwareInterface +{ + use \Symfony\Component\DependencyInjection\ContainerAwareTrait; + + + public const ACCOMPANYING_PERIOD = 'parcours 1'; + + public function getOrder() + { + return 10004; + } + + public static $references = array(); + + public function load(ObjectManager $manager) + { + + $centerA = $this->getReference('centerA'); + $centerAId = $centerA->getId(); + + $personIds = $this->container->get('doctrine.orm.entity_manager') + ->createQueryBuilder() + ->select('p.id') + ->from('ChillPersonBundle:Person', 'p') + ->where('p.center = :centerAId') + ->orderBy('p.id', 'ASC') + ->setParameter('centerAId', $centerAId) + ->getQuery() + ->getScalarResult(); + + $openingDate = new \DateTime('2020-04-01'); + + $person1 = $manager->getRepository(Person::class)->find($personIds[0]); + $person2 = $manager->getRepository(Person::class)->find($personIds[1]); + + $socialScope = $this->getReference('scope_social'); + + $a = new AccompanyingPeriod($openingDate); + $a->addPerson($person1); + $a->addPerson($person2); + $a->addScope($socialScope); + $a->setStep(AccompanyingPeriod::STEP_CONFIRMED); + + $manager->persist($a); + + $this->addReference(self::ACCOMPANYING_PERIOD, $a); + echo "Adding one AccompanyingPeriod\n"; + + $manager->flush(); + } +} diff --git a/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadAccompanyingPeriodOrigin.php b/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadAccompanyingPeriodOrigin.php new file mode 100644 index 000000000..cbec9c439 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadAccompanyingPeriodOrigin.php @@ -0,0 +1,62 @@ +, + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +namespace Chill\PersonBundle\DataFixtures\ORM; + +use Doctrine\Common\DataFixtures\AbstractFixture; +use Doctrine\Common\DataFixtures\OrderedFixtureInterface; +use Doctrine\Persistence\ObjectManager; + +use Chill\PersonBundle\Entity\AccompanyingPeriod\Origin; + +/** + * Description of LoadAccompanyingPeriodOrigin + * + * @author Champs-Libres Coop + */ +class LoadAccompanyingPeriodOrigin extends AbstractFixture implements OrderedFixtureInterface +{ + + public const ACCOMPANYING_PERIOD_ORIGIN = 'accompanying_period_origin'; + + public function getOrder() + { + return 10005; + } + + private $phoneCall = ['en' => 'phone call', 'fr' => 'appel téléphonique']; + + public static $references = array(); + + public function load(ObjectManager $manager) + { + $o = new Origin(); + $o->setLabel(json_encode($this->phoneCall)); + + $manager->persist($o); + + $this->addReference(self::ACCOMPANYING_PERIOD_ORIGIN, $o); + echo "Adding one AccompanyingPeriod Origin\n"; + + $manager->flush(); + } +} diff --git a/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadSocialActions.php b/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadSocialActions.php new file mode 100644 index 000000000..ec47c6e0b --- /dev/null +++ b/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadSocialActions.php @@ -0,0 +1,82 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +namespace Chill\PersonBundle\DataFixtures\ORM; + +use Doctrine\Common\DataFixtures\AbstractFixture; +use Doctrine\Common\DataFixtures\OrderedFixtureInterface; +use Doctrine\Persistence\ObjectManager; + +use Chill\PersonBundle\Entity\SocialWork\SocialAction; + +/** + * Create social actions + * + */ +class LoadSocialActions extends AbstractFixture implements OrderedFixtureInterface +{ + public function getOrder() + { + return 10020; + } + + public static $socialActions = [ + 'social_action_info_conseil' => [ + 'title' => [ + 'fr' => 'Informer, conseiller' + ], + 'issue' => 'social_issue_prev_prot' + ], + 'social_action_instruire' => [ + 'title' => [ + 'fr' => 'Instruire l\'imprime unique pour des impayés' + ], + 'issue' => 'social_issue_prev_prot' + ], + 'social_action_MASP' => [ + 'title' => [ + 'fr' => 'MASP' + ], + 'issue' => 'social_issue_diff_fin' + ], + 'social_action_protection_enfant' => [ + 'title' => [ + 'fr' => 'Protection Enfant confié dans le cadre judiciaire' + ], + 'issue' => 'social_issue_enfant_protection' + ], + ]; + + public function load(ObjectManager $manager) + { + foreach (static::$socialActions as $ref => $new) { + $socialAction = new SocialAction(); + $socialAction->setTitle($new['title']); + $socialAction->setIssue($this->getReference($new['issue'])); + $socialAction->setDefaultNotificationDelay(new \DateInterval('P5D')); + + $manager->persist($socialAction); + $this->addReference($ref, $socialAction); + print("Adding SocialAction '".$new['title']['fr']."'\n"); + } + + $manager->flush(); + } +} diff --git a/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadSocialGoals.php b/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadSocialGoals.php new file mode 100644 index 000000000..a6c2b0ef0 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadSocialGoals.php @@ -0,0 +1,70 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +namespace Chill\PersonBundle\DataFixtures\ORM; + +use Doctrine\Common\DataFixtures\AbstractFixture; +use Doctrine\Common\DataFixtures\OrderedFixtureInterface; +use Doctrine\Persistence\ObjectManager; + +use Chill\PersonBundle\Entity\SocialWork\Goal; + + +/** + * Create social goals + * + */ +class LoadSocialGoals extends AbstractFixture implements OrderedFixtureInterface +{ + public function getOrder() + { + return 10030; + } + + public static $socialGoals = [ + 'social_goal_instuire_dossier' => [ + 'title' => [ + 'fr' => 'Instruire le dossier de surendettement' + ], + 'action' => 'social_action_MASP' + ], + 'social_goal_proteger' => [ + 'title' => [ + 'fr' => 'Protéger via une assistance educative placement' + ], + 'action' => 'social_action_protection_enfant' + ], + ]; + + public function load(ObjectManager $manager) + { + foreach (static::$socialGoals as $ref => $new) { + $socialGoal = new Goal(); + $socialGoal->setTitle($new['title']); + $socialGoal->addSocialAction($this->getReference($new['action'])); + + $manager->persist($socialGoal); + $this->addReference($ref, $socialGoal); + print("Adding SocialGoal '".$new['title']['fr']."'\n"); + } + + $manager->flush(); + } +} diff --git a/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadSocialIssues.php b/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadSocialIssues.php new file mode 100644 index 000000000..eb9c303ed --- /dev/null +++ b/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadSocialIssues.php @@ -0,0 +1,90 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +namespace Chill\PersonBundle\DataFixtures\ORM; + +use Doctrine\Common\DataFixtures\AbstractFixture; +use Doctrine\Common\DataFixtures\OrderedFixtureInterface; +use Doctrine\Persistence\ObjectManager; + +use Chill\PersonBundle\Entity\SocialWork\SocialIssue; + +/** + * Create social issues + * + */ +class LoadSocialIssues extends AbstractFixture implements OrderedFixtureInterface +{ + public function getOrder() + { + return 10010; + } + + public static $socialIssues = [ + 'social_issue_diff_fin_or_admin' => [ + 'title' => [ + 'fr' => 'ADULTE - DIFFICULTES FINANCIERES ET/OU ADMINISTRATIVES' + ] + ], + 'social_issue_prev_prot' => [ + 'title' => [ + 'fr' => 'ADULTE PREVENTION/PROTECTION' + ], + 'parent' => 'social_issue_diff_fin_or_admin' + ], + 'social_issue_diff_fin' => [ + 'title' => [ + 'fr' => 'Difficulté financière' + ], + 'parent' => 'social_issue_diff_fin_or_admin' + ], + 'social_issue_enfant_famille' => [ + 'title' => [ + 'fr' => 'Enfant / famille' + ] + ], + 'social_issue_enfant_protection' => [ + 'title' => [ + 'fr' => 'enfant - protection' + ], + 'parent' => 'social_issue_enfant_famille' + ], + ]; + + public function load(ObjectManager $manager) + { + foreach (static::$socialIssues as $ref => $new) { + $socialIssue = new SocialIssue(); + $socialIssue->setTitle($new['title']); + + if ( array_key_exists('parent', $new)) { + $parentRef = $new['parent']; + $parent = $this->getReference($parentRef); + $socialIssue->setParent($parent); + } + + $manager->persist($socialIssue); + $this->addReference($ref, $socialIssue); + print("Adding SocialIssue '".$new['title']['fr']."'\n"); + } + + $manager->flush(); + } +} diff --git a/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadSocialResults.php b/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadSocialResults.php new file mode 100644 index 000000000..573313573 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadSocialResults.php @@ -0,0 +1,94 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +namespace Chill\PersonBundle\DataFixtures\ORM; + +use Doctrine\Common\DataFixtures\AbstractFixture; +use Doctrine\Common\DataFixtures\OrderedFixtureInterface; +use Doctrine\Persistence\ObjectManager; + +use Chill\PersonBundle\Entity\SocialWork\Result; + + +/** + * Create social results + * + */ +class LoadSocialResults extends AbstractFixture implements OrderedFixtureInterface +{ + public function getOrder() + { + return 10040; + } + + public static $socialResults = [ + 'social_result_FSL_acces' => [ + 'title' => [ + 'fr' => 'FSL - accès cautionnement' + ], + 'action' => 'social_action_instruire' + ], + 'social_result_FSL_maintien' => [ + 'title' => [ + 'fr' => 'FSL maintien - impayés de loyer' + ], + 'action' => 'social_action_MASP' + ], + 'social_result_soutien_parental' => [ + 'title' => [ + 'fr' => 'Soutien parental' + ], + // 'action' => 'social_action_protection_enfant', (via le goal) + 'goal' => 'social_goal_proteger' + ], + 'social_result_accompagnement_mineur' => [ + 'title' => [ + 'fr' => 'Accompagnement du mineur' + ], + // 'action' => 'social_action_protection_enfant', (via le goal) + 'goal' => 'social_goal_proteger', + ], + ]; + + public function load(ObjectManager $manager) + { + foreach (static::$socialResults as $ref => $new) { + $socialResult = new Result(); + $socialResult->setTitle($new['title']); + + if ( array_key_exists('action', $new)) { + $action = $this->getReference($new['action']); + $socialResult->addSocialAction($action); + } + + if ( array_key_exists('goal', $new)) { + $goal = $this->getReference($new['goal']); + $socialResult->addGoal($goal); + } + + + $manager->persist($socialResult); + $this->addReference($ref, $socialResult); + print("Adding SocialResult '".$new['title']['fr']."'\n"); + } + + $manager->flush(); + } +} diff --git a/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php b/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php index 84b8bb397..98e2d30e9 100644 --- a/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php +++ b/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php @@ -73,9 +73,11 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac $loader->load('services/command.yaml'); $loader->load('services/actions.yaml'); $loader->load('services/form.yaml'); - $loader->load('services/repository.yaml'); $loader->load('services/templating.yaml'); $loader->load('services/alt_names.yaml'); + // We can get rid of this file when the service 'chill.person.repository.person' is no more used. + // We should use the PersonRepository service instead of a custom service name. + $loader->load('services/repository.yaml'); $loader->load('services/serializer.yaml'); $loader->load('services/security.yaml'); @@ -319,23 +321,23 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac 'controller' => \Chill\PersonBundle\Controller\AccompanyingCourseApiController::class, 'actions' => [ '_entity' => [ - 'roles' => [ + 'roles' => [ Request::METHOD_GET => \Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter::SEE ] ], 'participation' => [ 'methods' => [ - Request::METHOD_POST => true, + Request::METHOD_POST => true, Request::METHOD_DELETE => true, Request::METHOD_GET => false, Request::METHOD_HEAD => false, ], - 'roles' => [ + 'roles' => [ Request::METHOD_POST => \Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter::SEE, Request::METHOD_DELETE=> \Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter::SEE ] ] - + ] ], [ @@ -346,13 +348,13 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac 'base_role' => 'ROLE_USER', 'actions' => [ '_index' => [ - 'methods' => [ + 'methods' => [ Request::METHOD_GET => true, Request::METHOD_HEAD => true ], ], '_entity' => [ - 'methods' => [ + 'methods' => [ Request::METHOD_GET => true, Request::METHOD_HEAD => true ] diff --git a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod.php b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod.php index 636743dde..2f59ac805 100644 --- a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod.php +++ b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod.php @@ -37,7 +37,7 @@ use Chill\MainBundle\Entity\User; /** * AccompanyingPeriod Class * - * @ORM\Entity(repositoryClass="Chill\PersonBundle\Repository\AccompanyingPeriodRepository") + * @ORM\Entity * @ORM\Table(name="chill_person_accompanying_period") */ class AccompanyingPeriod @@ -344,12 +344,13 @@ class AccompanyingPeriod */ public function getParticipationsContainsPerson(Person $person): Collection { - return $this->getParticipations($person)->filter( - function(AccompanyingPeriodParticipation $participation) use ($person) { - if ($person === $participation->getPerson()) { - return $participation; + return $this + ->getParticipations() + ->filter( + static function(AccompanyingPeriodParticipation $participation) use ($person): bool { + return $person === $participation->getPerson(); } - }); + ); } /** @@ -359,12 +360,13 @@ class AccompanyingPeriod */ public function getOpenParticipationContainsPerson(Person $person): ?AccompanyingPeriodParticipation { - $collection = $this->getParticipationsContainsPerson($person)->filter( - function(AccompanyingPeriodParticipation $participation) use ($person) { - if (NULL === $participation->getEndDate()) { - return $participation; + $collection = $this + ->getParticipationsContainsPerson($person) + ->filter( + static function(AccompanyingPeriodParticipation $participation): bool { + return null === $participation->getEndDate(); } - }); + ); return $collection->count() > 0 ? $collection->first() : NULL; } @@ -429,15 +431,16 @@ class AccompanyingPeriod return false; } - $participation = $this->participationsContainsPerson($person); - if (!null === $participation) + $participation = $this->getOpenParticipationContainsPerson($person); + + if (null === $participation) { - $person = $participation->getPerson(); - $periods = $person->getAccompanyingPeriodsOrdered(); - return end($periods) === $this; + return false; } - return false; + $periods = $participation->getPerson()->getAccompanyingPeriodsOrdered(); + + return end($periods) === $this; } /** @@ -646,13 +649,17 @@ class AccompanyingPeriod /** * Get a list of all persons which are participating to this course + * + * @psalm-return Collection */ public function getPersons(): Collection { - return $this->participations->map( - function(AccompanyingPeriodParticipation $participation) { - return $participation->getPerson(); - } - ); + return $this + ->participations + ->map( + static function(AccompanyingPeriodParticipation $participation): Person { + return $participation->getPerson(); + } + ); } } diff --git a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWork.php b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWork.php index 6983f6c0e..25fbcc342 100644 --- a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWork.php +++ b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWork.php @@ -4,7 +4,6 @@ namespace Chill\PersonBundle\Entity\AccompanyingPeriod; use Chill\PersonBundle\Entity\SocialWork\Result; use Chill\PersonBundle\Entity\SocialWork\SocialAction; -use Chill\PersonBundle\Repository\AccompanyingPeriod\AccompanyingPeriodWorkRepository; use Chill\MainBundle\Entity\User; use Chill\PersonBundle\Entity\AccompanyingPeriod; use Chill\ThirdPartyBundle\Entity\ThirdParty; @@ -13,7 +12,7 @@ use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; /** - * @ORM\Entity(repositoryClass=AccompanyingPeriodWorkRepository::class) + * @ORM\Entity * @ORM\Table(name="chill_person_accompanying_period_work") */ class AccompanyingPeriodWork diff --git a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWorkGoal.php b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWorkGoal.php index ec371d6c2..955f9e3a1 100644 --- a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWorkGoal.php +++ b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWorkGoal.php @@ -4,13 +4,12 @@ namespace Chill\PersonBundle\Entity\AccompanyingPeriod; use Chill\PersonBundle\Entity\SocialWork\Goal; use Chill\PersonBundle\Entity\SocialWork\Result; -use Chill\PersonBundle\Repository\AccompanyingPeriod\AccompanyingPeriodWorkGoalRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; /** - * @ORM\Entity(repositoryClass=AccompanyingPeriodWorkGoalRepository::class) + * @ORM\Entity * @ORM\Table(name="chill_person_accompanying_period_work_goal") */ class AccompanyingPeriodWorkGoal diff --git a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/ClosingMotive.php b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/ClosingMotive.php index 4e334b2aa..29b2a44aa 100644 --- a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/ClosingMotive.php +++ b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/ClosingMotive.php @@ -29,8 +29,7 @@ use Doctrine\Common\Collections\ArrayCollection; /** * ClosingMotive give an explanation why we closed the Accompanying period * - * @ORM\Entity( - * repositoryClass="Chill\PersonBundle\Repository\AccompanyingPeriod\ClosingMotiveRepository") + * @ORM\Entity * @ORM\Table(name="chill_person_accompanying_period_closingmotive") */ class ClosingMotive diff --git a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/Comment.php b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/Comment.php index e8ecf3248..60b3466cd 100644 --- a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/Comment.php +++ b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/Comment.php @@ -22,13 +22,12 @@ namespace Chill\PersonBundle\Entity\AccompanyingPeriod; -use Chill\PersonBundle\Repository\AccompanyingPeriod\CommentRepository; use Chill\MainBundle\Entity\User; use Chill\PersonBundle\Entity\AccompanyingPeriod; use Doctrine\ORM\Mapping as ORM; /** - * @ORM\Entity(repositoryClass=CommentRepository::class) + * @ORM\Entity * @ORM\Table(name="chill_person_accompanying_period_comment") */ class Comment diff --git a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/Origin.php b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/Origin.php index 55857de4c..a852e166e 100644 --- a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/Origin.php +++ b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/Origin.php @@ -22,11 +22,10 @@ namespace Chill\PersonBundle\Entity\AccompanyingPeriod; -use Chill\PersonBundle\Repository\AccompanyingPeriod\OriginRepository; use Doctrine\ORM\Mapping as ORM; /** - * @ORM\Entity(repositoryClass=OriginRepository::class) + * @ORM\Entity * @ORM\Table(name="chill_person_accompanying_period_origin") */ class Origin diff --git a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/Resource.php b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/Resource.php index ec13fcad6..0cfefba87 100644 --- a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/Resource.php +++ b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/Resource.php @@ -22,7 +22,6 @@ namespace Chill\PersonBundle\Entity\AccompanyingPeriod; -use Chill\PersonBundle\Repository\AccompanyingPeriod\ResourceRepository; use Chill\PersonBundle\Entity\AccompanyingPeriod; use Chill\PersonBundle\Entity\AccompanyingPeriod\Comment; use Chill\PersonBundle\Entity\Person; @@ -30,7 +29,7 @@ use Chill\ThirdPartyBundle\Entity\ThirdParty; use Doctrine\ORM\Mapping as ORM; /** - * @ORM\Entity(repositoryClass=ResourceRepository::class) + * @ORM\Entity * @ORM\Table(name="chill_person_accompanying_period_resource") */ class Resource diff --git a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriodParticipation.php b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriodParticipation.php index c22e84e42..d57d00386 100644 --- a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriodParticipation.php +++ b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriodParticipation.php @@ -22,7 +22,6 @@ namespace Chill\PersonBundle\Entity; -use Chill\PersonBundle\Repository\AccompanyingPeriodParticipationRepository; use Chill\PersonBundle\Entity\AccompanyingPeriod; use Chill\PersonBundle\Entity\Person; use Doctrine\ORM\Mapping as ORM; @@ -31,7 +30,7 @@ use Doctrine\ORM\Mapping as ORM; * AccompanyingPeriodParticipation Class * * @package Chill\PersonBundle\Entity - * @ORM\Entity(repositoryClass=AccompanyingPeriodParticipationRepository::class) + * @ORM\Entity * @ORM\Table(name="chill_person_accompanying_period_participation") */ class AccompanyingPeriodParticipation diff --git a/src/Bundle/ChillPersonBundle/Entity/Household/Household.php b/src/Bundle/ChillPersonBundle/Entity/Household/Household.php index a12741dee..4e8787a96 100644 --- a/src/Bundle/ChillPersonBundle/Entity/Household/Household.php +++ b/src/Bundle/ChillPersonBundle/Entity/Household/Household.php @@ -2,13 +2,12 @@ namespace Chill\PersonBundle\Entity\Household; -use Chill\PersonBundle\Repository\Household\HouseholdRepository; use Doctrine\ORM\Mapping as ORM; use Doctrine\Common\Collections\Collection; use Chill\MainBundle\Entity\Address; /** - * @ORM\Entity(repositoryClass=HouseholdRepository::class) + * @ORM\Entity */ class Household { diff --git a/src/Bundle/ChillPersonBundle/Entity/Household/HouseholdMembers.php b/src/Bundle/ChillPersonBundle/Entity/Household/HouseholdMembers.php index 80864ecd0..5d16649a8 100644 --- a/src/Bundle/ChillPersonBundle/Entity/Household/HouseholdMembers.php +++ b/src/Bundle/ChillPersonBundle/Entity/Household/HouseholdMembers.php @@ -3,12 +3,11 @@ namespace Chill\PersonBundle\Entity\Household; use Doctrine\ORM\Mapping as ORM; -use Chill\PersonBundle\Repository\Household\HouseholdMembersRepository; use Chill\PersonBundle\Entity\Person; use Chill\PersonBundle\Entity\Household\Household; /** - * @ORM\Entity(repositoryClass=HouseholdMembersRepository::class) + * @ORM\Entity */ class HouseholdMembers { diff --git a/src/Bundle/ChillPersonBundle/Entity/MaritalStatus.php b/src/Bundle/ChillPersonBundle/Entity/MaritalStatus.php index f1addbb2c..43ae1b09f 100644 --- a/src/Bundle/ChillPersonBundle/Entity/MaritalStatus.php +++ b/src/Bundle/ChillPersonBundle/Entity/MaritalStatus.php @@ -25,7 +25,7 @@ use Doctrine\ORM\Mapping as ORM; /** * MaritalStatus * - * @ORM\Entity() + * @ORM\Entity * @ORM\Table(name="chill_person_marital_status") * @ORM\HasLifecycleCallbacks() */ diff --git a/src/Bundle/ChillPersonBundle/Entity/Person.php b/src/Bundle/ChillPersonBundle/Entity/Person.php index 3624d4c17..e88998205 100644 --- a/src/Bundle/ChillPersonBundle/Entity/Person.php +++ b/src/Bundle/ChillPersonBundle/Entity/Person.php @@ -38,7 +38,7 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface; /** * Person Class * - * @ORM\Entity(repositoryClass="Chill\PersonBundle\Repository\PersonRepository") + * @ORM\Entity * @ORM\Table(name="chill_person_person", * indexes={@ORM\Index( * name="person_names", diff --git a/src/Bundle/ChillPersonBundle/Entity/PersonAltName.php b/src/Bundle/ChillPersonBundle/Entity/PersonAltName.php index c5295487e..95603d4ef 100644 --- a/src/Bundle/ChillPersonBundle/Entity/PersonAltName.php +++ b/src/Bundle/ChillPersonBundle/Entity/PersonAltName.php @@ -8,7 +8,7 @@ use Doctrine\ORM\Mapping as ORM; * PersonAltName * * @ORM\Table(name="chill_person_alt_name") - * @ORM\Entity(repositoryClass="Chill\PersonBundle\Repository\PersonAltNameRepository") + * @ORM\Entity */ class PersonAltName { diff --git a/src/Bundle/ChillPersonBundle/Entity/PersonNotDuplicate.php b/src/Bundle/ChillPersonBundle/Entity/PersonNotDuplicate.php index ce2a1c26f..9f116c501 100644 --- a/src/Bundle/ChillPersonBundle/Entity/PersonNotDuplicate.php +++ b/src/Bundle/ChillPersonBundle/Entity/PersonNotDuplicate.php @@ -9,7 +9,7 @@ use Chill\MainBundle\Entity\User; * PersonNotDuplicate * * @ORM\Table(name="chill_person_not_duplicate") - * @ORM\Entity(repositoryClass="Chill\PersonBundle\Repository\PersonNotDuplicateRepository") + * @ORM\Entity */ class PersonNotDuplicate { diff --git a/src/Bundle/ChillPersonBundle/Entity/PersonPhone.php b/src/Bundle/ChillPersonBundle/Entity/PersonPhone.php index 4a2ffaf28..222495e17 100644 --- a/src/Bundle/ChillPersonBundle/Entity/PersonPhone.php +++ b/src/Bundle/ChillPersonBundle/Entity/PersonPhone.php @@ -8,7 +8,7 @@ use Doctrine\ORM\Mapping as ORM; /** * Person Phones * - * @ORM\Entity() + * @ORM\Entity * @ORM\Table(name="chill_person_phone") */ class PersonPhone diff --git a/src/Bundle/ChillPersonBundle/Entity/SocialWork/Evaluation.php b/src/Bundle/ChillPersonBundle/Entity/SocialWork/Evaluation.php index 9e6dcbaa6..5a877e264 100644 --- a/src/Bundle/ChillPersonBundle/Entity/SocialWork/Evaluation.php +++ b/src/Bundle/ChillPersonBundle/Entity/SocialWork/Evaluation.php @@ -2,11 +2,10 @@ namespace Chill\PersonBundle\Entity\SocialWork; -use Chill\PersonBundle\Repository\SocialWork\EvaluationRepository; use Doctrine\ORM\Mapping as ORM; /** - * @ORM\Entity(repositoryClass=EvaluationRepository::class) + * @ORM\Entity * @ORM\Table(name="chill_person_social_work_evaluation") */ class Evaluation diff --git a/src/Bundle/ChillPersonBundle/Entity/SocialWork/Goal.php b/src/Bundle/ChillPersonBundle/Entity/SocialWork/Goal.php index c92e9a736..996fcf3eb 100644 --- a/src/Bundle/ChillPersonBundle/Entity/SocialWork/Goal.php +++ b/src/Bundle/ChillPersonBundle/Entity/SocialWork/Goal.php @@ -2,13 +2,12 @@ namespace Chill\PersonBundle\Entity\SocialWork; -use Chill\PersonBundle\Repository\SocialWork\GoalRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; /** - * @ORM\Entity(repositoryClass=GoalRepository::class) + * @ORM\Entity * @ORM\Table(name="chill_person_social_work_goal") */ class Goal diff --git a/src/Bundle/ChillPersonBundle/Entity/SocialWork/Result.php b/src/Bundle/ChillPersonBundle/Entity/SocialWork/Result.php index be38b1757..37e5c2b18 100644 --- a/src/Bundle/ChillPersonBundle/Entity/SocialWork/Result.php +++ b/src/Bundle/ChillPersonBundle/Entity/SocialWork/Result.php @@ -4,13 +4,12 @@ namespace Chill\PersonBundle\Entity\SocialWork; use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork; use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkGoal; -use Chill\PersonBundle\Repository\SocialWork\ResultRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; /** - * @ORM\Entity(repositoryClass=ResultRepository::class) + * @ORM\Entity * @ORM\Table(name="chill_person_social_work_result") */ class Result diff --git a/src/Bundle/ChillPersonBundle/Entity/SocialWork/SocialAction.php b/src/Bundle/ChillPersonBundle/Entity/SocialWork/SocialAction.php index 64413d987..ff7291b45 100644 --- a/src/Bundle/ChillPersonBundle/Entity/SocialWork/SocialAction.php +++ b/src/Bundle/ChillPersonBundle/Entity/SocialWork/SocialAction.php @@ -2,13 +2,12 @@ namespace Chill\PersonBundle\Entity\SocialWork; -use Chill\PersonBundle\Repository\SocialWork\SocialActionRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; /** - * @ORM\Entity(repositoryClass=SocialActionRepository::class) + * @ORM\Entity * @ORM\Table(name="chill_person_social_action") */ class SocialAction diff --git a/src/Bundle/ChillPersonBundle/Entity/SocialWork/SocialIssue.php b/src/Bundle/ChillPersonBundle/Entity/SocialWork/SocialIssue.php index cfec01751..2b6df9be2 100644 --- a/src/Bundle/ChillPersonBundle/Entity/SocialWork/SocialIssue.php +++ b/src/Bundle/ChillPersonBundle/Entity/SocialWork/SocialIssue.php @@ -1,14 +1,12 @@ repository = $entityManager->getRepository(AccompanyingPeriodWorkGoal::class); } } diff --git a/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/AccompanyingPeriodWorkRepository.php b/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/AccompanyingPeriodWorkRepository.php index f879e97d7..5d455b617 100644 --- a/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/AccompanyingPeriodWorkRepository.php +++ b/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/AccompanyingPeriodWorkRepository.php @@ -3,8 +3,8 @@ namespace Chill\PersonBundle\Repository\AccompanyingPeriod; use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork; -use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; -use Doctrine\Persistence\ManagerRegistry; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\EntityRepository; /** * @method AccompanyingPeriodWork|null find($id, $lockMode = null, $lockVersion = null) @@ -12,10 +12,12 @@ use Doctrine\Persistence\ManagerRegistry; * @method AccompanyingPeriodWork[] findAll() * @method AccompanyingPeriodWork[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ -class AccompanyingPeriodWorkRepository extends ServiceEntityRepository +final class AccompanyingPeriodWorkRepository { - public function __construct(ManagerRegistry $registry) + private EntityRepository $repository; + + public function __construct(EntityManagerInterface $entityManager) { - parent::__construct($registry, AccompanyingPeriodWork::class); + $this->repository = $entityManager->getRepository(AccompanyingPeriodWork::class); } } diff --git a/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/ClosingMotiveRepository.php b/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/ClosingMotiveRepository.php index ef1130b62..c99ca8efc 100644 --- a/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/ClosingMotiveRepository.php +++ b/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/ClosingMotiveRepository.php @@ -22,8 +22,9 @@ namespace Chill\PersonBundle\Repository\AccompanyingPeriod; +use Chill\PersonBundle\Entity\AccompanyingPeriod\ClosingMotive; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityRepository; -use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\Query\ResultSetMappingBuilder; /** @@ -32,17 +33,24 @@ use Doctrine\ORM\Query\ResultSetMappingBuilder; * * @package Chill\PersonBundle\Repository */ -class ClosingMotiveRepository extends EntityRepository +final class ClosingMotiveRepository { + private EntityRepository $repository; + + public function __construct(EntityManagerInterface $entityManager) + { + $this->repository = $entityManager->getRepository(ClosingMotive::class); + } + /** * @param bool $onlyLeaf * @return mixed */ public function getActiveClosingMotive(bool $onlyLeaf = true) { - $rsm = new ResultSetMappingBuilder($this->getEntityManager()); - $rsm->addRootEntityFromClassMetadata($this->getClassName(), 'cm'); - + $rsm = new ResultSetMappingBuilder($this->repository->getEntityManager()); + $rsm->addRootEntityFromClassMetadata($this->repository->getClassName(), 'cm'); + $sql = "SELECT ".(string) $rsm." FROM chill_person_accompanying_period_closingmotive AS cm WHERE @@ -55,10 +63,11 @@ class ClosingMotiveRepository extends EntityRepository } $sql .= " ORDER BY cm.ordering ASC"; - - return $this->_em + + return $this + ->repository + ->getEntityManager() ->createNativeQuery($sql, $rsm) - ->getResult() - ; + ->getResult(); } } diff --git a/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/CommentRepository.php b/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/CommentRepository.php index b41e77591..aca7a9c68 100644 --- a/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/CommentRepository.php +++ b/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/CommentRepository.php @@ -23,8 +23,8 @@ namespace Chill\PersonBundle\Repository\AccompanyingPeriod; use Chill\PersonBundle\Entity\AccompanyingPeriod\Comment; -use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; -use Doctrine\Persistence\ManagerRegistry; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\EntityRepository; /** * @method Comment|null find($id, $lockMode = null, $lockVersion = null) @@ -32,11 +32,12 @@ use Doctrine\Persistence\ManagerRegistry; * @method Comment[] findAll() * @method Comment[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ -class CommentRepository extends ServiceEntityRepository +final class CommentRepository { - public function __construct(ManagerRegistry $registry) + private EntityRepository $repository; + + public function __construct(EntityManagerInterface $entityManager) { - parent::__construct($registry, Comment::class); + $this->repository = $entityManager->getRepository(Comment::class); } - } diff --git a/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/OriginRepository.php b/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/OriginRepository.php index 6a5b28901..c2851b851 100644 --- a/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/OriginRepository.php +++ b/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/OriginRepository.php @@ -23,8 +23,8 @@ namespace Chill\PersonBundle\Repository\AccompanyingPeriod; use Chill\PersonBundle\Entity\AccompanyingPeriod\Origin; -use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; -use Doctrine\Persistence\ManagerRegistry; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\EntityRepository; /** * @method Origin|null find($id, $lockMode = null, $lockVersion = null) @@ -32,11 +32,12 @@ use Doctrine\Persistence\ManagerRegistry; * @method Origin[] findAll() * @method Origin[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ -class OriginRepository extends ServiceEntityRepository +final class OriginRepository { - public function __construct(ManagerRegistry $registry) - { - parent::__construct($registry, Origin::class); - } + private EntityRepository $repository; + public function __construct(EntityManagerInterface $entityManager) + { + $this->repository = $entityManager->getRepository(Origin::class); + } } diff --git a/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/ResourceRepository.php b/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/ResourceRepository.php index 46eaaaaa0..4f625b59c 100644 --- a/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/ResourceRepository.php +++ b/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/ResourceRepository.php @@ -23,8 +23,8 @@ namespace Chill\PersonBundle\Repository\AccompanyingPeriod; use Chill\PersonBundle\Entity\AccompanyingPeriod\Resource; -use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; -use Doctrine\Persistence\ManagerRegistry; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\EntityRepository; /** * @method Resource|null find($id, $lockMode = null, $lockVersion = null) @@ -32,11 +32,12 @@ use Doctrine\Persistence\ManagerRegistry; * @method Resource[] findAll() * @method Resource[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ -class ResourceRepository extends ServiceEntityRepository +final class ResourceRepository { - public function __construct(ManagerRegistry $registry) - { - parent::__construct($registry, Resource::class); - } + private EntityRepository $repository; + public function __construct(EntityManagerInterface $entityManager) + { + $this->repository = $entityManager->getRepository(Resource::class); + } } diff --git a/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriodParticipationRepository.php b/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriodParticipationRepository.php index fbe957ecf..0f157ed42 100644 --- a/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriodParticipationRepository.php +++ b/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriodParticipationRepository.php @@ -23,8 +23,8 @@ namespace Chill\PersonBundle\Repository; use Chill\PersonBundle\Entity\AccompanyingPeriodParticipation; -use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; -use Doctrine\Persistence\ManagerRegistry; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\EntityRepository; /** * @method AccompanyingPeriodParticipation|null find($id, $lockMode = null, $lockVersion = null) @@ -32,11 +32,12 @@ use Doctrine\Persistence\ManagerRegistry; * @method AccompanyingPeriodParticipation[] findAll() * @method AccompanyingPeriodParticipation[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ -class AccompanyingPeriodParticipationRepository extends ServiceEntityRepository +final class AccompanyingPeriodParticipationRepository { - public function __construct(ManagerRegistry $registry) + private EntityRepository $repository; + + public function __construct(EntityManagerInterface $entityManager) { - parent::__construct($registry, AccompanyingPeriodParticipation::class); + $this->repository = $entityManager->getRepository(AccompanyingPeriodParticipation::class); } - } diff --git a/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriodRepository.php b/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriodRepository.php index fffb55ede..07aa0a55f 100644 --- a/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriodRepository.php +++ b/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriodRepository.php @@ -23,9 +23,8 @@ namespace Chill\PersonBundle\Repository; use Chill\PersonBundle\Entity\AccompanyingPeriod; -use Chill\PersonBundle\Entity\Person; -use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; -use Doctrine\Persistence\ManagerRegistry; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\EntityRepository; /** * @method AccompanyingPeriod|null find($id, $lockMode = null, $lockVersion = null) @@ -33,10 +32,12 @@ use Doctrine\Persistence\ManagerRegistry; * @method AccompanyingPeriod[] findAll() * @method AccompanyingPeriod[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ -class AccompanyingPeriodRepository extends ServiceEntityRepository +final class AccompanyingPeriodRepository { - public function __construct(ManagerRegistry $registry) + private EntityRepository $repository; + + public function __construct(EntityManagerInterface $entityManager) { - parent::__construct($registry, AccompanyingPeriod::class); + $this->repository = $entityManager->getRepository(AccompanyingPeriod::class); } } diff --git a/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdMembersRepository.php b/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdMembersRepository.php index feea6d44d..b11d3d93a 100644 --- a/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdMembersRepository.php +++ b/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdMembersRepository.php @@ -3,8 +3,8 @@ namespace Chill\PersonBundle\Repository\Household; use Chill\PersonBundle\Entity\Household\HouseholdMembers; -use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; -use Doctrine\Persistence\ManagerRegistry; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\EntityRepository; /** * @method HouseholdMembers|null find($id, $lockMode = null, $lockVersion = null) @@ -12,11 +12,13 @@ use Doctrine\Persistence\ManagerRegistry; * @method HouseholdMembers[] findAll() * @method HouseholdMembers[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ -class HouseholdMembersRepository extends ServiceEntityRepository +final class HouseholdMembersRepository { - public function __construct(ManagerRegistry $registry) + private EntityRepository $repository; + + public function __construct(EntityManagerInterface $entityManager) { - parent::__construct($registry, HouseholdMembers::class); + $this->repository = $entityManager->getRepository(HouseholdMembers::class); } // /** diff --git a/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdRepository.php b/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdRepository.php index 38522806c..78a68f56d 100644 --- a/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdRepository.php +++ b/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdRepository.php @@ -3,8 +3,8 @@ namespace Chill\PersonBundle\Repository\Household; use Chill\PersonBundle\Entity\Household\Household; -use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; -use Doctrine\Persistence\ManagerRegistry; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\EntityRepository; /** * @method Household|null find($id, $lockMode = null, $lockVersion = null) @@ -12,11 +12,13 @@ use Doctrine\Persistence\ManagerRegistry; * @method Household[] findAll() * @method Household[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ -class HouseholdRepository extends ServiceEntityRepository +final class HouseholdRepository { - public function __construct(ManagerRegistry $registry) + private EntityRepository $repository; + + public function __construct(EntityManagerInterface $entityManager) { - parent::__construct($registry, Household::class); + $this->repository = $entityManager->getRepository(Household::class); } // /** diff --git a/src/Bundle/ChillPersonBundle/Repository/PersonAltNameRepository.php b/src/Bundle/ChillPersonBundle/Repository/PersonAltNameRepository.php index 315cee94f..c5dea689a 100644 --- a/src/Bundle/ChillPersonBundle/Repository/PersonAltNameRepository.php +++ b/src/Bundle/ChillPersonBundle/Repository/PersonAltNameRepository.php @@ -2,12 +2,22 @@ namespace Chill\PersonBundle\Repository; +use Chill\PersonBundle\Entity\PersonAltName; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\EntityRepository; + /** * PersonAltNameRepository * * This class was generated by the Doctrine ORM. Add your own custom * repository methods below. */ -class PersonAltNameRepository extends \Doctrine\ORM\EntityRepository +final class PersonAltNameRepository { + private EntityRepository $repository; + + public function __construct(EntityManagerInterface $entityManager) + { + $this->repository = $entityManager->getRepository(PersonAltName::class); + } } diff --git a/src/Bundle/ChillPersonBundle/Repository/PersonNotDuplicateRepository.php b/src/Bundle/ChillPersonBundle/Repository/PersonNotDuplicateRepository.php index 8ab711b15..989baaeec 100644 --- a/src/Bundle/ChillPersonBundle/Repository/PersonNotDuplicateRepository.php +++ b/src/Bundle/ChillPersonBundle/Repository/PersonNotDuplicateRepository.php @@ -4,6 +4,7 @@ namespace Chill\PersonBundle\Repository; use Chill\PersonBundle\Entity\Person; use Chill\PersonBundle\Entity\PersonNotDuplicate; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityRepository; /** @@ -11,8 +12,15 @@ use Doctrine\ORM\EntityRepository; * * @package Chill\PersonBundle\Repository */ -class PersonNotDuplicateRepository extends EntityRepository +final class PersonNotDuplicateRepository { + private EntityRepository $repository; + + public function __construct(EntityManagerInterface $entityManager) + { + $this->repository = $entityManager->getRepository(PersonNotDuplicate::class); + } + /** * @param \Chill\PersonBundle\Entity\Person $person * @@ -20,7 +28,7 @@ class PersonNotDuplicateRepository extends EntityRepository */ public function findNotDuplicatePerson(Person $person) { - $qb = $this->createQueryBuilder('pnd'); + $qb = $this->repository->createQueryBuilder('pnd'); $qb->select('pnd') ->where('pnd.person1 = :person OR pnd.person2 = :person') ; diff --git a/src/Bundle/ChillPersonBundle/Repository/PersonRepository.php b/src/Bundle/ChillPersonBundle/Repository/PersonRepository.php index ccc56b639..12733a668 100644 --- a/src/Bundle/ChillPersonBundle/Repository/PersonRepository.php +++ b/src/Bundle/ChillPersonBundle/Repository/PersonRepository.php @@ -18,16 +18,25 @@ namespace Chill\PersonBundle\Repository; +use Chill\PersonBundle\Entity\Person; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityRepository; use Doctrine\ORM\QueryBuilder; -/** - * Class PersonRepository - * - * @package Chill\PersonBundle\Repository - */ -class PersonRepository extends EntityRepository +final class PersonRepository { + private EntityRepository $repository; + + public function __construct(EntityManagerInterface $entityManager) + { + $this->repository = $entityManager->getRepository(Person::class); + } + + public function find($id, $lockMode = null, $lockVersion = null) + { + return $this->repository->find($id, $lockMode, $lockVersion); + } + /** * @param string $phonenumber * @param $centers @@ -44,7 +53,7 @@ class PersonRepository extends EntityRepository $maxResults, array $only = ['mobile', 'phone'] ) { - $qb = $this->createQueryBuilder('p'); + $qb = $this->repository->createQueryBuilder('p'); $qb->select('p'); $this->addByCenters($qb, $centers); @@ -71,7 +80,7 @@ class PersonRepository extends EntityRepository array $only = ['mobile', 'phone'] ): int { - $qb = $this->createQueryBuilder('p'); + $qb = $this->repository->createQueryBuilder('p'); $qb->select('COUNT(p)'); $this->addByCenters($qb, $centers); diff --git a/src/Bundle/ChillPersonBundle/Repository/SocialWork/EvaluationRepository.php b/src/Bundle/ChillPersonBundle/Repository/SocialWork/EvaluationRepository.php index b030e1617..c9ab3c931 100644 --- a/src/Bundle/ChillPersonBundle/Repository/SocialWork/EvaluationRepository.php +++ b/src/Bundle/ChillPersonBundle/Repository/SocialWork/EvaluationRepository.php @@ -3,8 +3,8 @@ namespace Chill\PersonBundle\Repository\SocialWork; use Chill\PersonBundle\Entity\SocialWork\Evaluation; -use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; -use Doctrine\Persistence\ManagerRegistry; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\EntityRepository; /** * @method Evaluation|null find($id, $lockMode = null, $lockVersion = null) @@ -12,10 +12,12 @@ use Doctrine\Persistence\ManagerRegistry; * @method Evaluation[] findAll() * @method Evaluation[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ -class EvaluationRepository extends ServiceEntityRepository +final class EvaluationRepository { - public function __construct(ManagerRegistry $registry) + private EntityRepository $repository; + + public function __construct(EntityManagerInterface $entityManager) { - parent::__construct($registry, Evaluation::class); + $this->repository = $entityManager->getRepository(Evaluation::class); } } diff --git a/src/Bundle/ChillPersonBundle/Repository/SocialWork/GoalRepository.php b/src/Bundle/ChillPersonBundle/Repository/SocialWork/GoalRepository.php index 031c31764..30576b4ed 100644 --- a/src/Bundle/ChillPersonBundle/Repository/SocialWork/GoalRepository.php +++ b/src/Bundle/ChillPersonBundle/Repository/SocialWork/GoalRepository.php @@ -3,8 +3,8 @@ namespace Chill\PersonBundle\Repository\SocialWork; use Chill\PersonBundle\Entity\SocialWork\Goal; -use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; -use Doctrine\Persistence\ManagerRegistry; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\EntityRepository; /** * @method Goal|null find($id, $lockMode = null, $lockVersion = null) @@ -12,10 +12,12 @@ use Doctrine\Persistence\ManagerRegistry; * @method Goal[] findAll() * @method Goal[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ -class GoalRepository extends ServiceEntityRepository +final class GoalRepository { - public function __construct(ManagerRegistry $registry) + private EntityRepository $repository; + + public function __construct(EntityManagerInterface $entityManager) { - parent::__construct($registry, Goal::class); + $this->repository = $entityManager->getRepository(Goal::class); } } diff --git a/src/Bundle/ChillPersonBundle/Repository/SocialWork/ResultRepository.php b/src/Bundle/ChillPersonBundle/Repository/SocialWork/ResultRepository.php index 511823d61..004a2f82c 100644 --- a/src/Bundle/ChillPersonBundle/Repository/SocialWork/ResultRepository.php +++ b/src/Bundle/ChillPersonBundle/Repository/SocialWork/ResultRepository.php @@ -3,8 +3,8 @@ namespace Chill\PersonBundle\Repository\SocialWork; use Chill\PersonBundle\Entity\SocialWork\Result; -use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; -use Doctrine\Persistence\ManagerRegistry; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\EntityRepository; /** * @method Result|null find($id, $lockMode = null, $lockVersion = null) @@ -12,10 +12,12 @@ use Doctrine\Persistence\ManagerRegistry; * @method Result[] findAll() * @method Result[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ -class ResultRepository extends ServiceEntityRepository +final class ResultRepository { - public function __construct(ManagerRegistry $registry) + private EntityRepository $repository; + + public function __construct(EntityManagerInterface $entityManager) { - parent::__construct($registry, Result::class); + $this->repository = $entityManager->getRepository(Result::class); } } diff --git a/src/Bundle/ChillPersonBundle/Repository/SocialWork/SocialActionRepository.php b/src/Bundle/ChillPersonBundle/Repository/SocialWork/SocialActionRepository.php index f0f2e81b4..cfa9adbd7 100644 --- a/src/Bundle/ChillPersonBundle/Repository/SocialWork/SocialActionRepository.php +++ b/src/Bundle/ChillPersonBundle/Repository/SocialWork/SocialActionRepository.php @@ -3,8 +3,8 @@ namespace Chill\PersonBundle\Repository\SocialWork; use Chill\PersonBundle\Entity\SocialWork\SocialAction; -use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; -use Doctrine\Persistence\ManagerRegistry; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\EntityRepository; /** * @method SocialAction|null find($id, $lockMode = null, $lockVersion = null) @@ -12,10 +12,12 @@ use Doctrine\Persistence\ManagerRegistry; * @method SocialAction[] findAll() * @method SocialAction[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ -class SocialActionRepository extends ServiceEntityRepository +final class SocialActionRepository { - public function __construct(ManagerRegistry $registry) + private EntityRepository $repository; + + public function __construct(EntityManagerInterface $entityManager) { - parent::__construct($registry, SocialAction::class); + $this->repository = $entityManager->getRepository(SocialAction::class); } } diff --git a/src/Bundle/ChillPersonBundle/Repository/SocialWork/SocialIssueRepository.php b/src/Bundle/ChillPersonBundle/Repository/SocialWork/SocialIssueRepository.php index e64b057f4..2f6eb3ba1 100644 --- a/src/Bundle/ChillPersonBundle/Repository/SocialWork/SocialIssueRepository.php +++ b/src/Bundle/ChillPersonBundle/Repository/SocialWork/SocialIssueRepository.php @@ -4,7 +4,8 @@ namespace Chill\PersonBundle\Repository\SocialWork; use Chill\PersonBundle\Entity\SocialWork\SocialIssue; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; -use Doctrine\Persistence\ManagerRegistry; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\EntityRepository; /** * @method SocialIssue|null find($id, $lockMode = null, $lockVersion = null) @@ -12,10 +13,12 @@ use Doctrine\Persistence\ManagerRegistry; * @method SocialIssue[] findAll() * @method SocialIssue[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ -class SocialIssueRepository extends ServiceEntityRepository +final class SocialIssueRepository { - public function __construct(ManagerRegistry $registry) + private EntityRepository $repository; + + public function __construct(EntityManagerInterface $entityManager) { - parent::__construct($registry, SocialIssue::class); + $this->repository = $entityManager->getRepository(SocialIssue::class); } } diff --git a/src/Bundle/ChillPersonBundle/Resources/public/js/AccompanyingCourse/App.vue b/src/Bundle/ChillPersonBundle/Resources/public/js/AccompanyingCourse/App.vue deleted file mode 100644 index 971eca1c7..000000000 --- a/src/Bundle/ChillPersonBundle/Resources/public/js/AccompanyingCourse/App.vue +++ /dev/null @@ -1,45 +0,0 @@ - - - - - diff --git a/src/Bundle/ChillPersonBundle/Resources/public/js/AccompanyingCourse/components/AccompanyingCourse.vue b/src/Bundle/ChillPersonBundle/Resources/public/js/AccompanyingCourse/components/AccompanyingCourse.vue deleted file mode 100644 index d08798c00..000000000 --- a/src/Bundle/ChillPersonBundle/Resources/public/js/AccompanyingCourse/components/AccompanyingCourse.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - diff --git a/src/Bundle/ChillPersonBundle/Resources/public/js/AccompanyingCourse/components/PersonItem.vue b/src/Bundle/ChillPersonBundle/Resources/public/js/AccompanyingCourse/components/PersonItem.vue deleted file mode 100644 index f75f0779b..000000000 --- a/src/Bundle/ChillPersonBundle/Resources/public/js/AccompanyingCourse/components/PersonItem.vue +++ /dev/null @@ -1,25 +0,0 @@ - - - diff --git a/src/Bundle/ChillPersonBundle/Resources/public/js/AccompanyingCourse/components/PersonsAssociated.vue b/src/Bundle/ChillPersonBundle/Resources/public/js/AccompanyingCourse/components/PersonsAssociated.vue deleted file mode 100644 index f4ccf6964..000000000 --- a/src/Bundle/ChillPersonBundle/Resources/public/js/AccompanyingCourse/components/PersonsAssociated.vue +++ /dev/null @@ -1,69 +0,0 @@ - - - diff --git a/src/Bundle/ChillPersonBundle/Resources/public/js/AccompanyingCourse/components/Requestor.vue b/src/Bundle/ChillPersonBundle/Resources/public/js/AccompanyingCourse/components/Requestor.vue deleted file mode 100644 index 75a95e241..000000000 --- a/src/Bundle/ChillPersonBundle/Resources/public/js/AccompanyingCourse/components/Requestor.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/src/Bundle/ChillPersonBundle/Resources/public/js/AccompanyingCourse/index.js b/src/Bundle/ChillPersonBundle/Resources/public/js/AccompanyingCourse/index.js deleted file mode 100644 index 4335113f7..000000000 --- a/src/Bundle/ChillPersonBundle/Resources/public/js/AccompanyingCourse/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import App from './App.vue'; -import { createApp } from 'vue'; - -const app = createApp({ - template: `` -}) -.component('app', App) -.mount('#accompanying-course'); diff --git a/src/Bundle/ChillPersonBundle/Resources/public/js/AccompanyingCourse/store/.keep b/src/Bundle/ChillPersonBundle/Resources/public/js/AccompanyingCourse/store/.keep deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/App.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/App.vue new file mode 100644 index 000000000..480b882dc --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/App.vue @@ -0,0 +1,25 @@ + + + diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/api.js b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/api.js new file mode 100644 index 000000000..0f71f7170 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/api.js @@ -0,0 +1,49 @@ +const + locale = 'fr', + format = 'json' + , accompanying_period_id = window.accompanyingCourseId //tmp +; + +/* +* Endpoint chill_person_accompanying_course_api_show +* method GET, get AccompanyingCourse Object +* +* @accompanying_period_id___ integer +* @TODO var is not used but necessary in method signature +*/ +let getAccompanyingCourse = (accompanying_period_id___) => { //tmp + const url = `/${locale}/person/api/1.0/accompanying-course/${accompanying_period_id}/show.${format}`; + return fetch(url) + .then(response => { + if (response.ok) { return response.json(); } + throw Error('Error with request resource response'); + }); +}; + +/* +* Endpoint chill_person_accompanying_course_api_add_participation, +* method POST/DELETE, add/close a participation to the accompanyingCourse +* +* @accompanying_period_id integer - id of accompanyingCourse +* @person_id integer - id of person +* @method string - POST or DELETE +*/ +let postParticipation = (accompanying_period_id, person_id, method) => { + const url = `/${locale}/person/api/1.0/accompanying-course/${accompanying_period_id}/participation.${format}` + return fetch(url, { + method: method, + headers: { + 'Content-Type': 'application/json;charset=utf-8' + }, + body: JSON.stringify({id: person_id}) + }) + .then(response => { + if (response.ok) { return response.json(); } + throw Error('Error with request resource response'); + }); +}; + +export { + getAccompanyingCourse, + postParticipation +}; diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/AccompanyingCourse.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/AccompanyingCourse.vue new file mode 100644 index 000000000..be3014ddb --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/AccompanyingCourse.vue @@ -0,0 +1,28 @@ + + + diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/PersonItem.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/PersonItem.vue new file mode 100644 index 000000000..0d81d61c4 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/PersonItem.vue @@ -0,0 +1,56 @@ + + + diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/PersonsAssociated.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/PersonsAssociated.vue new file mode 100644 index 000000000..631534fcb --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/PersonsAssociated.vue @@ -0,0 +1,66 @@ + + + diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/Requestor.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/Requestor.vue new file mode 100644 index 000000000..6086ab515 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/Requestor.vue @@ -0,0 +1,86 @@ + + + diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/index.js b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/index.js new file mode 100644 index 000000000..66b6d6683 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/index.js @@ -0,0 +1,23 @@ +import { createApp } from 'vue' +import { _createI18n } from 'ChillMainAssets/vuejs/_js/i18n' +import { appMessages } from './js/i18n' +import { initPromise } from './store' + +import App from './App.vue'; + +initPromise.then(store => { + + //console.log('store in create_store', store); + //console.log('store accompanyingCourse', store.state.accompanyingCourse); + + const i18n = _createI18n(appMessages); + + const app = createApp({ + template: ``, + }) + .use(store) + .use(i18n) + .component('app', App) + .mount('#accompanying-course'); + +}); diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/js/i18n.js b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/js/i18n.js new file mode 100644 index 000000000..045476686 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/js/i18n.js @@ -0,0 +1,32 @@ +import { personMessages } from 'ChillPersonAssets/vuejs/_js/i18n' + +const appMessages = { + fr: { + course: { + id: "id", + title: "Parcours", + opening_date: "Date d'ouverture", + closing_date: "Date de clôture", + remark: "Commentaire", + closing_motive: "Motif de clôture", + }, + persons_associated: { + title: "Usagers concernés", + counter: "Pas d'usager | 1 usager | {count} usagers", + firstname: "Prénom", + lastname: "Nom", + startdate: "Date d'entrée", + enddate: "Date de sortie", + addPerson: "Ajouter un usager", + }, + requestor: { + title: "Demandeur", + }, + } +}; + +Object.assign(appMessages.fr, personMessages.fr); + +export { + appMessages +}; diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/store/index.js b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/store/index.js new file mode 100644 index 000000000..04785eca5 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/store/index.js @@ -0,0 +1,76 @@ +import 'es6-promise/auto'; +import { createStore } from 'vuex'; +import addPersons from './modules/addPersons' +import { getAccompanyingCourse, postParticipation } from '../api'; + +const debug = process.env.NODE_ENV !== 'production'; + +const id = window.accompanyingCourseId; //tmp + +let initPromise = getAccompanyingCourse(id) + .then(accompanying_course => new Promise((resolve, reject) => { + + const store = createStore({ + strict: debug, + modules: { + addPersons + }, + state: { + accompanyingCourse: accompanying_course, + errorMsg: [] + }, + getters: { + }, + mutations: { + removeParticipation(state, item) { + //console.log('mutation: remove item', item.id); + state.accompanyingCourse.participations = state.accompanyingCourse.participations.filter(participation => participation !== item); + }, + closeParticipation(state, { participation, payload }) { + console.log('### mutation: close item', { participation, payload }); + // trouve dans le state le payload et le supprime du state + state.accompanyingCourse.participations = state.accompanyingCourse.participations.filter(participation => participation !== payload); + // pousse la participation + state.accompanyingCourse.participations.push(participation); + }, + addParticipation(state, participation) { + //console.log('### mutation: add participation', participation); + state.accompanyingCourse.participations.push(participation); + }, + }, + actions: { + removeParticipation({ commit }, payload) { + commit('removeParticipation', payload); + }, + closeParticipation({ commit }, payload) { + //console.log('## action: fetch delete participation: payload', payload.person.id); + postParticipation(id, payload.person.id, 'DELETE') + .then(participation => new Promise((resolve, reject) => { + //console.log('payload', payload); + commit('closeParticipation', { participation, payload }); + resolve(); + })) + .catch((error) => { + state.errorMsg.push(error.message); + }); + }, + addParticipation(addPersons, payload) { + //console.log('## action: fetch post participation: payload', payload.id); + postParticipation(id, payload.id, 'POST') + .then(participation => new Promise((resolve, reject) => { + //console.log(participation, payload); + addPersons.commit('addParticipation', participation); + addPersons.commit('resetState', payload); + resolve(); + })) + .catch((error) => { + state.errorMsg.push(error.message); + }); + }, + } + }); + //console.log('store object', store.state.accompanyingCourse.id); + resolve(store); + })); + +export { initPromise }; diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/store/modules/addPersons.js b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/store/modules/addPersons.js new file mode 100644 index 000000000..e65f94fa9 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/store/modules/addPersons.js @@ -0,0 +1,76 @@ +import { searchPersons } from 'ChillPersonAssets/vuejs/_api/AddPersons' +import { postParticipation } from '../../api'; + + +// initial state +const state = { + query: "", + suggested: [], + selected: [] +} + +// getters +const getters = { + selectedAndSuggested: state => { + const uniqBy = (a, key) => [ + ...new Map( + a.map(x => [key(x), x]) + ).values() + ]; + let union = [...new Set([ + ...state.suggested.slice().reverse(), + ...state.selected.slice().reverse(), + ])]; + return uniqBy(union, k => k.id); + } +} + +// mutations +const mutations = { + setQuery(state, query) { + //console.log('q=', query); + state.query = query; + }, + loadSuggestions(state, suggested) { + state.suggested = suggested; + }, + updateSelected(state, value) { + state.selected = value; + }, + resetState(state, selected) { + //console.log('avant', state.selected); + state.selected = state.selected.filter(value => value !== selected); + //console.log('après', state.selected); + state.query = ""; + state.suggested = []; + } +} + +// actions +const actions = { + setQuery({ commit }, payload) { + //console.log('## action: setquery: payload', payload); + commit('setQuery', payload.query); + if (payload.query.length >= 3) { + searchPersons(payload.query) + .then(suggested => new Promise((resolve, reject) => { + commit('loadSuggestions', suggested.results); + resolve(); + })); + } else { + commit('loadSuggestions', []); + } + }, + updateSelected({ commit }, payload) { + //console.log('## action: update selected values: payload', payload); + commit('updateSelected', payload); + } +} + +export default { + //namespaced: true, + state, + getters, + actions, + mutations +} diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_api/AddPersons.js b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_api/AddPersons.js new file mode 100644 index 000000000..d5ac91ac5 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_api/AddPersons.js @@ -0,0 +1,20 @@ +const + locale = 'fr', + format = 'json' +; + +/* +* Endpoint chill_person_search, method GET, get a list of persons +* +* @query string - the query to search for +*/ +let searchPersons = (query) => { + let url = `/${locale}/search.${format}?name=person_regular&q=${query}`; + return fetch(url) + .then(response => { + if (response.ok) { return response.json(); } + throw Error('Error with request resource response'); + }); +}; + +export { searchPersons }; diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/AddPersons.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/AddPersons.vue new file mode 100644 index 000000000..53600da1c --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/AddPersons.vue @@ -0,0 +1,132 @@ + + + diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/PersonSuggestion.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/PersonSuggestion.vue new file mode 100644 index 000000000..f2561b0af --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/PersonSuggestion.vue @@ -0,0 +1,53 @@ + + + diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_js/i18n.js b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_js/i18n.js new file mode 100644 index 000000000..34044441e --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_js/i18n.js @@ -0,0 +1,21 @@ +const personMessages = { + fr: { + add_persons: { + search_add_others_persons: "Rechercher et ajouter d'autres usagers", + title: "Ajouter des usagers", + suggested_counter: "Pas de résultats | 1 résultat | {count} résultats", + selected_counter: " 1 sélectionné | {count} sélectionnés", + search_some_persons: "Rechercher des personnes..", + }, + item: { + type_person: "Usager", + type_tms: "TMS", + type_3rdparty: "Tiers", + type_menage: "Ménage" + } + } +}; + +export { + personMessages +}; diff --git a/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingCourse/show.html.twig b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingCourse/show.html.twig index a33b65cff..427f5f0ac 100644 --- a/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingCourse/show.html.twig +++ b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingCourse/show.html.twig @@ -5,15 +5,13 @@ {% endblock %} {% block content %} -

{{ block('title') }}

-
+{% endblock %} - {{ encore_entry_script_tags('accompanying_course') }} - +{% block js %} - + {{ encore_entry_script_tags('accompanying_course') }} {% endblock %} diff --git a/src/Bundle/ChillPersonBundle/Search/SimilarPersonMatcher.php b/src/Bundle/ChillPersonBundle/Search/SimilarPersonMatcher.php index 956f9a4d2..1c564aa11 100644 --- a/src/Bundle/ChillPersonBundle/Search/SimilarPersonMatcher.php +++ b/src/Bundle/ChillPersonBundle/Search/SimilarPersonMatcher.php @@ -22,12 +22,13 @@ use Chill\PersonBundle\Entity\PersonNotDuplicate; use Doctrine\ORM\EntityManagerInterface; use Chill\PersonBundle\Entity\Person; use Chill\MainBundle\Security\Authorization\AuthorizationHelper; +use Chill\PersonBundle\Repository\PersonNotDuplicateRepository; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Role\Role; use Chill\PersonBundle\Security\Authorization\PersonVoter; /** - * + * * * @author Julien Fastré */ @@ -41,20 +42,20 @@ class SimilarPersonMatcher * @var EntityManagerInterface */ protected $em; - + /** * @var AuthorizationHelper */ protected $authorizationHelper; - + /** - * @var TokenStorageInterface + * @var TokenStorageInterface */ protected $tokenStorage; - + public function __construct( - EntityManagerInterface $em, - AuthorizationHelper $authorizationHelper, + EntityManagerInterface $em, + AuthorizationHelper $authorizationHelper, TokenStorageInterface $tokenStorage ) { $this->em = $em; @@ -62,7 +63,7 @@ class SimilarPersonMatcher $this->tokenStorage = $tokenStorage; } - public function matchPerson(Person $person, $precision = 0.15, $orderBy = self::SIMILAR_SEARCH_ORDER_BY_SIMILARITY) + public function matchPerson(Person $person, PersonNotDuplicateRepository $personNotDuplicateRepository, $precision = 0.15, $orderBy = self::SIMILAR_SEARCH_ORDER_BY_SIMILARITY) { $centers = $this->authorizationHelper->getReachableCenters( $this->tokenStorage->getToken()->getUser(), @@ -77,8 +78,7 @@ class SimilarPersonMatcher . ' AND p.id != :personId ' ; - $notDuplicatePersons = $this->em->getRepository(PersonNotDuplicate::class) - ->findNotDuplicatePerson($person); + $notDuplicatePersons = $personNotDuplicateRepository->findNotDuplicatePerson($person); if (count($notDuplicatePersons)) { $dql .= ' AND p.id not in (:notDuplicatePersons)'; diff --git a/src/Bundle/ChillPersonBundle/Tests/Controller/PersonControllerCreateTest.php b/src/Bundle/ChillPersonBundle/Tests/Controller/PersonControllerCreateTest.php index c49c0ea97..d1381c241 100644 --- a/src/Bundle/ChillPersonBundle/Tests/Controller/PersonControllerCreateTest.php +++ b/src/Bundle/ChillPersonBundle/Tests/Controller/PersonControllerCreateTest.php @@ -25,6 +25,7 @@ namespace Chill\PersonBundle\Tests\Controller; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; use Symfony\Component\DomCrawler\Form; use Chill\MainBundle\Test\PrepareClientTrait; +use \Symfony\Component\BrowserKit\Client; /** * Test creation and deletion for persons @@ -32,7 +33,9 @@ use Chill\MainBundle\Test\PrepareClientTrait; class PersonControllerCreateTest extends WebTestCase { use PrepareClientTrait; - + + private Client $client; + const FIRSTNAME_INPUT = 'chill_personbundle_person_creation[firstName]'; const LASTNAME_INPUT = "chill_personbundle_person_creation[lastName]"; const GENDER_INPUT = "chill_personbundle_person_creation[gender]"; @@ -42,18 +45,20 @@ class PersonControllerCreateTest extends WebTestCase const LONG_TEXT = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosq. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta.Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosq."; - public function setUp() + public function setUp(): void { - $this->client = $this::getClientAuthenticated(); + $this->client = $this->getClientAuthenticated(); } /** * * @param Form $creationForm */ - private function fillAValidCreationForm(Form &$creationForm, - $firstname = 'God', $lastname = 'Jesus') - { + private function fillAValidCreationForm( + Form &$creationForm, + string $firstname = 'God', + string $lastname = 'Jesus' + ) { $creationForm->get(self::FIRSTNAME_INPUT)->setValue($firstname); $creationForm->get(self::LASTNAME_INPUT)->setValue($lastname); $creationForm->get(self::GENDER_INPUT)->select("man"); diff --git a/src/Bundle/ChillPersonBundle/Widget/PersonListWidget.php b/src/Bundle/ChillPersonBundle/Widget/PersonListWidget.php index e885e0a26..2dcbb8230 100644 --- a/src/Bundle/ChillPersonBundle/Widget/PersonListWidget.php +++ b/src/Bundle/ChillPersonBundle/Widget/PersonListWidget.php @@ -45,7 +45,7 @@ class PersonListWidget implements WidgetInterface /** * Repository for persons * - * @var EntityRepository + * @var PersonRepository */ protected $personRepository; @@ -76,7 +76,7 @@ class PersonListWidget implements WidgetInterface protected $user; public function __construct( - EntityRepository $personRepostory, + PersonRepository $personRepostory, EntityManager $em, AuthorizationHelper $authorizationHelper, TokenStorage $tokenStorage diff --git a/src/Bundle/ChillPersonBundle/chill.webpack.config.js b/src/Bundle/ChillPersonBundle/chill.webpack.config.js index 7987ee124..53aed5d91 100644 --- a/src/Bundle/ChillPersonBundle/chill.webpack.config.js +++ b/src/Bundle/ChillPersonBundle/chill.webpack.config.js @@ -7,6 +7,6 @@ module.exports = function(encore, entries) encore.addAliases({ ChillPersonAssets: __dirname + '/Resources/public' }); - - encore.addEntry('accompanying_course', __dirname + '/Resources/public/js/AccompanyingCourse/index.js'); + + encore.addEntry('accompanying_course', __dirname + '/Resources/public/vuejs/AccompanyingCourse/index.js'); }; diff --git a/src/Bundle/ChillPersonBundle/config/services.yaml b/src/Bundle/ChillPersonBundle/config/services.yaml index 3d257dc7b..eec4b990e 100644 --- a/src/Bundle/ChillPersonBundle/config/services.yaml +++ b/src/Bundle/ChillPersonBundle/config/services.yaml @@ -1,8 +1,10 @@ parameters: # cl_chill_person.example.class: Chill\PersonBundle\Example -services: - +services: + _defaults: + autowire: true + autoconfigure: true chill.person.form.type.select2maritalstatus: class: Chill\PersonBundle\Form\Type\Select2MaritalStatusType @@ -48,3 +50,7 @@ services: - "%chill_person.validation.birtdate_not_before%" tags: - { name: validator.constraint_validator, alias: birthdate_not_before } + + Chill\PersonBundle\Repository\: + resource: '../Repository/' + tags: ['doctrine.repository_service'] diff --git a/src/Bundle/ChillPersonBundle/config/services/repository.yaml b/src/Bundle/ChillPersonBundle/config/services/repository.yaml index b99402bcf..e5ce06149 100644 --- a/src/Bundle/ChillPersonBundle/config/services/repository.yaml +++ b/src/Bundle/ChillPersonBundle/config/services/repository.yaml @@ -2,29 +2,6 @@ services: chill.person.repository.person: class: Chill\PersonBundle\Repository\PersonRepository - factory: ['@doctrine.orm.entity_manager', getRepository] - arguments: - - 'Chill\PersonBundle\Entity\Person' + autowire: true + autoconfigure: true Chill\PersonBundle\Repository\PersonRepository: '@chill.person.repository.person' - - Chill\PersonBundle\Repository\AccompanyingPeriod\ClosingMotiveRepository: - class: Chill\PersonBundle\Repository\AccompanyingPeriod\ClosingMotiveRepository - factory: ['@doctrine.orm.entity_manager', getRepository] - arguments: - - 'Chill\PersonBundle\Entity\AccompanyingPeriod\ClosingMotive' - - Chill\PersonBundle\Repository\AccompanyingPeriodRepository: - class: Chill\PersonBundle\Repository\AccompanyingPeriodRepository - tags: [ doctrine.repository_service ] - arguments: - - '@Doctrine\Persistence\ManagerRegistry' - - Chill\PersonBundle\Repository\AccompanyingPeriodParticipationRepository: - arguments: - - '@Doctrine\Persistence\ManagerRegistry' - tags: [ doctrine.repository_service ] - - Chill\PersonBundle\Repository\AccompanyingPeriod\OriginRepository: - arguments: - - '@Doctrine\Persistence\ManagerRegistry' - tags: [ doctrine.repository_service ]