31 changed files with 1443 additions and 544 deletions
@ -1,224 +1,3 @@
|
||||
# Renommer le squelette |
||||
## Dupliquer nineskeletor et renommer en nineXXXX |
||||
Puis effectuer les changement suivants |
||||
- Renommer db/nineskeletor-create-0.sql en db/nineXXXX-create-0.sql |
||||
- Modifier db/nineXXXX-create-0.sql et changer le nom de la base de données en nineXXXX |
||||
- Renommer dicos/90_nineskeletor.xml en dicos/90_nineXXXX.xml |
||||
- Modifier dicos/nineXXXX-nineXXXX.xml et remplacer tout les nineskeletor en nineXXXX |
||||
- Renommer logrotate/nineskeletor en logrotate/nineXXXX |
||||
- Modifier logrotate/nineXXXX et remplacer tout les nineskeletor en nineXXXX |
||||
- Renommer postservice/90-nineskeletor en postservice/90-nineXXXX |
||||
- Modifier postservice/90-nineXXXX et remplacer tout les nineskeletor en nineXXXX |
||||
- Renommer pretemplate/25-nineskeletor en pretemplate/25-nineXXXX |
||||
- Modifier pretemplate/25-nineXXXX et remplacer tout les nineskeletor en nineXXXX |
||||
- Renommer src/nineskeletor-1.0 en src/nineXXXX-1.0 |
||||
- Modifier src/nineXXXX-1.0/webpack.config.js et remplacer tout les nineskeletor en nineXXXX |
||||
- Renommer sso/filtres/nineskeletor.ini en sso/filtres/nineXXXX.ini |
||||
- Renommer sso/filtres/nineskeletor_apps.ini en sso/filtres/nineXXXX_apps.ini |
||||
- Modifier sso/filtres/nineXXXX_apps.ini et remplacer tout les nineskeletor en nineXXXX |
||||
- Renommer tmpl/nineskeletor.cron en tmpl/nineXXXX.cron |
||||
- Modifier tmpl/nineXXXX.cron et remplacer tout les nineskeletor en nineXXXX |
||||
- Renommer tmpl/nineskeletor-apache.conf en tmpl/nineXXXX-apache.conf |
||||
- Modifier tmpl/nineXXXX-apache.conf et remplacer tout les nineskeletor en nineXXXX |
||||
- Renommer tmpl/nineskeletor-db.yml en tmpl/nineXXXX-db.yml |
||||
- Modifier tmpl/nineXXXX-db.yml et remplacer tout les nineskeletor en nineXXXX |
||||
- Renommer tmpl/nineskeletor-env.local en tmpl/nineXXXX-env.local |
||||
- Modifier tmpl/nineXXXX-env.local et remplacer tout les nineskeletor en nineXXXX |
||||
- Renommer tmpl/nineskeletor-proxy.sh en tmpl/nineXXXX-proxy.sh |
||||
- Modifier Makefile et remplacer tout les nineskeletor en nineXXXX |
||||
- Remplacer logo public/images/logo.png |
||||
# Prototype Ninesurvey |
||||
Une alternative à Opensondage |
||||
|
||||
## Compilier les asset |
||||
- installer nodejs |
||||
- installer npm |
||||
- installer n |
||||
- passer sur la verison 8 de node |
||||
- yarn encore dev |
||||
- yarn encore prod |
||||
|
||||
# Description du squelette |
||||
|
||||
## Bundle |
||||
- DebugBundle |
||||
- DoctrineBundle |
||||
- DoctrineMigrationsBundle |
||||
- FOSCKEditorBundle |
||||
- FOSRestBundle |
||||
- FrameworkBundle |
||||
- KnpSnappyBundle |
||||
- MakerBundle |
||||
- MonologBundle |
||||
- NelmioApiDocBundle |
||||
- OneupUploaderBundle |
||||
- SecurityBundle |
||||
- SensioFrameworkExtraBundle |
||||
- SwiftmailerBundle |
||||
- TetranzSelect2EntityBundle |
||||
- TwigBundle |
||||
- TwigExtraBundle |
||||
- WebProfilerBundle |
||||
- WebpackEncoreBundle |
||||
|
||||
|
||||
|
||||
## Asset |
||||
|
||||
### Tag app |
||||
- jQuery = https://www.npmjs.com/package/jquery |
||||
- bootstrap = https://www.npmjs.com/package/bootstrap |
||||
- datatables.net-bs4 = https://www.npmjs.com/package/datatables.net-bs4 |
||||
- fontawsome-free = https://www.npmjs.com/package/@fortawesome/fontawesome-free |
||||
- moment = https://www.npmjs.com/package/moment |
||||
- select2 = https://www.npmjs.com/package/select2 |
||||
- crop-select-js = https://www.npmjs.com/package/crop-select-js |
||||
- tempusdominus-bootstrap-4 = https://www.npmjs.com/package/tempusdominus-bootstrap-4 |
||||
- spectrum-colorpicker2 = https://www.npmjs.com/package/spectrum-colorpicker2 |
||||
|
||||
### Tag morris |
||||
- raphael = https://www.npmjs.com/package/raphael |
||||
- morris.js = https://www.npmjs.com/package/morris.js |
||||
|
||||
### Tag fullcalendar |
||||
- @fullcalendar/core = https://www.npmjs.com/package/@fullcalendar/core |
||||
- @fullcalendar/interaction = https://www.npmjs.com/package/@fullcalendar/interaction |
||||
- @fullcalendar/daygrid = https://www.npmjs.com/package/@fullcalendar/daygrid |
||||
|
||||
### Tag dropzone |
||||
- dropzone = https://www.npmjs.com/package/dropzone |
||||
|
||||
|
||||
|
||||
## Parameters |
||||
|
||||
Provient du template env.local |
||||
- appEnv = PROD |
||||
- appSecret = valeur du fichier .key autogénéré au premier reconfigure |
||||
- appWeburl = Valeur du dicos web_url |
||||
- appAuth = Valeur du dicos CAS |
||||
- appAlias = En dur l'alias web |
||||
- appName = Nom de l'application |
||||
- appCron = En dur à true pour activer le système de cron |
||||
- appMasteridentity = Valeur du dicos soit Ninegate soit LDAP |
||||
- appMasterurl = Si appMasteridentity la valeur du dicos correspondant à l'url du Ninegate maître |
||||
- appMasterkey = Si appMasteridentity la valeur du dicos correspondant à la clé d'API du Ninegate maître |
||||
- databaseName = En dur le nom de la base |
||||
- databaseUser = En dur le user de la base |
||||
- databasePassword = Autogénéré par le reconfigure |
||||
- databaseHost = Valeur du dicos pour le host de la base |
||||
- appMailmethod = Valeur du dicos soit sendmail soit smtp. sendmail par défaut si exim est activé sur le serveur |
||||
- appMailurl = Si smtp url calculé combinant smtphost smtpport smtpencryption smtpauthmode smtpuser smtppwd |
||||
- appMailnoreply = Valeur du dicos du noreplay |
||||
- ldapModel = si masteridentity à LDAP soit open soit scribe |
||||
- ldapHost = Valeur dicos Host LDAP |
||||
- ldapPort = Valeur dicos Port LDAP |
||||
- ldapUser = Valeur dicos User LDAP |
||||
- ldapPassword = Valeur dicos Password LDAP |
||||
- ldapBasedn = Valeur dicos Basedn LDAP |
||||
- ldapUsername = si Scribe en dur sinon valeur du dicos champs annuaire utilisé comme username |
||||
- ldapFirstname = si Scribe en dur sinon valeur du dicos champs annuaire utilisé comme firstname |
||||
- ldapLastname = si Scribe en dur sinon valeur du dicos champs annuaire utilisé comme lastname |
||||
- ldapEmail = si Scribe en dur sinon valeur du dicos champs annuaire utilisé comme email |
||||
- ldapFiltergroup = si Scribe en dur sinon valeur du dicos filtre ldap de recherche des groupes |
||||
- ldapFilteruser = si Scribe en dur sinon valeur du dicos filtre ldap des groupes |
||||
- ldapAdmins = Liste des admins obligatoire = Admin + valeur dicos |
||||
- casHost = Valeur dicos du host SSO |
||||
- casPort = Valeur dicos du Porst SSO |
||||
- casPath = Valeur dicos du Path SSO |
||||
- casUsername = Valeur en dur correspondant au filtre sso du username |
||||
- casEmail = Valeur en dur correspondant au filtre sso du email |
||||
- casLastname = Valeur en dur correspondant au filtre sso du lastname |
||||
- casFirstname = Valeur en dur correspondant au filtre sso du fistname |
||||
- proxyUse = Valeur dicos utiliser oui/non un proxy |
||||
- proxyHost = Si oui valeurs du dicos du host proxy |
||||
- proxyPort = Si oui valeurs du dicos du post proxy |
||||
- sondeUse = Valeur dicos utiliser oui/non une sonde statistique |
||||
- sondeUrl = Si oui url de la sonde statistique |
||||
|
||||
## Sécurité |
||||
|
||||
4 rôles possibles |
||||
- ROLE_ADMIN |
||||
- ROLE_MODO |
||||
- ROLE_MASTER |
||||
- ROLE_USER |
||||
|
||||
4 routes protégés |
||||
- /user = accèssible à ROLE_USER / ROLE_MASTER / ROLE_MODO / ROLE_ADMIN |
||||
- /master = accèssible à ROLE_MASTER / ROLE_MODO / ROLE_ADMIN |
||||
- /modo = = accèssible à ROLE_MODO / ROLE_ADMIN |
||||
- /admin = = accèssible à ROLE_ADMIN |
||||
|
||||
## Job |
||||
|
||||
Nineskeletor intègre un système de job. |
||||
Ce système va exécuter des commandes symfony à interval régulier. |
||||
De base les jobs suivants sont livrés : |
||||
- app:sendMail = toutes les minutes = Execution du spool de mail en attente |
||||
- app:dumpBdd = toutes les nuits à 2h00 = Dump de la base |
||||
- app:purgeFile = toutes les nuits à 3h00 = Suppresion des fichiers obsolètes |
||||
- app:synchroUsers = toutes les nuites à 3h00 = Synchronisation des comptes utilisateurs soit via LDAP soit via Ninegate |
||||
|
||||
Pour ajouter un job à la listes, modifier la commande app:initCron qui sera exécutée à chaque reconfigure |
||||
|
||||
## Service |
||||
|
||||
- app.password.encoder = encodage password sur la methode que l'annuaire |
||||
- app.upload.listener = action à réaliser sur upload via oneupload |
||||
- app.upload.samename = permet d'uploader un fichier et préserver le nom de fichier via oneupload |
||||
- app.ldap.service = fonction ldap |
||||
- app.sendmail.transport = executuion du spool de mail via sendmail |
||||
- app.mail.service = fonction envoit de mail |
||||
- app.twig.extension = extention twig |
||||
|
||||
|
||||
## Twig |
||||
|
||||
### Twig Constantes |
||||
|
||||
Variables globales twig reprises des parametres symfony |
||||
- appAlias |
||||
- appAuth |
||||
- appName |
||||
- appCron |
||||
- appMasteridentity |
||||
- sondeUse |
||||
- sondeUrl |
||||
|
||||
### Twig Extention |
||||
|
||||
App\Twig\AppExtension |
||||
- filtre = urlAvatar à placer avec user.avatar afin de définir l'url complète de l'avatar du user |
||||
|
||||
### Twig Template de base |
||||
|
||||
#### templates/base.html.twig |
||||
|
||||
Deux paramétres non obligatoire |
||||
- useheader = permet d'afficher ou non la bannière dans la page = false par défaut |
||||
- usesidebar = permet d'afficher oun non la sidebar dans la page = false par défaut |
||||
|
||||
Block |
||||
- block encorelinktags = pour déclarer des encore_link_tags spécifique à la page (encorelinktags app est intégré de base) |
||||
- block localstyle = pour déclarer des propriétés css spécifique à page (Include/style.css.twig est intégré de base) |
||||
- block body = le corps de la page |
||||
- block encorescripttags pour déclarer des encore_script_tags spécifique à la page (encorescripttags app est intégré de base) |
||||
- block localjavascript = pour déclarer du js spécifique à la page (Include/javascript.js.twig est intégré de base) |
||||
|
||||
#### templates/Include/style.css.twig |
||||
|
||||
Style de l'applicaiton en surcouche de bootstrap |
||||
|
||||
#### templates/Include/sidebar.html.twig |
||||
|
||||
La sidebar de l'application quand elle est affichée |
||||
|
||||
#### templates/Include/javascript.js.twig |
||||
|
||||
Librairie js de l'application |
||||
|
||||
- object a et button s'ils ont un attribut data-method et data_confirm proposeront une confirmation à l'utilisateur avant de poursuivre l'action |
||||
- ModalLoad(idmodal,titre,url) = permet d'afficher en modal l'url indiqué en parametre. Par défaut on dispose de la modal #mymodal |
||||
|
||||
#### templates/Form/fields.htms.twig |
||||
|
||||
Mise en forme de champs de formulaire |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |
@ -0,0 +1,115 @@
|
||||
<?php |
||||
|
||||
namespace App\Controller; |
||||
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; |
||||
use Symfony\Component\HttpFoundation\Request; |
||||
use Symfony\Component\HttpFoundation\Response; |
||||
use Symfony\Component\Form\FormError; |
||||
|
||||
use App\Entity\Config as Entity; |
||||
use App\Form\ConfigType as Form; |
||||
|
||||
class ConfigController extends AbstractController |
||||
{ |
||||
private $data = "config"; |
||||
private $route = "app_config"; |
||||
private $render = "Config/"; |
||||
private $entity = "App:Config"; |
||||
|
||||
public function list() |
||||
{ |
||||
$em = $this->getDoctrine()->getManager(); |
||||
$datas = $em->getRepository($this->entity)->findBy(["visible"=>true]); |
||||
|
||||
return $this->render($this->render.'list.html.twig',[ |
||||
$this->data."s" => $datas, |
||||
"useheader" => true, |
||||
"usesidebar" => true, |
||||
]); |
||||
} |
||||
|
||||
public function listrender($category) |
||||
{ |
||||
$em = $this->getDoctrine()->getManager(); |
||||
$datas = $em->getRepository($this->entity)->findBy(["visible"=>true,"category"=>$category]); |
||||
|
||||
return $this->render($this->render.'render.html.twig',[ |
||||
$this->data."s" => $datas, |
||||
"useheader" => true, |
||||
"usesidebar" => true, |
||||
]); |
||||
} |
||||
|
||||
public function update($id,Request $request) |
||||
{ |
||||
// Initialisation de l'enregistrement |
||||
$em = $this->getDoctrine()->getManager(); |
||||
$data=$em->getRepository($this->entity)->find($id); |
||||
if(!$data->getValue()) |
||||
$data->setValue($this->get('session')->get($data->getId())); |
||||
|
||||
// Création du formulaire |
||||
$form = $this->createForm(Form::class,$data,array("mode"=>"update","id"=>$data->getId(),"type"=>$data->getType(),"required"=>$data->getRequired())); |
||||
|
||||
// Récupération des data du formulaire |
||||
$form->handleRequest($request); |
||||
|
||||
// Sur erreur |
||||
$this->getErrorForm($id,$form,$request,$data,"update"); |
||||
|
||||
// Sur validation |
||||
if ($form->get('submit')->isClicked() && $form->isValid()) { |
||||
$data = $form->getData(); |
||||
$em->persist($data); |
||||
$em->flush(); |
||||
|
||||
// Retour à la liste |
||||
return $this->redirectToRoute($this->route); |
||||
} |
||||
|
||||
// Affichage du formulaire |
||||
return $this->render($this->render.'edit.html.twig', [ |
||||
'useheader' => true, |
||||
'usesidebar' => true, |
||||
$this->data => $data, |
||||
'mode' => 'update', |
||||
'form' => $form->createView() |
||||
]); |
||||
} |
||||
|
||||
public function delete($id,Request $request) |
||||
{ |
||||
// Récupération de l'enregistrement courant |
||||
$em = $this->getDoctrine()->getManager(); |
||||
$config=$em->getRepository($this->entity)->find($id); |
||||
if(!$config->getRequired()) { |
||||
$config->setValue(""); |
||||
$em = $this->getDoctrine()->getManager(); |
||||
$em->persist($config); |
||||
$em->flush(); |
||||
} |
||||
return $this->redirectToRoute('app_config'); |
||||
} |
||||
|
||||
public function logo() |
||||
{ |
||||
return $this->render($this->render.'logo.html.twig'); |
||||
} |
||||
|
||||
protected function getErrorForm($id,$form,$request,$data) { |
||||
if ($form->get('submit')->isClicked() && !$form->isValid()) { |
||||
$this->get('session')->getFlashBag()->clear(); |
||||
$validator = $this->get('validator'); |
||||
$errors = $validator->validate($data); |
||||
foreach( $errors as $error ) { |
||||
$request->getSession()->getFlashBag()->add("error", $error->getMessage()); |
||||
} |
||||
|
||||
$errors = $form->getErrors(); |
||||
foreach( $errors as $error ) { |
||||
$request->getSession()->getFlashBag()->add("error", $error->getMessage()); |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,202 @@
|
||||
<?php |
||||
|
||||
namespace App\Entity; |
||||
|
||||
use Doctrine\ORM\Mapping as ORM; |
||||
|
||||
/** |
||||
* Cron |
||||
* |
||||
* @ORM\Table(name="config") |
||||
* @ORM\Entity(repositoryClass="App\Repository\ConfigRepository") |
||||
*/ |
||||
class Config |
||||
{ /** |
||||
* @ORM\Id |
||||
* @ORM\Column(type="string") |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* @ORM\Column(type="string", length=250) |
||||
*/ |
||||
protected $title; |
||||
|
||||
/** |
||||
* @ORM\Column(type="text") |
||||
*/ |
||||
protected $value; |
||||
|
||||
/** |
||||
* @ORM\Column(name="roworder", type="string") |
||||
*/ |
||||
protected $order; |
||||
|
||||
/** |
||||
* @ORM\Column(type="boolean") |
||||
*/ |
||||
protected $visible; |
||||
|
||||
/** |
||||
* @ORM\Column(type="boolean") |
||||
*/ |
||||
protected $changeable; |
||||
|
||||
/** |
||||
* @ORM\Column(type="boolean") |
||||
*/ |
||||
protected $required; |
||||
|
||||
/** |
||||
* @ORM\Column(type="string") |
||||
*/ |
||||
protected $type; |
||||
|
||||
/** |
||||
* @ORM\Column(type="string") |
||||
*/ |
||||
protected $grouped; |
||||
|
||||
/** |
||||
* @ORM\Column(type="string") |
||||
*/ |
||||
protected $category; |
||||
|
||||
/** |
||||
* @ORM\Column(type="text") |
||||
*/ |
||||
protected $help; |
||||
|
||||
public function getId(): ?string |
||||
{ |
||||
return $this->id; |
||||
} |
||||
|
||||
public function setId(string $id): self |
||||
{ |
||||
$this->id = $id; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
public function getValue(): ?string |
||||
{ |
||||
return $this->value; |
||||
} |
||||
|
||||
public function setValue(string $value): self |
||||
{ |
||||
$this->value = $value; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
public function getOrder(): ?string |
||||
{ |
||||
return $this->order; |
||||
} |
||||
|
||||
public function setOrder(string $order): self |
||||
{ |
||||
$this->order = $order; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
public function getVisible(): ?bool |
||||
{ |
||||
return $this->visible; |
||||
} |
||||
|
||||
public function setVisible(bool $visible): self |
||||
{ |
||||
$this->visible = $visible; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
public function getChangeable(): ?bool |
||||
{ |
||||
return $this->changeable; |
||||
} |
||||
|
||||
public function setChangeable(bool $changeable): self |
||||
{ |
||||
$this->changeable = $changeable; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
public function getRequired(): ?bool |
||||
{ |
||||
return $this->required; |
||||
} |
||||
|
||||
public function setRequired(bool $required): self |
||||
{ |
||||
$this->required = $required; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
public function getType(): ?string |
||||
{ |
||||
return $this->type; |
||||
} |
||||
|
||||
public function setType(string $type): self |
||||
{ |
||||
$this->type = $type; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
public function getGrouped(): ?string |
||||
{ |
||||
return $this->grouped; |
||||
} |
||||
|
||||
public function setGrouped(string $grouped): self |
||||
{ |
||||
$this->grouped = $grouped; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
public function getCategory(): ?string |
||||
{ |
||||
return $this->category; |
||||
} |
||||
|
||||
public function setCategory(string $category): self |
||||
{ |
||||
$this->category = $category; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
public function getHelp(): ?string |
||||
{ |
||||
return $this->help; |
||||
} |
||||
|
||||
public function setHelp(string $help): self |
||||
{ |
||||
$this->help = $help; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
public function getTitle(): ?string |
||||
{ |
||||
return $this->title; |
||||
} |
||||
|
||||
public function setTitle(string $title): self |
||||
{ |
||||
$this->title = $title; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,165 @@
|
||||
<?php |
||||
namespace App\Form; |
||||
|
||||
use Symfony\Component\Form\AbstractType; |
||||
use Symfony\Component\Form\FormBuilderInterface; |
||||
use Symfony\Component\OptionsResolver\OptionsResolver; |
||||
use Symfony\Component\Form\Extension\Core\Type\TextType; |
||||
use Symfony\Component\Form\Extension\Core\Type\IntegerType; |
||||
use Symfony\Component\Form\Extension\Core\Type\TextareaType; |
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType; |
||||
use Symfony\Component\Form\Extension\Core\Type\SubmitType; |
||||
use Symfony\Component\Form\Extension\Core\Type\HiddenType; |
||||
use FOS\CKEditorBundle\Form\Type\CKEditorType; |
||||
|
||||
class ConfigType extends AbstractType |
||||
{ |
||||
public function buildForm(FormBuilderInterface $builder, array $options) |
||||
{ |
||||
$builder->add('submit', |
||||
SubmitType::class, |
||||
array("label" => "Valider", |
||||
"attr" => array("class" => "btn btn-success"))); |
||||
|
||||
$builder->add('id', |
||||
TextType::class, |
||||
array("label" =>"Clé", |
||||
"label_attr" => array("style" => 'margin-top:15px;'), |
||||
"attr" => array("class" => "form-control"), |
||||
'disabled' => true)); |
||||
|
||||
switch($options["type"]) { |
||||
case "string": |
||||
$builder->add('value', |
||||
TextType::class, |
||||
array("label" => "Valeur", |
||||
"label_attr" => array("style" => 'margin-top:15px;'), |
||||
"attr" => array("class" => "form-control"), |
||||
'required' => ($options["required"]==0?false:true))); |
||||
break; |
||||
|
||||
case "boolean": |
||||
$choices=["oui" => "1","non" => "0"]; |
||||
$builder->add("value", ChoiceType::class, |
||||
array("label" =>"Valeur", |
||||
"label_attr" => array("style" => 'margin-top:15px;'), |
||||
"attr" => array("class" => "form-control"), |
||||
'required' => ($options["required"]==0?false:true), |
||||
"choices" => $choices)); |
||||
break; |
||||
|
||||
case "integer": |
||||
$builder->add("value", |
||||
IntegerType::class, [ |
||||
"label" =>"Valeur", |
||||
"label_attr" => array("style" => 'margin-top:15px;'), |
||||
"attr" => array("class" => "form-control","min" => "0"), |
||||
"required" => ($options["required"]==0?false:true), |
||||
] |
||||
); |
||||
break; |
||||
|
||||
case "pourcentage": |
||||
$builder->add("value", |
||||
IntegerType::class, [ |
||||
"label" =>"Valeur", |
||||
"label_attr" => array("style" => 'margin-top:15px;'), |
||||
"attr" => array("class" => "form-control","min" => "0", "max"=>"100"), |
||||
"required" => ($options["required"]==0?false:true), |
||||
] |
||||
); |
||||
break; |
||||
|
||||
case "font": |
||||
$choices=[ |
||||
"ABeeZee-Regular" => "ABeeZee-Regular", |
||||
"Acme-Regular" => "Acme-Regular", |
||||
"AlfaSlabOne-Regular" => "AlfaSlabOne-Regular", |
||||
"Anton-Regular" => "Anton-Regular", |
||||
"Baloo-Regular" => "Baloo-Regular", |
||||
"CarterOne-Regular" => "CarterOne-Regular", |
||||
"Chewy-Regular" => "Chewy-Regular", |
||||
"Courgette-Regular" => "Courgette-Regular", |
||||
"FredokaOne-Regular" => "FredokaOne-Regular", |
||||
"Grandstander" => "Grandstander", |
||||
"Helvetica" => "Helvetica", |
||||
"Justanotherhand-Regular" => "Justanotherhand-Regular", |
||||
"Lato-Regular" => "Lato-Regular", |
||||
"LexendDeca-Regular" => "LexendDeca-Regular", |
||||
"LuckiestGuy-Regular" => "LuckiestGuy-Regular", |
||||
"Overpass-Black" => "Overpass-Black", |
||||
"PassionOne" => "PassionOne", |
||||
"Peacesans" => "Peacesans", |
||||
"Redressed" => "Redressed", |
||||
"Righteous-Regular" => "Righteous-Regular", |
||||
"Roboto-Regular" => "Roboto-Regular", |
||||
"RubikMonoOne-Regular" => "RubikMonoOne-Regular", |
||||
"SigmarOne-Regular" => "SigmarOne-Regular", |
||||
"Signika-Regular" => "Signika-Regular", |
||||
"Teko-Bold" => "Teko-Bold", |
||||
"Viga-Regular" => "Viga-Regular", |
||||
]; |
||||
|
||||
$builder->add("value", ChoiceType::class, |
||||
array("label" =>"Valeur", |
||||
"label_attr" => array("style" => 'margin-top:15px;'), |
||||
"attr" => array("class" => "form-control"), |
||||
'required' => ($options["required"]==0?false:true), |
||||
"choices" => $choices)); |
||||
break; |
||||
|
||||
case "editor": |
||||
$builder->add('value', |
||||
CKEditorType::class,[ |
||||
"required" => ($options["required"]==0?false:true), |
||||
"config" => [ |
||||
'uiColor' => '#ffffff', |
||||
'height' => 600, |
||||
'filebrowserUploadRoute' => 'app_ckeditor_upload', |
||||
'language' => 'fr', |
||||
] |
||||
] |
||||
); |
||||
break; |
||||
|
||||
case "logo": |
||||
$builder->add('value',HiddenType::class); |
||||
break; |
||||
|
||||
case "hero": |
||||
$builder->add('value',HiddenType::class); |
||||
break; |
||||
|
||||
case "image": |
||||
$builder->add('value',HiddenType::class); |
||||
break; |
||||
|
||||
case "color": |
||||
$builder->add('value', |
||||
TextType::class, |
||||
array("label" => "Valeur", |
||||
"label_attr" => array("style" => 'margin-top:15px;'), |
||||
"attr" => array("class" => "pick-a-color form-control"), |
||||
'required' => ($options["required"]==0?false:true))); |
||||
break; |
||||
} |
||||
|
||||
$builder->add('help', |
||||
TextareaType::class, |
||||
array("label" =>"Aide", |
||||
"attr" => array("class" => "form-control", "style" => "margin-top:15px; height: 200px;"), |
||||
'required' => false, |
||||
'disabled' => true)); |
||||
} |
||||
|
||||
public function configureOptions(OptionsResolver $resolver) |
||||
{ |
||||
$resolver->setDefaults(array( |
||||
'data_class' => 'App\Entity\Config', |
||||
'mode' => "string", |
||||
'id' => "string", |
||||
'type' => "string", |
||||
'required' => "string", |
||||
)); |
||||
} |
||||
} |
@ -0,0 +1,15 @@
|
||||
<?php |
||||
|
||||
namespace App\Repository; |
||||
|
||||
use App\Entity\Config; |
||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; |
||||
use Doctrine\Common\Persistence\ManagerRegistry; |
||||
|
||||
class ConfigRepository extends ServiceEntityRepository |
||||
{ |
||||
public function __construct(ManagerRegistry $registry) |
||||
{ |
||||
parent::__construct($registry, Config::class); |
||||
} |
||||
} |
@ -0,0 +1,73 @@
|
||||
<?php |
||||
namespace App\Service; |
||||
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface; |
||||
use Symfony\Component\HttpKernel\Event\RequestEvent; |
||||
use Symfony\Component\HttpFoundation\Session\Session; |
||||
use Doctrine\ORM\EntityManager; |
||||
|
||||
class sessionInit { |
||||
private $container; |
||||
protected $em; |
||||
protected $session; |
||||
|
||||
public function __construct(ContainerInterface $container, EntityManager $em,Session $session) |
||||
{ |
||||
$this->container = $container; |
||||
$this->session = $session; |
||||
$this->em = $em; |
||||
} |
||||
|
||||
public function onDomainParse(RequestEvent $event) { |
||||
$configs = $this->em->getRepository("App:Config")->findAll(); |
||||
foreach($configs as $config) { |
||||
$this->session->set($config->getId(), strval($config->getValue())); |
||||
} |
||||
|
||||
// Valeur par défaut appname |
||||
if($this->session->get("appname")=="") |
||||
$this->session->set("appname", $this->container->getParameter('appName')); |
||||
|
||||
// Valeur par defaut colorbgbodydark = #343a40 |
||||
if($this->session->get("colorbgbodydark")=="") |
||||
$this->session->set("colorbgbodydark", '#343a40'); |
||||
|
||||
// Valeur par defaut colorbgbodydark = #ffffff |
||||
if($this->session->get("colorbgbodylight")=="") |
||||
$this->session->set("colorbgbodylight", '#ffffff'); |
||||
|
||||
// Valeur par defaut colorfttitledark = #ffffff |
||||
if($this->session->get("colorfttitledark")=="") |
||||
$this->session->set("colorfttitledark", '#ffffff'); |
||||
|
||||
// Valeur par defaut colorfttitlelight = #343a40 |
||||
if($this->session->get("colorfttitlelight")=="") |
||||
$this->session->set("colorfttitlelight", '#343a40'); |
||||
|
||||
// Valeur par defaut colorftbodydark = #ffffff |
||||
if($this->session->get("colorftbodydark")=="") |
||||
$this->session->set("colorftbodydark", '#ffffff'); |
||||
|
||||
// Valeur par defaut colorftbodylight = #343a40 |
||||
if($this->session->get("colorftbodylight")=="") |
||||
$this->session->set("colorftbodylight", '#343a40'); |
||||
|
||||
// Valeur par defaut fonttitle = FredokaOne-Regular |
||||
if($this->session->get("fonttitle")=="") |
||||
$this->session->set("fonttitle", 'FredokaOne-Regular'); |
||||
|
||||
// Valeur par defaut fontbody = Roboto-Regular |
||||
if($this->session->get("fontbody")=="") |
||||
$this->session->set("fontbody", 'Roboto-Regular'); |
||||
|
||||
// Valeur par defaut logo |
||||
if($this->session->get("logodark")==""&&$this->session->get("logolight")=="") { |
||||
$this->session->set("logodark", "logo.png"); |
||||
$this->session->set("logolight", "logo.png"); |
||||
} |
||||
elseif($this->session->get("logodark")=="") |
||||
$this->session->set("logodark", $this->session->get("logolight")); |
||||
elseif($this->session->get("logolight")=="") |
||||
$this->session->set("logolight", $this->session->get("logodark")); |
||||
} |
||||
} |