svg
This commit is contained in:
parent
d8db726fc4
commit
d00a4e5a12
@ -4,6 +4,8 @@ oneup_uploader:
|
||||
frontend: dropzone
|
||||
logo:
|
||||
frontend: dropzone
|
||||
header:
|
||||
frontend: dropzone
|
||||
document:
|
||||
frontend: dropzone
|
||||
namer: app.upload.samename
|
||||
|
@ -94,28 +94,28 @@ oneup_uploader:
|
||||
type: uploader
|
||||
|
||||
#== Cron =================================================================================================================
|
||||
app_cron:
|
||||
path: /admin/cron
|
||||
app_cron_job:
|
||||
path: /config/cron
|
||||
defaults: { _controller: App\Controller\CronController:list }
|
||||
|
||||
app_cron_ajax_list:
|
||||
path: /admin/cron/ajax/list
|
||||
path: /config/cron/ajax/list
|
||||
defaults: { _controller: App\Controller\CronController:ajaxlist }
|
||||
|
||||
app_cron_update:
|
||||
path: /admin/cron/update/{id}
|
||||
path: /config/cron/update/{id}
|
||||
defaults: { _controller: App\Controller\CronController:update }
|
||||
|
||||
app_cron_exec:
|
||||
path: /admin/cron/exec/{id}
|
||||
path: /config/cron/exec/{id}
|
||||
defaults: { _controller: App\Controller\CronController:exec }
|
||||
|
||||
app_cron_log:
|
||||
path: /admin/cron/log
|
||||
path: /config/cron/log
|
||||
defaults: { _controller: App\Controller\CronController:log }
|
||||
|
||||
app_cron_getlog:
|
||||
path: /admin/cron/getlog/{id}
|
||||
path: /config/cron/getlog/{id}
|
||||
defaults: { _controller: App\Controller\CronController:getlog }
|
||||
|
||||
#== User ========================================================================================================
|
||||
@ -147,6 +147,10 @@ app_user_profil:
|
||||
path: /user/profil
|
||||
defaults: { _controller: App\Controller\UserController:profil }
|
||||
|
||||
app_user_preference:
|
||||
path: /user/preference
|
||||
defaults: { _controller: App\Controller\UserController:preference }
|
||||
|
||||
#== Group ========================================================================================================
|
||||
app_group:
|
||||
path: /admin/group
|
||||
|
@ -71,7 +71,8 @@ services:
|
||||
$ldapUser: '%ldapUser%'
|
||||
$ldapPassword: '%ldapPassword%'
|
||||
$ldapBasedn: '%ldapBasedn%'
|
||||
|
||||
$wssport: '%wssport%'
|
||||
|
||||
# makes classes in src/ available to be used as services
|
||||
# this creates a service per class whose id is the fully-qualified class name
|
||||
App\:
|
||||
@ -89,7 +90,7 @@ services:
|
||||
app.session.init:
|
||||
public: true
|
||||
class: App\Service\sessionInit
|
||||
arguments: ["@service_container","@doctrine.orm.entity_manager","@session",]
|
||||
arguments: ["@service_container","@doctrine.orm.entity_manager","@session","@security.token_storage"]
|
||||
tags:
|
||||
- { name: kernel.event_listener, event: kernel.request, method: onDomainParse }
|
||||
|
||||
@ -129,4 +130,8 @@ services:
|
||||
- [setContainer, ["@service_container"]]
|
||||
tags:
|
||||
- { name: twig.extension }
|
||||
|
||||
|
||||
app.websocket.service:
|
||||
public: true
|
||||
class: App\Service\messageService
|
||||
arguments: ['%wssport%']
|
@ -1,23 +1,38 @@
|
||||
h1{
|
||||
padding: 40px 0px 9px 0px;
|
||||
border-bottom: 1px solid #eee;
|
||||
.headertitle a{
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.headertitle small {
|
||||
font-size:60%;
|
||||
}
|
||||
#switchHeader{
|
||||
cursor:pointer;
|
||||
}
|
||||
|
||||
.nav a{
|
||||
background: none;
|
||||
color: #CFD8DC;
|
||||
font-size: 14px;
|
||||
padding: 5px 0px 5px 25px;
|
||||
display: block;
|
||||
.navbar {
|
||||
height:60px;
|
||||
}
|
||||
|
||||
|
||||
.nav a {
|
||||
padding-left: 15px;
|
||||
}
|
||||
.page-maxed {
|
||||
max-width:1200px;
|
||||
margin:auto !important;
|
||||
}
|
||||
|
||||
/* Sidebar Styles */
|
||||
.avatar {
|
||||
background-color: #343a40;
|
||||
width: 35px;
|
||||
height: 35px;
|
||||
border-radius: 100%;
|
||||
margin-top: -2px;
|
||||
}
|
||||
|
||||
.avatar.big{
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.contentsidebar {
|
||||
margin-left:250px;
|
||||
}
|
||||
@ -32,439 +47,59 @@ h1{
|
||||
background: #37474F;
|
||||
}
|
||||
|
||||
#sidebar header {
|
||||
background-color: #263238;
|
||||
font-size: 20px;
|
||||
line-height: 52px;
|
||||
text-align: center;
|
||||
#sidebar .nav-link.active, .nav-link:hover {
|
||||
background-color:var(--colorbgbodydark-darker);
|
||||
}
|
||||
|
||||
#sidebar header a {
|
||||
color: #fff;
|
||||
#sidebar .nav-link {
|
||||
padding:5px 0px 5px 10px;
|
||||
}
|
||||
|
||||
#sidebar .nav-first-level {
|
||||
zoom:120%
|
||||
}
|
||||
|
||||
#sidebar .nav-second-level .nav-link {
|
||||
padding:5px 0px 5px 25px;
|
||||
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 .last{
|
||||
border-bottom: 1px solid #fff;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
|
||||
#sidebar .nav a:hover{
|
||||
background: none;
|
||||
color: #ECEFF1;
|
||||
}
|
||||
|
||||
#sidebar .nav a i{
|
||||
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;
|
||||
width:100%;
|
||||
}
|
||||
|
||||
@media (max-width: 991px) {
|
||||
#headercontainer{
|
||||
display:none !important;
|
||||
}
|
||||
|
||||
#switchHeader{
|
||||
display:none !important;
|
||||
}
|
||||
|
||||
.contentsidebar {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
|
||||
.navbar-toggler {
|
||||
display: inline-block !important;
|
||||
}
|
||||
|
||||
#sidebar {
|
||||
position: static;
|
||||
margin:0px -15px;
|
||||
width: auto;
|
||||
}
|
||||
#sidebar .nav-second-level .nav-link {
|
||||
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;
|
||||
.page-header {
|
||||
padding-top:20px;
|
||||
text-transform: uppercase;
|
||||
border-bottom: 3px solid var(--colorfttitlelight);
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
{% 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;
|
||||
}
|
@ -1,7 +1,10 @@
|
||||
:root{
|
||||
--colorbgbodydark: #3a539b;
|
||||
--colorfttitlelight: #3a539b;
|
||||
|
||||
--colorbgbodydark-darker: #082169;
|
||||
--colorfttitlelight-darker: #082169;
|
||||
--colorbgbodydark-rgb: 58,83,155;
|
||||
|
||||
/* Vous pouvez forcer l'ensemble de ces variables ou laisser la valeur par défaut
|
||||
--colorbgbodylight: #;
|
||||
--colorbgbodydark: #;
|
||||
@ -18,7 +21,8 @@
|
||||
|
||||
--colorbgbodylight-darker: #;
|
||||
--colorfttitlelight-darker: #;
|
||||
}
|
||||
--colorbgbodydark-darker: #;
|
||||
--colorbgbodydark-rgb: R,V,G
|
||||
*/
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,9 @@
|
||||
--colorbgbodydark: #2e3131;
|
||||
--colorfttitlelight: #2e3131;
|
||||
--colorfttitlelight-darker: #95a5a6;
|
||||
--colorbgbodydark-darker: #000000;
|
||||
--colorfttitlelight-darker: #000000;
|
||||
--colorbgbodydark-rgb: 46,49,49;
|
||||
|
||||
/* Vous pouvez forcer l'ensemble de ces variables ou laisser la valeur par défaut
|
||||
--colorbgbodylight: #;
|
||||
@ -19,7 +22,8 @@
|
||||
|
||||
--colorbgbodylight-darker: #;
|
||||
--colorfttitlelight-darker: #;
|
||||
}
|
||||
--colorbgbodydark-darker: #;
|
||||
--colorbgbodydark-rgb: R,V,G
|
||||
*/
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,10 @@
|
||||
:root{
|
||||
--colorbgbodydark: #6c7a89;
|
||||
--colorfttitlelight: #6c7a89;
|
||||
|
||||
--colorbgbodydark-darker: #3a4857;
|
||||
--colorfttitlelight-darker: #3a4857;
|
||||
--colorbgbodydark-rgb: 108,122,137;
|
||||
|
||||
/* Vous pouvez forcer l'ensemble de ces variables ou laisser la valeur par défaut
|
||||
--colorbgbodylight: #;
|
||||
--colorbgbodydark: #;
|
||||
@ -18,7 +21,8 @@
|
||||
|
||||
--colorbgbodylight-darker: #;
|
||||
--colorfttitlelight-darker: #;
|
||||
}
|
||||
--colorbgbodydark-darker: #;
|
||||
--colorbgbodydark-rgb: R,V,G
|
||||
*/
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,10 @@
|
||||
:root{
|
||||
--colorbgbodydark: #1e824c;
|
||||
--colorfttitlelight: #1e824c;
|
||||
|
||||
--colorbgbodydark: #1e824c;
|
||||
--colorbgbodydark-darker: #00501a;
|
||||
--colorfttitlelight-darker: #00501a;
|
||||
--colorbgbodydark-rgb: 30,130,76;
|
||||
|
||||
/* Vous pouvez forcer l'ensemble de ces variables ou laisser la valeur par défaut
|
||||
--colorbgbodylight: #;
|
||||
--colorbgbodydark: #;
|
||||
@ -18,7 +21,8 @@
|
||||
|
||||
--colorbgbodylight-darker: #;
|
||||
--colorfttitlelight-darker: #;
|
||||
}
|
||||
--colorbgbodydark-darker: #;
|
||||
--colorbgbodydark-rgb: R,V,G
|
||||
*/
|
||||
}
|
||||
|
||||
@ -37,7 +41,3 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,7 +1,10 @@
|
||||
:root{
|
||||
--colorbgbodydark: #f15a22;
|
||||
--colorfttitlelight: #f15a22;
|
||||
|
||||
--colorbgbodydark-darker: #bf2800;
|
||||
--colorfttitlelight-darker: #bf2800;
|
||||
--colorbgbodydark-rgb: 241,90,34;
|
||||
|
||||
/* Vous pouvez forcer l'ensemble de ces variables ou laisser la valeur par défaut
|
||||
--colorbgbodylight: #;
|
||||
--colorbgbodydark: #;
|
||||
@ -18,7 +21,8 @@
|
||||
|
||||
--colorbgbodylight-darker: #;
|
||||
--colorfttitlelight-darker: #;
|
||||
}
|
||||
--colorbgbodydark-darker: #;
|
||||
--colorbgbodydark-rgb: R,V,G
|
||||
*/
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,10 @@
|
||||
:root{
|
||||
--colorbgbodydark: #96281b;
|
||||
--colorfttitlelight: #96281b;
|
||||
|
||||
--colorbgbodydark-darker: #640000;
|
||||
--colorfttitlelight-darker: #640000;
|
||||
--colorbgbodydark-rgb: 150,40,27;
|
||||
|
||||
/* Vous pouvez forcer l'ensemble de ces variables ou laisser la valeur par défaut
|
||||
--colorbgbodylight: #;
|
||||
--colorbgbodydark: #;
|
||||
@ -18,7 +21,8 @@
|
||||
|
||||
--colorbgbodylight-darker: #;
|
||||
--colorfttitlelight-darker: #;
|
||||
}
|
||||
--colorbgbodydark-darker: #;
|
||||
--colorbgbodydark-rgb: R,V,G
|
||||
*/
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,10 @@
|
||||
:root{
|
||||
--colorbgbodydark: #f7ca18;
|
||||
--colorfttitlelight: #171717;
|
||||
|
||||
--colorfttitlelight: #c59800;
|
||||
--colorbgbodydark-darker: #c59800;
|
||||
--colorfttitlelight-darker: #584403;
|
||||
--colorbgbodydark-rgb: 247,202,24;
|
||||
|
||||
/* Vous pouvez forcer l'ensemble de ces variables ou laisser la valeur par défaut
|
||||
--colorbgbodylight: #;
|
||||
--colorbgbodydark: #;
|
||||
@ -18,7 +21,8 @@
|
||||
|
||||
--colorbgbodylight-darker: #;
|
||||
--colorfttitlelight-darker: #;
|
||||
}
|
||||
--colorbgbodydark-darker: #;
|
||||
--colorbgbodydark-rgb: R,V,G
|
||||
*/
|
||||
}
|
||||
|
||||
|
13
src/nineskeletor-1.0/scripts/sidebar.sql
Normal file
13
src/nineskeletor-1.0/scripts/sidebar.sql
Normal file
@ -0,0 +1,13 @@
|
||||
TRUNCATE TABLE sidebar;
|
||||
INSERT IGNORE INTO `sidebar` (`id`, `parent_id`, `roworder`, `label`, `path`, `fonticon`, `permission`, `appactivate`) VALUES
|
||||
(1000, NULL, 1000, 'CONFIGURATION', NULL, 'fa fa-cog', 'ROLE_ADMIN,ROLE_MODO', ''),
|
||||
(1010, 1000, 1010, 'Générale', 'app_config', 'fa fa-table', 'ROLE_ADMIN,ROLE_MODO', ''),
|
||||
(1020, 1000, 1020, 'Thème', 'app_theme', 'fa fa-paint-brush', 'ROLE_ADMIN,ROLE_MODO', ''),
|
||||
|
||||
(1200, NULL, 1200, 'ORGANISATION', NULL, 'fa fa-sitemap', 'ROLE_ADMIN,ROLE_MODO', ''),
|
||||
(1240, 1200, 1240, 'Groupes', 'app_group', 'fa fa-users', 'ROLE_ADMIN,ROLE_MODO', ''),
|
||||
(1260, 1200, 1260, 'Utilisateurs', 'app_user', 'fa fa-child', 'ROLE_ADMIN,ROLE_MODO', ''),
|
||||
|
||||
(7000, NULL, 7000, 'CRON', NULL, 'fa fa-bolt', 'ROLE_ADMIN,ROLE_MODO', 'cron_activate'),
|
||||
(7010, 7000, 7010, 'Jobs', 'app_cron_job', 'fa fa-bullseye', 'ROLE_ADMIN,ROLE_MODO', 'cron_activate'),
|
||||
(7020, 7000, 7020, 'Logs / Dump', 'app_cron_log', 'fa fa-list-alt', 'ROLE_ADMIN,ROLE_MODO', 'cron_activate');
|
Binary file not shown.
Binary file not shown.
@ -3,12 +3,11 @@
|
||||
namespace App\Command;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Component\Filesystem\Filesystem;
|
||||
use Symfony\Component\Console\Input\ArrayInput;
|
||||
use Symfony\Component\Finder\Finder;
|
||||
use Ramsey\Uuid\Uuid;
|
||||
|
||||
use Doctrine\ORM\Mapping\ClassMetadata;
|
||||
@ -60,6 +59,17 @@ class AppInitCommand extends Command
|
||||
$this->insertUser("admin","admin");
|
||||
|
||||
|
||||
// Init Sidebar
|
||||
$finder = new Finder();
|
||||
$finder->in('scripts');
|
||||
$finder->name('sidebar.sql');
|
||||
foreach( $finder as $file ){
|
||||
$content = $file->getContents();
|
||||
$stmt = $this->em->getConnection()->prepare($content);
|
||||
$stmt->execute();
|
||||
}
|
||||
$stmt->closeCursor();
|
||||
|
||||
// colorbgbody = Couleur des fonds de page
|
||||
$this->insertConfig(
|
||||
1, // order
|
||||
@ -67,7 +77,7 @@ class AppInitCommand extends Command
|
||||
"appname", // id
|
||||
"Titre de votre site", // title
|
||||
"", // value
|
||||
"", // defalut
|
||||
$this->appname, // default
|
||||
"string", // type,
|
||||
true, // visible
|
||||
true, // changeable
|
||||
@ -82,7 +92,7 @@ class AppInitCommand extends Command
|
||||
"appsubname", // id
|
||||
"Sous-titre de votre site", // title
|
||||
"", // value
|
||||
"", // defalut
|
||||
"", // default
|
||||
"string", // type,
|
||||
true, // visible
|
||||
true, // changeable
|
||||
@ -97,7 +107,7 @@ class AppInitCommand extends Command
|
||||
"appdescription", // id
|
||||
"Description de votre site", // title
|
||||
"", // value
|
||||
"", // defalut
|
||||
"", // default
|
||||
"editor", // type,
|
||||
true, // visible
|
||||
true, // changeable
|
||||
@ -112,7 +122,7 @@ class AppInitCommand extends Command
|
||||
"apptheme", // id
|
||||
"Thème de votre site", // title
|
||||
"", // value
|
||||
"", // defalut
|
||||
"", // default
|
||||
"string", // type,
|
||||
false, // visible
|
||||
true, // changeable
|
||||
@ -129,7 +139,7 @@ class AppInitCommand extends Command
|
||||
"colorbgbodydark", // id
|
||||
"Couleur de fond fonçée", // title
|
||||
"", // value
|
||||
"#2574a9", // defalut
|
||||
"#2574a9", // default
|
||||
"color", // type,
|
||||
true, // visible
|
||||
true, // changeable
|
||||
@ -144,7 +154,7 @@ class AppInitCommand extends Command
|
||||
"colorbgbodylight", // id
|
||||
"Couleur de fond claire", // title
|
||||
"", // value
|
||||
"#ffffff", // defalut
|
||||
"#ffffff", // default
|
||||
"color", // type,
|
||||
true, // visible
|
||||
true, // changeable
|
||||
@ -160,7 +170,7 @@ class AppInitCommand extends Command
|
||||
"colorfttitledark", // id
|
||||
"Couleur des titres sur fond fonçé", // title
|
||||
"", // value
|
||||
"#ffffff", // defalut
|
||||
"#ffffff", // default
|
||||
"color", // type,
|
||||
true, // visible
|
||||
true, // changeable
|
||||
@ -175,7 +185,7 @@ class AppInitCommand extends Command
|
||||
"colorfttitlelight", // id
|
||||
"Couleur des titres sur fond claire", // title
|
||||
"", // value
|
||||
"#2574a9", // defalut
|
||||
"#2574a9", // default
|
||||
"color", // type,
|
||||
true, // visible
|
||||
true, // changeable
|
||||
@ -191,7 +201,7 @@ class AppInitCommand extends Command
|
||||
"colorftbodydark", // id
|
||||
"Couleur de la police sur fond fonçé", // title
|
||||
"", // value
|
||||
"#ffffff", // defalut
|
||||
"#ffffff", // default
|
||||
"color", // type,
|
||||
true, // visible
|
||||
true, // changeable
|
||||
@ -206,7 +216,7 @@ class AppInitCommand extends Command
|
||||
"colorftbodylight", // id
|
||||
"Couleur de la police sur fond claire", // title
|
||||
"", // value
|
||||
"#343a40", // defalut
|
||||
"#343a40", // default
|
||||
"color", // type,
|
||||
true, // visible
|
||||
true, // changeable
|
||||
@ -222,7 +232,7 @@ class AppInitCommand extends Command
|
||||
"fonttitle", // id
|
||||
"Police pour les titres", // title
|
||||
"", // value
|
||||
"FredokaOne-Regular", // defalut
|
||||
"FredokaOne-Regular", // default
|
||||
"font", // type,
|
||||
true, // visible
|
||||
true, // changeable
|
||||
@ -237,7 +247,7 @@ class AppInitCommand extends Command
|
||||
"fontbody", // id
|
||||
"Police principale", // title
|
||||
"", // value
|
||||
"Roboto-Regular", // defalut
|
||||
"Roboto-Regular", // default
|
||||
"font", // type,
|
||||
true, // visible
|
||||
true, // changeable
|
||||
@ -252,7 +262,7 @@ class AppInitCommand extends Command
|
||||
"fontsizeh1", // id
|
||||
"Taille des titres h1", // title
|
||||
"", // value
|
||||
"40", // defalut
|
||||
"40", // default
|
||||
"integer", // type,
|
||||
true, // visible
|
||||
true, // changeable
|
||||
@ -267,7 +277,7 @@ class AppInitCommand extends Command
|
||||
"fontsizeh2", // id
|
||||
"Taille des titres h2", // title
|
||||
"", // value
|
||||
"32", // defalut
|
||||
"32", // default
|
||||
"integer", // type,
|
||||
true, // visible
|
||||
true, // changeable
|
||||
@ -282,7 +292,7 @@ class AppInitCommand extends Command
|
||||
"fontsizeh3", // id
|
||||
"Taille des titres h3", // title
|
||||
"", // value
|
||||
"28", // defalut
|
||||
"28", // default
|
||||
"integer", // type,
|
||||
true, // visible
|
||||
true, // changeable
|
||||
@ -297,7 +307,7 @@ class AppInitCommand extends Command
|
||||
"fontsizeh4", // id
|
||||
"Taille des titres h4", // title
|
||||
"", // value
|
||||
"24", // defalut
|
||||
"24", // default
|
||||
"integer", // type,
|
||||
true, // visible
|
||||
true, // changeable
|
||||
@ -313,7 +323,7 @@ class AppInitCommand extends Command
|
||||
"logodark", // id
|
||||
"Logo sur fond fonçé", // title
|
||||
"", // value
|
||||
"", // defalut
|
||||
"logo.png", // default
|
||||
"logo", // type,
|
||||
true, // visible
|
||||
true, // changeable
|
||||
@ -328,7 +338,7 @@ class AppInitCommand extends Command
|
||||
"logolight", // id
|
||||
"Logo sur fond clair", // title
|
||||
"", // value
|
||||
"", // defalut
|
||||
"logo.png", // default
|
||||
"logo", // type,
|
||||
true, // visible
|
||||
true, // changeable
|
||||
@ -337,6 +347,37 @@ class AppInitCommand extends Command
|
||||
"Logo sur fond clair"
|
||||
);
|
||||
|
||||
// header =
|
||||
$this->insertConfig(
|
||||
1, // order
|
||||
"header", // category
|
||||
"headerimage", // id
|
||||
"Image de fond de la bannière", // title
|
||||
"", // value
|
||||
"header.png", // default
|
||||
"header", // type,
|
||||
true, // visible
|
||||
true, // changeable
|
||||
false, // required
|
||||
"", // grouped
|
||||
"Image de fond de la bannière"
|
||||
);
|
||||
|
||||
$this->insertConfig(
|
||||
1, // order
|
||||
"header", // category
|
||||
"headerheight", // id
|
||||
"Hauteur de la bannière", // title
|
||||
"", // value
|
||||
"100", // default
|
||||
"integer", // type,
|
||||
true, // visible
|
||||
true, // changeable
|
||||
false, // required
|
||||
"", // grouped
|
||||
"Image de fond de la bannière"
|
||||
);
|
||||
|
||||
$output->writeln('');
|
||||
|
||||
return 1;
|
||||
|
@ -54,10 +54,10 @@ class CropController extends AbstractController
|
||||
$ratio="1:1";
|
||||
break;
|
||||
|
||||
case "hero":
|
||||
case "header":
|
||||
$max_height=1600;
|
||||
$max_width=1600;
|
||||
$ratio="16:9";
|
||||
$ratio="16:2";
|
||||
break;
|
||||
|
||||
case "image":
|
||||
|
@ -137,7 +137,7 @@ class SecurityController extends AbstractController
|
||||
$event = new InteractiveLoginEvent($request, $token);
|
||||
$dispatcher = new EventDispatcher();
|
||||
$dispatcher->dispatch($event);
|
||||
|
||||
|
||||
// Redirection
|
||||
if($redirect)
|
||||
return $this->redirect($redirect);
|
||||
|
@ -174,6 +174,7 @@ class UserController extends AbstractController
|
||||
'usesidebar' => false,
|
||||
$this->data => $data,
|
||||
'mode' => 'profil',
|
||||
'maxwidth' => true,
|
||||
'form' => $form->createView()
|
||||
]);
|
||||
}
|
||||
@ -231,6 +232,50 @@ class UserController extends AbstractController
|
||||
return $response;
|
||||
}
|
||||
|
||||
public function preference(Request $request) {
|
||||
// S'assurer que c'est un appel ajax
|
||||
if (!$request->isXmlHttpRequest()) {
|
||||
return new JsonResponse(array('message' => 'Interdit'), 400);
|
||||
}
|
||||
|
||||
$key=$request->request->get('key');
|
||||
$id=$request->request->get('id');
|
||||
$value=$request->request->get('value');
|
||||
|
||||
// Récupérer les préférences de l'utilisateur
|
||||
$preference=$this->getUser()->getPreference();
|
||||
|
||||
// Mise à jour de la préférence
|
||||
$toupdate=false;
|
||||
if(!is_array($preference)) {
|
||||
$toupdate=true;
|
||||
$preference=[];
|
||||
}
|
||||
|
||||
if(!array_key_exists($key,$preference)) {
|
||||
$toupdate=true;
|
||||
$preference[$key]=[];
|
||||
}
|
||||
if((!array_key_exists($id,$preference[$key]))) {
|
||||
$toupdate=true;
|
||||
$preference[$key][$id]=$value;
|
||||
}
|
||||
if($preference[$key][$id]!=$value) {
|
||||
$toupdate=true;
|
||||
$preference[$key][$id]=$value;
|
||||
}
|
||||
|
||||
// Mise à jour des préferences
|
||||
if($toupdate) {
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$this->getUser()->setPreference($preference);
|
||||
$em->persist($this->getUser());
|
||||
$em->flush();
|
||||
}
|
||||
|
||||
return new Response();
|
||||
}
|
||||
|
||||
protected function getErrorForm($id,$form,$request,$data,$mode) {
|
||||
if ($form->get('submit')->isClicked()&&$mode=="delete") {
|
||||
}
|
||||
|
@ -86,7 +86,8 @@ class Config
|
||||
|
||||
public function getValue(): ?string
|
||||
{
|
||||
return $this->value;
|
||||
if($this->value=="") return $this->default;
|
||||
else return $this->value;
|
||||
}
|
||||
|
||||
public function setValue(string $value): self
|
||||
|
288
src/nineskeletor-1.0/src/Entity/Sidebar.php
Normal file
288
src/nineskeletor-1.0/src/Entity/Sidebar.php
Normal file
@ -0,0 +1,288 @@
|
||||
<?php
|
||||
namespace App\Entity;
|
||||
|
||||
use Doctrine\Common\Collections\Collection;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
|
||||
use Symfony\Component\Validator\Constraints as Assert;
|
||||
|
||||
/**
|
||||
* @ORM\Entity
|
||||
* @ORM\Table(name="sidebar")
|
||||
* @ORM\HasLifecycleCallbacks()
|
||||
*
|
||||
*/
|
||||
class Sidebar
|
||||
{
|
||||
/**
|
||||
* @ORM\Column(type="integer")
|
||||
* @ORM\Id
|
||||
* @ORM\GeneratedValue(strategy="AUTO")
|
||||
*/
|
||||
private $id;
|
||||
|
||||
/**
|
||||
* @ORM\Column(type="integer")
|
||||
*/
|
||||
private $roworder;
|
||||
|
||||
/**
|
||||
* @ORM\Column(type="string", length=250)
|
||||
*/
|
||||
private $label;
|
||||
|
||||
/**
|
||||
* @ORM\Column(type="string", length=250, nullable=true)
|
||||
*/
|
||||
private $path;
|
||||
|
||||
/**
|
||||
* @ORM\Column(type="string", length=250, nullable=true)
|
||||
*/
|
||||
private $fonticon;
|
||||
|
||||
/**
|
||||
* @ORM\Column(type="simple_array", length=250, nullable=true)
|
||||
*/
|
||||
private $permission;
|
||||
|
||||
/**
|
||||
* @ORM\Column(type="string", length=250, nullable=true)
|
||||
*/
|
||||
private $appactivate;
|
||||
|
||||
/**
|
||||
* @ORM\ManyToOne(targetEntity="Sidebar", inversedBy="childs")
|
||||
* @ORM\JoinColumn(nullable=true)
|
||||
*/
|
||||
private $parent;
|
||||
|
||||
/**
|
||||
* @var ArrayCollection $childs
|
||||
* @var Child
|
||||
*
|
||||
* @ORM\OneToMany(targetEntity="Sidebar", mappedBy="parent", cascade={"persist"}, orphanRemoval=false)
|
||||
* @ORM\OrderBy({"roworder" = "ASC"})
|
||||
*/
|
||||
private $childs;
|
||||
|
||||
/**
|
||||
* Get id
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public function getId()
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set roworder
|
||||
*
|
||||
* @param integer $roworder
|
||||
*
|
||||
* @return Sidebar
|
||||
*/
|
||||
public function setRoworder($roworder)
|
||||
{
|
||||
$this->roworder = $roworder;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get roworder
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public function getRoworder()
|
||||
{
|
||||
return $this->roworder;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set label
|
||||
*
|
||||
* @param string $label
|
||||
*
|
||||
* @return Sidebar
|
||||
*/
|
||||
public function setLabel($label)
|
||||
{
|
||||
$this->label = $label;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get label
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getLabel()
|
||||
{
|
||||
return $this->label;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set path
|
||||
*
|
||||
* @param string $path
|
||||
*
|
||||
* @return Sidebar
|
||||
*/
|
||||
public function setPath($path)
|
||||
{
|
||||
$this->path = $path;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get path
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getPath()
|
||||
{
|
||||
return $this->path;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set fonticon
|
||||
*
|
||||
* @param string $fonticon
|
||||
*
|
||||
* @return Sidebar
|
||||
*/
|
||||
public function setFonticon($fonticon)
|
||||
{
|
||||
$this->fonticon = $fonticon;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get fonticon
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getFonticon()
|
||||
{
|
||||
return $this->fonticon;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set permission
|
||||
*
|
||||
* @param array $permission
|
||||
*
|
||||
* @return Sidebar
|
||||
*/
|
||||
public function setPermission($permission)
|
||||
{
|
||||
$this->permission = $permission;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get permission
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getPermission()
|
||||
{
|
||||
return $this->permission;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set appactivate
|
||||
*
|
||||
* @param string $appactivate
|
||||
*
|
||||
* @return Sidebar
|
||||
*/
|
||||
public function setAppactivate($appactivate)
|
||||
{
|
||||
$this->appactivate = $appactivate;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get appactivate
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getAppactivate()
|
||||
{
|
||||
return $this->appactivate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set parent
|
||||
*
|
||||
* @param Sidebar $parent
|
||||
*
|
||||
* @return Sidebar
|
||||
*/
|
||||
public function setParent(Sidebar $parent = null)
|
||||
{
|
||||
$this->parent = $parent;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get parent
|
||||
*
|
||||
* @return Sidebar
|
||||
*/
|
||||
public function getParent()
|
||||
{
|
||||
return $this->parent;
|
||||
}
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->childs = new \Doctrine\Common\Collections\ArrayCollection();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add child
|
||||
*
|
||||
* @param Sidebar $child
|
||||
*
|
||||
* @return Sidebar
|
||||
*/
|
||||
public function addChild(Sidebar $child)
|
||||
{
|
||||
$this->childs[] = $child;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove child
|
||||
*
|
||||
* @param Sidebar $child
|
||||
*/
|
||||
public function removeChild(Sidebar $child)
|
||||
{
|
||||
$this->childs->removeElement($child);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get childs
|
||||
*
|
||||
* @return \Doctrine\Common\Collections\Collection
|
||||
*/
|
||||
public function getChilds()
|
||||
{
|
||||
return $this->childs;
|
||||
}
|
||||
}
|
@ -80,6 +80,10 @@ class User implements UserInterface, \Serializable
|
||||
*/
|
||||
private $apikey;
|
||||
|
||||
/**
|
||||
* @ORM\Column(name="preference", type="array", nullable=true)
|
||||
*/
|
||||
private $preference;
|
||||
|
||||
/**
|
||||
* @ORM\ManyToMany(targetEntity="Group", inversedBy="users", cascade={"persist"})
|
||||
@ -286,4 +290,16 @@ class User implements UserInterface, \Serializable
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getPreference(): ?array
|
||||
{
|
||||
return $this->preference;
|
||||
}
|
||||
|
||||
public function setPreference(?array $preference): self
|
||||
{
|
||||
$this->preference = $preference;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -126,7 +126,7 @@ class ConfigType extends AbstractType
|
||||
$builder->add('value',HiddenType::class);
|
||||
break;
|
||||
|
||||
case "hero":
|
||||
case "header":
|
||||
$builder->add('value',HiddenType::class);
|
||||
break;
|
||||
|
||||
|
25
src/nineskeletor-1.0/src/Service/messageService.php
Normal file
25
src/nineskeletor-1.0/src/Service/messageService.php
Normal file
@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace App\Service;
|
||||
|
||||
class messageService {
|
||||
private $wssport;
|
||||
|
||||
public function __construct($wssport)
|
||||
{
|
||||
$this->wssport = $wssport;
|
||||
}
|
||||
|
||||
|
||||
public function addMessage($userkey,$groupid,$message){
|
||||
\Ratchet\Client\connect('ws://localhost:'.$this->wssport)->then(function($conn) use ($userkey,$groupid,$message) {
|
||||
$msg = ['command' => 'pushsubscribe', 'log'=>'','channel' => 'message-'.$groupid, 'channeltype' => 'message', 'channelkey' => $groupid, 'userkey' => $userkey,"subdata"=>["command"=>"message","message"=>$message]];
|
||||
$msg = json_encode($msg);
|
||||
$conn->send($msg);
|
||||
$conn->close();
|
||||
}, function ($e) {
|
||||
die("Could not connect: {$e->getMessage()}");
|
||||
});
|
||||
|
||||
}
|
||||
}
|
@ -5,95 +5,114 @@
|
||||
use Symfony\Component\HttpKernel\Event\RequestEvent;
|
||||
use Symfony\Component\HttpFoundation\Session\Session;
|
||||
use Doctrine\ORM\EntityManager;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
|
||||
|
||||
class sessionInit {
|
||||
private $container;
|
||||
protected $em;
|
||||
protected $session;
|
||||
protected $token;
|
||||
|
||||
public function __construct(ContainerInterface $container, EntityManager $em,Session $session)
|
||||
public function __construct(ContainerInterface $container, EntityManager $em,Session $session, TokenStorageInterface $token)
|
||||
{
|
||||
$this->container = $container;
|
||||
$this->session = $session;
|
||||
$this->em = $em;
|
||||
$this->token = $token;
|
||||
}
|
||||
|
||||
public function onDomainParse(RequestEvent $event) {
|
||||
// Config
|
||||
$configs = $this->em->getRepository("App:Config")->findAll();
|
||||
foreach($configs as $config) {
|
||||
$this->session->set($config->getId(), strval($config->getValue()));
|
||||
}
|
||||
$this->session->set("headerimage","uploads/header/".$this->session->get("headerimage"));
|
||||
|
||||
// Valeur par défaut appname
|
||||
if($this->session->get("appname")=="")
|
||||
$this->session->set("appname", $this->container->getParameter('appName'));
|
||||
// Current user
|
||||
$token = $this->token->getToken();
|
||||
if(!$token) return;
|
||||
$curentuser=$token->getUser();
|
||||
|
||||
// Valeur par defaut colorbgbodydark = #343a40
|
||||
if($this->session->get("colorbgbodydark")=="")
|
||||
$this->session->set("colorbgbodydark", $this->em->getRepository("App:Config")->find("colorbgbodydark")->getDefault());
|
||||
// Roles actif
|
||||
if($curentuser=="anon.") $roles=[];
|
||||
else $roles=$curentuser->getRoles();
|
||||
|
||||
// Valeur par defaut colorbgbodydark = #ffffff
|
||||
if($this->session->get("colorbgbodylight")=="")
|
||||
$this->session->set("colorbgbodylight",$this->em->getRepository("App:Config")->find("colorbgbodylight")->getDefault());
|
||||
// Sidebar
|
||||
$sidebar=array();
|
||||
$request = $event->getRequest();
|
||||
$route = $request->attributes->get('_route');
|
||||
$nvs1 = $this->em->getRepository("App:Sidebar")->findBy(array('parent'=> NULL), array('roworder' => 'ASC'));
|
||||
foreach($nvs1 as $nv1) {
|
||||
if($this->haveRole($curentuser,$roles,$nv1->getPermission(),$nv1->getPath())) {
|
||||
$sidebar[$nv1->getRoworder()] = array(
|
||||
"fonticon" => $nv1->getFonticon(),
|
||||
"label" => $nv1->getLabel(),
|
||||
"path" => $nv1->getPath(),
|
||||
);
|
||||
|
||||
// Valeur par defaut colorfttitledark = #ffffff
|
||||
if($this->session->get("colorfttitledark")=="")
|
||||
$this->session->set("colorfttitledark", $this->em->getRepository("App:Config")->find("colorfttitledark")->getDefault());
|
||||
foreach($nv1->getChilds() as $nv2) {
|
||||
|
||||
if($this->haveRole($curentuser,$roles,$nv2->getPermission(),$nv2->getPath())) {
|
||||
$sidebar[$nv1->getRoworder()]["childs"][$nv2->getRoworder()] = array (
|
||||
"fonticon" => $nv2->getFonticon(),
|
||||
"label" => $nv2->getLabel(),
|
||||
"path" => $nv2->getPath(),
|
||||
"active" => (stripos($route,$nv2->getPath())!==false)
|
||||
);
|
||||
|
||||
// Valeur par defaut colorfttitlelight = #343a40
|
||||
if($this->session->get("colorfttitlelight")=="")
|
||||
$this->session->set("colorfttitlelight", $this->em->getRepository("App:Config")->find("colorfttitlelight")->getDefault());
|
||||
|
||||
// Valeur par defaut colorftbodydark = #ffffff
|
||||
if($this->session->get("colorftbodydark")=="")
|
||||
$this->session->set("colorftbodydark", $this->em->getRepository("App:Config")->find("colorftbodydark")->getDefault());
|
||||
|
||||
// Valeur par defaut colorftbodylight = #343a40
|
||||
if($this->session->get("colorftbodylight")=="")
|
||||
$this->session->set("colorftbodylight", $this->em->getRepository("App:Config")->find("colorftbodylight")->getDefault());
|
||||
|
||||
// Valeur par defaut fonttitle = FredokaOne-Regular
|
||||
if($this->session->get("fonttitle")=="")
|
||||
$this->session->set("fonttitle", $this->em->getRepository("App:Config")->find("fonttitle")->getDefault());
|
||||
|
||||
// Valeur par defaut fontbody = Roboto-Regular
|
||||
if($this->session->get("fontbody")=="")
|
||||
$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
|
||||
if($this->session->get("logodark")==""&&$this->session->get("logolight")=="") {
|
||||
$this->session->set("logodark", "logo.png");
|
||||
$this->session->set("logolight", "logo.png");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->session->set('sidebar', $sidebar);
|
||||
|
||||
// Préférence
|
||||
$this->session->set("fgheader", true);
|
||||
if($curentuser!="anon.") {
|
||||
$preference=$curentuser->getPreference();
|
||||
if(is_array($preference)) {
|
||||
// Préférence header
|
||||
if(array_key_exists("fgheader",$preference)) {
|
||||
$fgheader=($preference["fgheader"][0]=="true");
|
||||
$this->session->set("fgheader", $fgheader);
|
||||
}
|
||||
}
|
||||
}
|
||||
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"));
|
||||
|
||||
// Calcul couleur
|
||||
$this->session->set("colorbgbodylight-darker", $this->adjustBrightness($this->session->get("colorbgbodylight"),-10));
|
||||
$this->session->set("colorbgbodydark-darker", $this->adjustBrightness($this->session->get("colorbgbodydark"),-50));
|
||||
$this->session->set("colorfttitlelight-darker", $this->adjustBrightness($this->session->get("colorfttitlelight"),-50));
|
||||
$this->session->set("colorbgbodydark-darker", $this->adjustBrightness($this->session->get("colorbgbodydark"),-50));
|
||||
$this->session->set("colorbgbodydark-lighter", $this->adjustBrightness($this->session->get("colorbgbodydark"),+50));
|
||||
$this->session->set("colorbgbodydark-rgb", $this->hexToRgb($this->session->get("colorbgbodydark")));
|
||||
$this->session->set("colorbgbodydark-darkrgb", $this->hexToRgb($this->session->get("colorbgbodydark-darker")));
|
||||
$this->session->set("colorbgbodydark-lightrgb", $this->hexToRgb($this->session->get("colorbgbodydark-lighter")));
|
||||
|
||||
}
|
||||
|
||||
public function haveRole($curentuser,$roles,$tohave,$route) {
|
||||
$haverole=false;
|
||||
if($roles=="") {
|
||||
if(empty($tohave)) $haverole=true;
|
||||
}
|
||||
else {
|
||||
foreach($roles as $role) {
|
||||
if(in_array($role,$tohave))
|
||||
$haverole=true;
|
||||
}
|
||||
}
|
||||
|
||||
if($route!=null) {
|
||||
if($haverole&&in_array("ROLE_MODO",$roles)) {
|
||||
$permmodo=$this->em->getRepository("App:PermModo")->findOneBy(["route"=>$route,"visible"=>true,"permmodoprofil"=>$curentuser->getPermmodoprofil()]);
|
||||
if(!$permmodo) $haverole=false;
|
||||
}
|
||||
}
|
||||
|
||||
return $haverole;
|
||||
}
|
||||
|
||||
private function adjustBrightness($hex, $steps) {
|
||||
// Steps should be between -255 and 255. Negative = darker, positive = lighter
|
||||
$steps = max(-255, min(255, $steps));
|
||||
@ -115,5 +134,15 @@
|
||||
}
|
||||
|
||||
return '#'.$return;
|
||||
}
|
||||
}
|
||||
|
||||
public function hexToRgb($hex) {
|
||||
$hex = str_replace('#', '', $hex);
|
||||
$length = strlen($hex);
|
||||
$rgb['r'] = hexdec($length == 6 ? substr($hex, 0, 2) : ($length == 3 ? str_repeat(substr($hex, 0, 1), 2) : 0));
|
||||
$rgb['g'] = hexdec($length == 6 ? substr($hex, 2, 2) : ($length == 3 ? str_repeat(substr($hex, 1, 1), 2) : 0));
|
||||
$rgb['b'] = hexdec($length == 6 ? substr($hex, 4, 2) : ($length == 3 ? str_repeat(substr($hex, 2, 1), 2) : 0));
|
||||
|
||||
return $rgb['r'].",".$rgb['g'].",".$rgb['b'];
|
||||
}
|
||||
}
|
||||
|
@ -8,9 +8,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use SplObjectStorage;
|
||||
|
||||
use App\Entity\Scrum;
|
||||
use App\Entity\Scrumcolumn;
|
||||
use App\Entity\Scrumwidget;
|
||||
use App\Entity\Message;
|
||||
|
||||
class MessageHandler implements MessageComponentInterface
|
||||
{
|
||||
@ -35,6 +33,7 @@ class MessageHandler implements MessageComponentInterface
|
||||
$this->channelkeys = [];
|
||||
$this->userconns = [];
|
||||
$this->userkeys = [];
|
||||
$this->ispush = [];
|
||||
}
|
||||
|
||||
public function onOpen(ConnectionInterface $conn)
|
||||
@ -48,8 +47,8 @@ class MessageHandler implements MessageComponentInterface
|
||||
$data= new \stdClass;
|
||||
$data->command = "adead";
|
||||
|
||||
// Envoyer le message de deconnection
|
||||
if (isset($this->channels[$conn->resourceId])) {
|
||||
// Envoyer le message de deconnection que si la connection n'est issu d'un push
|
||||
if (isset($this->channels[$conn->resourceId])&&!$this->ispush[$conn->resourceId]) {
|
||||
$this->sendMessage($conn,$data,"other");
|
||||
}
|
||||
|
||||
@ -70,11 +69,54 @@ class MessageHandler implements MessageComponentInterface
|
||||
$data = json_decode($msg);
|
||||
|
||||
switch ($data->command) {
|
||||
case "subscribe":
|
||||
case "pushsubscribe":
|
||||
$this->channels[$conn->resourceId] = $data->channel;
|
||||
$this->channeltypes[$conn->resourceId] = $data->channeltype;
|
||||
$this->channelkeys[$conn->resourceId] = $data->channelkey;
|
||||
$this->userkeys[$conn->resourceId] = $data->userkey;
|
||||
$this->ispush[$conn->resourceId] = true;
|
||||
if (isset($this->channels[$conn->resourceId])) {
|
||||
switch ($this->channeltypes[$conn->resourceId]) {
|
||||
//case "type": $this->onMessageType($conn,$data); break;
|
||||
default:
|
||||
$user=$this->em->getRepository("App:User")->findOneBy(["apikey"=>$data->userkey]);
|
||||
if(!$user) return false;
|
||||
$group=$this->em->getRepository("App:Group")->find($data->channelkey);
|
||||
if(!$group) return false;
|
||||
|
||||
$message=new Message();
|
||||
$message->setTopic($data->subdata->message);
|
||||
$message->setUser($user);
|
||||
$message->setGroup($group);
|
||||
$this->em->persist($message);
|
||||
$this->em->flush();
|
||||
|
||||
$this->sendMessage($conn,$data->subdata);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "subscribe":
|
||||
// Channel privé ?
|
||||
switch ($data->channeltype) {
|
||||
case "message":
|
||||
$user=$this->em->getRepository("App:User")->findOneBy(["apikey"=>$data->userkey]);
|
||||
if(!$user) return false;
|
||||
$group=$this->em->getRepository("App:Group")->find($data->channelkey);
|
||||
if(!$group) return false;
|
||||
|
||||
if(!$user->hasRole("ROLE_ADMIN")&&$user->hasRole("ROLE_MODO")) {
|
||||
$usergroup=$this->em->getRepository("App:UserGroup")->findOneBy(["user"=>$user,"group"=>$data->channelkey]);
|
||||
if(!$usergroup) return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
$this->channels[$conn->resourceId] = $data->channel;
|
||||
$this->channeltypes[$conn->resourceId] = $data->channeltype;
|
||||
$this->channelkeys[$conn->resourceId] = $data->channelkey;
|
||||
$this->userkeys[$conn->resourceId] = $data->userkey;
|
||||
$this->ispush[$conn->resourceId] = false;
|
||||
break;
|
||||
|
||||
case "meto":
|
||||
@ -89,10 +131,28 @@ class MessageHandler implements MessageComponentInterface
|
||||
}
|
||||
break;
|
||||
|
||||
case "message":
|
||||
if (isset($this->channels[$conn->resourceId])) {
|
||||
$user=$this->em->getRepository("App:User")->findOneBy(["apikey"=>$this->userkeys[$conn->resourceId]]);
|
||||
if(!$user) return false;
|
||||
$group=$this->em->getRepository("App:Group")->find($this->channelkeys[$conn->resourceId]);
|
||||
if(!$group) return false;
|
||||
|
||||
$message=new Message();
|
||||
$message->setTopic($data->message);
|
||||
$message->setUser($user);
|
||||
$message->setGroup($group);
|
||||
$this->em->persist($message);
|
||||
$this->em->flush();
|
||||
|
||||
$this->sendMessage($conn,$data);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
if (isset($this->channels[$conn->resourceId])) {
|
||||
switch ($this->channeltypes[$conn->resourceId]) {
|
||||
//case "type": $this->onMessageYype($conn,$data); break;
|
||||
//case "type": $this->onMessageType($conn,$data); break;
|
||||
default: $this->sendMessage($conn,$data);
|
||||
}
|
||||
}
|
||||
@ -118,11 +178,14 @@ class MessageHandler implements MessageComponentInterface
|
||||
|
||||
// Send
|
||||
if($from && $to) {
|
||||
$now=new \DateTime();
|
||||
|
||||
$data->from= new \stdClass;
|
||||
$data->from->id = $from->getId();
|
||||
$data->from->username = $from->getUsername();
|
||||
$data->from->displayname = $from->getDisplayname();
|
||||
$data->from->avatar = $this->getAvatar($from->getAvatar());
|
||||
$data->date = $now->format("d/m/Y H:i");
|
||||
|
||||
$data->log="== GET MSG from ".$data->from->username." to ".$to->getUsername()." = ".$data->command;
|
||||
$this->userconns[$id]->send(json_encode($data));
|
||||
|
@ -63,10 +63,10 @@
|
||||
<img id="config_value_img" src="/{{ appAlias }}/uploads/logo/{{ config.value }}" style="background-color: {{color}}; width:90px;height:90px; margin:auto;display:block;">
|
||||
<a class="btn btn-info" style="width:90px" onClick="ModalLoad('mymodallarge','Logo','{{ path('app_config_logo') }}');" title='Ajouter un Logo'>Modifier</a>
|
||||
</div>
|
||||
{% elseif config.type=="hero" %}
|
||||
{% elseif config.type=="header" %}
|
||||
<div style="margin:10px auto;">
|
||||
<img id="config_value_img" src="/{{ appAlias }}/uploads/hero/{{ config.value }}" style="width:100%;margin:auto;display:block;">
|
||||
<a class="btn btn-info" style="width:100%" onClick="ModalLoad('mymodallarge','Carrousel','{{ path('app_crop01', {"type": "hero", "reportinput": "#config_value" }) }}');" title='Ajouter une Bannière'>Modifier</a>
|
||||
<img id="config_value_img" src="/{{ appAlias }}/uploads/header/{{ config.value }}" style="width:100%;margin:auto;display:block;">
|
||||
<a class="btn btn-info" style="width:100%" onClick="ModalLoad('mymodallarge','Bannière','{{ path('app_crop01', {"type": "header", "reportinput": "#config_value" }) }}');" title='Ajouter une Bannière'>Modifier</a>
|
||||
</div>
|
||||
{% elseif config.type=="image" %}
|
||||
<div style="margin:10px auto;">
|
||||
|
@ -36,6 +36,12 @@ CONFIGURATIONS
|
||||
<h3>Logo</h3>
|
||||
{{ render(path("app_config_render",{category:"logo"})) }}
|
||||
</div>
|
||||
|
||||
<div class="col-md-12">
|
||||
<h3>Bannière</h3>
|
||||
{{ render(path("app_config_render",{category:"header"})) }}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
@ -70,6 +70,10 @@
|
||||
{%if not val is empty %}
|
||||
<img src="/{{appAlias}}/uploads/logo/{{ val }}" height=50px>
|
||||
{% endif %}
|
||||
{% elseif config.type=="header" %}
|
||||
{%if not val is empty %}
|
||||
<img src="/{{appAlias}}/uploads/header/{{ val }}" width="100%">
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{{ val|raw }}
|
||||
{% endif %}
|
||||
|
@ -111,8 +111,8 @@
|
||||
{% set nbratio=1 %}
|
||||
{% elseif ratio=="16:9" %}
|
||||
{% set nbratio=(16/9) %}
|
||||
{% elseif nbratio=="16:2" %}
|
||||
{% set class=(16/2) %}
|
||||
{% elseif ratio=="16:2" %}
|
||||
{% set nbratio=(16/2) %}
|
||||
{% endif %}
|
||||
|
||||
$('#largeimg').CropSelectJs('setSelectionAspectRatio',{{nbratio}});
|
||||
|
@ -1,37 +1,84 @@
|
||||
$(document).ready(function() {
|
||||
{% if app.request.attributes.get('_route')=='app_home' %}
|
||||
{% if not app.user and app.session.get("fgforceconnect") %}
|
||||
{% if appAuth=="SQL" %}
|
||||
window.location="{{url("app_login")}}"
|
||||
{% elseif appAuth=="CAS" %}
|
||||
window.location="{{url("app_logincas")}}"
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
$(".pick-a-color").spectrum(
|
||||
{
|
||||
type: "text",
|
||||
showAlpha: false
|
||||
}
|
||||
);
|
||||
|
||||
$(".pick-a-color").attr("autocomplete","off");
|
||||
|
||||
var doit = true;
|
||||
|
||||
var doit = true;
|
||||
$("a[data-method]").on('click',function(){
|
||||
if($(this).data('confirm')){
|
||||
doit = confirm($(this).data('confirm'));
|
||||
if(!doit) return false;
|
||||
}
|
||||
});
|
||||
|
||||
$("button[data-method]").on('click',function(){
|
||||
if($(this).data('confirm')){
|
||||
doit = confirm($(this).data('confirm'));
|
||||
if(!doit) return false;
|
||||
}
|
||||
});
|
||||
|
||||
Resize();
|
||||
});
|
||||
|
||||
$( window ).resize(function() {
|
||||
Resize();
|
||||
});
|
||||
|
||||
function Resize() {
|
||||
if($("#headercontainer").is(":visible")){
|
||||
//$(".navbar-toggler").hide();
|
||||
$("#navbar-link").hide();
|
||||
$("#navbar-logo").hide();
|
||||
}
|
||||
else {
|
||||
//$(".navbar-toggler").show();
|
||||
$("#navbar-link").show();
|
||||
$("#navbar-logo").show();
|
||||
}
|
||||
|
||||
$("#sidebar").css("padding-top",$(".header").height());
|
||||
$("#mycontent").css("padding-top",$(".header").height());
|
||||
}
|
||||
|
||||
function ModalLoad(idmodal,title,path) {
|
||||
$("#"+idmodal+" .modal-header h4").text(title);
|
||||
$("#"+idmodal+" iframe").attr("src",path);
|
||||
$("#"+idmodal).modal("show");
|
||||
}
|
||||
|
||||
function switchHeader() {
|
||||
{% if app.user %}
|
||||
$.ajax({
|
||||
method: "POST",
|
||||
url: "{{ path('app_user_preference') }}",
|
||||
data: {
|
||||
id:0,
|
||||
key:'fgheader',
|
||||
value: !($("#headercontainer").is(":visible"))
|
||||
},
|
||||
success: function() {
|
||||
location.reload();
|
||||
}
|
||||
});
|
||||
{% endif %}
|
||||
}
|
||||
|
||||
|
||||
{% if wssuse %}
|
||||
function subscribe(channeltype,channelkey,userkey) {
|
||||
console.log("== SUBSCRIBE "+channeltype+"-"+channelkey+" with userkey "+userkey);
|
||||
|
@ -1,49 +1,32 @@
|
||||
{% set sidebar = app.session.get('sidebar') %}
|
||||
|
||||
<div id="sidebar" class="collapse">
|
||||
<ul class="nav">
|
||||
{% if is_granted('ROLE_ADMIN') %}
|
||||
<br>
|
||||
<li class="title">Configuration</li>
|
||||
|
||||
<li>
|
||||
<a href="{{path("app_config")}}">
|
||||
<i class="fa fa-cog"></i>Générale
|
||||
<ul class="nav flex-column">
|
||||
{% for nav01 in sidebar %}
|
||||
<li class="nav-item nav-first-level">
|
||||
<a class="nav-link nav-section" style="cursor:pointer">
|
||||
<i class="{{ nav01.fonticon }} fa-fw"></i> {{ nav01.label }}
|
||||
</a>
|
||||
|
||||
{% if nav01.childs is defined %}
|
||||
<ul class="nav nav-second-level">
|
||||
{% for nav02 in nav01.childs %}
|
||||
<a class="nav-link {%if nav02.active%}active{%endif%}" href="{{ path(nav02.path) }}">
|
||||
<i class="{{ nav02.fonticon }} fa-fw"></i> {{ nav02.label }}
|
||||
</a>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</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>
|
||||
<a href="{{path("app_user")}}">
|
||||
<i class="fa fa-user"></i>Utilisateurs
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="last">
|
||||
<a href="{{path("app_group")}}">
|
||||
<i class="fa fa-users"></i>Groupes
|
||||
</a>
|
||||
</li>
|
||||
|
||||
{% if appCron %}
|
||||
<li class="title">Outils</li>
|
||||
<li>
|
||||
<a href="{{path("app_cron")}}">
|
||||
<i class="fa fa-cogs"></i>Jobs
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
<li class="last">
|
||||
<a href="{{path("app_cron_log")}}">
|
||||
<i class="fa fa-list-alt"></i>Logs / Dump
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$("#sidebar .nav-second-level").hide();
|
||||
$("#sidebar").find(".active").parent().show();
|
||||
$("#sidebar .nav-first-level .nav-section").click(function(){
|
||||
$("#sidebar .nav-second-level").hide();
|
||||
$(this).parent().children(".nav-second-level").fadeToggle("fast");
|
||||
});
|
||||
</script>
|
@ -15,6 +15,9 @@
|
||||
--colorbgbodylight-darker: {{ app.session.get('colorbgbodylight-darker')|raw }};
|
||||
--colorbgbodydark-darker: {{ app.session.get('colorbgbodydark-darker')|raw }};
|
||||
--colorfttitlelight-darker: {{ app.session.get('colorfttitlelight-darker')|raw }};
|
||||
|
||||
--header: url("\{{ appAlias }}\uploads\header\{{ app.session.get('headerimage')|raw }}");
|
||||
--colorbgbodydark-rgb: {{ app.session.get('colorbgbodydark-rgb')|raw }};
|
||||
}
|
||||
|
||||
/* COLOR BODY */
|
||||
@ -24,6 +27,18 @@ body {
|
||||
color: var(--colorftbodylight);
|
||||
}
|
||||
|
||||
body .header {
|
||||
color: var(--colorfttitledark);
|
||||
}
|
||||
|
||||
body .header a {
|
||||
color: var(--colorfttitledark);
|
||||
}
|
||||
body .header a:hover {
|
||||
color: var(--colorfttitledark);
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
body .navbar.bg-dark {
|
||||
background-color: var(--colorbgbodydark)!important;
|
||||
}
|
||||
@ -48,6 +63,10 @@ body h1, body h2, body h3, body .modal-header h4 {
|
||||
color: var(--colorfttitlelight);
|
||||
}
|
||||
|
||||
.btn {
|
||||
color: var(--colorftbodydark) !important;
|
||||
}
|
||||
|
||||
body a, body .btn-link {
|
||||
color: var(--colorfttitlelight);
|
||||
}
|
||||
@ -105,6 +124,15 @@ body.monocolor {
|
||||
color: var(--colorftbodydark);
|
||||
}
|
||||
|
||||
body.monocolor .header {
|
||||
color: var(--colorfttitledark);
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
body.monocolor .header a {
|
||||
color: var(--colorfttitledark);
|
||||
}
|
||||
|
||||
body.monocolor .navbar.bg-dark {
|
||||
background-color: var(--colorbgbodydark)!important;
|
||||
}
|
||||
@ -162,11 +190,15 @@ body {
|
||||
font-family: var(--fontbody);
|
||||
}
|
||||
|
||||
h1,h2,h3, .navbar-brand, .card-header, .modal-header h4 {
|
||||
.headertitle {
|
||||
line-height:{{app.session.get("fontsizeh1")-10}}px;
|
||||
}
|
||||
|
||||
.headertitle, h1, h2, h3, .navbar-brand, .card-header, .modal-header h4 {
|
||||
font-family: var(--fonttitle);
|
||||
}
|
||||
|
||||
h1 { font-size: var(--fontsizeh1); }
|
||||
.headertitle,h1 { font-size: var(--fontsizeh1); }
|
||||
h2 { font-size: var(--fontsizeh2); }
|
||||
h3 { font-size: var(--fontsizeh3); }
|
||||
h4 { font-size: var(--fontsizeh4); }
|
||||
|
@ -51,55 +51,121 @@
|
||||
|
||||
<body class={{ class }}>
|
||||
{% if useheader is defined and useheader %}
|
||||
<nav class="navbar navbar-expand-lg navbar-dark fixed-top bg-dark">
|
||||
<a class="navbar-brand" href="{{ path('app_home')}}">
|
||||
<img src="/{{ appAlias }}/uploads/logo/{{app.session.get("logodark")}}" style="height:30px;margin-top:-3px;">
|
||||
{{app.session.get("appname")}}
|
||||
</a>
|
||||
<div class="header fixed-top">
|
||||
{% if app.session.get("fgheader") %}
|
||||
<div id="headercontainer" class="d-flex align-items-center" style="height:{{app.session.get("headerheight")}}px; background-image: linear-gradient(90deg,rgba(var(--colorbgbodydark-rgb),1),rgba(var(--colorbgbodydark-rgb),0.1)),url(/{{appAlias}}/{{app.session.get("headerimage")}});background-size:cover">
|
||||
<a href="{{ path('app_home')}}">
|
||||
<img src="/{{ appAlias }}/uploads/logo/{{app.session.get("logodark")}}"style="height:{{app.session.get("headerheight")-20}}px;margin-left:10px;">
|
||||
</a>
|
||||
|
||||
{% if usesidebar is defined and usesidebar %}
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#sidebar" aria-controls="sidebar" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
{% if app.session.get("sublogo") %}
|
||||
<a href="{{ path('app_home')}}">
|
||||
<img src="/{{ appAlias }}/{{app.session.get("sublogo")}}"style="height:{{app.session.get("headerheight")-20}}px;margin-left:10px;">
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
<div class="headertitle mr-auto" style="padding-left:10px">
|
||||
<a href="{{ path('app_home')}}">
|
||||
{{app.session.get("appname")}}
|
||||
</a>
|
||||
<br>
|
||||
<small>{{app.session.get("appsubname")}}</small>
|
||||
</div>
|
||||
|
||||
<div class="pr-3">
|
||||
<ul class="nav">
|
||||
{% if app.user %}
|
||||
<li>
|
||||
<a href="{{path("app_user_profil")}}">
|
||||
<img src="{{app.user.avatar|urlavatar}}" class="avatar">
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if is_granted('ROLE_ADMIN') or is_granted('ROLE_MODO') %}
|
||||
<li>
|
||||
<a href="{{path("app_admin")}}"><i class="fa fa-cog fa-2x"></i></a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if app.user %}
|
||||
<li id="switchHeader">
|
||||
<a onclick="switchHeader()" title="Cacher / Afficher Bannière"><i class="fa fa-chevron-up fa-2x"></i></a>
|
||||
<li>
|
||||
|
||||
{% if appAuth=="SQL" %}
|
||||
<li><a href="{{path("app_logout")}}"><i class="fa fa-sign-out-alt fa-2x"></i></a></li>
|
||||
{% elseif appAuth=="CAS" %}
|
||||
<li><a href="{{path("app_logoutcas")}}"><i class="fa fa-sign-out-alt fa-2x"></i></a></li>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if appAuth=="SQL" %}
|
||||
<li><a href="{{path("app_login")}}"><i class="fa fa-sign-in-alt fa-2x"></i></a></li>
|
||||
{% elseif appAuth=="CAS" %}
|
||||
<li><a href="{{path("app_logincas")}}"><i class="fa fa-sign-in-alt fa-2x"></i></a></li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</li>
|
||||
</ul>
|
||||
{% if app.user %}
|
||||
<div id="nameuser" style="text-align:right; margin-top:5px"><a href="{{ path('app_user_profil') }}" title="Profil">{{ app.user.firstname }} {{ app.user.lastname }}</a></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav">
|
||||
</ul>
|
||||
</div>
|
||||
<nav class="navbar navbar-expand navbar-dark bg-dark">
|
||||
<a id="navbar-logo" href="{{ path('app_home')}}" style="display:none;margin-right:10px;">
|
||||
<img src="/{{ appAlias }}/uploads/logo/{{app.session.get("logodark")}}" style="height:40px;">
|
||||
</a>
|
||||
|
||||
<ul class="nav navbar-top-links navbar-right">
|
||||
{% if app.user %}
|
||||
<li>
|
||||
<a href="{{path("app_user_profil")}}">
|
||||
<img src="{{app.user.avatar|urlavatar}}" class="avatar">
|
||||
</a>
|
||||
</li>
|
||||
{% if usesidebar is defined and usesidebar %}
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#sidebar" aria-controls="sidebar" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
{% endif %}
|
||||
|
||||
{% if is_granted('ROLE_ADMIN') %}
|
||||
<li>
|
||||
<a href="{{path("app_admin")}}"><i class="fa fa-cog fa-fw"></i></a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
<li>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav">
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<ul id="navbar-link" class="nav navbar-top-links navbar-right" style="display:none;">
|
||||
{% if app.user %}
|
||||
{% if appAuth=="SQL" %}
|
||||
<a href="{{path("app_logout")}}"><i class="fa fa-sign-out-alt fa-fw"></i></a>
|
||||
{% elseif appAuth=="CAS" %}
|
||||
<a href="{{path("app_logoutcas")}}"><i class="fa fa-sign-out-alt fa-fw"></i></a>
|
||||
<li>
|
||||
<a href="{{path("app_user_profil")}}">
|
||||
<img src="{{app.user.avatar|urlavatar}}" class="avatar" style="width:25px; height:25px">
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if appAuth=="SQL" %}
|
||||
<a href="{{path("app_login")}}"><i class="fa fa-sign-in-alt fa-fw"></i></a>
|
||||
{% elseif appAuth=="CAS" %}
|
||||
<a href="{{path("app_logincas")}}"><i class="fa fa-sign-in-alt fa-fw"></i></a>
|
||||
|
||||
{% if is_granted('ROLE_ADMIN') %}
|
||||
<li>
|
||||
<a href="{{path("app_admin")}}"><i class="fa fa-cog fa-fw"></i></a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
{% if app.user %}
|
||||
<li id="switchHeader">
|
||||
<a class="btn-link" onclick="switchHeader()" title="Cacher / Afficher Bannière"><i class="fa fa-chevron-down fa-fw"></i></a>
|
||||
<li>
|
||||
|
||||
{% if appAuth=="SQL" %}
|
||||
<li><a href="{{path("app_logout")}}"><i class="fa fa-sign-out-alt fa-fw"></i></a></li>
|
||||
{% elseif appAuth=="CAS" %}
|
||||
<li><a href="{{path("app_logoutcas")}}"><i class="fa fa-sign-out-alt fa-fw"></i></a></li>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if appAuth=="SQL" %}
|
||||
<li><a href="{{path("app_login")}}"><i class="fa fa-sign-in-alt fa-fw"></i></a></li>
|
||||
{% elseif appAuth=="CAS" %}
|
||||
<li><a href="{{path("app_logincas")}}"><i class="fa fa-sign-in-alt fa-fw"></i></a></li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<main id="main" class="container-fluid {% if maxwidth is defined and maxwidth %} page-maxed {% endif %}">
|
||||
@ -115,6 +181,11 @@
|
||||
{% endblock %}
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<script>
|
||||
$("#sidebar").css("padding-top",$(".header").height());
|
||||
$("#mycontent").css("padding-top",$(".header").height());
|
||||
</script>
|
||||
|
||||
<div id="mymodal" class="modal" role="dialog">
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
|
Loading…
Reference in New Issue
Block a user