Browse Source

block éditable

v1
Charly 3 years ago
parent
commit
7c487d8a34
30 changed files with 23420 additions and 11537 deletions
  1. +4
    -5
      assets/app/frontend/scss/about.scss
  2. +2
    -2
      assets/app/frontend/scss/base.scss
  3. +2
    -1
      assets/app/frontend/scss/carto.scss
  4. +2
    -1
      assets/app/frontend/scss/contribuate.scss
  5. +32
    -0
      migrations/Version20210914103716.php
  6. +35
    -0
      migrations/Version20210914113711.php
  7. +31
    -0
      migrations/Version20210914114109.php
  8. +0
    -11198
      public/build/app-frontend.1fba758f.css
  9. +11199
    -0
      public/build/app-frontend.a126fd2d.css
  10. +11199
    -0
      public/build/app-frontend.a5a9506f.css
  11. +13
    -13
      public/build/entrypoints.json
  12. +2
    -2
      public/build/manifest.json
  13. +2
    -2
      public/build/runtime.01c101e5.js
  14. +346
    -0
      public/build/runtime.180b5be2.js
  15. +30
    -0
      src/Controller/Admin/BlockCrudController.php
  16. +3
    -0
      src/Controller/Admin/DashboardController.php
  17. +34
    -1
      src/Controller/Frontend/AboutController.php
  18. +56
    -43
      src/Controller/Frontend/CartoController.php
  19. +12
    -1
      src/Controller/Frontend/ContribuateController.php
  20. +22
    -1
      src/Controller/Frontend/HomeController.php
  21. +86
    -0
      src/Entity/Block.php
  22. +1
    -1
      src/Entity/Territory.php
  23. +21
    -0
      src/Repository/BlockRepository.php
  24. +15
    -0
      src/Repository/BlockRepositoryQuery.php
  25. +34
    -0
      src/Repository/BlockStore.php
  26. +136
    -151
      templates/frontend/about.html.twig
  27. +24
    -25
      templates/frontend/carto.html.twig
  28. +22
    -28
      templates/frontend/contribuate.html.twig
  29. +50
    -62
      templates/frontend/home.html.twig
  30. +5
    -0
      translations/admin.fr.yaml

+ 4
- 5
assets/app/frontend/scss/about.scss View File

@@ -60,16 +60,15 @@
font-size: 40px;
}

p {
.description {
font-size: 17px;
}

.other-startup {
color: $green;
color: $orange;
font-size: 20px;
display: inline-block;
margin-top: 20px;
margin-bottom: 30px;
font-weight: bold;
margin-bottom: 100px;
}
@@ -122,7 +121,7 @@
margin-top: 30px;
}

p {
.description {
width: 80%;
display: inline-block;
}
@@ -245,7 +244,7 @@
font-size: 40px;
}

