Skip to content
Snippets Groups Projects
Commit 90888920 authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Merge branch 'develop'

parents 62083414 a4b97f1f
No related branches found
No related tags found
No related merge requests found
Showing
with 2583 additions and 23 deletions
Journal des modifications
=========================
1.2.5 (04/10/2019)
------------------
### Améliorations
- Ligne de commande d'import : nouvel argument --verbose pour obtenir plus de logs.
1.2.4 (27/09/2019)
------------------
### Corrections
- Persistance du logo si non renseigné et changement de la redirection et des flashMessenger.
1.2.3 (29/08/2019)
------------------
......
Doxyfile 0 → 100644
This diff is collapsed.
......@@ -2,9 +2,9 @@
return [
'unicaen-app' => [
'app_infos' => [
'version' => '1.2.4',
'date' => '27/09/2019',
'version' => '1.2.6',
'date' => '17/10/2019',
],
],
'comment' => 'Fichier généré le 27/09/2019 à 10:25:28 avec /home/metivier/MyWeb/sygal/bump-version',
'comment' => 'Fichier généré le 17/10/2019 à 15:18:16 avec /home/metivier/MyWeb/sygal/bump-version',
];
# Version 1.2.4
## 1. Sur le serveur d'application
- Placez-vous dans le répertoire de l'application puis lancez la commande suivante
pour installer la nouvelle version :
```bash
git fetch --tags && git checkout --force 1.2.4 && \
bash ./install.sh
```
- Selon le moteur PHP que vous avez installé, rechargez le service, exemple :
- php7.0-fpm : `service php7.0-fpm reload`
- apache2-mod-php7.0 : `service apache2 reload`
## 2. Dans la base de données
Néant.
# Version 1.2.5
## 1. Sur le serveur d'application
- Placez-vous dans le répertoire de l'application puis lancez la commande suivante
pour installer la nouvelle version :
```bash
git fetch --tags && git checkout --force 1.2.5 && \
bash ./install.sh
```
- Selon le moteur PHP que vous avez installé, rechargez le service, exemple :
- php7.0-fpm : `service php7.0-fpm reload`
- apache2-mod-php7.0 : `service apache2 reload`
## 2. Dans la base de données
Néant.
......@@ -30,7 +30,9 @@ class ExportController extends AbstractController
'Date de naissance' => function (These $these) { return $these->getDoctorant()->getIndividu()->getDateNaissance(); },
'Nationalité' => function (These $these) { return $these->getDoctorant()->getIndividu()->getNationalite(); },
'Adresse électronique' => function (These $these) { return $these->getDoctorant()->getIndividu()->getEmail(); },
'Adresse électronique personnelle' => function (These $these) { return $these->getDoctorant()->getIndividu()->getMailContact(); },
'Numéro étudiant' => function (These $these) { return $this->sourceCodeStringHelper->removePrefixFrom($these->getDoctorant()->getSourceCode()); },
'I.N.E.' => function (These $these) { return $these->getDoctorant()->getIndividu()->getIne(); },
//These
'Identifiant de la thèse' => function (These $these) { return $these->getSourceCode(); },
'Titre' => function (These $these) { return $these->getTitre(); },
......
......@@ -4,6 +4,7 @@ namespace Application\Entity\Db;
use Application\Constants;
use Application\Filter\NomCompletFormatter;
use Doctrine\Common\Collections\ArrayCollection;
use UnicaenApp\Entity\HistoriqueAwareInterface;
use UnicaenApp\Entity\HistoriqueAwareTrait;
use UnicaenImport\Entity\Db\Interfaces\SourceAwareInterface;
......@@ -92,6 +93,20 @@ class Individu implements HistoriqueAwareInterface, SourceAwareInterface
*/
private $id;
/**
* @var ArrayCollection (mailContact)
*/
private $mailsConfirmations;
/**
* @var string
*/
private $ine;
public function __construct() {
$this->mailsConfirmations = new ArrayCollection();
}
/**
* @return string
* @see supannId
......@@ -445,4 +460,39 @@ class Individu implements HistoriqueAwareInterface, SourceAwareInterface
{
return $this->id;
}
/** @return string */
public function getMailContact()
{
if (! $this->mailsConfirmations->isEmpty())
{
/** @var MailConfirmation $mailConfirmation */
foreach ($this->mailsConfirmations as $mailConfirmation) {
if ($mailConfirmation->getEtat() === MailConfirmation::CONFIRMER) {
return $mailConfirmation->getEmail();
}
}
}
return null;
}
/**
* @return string
*/
public function getIne()
{
return $this->ine;
}
/**
* @param string $ine
* @return Individu
*/
public function setIne($ine)
{
$this->ine = $ine;
return $this;
}
}
\ No newline at end of file
......@@ -21,10 +21,11 @@
<field name="sourceCode" column="SOURCE_CODE" nullable="true"/>
<one-to-many target-entity="Application\Entity\Db\MailConfirmation" mapped-by="individu" field="mailsConfirmations"/>
<field name="histoCreation" type="datetime" column="HISTO_CREATION"/>
<field name="histoDestruction" type="datetime" column="HISTO_DESTRUCTION" nullable="true"/>
<field name="histoModification" type="datetime" column="HISTO_MODIFICATION"/>
<many-to-one field="source" target-entity="Application\Entity\Db\Source">
<join-columns>
<join-column name="SOURCE_ID" referenced-column-name="ID"/>
......
......@@ -23,10 +23,14 @@ use Application\View\Renderer\PhpRenderer;
* @see SubstitutionController::modifierAction()
*/
$this->headLink()->appendStylesheet("https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.9/dist/css/bootstrap-select.min.css");
if ( $type === null && $cible !== null) $type = $cible->getTypeStructure()->getCode();
$canEdit = $this->isAllowed(SubstitutionPrivileges::getResourceId(SubstitutionPrivileges::SUBSTITUTION_MODIFICATION_TOUTES_STRUCTURES))
OR $this->isAllowed(SubstitutionPrivileges::getResourceId(SubstitutionPrivileges::SUBSTITUTION_MODIFICATION_SA_STRUCTURE));
?>
<script src="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.9/dist/js/bootstrap-select.min.js"></script>
<div class="container">
<?php
......@@ -79,7 +83,7 @@ echo $messenger->addMessagesFromFlashMessenger();
*/
function generateSelect($structuresConcretes, \Zend\View\Renderer\PhpRenderer $renderer) {
$texte = "";
$texte .= "<select name='nouveau'>";
$texte .= "<select name='nouveau' class='selectpicker' data-live-search='true'>";
foreach ($structuresConcretes as $structuresConcrete) {
$url = $renderer->url('substitution-generer', ['id' => $structuresConcrete->getStructure()->getId()]);
$texte .= "<option value='".$url."'>".$structuresConcrete->getLibelle() ."</option>";
......@@ -101,8 +105,10 @@ function generateSelect($structuresConcretes, \Zend\View\Renderer\PhpRenderer $r
}
</style>
<script>
$(document).ready(function() {
$('select').selectpicker();
//remplacement dans la structure cible
$("div#sources").on("click", "input[type='radio']", function () {
......
......@@ -18,6 +18,7 @@ use Application\Provider\Privilege\UtilisateurPrivileges;
* @var UniteRecherche[] unites
*/
$this->headLink()->appendStylesheet("https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.9/dist/css/bootstrap-select.min.css");
$canModifier = $this->isAllowed(Privileges::getResourceId(UtilisateurPrivileges::UTILISATEUR_MODIFICATION));
?>
......@@ -135,7 +136,7 @@ $canModifier = $this->isAllowed(Privileges::getResourceId(UtilisateurPrivileges:
function generateSelect($structures, $id, $roles = null)
{
$texte = '<div class="form-group">';
$texte .= '<select class="form-control" id="' . $id . '">';
$texte .= '<select class="form-control selectpicker" data-live-search="true" id="' . $id . '">';
$texte .= '<option value=""></option>';
$structuresValides = [];
......@@ -319,9 +320,10 @@ function generateRoleUnite( $individu, $roles, $rolesAffectes, $unites, $canM
?>
<script src="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.9/dist/js/bootstrap-select.min.js"></script>
<script>
$(document).ready(function () {
$('.selectpicker').selectpicker();
$(".remove-role").click(function () {
var id = $(this).attr("id");
var splits = id.split("_");
......@@ -394,5 +396,9 @@ function generateRoleUnite( $individu, $roles, $rolesAffectes, $unites, $canM
margin: 5px 5px 5px 5px;
}
.dropdown-menu {
z-index: 100000;
max-height: 400px;
}
</style>
......@@ -40,20 +40,22 @@ class Module
{
return [
// command
'import --service= --etablissement= [--source-code=] [--synchronize=] [--em=]' => "Importer toutes les données d'un service d'un établissement.",
'import --service= --etablissement= [--source-code=] [--synchronize=] [--verbose] [--em=]' => "Importer toutes les données d'un service d'un établissement.",
// parameters
['--service', "Requis. Identifiant du service, ex: 'variable'"],
['--etablissement', "Requis. Identifiant de l'établissement, ex: 'UCN'"],
['--source-code', "Facultatif. Source code du seul enregistrement à importer"],
['--synchronize', "Facultatif. Réaliser ou non la synchro SRC_XXX => XXX. Valeurs possibles: 0, 1. Valeur par défaut: 1."],
['--verbose', "Facultatif. Activer les logs verbeux (debug)."],
['--em', "Facultatif. Nom de l'EntityManager à utiliser. Valeur par défaut: 'orm_default'."],
// command
'import-all --etablissement= [--synchronize=] [--em=]' => "Importer toutes les données de tous les serviceq d'un établissement.",
'import-all --etablissement= [--synchronize=] [--verbose] [--em=]' => "Importer toutes les données de tous les serviceq d'un établissement.",
// parameters
['--etablissement', "Requis. Identifiant de l'établissement, ex: 'UCN'"],
['--breakOnServiceNotFound', "Facultatif. Faut-il stopper si un service appelé n'existe pas. Valeurs possibles: 0, 1. Valeur par défaut: 1."],
['--synchronize', "Facultatif. Réaliser ou non la synchro SRC_XXX => XXX. Valeurs possibles: 0, 1. Valeur par défaut: 1."],
['--verbose', "Facultatif. Activer les logs verbeux (debug)."],
['--em', "Facultatif. Nom de l'EntityManager à utiliser. Valeur par défaut: 'orm_default'."],
// command
......
......@@ -67,7 +67,7 @@ return [
'import-console' => [
'type' => Simple::class,
'options' => [
'route' => 'import --service= --etablissement= [--source-code=] [--synchronize=] [--em=]',
'route' => 'import --service= --etablissement= [--source-code=] [--synchronize=] [--verbose] [--em=]',
'defaults' => [
'controller' => Import\Controller\ImportController::class,
'action' => 'import-console',
......@@ -77,7 +77,7 @@ return [
'import-all-console' => [
'type' => Simple::class,
'options' => [
'route' => 'import-all --etablissement= [--breakOnServiceNotFound=] [--synchronize=] [--em=]',
'route' => 'import-all --etablissement= [--breakOnServiceNotFound=] [--synchronize=] [--verbose] [--em=]',
'defaults' => [
'controller' => Import\Controller\ImportController::class,
'action' => 'import-all-console',
......
......@@ -132,19 +132,21 @@ class ImportController extends AbstractActionController
* avec les tables destinations.
*
* @return ViewModel
* @throws StructureNotFoundException
*/
public function importAction()
{
$service = $this->params('service');
$codeStructure = $this->params('etablissement'); // ex: 'UCN'
$sourceCode = $this->params('source_code');
$verbose = (bool) $this->params('verbose', 0);
$queryParams = $this->params()->fromQuery();
$etablissement = $this->fetchEtablissementByCodeStructure($codeStructure);
$stream = fopen('php://memory','r+');
$this->setLoggerStream($stream);
$this->setLoggerStream($stream, $verbose);
$this->importService->import($service, $etablissement, $sourceCode, $queryParams);
......@@ -165,15 +167,17 @@ class ImportController extends AbstractActionController
* des données obtenues avec les tables destinations.
*
* @return ViewModel
* @throws StructureNotFoundException
*/
public function importAllAction()
{
$codeStructure = $this->params('etablissement'); // ex: 'UCN'
$verbose = (bool) $this->params('verbose', 0);
$etablissement = $this->fetchEtablissementByCodeStructure($codeStructure);
$stream = fopen('php://memory','r+');
$this->setLoggerStream($stream);
$this->setLoggerStream($stream, $verbose);
$this->importService->importAll($etablissement);
......@@ -196,6 +200,7 @@ class ImportController extends AbstractActionController
{
$codeEtablissement = $this->params('etablissement');
$sourceCodeThese = $this->params('source_code');
$verbose = (bool) $this->params('verbose', 0);
if (! $sourceCodeThese) {
throw new LogicException("Le source code de la thèse est requis");
......@@ -210,7 +215,7 @@ class ImportController extends AbstractActionController
}
$stream = fopen('php://memory','r+');
$this->setLoggerStream($stream);
$this->setLoggerStream($stream, $verbose);
$this->importService->updateThese($these);
......@@ -226,6 +231,9 @@ class ImportController extends AbstractActionController
]);
}
/**
* @throws StructureNotFoundException
*/
public function importConsoleAction()
{
$service = $this->params('service');
......@@ -233,8 +241,9 @@ class ImportController extends AbstractActionController
$sourceCode = $this->params('source-code');
$synchronize = (bool) $this->params('synchronize', 1);
$emName = $this->params('em', 'orm_default');
$verbose = (bool) $this->params('verbose', 0);
$this->setLoggerStream('php://output');
$this->setLoggerStream('php://output', $verbose);
$etablissement = $this->fetchEtablissementByCodeStructure($codeStructure);
......@@ -254,16 +263,20 @@ class ImportController extends AbstractActionController
) . PHP_EOL;
}
/**
* @throws StructureNotFoundException
*/
public function importAllConsoleAction()
{
$codeStructure = $this->params('etablissement'); // ex: 'UCN'
$breakOnServiceNotFound = (bool) $this->params('breakOnServiceNotFound', 1);
$synchronize = (bool) $this->params('synchronize', 1);
$emName = $this->params('em', 'orm_default');
$verbose = (bool) $this->params('verbose', 0);
$etablissement = $this->fetchEtablissementByCodeStructure($codeStructure);
$this->setLoggerStream('php://output');
$this->setLoggerStream('php://output', $verbose);
/** @var EntityManager $entityManager */
$entityManager = $this->getServiceLocator()->get("doctrine.entitymanager.$emName");
......@@ -282,10 +295,11 @@ class ImportController extends AbstractActionController
/**
* @param string|resource $stream
* @param bool $verbose
*/
private function setLoggerStream($stream)
private function setLoggerStream($stream, $verbose = false)
{
$filter = new Priority(Logger::INFO);
$filter = new Priority($verbose ? Logger::DEBUG : Logger::INFO);
$writer = new Stream($stream);
$writer->addFilter($filter);
......
......@@ -123,9 +123,7 @@ return [
'action' => [
'telecharger',
],
'privileges' => [
FichierPrivileges::FICHIER_DIVERS_TELECHARGER,
]
'role' => [],
],
],
],
......
......@@ -136,10 +136,10 @@ class NotifierService
$mail = $this->mailerService->createNewMessage($html, $subject);
$mail->setTo($to);
if ($cc) {
if ($cc AND $cc !== []) {
$mail->setCc($cc);
}
if ($bcc) {
if ($bcc AND $bcc !== []) {
$mail->setBcc($bcc);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment