Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
open-source
OSE
Commits
a0f76225
Commit
a0f76225
authored
May 17, 2019
by
Laurent Lécluse
Browse files
Indicateurs : pourvoir envoyer des mails même si un des intervenants dans la liste n'a pas de mail
parent
de3cf1e3
Changes
4
Hide whitespace changes
Inline
Side-by-side
CHANGELOG.md
View file @
a0f76225
...
...
@@ -19,6 +19,7 @@ dans le détail des services.
*
Certains dossiers intervenants pouvaient être validés plusieurs fois.
Un mécanisme contrôle désormais que le dossier n'est pas déjà validé avant de valider à nouveau.
*
Le contrôle de cohérence des données personnelles prend maintenant en compte le cas des français nés dans un ex-département français d'Algérie.
*
Les mails de notification aux intervenants peuvent être envoyés même si certains d'entre eux n'ont pas de mail. Ces derniers seront listés.
## Nouveautés
...
...
module/Application/src/Application/Controller/IndicateurController.php
View file @
a0f76225
...
...
@@ -32,7 +32,6 @@ use Zend\View\Model\JsonModel;
use
Zend\View\Model\ViewModel
;
class
IndicateurController
extends
AbstractController
{
use
IndicateurServiceAwareTrait
;
...
...
@@ -75,11 +74,11 @@ class IndicateurController extends AbstractController
* @return void
* @link http://php.net/manual/en/language.oop5.decon.php
*/
public
function
__construct
(
TreeRouteStack
$httpRouter
,
PhpRenderer
$renderer
,
array
$cliConfig
)
public
function
__construct
(
TreeRouteStack
$httpRouter
,
PhpRenderer
$renderer
,
array
$cliConfig
)
{
$this
->
httpRouter
=
$httpRouter
;
$this
->
renderer
=
$renderer
;
$this
->
cliConfig
=
$cliConfig
;
$this
->
renderer
=
$renderer
;
$this
->
cliConfig
=
$cliConfig
;
}
...
...
@@ -184,7 +183,7 @@ class IndicateurController extends AbstractController
$notifications
=
$sab
->
getList
(
$qb
);
$indicateurs
=
[];
foreach
(
$notifications
as
$notification
){
foreach
(
$notifications
as
$notification
)
{
$indicateurs
[]
=
$notification
->
getIndicateur
()
->
setServiceIndicateur
(
$sid
);
}
...
...
@@ -200,9 +199,9 @@ class IndicateurController extends AbstractController
$indicateur
->
setServiceIndicateur
(
$this
->
getServiceIndicateur
());
$intervenantsStringIds
=
$this
->
params
()
->
fromQuery
(
'intervenants'
,
$this
->
params
()
->
fromPost
(
'intervenants'
,
null
));
if
(
$intervenantsStringIds
){
if
(
$intervenantsStringIds
)
{
$intervenantsIds
=
explode
(
'-'
,
$intervenantsStringIds
);
}
else
{
}
else
{
$intervenantsIds
=
[];
}
...
...
@@ -217,17 +216,13 @@ class IndicateurController extends AbstractController
}
$formatter
=
new
IntervenantEmailFormatter
();
$formatter
->
setServiceDossier
(
$this
->
getServiceDossier
()
);
$emails
=
$formatter
->
filter
(
$intervenants
);
if
((
$intervenantsWithNoEmail
=
$formatter
->
getIntervenantsWithNoEmail
()))
{
throw
new
\
LogicException
(
"Aucune adresse mail trouvée pour l'intervenant suivant: "
.
implode
(
", "
,
Util
::
collectionAsOptions
(
$intervenantsWithNoEmail
)));
}
$mailer
=
new
IndicateurIntervenantsMailer
(
$this
,
$indicateur
,
$this
->
renderer
);
$from
=
$mailer
->
getFrom
();
$subject
=
$mailer
->
getDefaultSubject
();
$body
=
$mailer
->
getDefaultBody
();
$formatter
->
setServiceDossier
(
$this
->
getServiceDossier
());
$emails
=
$formatter
->
filter
(
$intervenants
);
$intervenantsWithNoEmail
=
$formatter
->
getIntervenantsWithNoEmail
();
$mailer
=
new
IndicateurIntervenantsMailer
(
$this
,
$indicateur
,
$this
->
renderer
);
$from
=
$mailer
->
getFrom
();
$subject
=
$mailer
->
getDefaultSubject
();
$body
=
$mailer
->
getDefaultBody
();
$form
=
new
Form
();
$form
->
setAttribute
(
'action'
,
$this
->
url
()
->
fromRoute
(
null
,
[],
[],
true
));
...
...
@@ -243,7 +238,7 @@ class IndicateurController extends AbstractController
$post
=
$this
->
getRequest
()
->
getPost
();
if
(
$form
->
setData
(
$post
)
->
isValid
())
{
$mailer
->
send
(
$emails
,
$post
);
$count
=
count
(
$intervenants
);
$count
=
count
(
$intervenants
);
$pluriel
=
$count
>
1
?
's'
:
''
;
$this
->
flashMessenger
()
->
addSuccessMessage
(
"Le mail a été envoyé à
$count
intervenant
$pluriel
"
);
$this
->
redirect
()
->
toRoute
(
'indicateur/result'
,
[
'indicateur'
=>
$indicateur
->
getId
()]);
...
...
@@ -251,9 +246,10 @@ class IndicateurController extends AbstractController
}
return
[
'title'
=>
"Envoyer un mail aux intervenants"
,
'count'
=>
count
(
$emails
),
'form'
=>
$form
,
'title'
=>
"Envoyer un mail aux intervenants"
,
'count'
=>
count
(
$emails
),
'sansMail'
=>
$intervenantsWithNoEmail
,
'form'
=>
$form
,
];
}
...
...
@@ -272,15 +268,15 @@ class IndicateurController extends AbstractController
// S'il s'agit d'une requête de type Console (CLI), le plugin de contrôleur Url utilisé par les indicateurs
// n'est pas en mesure de construire des URL (car le ConsoleRouter ne sait pas ce qu'est une URL!).
// On injecte donc provisoirement un HttpRouter dans le circuit.
$event
=
$this
->
getEvent
();
$router
=
$event
->
getRouter
();
$event
=
$this
->
getEvent
();
$router
=
$event
->
getRouter
();
$event
->
setRouter
(
$this
->
httpRouter
);
// De plus, pour fonctionner, le HttpRouter a besoin du "prefixe" à utiliser pour assembler les URL
// (ex: "http://localhost/ose"). Ce prefixe est fourni via un HttpUri initialisé à partir de 2 arguments
// de la ligne de commande : "requestUriHost" (obligatoire) et "requestUriScheme" (facultatif, "http" par défaut).
$httpUri
=
(
new
\
Zend\Uri\Http
())
->
setHost
(
$this
->
cliConfig
[
'domain'
])
// ex: "/localhost/ose", "ose.unicaen.fr"
->
setHost
(
$this
->
cliConfig
[
'domain'
])
// ex: "/localhost/ose", "ose.unicaen.fr"
->
setScheme
(
$this
->
cliConfig
[
'scheme'
]);
$this
->
httpRouter
->
setRequestUri
(
$httpUri
);
...
...
@@ -307,20 +303,20 @@ class IndicateurController extends AbstractController
$intervenant
=
$this
->
getEvent
()
->
getParam
(
'intervenant'
);
$typeVolumeHoraireCode
=
$this
->
params
()
->
fromRoute
(
'type-volume-horaire-code'
);
$typeVolumeHoraire
=
$this
->
getServiceTypeVolumeHoraire
()
->
getByCode
(
$typeVolumeHoraireCode
);
$typeVolumeHoraire
=
$this
->
getServiceTypeVolumeHoraire
()
->
getByCode
(
$typeVolumeHoraireCode
);
$periodeCode
=
$this
->
params
()
->
fromRoute
(
'periode-code'
);
$periode
=
$this
->
getServicePeriode
()
->
getByCode
(
$periodeCode
);
$periode
=
$this
->
getServicePeriode
()
->
getByCode
(
$periodeCode
);
if
(
!
$intervenant
){
if
(
!
$intervenant
)
{
throw
new
\
Exception
(
'Un intervenant doit être spécifié'
);
}
$params
=
compact
(
'typeVolumeHoraire'
,
'periode'
,
'intervenant'
);
if
(
$structure
=
$this
->
getServiceContext
()
->
getStructure
()){
$params
=
compact
(
'typeVolumeHoraire'
,
'periode'
,
'intervenant'
);
if
(
$structure
=
$this
->
getServiceContext
()
->
getStructure
())
{
$params
[
'structure'
]
=
$structure
->
getId
();
$sFilter
=
' AND idc.structure = :structure'
;
}
else
{
$sFilter
=
' AND idc.structure = :structure'
;
}
else
{
$sFilter
=
''
;
}
...
...
@@ -328,7 +324,7 @@ class IndicateurController extends AbstractController
SELECT
idc, s, ep, ti
FROM
"
.
IndicateurDepassementCharges
::
class
.
" idc
"
.
IndicateurDepassementCharges
::
class
.
" idc
JOIN idc.structure s
JOIN idc.elementPedagogique ep
JOIN idc.typeIntervention ti
...
...
@@ -342,10 +338,10 @@ class IndicateurController extends AbstractController
"
;
$idcs
=
$this
->
em
()
->
createQuery
(
$dql
)
->
setParameters
(
$params
)
->
getResult
();
$title
=
'Dépassement d\'heures ('
.
$typeVolumeHoraire
.
') par rapport aux charges <small>'
.
$intervenant
.
'</small>'
;
$idcs
=
$this
->
em
()
->
createQuery
(
$dql
)
->
setParameters
(
$params
)
->
getResult
();
$title
=
'Dépassement d\'heures ('
.
$typeVolumeHoraire
.
') par rapport aux charges <small>'
.
$intervenant
.
'</small>'
;
return
compact
(
'title'
,
'intervenant'
,
'idcs'
);
return
compact
(
'title'
,
'intervenant'
,
'idcs'
);
}
}
...
...
@@ -353,8 +349,6 @@ class IndicateurController extends AbstractController
/**
* Classe dédiée à l'envoi des mails aux intervenants retournés par un indicateur.
*/
...
...
@@ -383,7 +377,7 @@ class IndicateurIntervenantsMailer
{
$this
->
controller
=
$controller
;
$this
->
indicateur
=
$indicateur
;
$this
->
renderer
=
$renderer
;
$this
->
renderer
=
$renderer
;
}
...
...
module/Application/src/Application/Filter/IntervenantEmailFormatter.php
View file @
a0f76225
...
...
@@ -42,12 +42,12 @@ class IntervenantEmailFormatter extends AbstractFilter
}
if
(
!
$email
)
{
$this
->
intervenantsWithNoEmail
[
$intervenant
->
getCode
()]
=
$intervenant
;
$this
->
intervenantsWithNoEmail
[]
=
$intervenant
;
}
else
{
$emails
=
[
$email
=>
$intervenant
->
getNomComplet
()
];
}
$emails
=
[
$email
=>
$intervenant
->
getNomComplet
()
];
}
elseif
(
is_array
(
$value
))
{
foreach
(
$value
as
$intervenant
)
{
...
...
module/Application/view/application/indicateur/envoi-mail-intervenants.phtml
View file @
a0f76225
<?php
/**
* @var $this \Application\View\Renderer\PhpRenderer
* @var $title string
* @var $count integer
* @var $form \Zend\Form\Form
* @var $this \Application\View\Renderer\PhpRenderer
* @var $title string
* @var $count integer
* @var $sansMail \Application\Entity\Db\Intervenant[]
* @var $form \Zend\Form\Form
*/
echo
$this
->
form
()
->
openTag
(
$this
->
form
->
setAttribute
(
'id'
,
'mail-form'
));
echo
$this
->
form
()
->
openTag
(
$this
->
form
->
setAttribute
(
'id'
,
'mail-form'
));
?>
<h1
class=
"page-header"
>
<?=
$title
?>
</h1>
...
...
@@ -22,6 +23,18 @@ echo $this->form()->openTag($this->form->setAttribute('id','mail-form'));
</div>
<?=
$this
->
formControlGroup
(
$this
->
form
->
get
(
'subject'
)
->
setLabel
(
"Objet du mail"
))
?>
<?=
$this
->
formControlGroup
(
$this
->
form
->
get
(
'body'
)
->
setLabel
(
"Corps du mail"
)
->
setAttributes
([
'rows'
=>
15
,
'id'
=>
'body'
]))
?>
<?php
if
(
!
empty
(
$sansMail
))
:
?>
<div
class=
"alert alert-warning"
>
Attention : faute de disposer d'une adresse mail, le ou les intervenants suivants ne pourront pas être contactés :
<ul>
<?php
foreach
(
$sansMail
as
$intervenant
)
:
?>
<li>
<?=
$intervenant
?>
</li>
<?php
endforeach
;
?>
</ul>
</div>
<?php
endif
;
?>
<button
class=
"btn btn-default"
type=
"button"
onclick=
"window.history.back()"
><i
class=
"fa fa-undo"
aria-hidden=
"true"
></i>
Retour à l'indicateur
</button>
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment