This commit is contained in:
afornerot 2020-11-15 17:50:07 +01:00
parent 4523f516e0
commit 85ff851a1a
72 changed files with 1344 additions and 31 deletions

View File

@ -1,10 +1,16 @@
// JQuery // JQuery
window.$ = window.jQuery = require('jquery'); window.$ = window.jQuery = require('jquery');
// JQueryui
require('jqueryui');
// Bootstrap // Bootstrap
require('bootstrap'); require('bootstrap');
require('bootstrap/dist/css/bootstrap.min.css'); require('bootstrap/dist/css/bootstrap.min.css');
// timepicki
const timepicki = require('timepicki/js/timepicki.js');
// Datatables // Datatables
require('datatables.net-bs4'); require('datatables.net-bs4');
require('./datatables.init.js'); require('./datatables.init.js');
@ -13,14 +19,29 @@ require('datatables.net-bs4/css/dataTables.bootstrap4.min.css');
// Fontawesome // Fontawesome
require('@fortawesome/fontawesome-free/css/all.css'); require('@fortawesome/fontawesome-free/css/all.css');
// bs-stepper
require('bs-stepper/dist/css/bs-stepper.min.css');
const Stepper = require('bs-stepper/dist/js/bs-stepper.min.js');
global.Stepper = Stepper;
// Masonery
const masonry = require('masonry-layout/dist/masonry.pkgd.min.js');
global.masonry = masonry;
// Slick
require('slick-carousel/slick/slick.css');
const slick = require('slick-carousel/slick/slick.min.js');
global.slick = slick;
// Imageloaded
const imagesLoaded = require('imagesloaded/imagesloaded.js');
global.imagesLoaded = imagesLoaded;
// Moment // Moment
const moment = require('moment'); const moment = require('moment');
global.moment = moment; global.moment = moment;
require('moment/locale/fr.js'); require('moment/locale/fr.js');
// TempusDominus
require('tempusdominus-bootstrap-4');
// Select2 // Select2
require('select2'); require('select2');
require('select2/dist/js/i18n/fr.js'); require('select2/dist/js/i18n/fr.js');

View File

@ -53,6 +53,15 @@ app_config_logo:
path: /admin/config/logo path: /admin/config/logo
defaults: { _controller: App\Controller\ConfigController:logo } defaults: { _controller: App\Controller\ConfigController:logo }
#== Theme ================================================================================================================
app_theme:
path: /admin/theme
defaults: { _controller: App\Controller\ThemeController:list }
app_theme_select:
path: /admin/theme/select/{name}
defaults: { _controller: App\Controller\ThemeController:select, name: "" }
#== Sonde ================================================================================================================ #== Sonde ================================================================================================================
app_sonde: app_sonde:
path: /sonde path: /sonde

View File

