From ba27cb51b35f3b7d9de2722d624ed524e797cdb4 Mon Sep 17 00:00:00 2001 From: afornerot Date: Fri, 13 Nov 2020 17:53:40 +0100 Subject: [PATCH] =?UTF-8?q?mise=20=C3=A0=20niveau?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 225 +----------------- src/ninesurvey-1.0/.gitignore | 3 + .../config/packages/one_upload.yaml | 2 + src/ninesurvey-1.0/config/routes.yaml | 37 ++- src/ninesurvey-1.0/config/services.yaml | 7 + .../public/{images => uploads/logo}/logo.png | Bin .../src/Command/AppInitCommand.php | 213 +++++++++++++++++ .../src/Controller/ConfigController.php | 115 +++++++++ .../src/Controller/CropController.php | 75 ++++-- .../src/Controller/GroupController.php | 1 + .../src/Controller/SecurityController.php | 4 +- .../src/Controller/UserController.php | 67 +++++- src/ninesurvey-1.0/src/Entity/Config.php | 202 ++++++++++++++++ src/ninesurvey-1.0/src/Form/ConfigType.php | 165 +++++++++++++ src/ninesurvey-1.0/src/Form/UserType.php | 26 +- .../src/Repository/ConfigRepository.php | 15 ++ .../src/Service/sessionInit.php | 73 ++++++ .../src/Service/uploadListener.php | 131 +--------- .../templates/Config/edit.html.twig | 94 ++++++++ .../templates/Config/list.html.twig | 60 +++++ .../templates/Config/logo.html.twig | 42 ++++ .../templates/Config/render.html.twig | 78 ++++++ .../templates/Crop/crop01.html.twig | 6 +- .../templates/Crop/crop02.html.twig | 80 +++++-- .../templates/Home/login.html.twig | 17 +- .../templates/Include/javascript.js.twig | 2 +- .../templates/Include/sidebar.html.twig | 7 + .../templates/Include/style.css.twig | 196 ++++++--------- .../templates/User/edit.html.twig | 24 +- .../templates/User/list.html.twig | 7 + src/ninesurvey-1.0/templates/base.html.twig | 41 +++- 31 files changed, 1457 insertions(+), 558 deletions(-) rename src/ninesurvey-1.0/public/{images => uploads/logo}/logo.png (100%) create mode 100755 src/ninesurvey-1.0/src/Controller/ConfigController.php create mode 100644 src/ninesurvey-1.0/src/Entity/Config.php create mode 100644 src/ninesurvey-1.0/src/Form/ConfigType.php create mode 100644 src/ninesurvey-1.0/src/Repository/ConfigRepository.php create mode 100644 src/ninesurvey-1.0/src/Service/sessionInit.php create mode 100755 src/ninesurvey-1.0/templates/Config/edit.html.twig create mode 100644 src/ninesurvey-1.0/templates/Config/list.html.twig create mode 100644 src/ninesurvey-1.0/templates/Config/logo.html.twig create mode 100644 src/ninesurvey-1.0/templates/Config/render.html.twig diff --git a/README.md b/README.md index ab57043..af799b7 100644 --- a/README.md +++ b/README.md @@ -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 \ No newline at end of file diff --git a/src/ninesurvey-1.0/.gitignore b/src/ninesurvey-1.0/.gitignore index 1446a41..66f9e93 100644 --- a/src/ninesurvey-1.0/.gitignore +++ b/src/ninesurvey-1.0/.gitignore @@ -29,4 +29,7 @@ yarn-error.log !/public/uploads/avatar/admin.jpg !/public/uploads/avatar/noavatar.jpg !/public/uploads/avatar/system.jpg +!/public/uploads/avatar +/public/uploads/logo/* +!/public/uploads/logo/logo.png /public/uploads/ckeditor diff --git a/src/ninesurvey-1.0/config/packages/one_upload.yaml b/src/ninesurvey-1.0/config/packages/one_upload.yaml index b7b31a4..4e818db 100644 --- a/src/ninesurvey-1.0/config/packages/one_upload.yaml +++ b/src/ninesurvey-1.0/config/packages/one_upload.yaml @@ -2,6 +2,8 @@ oneup_uploader: mappings: avatar: frontend: dropzone + logo: + frontend: dropzone document: frontend: dropzone namer: app.upload.samename diff --git a/src/ninesurvey-1.0/config/routes.yaml b/src/ninesurvey-1.0/config/routes.yaml index 87d93d6..e03e700 100644 --- a/src/ninesurvey-1.0/config/routes.yaml +++ b/src/ninesurvey-1.0/config/routes.yaml @@ -28,6 +28,31 @@ app_logoutcas: path: /logoutcas defaults: { _controller: App\Controller\SecurityController:logout } +#== Config ======================================================================================================== +app_config: + path: /admin/config + defaults: { _controller: App\Controller\ConfigController:list } + +app_config_render: + path: /admin/config/render/{category} + defaults: { _controller: App\Controller\ConfigController:listrender } + +app_config_submit: + path: /admin/config/submit + defaults: { _controller: App\Controller\ConfigController:submit } + +app_config_update: + path: /admin/config/update/{id} + defaults: { _controller: App\Controller\ConfigController:update } + +app_config_delete: + path: /admin/config/delete/{id} + defaults: { _controller: App\Controller\ConfigController:delete } + +app_config_logo: + path: /admin/config/logo + defaults: { _controller: App\Controller\ConfigController:logo } + #== Sonde ================================================================================================================ app_sonde: path: /sonde @@ -35,11 +60,11 @@ app_sonde: #== Crop ========================================================================================================= app_crop01: - path: /user/crop01 + path: /user/crop01/{type}/{reportinput} defaults: { _controller: App\Controller\CropController:crop01 } app_crop02: - path: /user/crop02 + path: /user/crop02/{type}/{reportinput} defaults: { _controller: App\Controller\CropController:crop02 } oneup_uploader: @@ -76,10 +101,18 @@ app_user: path: /admin/user defaults: { _controller: App\Controller\UserController:list } +app_user_submit: + path: /admin/user/submit + defaults: { _controller: App\Controller\UserController:submit } + app_user_update: path: /admin/user/update/{id} defaults: { _controller: App\Controller\UserController:update } +app_user_delete: + path: /admin/user/delete/{id} + defaults: { _controller: App\Controller\UserController:delete } + app_user_select: path: /user/user/select defaults: { _controller: App\Controller\UserController:select } diff --git a/src/ninesurvey-1.0/config/services.yaml b/src/ninesurvey-1.0/config/services.yaml index 34e9fe8..89d0ffd 100644 --- a/src/ninesurvey-1.0/config/services.yaml +++ b/src/ninesurvey-1.0/config/services.yaml @@ -80,6 +80,13 @@ services: # add more service definitions when explicit configuration is needed # please note that last definitions always *replace* previous ones + app.session.init: + public: true + class: App\Service\sessionInit + arguments: ["@service_container","@doctrine.orm.entity_manager","@session",] + tags: + - { name: kernel.event_listener, event: kernel.request, method: onDomainParse } + app.password.encoder: public: true class: App\Service\passwordEncoder diff --git a/src/ninesurvey-1.0/public/images/logo.png b/src/ninesurvey-1.0/public/uploads/logo/logo.png similarity index 100% rename from src/ninesurvey-1.0/public/images/logo.png rename to src/ninesurvey-1.0/public/uploads/logo/logo.png diff --git a/src/ninesurvey-1.0/src/Command/AppInitCommand.php b/src/ninesurvey-1.0/src/Command/AppInitCommand.php index 49c217e..4de22cb 100644 --- a/src/ninesurvey-1.0/src/Command/AppInitCommand.php +++ b/src/ninesurvey-1.0/src/Command/AppInitCommand.php @@ -14,6 +14,8 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Id\AssignedGenerator; use App\Entity\User; +use App\Entity\Config; + class AppInitCommand extends Command { @@ -56,6 +58,195 @@ class AppInitCommand extends Command // Création du compte admin si non existant $this->insertUser("admin","admin"); + + // colorbgbody = Couleur des fonds de page + $this->insertConfig( + 1, // order + "site", // category + "appname", // id + "Titre de votre site", // title + "", // value + "string", // type, + true, // visible + true, // changeable + false, // required + "", // grouped + "Titre de votre site" + ); + + $this->insertConfig( + 2, // order + "site", // category + "appsubname", // id + "Sous-titre de votre site", // title + "", // value + "string", // type, + true, // visible + true, // changeable + false, // required + "", // grouped + "Sous-titre de votre site" + ); + + $this->insertConfig( + 3, // order + "site", // category + "appdescription", // id + "Description de votre site", // title + "", // value + "editor", // type, + true, // visible + true, // changeable + false, // required + "", // grouped + "Description de votre site" + ); + + // colorbgbody = Couleur des fonds de page + $this->insertConfig( + 1, // order + "colorbgbody", // category + "colorbgbodydark", // id + "Couleur de fond fonçée", // title + "", // value + "color", // type, + true, // visible + true, // changeable + false, // required + "", // grouped + "La couleur de fond quand le site a besoin d'avoir une couleur de fond foncée" + ); + + $this->insertConfig( + 2, // order + "colorbgbody", // category + "colorbgbodylight", // id + "Couleur de fond claire", // title + "", // value + "color", // type, + true, // visible + true, // changeable + false, // required + "", // grouped + "La couleur de fond quand le site a besoin d'avoir une couleur de fond claire" + ); + + // colorfttitle = Couleur des fontes titre + $this->insertConfig( + 1, // order + "colorfttitle", // category + "colorfttitledark", // id + "Couleur des titres sur fond fonçé", // title + "", // value + "color", // type, + true, // visible + true, // changeable + false, // required + "", // grouped + "La couleur des titres sur fond fonçé" + ); + + $this->insertConfig( + 2, // order + "colorfttitle", // category + "colorfttitlelight", // id + "Couleur des titres sur fond claire", // title + "", // value + "color", // type, + true, // visible + true, // changeable + false, // required + "", // grouped + "La couleur des titres sur fond claire" + ); + + // colorftbody = Couleur des fontes titre + $this->insertConfig( + 1, // order + "colorftbody", // category + "colorftbodydark", // id + "Couleur de la police sur fond fonçé", // title + "", // value + "color", // type, + true, // visible + true, // changeable + false, // required + "", // grouped + "La couleur de la police sur fond fonçé" + ); + + $this->insertConfig( + 2, // order + "colorftbody", // category + "colorftbodylight", // id + "Couleur de la police sur fond claire", // title + "", // value + "color", // type, + true, // visible + true, // changeable + false, // required + "", // grouped + "La couleur de la police sur fond claire" + ); + + // font = nom des polices + $this->insertConfig( + 1, // order + "font", // category + "fonttitle", // id + "Police pour les titres", // title + "", // value + "font", // type, + true, // visible + true, // changeable + false, // required + "", // grouped + "La couleur de la police de votre site" + ); + + $this->insertConfig( + 2, // order + "font", // category + "fontbody", // id + "Police principale", // title + "", // value + "font", // type, + true, // visible + true, // changeable + false, // required + "", // grouped + "Nom de la police principale" + ); + + // logo = + $this->insertConfig( + 1, // order + "logo", // category + "logodark", // id + "Logo sur fond fonçé", // title + "", // value + "logo", // type, + true, // visible + true, // changeable + false, // required + "", // grouped + "Logo sur fond fonçé" + ); + + $this->insertConfig( + 2, // order + "logo", // category + "logolight", // id + "Logo sur fond clair", // title + "", // value + "logo", // type, + true, // visible + true, // changeable + false, // required + "", // grouped + "Logo sur fond clair" + ); + $output->writeln(''); return 1; @@ -90,6 +281,28 @@ class AppInitCommand extends Command } + protected function insertConfig($order,$category,$id,$title,$value,$type,$visible,$changeable,$required,$grouped,$help) { + $entity=$this->em->getRepository("App:Config")->find($id); + if(!$entity) { + $entity= new Config(); + $entity->setId($id); + $entity->setValue($value); + } + + $entity->setCategory($category); + $entity->setOrder($order); + $entity->setTitle($title); + $entity->setType($type); + $entity->setVisible($visible); + $entity->setChangeable($changeable); + $entity->setRequired($required); + $entity->setGrouped($grouped); + $entity->setHelp($help); + + $this->em->persist($entity); + $this->em->flush(); + } + private function writelnred($string) { $this->output->writeln(''.$string.''); $this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n"); diff --git a/src/ninesurvey-1.0/src/Controller/ConfigController.php b/src/ninesurvey-1.0/src/Controller/ConfigController.php new file mode 100755 index 0000000..375213a --- /dev/null +++ b/src/ninesurvey-1.0/src/Controller/ConfigController.php @@ -0,0 +1,115 @@ +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()); + } + } + } +} diff --git a/src/ninesurvey-1.0/src/Controller/CropController.php b/src/ninesurvey-1.0/src/Controller/CropController.php index d1e2def..84275c4 100644 --- a/src/ninesurvey-1.0/src/Controller/CropController.php +++ b/src/ninesurvey-1.0/src/Controller/CropController.php @@ -4,48 +4,81 @@ namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\Extension\Core\Type\HiddenType; +use Symfony\Component\Filesystem\Filesystem; class CropController extends AbstractController { // Etape 01 - Téléchargement de l'image - public function crop01() + public function crop01($type,$reportinput) { return $this->render('Crop/crop01.html.twig',[ 'useheader' => false, - 'usemenu' => false, 'usesidebar' => false, + 'type' => $type, + 'reportinput' => $reportinput ]); } // Etape 02 - Couper votre l'image - public function crop02(Request $request) + public function crop02($type,$reportinput,Request $request) { // Récupération de l'image à cropper - $large_image_location = "uploads/avatar/".$this->get('session')->get('uploadavatar'); + $file=$request->query->get('file'); + $large_image_location = "uploads/$type/$file"; // Récupérer les tailles de l'image $width = $this->getWidth($large_image_location); $height = $this->getHeight($large_image_location); - // Définir le pourcentage de réduction de l'image - $max_height=400000; - $max_width=800; - $scale = $max_height/$height; - if(($width*$scale)>$max_width) { - $scale = $max_width/$width; + // Définir le pourcentage de réduction de l'image + switch ($type) { + case "illustration": + $max_height=0; + $ratio="1:1"; + break; + + case "avatar": + $max_height=900; + $max_width=900; + $ratio="1:1"; + break; + + case "hero": + $max_height=1600; + $max_width=1600; + $ratio="16:9"; + break; + + case "image": + $max_height=1600; + $max_width=1600; + $ratio="1:1"; + break; + } + + if($max_height>0) { + $scale = $max_height/$height; + if(($width*$scale)>$max_width) { + $scale = $max_width/$width; + } + $this->resizeImage($large_image_location,$width,$height,$scale); } - $this->resizeImage($large_image_location,$width,$height,$scale); + else $scale=1; // Construction du formulaire + $submited=false; $form = $this->createFormBuilder() ->add('submit',SubmitType::class,array("label" => "Valider","attr" => array("class" => "btn btn-success","onclick" => "reportThumb()"))) ->add('x',HiddenType::class) ->add('y',HiddenType::class) ->add('w',HiddenType::class) ->add('h',HiddenType::class) + ->add('xs',HiddenType::class) + ->add('ys',HiddenType::class) + ->add('ws',HiddenType::class) + ->add('hs',HiddenType::class) ->getForm(); // Récupération des data du formulaire @@ -55,16 +88,20 @@ class CropController extends AbstractController if ($form->get('submit')->isClicked() && $form->isValid()) { // Récupération des valeurs du formulaire $data = $form->getData(); - - $thumb_image_location = "uploads/avatar/thumb_".$this->get('session')->get('uploadavatar');; - $cropped = $this->resizeThumbnailImage($thumb_image_location, $large_image_location,$data["w"],$data["h"],$data["x"],$data["y"],$scale); + $thumb_image_location = "uploads/$type/thumb_".$file; + $cropped = $this->resizeThumbnailImage($thumb_image_location, $large_image_location,$data["ws"],$data["hs"],$data["xs"],$data["ys"],$scale); + $submited=true; } return $this->render('Crop/crop02.html.twig', [ 'useheader' => false, - 'usemenu' => false, 'usesidebar' => false, - 'form' => $form->createView(), + 'form' => $form->createView(), + 'type' => $type, + 'file' => $file, + 'ratio' => $ratio, + "reportinput" => $reportinput, + "submited" => $submited ]); } @@ -77,7 +114,6 @@ class CropController extends AbstractController // Cacul de la largeur protected function getWidth($image) { - dump($image); $size = getimagesize($image); $width = $size[0]; return $width; @@ -125,6 +161,9 @@ class CropController extends AbstractController } protected function resizeThumbnailImage($thumb_image_name, $image, $width, $height, $start_width, $start_height, $scale){ + $fs = new Filesystem(); + $fs->remove($thumb_image_name); + list($imagewidth, $imageheight, $imageType) = getimagesize($image); $imageType = image_type_to_mime_type($imageType); diff --git a/src/ninesurvey-1.0/src/Controller/GroupController.php b/src/ninesurvey-1.0/src/Controller/GroupController.php index f381402..96e5e76 100755 --- a/src/ninesurvey-1.0/src/Controller/GroupController.php +++ b/src/ninesurvey-1.0/src/Controller/GroupController.php @@ -107,6 +107,7 @@ class GroupController extends AbstractController // Controle avant suppression $error=false; + if($id<0) $error=true; if($error) return $this->redirectToRoute($this->route."_update",["id"=>$id]); else { diff --git a/src/ninesurvey-1.0/src/Controller/SecurityController.php b/src/ninesurvey-1.0/src/Controller/SecurityController.php index 09047ac..3c068a9 100755 --- a/src/ninesurvey-1.0/src/Controller/SecurityController.php +++ b/src/ninesurvey-1.0/src/Controller/SecurityController.php @@ -26,7 +26,7 @@ class SecurityController extends AbstractController { $auth_mode=$this->getParameter("appAuth"); switch($auth_mode) { - case "MYSQL": + case "SQL": return $this->loginMYSQL($request,$authenticationUtils); break; @@ -140,7 +140,7 @@ class SecurityController extends AbstractController public function logout() { $auth_mode=$this->getParameter("appAuth"); switch($auth_mode) { - case "MYSQL": + case "SQL": return $this->logoutMYSQL(); break; diff --git a/src/ninesurvey-1.0/src/Controller/UserController.php b/src/ninesurvey-1.0/src/Controller/UserController.php index 86a6ab9..780c419 100755 --- a/src/ninesurvey-1.0/src/Controller/UserController.php +++ b/src/ninesurvey-1.0/src/Controller/UserController.php @@ -29,6 +29,45 @@ class UserController extends AbstractController ]); } + public function submit(Request $request) + { + // Uniquement possible si appMasteridentity = SQL + if($this->getParameter("appMasteridentity") != "SQL") return $this->redirectToRoute($this->route); + + // Initialisation de l'enregistrement + $em = $this->getDoctrine()->getManager(); + $data = new Entity(); + $data->setAvatar("noavatar.png"); + + // Création du formulaire + $form = $this->createForm(Form::class,$data,array("mode"=>"submit","appAuth"=>$this->getParameter("appAuth"),"appMasteridentity"=>$this->getParameter("appMasteridentity"))); + + // Récupération des data du formulaire + $form->handleRequest($request); + + // Sur erreur + $this->getErrorForm(null,$form,$request,$data,"submit"); + + // 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' => 'submit', + 'form' => $form->createView() + ]); + } + public function update($id,Request $request) { // Initialisation de l'enregistrement @@ -37,7 +76,7 @@ class UserController extends AbstractController $oldpassword=$data->getPassword(); // Création du formulaire - $form = $this->createForm(Form::class,$data,array("mode"=>"update","appAuth"=>$this->getParameter("appAuth"))); + $form = $this->createForm(Form::class,$data,array("mode"=>"update","appAuth"=>$this->getParameter("appAuth"),"appMasteridentity"=>$this->getParameter("appMasteridentity"))); // Récupération des data du formulaire $form->handleRequest($request); @@ -71,6 +110,30 @@ class UserController extends AbstractController ]); } + public function delete($id,Request $request) + { + // Uniquement possible si appMasteridentity = SQL + if($this->getParameter("appMasteridentity") != "SQL") return $this->redirectToRoute($this->route); + + // Initialisation de l'enregistrement + $em = $this->getDoctrine()->getManager(); + $data=$em->getRepository($this->entity)->find($id); + + // Controle avant suppression + $error=false; + if($id<0) $error=true; + + if($error) + return $this->redirectToRoute($this->route."_update",["id"=>$id]); + else { + $em->remove($data); + $em->flush(); + + // Retour à la liste + return $this->redirectToRoute($this->route); + } + } + public function profil(Request $request) { // Initialisation de l'enregistrement @@ -79,7 +142,7 @@ class UserController extends AbstractController $oldpassword=$data->getPassword(); // Création du formulaire - $form = $this->createForm(Form::class,$data,array("mode"=>"profil","appAuth"=>$this->getParameter("appAuth"))); + $form = $this->createForm(Form::class,$data,array("mode"=>"profil","appAuth"=>$this->getParameter("appAuth"),"appMasteridentity"=>$this->getParameter("appMasteridentity"))); // Récupération des data du formulaire $form->handleRequest($request); diff --git a/src/ninesurvey-1.0/src/Entity/Config.php b/src/ninesurvey-1.0/src/Entity/Config.php new file mode 100644 index 0000000..79fb6d9 --- /dev/null +++ b/src/ninesurvey-1.0/src/Entity/Config.php @@ -0,0 +1,202 @@ +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; + } + +} diff --git a/src/ninesurvey-1.0/src/Form/ConfigType.php b/src/ninesurvey-1.0/src/Form/ConfigType.php new file mode 100644 index 0000000..7f89ab8 --- /dev/null +++ b/src/ninesurvey-1.0/src/Form/ConfigType.php @@ -0,0 +1,165 @@ +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", + )); + } +} diff --git a/src/ninesurvey-1.0/src/Form/UserType.php b/src/ninesurvey-1.0/src/Form/UserType.php index 4559a44..8c04c02 100644 --- a/src/ninesurvey-1.0/src/Form/UserType.php +++ b/src/ninesurvey-1.0/src/Form/UserType.php @@ -37,7 +37,7 @@ class UserType extends AbstractType $builder->add('username', TextType::class, [ "label" =>"Login", - "disabled" => true, + "disabled" => ($options["appMasteridentity"]!="SQL"||$options["mode"]!="submit"), "attr" => ["autocomplete" => "off"], ] ); @@ -82,7 +82,7 @@ class UserType extends AbstractType $builder->add('lastname', TextType::class, [ "label" =>"Nom", - "disabled" => true, + "disabled" => ($options["appMasteridentity"]!="SQL"), ] ); @@ -90,13 +90,13 @@ class UserType extends AbstractType TextType::class, [ "label" =>"Prénom", "required" => false, - "disabled" => true, ] + "disabled" => ($options["appMasteridentity"]!="SQL"), ] ); $builder->add('email', EmailType::class, [ "label" =>"Email", - "disabled" => true, + "disabled" => ($options["appMasteridentity"]!="SQL"), ] ); @@ -107,14 +107,26 @@ class UserType extends AbstractType ] ); + if($options["appMasteridentity"]=="SQL") { + $builder->add('password', + RepeatedType::class, [ + "type" => PasswordType::class, + "required" => ($options["mode"]=="submit"?true:false), + "options" => array("always_empty" => true), + "first_options" => array("label" => "Mot de Passe","attr" => array("class" => "form-control", "style" => "margin-bottom:15px", "autocomplete" => "new-password")), + "second_options" => array('label' => 'Confirmer Mot de Passe',"attr" => array("class" => "form-control", "style" => "margin-bottom:15px")) + ] + ); + } } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( - 'data_class' => 'App\Entity\User', - 'mode' => 'string', - 'appAuth' => 'string', + 'data_class' => 'App\Entity\User', + 'mode' => 'string', + 'appAuth' => 'string', + 'appMasteridentity' => 'string', )); } } diff --git a/src/ninesurvey-1.0/src/Repository/ConfigRepository.php b/src/ninesurvey-1.0/src/Repository/ConfigRepository.php new file mode 100644 index 0000000..0f617a6 --- /dev/null +++ b/src/ninesurvey-1.0/src/Repository/ConfigRepository.php @@ -0,0 +1,15 @@ +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")); + } + } diff --git a/src/ninesurvey-1.0/src/Service/uploadListener.php b/src/ninesurvey-1.0/src/Service/uploadListener.php index b4b9623..7c97fe6 100644 --- a/src/ninesurvey-1.0/src/Service/uploadListener.php +++ b/src/ninesurvey-1.0/src/Service/uploadListener.php @@ -88,139 +88,12 @@ class uploadListener $type=$event->getType(); switch($type) { - case "avatar": + default: $file=$event->getFile(); $filename=$file->getFilename(); - $this->session->set('uploadavatar', $filename); - break; - case "document": - // Récupérer la requete - $request = $event->getRequest(); - $nameentity = $request->get('nameentity'); - $identity = $request->get('identity'); - $directory=$nameentity."/".$identity; - - // Recherche de l'entité lié - switch($nameentity) { - case "activity": - $entity=$this->em->getRepository("App:Activity")->find($identity); - break; - case "corrected": - $entity=$this->em->getRepository("App:Activity")->find($identity); - break; - case "answer": - $entity=$this->em->getRepository("App:Answer")->find($identity); - break; - case "answercorrected": - $entity=$this->em->getRepository("App:Answer")->find($identity); - break; - - } - - // Uniquement si lié à une entité - if(!$entity) - return false; - - // Information sur le fichier téléchargé - $file=$event->getFile(); - $filename=$file->getFilename(); - $pathname=$file->getPath(); - $minetype=$file->GetMimeType(); - $extention=strtolower($file->GetExtension()); - - // Déplacer le fichier dans la cible - $fs = new Filesystem(); - $fgexit=$fs->exists($pathname."/".$directory."/".$filename); - $file->move($pathname."/".$directory, $filename); - $havethumb=false; - - // Création d'un thumb dans le cas d'un fichier de type image - if (in_array(strtolower($file->GetExtension()), array('jpg', 'jpeg', 'jpe', 'png', 'gif', 'bmp'))) { - $fs = new Filesystem(); - $fs->copy($pathname."/".$directory."/".$filename,$pathname."/".$directory."/thumb/".$filename); - $max_width=350; - $width = $this->getWidth($pathname."/".$directory."/thumb/".$filename); - $height = $this->getHeight($pathname."/".$directory."/thumb/".$filename); - $scale = $max_width/$width; - $this->resizeImage($pathname."/".$directory."/thumb/".$filename,$width,$height,$scale); - $havethumb=true; - } - - // Création d'un thumb dans le cas d'un fichier de type pdf - /* - if (in_array(strtolower($file->GetExtension()), array('pdf'))) { - $im = new \Imagick(); - $im->setResolution(350, 350); - $im->readImage($pathname."/".$directory."/".$filename."[0]"); - $im->setImageBackgroundColor('#ffffff'); - $im = $im->flattenImages(); - $im->setImageFormat('jpeg'); - $fs->mkdir($pathname."/".$directory."/thumb"); - $im->writeImage($pathname."/".$directory."/thumb/".$filename.".jpg"); - $fs->rename($pathname."/".$directory."/thumb/".$filename.".jpg", $pathname."/".$directory."/thumb/".$filename); - $havethumb=true; - } - */ - - - // Creation du document si non existant - switch($nameentity) { - case "activity": - $document=$this->em->getRepository("App:Document")->findBy(["entity"=>$nameentity,"activity"=>$entity,"filename"=>$filename]); - if(!$document) { - $document=new \App\Entity\Document(); - $document->setName($filename); - $document->setRoworder(99999); - $document->setFilename($filename); - $document->setActivity($entity); - } - break; - case "corrected": - $document=$this->em->getRepository("App:Document")->findBy(["entity"=>$nameentity,"corrected"=>$entity,"filename"=>$filename]); - if(!$document) { - $document=new \App\Entity\Document(); - $document->setName($filename); - $document->setRoworder(99999); - $document->setFilename($filename); - $document->setCorrected($entity); - } - break; - case "answer": - $document=$this->em->getRepository("App:Document")->findBy(["entity"=>$nameentity,"answer"=>$entity,"filename"=>$filename]); - if(!$document) { - $document=new \App\Entity\Document(); - $document->setName($filename); - $document->setRoworder(99999); - $document->setFilename($filename); - $document->setAnswer($entity); - } - break; - case "answercorrected": - $document=$this->em->getRepository("App:Document")->findBy(["entity"=>$nameentity,"answercorrected"=>$entity,"filename"=>$filename]); - if(!$document) { - $document=new \App\Entity\Document(); - $document->setName($filename); - $document->setRoworder(99999); - $document->setFilename($filename); - $document->setAnswercorrected($entity); - } - break; - } - - // Modification du document - $document->setExtention($extention); - $document->setMinetype($minetype); - $document->setHavethumb($havethumb); - $document->setEntity($nameentity); - - // Sauvegarde - $this->em->persist($document); - $this->em->flush(); - - // Retour OK $response = $event->getResponse(); $response['file'] = $filename; - break; + break; } } } diff --git a/src/ninesurvey-1.0/templates/Config/edit.html.twig b/src/ninesurvey-1.0/templates/Config/edit.html.twig new file mode 100755 index 0000000..8ca36dd --- /dev/null +++ b/src/ninesurvey-1.0/templates/Config/edit.html.twig @@ -0,0 +1,94 @@ +{% extends 'base.html.twig' %} + +{% block body %} +{{ form_start(form) }} +

+ {% if mode=="update" %} + Modification CONFIGURATION + {% elseif mode=="submit" %} + Création CONFIGURATION + {% endif %} +

+ + {{ form_widget(form.submit) }} + + Annuler + + {% if mode=="update" and not config.required %} + + Supprimer + + {% endif %} + +

+ + {% if app.session.flashbag.has('error') %} +
+ Erreur
+ {% for flashMessage in app.session.flashbag.get('error') %} + {{ flashMessage }}
+ {% endfor %} +
+ {% endif %} + + {% if app.session.flashbag.has('notice') %} +
+ Information
+ {% for flashMessage in app.session.flashbag.get('notice') %} + {{ flashMessage }}
+ {% endfor %} +
+ {% endif %} + +
+
+ Informations +
+ +
+ {{ form_row(form.id) }} + {{ form_row(form.value) }} + {% if config.type=="logo" %} +
+ {% set color = "" %} + {% if config.id=='logodark' %} + {% set color = app.session.get('colorbgbodydark') %} + {% elseif config.id=='logolight' %} + {% set color = app.session.get('colorbgbodylight') %} + {% endif %} + + + Modifier +
+ {% elseif config.type=="hero" %} +
+ + Modifier +
+ {% elseif config.type=="image" %} +
+ + Modifier +
+ {% endif %} + {{ form_row(form.help) }} +
+
+{{ form_end(form) }} + +{% endblock %} + +{% block localjavascript %} + $("#config_value_img").on('error', function(){ + var imgSrc = $(this).attr('src'); + if(imgSrc!="/{{appAlias}}/uploads/{{config.type}}/") + $(this).attr('src',imgSrc); + }); + $('#mymodallarge').on('hidden.bs.modal', function () { + var imgSrc = $("#config_value_img").attr('src'); + $("#config_value_img").attr('src',imgSrc); + }); +{% endblock %} diff --git a/src/ninesurvey-1.0/templates/Config/list.html.twig b/src/ninesurvey-1.0/templates/Config/list.html.twig new file mode 100644 index 0000000..f13c66b --- /dev/null +++ b/src/ninesurvey-1.0/templates/Config/list.html.twig @@ -0,0 +1,60 @@ +{% extends "base.html.twig" %} + +{% block body %} +

+CONFIGURATIONS +

+ + +
+
+

Générale

+ {{ render(path("app_config_render",{category:"site"})) }} +
+ +
+

Couleurs des fonds de page

+ {{ render(path("app_config_render",{category:"colorbgbody"})) }} +
+ +
+

Polices

+ {{ render(path("app_config_render",{category:"font"})) }} +
+ +
+

Couleurs des titres

+ {{ render(path("app_config_render",{category:"colorfttitle"})) }} +
+ +
+

Couleurs de la police

+ {{ render(path("app_config_render",{category:"colorftbody"})) }} +
+ +
+

Logo

+ {{ render(path("app_config_render",{category:"logo"})) }} +
+
+ + + + + + + + + +{% endblock %} + +{% block localjavascript %} + $(document).ready(function() { + $('#dataTables').DataTable({ + columnDefs: [ { "targets": "no-sort", "orderable": false }, { "targets": "no-string", "type" : "num" } ], + responsive: true, + iDisplayLength: 100, + order: [[ 1, "asc" ]] + }); + }); +{% endblock %} \ No newline at end of file diff --git a/src/ninesurvey-1.0/templates/Config/logo.html.twig b/src/ninesurvey-1.0/templates/Config/logo.html.twig new file mode 100644 index 0000000..8829da6 --- /dev/null +++ b/src/ninesurvey-1.0/templates/Config/logo.html.twig @@ -0,0 +1,42 @@ +{% extends "base.html.twig" %} + +{% block encorelinktags %} + {{ encore_entry_link_tags('dropzone') }} +{% endblock encorelinktags %} + +{% block body %} + + Annuler + +
+
+{% endblock %} + +{% block encorescripttags %} + {{ encore_entry_script_tags('dropzone') }} +{% endblock %} + +{% block localjavascript %} + Dropzone.options.MyDropZone = { + acceptedMimeTypes: 'image/*', + maxFiles: 1, + resizeWidth:500, + + success: function( file, response ){ + parent.$("#config_value").val(response["file"]); + parent.$("#config_value_img").attr("src","/{{ appAlias }}/uploads/logo/"+response["file"]); + closeModal(); + } + } + + function closeModal() { + window.parent.$("#mymodallarge").modal('hide'); + } + + $(window).load(function () { + // On vérifie que l'execution se fait bien dans le cadre d'une modal + if(!window.parent.$("#mymodallarge #framemodal").length) { + $(location).attr('href',"{{ path('app_home') }}"); + } + }); +{% endblock %} diff --git a/src/ninesurvey-1.0/templates/Config/render.html.twig b/src/ninesurvey-1.0/templates/Config/render.html.twig new file mode 100644 index 0000000..69d5076 --- /dev/null +++ b/src/ninesurvey-1.0/templates/Config/render.html.twig @@ -0,0 +1,78 @@ + + + {% for config in configs|sort((a, b) => a.order <=> b.order) %} + {% set continue = true %} + {% if not config.grouped is empty %} + + {% if app.session.get(config.grouped)==0 %} + {% set continue = false %} + {% endif %} + {% endif %} + + {%if continue %} + + + + + {% set val = config.value %} + {% if val is empty %} + {% set val=app.session.get(config.id) %} + {% endif %} + + {% set color = "" %} + {% set bgcolor = "" %} + {% set otherstyle = "" %} + {% if config.id=='colorbgbodydark' %} + {% set bgcolor = val %} + {% set color = app.session.get('colorfttitledark') %} + {% elseif config.id=='colorbgbodylight' %} + {% set bgcolor = val %} + {% set color = app.session.get('colorfttitlelight') %} + {% elseif config.id=='colorfttitledark' %} + {% set bgcolor = app.session.get('colorbgbodydark') %} + {% set color = val %} + {% elseif config.id=='colorfttitlelight' %} + {% set bgcolor = app.session.get('colorbgbodylight') %} + {% set color = val %} + {% elseif config.id=='colorftbodydark' %} + {% set bgcolor = app.session.get('colorbgbodydark') %} + {% set color = val %} + {% elseif config.id=='colorftbodylight' %} + {% set bgcolor = app.session.get('colorbgbodylight') %} + {% set color = val %} + {% elseif config.id=='logodark' %} + {% set bgcolor = app.session.get('colorbgbodydark') %} + {% set otherstyle = "text-align: center;" %} + {% elseif config.id=='logolight' %} + {% set bgcolor = app.session.get('colorbgbodylight') %} + {% set otherstyle = "text-align: center;" %} + {% endif %} + + + + {% endif %} + {% endfor %} + +
+ {% if config.changeable %} + + {% endif %} + + {% if not config.required %} + + {% endif %} + {{config.title}} + + + {% if config.type=="boolean" %} + {% if val=="0" %} Non + {% elseif val=="1" %} Oui + {%endif%} + {% elseif config.type=="logo" %} + {%if not val is empty %} + + {% endif %} + {% else %} + {{ val|raw }} + {% endif %} +
diff --git a/src/ninesurvey-1.0/templates/Crop/crop01.html.twig b/src/ninesurvey-1.0/templates/Crop/crop01.html.twig index f1d6fa7..eaf4146 100644 --- a/src/ninesurvey-1.0/templates/Crop/crop01.html.twig +++ b/src/ninesurvey-1.0/templates/Crop/crop01.html.twig @@ -9,7 +9,7 @@ -
+ {% endblock %} @@ -26,11 +26,11 @@ acceptedMimeTypes: 'image/*', //renameFilename: false, success: function(file, response){ - $(location).attr('href',"{{ path('app_crop02') }}"); + $(location).attr('href',"{{ path('app_crop02', {"type": type, "reportinput": reportinput }) }}?file="+response["file"]); } } function closeModal() { - window.parent.$("#extraLargeModal").modal('hide'); + window.parent.$("#mymodallarge").modal('hide'); } {% endblock %} diff --git a/src/ninesurvey-1.0/templates/Crop/crop02.html.twig b/src/ninesurvey-1.0/templates/Crop/crop02.html.twig index ada9256..45071f9 100644 --- a/src/ninesurvey-1.0/templates/Crop/crop02.html.twig +++ b/src/ninesurvey-1.0/templates/Crop/crop02.html.twig @@ -1,41 +1,64 @@ {% extends 'base.html.twig' %} +{% block localstyle %} + img.crop-image{ width:100% } +{% endblock %} + {% block body %} {{ form_start(form) }} {{ form_widget(form.submit) }} -
- Thumbnail Preview + {% if ratio=="1:1" %} + {% set class="width:90px; height:90px;" %} + {% elseif ratio=="16:9" %} + {% set class="width:160px; height:90px;" %} + {% elseif ratio=="16:2" %} + {% set class="width:160px; height:20px;" %} + {% endif %} + +
+ Thumbnail Preview
-
-
+
+
{{ form_end(form) }} - {% endblock %} {% block localjavascript %} function move(data) { - $('#form_x').val(data.xScaledToImage); - $('#form_y').val(data.yScaledToImage); + $('#form_x').val(data.x); + $('#form_y').val(data.y); + $('#form_xs').val(data.xScaledToImage); + $('#form_ys').val(data.yScaledToImage); preview(); } function resize(data) { - $('#form_w').val(data.widthScaledToImage); - $('#form_h').val(data.heightScaledToImage); + $('#form_w').val(data.width); + $('#form_h').val(data.height); + $('#form_ws').val(data.widthScaledToImage); + $('#form_hs').val(data.heightScaledToImage); preview(); } function preview(data) { - var scaleX = 90 / $('#form_w').val(); - var scaleY = 90 / $('#form_h').val(); + {% if ratio=="1:1" %} + var scaleX = 90 / $('#form_w').val(); + var scaleY = 90 / $('#form_h').val(); + {% elseif ratio=="16:9" %} + var scaleX = 160 / $('#form_w').val(); + var scaleY = 160 / $('#form_h').val(); + {% elseif ratio=="16:2" %} + var scaleX = 160 / $('#form_w').val(); + var scaleY = 160 / $('#form_h').val(); + {% endif %} $('#preview img').css({ width: Math.round(scaleX * $('#largeimg').width()) + 'px', @@ -47,24 +70,47 @@ } function reportThumb() { - window.parent.$("#user_avatar").val("thumb_{{ app.session.get('uploadavatar') }}"); - window.parent.$("#user_avatar_img").attr("src","/{{ appAlias }}/uploads/avatar/thumb_{{ app.session.get('uploadavatar') }}"); - closeModal(); + {% if reportinput == "refresh" %} + window.parent.location.reload(); + {% elseif reportinput != "none" %} + window.parent.$("#{{ reportinput }}").val("thumb_{{ file }}"); + window.parent.$("#{{ reportinput }}_img").attr("src","/{{ appAlias }}/uploads/{{ type }}/thumb_{{ file }}"); + {% endif %} + + closeModal(); } function closeModal() { - window.parent.$("#extraLargeModal").modal('hide'); + window.parent.$("#mymodallarge").modal('hide'); } $(document).ready(function() { window.parent.$(".modal-title").html("ETAPE 2 - Découper votre image"); + realheight=$('#largeimg').height(); + realwidth=$('#largeimg').width(); + + if(realheight>505) { $('#largeimg').height(505); $('#largeimg').width("auto") } + if($('#largeimg').width() > 868) { $('#largeimg').width(868); $('#largeimg').height("auto") } + + resizeheight=$('#largeimg').height(); + resizewidth=$('#largeimg').width(); + $('#largeimg').CropSelectJs({ - imageSrc: "/{{ appAlias }}/uploads/avatar/{{ app.session.get('uploadavatar') }}", + imageSrc: "/{{ appAlias }}/uploads/{{type}}/{{ file }}", selectionResize: function(data) { resize(data); }, selectionMove: function(data) { move(data); }, }); - $('#largeimg').CropSelectJs('setSelectionAspectRatio',1); + + {% if ratio=="1:1" %} + {% set nbratio=1 %} + {% elseif ratio=="16:9" %} + {% set nbratio=(16/9) %} + {% elseif nbratio=="16:2" %} + {% set class=(16/2) %} + {% endif %} + + $('#largeimg').CropSelectJs('setSelectionAspectRatio',{{nbratio}}); }); diff --git a/src/ninesurvey-1.0/templates/Home/login.html.twig b/src/ninesurvey-1.0/templates/Home/login.html.twig index 54b9806..84beedc 100755 --- a/src/ninesurvey-1.0/templates/Home/login.html.twig +++ b/src/ninesurvey-1.0/templates/Home/login.html.twig @@ -1,18 +1,15 @@ {% extends "base.html.twig" %} {% block localstyle %} - body { - background-color: #efefef; - } - .homecard { - padding-top: 20px; + label { + color: var(--colorftbodylight); } {% endblock %} {% block body %}
-
-

{{appName}}

+ +

{{appName}}

@@ -33,4 +30,10 @@
+{% endblock %} + +{% block localjavascript %} + $(document).ready(function() { + $("#username").focus(); + }); {% endblock %} \ No newline at end of file diff --git a/src/ninesurvey-1.0/templates/Include/javascript.js.twig b/src/ninesurvey-1.0/templates/Include/javascript.js.twig index 8b44992..6ae8b1a 100644 --- a/src/ninesurvey-1.0/templates/Include/javascript.js.twig +++ b/src/ninesurvey-1.0/templates/Include/javascript.js.twig @@ -18,6 +18,6 @@ $(document).ready(function() { function ModalLoad(idmodal,title,path) { $("#"+idmodal+" .modal-header h4").text(title); - $("#"+idmodal+" #framemodal").attr("src",path); + $("#"+idmodal+" iframe").attr("src",path); $("#"+idmodal).modal("show"); } diff --git a/src/ninesurvey-1.0/templates/Include/sidebar.html.twig b/src/ninesurvey-1.0/templates/Include/sidebar.html.twig index ff076fb..b98950e 100644 --- a/src/ninesurvey-1.0/templates/Include/sidebar.html.twig +++ b/src/ninesurvey-1.0/templates/Include/sidebar.html.twig @@ -3,6 +3,13 @@ {% if is_granted('ROLE_ADMIN') %}
  • Administration
  • + +
  • + + Configurations + +
  • +
  • Utilisateurs diff --git a/src/ninesurvey-1.0/templates/Include/style.css.twig b/src/ninesurvey-1.0/templates/Include/style.css.twig index bf3d54a..d4633df 100644 --- a/src/ninesurvey-1.0/templates/Include/style.css.twig +++ b/src/ninesurvey-1.0/templates/Include/style.css.twig @@ -1,148 +1,108 @@ -/* global */ -h1{ - padding: 40px 0px 9px 0px; - border-bottom: 1px solid #eee; +:root{ + --colorbgbodylight: {{ app.session.get('colorbgbodylight')|raw }}; + --colorbgbodydark: {{ app.session.get('colorbgbodydark')|raw }}; + --colorfttitlelight: {{ app.session.get('colorfttitlelight')|raw }}; + --colorfttitledark: {{ app.session.get('colorfttitledark')|raw }}; + --colorftbodylight: {{ app.session.get('colorftbodylight')|raw }}; + --colorftbodydark: {{ app.session.get('colorftbodydark')|raw }}; + --fontbody: "{{ app.session.get('fontbody')|raw }}"; + --fonttitle: "{{ app.session.get('fonttitle')|raw }}"; } -.nav a{ - background: none; - color: #CFD8DC; - font-size: 14px; - padding: 5px 0px 5px 25px; - display: block; +/* COLOR BODY */ + +body { + background-color: var(--colorbgbodylight); + color: var(--colorftbodylight); +} + +.card { + background-color: var(--colorbgbodylight); +} + +body .navbar.bg-dark { + background-color: var(--colorbgbodydark)!important; +} + +body #sidebar { + background-color: var(--colorbgbodydark); +} + +body #sidebar .title { + color: var(--colorfttitledark); +} + +body #sidebar .nav a { + color: var(--colorfttitledark); +} + +body h1, body h2, body h3 { + color: var(--colorfttitlelight); +} + +body a, body .btn-link { + color: var(--colorfttitlelight); +} + +body .nav a{ + color: var(--colorfttitledark); } -/* Sidebar Styles */ -.contentsidebar { - margin-left:250px; +/* COLOR BODY HOME */ + + +body.monocolor { + background-color: var(--colorbgbodydark); + color: var(--colorftbodydark); } -#sidebar { - z-index: 1000; - position: fixed; - left: 250px; - width: 250px; - height: 100%; - margin-left: -250px; - overflow-y: auto; - background: #37474F; - -webkit-transition: all 0.5s ease; - -moz-transition: all 0.5s ease; - -o-transition: all 0.5s ease; - transition: all 0.5s ease; +body.monocolor .card { + background-color: var(--colorbgbodydark); } -#sidebar header { - background-color: #263238; - font-size: 20px; - line-height: 52px; - text-align: center; +body.monocolor .navbar.bg-dark { + background-color: var(--colorbgbodydark)!important; } -#sidebar header a { - color: #fff; - display: block; - text-decoration: none; +body.monocolor #sidebar { + background-color: var(--colorbgbodydark); } -#sidebar header a:hover { - color: #fff; +body.monocolor #sidebar .title { + color: var(--colorfttitledark); } -#sidebar .nav{ - display: block; +body.monocolor #sidebar .nav a { + color: var(--colorfttitledark); } -#sidebar .nav a { - padding: 0px 10px 5px 10px; +body.monocolor h1, body.monocolor h2, body.monocolor h3 { + color: var(--colorfttitledark); } -#sidebar .nav .last{ - border-bottom: 5px solid #455A64; - padding-bottom:5px; +body.monocolor a, body.monocolor .btn-link { + color: var(--colorfttitledark); } -#sidebar .title { - color: #CFD8DC; - font-size: 16px; - padding: 0px 10px 0px 10px; - display: block; - text-transform: uppercase; - margin-left: 0px !important; - font-weight: bold; +body.monocolor .nav a{ + color: var(--colorfttitledark); } -#sidebar .nav .last{ - border-bottom: 5px solid #455A64; - padding-bottom:5px; + + +/* FONT */ +body { + font-family: var(--fontbody); } -#sidebar .nav a:hover{ - background: none; - color: #ECEFF1; +h1,h2,h3, .navbar-brand { + font-family: var(--fonttitle); } -#sidebar .nav a .fa{ - margin-right: 5px; -} -#sidebar .nav .select-control { - padding: 0px 10px 5px 10px; - margin-top: -12px; -} - -.avatar { - background-color: #343a40; - width: 35px; - height: 35px; - border-radius: 100%; - margin-top: -5px; -} - -.avatar.big{ - width: 90px; - height: 90px; - margin-bottom: 10px; -} - -@media (max-width: 991px) { - .contentsidebar { - margin-left: auto; - } - - #sidebar { - position: static; - margin:0px -15px; - width: auto; - } -} - -a.btn { - color:#ffffff; -} - -.btn-link { +{% if not useheader is defined or not useheader %} +#main { padding:0px; } - -.media-body p { - font-size :12px; - margin-bottom:0px; -} - - -@media (min-width: 992px) { - #sidebar { - display: block; - } -} - -{% if useheader is defined and useheader %} -#main { - padding-top:55px; -} -{% endif %} - - -th.dt-center, td.dt-center { text-align: center; } +{%endif%} \ No newline at end of file diff --git a/src/ninesurvey-1.0/templates/User/edit.html.twig b/src/ninesurvey-1.0/templates/User/edit.html.twig index 9828169..94e7bc8 100755 --- a/src/ninesurvey-1.0/templates/User/edit.html.twig +++ b/src/ninesurvey-1.0/templates/User/edit.html.twig @@ -47,8 +47,8 @@ {% endif %} {{ form_widget(form.avatar) }} - {% if appMasteridentity=="LDAP" %} - Modifier + {% if appMasteridentity=="LDAP" or appMasteridentity=="SQL" %} + Modifier {% endif %}
  • @@ -89,21 +89,6 @@
    {{ form_end(form) }} - - - {% endblock %} {% block localjavascript %} @@ -121,9 +106,4 @@ if(imgSrc!="/{{appAlias}}/uploads/avatar/") $(this).attr('src',imgSrc); }); - - function showModal() { - $("#frameModal").attr("src","{{path("app_crop01")}}"); - $("#extraLargeModal").modal("show"); - } {% endblock %} diff --git a/src/ninesurvey-1.0/templates/User/list.html.twig b/src/ninesurvey-1.0/templates/User/list.html.twig index 123abaa..826da0e 100644 --- a/src/ninesurvey-1.0/templates/User/list.html.twig +++ b/src/ninesurvey-1.0/templates/User/list.html.twig @@ -5,6 +5,10 @@ UTILISATEURS + {% if appMasteridentity == "SQL" %} +

    Ajouter

    + {% endif %} +
    Liste des Utilisateurs @@ -29,6 +33,9 @@ UTILISATEURS + {% if user.id >=0 and appMasteridentity == "SQL" %} + + {% endif %} {{user.username}} diff --git a/src/ninesurvey-1.0/templates/base.html.twig b/src/ninesurvey-1.0/templates/base.html.twig index 8c425ed..5a9a679 100644 --- a/src/ninesurvey-1.0/templates/base.html.twig +++ b/src/ninesurvey-1.0/templates/base.html.twig @@ -2,7 +2,7 @@ - {% block title %}{{ appName }}{% endblock %} + {% block title %}{{app.session.get("appname")}}{% endblock %} @@ -14,9 +14,11 @@ {% endblock encorelinktags %} - + + + - + {% set class="" %} + {% if usemonocolor is defined and usemonocolor %} + {% set class="monocolor" %} + {% endif %} + + {% if useheader is defined and useheader %}
    + {{ encore_entry_script_tags('app') }} @@ -126,6 +146,13 @@