p {
.description {
margin-top: 50px;
}


+ 2
- 2
assets/app/frontend/scss/base.scss View File

@@ -7,11 +7,11 @@ img {
max-height: 100%;
}

li, p, a, select, option {
li, p, a, select, option, .description {
font-family: FranklinGothic;
}

p {
p, .description {
font-size: 20px;
}


+ 2
- 1
assets/app/frontend/scss/carto.scss View File

@@ -22,11 +22,12 @@
margin-bottom: 30px;
}

p {
.description {
color: $orange;
font-style: italic;
font-size: 20px;
margin-bottom: 50px;
font-family: FranklinGothic;
}

.bloc-contrib {

+ 2
- 1
assets/app/frontend/scss/contribuate.scss View File

@@ -22,11 +22,12 @@
margin-bottom: 30px;
}

p {
.description {
color: $orange;
font-style: italic;
font-size: 20px;
margin-bottom: 50px;
font-family: FranklinGothic;
}

.carto-dream {

+ 32
- 0
migrations/Version20210914103716.php View File

@@ -0,0 +1,32 @@
<?php

declare(strict_types=1);

namespace DoctrineMigrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;

/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20210914103716 extends AbstractMigration
{
public function getDescription(): string
{
return '';
}

public function up(Schema $schema): void
{
// this up() migration is auto-generated, please modify it to your needs
$this->addSql('CREATE TABLE block (id INT AUTO_INCREMENT NOT NULL, page_id INT DEFAULT NULL, dev_alias VARCHAR(255) NOT NULL, title VARCHAR(255) NOT NULL, description LONGTEXT DEFAULT NULL, INDEX IDX_831B9722C4663E4 (page_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
$this->addSql('ALTER TABLE block ADD CONSTRAINT FK_831B9722C4663E4 FOREIGN KEY (page_id) REFERENCES page (id)');
}

public function down(Schema $schema): void
{
// this down() migration is auto-generated, please modify it to your needs
$this->addSql('DROP TABLE block');
}
}

+ 35
- 0
migrations/Version20210914113711.php View File

@@ -0,0 +1,35 @@
<?php

declare(strict_types=1);

namespace DoctrineMigrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;

/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20210914113711 extends AbstractMigration
{
public function getDescription(): string
{
return '';
}

public function up(Schema $schema): void
{
// this up() migration is auto-generated, please modify it to your needs
$this->addSql('ALTER TABLE block DROP FOREIGN KEY FK_831B9722C4663E4');
$this->addSql('DROP INDEX IDX_831B9722C4663E4 ON block');
$this->addSql('ALTER TABLE block DROP page_id');
}

public function down(Schema $schema): void
{
// this down() migration is auto-generated, please modify it to your needs
$this->addSql('ALTER TABLE block ADD page_id INT DEFAULT NULL');
$this->addSql('ALTER TABLE block ADD CONSTRAINT FK_831B9722C4663E4 FOREIGN KEY (page_id) REFERENCES page (id)');
$this->addSql('CREATE INDEX IDX_831B9722C4663E4 ON block (page_id)');
}
}

+ 31
- 0
migrations/Version20210914114109.php View File

@@ -0,0 +1,31 @@
<?php

declare(strict_types=1);

namespace DoctrineMigrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;

/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20210914114109 extends AbstractMigration
{
public function getDescription(): string
{
return '';
}

public function up(Schema $schema): void
{
// this up() migration is auto-generated, please modify it to your needs
$this->addSql('ALTER TABLE block ADD status DOUBLE PRECISION NOT NULL');
}

public function down(Schema $schema): void
{
// this down() migration is auto-generated, please modify it to your needs
$this->addSql('ALTER TABLE block DROP status');
}
}

+ 0
- 11198
public/build/app-frontend.1fba758f.css
File diff suppressed because it is too large
View File


+ 11199
- 0
public/build/app-frontend.a126fd2d.css
File diff suppressed because it is too large
View File


+ 11199
- 0
public/build/app-frontend.a5a9506f.css
File diff suppressed because it is too large
View File


+ 13
- 13
public/build/entrypoints.json View File

@@ -2,7 +2,7 @@
"entrypoints": {
"adminlte-plugins": {
"js": [
"/build/runtime.564e1eda.js",
"/build/runtime.01c101e5.js",
"/build/vendors-node_modules_core-js_internals_export_js.a0c0cb57.js",
"/build/vendors-node_modules_core-js_modules_es_string_replace_js.06749256.js",
"/build/vendors-node_modules_core-js_modules_es_array_find_js.5b9cb885.js",
@@ -17,7 +17,7 @@
},
"adminlte-index": {
"js": [
"/build/runtime.564e1eda.js",
"/build/runtime.01c101e5.js",
"/build/vendors-node_modules_core-js_internals_export_js.a0c0cb57.js",
"/build/vendors-node_modules_core-js_modules_es_string_replace_js.06749256.js",
"/build/vendors-node_modules_core-js_modules_es_array_find_js.5b9cb885.js",
@@ -30,7 +30,7 @@
},
"adminlte-form": {
"js": [
"/build/runtime.564e1eda.js",
"/build/runtime.01c101e5.js",
"/build/vendors-node_modules_core-js_internals_export_js.a0c0cb57.js",
"/build/vendors-node_modules_core-js_modules_es_array_find_js.5b9cb885.js",
"/build/adminlte-form.4079807b.js"
@@ -41,7 +41,7 @@
},
"adminlte-sort": {
"js": [
"/build/runtime.564e1eda.js",
"/build/runtime.01c101e5.js",
"/build/vendors-node_modules_core-js_internals_export_js.a0c0cb57.js",
"/build/vendors-node_modules_core-js_modules_es_string_replace_js.06749256.js",
"/build/vendors-node_modules_core-js_modules_es_array_find_js.5b9cb885.js",
@@ -55,7 +55,7 @@
},
"adminlte-field-filemanager": {
"js": [
"/build/runtime.564e1eda.js",
"/build/runtime.01c101e5.js",
"/build/vendors-node_modules_core-js_internals_export_js.a0c0cb57.js",
"/build/adminlte-field-filemanager.d8302fb7.js"
],
@@ -65,7 +65,7 @@
},
"adminlte-field-collection": {
"js": [
"/build/runtime.564e1eda.js",
"/build/runtime.01c101e5.js",
"/build/vendors-node_modules_core-js_internals_export_js.a0c0cb57.js",
"/build/vendors-node_modules_core-js_modules_es_string_replace_js.06749256.js",
"/build/vendors-node_modules_core-js_modules_es_array_find_js.5b9cb885.js",
@@ -79,7 +79,7 @@
},
"adminlte-main": {
"js": [
"/build/runtime.564e1eda.js",
"/build/runtime.01c101e5.js",
"/build/vendors-node_modules_core-js_internals_export_js.a0c0cb57.js",
"/build/vendors-node_modules_core-js_modules_es_string_replace_js.06749256.js",
"/build/adminlte-main.e8feeffc.js"
@@ -90,7 +90,7 @@
},
"sov-reminder": {
"js": [
"/build/runtime.564e1eda.js",
"/build/runtime.01c101e5.js",
"/build/sov-reminder.27580486.js"
],
"css": [
@@ -99,13 +99,13 @@
},
"sov-ticket": {
"js": [
"/build/runtime.564e1eda.js",
"/build/runtime.01c101e5.js",
"/build/sov-ticket.df76c7a0.js"
]
},
"app-backend": {
"js": [
"/build/runtime.564e1eda.js",
"/build/runtime.01c101e5.js",
"/build/vendors-node_modules_core-js_internals_export_js.a0c0cb57.js",
"/build/vendors-node_modules_core-js_modules_es_array_find_js.5b9cb885.js",
"/build/app-backend.9246973d.js"
@@ -116,7 +116,7 @@
},
"app-frontend": {
"js": [
"/build/runtime.564e1eda.js",
"/build/runtime.01c101e5.js",
"/build/vendors-node_modules_core-js_internals_export_js.a0c0cb57.js",
"/build/vendors-node_modules_core-js_modules_es_string_replace_js.06749256.js",
"/build/vendors-node_modules_jquery_src_jquery_js.2a8ff255.js",
@@ -125,12 +125,12 @@
"/build/app-frontend.212543dd.js"
],
"css": [
"/build/app-frontend.1fba758f.css"
"/build/app-frontend.a126fd2d.css"
]
},
"app-bulle": {
"js": [
"/build/runtime.564e1eda.js",
"/build/runtime.01c101e5.js",
"/build/vendors-node_modules_amcharts_amcharts4_charts_js-node_modules_amcharts_amcharts4_core_js-nod-e7c189.7a170faa.js",
"/build/app-bulle.08404383.js"
]

+ 2
- 2
public/build/manifest.json View File

@@ -17,10 +17,10 @@
"build/sov-ticket.js": "/build/sov-ticket.df76c7a0.js",
"build/app-backend.css": "/build/app-backend.3d882954.css",
"build/app-backend.js": "/build/app-backend.9246973d.js",
"build/app-frontend.css": "/build/app-frontend.1fba758f.css",
"build/app-frontend.css": "/build/app-frontend.a126fd2d.css",
"build/app-frontend.js": "/build/app-frontend.212543dd.js",
"build/app-bulle.js": "/build/app-bulle.08404383.js",
"build/runtime.js": "/build/runtime.564e1eda.js",
"build/runtime.js": "/build/runtime.01c101e5.js",
"build/pdfmake.js": "/build/pdfmake.fbf70324.js",
"build/canvg.js": "/build/canvg.5e04b23d.js",
"build/xlsx.js": "/build/xlsx.05855660.js",

public/build/runtime.01c101e5.js
File diff suppressed because it is too large
View File


+ 346
- 0
public/build/runtime.180b5be2.js
File diff suppressed because it is too large
View File


+ 30
- 0
src/Controller/Admin/BlockCrudController.php View File

@@ -0,0 +1,30 @@
<?php

namespace App\Controller\Admin;

use App\Entity\Block;
use Lc\SovBundle\Controller\AbstractAdminController as AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextEditorField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use Lc\SovBundle\Field\StatusField;

class BlockCrudController extends AbstractCrudController
{
public static function getEntityFqcn(): string
{
return Block::class;
}

public function configureFields(string $pageName): iterable
{
if ($this->isGranted("ROLE_SUPER_ADMIN")) {
$fields[] = TextField::new('devAlias');
}

$fields[] = TextField::new('title')->setLabel('Titre');
$fields[] = TextEditorField::new('description')->setLabel('Description')->hideOnIndex();
$fields[] = StatusField::new('status');

return $fields;
}
}

+ 3
- 0
src/Controller/Admin/DashboardController.php View File

@@ -3,6 +3,7 @@
namespace App\Controller\Admin;


use App\Entity\Block;
use App\Entity\CollectifData;
use App\Entity\Configuration;
use App\Entity\Dream;
@@ -164,6 +165,8 @@ class DashboardController extends SovDashboardController
->setPermission(self::ROLE_SUPER_ADMIN),
MenuItem::linkToCrud('page', 'far fa-copy', Page::class)
->setPermission(self::ROLE_ADMIN),
MenuItem::linkToCrud('blocs', 'fas fa-tags', Block::class)
->setPermission(self::ROLE_ADMIN),
];

/*$this->setMenuIndexes($menuItems);*/

+ 34
- 1
src/Controller/Frontend/AboutController.php View File

@@ -2,10 +2,43 @@

namespace App\Controller\Frontend;

use App\Repository\BlockStore;
use Doctrine\ORM\EntityManagerInterface;

class AboutController extends DefaultController
{
protected BlockStore $blockStore;

public function __construct(
EntityManagerInterface $em,
BlockStore $blockStore
) {
$this->blockStore = $blockStore;
parent::__construct($em);
}

public function about()
{
return $this->render('frontend/about.html.twig');
$blockStartUp = $this->blockStore->getOneOnlineByDevAlias('about-startup');
$blockStep1 = $this->blockStore->getOneOnlineByDevAlias('about-step1');
$blockStep2 = $this->blockStore->getOneOnlineByDevAlias('about-step2');
$blockStep3 = $this->blockStore->getOneOnlineByDevAlias('about-step3');
$blockLabourage = $this->blockStore->getOneOnlineByDevAlias('about-labourage');
$blockRecolt = $this->blockStore->getOneOnlineByDevAlias('about-recolt');
$blockAccompagnement = $this->blockStore->getOneOnlineByDevAlias('about-accompagnement');
$blockDemarche = $this->blockStore->getOneOnlineByDevAlias('about-demarche');
$blockCoeur = $this->blockStore->getOneOnlineByDevAlias('about-coeur');

return $this->render('frontend/about.html.twig', [
'blockStartUp' => $blockStartUp,
'blockStep1' => $blockStep1,
'blockStep2' => $blockStep2,
'blockStep3' => $blockStep3,
'blockLabourage' => $blockLabourage,
'blockRecolt' => $blockRecolt,
'blockAccompagnement' => $blockAccompagnement,
'blockDemarche' => $blockDemarche,
'blockCoeur' => $blockCoeur,
]);
}
}

+ 56
- 43
src/Controller/Frontend/CartoController.php View File

@@ -4,6 +4,7 @@ namespace App\Controller\Frontend;

use App\Entity\AbstractData;
use App\Form\SearchListForm;
use App\Repository\BlockStore;
use App\Repository\DreamStore;
use App\Repository\ProjectBoostStore;
use App\Repository\ProjectInspiringStore;
@@ -31,6 +32,7 @@ class CartoController extends DefaultController
protected ProjectInspiringStore $projectInspiringStore;
protected TerritoryStore $territoryStore;
protected ThematicStore $thematicStore;
protected BlockStore $blockStore;
protected PaginatorInterface $paginator;
protected Environment $templating;
protected ParameterBagInterface $parameterBag;
@@ -43,6 +45,7 @@ class CartoController extends DefaultController
ProjectInspiringStore $projectInspiringStore,
TerritoryStore $territoryStore,
ThematicStore $thematicStore,
BlockStore $blockStore,
PaginatorInterface $paginator,
Environment $templating,
ParameterBagInterface $parameterBag
@@ -54,6 +57,7 @@ class CartoController extends DefaultController
$this->projectInspiringStore = $projectInspiringStore;
$this->territoryStore = $territoryStore;
$this->thematicStore = $thematicStore;
$this->blockStore = $blockStore;
$this->paginator = $paginator;
$this->templating = $templating;
$this->parameterBag = $parameterBag;
@@ -61,9 +65,12 @@ class CartoController extends DefaultController

public function cartoInteractive()
{
$blockCartoInt = $this->blockStore->getOneOnlineByDevAlias('carto-int');

return $this->render(
'frontend/carto-int.html.twig',
[
'blockCartoInt' => $blockCartoInt,
'nbContrib' => $this->countContrib()
]
);
@@ -71,6 +78,8 @@ class CartoController extends DefaultController

public function cartoListe(Request $request)
{
$blockCartoInt = $this->blockStore->getOneOnlineByDevAlias('carto-int');

$resultArrayPagination = array();
$form = $this->createForm(SearchListForm::class, null, [
'method' => 'GET',
@@ -101,7 +110,53 @@ class CartoController extends DefaultController
[
'form' => $form->createView(),
'nbContrib' => $this->countContrib(),
'resultArray' => $resultArrayPagination
'resultArray' => $resultArrayPagination,
'blockCartoInt' => $blockCartoInt,
]
);
}

public function cartoCarte()
{
$blockCartoInt = $this->blockStore->getOneOnlineByDevAlias('carto-int');

$resultArray = $this->generateAllResultArray();
$resultSortArray = array();
$territoryArray = $this->territoryStore->get();

foreach ($territoryArray as $territory) {
$resultSortArray[$territory->getDevAlias()] =
[
AbstractData::TERRITORY => "",
AbstractData::CATEGORY_REVOLT => "0",
AbstractData::CATEGORY_DREAM => "0",
AbstractData::CATEGORY_PROJECTBOOST => "0",
AbstractData::CATEGORY_PROJECTINSPIRING => "0",
];
}

foreach ($resultArray as $result) {
$className = (new ReflectionClass($result))->getShortName();
if ($result->getIndividualData()) {
$devAliasTerritory = $result->getIndividualData()->getTerritory()->getDevAlias();
$idTerritory = $result->getIndividualData()->getTerritory()->getId();
} elseif ($result->getCollectifData()->getTerritory()) {
$devAliasTerritory = $result->getCollectifData()->getTerritory()->getDevAlias();
$idTerritory = $result->getCollectifData()->getTerritory()->getId();
}

if (empty($resultSortArray[$devAliasTerritory][AbstractData::TERRITORY])) {
$resultSortArray[$devAliasTerritory][AbstractData::TERRITORY] = $idTerritory;
}
$resultSortArray[$devAliasTerritory][$className] = $resultSortArray[$devAliasTerritory][$className] + 1;
}

return $this->render(
'frontend/carto-carte.html.twig',
[
'resultSortArray' => $resultSortArray,
'nbContrib' => $this->countContrib(),
'blockCartoInt' => $blockCartoInt,
]
);
}
@@ -190,48 +245,6 @@ class CartoController extends DefaultController
return array_merge($dreamArray, $revoltArray, $projectBoostArray, $projectInspiringArray);
}

public function cartoCarte()
{
$resultArray = $this->generateAllResultArray();
$resultSortArray = array();
$territoryArray = $this->territoryStore->get();

foreach ($territoryArray as $territory) {
$resultSortArray[$territory->getDevAlias()] =
[
AbstractData::TERRITORY => "",
AbstractData::CATEGORY_REVOLT => "0",
AbstractData::CATEGORY_DREAM => "0",
AbstractData::CATEGORY_PROJECTBOOST => "0",
AbstractData::CATEGORY_PROJECTINSPIRING => "0",
];
}

foreach ($resultArray as $result) {
$className = (new ReflectionClass($result))->getShortName();
if ($result->getIndividualData()) {
$devAliasTerritory = $result->getIndividualData()->getTerritory()->getDevAlias();
$idTerritory = $result->getIndividualData()->getTerritory()->getId();
} elseif ($result->getCollectifData()->getTerritory()) {
$devAliasTerritory = $result->getCollectifData()->getTerritory()->getDevAlias();
$idTerritory = $result->getCollectifData()->getTerritory()->getId();
}

if (empty($resultSortArray[$devAliasTerritory][AbstractData::TERRITORY])) {
$resultSortArray[$devAliasTerritory][AbstractData::TERRITORY] = $idTerritory;
}
$resultSortArray[$devAliasTerritory][$className] = $resultSortArray[$devAliasTerritory][$className] + 1;
}

return $this->render(
'frontend/carto-carte.html.twig',
[
'resultSortArray' => $resultSortArray,
'nbContrib' => $this->countContrib()
]
);
}

public function exportPdf($resultArray = array())
{
// Configure Dompdf according to your needs

+ 12
- 1
src/Controller/Frontend/ContribuateController.php View File

@@ -5,15 +5,25 @@ namespace App\Controller\Frontend;

use App\Entity\IndividualData;
use App\Form\IndividualDataForm;
use App\Repository\BlockStore;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class ContribuateController extends DefaultController
{
public function __construct(
EntityManagerInterface $em,
BlockStore $blockStore
) {
$this->blockStore = $blockStore;
parent::__construct($em);
}

public function contribuate(Request $request, EntityManagerInterface $entityManager): Response
{
$blockContrib = $this->blockStore->getOneOnlineByDevAlias('contribution-individuel');

$individualData = new IndividualData();
$form = $this->createForm(IndividualDataForm::class, $individualData, ["context" => "frontend"]);

@@ -29,7 +39,8 @@ class ContribuateController extends DefaultController
'frontend/contribuate.html.twig',
[
'nbContrib' => $this->countContrib(),
'form' => $form->createView()
'form' => $form->createView(),
'blockContrib' => $blockContrib,
]
);
}

+ 22
- 1
src/Controller/Frontend/HomeController.php View File

@@ -3,10 +3,31 @@
namespace App\Controller\Frontend;


use App\Repository\BlockStore;
use Doctrine\ORM\EntityManagerInterface;

class HomeController extends DefaultController
{
protected BlockStore $blockStore;

public function __construct(
EntityManagerInterface $em,
BlockStore $blockStore
) {
$this->blockStore = $blockStore;
parent::__construct($em);
}

public function home()
{
return $this->render('frontend/home.html.twig');
$blockCarto = $this->blockStore->getOneOnlineByDevAlias('home-carto');
$blockPlanisphere = $this->blockStore->getOneOnlineByDevAlias('home-planisphere');
$blockRessourcerie = $this->blockStore->getOneOnlineByDevAlias('home-ressourcerie');

return $this->render('frontend/home.html.twig', [
'blockCarto' => $blockCarto,
'blockPlanisphere' => $blockPlanisphere,
'blockRessourcerie' => $blockRessourcerie,
]);
}
}

+ 86
- 0
src/Entity/Block.php View File

@@ -0,0 +1,86 @@
<?php

namespace App\Entity;

use App\Repository\BlockRepository;
use Doctrine\ORM\Mapping as ORM;
use Lc\SovBundle\Doctrine\EntityInterface;
use Lc\SovBundle\Doctrine\Extension\StatusInterface;
use Lc\SovBundle\Doctrine\Extension\StatusTrait;

/**
* @ORM\Entity(repositoryClass=BlockRepository::class)
*/
class Block implements EntityInterface, StatusInterface
{
use StatusTrait;

/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;

/**
* @ORM\Column(type="string", length=255)
*/
private $devAlias;

/**
* @ORM\Column(type="string", length=255)
*/
private $title;

/**
* @ORM\Column(type="text", nullable=true)
*/
private $description;


public function __toString()
{
return $this->title;
}

public function getId(): ?int
{
return $this->id;
}

public function getDevAlias(): ?string
{
return $this->devAlias;
}

public function setDevAlias(string $devAlias): self
{
$this->devAlias = $devAlias;

return $this;
}

public function getTitle(): ?string
{
return $this->title;
}

public function setTitle(string $title): self
{
$this->title = $title;

return $this;
}

public function getDescription(): ?string
{
return $this->description;
}

public function setDescription(?string $description): self
{
$this->description = $description;

return $this;
}
}

+ 1
- 1
src/Entity/Territory.php View File

@@ -67,7 +67,7 @@ class Territory implements EntityInterface, DevAliasInterface
return $this;
}

public function getIndividualData(): ?IndividualData
public function getIndividualData(): ?Collection
{
return $this->individualData;
}

+ 21
- 0
src/Repository/BlockRepository.php View File

@@ -0,0 +1,21 @@
<?php

namespace App\Repository;

use App\Entity\Block;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;

/**
* @method Block|null find($id, $lockMode = null, $lockVersion = null)
* @method Block|null findOneBy(array $criteria, array $orderBy = null)
* @method Block[] findAll()
* @method Block[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class BlockRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Block::class);
}
}

+ 15
- 0
src/Repository/BlockRepositoryQuery.php View File

@@ -0,0 +1,15 @@
<?php

namespace App\Repository;

use Knp\Component\Pager\PaginatorInterface;
use Lc\SovBundle\Repository\AbstractRepositoryQuery;
use Lc\SovBundle\Repository\RepositoryQueryInterface;

class BlockRepositoryQuery extends AbstractRepositoryQuery implements RepositoryQueryInterface
{
public function __construct(BlockRepository $repository, PaginatorInterface $paginator)
{
parent::__construct($repository, 'r', $paginator);
}
}

+ 34
- 0
src/Repository/BlockStore.php View File

@@ -0,0 +1,34 @@
<?php

namespace App\Repository;


use Lc\SovBundle\Repository\AbstractStore;
use Lc\SovBundle\Repository\RepositoryQueryInterface;
use Lc\SovBundle\Repository\StoreInterface;

class BlockStore extends AbstractStore implements StoreInterface
{

public function __construct(BlockRepositoryQuery $query)
{
$this->query = $query;
}

public function orderByDefault(RepositoryQueryInterface $query): RepositoryQueryInterface
{
$query->orderBy('id');
return $query;
}

public function filtersDefault(RepositoryQueryInterface $query): RepositoryQueryInterface
{
return $query;
}

public function relationsDefault(RepositoryQueryInterface $query): RepositoryQueryInterface
{
return $query;
}

}

+ 136
- 151
templates/frontend/about.html.twig View File

@@ -25,30 +25,31 @@
</div>
<div class="row">
<div class="col-3">
<a class="download-plaq" target="_blank" href="https://www.aux-actes-citoyens.fr/assets/pdf/AAC-Fiche-Pratique-Aux-Actes-Citoyens.pdf" title="Télécharger la plaquette">Télécharger la plaquette</a>
<a class="download-plaq" target="_blank"
href="https://www.aux-actes-citoyens.fr/assets/pdf/AAC-Fiche-Pratique-Aux-Actes-Citoyens.pdf"
title="Télécharger la plaquette">Télécharger la plaquette</a>
</div>
</div>
</div>

<div class="container container-startup">
<div class="row">
<div class="col-6">
<img src="{{ 'assets/img/SUT-A-propos.png' }}" alt="start up">
</div>
<div class="col-6">
<h2>Une démarche labellisée Start Up de Territoire</h2>
<p>
Aux Actes Citoyens est labelissé Start Up de Territoire pour le
Nord Franche-Comté. Cette démarche bénéficie donc du soutient des autres territoires en France,
mais également des
solutions qui ont émergé en France et qui sont inspirantes
pour le territoire.
</p>
<a class="other-startup link-slide" target="_blank" href="http://startupdeterritoire.fr" title="Les autres start up">Découvrir les autres Start Up de
Territoires</a>
{% if blockStartUp %}
<div class="container container-startup">
<div class="row">
<div class="col-6">
<img src="{{ 'assets/img/SUT-A-propos.png' }}" alt="start up">
</div>
<div class="col-6">
<h2>{{ blockStartUp.title }}</h2>
<div class="description">
{{ blockStartUp.description|raw }}
</div>
<a class="other-startup link-slide" target="_blank" href="http://startupdeterritoire.fr"
title="Les autres start up">Découvrir les autres Start Up de
Territoires</a>
</div>
</div>
</div>
</div>
{% endif %}
</div>

<div class="container container-manifeste">
@@ -73,167 +74,151 @@
</div>
</div>
<div class="row row-step">
<div class="col-4">
<img src="{{ 'assets/img/Etape1-Labourage-Blanc.png' }}" alt="Etape1">
<h3>LE LABOURAGE</h3>
<p>
(sept. 2021 à février 2022)
Collecte des besoins, grâce à
des ateliers sur les différents
territoires ainsi qu’une démarche en ligne.
</p>
</div>
<div class="col-4">
<img src="{{ 'assets/img/Etape2-EvenementBlanc.png' }}" alt="Etape2">
<h3>LA RÉCOLTE DES SOLUTIONS</h3>
<p>(avril 2022)
Organisation d’un grand événement à l’échelle du Nord
Franche-Comté pour inventer les
solutions de demain.</p>
</div>
<div class="col-4">
<img src="{{ 'assets/img/Etape3-Accompagnement-Blanc.png' }}" alt="Etape3">
<h3>L’ACCOMPAGNEMENT</h3>
<p>
(à partir de juin 2022)
Compagnonnage des solutions
par un réseau d’acteurs de l’accompagnement.
</p>
</div>
</div>
</div>
</div>

<div id="labourage" class="container container-step1">
<div class="row">
<div class="col-6">
<img class="logo-labourage" src="{{ 'assets/img/Labourage-Img.png' }}" alt="Labourage">
</div>
<div class="col-6">
<h2>
<img class="picto-labourage" src="{{ 'assets/img/Picto-Labourage-Vert.png' }}" alt="Labourage">
Le labourage
</h2>
<p>
Etape permettant de aire émerger “des Révoltes et des
Rêves” pour chaque territoire en se rapprochant d’un
maximum de personnes les plus diverses possibles et
en s’appuyant sur les acteurs en place pour mobiliser et
concerter les publics. L’objectif : faire émerger les thé-
matiques des ateliers de recherche de solutions.
</p>
<a class="participate" href="{{ path('app_contribuate') }}" title="Participer à la concertation">Participer à la concertation</a>
{% if blockStep1 %}
<div class="col-4">
<img src="{{ 'assets/img/Etape1-Labourage-Blanc.png' }}" alt="Etape1">
<h3>{{ blockStep1.title }}</h3>
<div class="description">
{{ blockStep1.description|raw }}
</div>
</div>
{% endif %}
{% if blockStep2 %}
<div class="col-4">
<img src="{{ 'assets/img/Etape2-EvenementBlanc.png' }}" alt="Etape2">
<h3>{{ blockStep2.title }}</h3>
<div class="description">
{{ blockStep2.description|raw }}
</div>
</div>
{% endif %}
{% if blockStep3 %}
<div class="col-4">
<img src="{{ 'assets/img/Etape3-Accompagnement-Blanc.png' }}" alt="Etape3">
<h3>{{ blockStep3.title }}</h3>
<div class="description">
{{ blockStep3.description|raw }}
</div>
</div>
{% endif %}
</div>
</div>
</div>

<div id="recolte" class="bloc-recolte">
<div class="container">
{% if blockLabourage %}
<div id="labourage" class="container container-step1">
<div class="row">
<div class="col-7">
<div class="col-6">
<img class="logo-labourage" src="{{ 'assets/img/Labourage-Img.png' }}" alt="Labourage">
</div>
<div class="col-6">
<h2>
<img class="picto-labourage" src="{{ 'assets/img/Picto-Evenement-Vert.png' }}"
alt="Evenement vert">
La récolte des solutions
<img class="picto-labourage" src="{{ 'assets/img/Picto-Labourage-Vert.png' }}" alt="Labourage">
{{ blockLabourage.title }}
</h2>
<p>
Un événement d’une journée pour faire émerger
des solutions sous forme d’initiatives nouvelles sur
chaque territoire. Au cours de cet événement, des
ateliers rassemblant citoyens, entreprises acteurs de
l’ESS et institutions, pour un territoire qui invente collectivement son avenir.
</p>
<div class="subscribe-event">
{{ macro.email_contact("S'INSCRIRE A L’ÉVÉNEMENT", "S'inscrire à l'événement (La récolte des solutions)") }}
<div class="description">
{{ blockLabourage.description|raw }}
</div>
</div>
<div class="col-5">
<img class="logo-event" src="{{ 'assets/img/Evenement-Img.png' }}" alt="Evenement">
<a class="participate" href="{{ path('app_contribuate') }}" title="Participer à la concertation">Participer
à la concertation</a>
</div>
</div>
</div>
</div>
{% endif %}

<div id="accompagnement" class="container container-ressource">
<div class="row">
<div class="col-5">
<img class="logo-ressource" src="{{ 'assets/img/Ressourcerie-Img.png' }}" alt="Ressourcerie">
</div>

<div class="col-7">
<h2>
<img class="picto-ressource" src="{{ 'assets/img/Picto-Accompagnement-Vert.png' }}"
alt="Accompagnement vert">
L’accompagnement
</h2>
<p>
A partir de juin 2022, toutes les solutions qui ont émergé pourront être accompagné par les acteurs
de l’accompagnement à la création d’entreprise. Vous pourrez
consulter la ressourcerie pour connaître ses acteurs
et bénéficier des ressources facilitant le montage de
projets.
</p>
<div class="contribuate">
{{ macro.email_contact("CONTRIBUER A LA RESSOURCERIE", "Contribuer à la ressourcerie") }}
{% if blockRecolt %}
<div id="recolte" class="bloc-recolte">
<div class="container">
<div class="row">
<div class="col-7">
<h2>
<img class="picto-labourage" src="{{ 'assets/img/Picto-Evenement-Vert.png' }}"
alt="Evenement vert">
{{ blockRecolt.title }}
</h2>
<div class="description">
{{ blockRecolt.description|raw }}
</div>
<div class="subscribe-event">
{{ macro.email_contact("S'INSCRIRE A L’ÉVÉNEMENT", "S'inscrire à l'événement (La récolte des solutions)") }}
</div>
</div>
<div class="col-5">
<img class="logo-event" src="{{ 'assets/img/Evenement-Img.png' }}" alt="Evenement">
</div>
</div>
</div>
</div>
</div>
{% endif %}

<div class="bloc-coop-cit">
<div class="container container-coop">
<div class="row justify-content-center">
<div class="col-7">
<h2>Une démarche portée par la Coopérative des Citoyens...</h2>
</div>
</div>
{% if blockAccompagnement %}
<div id="accompagnement" class="container container-ressource">
<div class="row">
<div class="col-8">
<img class="logo-coop" src="{{ 'assets/img/LaCoop-Img.png' }}" alt="Coopérative des Citoyens">
<div class="col-5">
<img class="logo-ressource" src="{{ 'assets/img/Ressourcerie-Img.png' }}" alt="Ressourcerie">
</div>

<div class="col-4">
<p>
Association d’éducation populaire
et de facilitation en intelligence
collective, la Coopérative des ci-
toyens accompagne les citoyens,
collectivités et acteurs de l’ESS
dans leur pouvoir d’agir et leur
coopération. Basée à Belfort, elle
porte cette initiative avec d’autres
acteurs de l’équipe coeur.
</p>
<a class="more" target="_blank" href="https://www.lacooperativedescitoyens.fr " title="En savoir plus">En savoir plus sur la Coop</a>
<div class="col-7">
<h2>
<img class="picto-ressource" src="{{ 'assets/img/Picto-Accompagnement-Vert.png' }}"
alt="Accompagnement vert">
{{ blockAccompagnement.title }}
</h2>
<div class="description">
{{ blockAccompagnement.description|raw }}
</div>
<div class="contribuate">
{{ macro.email_contact("CONTRIBUER A LA RESSOURCERIE", "Contribuer à la ressourcerie") }}
</div>
</div>
</div>
</div>
{% endif %}

<div id="team-coeur" class="container container-coeur">
<div class="row justify-content-center">
<div class="col-10">
<h2>... et accompagnée par l’équipe cœur</h2>
<div class="bloc-coop-cit">
{% if blockDemarche %}
<div class="container container-coop">
<div class="row justify-content-center">
<div class="col-7">
<h2>{{ blockDemarche.title }}</h2>
</div>
</div>
<div class="col-5">
<p>
Condition essentielle à la réussite de la démarche, un
réseau d’acteurs de l’emploi, de l’insertion, de la transi-
tion écologique et de la création d’entreprises se mobi-
lisent avec nous pour mettre en place cette démarche
unique sur le Nord Franche-Comté. Vous êtes acteurs
impliqués sur le territoire et vous aussi vous souhaitez
participer à la mise en oeuvre de cette concertation,
n’hésitez pas à nous rejoindre !
</p>
<div class="join-coeur">
{{ macro.email_contact("REJOINDRE L’ÉQUIPE CŒUR", "Rejoindre l'équipe coeur") }}
<div class="row">
<div class="col-8">
<img class="logo-coop" src="{{ 'assets/img/LaCoop-Img.png' }}" alt="Coopérative des Citoyens">
</div>

<div class="col-4">
<div class="description">
{{ blockDemarche.description|raw }}
</div>
<a class="more" target="_blank" href="https://www.lacooperativedescitoyens.fr "
title="En savoir plus">En savoir plus sur la Coop</a>
</div>
</div>
<div class="col-5">
<img class="logo-coeur" src="{{ 'assets/img/Equipe-Coeur-Img.png' }}" alt="coeur">
</div>
{% endif %}

{% if blockCoeur %}
<div id="team-coeur" class="container container-coeur">
<div class="row justify-content-center">
<div class="col-10">
<h2>{{ blockCoeur.title }}</h2>
</div>
<div class="col-5">
<div class="description">
{{ blockCoeur.description|raw }}
</div>
<div class="join-coeur">
{{ macro.email_contact("REJOINDRE L’ÉQUIPE CŒUR", "Rejoindre l'équipe coeur") }}
</div>
</div>
<div class="col-5">
<img class="logo-coeur" src="{{ 'assets/img/Equipe-Coeur-Img.png' }}" alt="coeur">
</div>
</div>
</div>
</div>
{% endif %}
</div>

<div class="container container-funded">

+ 24
- 25
templates/frontend/carto.html.twig View File

@@ -9,40 +9,38 @@
{% endblock %}

{% block body %}
<div class="bloc-carto-revo">
<div class="container">
<div class="row">
<div class="col-6">
<h1>La cartographie r<span>ê</span>volutionnaire</h1>
<h2>Partez à la découverte des besoins des citoyens du Nord Franche-Comté !</h2>
<p>Cette cartographie interactive est réalisée grâce à la
consultation sur le terrain et en ligne des citoyens et plus
particulièrement des personnes exclues du débat public,
mais aussi des acteurs institutionnels, du monde éco-
nomique et de l’ESS. Avec 4 thématiques de questions
: leurs révoltes, leurs rêves, les actions existantes qu’ils
aimeraient voir se développer et des actions d’ailleurs qui
les inspirent !</p>
</div>
<div class="col-6">
<img class="perso-aac" src="{{ 'assets/img/Visuel-Cartographie.png' }}" alt="cartographie">
<div class="bloc-contrib">
<div class="nb-contrib">
{{ nbContrib }}
{% if blockCartoInt %}
<div class="bloc-carto-revo">
<div class="container">
<div class="row">
<div class="col-6">
<h1>La cartographie r<span>ê</span>volutionnaire</h1>
<h2>{{ blockCartoInt.title }}</h2>
<div class="description">
{{ blockCartoInt.description|raw }}
</div>
<div class="contrib">
contributions
</div>
<div class="col-6">
<img class="perso-aac" src="{{ 'assets/img/Visuel-Cartographie.png' }}" alt="cartographie">
<div class="bloc-contrib">
<div class="nb-contrib">
{{ nbContrib }}
</div>
<div class="contrib">
contributions
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endif %}

<div class="container bloc-carto">
<div class="row">
<div class="col-4">
<a href="{{ path('app_carto_interactive') }}#carto-int" title="cartographie interactive" class="box-carto">
<a href="{{ path('app_carto_interactive') }}#carto-int" title="cartographie interactive"
class="box-carto">
<div>
<img src="{{ 'assets/img/Picto-Cartographie-Interactive.png' }}" alt="">
</div>
@@ -58,7 +56,8 @@
</a>
</div>
<div class="col-4">
<a href="{{ path('app_carto_carte') }}#carto-carte" title="Une carte du Nord Franche-Comté interactive " class="box-carto">
<a href="{{ path('app_carto_carte') }}#carto-carte" title="Une carte du Nord Franche-Comté interactive "
class="box-carto">
<div>
<img src="{{ 'assets/img/Picto-Carto-Territoire.png' }}" alt="">
</div>

+ 22
- 28
templates/frontend/contribuate.html.twig View File

@@ -9,39 +9,33 @@
{% endblock %}

{% block body %}
<div class="bloc-revolt-dream">
<div class="container">
<div class="row">
<div class="col-6">
<h1>Nos révoltes et nos rêves pour notre territoire</h1>
<h2>Afin de rechercher des solutions concrètes pour ...</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore ma-
gna aliqua. Ut enim ad minim veniam, quis nostrud exer-
citation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in volup-
tate velit esse cillum dolore eu fugiat nu. mco laboris nisi
ut aliquip ex ea commodo consequat. Duis aute irure do-
lor in reprehenderit in voluptate velit esse cillum dolore eu
fugiat nu.</p>
</div>
<div class="col-6">
<img class="carto-dream" src="{{ 'assets/img/Cartographie-Reve.png' }}" alt="cartographie">
<div class="bloc-contrib">
<div class="you-are">
Vous êtes le :
</div>
<div class="nb-contrib">
{{ nbContrib }}
</div>
<div class="contrib">
contributeurs
{% if blockContrib %}
<div class="bloc-revolt-dream">
<div class="container">
<div class="row">
<div class="col-6">
<h1>Nos révoltes et nos rêves pour notre territoire</h1>
<h2>{{ blockContrib.title }}</h2>
<div class="description">{{ blockContrib.description|raw }}</div>
</div>
<div class="col-6">
<img class="carto-dream" src="{{ 'assets/img/Cartographie-Reve.png' }}" alt="cartographie">
<div class="bloc-contrib">
<div class="you-are">
Vous êtes le :
</div>
<div class="nb-contrib">
{{ nbContrib }}
</div>
<div class="contrib">
contributeurs
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endif %}

<div class="container bloc-form">
<div class="row">

+ 50
- 62
templates/frontend/home.html.twig View File

@@ -24,81 +24,69 @@
</div>
</div>

<div class="bloc-cartographie">
<div class="container">
<div class="row frame-yellow">
<div class="col-6">
<img class="cartographie" src="{{ 'assets/img/Cartographie-Reve.png' }}" alt="cartographie">
</div>
<div class="col-6">
<h2>La cartographie r<span>ê</span>volutionnaire</h2>
<p>Pour mieux comprendre les besoins du Nord Franche-Comté,
cette cartographie est réalisée grâce à la consultation sur le
terrain et en ligne des citoyens et plus particulièrement des
personnes exclues du débat public, mais aussi des acteurs
institutionnels, du monde économique et de l’ESS.</p>
<a class="link-carto link-slide" href="{{ path('app_carto_interactive') }}" title="Découvrir la cartographie">Découvrir la cartographie</a>
<a class="link-concert" href="" title="Participer à la concertation">Participer à la concertation</a>
{% if blockCarto %}
<div class="bloc-cartographie">
<div class="container">
<div class="row frame-yellow">
<div class="col-6">
<img class="cartographie" src="{{ 'assets/img/Cartographie-Reve.png' }}" alt="cartographie">
</div>
<div class="col-6">
<h2>La cartographie r<span>ê</span>volutionnaire</h2>
<div class="description">
{{ blockCarto.description|raw }}
</div>
<a class="link-carto link-slide" href="{{ path('app_carto_interactive') }}"
title="Découvrir la cartographie">Découvrir la cartographie</a>
<a class="link-concert" href="" title="Participer à la concertation">Participer à la
concertation</a>
</div>
</div>
</div>
</div>
</div>
{% endif %}

<div id="planisphere" class="bloc-planisphere">
<div class="container">
<div class="row">
<div class="col-12">
<h2>Le planisphère des <span>S</span>olutions</h2>
<div class="row">
<div class="col-6">
<img src="{{ 'assets/img/Visuel-Affiche.png' }}" alt="affiche">
</div>
<div class="col-6 col-text">
<p>
Nous vous donnons rendez-vous le <span class="bold">19 avril 2022</span>
pour construire avec nous les solutions pour le Nord
Franche-Comté.
</p>
<p>
Une journée unique où citoyens, associations, entreprises
et collectivités se réuniront pour imaginer des solutions
concrètes aux besoins révélés lors du laborage.
</p>
<p class="bold">
Nous avons besoin de chacun d’entre vous ! Alors,
rejoignez-nous et inscrivez-vous à ce rendez-vous
unique !
</p>
<div class="subscribe">
{{ macro.email_contact("S'INSCRIRE A L’ÉVÉNEMENT", "S'inscrire à l'événement (Le planisphère des Solutions)") }}
{% if blockPlanisphere %}
<div id="planisphere" class="bloc-planisphere">
<div class="container">
<div class="row">
<div class="col-12">
<h2>Le planisphère des <span>S</span>olutions</h2>
<div class="row">
<div class="col-6">
<img src="{{ 'assets/img/Visuel-Affiche.png' }}" alt="affiche">
</div>
<div class="col-6 col-text description">
{{ blockPlanisphere.description|raw }}
<div class="subscribe">
{{ macro.email_contact("S'INSCRIRE A L’ÉVÉNEMENT", "S'inscrire à l'événement (Le planisphère des Solutions)") }}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endif %}

<div id="ressourcerie" class="bloc-ressourcerie">
<div class="container">
<div class="row">
<div class="col-6">
<h2>Ressourcerie</h2>
<p>A partir de juin 2022, vous pourrez découvrir la Res-
sourcerie «Aux Actes Citoyens» qui permettra à tous de
connaître la manière de créer un projet, de l’animer,
des formations, des contacts de partenaires et encore
plein d’autres choses ! Vous souhaitez contriber à cette
ressourcerie, n’hésitez pas à nous contacter
</p>
<div class="contribuate">
{{ macro.email_contact("CONTRIBUER A LA RESSOURCERIE", "Contribuer à la ressourcerie") }}
{% if blockRessourcerie %}
<div id="ressourcerie" class="bloc-ressourcerie">
<div class="container">
<div class="row">
<div class="col-6">
<h2>{{ blockRessourcerie.title }}</h2>
<div class="description">
{{ blockRessourcerie.description|raw }}
</div>
<div class="contribuate">
{{ macro.email_contact("CONTRIBUER A LA RESSOURCERIE", "Contribuer à la ressourcerie") }}
</div>
</div>
<div class="col-6">
<img class="ressourcerie" src="{{ 'assets/img/Ressourcerie.png' }}" alt="ressourcerie">
</div>
</div>
<div class="col-6">
<img class="ressourcerie" src="{{ 'assets/img/Ressourcerie.png' }}" alt="ressourcerie">
</div>
</div>
</div>
</div>
{% endif %}
{% endblock %}

+ 5
- 0
translations/admin.fr.yaml View File

@@ -12,6 +12,8 @@ menu:
thematic: Thématiques
subthematic: Sous-thémes
configuration: Configuration
blocs: Blocs

entity:
User:
fields:
@@ -66,6 +68,9 @@ entity:
Configuration:
label_plurial: Les configurations
label: Configuration
Block:
label: Bloc
label_plurial: Blocs
form:
field:
dream:

Loading…
Cancel
Save