@ -0,0 +1,174 @@
@font-face {
font-family: 'Redressed';
src: url('../fonts/Redressed-webfont.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Acme-Regular';
src: url('../fonts/Acme-Regular-webfont.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Peacesans';
src: url('../fonts/Peacesans-webfont.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Roboto-Regular';
src: url('../fonts/Roboto-Regular-webfont.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Justanotherhand-Regular';
src: url('../fonts/Justanotherhand-Regular-webfont.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Lato-Regular';
src: url('../fonts/Lato-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'ABeeZee-Regular';
src: url('../fonts/ABeeZee-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'AlfaSlabOne-Regular';
src: url('../fonts/AlfaSlabOne-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Anton-Regular';
src: url('../fonts/Anton-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'FredokaOne-Regular';
src: url('../fonts/FredokaOne-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Overpass-Black';
src: url('../fonts/Overpass-Black.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Righteous-Regular';
src: url('../fonts/Righteous-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Signika-Regular';
src: url('../fonts/Signika-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Teko-Bold';
src: url('../fonts/Teko-Bold.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'LuckiestGuy-Regular';
src: url('../fonts/LuckiestGuy-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Baloo-Regular';
src: url('../fonts/Baloo-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'CarterOne-Regular';
src: url('../fonts/CarterOne-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Chewy-Regular';
src: url('../fonts/Chewy-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Courgette-Regular';
src: url('../fonts/Courgette-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'LexendDeca-Regular';
src: url('../fonts/LexendDeca-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'RubikMonoOne-Regular';
src: url('../fonts/RubikMonoOne-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'SigmarOne-Regular';
src: url('../fonts/SigmarOne-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Viga-Regular';
src: url('../fonts/Viga-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Grandstander';
src: url('../fonts/Grandstander-Black.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'PassionOne';
src: url('../fonts/PassionOne-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}

View File

@ -0,0 +1,460 @@
h1{
padding: 40px 0px 9px 0px;
border-bottom: 1px solid #eee;
}
.nav a{
background: none;
color: #CFD8DC;
font-size: 14px;
padding: 5px 0px 5px 25px;
display: block;
}
/* Sidebar Styles */
.contentsidebar {
margin-left:250px;
}
#sidebar {
z-index: 1000;
position: fixed;
left: 0px;
width: 250px;
height: 100%;
overflow-y: auto;
background: #37474F;
}
#sidebar header {
background-color: #263238;
font-size: 20px;
line-height: 52px;
text-align: center;
}
#sidebar header a {
color: #fff;
display: block;
text-decoration: none;
}
#sidebar header a:hover {
color: #fff;
}
#sidebar .nav{
display: block;
margin: 0px 10px;
}
#sidebar .nav a {
padding: 0px 10px 5px 10px;
}
#sidebar .nav .last{
border-bottom: 1px solid #455A64;
padding-bottom:5px;
margin-bottom: 10px;
}
#sidebar .title {
color: #CFD8DC;
font-size: 16px;
padding: 0px 10px 0px 10px;
display: block;
text-transform: uppercase;
margin-left: 0px !important;
font-weight: bold;
}
#sidebar .nav a:hover{
background: none;
color: #ECEFF1;
}
#sidebar .nav a .fa{
margin-right: 5px;
width: 20px;
text-align: center;
}
#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 {
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; }
/* heros */
.heroheader {
width:100%;
height:800px;
position:relative;
}
.heroheader div{
width:100%;
height:100%;
background-size: cover;
background-position: center;
color:#fff;
text-align: center;
}
/* Dots */
.slick-dotted.slick-slider
{
margin-bottom: 30px;
}
.slick-dots
{
position: absolute;
bottom: -105px;
display: block;
width: 100%;
padding: 0;
margin: 0;
list-style: none;
text-align: center;
}
.slick-dots li
{
position: relative;
display: inline-block;
width: 20px;
height: 20px;
margin: 0 5px;
padding: 0;
cursor: pointer;
}
.slick-dots li button
{
font-size: 0;
line-height: 0;
display: block;
width: 20px;
height: 20px;
padding: 5px;
cursor: pointer;
color: transparent;
border: 0;
outline: none;
background: transparent;
}
.slick-dots li button:hover,
.slick-dots li button:focus
{
outline: none;
}
.slick-dots li button:hover:before,
.slick-dots li button:focus:before
{
opacity: 1;
}
.slick-dots li button:before
{
font-family: 'slick';
font-size: 6px;
line-height: 20px;
position: absolute;
top: 0;
left: 0;
width: 20px;
height: 20px;
content: '•';
text-align: center;
opacity: .25;
color: black;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.slick-dots li.slick-active button:before
{
opacity: .75;
color: black;
}
.slick-dotted.slick-slider{margin-bottom:0px;}
.slick-dots {
position: absolute;
top: 135px;
left:46px;
text-align:left;
z-index: 9100;
bottom:unset;
width:auto;
}
.heroheader-dot { color:#fff; }
.herobox {
position:absolute;
float: left;
top: 0;
bottom: 0;
left: -200px;
z-index: 8000;
padding: 0;
text-align: center;
text-shadow: none;
background-color: rgba(0,0,0,0.7);
height: auto;
width: 45%;
box-shadow: 0px -1px 2px rgba(0,0,0,0.5);
margin: 0 auto;
//opacity: 0.9;
transform-origin: 50% 50%;
transform: skew(-20deg);
-webkit-transform: skew(-20deg);
-moz-transform: skew(-20deg);
-o-transform: skew(-20deg);
-ms-transform: skew(-20deg);
border-left: 1px solid #fff;
border-right: 1px solid #fff;
}
.herotitle {
text-align: left;
position:absolute;
//width:100%;
top: 80px;
left:50px;
z-index: 9000;
}
.herotitle h1 {
padding:0px;
border:none;
}
.heromenu {
padding-top: 30px;
font-size: 20px;
}
.herofloatmenu .avatar {
width: 20px;
height: 20px;
margin: 3px 3px 0px 0px;
}
.herofloatmenu a:hover {
text-decoration: none;
}
.heromenu .linkmenu {
font-size:16px;
padding-left: 5px;
}
.heromenu .linkmenu a {
margin-right:5px;
}
.herologo {
position: absolute;
top: 0px;
text-align: center;
width: 100%;
}
.herologo img {max-height:200px;}
@media (max-width: 980px) {
.herobox { display: none; }
.herotitle { width:100%; top: 70px; left:0px; text-align:center; }
.slick-dots { top: 120px; left: 0px; text-align: center; width: 100%; }
.heromenu .facatmenu {display: none;}
.catmenu { display:none }
.linkmenu { display:none }
.herofloatmenu a {
font-size: 40px;
}
.herofloatmenu .avatar {
height: 40px;
width:40px;
margin-top:15px;
}
}
.grid-sizer { width: 10%; margin-bottom: 0%;float:left;}
.grid-item-size { width: 10%; margin-bottom: 0%;float:left;}
.grid-item-size-2 { width: 20%; margin-bottom: 0%;float:left;}
.grid-item-size-3 { width: 30%; margin-bottom: 0%;float:left;}
.grid-item-size-4 { width: 40%; margin-bottom: 0%;float:left;}
.grid-item-size-5 { width: 40%; margin-bottom: 0%;float:left;}
.grid-item-size-6 { width: 60%; margin-bottom: 0%;float:left;}
.grid-item-size-7 { width: 70%; margin-bottom: 0%;float:left;}
.grid-item-size-8 { width: 80%; margin-bottom: 0%;float:left;}
.grid-item-size-9 { width: 90%; margin-bottom: 0%;float:left;}
.grid-item-full { width: 100%; margin-bottom: 0%; font-size:20px;float:left; }
.grid-item-full h1 {margin: 0; border:none; padding: 20px 0px 0px 10px; }
.gutter-sizer { width: 0%;float:left; }
@media (max-width: 980px) {
.grid-sizer { width: 50%; margin-bottom: 0%;}
.grid-item-size { width: 50%; margin-bottom: 0%;}
}
.foliomenu {
position: fixed;
width:100%;
height:60px;
background-color: var(--colorbgbodydark) ;
z-index: 100000;
display:none;
padding-left:10px;
border-bottom: 1px solid var(--colorftbodydark);
}
.foliomenu .logo { float:left; height:40px; margin-top:7px }
.foliomenu .avatar { height: 20px; margin: 3px 3px 0px 0px; width: 20px; }
.foliomenu div { padding: 10px; line-height:35px; float:left;}
.foliomenu a {
color: var(--colorftbodydark);
font-size: 15px;
}
.foliomenu .float-right a:hover {
text-decoration: none;
}
.foliomenu .fa { font-size: 14px; color: var(--colorftbodydark);}
.foliotop {
float:right;
position:fixed;
bottom: 10px;
right:10px;
z-index: 100000;
background-color: var(--colorbgbodydark) ;
padding:10px;
border-radius: 100%;
width:55px;
height:55px;
text-align: center;
line-height: 28px;
border: 1px solid var(--colorbgbodylight);
display:none;
}
.foliotop a {
color: var(--colorftbodydark);
font-size: 25px;
}
@media (max-width: 980px) {
.herofloatmenu {
display:none;
}
.foliomenu {
display: block!important;
}
.foliomenu a {
font-size:30px;
}
.foliomenu .float-right a {
margin-top: -8px;
}
.foliomenu .float-right img {
height:35px;
width:35px;
margin-top:0px;
}
.foliomenu .float-right .fa {
font-size:30px!important;
}
}
.linkurl a {
background-color: var(--colorbgbodylight) ;
color: var(--colorftbodylight)!important;
font-size: 14px;
padding: 5px;
display: inline-block;
margin: 0px 10px 10px 0px;
}
.contactdescription {
max-width:300px;
text-align:justify;
}

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

View File

@ -0,0 +1,3 @@
name: Nineblue
author: Arnaud Fornerot
version: 1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -0,0 +1,43 @@
:root{
--colorbgbodydark: #3a539b;
--colorfttitlelight: #3a539b;
/* Vous pouvez forcer l'ensemble de ces variables ou laisser la valeur par défaut
--colorbgbodylight: #;
--colorbgbodydark: #;
--colorfttitlelight: #;
--colorfttitledark: #;
--colorftbodylight: #;
--colorftbodydark: #;
--fontbody: "";
--fonttitle: "";
--fontsizeh1: px;
--fontsizeh2: px;
--fontsizeh3: px;
--fontsizeh4: px;
--colorbgbodylight-darker: #;
--colorfttitlelight-darker: #;
}
*/
}
/* Puis sur classer l'ensemble de la feuille de style */

View File

@ -0,0 +1,3 @@
name: Ninedark
author: Arnaud Fornerot
version: 1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -0,0 +1,44 @@
:root{
--colorbgbodydark: #2e3131;
--colorfttitlelight: #2e3131;
--colorfttitlelight-darker: #95a5a6;
/* Vous pouvez forcer l'ensemble de ces variables ou laisser la valeur par défaut
--colorbgbodylight: #;
--colorbgbodydark: #;
--colorfttitlelight: #;
--colorfttitledark: #;
--colorftbodylight: #;
--colorftbodydark: #;
--fontbody: "";
--fonttitle: "";
--fontsizeh1: px;
--fontsizeh2: px;
--fontsizeh3: px;
--fontsizeh4: px;
--colorbgbodylight-darker: #;
--colorfttitlelight-darker: #;
}
*/
}
/* Puis sur classer l'ensemble de la feuille de style */

View File

@ -0,0 +1,3 @@
name: Ninegray
author: Arnaud Fornerot
version: 1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

@ -0,0 +1,43 @@
:root{
--colorbgbodydark: #6c7a89;
--colorfttitlelight: #6c7a89;
/* Vous pouvez forcer l'ensemble de ces variables ou laisser la valeur par défaut
--colorbgbodylight: #;
--colorbgbodydark: #;
--colorfttitlelight: #;
--colorfttitledark: #;
--colorftbodylight: #;
--colorftbodydark: #;
--fontbody: "";
--fonttitle: "";
--fontsizeh1: px;
--fontsizeh2: px;
--fontsizeh3: px;
--fontsizeh4: px;
--colorbgbodylight-darker: #;
--colorfttitlelight-darker: #;
}
*/
}
/* Puis sur classer l'ensemble de la feuille de style */

View File

@ -0,0 +1,3 @@
name: Ninegreen
author: Arnaud Fornerot
version: 1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -0,0 +1,43 @@
:root{
--colorbgbodydark: #1e824c;
--colorfttitlelight: #1e824c;
/* Vous pouvez forcer l'ensemble de ces variables ou laisser la valeur par défaut
--colorbgbodylight: #;
--colorbgbodydark: #;
--colorfttitlelight: #;
--colorfttitledark: #;
--colorftbodylight: #;
--colorftbodydark: #;
--fontbody: "";
--fonttitle: "";
--fontsizeh1: px;
--fontsizeh2: px;
--fontsizeh3: px;
--fontsizeh4: px;
--colorbgbodylight-darker: #;
--colorfttitlelight-darker: #;
}
*/
}
/* Puis sur classer l'ensemble de la feuille de style */

View File

@ -0,0 +1,3 @@
name: Nineorange
author: Arnaud Fornerot
version: 1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View File

@ -0,0 +1,43 @@
:root{
--colorbgbodydark: #f15a22;
--colorfttitlelight: #f15a22;
/* Vous pouvez forcer l'ensemble de ces variables ou laisser la valeur par défaut
--colorbgbodylight: #;
--colorbgbodydark: #;
--colorfttitlelight: #;
--colorfttitledark: #;
--colorftbodylight: #;
--colorftbodydark: #;
--fontbody: "";
--fonttitle: "";
--fontsizeh1: px;
--fontsizeh2: px;
--fontsizeh3: px;
--fontsizeh4: px;
--colorbgbodylight-darker: #;
--colorfttitlelight-darker: #;
}
*/
}
/* Puis sur classer l'ensemble de la feuille de style */

View File

@ -0,0 +1,3 @@
name: Ninered
author: Arnaud Fornerot
version: 1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -0,0 +1,43 @@
:root{
--colorbgbodydark: #96281b;
--colorfttitlelight: #96281b;
/* Vous pouvez forcer l'ensemble de ces variables ou laisser la valeur par défaut
--colorbgbodylight: #;
--colorbgbodydark: #;
--colorfttitlelight: #;
--colorfttitledark: #;
--colorftbodylight: #;
--colorftbodydark: #;
--fontbody: "";
--fonttitle: "";
--fontsizeh1: px;
--fontsizeh2: px;
--fontsizeh3: px;
--fontsizeh4: px;
--colorbgbodylight-darker: #;
--colorfttitlelight-darker: #;
}
*/
}
/* Puis sur classer l'ensemble de la feuille de style */

View File

@ -0,0 +1,3 @@
name: Nineyellow
author: Arnaud Fornerot
version: 1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -0,0 +1,43 @@
:root{
--colorbgbodydark: #f7ca18;
--colorfttitlelight: #171717;
/* Vous pouvez forcer l'ensemble de ces variables ou laisser la valeur par défaut
--colorbgbodylight: #;
--colorbgbodydark: #;
--colorfttitlelight: #;
--colorfttitledark: #;
--colorftbodylight: #;
--colorftbodydark: #;
--fontbody: "";
--fonttitle: "";
--fontsizeh1: px;
--fontsizeh2: px;
--fontsizeh3: px;
--fontsizeh4: px;
--colorbgbodylight-darker: #;
--colorfttitlelight-darker: #;
}
*/
}
/* Puis sur classer l'ensemble de la feuille de style */

View File

@ -66,6 +66,7 @@ class AppInitCommand extends Command
"appname", // id "appname", // id
"Titre de votre site", // title "Titre de votre site", // title
"", // value "", // value
"", // defalut
"string", // type, "string", // type,
true, // visible true, // visible
true, // changeable true, // changeable
@ -80,6 +81,7 @@ class AppInitCommand extends Command
"appsubname", // id "appsubname", // id
"Sous-titre de votre site", // title "Sous-titre de votre site", // title
"", // value "", // value
"", // defalut
"string", // type, "string", // type,
true, // visible true, // visible
true, // changeable true, // changeable
@ -94,6 +96,7 @@ class AppInitCommand extends Command
"appdescription", // id "appdescription", // id
"Description de votre site", // title "Description de votre site", // title
"", // value "", // value
"", // defalut
"editor", // type, "editor", // type,
true, // visible true, // visible
true, // changeable true, // changeable
@ -102,6 +105,22 @@ class AppInitCommand extends Command
"Description de votre site" "Description de votre site"
); );
$this->insertConfig(
100, // order
"site", // category
"apptheme", // id
"Thème de votre site", // title
"", // value
"", // defalut
"string", // type,
false, // visible
true, // changeable
false, // required
"", // grouped
"Thème de votre site"
);
// colorbgbody = Couleur des fonds de page // colorbgbody = Couleur des fonds de page
$this->insertConfig( $this->insertConfig(
1, // order 1, // order
@ -109,6 +128,7 @@ class AppInitCommand extends Command
"colorbgbodydark", // id "colorbgbodydark", // id
"Couleur de fond fonçée", // title "Couleur de fond fonçée", // title
"", // value "", // value
"#2574a9", // defalut
"color", // type, "color", // type,
true, // visible true, // visible
true, // changeable true, // changeable
@ -123,6 +143,7 @@ class AppInitCommand extends Command
"colorbgbodylight", // id "colorbgbodylight", // id
"Couleur de fond claire", // title "Couleur de fond claire", // title
"", // value "", // value
"#ffffff", // defalut
"color", // type, "color", // type,
true, // visible true, // visible
true, // changeable true, // changeable
@ -138,6 +159,7 @@ class AppInitCommand extends Command
"colorfttitledark", // id "colorfttitledark", // id
"Couleur des titres sur fond fonçé", // title "Couleur des titres sur fond fonçé", // title
"", // value "", // value
"#ffffff", // defalut
"color", // type, "color", // type,
true, // visible true, // visible
true, // changeable true, // changeable
@ -152,6 +174,7 @@ class AppInitCommand extends Command
"colorfttitlelight", // id "colorfttitlelight", // id
"Couleur des titres sur fond claire", // title "Couleur des titres sur fond claire", // title
"", // value "", // value
"#2574a9", // defalut
"color", // type, "color", // type,
true, // visible true, // visible
true, // changeable true, // changeable
@ -167,6 +190,7 @@ class AppInitCommand extends Command
"colorftbodydark", // id "colorftbodydark", // id
"Couleur de la police sur fond fonçé", // title "Couleur de la police sur fond fonçé", // title
"", // value "", // value
"#ffffff", // defalut
"color", // type, "color", // type,
true, // visible true, // visible
true, // changeable true, // changeable
@ -181,6 +205,7 @@ class AppInitCommand extends Command
"colorftbodylight", // id "colorftbodylight", // id
"Couleur de la police sur fond claire", // title "Couleur de la police sur fond claire", // title
"", // value "", // value
"#343a40", // defalut
"color", // type, "color", // type,
true, // visible true, // visible
true, // changeable true, // changeable
@ -196,6 +221,7 @@ class AppInitCommand extends Command
"fonttitle", // id "fonttitle", // id
"Police pour les titres", // title "Police pour les titres", // title
"", // value "", // value
"FredokaOne-Regular", // defalut
"font", // type, "font", // type,
true, // visible true, // visible
true, // changeable true, // changeable
@ -210,6 +236,7 @@ class AppInitCommand extends Command
"fontbody", // id "fontbody", // id
"Police principale", // title "Police principale", // title
"", // value "", // value
"Roboto-Regular", // defalut
"font", // type, "font", // type,
true, // visible true, // visible
true, // changeable true, // changeable
@ -218,6 +245,66 @@ class AppInitCommand extends Command
"Nom de la police principale" "Nom de la police principale"
); );
$this->insertConfig(
3, // order
"font", // category
"fontsizeh1", // id
"Taille des titres h1", // title
"", // value
"40", // defalut
"integer", // type,
true, // visible
true, // changeable
false, // required
"", // grouped
"Taille des titres h1 en px"
);
$this->insertConfig(
4, // order
"font", // category
"fontsizeh2", // id
"Taille des titres h2", // title
"", // value
"32", // defalut
"integer", // type,
true, // visible
true, // changeable
false, // required
"", // grouped
"Taille des titres h2 en px"
);
$this->insertConfig(
5, // order
"font", // category
"fontsizeh3", // id
"Taille des titres h3", // title
"", // value
"28", // defalut
"integer", // type,
true, // visible
true, // changeable
false, // required
"", // grouped
"Taille des titres h3 en px"
);
$this->insertConfig(
6, // order
"font", // category
"fontsizeh4", // id
"Taille des titres h4", // title
"", // value
"24", // defalut
"integer", // type,
true, // visible
true, // changeable
false, // required
"", // grouped
"Taille des titres h4 en px"
);
// logo = // logo =
$this->insertConfig( $this->insertConfig(
1, // order 1, // order
@ -225,6 +312,7 @@ class AppInitCommand extends Command
"logodark", // id "logodark", // id
"Logo sur fond fonçé", // title "Logo sur fond fonçé", // title
"", // value "", // value
"", // defalut
"logo", // type, "logo", // type,
true, // visible true, // visible
true, // changeable true, // changeable
@ -239,6 +327,7 @@ class AppInitCommand extends Command
"logolight", // id "logolight", // id
"Logo sur fond clair", // title "Logo sur fond clair", // title
"", // value "", // value
"", // defalut
"logo", // type, "logo", // type,
true, // visible true, // visible
true, // changeable true, // changeable
@ -281,7 +370,7 @@ class AppInitCommand extends Command
} }
protected function insertConfig($order,$category,$id,$title,$value,$type,$visible,$changeable,$required,$grouped,$help) { protected function insertConfig($order,$category,$id,$title,$value,$default,$type,$visible,$changeable,$required,$grouped,$help) {
$entity=$this->em->getRepository("App:Config")->find($id); $entity=$this->em->getRepository("App:Config")->find($id);
if(!$entity) { if(!$entity) {
$entity= new Config(); $entity= new Config();
@ -289,6 +378,7 @@ class AppInitCommand extends Command
$entity->setValue($value); $entity->setValue($value);
} }
$entity->setDefault($default);
$entity->setCategory($category); $entity->setCategory($category);
$entity->setOrder($order); $entity->setOrder($order);
$entity->setTitle($title); $entity->setTitle($title);

View File

@ -0,0 +1,67 @@
<?
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 Symfony\Component\Finder\Finder;
use Symfony\Component\Yaml\Yaml;
use App\Entity\Config as Entity;
use App\Form\ConfigType as Form;
class ThemeController extends AbstractController
{
private $data = "config";
private $route = "app_config";
private $render = "Config/";
private $entity = "App:Config";
public function list(Request $request)
{
$session=$this->get('session');
$finder = new Finder();
$dir = $this->getParameter('kernel.project_dir')."/public/themes";
$url="/".$this->getParameter('appAlias')."/themes";
$finder->in($dir)->directories()->depth('== 0');
$themes=[];
$themes[""]["dir"]="";
$themes[""]["url"]=$url;
$themes[""]["name"]="Thème par défaut";
foreach ($finder as $file) {
$key=$file->getRelativePathname();
$themes[$key]["dir"]=$key;
$themes[$key]["url"]=$url."/".$key;
$yml=Yaml::parseFile($dir.'/'.$key.'/info.yml');
$themes[$key]["name"]=$yml["name"];
}
$current=$session->get("apptheme");
$currentheme=$themes[$current];
unset($themes[$current]);
return $this->render('Theme/list.html.twig',[
'useheader' => true,
'usesidebar' => true,
'currentheme' => $currentheme,
'themes' => $themes
]);
}
public function select(Request $request,$name)
{
$em = $this->getDoctrine()->getManager();
$config=$em->getRepository("App:Config")->findoneBy(["id"=>"apptheme"]);
$config->setValue($name);
$em->persist($config);
$em->flush();
return $this->redirectToRoute("app_theme");
}
}

View File

@ -27,6 +27,11 @@ class Config
*/ */
protected $value; protected $value;
/**
* @ORM\Column(name="defaultvalue", type="text")
*/
protected $default;
/** /**
* @ORM\Column(name="roworder", type="string") * @ORM\Column(name="roworder", type="string")
*/ */
@ -199,4 +204,16 @@ class Config
return $this; return $this;
} }
public function getDefault(): ?string
{
return $this->default;
}
public function setDefault(string $default): self
{
$this->default = $default;
return $this;
}
} }

View File

@ -30,35 +30,52 @@
// Valeur par defaut colorbgbodydark = #343a40 // Valeur par defaut colorbgbodydark = #343a40
if($this->session->get("colorbgbodydark")=="") if($this->session->get("colorbgbodydark")=="")
$this->session->set("colorbgbodydark", '#343a40'); $this->session->set("colorbgbodydark", $this->em->getRepository("App:Config")->find("colorbgbodydark")->getDefault());
// Valeur par defaut colorbgbodydark = #ffffff // Valeur par defaut colorbgbodydark = #ffffff
if($this->session->get("colorbgbodylight")=="") if($this->session->get("colorbgbodylight")=="")
$this->session->set("colorbgbodylight", '#ffffff'); $this->session->set("colorbgbodylight",$this->em->getRepository("App:Config")->find("colorbgbodylight")->getDefault());
// Valeur par defaut colorfttitledark = #ffffff // Valeur par defaut colorfttitledark = #ffffff
if($this->session->get("colorfttitledark")=="") if($this->session->get("colorfttitledark")=="")
$this->session->set("colorfttitledark", '#ffffff'); $this->session->set("colorfttitledark", $this->em->getRepository("App:Config")->find("colorfttitledark")->getDefault());
// Valeur par defaut colorfttitlelight = #343a40 // Valeur par defaut colorfttitlelight = #343a40
if($this->session->get("colorfttitlelight")=="") if($this->session->get("colorfttitlelight")=="")
$this->session->set("colorfttitlelight", '#343a40'); $this->session->set("colorfttitlelight", $this->em->getRepository("App:Config")->find("colorfttitlelight")->getDefault());
// Valeur par defaut colorftbodydark = #ffffff // Valeur par defaut colorftbodydark = #ffffff
if($this->session->get("colorftbodydark")=="") if($this->session->get("colorftbodydark")=="")
$this->session->set("colorftbodydark", '#ffffff'); $this->session->set("colorftbodydark", $this->em->getRepository("App:Config")->find("colorftbodydark")->getDefault());
// Valeur par defaut colorftbodylight = #343a40 // Valeur par defaut colorftbodylight = #343a40
if($this->session->get("colorftbodylight")=="") if($this->session->get("colorftbodylight")=="")
$this->session->set("colorftbodylight", '#343a40'); $this->session->set("colorftbodylight", $this->em->getRepository("App:Config")->find("colorftbodylight")->getDefault());
// Valeur par defaut fonttitle = FredokaOne-Regular // Valeur par defaut fonttitle = FredokaOne-Regular
if($this->session->get("fonttitle")=="") if($this->session->get("fonttitle")=="")
$this->session->set("fonttitle", 'FredokaOne-Regular'); $this->session->set("fonttitle", $this->em->getRepository("App:Config")->find("fonttitle")->getDefault());
// Valeur par defaut fontbody = Roboto-Regular // Valeur par defaut fontbody = Roboto-Regular
if($this->session->get("fontbody")=="") if($this->session->get("fontbody")=="")
$this->session->set("fontbody", 'Roboto-Regular'); $this->session->set("fontbody", $this->em->getRepository("App:Config")->find("fontbody")->getDefault());
// Valeur par defaut fontsizeh1 = 40
if($this->session->get("fontsizeh1")=="")
$this->session->set("fontsizeh1", $this->em->getRepository("App:Config")->find("fontsizeh1")->getDefault());
// Valeur par defaut fontsizeh2 = 32
if($this->session->get("fontsizeh2")=="")
$this->session->set("fontsizeh2", $this->em->getRepository("App:Config")->find("fontsizeh2")->getDefault());
// Valeur par defaut fontsizeh3 = 28
if($this->session->get("fontsizeh3")=="")
$this->session->set("fontsizeh3", $this->em->getRepository("App:Config")->find("fontsizeh3")->getDefault());
// Valeur par defaut fontsizeh4 = 24
if($this->session->get("fontsizeh4")=="")
$this->session->set("fontsizeh4", $this->em->getRepository("App:Config")->find("fontsizeh4")->getDefault());
// Valeur par defaut logo // Valeur par defaut logo
if($this->session->get("logodark")==""&&$this->session->get("logolight")=="") { if($this->session->get("logodark")==""&&$this->session->get("logolight")=="") {
@ -69,5 +86,33 @@
$this->session->set("logodark", $this->session->get("logolight")); $this->session->set("logodark", $this->session->get("logolight"));
elseif($this->session->get("logolight")=="") elseif($this->session->get("logolight")=="")
$this->session->set("logolight", $this->session->get("logodark")); $this->session->set("logolight", $this->session->get("logodark"));
// Calcul couleur
$this->session->set("colorbgbodylight-darker", $this->adjustBrightness($this->session->get("colorbgbodylight"),-10));
$this->session->set("colorfttitlelight-darker", $this->adjustBrightness($this->session->get("colorfttitlelight"),-50));
}
private function adjustBrightness($hex, $steps) {
// Steps should be between -255 and 255. Negative = darker, positive = lighter
$steps = max(-255, min(255, $steps));
// Normalize into a six character long hex string
$hex = str_replace('#', '', $hex);
if (strlen($hex) == 3) {
$hex = str_repeat(substr($hex,0,1), 2).str_repeat(substr($hex,1,1), 2).str_repeat(substr($hex,2,1), 2);
}
// Split into three parts: R, G and B
$color_parts = str_split($hex, 2);
$return = '';
foreach ($color_parts as $color) {
$color = hexdec($color); // Convert to decimal
$color = max(0,min(255,$color + $steps)); // Adjust color
$return .= str_pad(dechex($color), 2, '0', STR_PAD_LEFT); // Make two char hex code
}
return '#'.$return;
} }
} }

View File

@ -32,10 +32,10 @@
{% set otherstyle = "" %} {% set otherstyle = "" %}
{% if config.id=='colorbgbodydark' %} {% if config.id=='colorbgbodydark' %}
{% set bgcolor = val %} {% set bgcolor = val %}
{% set color = app.session.get('colorfttitledark') %} {% set color = app.session.get('colorftbodydark') %}
{% elseif config.id=='colorbgbodylight' %} {% elseif config.id=='colorbgbodylight' %}
{% set bgcolor = val %} {% set bgcolor = val %}
{% set color = app.session.get('colorfttitlelight') %} {% set color = app.session.get('colorftbodylight') %}
{% elseif config.id=='colorfttitledark' %} {% elseif config.id=='colorfttitledark' %}
{% set bgcolor = app.session.get('colorbgbodydark') %} {% set bgcolor = app.session.get('colorbgbodydark') %}
{% set color = val %} {% set color = val %}
@ -48,6 +48,9 @@
{% elseif config.id=='colorftbodylight' %} {% elseif config.id=='colorftbodylight' %}
{% set bgcolor = app.session.get('colorbgbodylight') %} {% set bgcolor = app.session.get('colorbgbodylight') %}
{% set color = val %} {% set color = val %}
{% elseif config.id=='fonttitle' %}
{% set color = app.session.get('colorfttitlelight') %}
{% set otherstyle = "font-family: "~val~";" %}
{% elseif config.id=='logodark' %} {% elseif config.id=='logodark' %}
{% set bgcolor = app.session.get('colorbgbodydark') %} {% set bgcolor = app.session.get('colorbgbodydark') %}
{% set otherstyle = "text-align: center;" %} {% set otherstyle = "text-align: center;" %}

View File

@ -23,7 +23,7 @@
Dropzone.options.MyDropZone = { Dropzone.options.MyDropZone = {
maxFiles: 1, maxFiles: 1,
acceptedMimeTypes: 'image/*', acceptedMimeTypes: 'image/jpeg,image/png',
//renameFilename: false, //renameFilename: false,
success: function(file, response){ success: function(file, response){
$(location).attr('href',"{{ path('app_crop02', {"type": type, "reportinput": reportinput }) }}?file="+response["file"]); $(location).attr('href',"{{ path('app_crop02', {"type": type, "reportinput": reportinput }) }}?file="+response["file"]);

View File

@ -2,27 +2,36 @@
<ul class="nav"> <ul class="nav">
{% if is_granted('ROLE_ADMIN') %} {% if is_granted('ROLE_ADMIN') %}
<br> <br>
<li class="title">Administration</li> <li class="title">Configuration</li>
<li> <li>
<a href="{{path("app_config")}}"> <a href="{{path("app_config")}}">
<i class="fa fa-cog"></i>Configurations <i class="fa fa-cog"></i>Générale
</a> </a>
</li> </li>
<li class="last">
<a href="{{path("app_theme")}}">
<i class="fa fa-paint-brush"></i>Thème
</a>
</li>
<li class="title">Organisation</li>
<li> <li>
<a href="{{path("app_user")}}"> <a href="{{path("app_user")}}">
<i class="fa fa-user"></i>Utilisateurs <i class="fa fa-user"></i>Utilisateurs
</a> </a>
</li> </li>
<li> <li class="last">
<a href="{{path("app_group")}}"> <a href="{{path("app_group")}}">
<i class="fa fa-users"></i>Groupes <i class="fa fa-users"></i>Groupes
</a> </a>
</li> </li>
{% if appCron %} {% if appCron %}
<li class="title">Outils</li>
<li> <li>
<a href="{{path("app_cron")}}"> <a href="{{path("app_cron")}}">
<i class="fa fa-cogs"></i>Jobs <i class="fa fa-cogs"></i>Jobs

View File

@ -7,6 +7,13 @@
--colorftbodydark: {{ app.session.get('colorftbodydark')|raw }}; --colorftbodydark: {{ app.session.get('colorftbodydark')|raw }};
--fontbody: "{{ app.session.get('fontbody')|raw }}"; --fontbody: "{{ app.session.get('fontbody')|raw }}";
--fonttitle: "{{ app.session.get('fonttitle')|raw }}"; --fonttitle: "{{ app.session.get('fonttitle')|raw }}";
--fontsizeh1: {{ app.session.get('fontsizeh1')~"px"|raw }};
--fontsizeh2: {{ app.session.get('fontsizeh2')~"px"|raw }};
--fontsizeh3: {{ app.session.get('fontsizeh3')~"px"|raw }};
--fontsizeh4: {{ app.session.get('fontsizeh4')~"px"|raw }};
--colorbgbodylight-darker: {{ app.session.get('colorbgbodylight-darker')|raw }};
--colorfttitlelight-darker: {{ app.session.get('colorfttitlelight-darker')|raw }};
} }
/* COLOR BODY */ /* COLOR BODY */
@ -16,10 +23,6 @@ body {
color: var(--colorftbodylight); color: var(--colorftbodylight);
} }
.card {
background-color: var(--colorbgbodylight);
}
body .navbar.bg-dark { body .navbar.bg-dark {
background-color: var(--colorbgbodydark)!important; background-color: var(--colorbgbodydark)!important;
} }
@ -36,7 +39,11 @@ body #sidebar .nav a {
color: var(--colorfttitledark); color: var(--colorfttitledark);
} }
body h1, body h2, body h3 { body #sidebar .nav .last {
border-color: var(--colorfttitledark);
}
body h1, body h2, body h3, body .modal-header h4 {
color: var(--colorfttitlelight); color: var(--colorfttitlelight);
} }
@ -44,23 +51,46 @@ body a, body .btn-link {
color: var(--colorfttitlelight); color: var(--colorfttitlelight);
} }
body a:hover, body .btn-link:hover {
color: var(--colorfttitlelight-darker);
}
body .nav a{ body .nav a{
color: var(--colorfttitledark); color: var(--colorfttitledark);
} }
body .card {
background-color: var(--colorbgbodylight);
}
body .card-header {
background-color: var(--colorbgbodylight-darker);
color: var(--colorfttitlelight);
font-size: 120%;
}
body .card-header .custom-control {
color: var(--colorftbodylight);
font-size: 80%;
}
body .page-item.active .page-link,
body .page-item.active .page-link:hover {
background-color: var(--colorfttitlelight);
border-color: var(--colorfttitlelight);
}
body .modal-title {
}
/* COLOR BODY HOME */ /* COLOR BODY HOME */
body.monocolor { body.monocolor {
background-color: var(--colorbgbodydark); background-color: var(--colorbgbodydark);
color: var(--colorftbodydark); color: var(--colorftbodydark);
} }
body.monocolor .card {
background-color: var(--colorbgbodydark);
}
body.monocolor .navbar.bg-dark { body.monocolor .navbar.bg-dark {
background-color: var(--colorbgbodydark)!important; background-color: var(--colorbgbodydark)!important;
} }
@ -77,7 +107,7 @@ body.monocolor #sidebar .nav a {
color: var(--colorfttitledark); color: var(--colorfttitledark);
} }
body.monocolor h1, body.monocolor h2, body.monocolor h3 { body.monocolor h1, body.monocolor h2, body.monocolor h3, body.monocolor .modal-header h4 {
color: var(--colorfttitledark); color: var(--colorfttitledark);
} }
@ -89,20 +119,45 @@ body.monocolor .nav a{
color: var(--colorfttitledark); color: var(--colorfttitledark);
} }
body.monocolor .card {
background-color: var(--colorbgbodydark);
}
body.monocolor .card-header {
background-color: var(--colorbgbodydark);
color: var(--colorfttitledark);
font-size: 120%;
}
body.monocolor .card-header .custom-control {
color: var(--colorftbodydark);
font-size: 80%;
}
/* FONT */ /* FONT */
body { body {
font-family: var(--fontbody); font-family: var(--fontbody);
} }
h1,h2,h3, .navbar-brand { h1,h2,h3, .navbar-brand, .card-header, .modal-header h4 {
font-family: var(--fonttitle); font-family: var(--fonttitle);
} }
h1 { font-size: var(--fontsizeh1); }
h2 { font-size: var(--fontsizeh2); }
h3 { font-size: var(--fontsizeh3); }
h4 { font-size: var(--fontsizeh4); }
.card-header .custom-control {
font-family: var(--fontbody);
}
{% if not useheader is defined or not useheader %} {% if not useheader is defined or not useheader %}
#main { #main {
padding:0px; padding:0px;
} }
{% else %}
#main {
margin-bottom: 100px;
}
{%endif%} {%endif%}

View File

@ -0,0 +1,29 @@
{% extends 'base.html.twig' %}
{% block body %}
<h1>Thèmes</h1>
<h2>Thème en cours</h2>
<div class="text-center" style="width:330px">
<img src="{{currentheme.url}}/look.png" style="width:100%; background-color: {{app.session.get('colorbgbodydark') }}"><br>
{{currentheme.name}}
</div>
<h2 class="mt-5">Thèmes disponibles</h2>
<div>
{% for theme in themes %}
<div class="text-center mb-4" style="width:330px; display: inline-block">
<img src="{{theme.url}}/look.png" style="height:170px; background-color: {{app.session.get('colorbgbodydark') }}"><br>
{{theme.name}}<br>
<a href="{{ path("app_theme_select",{"name":theme.dir}) }}" class="btn btn-primary" role="button">Sélectionner</a>
</div>
{% endfor %}
</div>
{% endblock %}

View File

@ -48,7 +48,7 @@
<img id="user_avatar_img" src="{{ avatar|urlavatar }}" class="avatar big" > <img id="user_avatar_img" src="{{ avatar|urlavatar }}" class="avatar big" >
{{ form_widget(form.avatar) }} {{ form_widget(form.avatar) }}
{% if appMasteridentity=="LDAP" or appMasteridentity=="SQL" %} {% if appMasteridentity=="LDAP" or appMasteridentity=="SQL" %}
<a class="btn btn-info" style="width:100%; margin-bottom:15px;" onClick="ModalLoad('mymodallarge','Avatar','{{ path('app_crop01', {"type": "avatar", "reportinput": "user_avatar" }) }}');" title='Ajouter un avatar'>Modifier</a> <bouton class="btn btn-info" style="width:100%; margin-bottom:15px;" onClick="ModalLoad('mymodallarge','Avatar','{{ path('app_crop01', {"type": "avatar", "reportinput": "user_avatar" }) }}');" title='Ajouter un avatar'>Modifier</bouton>
{% endif %} {% endif %}
</div> </div>

View File

@ -22,12 +22,19 @@
<style> <style>
{{ include('Include/style.css.twig') }} {{ include('Include/style.css.twig') }}
</style>
{% if not app.session.get("apptheme") is empty %}
<link href="/{{ appAlias }}/themes/{{ app.session.get("apptheme") }}/style.css" rel="stylesheet" media="screen" />
{% endif %}
<style>
{% block localstyle %} {% block localstyle %}
{% endblock %} {% endblock %}
</style> </style>
{% set class="" %} {% set class="" %}
{% if usemonocolor is defined and usemonocolor %} {% if usemonocolor is defined and usemonocolor %}
{% set class="monocolor" %} {% set class="monocolor" %}
@ -158,6 +165,10 @@
{% endblock %} {% endblock %}
</script> </script>
{% if not app.session.get("apptheme") is empty %}
<script src="/{{ appAlias }}/themes/{{ app.session.get("apptheme") }}/local.js"></script>
{% endif %}
{% if sondeUse %} {% if sondeUse %}
{{ render(path("app_sonde")) }} {{ render(path("app_sonde")) }}
{% endif %} {% endif %}