Loading module/Oscar/src/Oscar/Controller/ActivityMotsClesController.php +37 −7 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ use Laminas\Http\Response; use Laminas\View\Model\JsonModel; use Oscar\Entity\ActivityMotCle; use Oscar\Provider\Privileges; use Oscar\Service\ProjectGrantService; use Oscar\Traits\UseLoggerService; use Oscar\Traits\UseLoggerServiceTrait; use Throwable; Loading @@ -14,23 +15,44 @@ class ActivityMotsClesController extends AbstractOscarController implements UseL { use UseLoggerServiceTrait; /** * @return ProjectGrantService */ public function getActivityService(): ProjectGrantService { return $this->activityService; } /** * @param ProjectGrantService $activityService */ public function setActivityService(ProjectGrantService $activityService): void { $this->activityService = $activityService; } public function apiAction() { $this->getOscarUserContextService()->check(Privileges::MAINTENANCE_DISCIPLINE_MANAGE); try { $activity = NULL; $activityId = $this->params()->fromQuery('activity_id'); if ($activityId) { $activity = $this->getActivityService()->getGrant($activityId); } if ($this->getRequest()->getMethod() == "GET") { $includeActivityCountQueryParam = $this->params()->fromQuery('include_activity_count'); $includeActivityCount = $includeActivityCountQueryParam && $includeActivityCountQueryParam === "true"; return $this->getMotsCles($includeActivityCount); return $this->getMotsCles($includeActivityCount, $activity); } if ($this->getRequest()->getMethod() == "POST") { $action_mot_cle_json = json_decode($this->getRequest()->getContent()); if ($action_mot_cle_json->action == "create") { return $this->createMotCle($action_mot_cle_json); return $this->createMotCle($action_mot_cle_json, $activity); } if ($action_mot_cle_json->action == "delete") { Loading Loading @@ -59,9 +81,13 @@ class ActivityMotsClesController extends AbstractOscarController implements UseL } } private function getMotsCles($includeCount) { private function getMotsCles($includeCount, $activity) { $this->getOscarUserContextService()->check(Privileges::MAINTENANCE_DISCIPLINE_MANAGE); if ($activity) { $this->getOscarUserContextService()->check(Privileges::ACTIVITY_EDIT, $activity); } else { $this->getOscarUserContextService()->check(Privileges::ACTIVITY_CREATE); } /** @var ActivityMotCleRepository $activityMotCleRepository */ $activityMotCleRepository = $this->getEntityManager()->getRepository(ActivityMotCle::class); Loading Loading @@ -91,9 +117,13 @@ class ActivityMotsClesController extends AbstractOscarController implements UseL return $response; } private function createMotCle($action_mot_cle_json) { private function createMotCle($action_mot_cle_json, $activity) { $this->getOscarUserContextService()->check(Privileges::MAINTENANCE_DISCIPLINE_MANAGE); if ($activity) { $this->getOscarUserContextService()->check(Privileges::ACTIVITY_EDIT, $activity); } else { $this->getOscarUserContextService()->check(Privileges::ACTIVITY_CREATE); } $this->getLoggerService()->info("createMotCle"); $this->getLoggerService()->info("by: " . $this->getCurrentPerson()); Loading module/Oscar/src/Oscar/Controller/ActivityMotsClesControllerFactory.php +2 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ use Doctrine\ORM\EntityManager; use Interop\Container\ContainerInterface; use Laminas\ServiceManager\Factory\FactoryInterface; use Oscar\Service\OscarUserContext; use Oscar\Service\ProjectGrantService; class ActivityMotsClesControllerFactory implements FactoryInterface { Loading @@ -15,6 +16,7 @@ class ActivityMotsClesControllerFactory implements FactoryInterface $c->setEntityManager($container->get(EntityManager::class)); $c->setOscarUserContextService($container->get(OscarUserContext::class)); $c->setLoggerService($container->get('Logger')); $c->setActivityService($container->get(ProjectGrantService::class)); return $c; } } module/Oscar/view/oscar/project-grant/form.phtml +1 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ <div class="col-md-6"> <div id="activity-mots-cles" data-url="<?= $this->url('activity-mots-cles/api') ?>" data-activityid="<?= $activity->getId() ?>" data-motsclesselectionnes="<?php echo '['; $count = count($activity->getMotscles()); Loading ui/src/ActivityMotsCles.js +1 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ let elemDatas = document.querySelector(elemId); // Création de l'App const app = createApp(ActivityMotsCles, { "url": elemDatas.dataset.url, "activityid": elemDatas.dataset.activityid, "motsclesselectionnes": elemDatas.dataset.motsclesselectionnes }); Loading ui/src/views/ActivityMotsCles.vue +8 −2 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ export default { props: { url: {default: null}, activityid: {default: null}, motsclesselectionnes: {default: []}, }, Loading Loading @@ -111,7 +112,7 @@ export default { this.affichertouslesmotscles = false; this.loading = "Création du mot clé"; axios.post(this.url, { action: "create", label: this.userInput.trim() }).then( axios.post(this.url + '?activity_id=' + this.activityid, { action: "create", label: this.userInput.trim() }).then( (ok) => { let nouveauMotCle = ok.data; nouveauMotCle.selected = true; Loading Loading @@ -151,7 +152,7 @@ export default { fetch() { this.loading = "Chargement des mots clés"; axios.get(this.url).then(ok => { axios.get(this.url + '?activity_id=' + this.activityid).then(ok => { this.touslesmotscles = ok.data.motscles; const dejaSelectionnes = JSON.parse(this.motsclesselectionnes); for (let unMotCle of this.touslesmotscles) { Loading Loading @@ -180,6 +181,11 @@ export default { this.error = errorHTML.innerHTML; return; } const contentLength = err.response.headers.get('content-length'); if (contentLength && (typeof contentLength == "string") && !isNaN(contentLength) && Number(contentLength) < 1000) { this.error = err.response.data; return; } } this.error = AxiosMessage.manageErrorResponse(err); Loading Loading
module/Oscar/src/Oscar/Controller/ActivityMotsClesController.php +37 −7 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ use Laminas\Http\Response; use Laminas\View\Model\JsonModel; use Oscar\Entity\ActivityMotCle; use Oscar\Provider\Privileges; use Oscar\Service\ProjectGrantService; use Oscar\Traits\UseLoggerService; use Oscar\Traits\UseLoggerServiceTrait; use Throwable; Loading @@ -14,23 +15,44 @@ class ActivityMotsClesController extends AbstractOscarController implements UseL { use UseLoggerServiceTrait; /** * @return ProjectGrantService */ public function getActivityService(): ProjectGrantService { return $this->activityService; } /** * @param ProjectGrantService $activityService */ public function setActivityService(ProjectGrantService $activityService): void { $this->activityService = $activityService; } public function apiAction() { $this->getOscarUserContextService()->check(Privileges::MAINTENANCE_DISCIPLINE_MANAGE); try { $activity = NULL; $activityId = $this->params()->fromQuery('activity_id'); if ($activityId) { $activity = $this->getActivityService()->getGrant($activityId); } if ($this->getRequest()->getMethod() == "GET") { $includeActivityCountQueryParam = $this->params()->fromQuery('include_activity_count'); $includeActivityCount = $includeActivityCountQueryParam && $includeActivityCountQueryParam === "true"; return $this->getMotsCles($includeActivityCount); return $this->getMotsCles($includeActivityCount, $activity); } if ($this->getRequest()->getMethod() == "POST") { $action_mot_cle_json = json_decode($this->getRequest()->getContent()); if ($action_mot_cle_json->action == "create") { return $this->createMotCle($action_mot_cle_json); return $this->createMotCle($action_mot_cle_json, $activity); } if ($action_mot_cle_json->action == "delete") { Loading Loading @@ -59,9 +81,13 @@ class ActivityMotsClesController extends AbstractOscarController implements UseL } } private function getMotsCles($includeCount) { private function getMotsCles($includeCount, $activity) { $this->getOscarUserContextService()->check(Privileges::MAINTENANCE_DISCIPLINE_MANAGE); if ($activity) { $this->getOscarUserContextService()->check(Privileges::ACTIVITY_EDIT, $activity); } else { $this->getOscarUserContextService()->check(Privileges::ACTIVITY_CREATE); } /** @var ActivityMotCleRepository $activityMotCleRepository */ $activityMotCleRepository = $this->getEntityManager()->getRepository(ActivityMotCle::class); Loading Loading @@ -91,9 +117,13 @@ class ActivityMotsClesController extends AbstractOscarController implements UseL return $response; } private function createMotCle($action_mot_cle_json) { private function createMotCle($action_mot_cle_json, $activity) { $this->getOscarUserContextService()->check(Privileges::MAINTENANCE_DISCIPLINE_MANAGE); if ($activity) { $this->getOscarUserContextService()->check(Privileges::ACTIVITY_EDIT, $activity); } else { $this->getOscarUserContextService()->check(Privileges::ACTIVITY_CREATE); } $this->getLoggerService()->info("createMotCle"); $this->getLoggerService()->info("by: " . $this->getCurrentPerson()); Loading
module/Oscar/src/Oscar/Controller/ActivityMotsClesControllerFactory.php +2 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ use Doctrine\ORM\EntityManager; use Interop\Container\ContainerInterface; use Laminas\ServiceManager\Factory\FactoryInterface; use Oscar\Service\OscarUserContext; use Oscar\Service\ProjectGrantService; class ActivityMotsClesControllerFactory implements FactoryInterface { Loading @@ -15,6 +16,7 @@ class ActivityMotsClesControllerFactory implements FactoryInterface $c->setEntityManager($container->get(EntityManager::class)); $c->setOscarUserContextService($container->get(OscarUserContext::class)); $c->setLoggerService($container->get('Logger')); $c->setActivityService($container->get(ProjectGrantService::class)); return $c; } }
module/Oscar/view/oscar/project-grant/form.phtml +1 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ <div class="col-md-6"> <div id="activity-mots-cles" data-url="<?= $this->url('activity-mots-cles/api') ?>" data-activityid="<?= $activity->getId() ?>" data-motsclesselectionnes="<?php echo '['; $count = count($activity->getMotscles()); Loading
ui/src/ActivityMotsCles.js +1 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ let elemDatas = document.querySelector(elemId); // Création de l'App const app = createApp(ActivityMotsCles, { "url": elemDatas.dataset.url, "activityid": elemDatas.dataset.activityid, "motsclesselectionnes": elemDatas.dataset.motsclesselectionnes }); Loading
ui/src/views/ActivityMotsCles.vue +8 −2 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ export default { props: { url: {default: null}, activityid: {default: null}, motsclesselectionnes: {default: []}, }, Loading Loading @@ -111,7 +112,7 @@ export default { this.affichertouslesmotscles = false; this.loading = "Création du mot clé"; axios.post(this.url, { action: "create", label: this.userInput.trim() }).then( axios.post(this.url + '?activity_id=' + this.activityid, { action: "create", label: this.userInput.trim() }).then( (ok) => { let nouveauMotCle = ok.data; nouveauMotCle.selected = true; Loading Loading @@ -151,7 +152,7 @@ export default { fetch() { this.loading = "Chargement des mots clés"; axios.get(this.url).then(ok => { axios.get(this.url + '?activity_id=' + this.activityid).then(ok => { this.touslesmotscles = ok.data.motscles; const dejaSelectionnes = JSON.parse(this.motsclesselectionnes); for (let unMotCle of this.touslesmotscles) { Loading Loading @@ -180,6 +181,11 @@ export default { this.error = errorHTML.innerHTML; return; } const contentLength = err.response.headers.get('content-length'); if (contentLength && (typeof contentLength == "string") && !isNaN(contentLength) && Number(contentLength) < 1000) { this.error = err.response.data; return; } } this.error = AxiosMessage.manageErrorResponse(err); Loading