Loading front/Application/UI/UModal.vue 0 → 100644 +34 −0 Original line number Diff line number Diff line <template> <div class="modal fade" :id="id" tabindex="-1" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">{{ title }}</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <slot name="body"></slot> </div> <div class="modal-footer"> <slot name="footer"></slot> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Fermer</button> </div> </div> </div> </div> </template> <script> export default { name: "UModal", props: { id: {required: true, type: String}, title: {required: true, type: String}, }, } </script> <style scoped> </style> No newline at end of file front/Mission/Mission.vue +14 −6 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ <label class=" form-label">Nombre d'heures prévisionnelles</label> <div class="input-group mb-3"> <div class="form-control">{{ heuresLib }}</div> <button onclick="alert('non implémenté')" class="input-group-btn btn btn-secondary">Suivi</button> <button class="input-group-btn btn btn-secondary" data-bs-toggle="modal" data-bs-target="#details"><u-icon name=""/> Détails</button> </div> </div> </div> Loading Loading @@ -97,8 +97,16 @@ </div> </div> </form> </div> <u-modal id="details" title="Détail des heures"> <template #body> Mon détail des heures </template> <template #footer> Mon test de footer </template> </u-modal> </template> <script> Loading Loading @@ -129,12 +137,12 @@ export default { heuresLib: function () { if (this.mission.heures === null || this.mission.heures === 0) { return 'Aucune heure saisie'; } else if (this.mission.heures - this.mission.heuresValidees == 0) { return this.mission.heures + ' heures validées'; } else if (this.mission.heures == this.mission.heuresValidees) { return this.mission.heures + ' heures (validées)'; } else if (this.mission.heuresValidees == 0) { return this.mission.heures + ' heures à valider'; return this.mission.heures + ' heures (non validées)'; } else { return this.mission.heures + ' heures dont ' + (this.mission.heures - this.mission.heuresValidees) + ' à valider'; return this.mission.heures + ' heures (' + this.mission.heuresValidees + ' validées)'; } } }, Loading front/autoload.js +1 −0 Original line number Diff line number Diff line export default { /* UI components */ uIcon: 'Application/UI/UIcon', uModal: 'Application/UI/UModal', /* App common components */ utilisateur: 'Application/Utilisateur', Loading module/Application/src/Controller/Plugin/Axios.php +34 −2 Original line number Diff line number Diff line Loading @@ -3,7 +3,9 @@ namespace Application\Controller\Plugin; use Application\Constants; use Application\Interfaces\AxiosExtractor; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Query; use Laminas\Mvc\Controller\Plugin\AbstractPlugin; use Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger; use Laminas\View\Model\JsonModel; Loading Loading @@ -33,8 +35,13 @@ class Axios extends AbstractPlugin public function send(array $data): JsonModel public function send($data): JsonModel { if ($data instanceof Query) { $data = $data->getResult(); } $data = self::extract($data); /** @var FlashMessenger $flashMessenger */ $flashMessenger = $this->controller->flashMessenger(); Loading Loading @@ -71,9 +78,22 @@ class Axios extends AbstractPlugin return null; } if (is_array($object)) { $result = []; foreach ($object as $index => $sobj) { $sObjData = self::extract($sobj, $properties); if (isset($sObjData['id'])) { $index = $sObjData['id']; } $result[$index] = $sObjData; } return $result; } $result = []; if (method_exists($object, 'getId')) { if (is_object($object) && method_exists($object, 'getId')) { $result['id'] = $object->getId(); } if (!empty($properties)) { Loading @@ -89,6 +109,10 @@ class Axios extends AbstractPlugin $prefixes = ['get', 'is', 'has']; foreach ($prefixes as $prefix) { if (method_exists($object, $property)) { $value = $object->$property(); $foundValue = true; } else { $method = $prefix . ucfirst($property); if (method_exists($object, $method)) { $value = $object->$method(); Loading @@ -96,6 +120,7 @@ class Axios extends AbstractPlugin break; } } } if ($foundValue) { if (is_object($value)) { Loading @@ -105,8 +130,13 @@ class Axios extends AbstractPlugin $oriVals = $value; $value = []; foreach ($oriVals as $oriVal) { if (method_exists($oriVal, 'getId')) { $id = $oriVal->getId(); $value[$id] = self::extract($oriVal, $subProperties); } else { $value[] = self::extract($oriVal, $subProperties); } } } else { $value = self::extract($value, $subProperties); } Loading @@ -114,6 +144,8 @@ class Axios extends AbstractPlugin $result[$property] = $value; } } } elseif ($object instanceof AxiosExtractor) { $result = self::extract($object, $object->axiosDefinition()); } else { $result['libelle'] = (string)$object; } Loading module/Application/src/Entity/Db/Utilisateur.php +9 −1 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ namespace Application\Entity\Db; use Application\Interfaces\AxiosExtractor; use UnicaenApp\Entity\UserInterface; use UnicaenAuth\Entity\Db\AbstractUser; Loading @@ -9,7 +10,7 @@ use UnicaenAuth\Entity\Db\AbstractUser; /** * Utilisateur */ class Utilisateur extends AbstractUser implements UserInterface class Utilisateur extends AbstractUser implements UserInterface, AxiosExtractor { const APP_UTILISATEUR_ID = 1; Loading @@ -35,6 +36,13 @@ class Utilisateur extends AbstractUser implements UserInterface public function axiosDefinition(): array { return ['email', 'displayName']; } /** * @return \Laminas\Permissions\Acl\Role\RoleInterface[] */ Loading Loading
front/Application/UI/UModal.vue 0 → 100644 +34 −0 Original line number Diff line number Diff line <template> <div class="modal fade" :id="id" tabindex="-1" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">{{ title }}</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <slot name="body"></slot> </div> <div class="modal-footer"> <slot name="footer"></slot> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Fermer</button> </div> </div> </div> </div> </template> <script> export default { name: "UModal", props: { id: {required: true, type: String}, title: {required: true, type: String}, }, } </script> <style scoped> </style> No newline at end of file
front/Mission/Mission.vue +14 −6 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ <label class=" form-label">Nombre d'heures prévisionnelles</label> <div class="input-group mb-3"> <div class="form-control">{{ heuresLib }}</div> <button onclick="alert('non implémenté')" class="input-group-btn btn btn-secondary">Suivi</button> <button class="input-group-btn btn btn-secondary" data-bs-toggle="modal" data-bs-target="#details"><u-icon name=""/> Détails</button> </div> </div> </div> Loading Loading @@ -97,8 +97,16 @@ </div> </div> </form> </div> <u-modal id="details" title="Détail des heures"> <template #body> Mon détail des heures </template> <template #footer> Mon test de footer </template> </u-modal> </template> <script> Loading Loading @@ -129,12 +137,12 @@ export default { heuresLib: function () { if (this.mission.heures === null || this.mission.heures === 0) { return 'Aucune heure saisie'; } else if (this.mission.heures - this.mission.heuresValidees == 0) { return this.mission.heures + ' heures validées'; } else if (this.mission.heures == this.mission.heuresValidees) { return this.mission.heures + ' heures (validées)'; } else if (this.mission.heuresValidees == 0) { return this.mission.heures + ' heures à valider'; return this.mission.heures + ' heures (non validées)'; } else { return this.mission.heures + ' heures dont ' + (this.mission.heures - this.mission.heuresValidees) + ' à valider'; return this.mission.heures + ' heures (' + this.mission.heuresValidees + ' validées)'; } } }, Loading
front/autoload.js +1 −0 Original line number Diff line number Diff line export default { /* UI components */ uIcon: 'Application/UI/UIcon', uModal: 'Application/UI/UModal', /* App common components */ utilisateur: 'Application/Utilisateur', Loading
module/Application/src/Controller/Plugin/Axios.php +34 −2 Original line number Diff line number Diff line Loading @@ -3,7 +3,9 @@ namespace Application\Controller\Plugin; use Application\Constants; use Application\Interfaces\AxiosExtractor; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Query; use Laminas\Mvc\Controller\Plugin\AbstractPlugin; use Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger; use Laminas\View\Model\JsonModel; Loading Loading @@ -33,8 +35,13 @@ class Axios extends AbstractPlugin public function send(array $data): JsonModel public function send($data): JsonModel { if ($data instanceof Query) { $data = $data->getResult(); } $data = self::extract($data); /** @var FlashMessenger $flashMessenger */ $flashMessenger = $this->controller->flashMessenger(); Loading Loading @@ -71,9 +78,22 @@ class Axios extends AbstractPlugin return null; } if (is_array($object)) { $result = []; foreach ($object as $index => $sobj) { $sObjData = self::extract($sobj, $properties); if (isset($sObjData['id'])) { $index = $sObjData['id']; } $result[$index] = $sObjData; } return $result; } $result = []; if (method_exists($object, 'getId')) { if (is_object($object) && method_exists($object, 'getId')) { $result['id'] = $object->getId(); } if (!empty($properties)) { Loading @@ -89,6 +109,10 @@ class Axios extends AbstractPlugin $prefixes = ['get', 'is', 'has']; foreach ($prefixes as $prefix) { if (method_exists($object, $property)) { $value = $object->$property(); $foundValue = true; } else { $method = $prefix . ucfirst($property); if (method_exists($object, $method)) { $value = $object->$method(); Loading @@ -96,6 +120,7 @@ class Axios extends AbstractPlugin break; } } } if ($foundValue) { if (is_object($value)) { Loading @@ -105,8 +130,13 @@ class Axios extends AbstractPlugin $oriVals = $value; $value = []; foreach ($oriVals as $oriVal) { if (method_exists($oriVal, 'getId')) { $id = $oriVal->getId(); $value[$id] = self::extract($oriVal, $subProperties); } else { $value[] = self::extract($oriVal, $subProperties); } } } else { $value = self::extract($value, $subProperties); } Loading @@ -114,6 +144,8 @@ class Axios extends AbstractPlugin $result[$property] = $value; } } } elseif ($object instanceof AxiosExtractor) { $result = self::extract($object, $object->axiosDefinition()); } else { $result['libelle'] = (string)$object; } Loading
module/Application/src/Entity/Db/Utilisateur.php +9 −1 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ namespace Application\Entity\Db; use Application\Interfaces\AxiosExtractor; use UnicaenApp\Entity\UserInterface; use UnicaenAuth\Entity\Db\AbstractUser; Loading @@ -9,7 +10,7 @@ use UnicaenAuth\Entity\Db\AbstractUser; /** * Utilisateur */ class Utilisateur extends AbstractUser implements UserInterface class Utilisateur extends AbstractUser implements UserInterface, AxiosExtractor { const APP_UTILISATEUR_ID = 1; Loading @@ -35,6 +36,13 @@ class Utilisateur extends AbstractUser implements UserInterface public function axiosDefinition(): array { return ['email', 'displayName']; } /** * @return \Laminas\Permissions\Acl\Role\RoleInterface[] */ Loading