Skip to content
Snippets Groups Projects
Commit a0f02316 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Merge branch 'release_6.0.1'

parents 79ece43d 48a6776d
Branches
Tags
No related merge requests found
Pipeline #21681 passed
Showing
with 55 additions and 31 deletions
Journal des modifications
=========================
6.0.1
-----
- [FIX] Module Formation : mauvais éléments de formulaire pour la date et les horaires, empêchant de créer/modifier une séance.
- [FIX] Module StepStar : erreur dans l'extraction du mail du doctorant.
6.0.0
-----
- Passage à PHP 8.0
......
......@@ -39,5 +39,12 @@ fi
echo
TAG="cron-${ETAB}-$(date +%Y%m%d_%H%M%S)"
echo "> Envoi des theses ${ETAB} soutenues depuis moins d'un mois..."
/usr/bin/php ${APP_DIR}/public/index.php step-star:envoyer-theses --etat S --etablissement ${ETAB} --tag ${TAG} --date-soutenance-min P1M
echo
echo
echo "> Envoi des theses ${ETAB} en cours..."
/usr/bin/php ${APP_DIR}/public/index.php step-star:envoyer-theses --etat E --etablissement ${ETAB} --tag ${TAG}
echo
......@@ -3,9 +3,10 @@
namespace Formation\Form\Seance;
use Laminas\Form\Element\Button;
use Laminas\Form\Element\DateTime;
use Laminas\Form\Element\Date;
use Laminas\Form\Element\Text;
use Laminas\Form\Element\Textarea;
use Laminas\Form\Element\Time;
use Laminas\Form\Form;
use Laminas\InputFilter\Factory;
......@@ -16,14 +17,14 @@ class SeanceForm extends Form {
//jour
$this->add([
'name' => 'date',
'type' => DateTime::class,
'type' => Date::class,
'options' => [
'label' => "Date de la séance de formation <span class='icon icon-star' style='color: darkred;' title='Obligatoire'></span> :",
'label_options' => [ 'disable_html_escape' => true, ],
'label_attributes' => [
'class' => 'control-label',
],
'format' => 'd/m/Y',
'format' => 'Y-m-d',
],
'attributes' => [
'id' => 'date',
......@@ -33,7 +34,7 @@ class SeanceForm extends Form {
//debut
$this->add([
'name' => 'debut',
'type' => DateTime::class,
'type' => Time::class,
'options' => [
'label' => "Début de la séance <span class='icon icon-star' style='color: darkred;' title='Obligatoire'></span> :",
'label_options' => [ 'disable_html_escape' => true, ],
......@@ -50,7 +51,7 @@ class SeanceForm extends Form {
//fin
$this->add([
'name' => 'fin',
'type' => DateTime::class,
'type' => Time::class,
'options' => [
'label' => "Fin de la séance <span class='icon icon-star' style='color: darkred;' title='Obligatoire'></span> :",
'label_options' => [ 'disable_html_escape' => true, ],
......
......@@ -4,9 +4,15 @@ namespace Formation\Form\Seance;
use DateTime;
use Formation\Entity\Db\Seance;
use Laminas\Hydrator\HydratorInterface;
use Laminas\Hydrator\AbstractHydrator;
use Laminas\Hydrator\Strategy\DateTimeFormatterStrategy;
class SeanceHydrator implements HydratorInterface {
class SeanceHydrator extends AbstractHydrator
{
public function __construct()
{
$this->addStrategy('date', new DateTimeFormatterStrategy('Y-m-d'));
}
/**
* @param Seance $object
......@@ -14,14 +20,13 @@ class SeanceHydrator implements HydratorInterface {
*/
public function extract($object): array
{
$data = [
'date' => ($object->getDebut() !== null)?$object->getDebut()->format('d/m/Y'):null,
return [
'date' => ($object->getDebut() !== null)?$this->getStrategy('date')->extract($object->getDebut()):null,
'debut' => ($object->getDebut() !== null)?$object->getDebut()->format('H:i'):null,
'fin' => ($object->getFin() !== null)?$object->getFin()->format('H:i'):null,
'lieu' => ($object->getLieu() !== null)?$object->getLieu():null,
'description' => ($object->getDescription() !== null)?$object->getDescription():null,
];
return $data;
}
/**
......@@ -37,13 +42,14 @@ class SeanceHydrator implements HydratorInterface {
$lieu = (isset($data['lieu']) AND trim($data['lieu']) !== '')?trim($data['lieu']):null;
$description = (isset($data['description']) AND trim($data['description']) !== '')?trim($data['description']):null;
$date_debut = ($date AND $debut)? DateTime::createFromFormat('d/m/Y H:i', $date .' '.$debut):null;
$date_fin = ($date AND $debut)? DateTime::createFromFormat('d/m/Y H:i', $date .' '.$fin):null;
$date_debut = ($date AND $debut)? DateTime::createFromFormat('Y-m-d H:i', $date .' '.$debut):null;
$date_fin = ($date AND $debut)? DateTime::createFromFormat('Y-m-d H:i', $date .' '.$fin):null;
$object->setDebut($date_debut);
$object->setFin($date_fin);
$object->setLieu($lieu);
$object->setDescription($description);
return $object;
}
......
......@@ -246,11 +246,15 @@ class PropositionController extends AbstractController
$request = $this->getRequest();
if ($request->isPost()) {
$data = $request->getPost();
$form->setData($data);
if ($form->isValid()) {
$this->update($request, $form, $proposition);
$this->getHorodatageService()->addHorodatage($proposition, HorodatageService::TYPE_MODIFICATION, "Date et lieu");
$this->getPropositionService()->initialisationDateRetour($proposition);
if (!$this->isAllowed($these, PropositionPrivileges::PROPOSITION_MODIFIER_GESTION)) $this->getPropositionService()->annulerValidationsForProposition($proposition);
}
}
$vm = new ViewModel();
$vm->setTemplate('soutenance/default/default-form');
......
......@@ -3,7 +3,7 @@
namespace Soutenance\Form\DateLieu;
use Laminas\Form\Element\Button;
use Laminas\Form\Element\DateTime;
use Laminas\Form\Element\Date;
use Laminas\Form\Element\Time;
use Laminas\Form\Element\Radio;
use Laminas\Form\Element\Text;
......@@ -16,13 +16,12 @@ class DateLieuForm extends Form {
public function init()
{
$this->add([
'name' => 'date',
'type' => DateTime::class,
'type' => Date::class,
'options' => [
'label' => 'Date de la soutenance : ',
'format' => 'd/m/Y',
'format' => 'Y-m-d',
],
'attributes' => [
//'min' => $twomonth->format('Y-m-d'),
......@@ -84,7 +83,7 @@ class DateLieuForm extends Form {
Callback::INVALID_VALUE => "La date de soutenance est dans le passé ! ",
],
'callback' => function ($value) {
$sdate = DDateTime::createFromFormat('d/m/Y', $value);
$sdate = DDateTime::createFromFormat('Y-m-d', $value);
$cdate = new DDateTime();
$res = $sdate >= $cdate;
return $res;
......
......@@ -15,7 +15,7 @@ class DateLieuHydrator implements HydratorInterface
*/
public function hydrate(array $data, $proposition) {
$date = DateTime::createFromFormat("d/m/Y H:i", $data['date'].' '.$data['heure']);
$date = DateTime::createFromFormat("Y-m-d H:i", $data['date'].' '.$data['heure']);
$proposition->setDate($date);
$proposition->setLieu($data['lieu']);
$proposition->setExterieur($data['exterieur']);
......@@ -34,7 +34,7 @@ class DateLieuHydrator implements HydratorInterface
$date = '';
$heure = '';
if ($datetime) {
$date = $datetime->format("d/m/Y");
$date = $datetime->format("Y-m-d");
$heure = $datetime->format("H:i");
}
......
......@@ -34,8 +34,8 @@ $hasDeclaration= !empty($validations[TypeValidation::CODE_VALIDATION_DECLARATION
$hasAttestation = !empty($attestationsIntegriteScientifique);
$hasSursis = $proposition->hasSursis();
$isDateOk = ((new DateTime())->add(new DateInterval('P2M')) < $proposition->getDate() OR $hasSursis);
$isAllOk = ($hasDeclaration AND $hasAttestation AND $isDateOk AND $isInformationsOk)
$isDateOk = (new DateTime())->add(new DateInterval('P2M')) < $proposition->getDate() || $hasSursis;
$isAllOk = $hasDeclaration && $hasAttestation && $isDateOk && $isInformationsOk;
?>
<div class="box card">
......
......@@ -31,7 +31,8 @@ class EnvoiConsoleController extends AbstractConsoleController
$theses = $this->fetchService->fetchThesesByCriteria($criteria);
if (empty($theses)) {
throw new InvalidArgumentException("Aucune these trouvee avec les criteres specifies");
$this->console->write("Aucune these trouvee avec les criteres specifies.");
exit(0);
}
$this->envoiFacade->setSaveLogs(true);
......@@ -39,6 +40,7 @@ class EnvoiConsoleController extends AbstractConsoleController
/** @var \StepStar\Entity\Db\Log $log */
foreach ($logs as $log) {
$this->console->write("These " . $log->getTheseId());
$this->console->write($log->getLog());
}
}
......
......@@ -100,7 +100,7 @@ class FetchService
{
$qb = $this->theseService->getRepository()->createQueryBuilder('t');
$qb
->addSelect('e, d, di, dip, ed, ur, f, orf, m, rdv, mel, es, eds, urs, a, ai, r')
->addSelect('e, d, di, dip, dimc, ed, ur, f, orf, m, rdv, mel, es, eds, urs, a, ai, r')
->join('t.etablissement', 'e')
->join('t.doctorant', 'd')
->join('d.individu', 'di')
......
......@@ -387,7 +387,7 @@ class XmlService
$contratDoctoral = $this->extractContratDoctoralFromThese($these) ? 'oui' : 'non';
$conventionCifre = $this->extractConventionCifreFromThese($these) ? 'oui' : 'non';
$metadonnees = current($these['metadonnees']) ?: null;
$metadonnees = current($these['metadonnees']) ?: [];
$dateFinConfidentialite = $these['dateFinConfidentialite'] ?? null;
$dateDebutConfidentialite = null;
......@@ -451,9 +451,9 @@ class XmlService
// self::NNT => '2013FOR31234',
// métadonnées
self::TITRE => $metadonnees['titre'] ?: $these['titre'],
self::TITRE => $metadonnees['titre'] ?? $these['titre'],
self::TITRE_LANGUE => $langue = $metadonnees['langue'] ?? 'fr',
self::TITRE_TRADUIT => $metadonnees['titreAutreLangue'],
self::TITRE_TRADUIT => $metadonnees['titreAutreLangue'] ?? null,
self::TITRE_TRADUIT_LANGUE => $langue === 'fr' ? 'en' : 'fr',
self::RESUME_FRANCAIS => $this->sanitizeXML($metadonnees['resume'] ?? ''),
self::RESUME_ANGLAIS => $this->sanitizeXML($metadonnees['resumeAnglais'] ?? ''),
......@@ -645,7 +645,7 @@ class XmlService
private function extractEmailPersoFromThese(array $these): ?string
{
foreach ((array) $these['mailsConfirmations'] as $mailConfirmation) {
foreach ((array) $these['doctorant']['individu']['mailsConfirmations'] as $mailConfirmation) {
if ($mailConfirmation['etat'] === MailConfirmation::CONFIRME) {
return $mailConfirmation['email'];
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment