svg
This commit is contained in:
@ -30,7 +30,7 @@ security:
|
|||||||
access_control:
|
access_control:
|
||||||
- { path: ^/login, roles: PUBLIC_ACCESS }
|
- { path: ^/login, roles: PUBLIC_ACCESS }
|
||||||
- { path: ^/admin, roles: ROLE_ADMIN }
|
- { path: ^/admin, roles: ROLE_ADMIN }
|
||||||
- { path: ^/, roles: ROLE_USER }
|
- { path: ^/, roles: ROLE_ADMIN }
|
||||||
|
|
||||||
when@test:
|
when@test:
|
||||||
security:
|
security:
|
||||||
|
@ -29,12 +29,27 @@ global:
|
|||||||
source: env/.env
|
source: env/.env
|
||||||
type: text
|
type: text
|
||||||
required: false
|
required: false
|
||||||
|
NINEAPACHE_LETSENCRYPT:
|
||||||
|
id: NINEAPACHE_LETSENCRYPT
|
||||||
|
label: Activer certificat Letsencrypt
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: false
|
||||||
|
|
||||||
|
|
||||||
authentification:
|
authentification:
|
||||||
id: authentification
|
id: authentification
|
||||||
label: Authentification
|
label: Authentification
|
||||||
style: col-md-12
|
style: col-md-6
|
||||||
vars:
|
vars:
|
||||||
|
MASTERIDENTITY:
|
||||||
|
id: MASTERIDENTITY
|
||||||
|
label: Maitre Identité
|
||||||
|
source: env/.env
|
||||||
|
type: choice
|
||||||
|
choices: "SQL,SSO"
|
||||||
|
required: true
|
||||||
|
master: masteridentity
|
||||||
MODE_AUTH:
|
MODE_AUTH:
|
||||||
id: MODE_AUTH
|
id: MODE_AUTH
|
||||||
label: Mode d'Authentification
|
label: Mode d'Authentification
|
||||||
@ -57,26 +72,124 @@ authentification:
|
|||||||
source: env/.env
|
source: env/.env
|
||||||
type: string
|
type: string
|
||||||
required: true
|
required: true
|
||||||
slave: modeauth=CAS
|
slave: modeauth=CAS&&keycloakactive=0
|
||||||
CAS_PORT:
|
CAS_PORT:
|
||||||
id: CAS_PORT
|
id: CAS_PORT
|
||||||
label: Port du serveur CAS
|
label: Port du serveur CAS
|
||||||
source: env/.env
|
source: env/.env
|
||||||
type: string
|
type: string
|
||||||
required: true
|
required: true
|
||||||
slave: modeauth=CAS
|
slave: modeauth=CAS&&keycloakactive=0
|
||||||
CAS_PATH:
|
CAS_PATH:
|
||||||
id: CAS_PATH
|
id: CAS_PATH
|
||||||
label: Path du serveur CAS
|
label: Path du serveur CAS
|
||||||
source: env/.env
|
source: env/.env
|
||||||
type: string
|
type: string
|
||||||
required: true
|
required: true
|
||||||
slave: modeauth=CAS
|
slave: modeauth=CAS&&keycloakactive=0
|
||||||
|
CAS_URL:
|
||||||
|
id: CAS_URL
|
||||||
|
label: Url du serveur CAS
|
||||||
|
source: env/.env
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
slave: modeauth=CAS&&keycloakactive=0
|
||||||
|
CAS_USERNAME:
|
||||||
|
id: CAS_USERNAME
|
||||||
|
label: Attribut SSO Username
|
||||||
|
source: env/.env
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
slave: modeauth=CAS&&keycloakactive=0
|
||||||
|
CAS_MAIL:
|
||||||
|
id: CAS_MAIL
|
||||||
|
label: Attribut SSO Email
|
||||||
|
source: env/.env
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
slave: modeauth=CAS&&keycloakactive=0
|
||||||
|
CAS_LASTNAME:
|
||||||
|
id: CAS_LASTNAME
|
||||||
|
label: Attribut SSO Lastname
|
||||||
|
source: env/.env
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
slave: modeauth=CAS&&keycloakactive=0
|
||||||
|
CAS_FIRSTNAME:
|
||||||
|
id: CAS_FIRSTNAME
|
||||||
|
label: Attribut SSO Firstname
|
||||||
|
source: env/.env
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
slave: modeauth=CAS&&keycloakactive=0
|
||||||
|
|
||||||
|
mariadb:
|
||||||
|
id: mariadb
|
||||||
|
label: MariaDB
|
||||||
|
style: col-md-6
|
||||||
|
vars:
|
||||||
|
MARIADB_LOCAL:
|
||||||
|
id: MARIADB_LOCAL
|
||||||
|
label: MariaDB Local
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
master: mariadblocal
|
||||||
|
expert: true
|
||||||
|
MARIADB_HOST:
|
||||||
|
id: MARIADB_HOST
|
||||||
|
label: Host MariaDB
|
||||||
|
source: env/.env
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
slave: mariadblocal=0
|
||||||
|
MARIADB_PORT:
|
||||||
|
id: MARIADB_PORT
|
||||||
|
label: Port MariaDB
|
||||||
|
source: env/.env
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
slave: mariadblocal=0
|
||||||
|
MARIADB_USER:
|
||||||
|
id: MARIADB_USER
|
||||||
|
label: User MariaDB
|
||||||
|
source: env/.env
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
slave: mariadblocal=0
|
||||||
|
|
||||||
|
redis:
|
||||||
|
id: redis
|
||||||
|
label: Redis
|
||||||
|
style: col-md-6
|
||||||
|
vars:
|
||||||
|
REDIS_LOCAL:
|
||||||
|
id: REDIS_LOCAL
|
||||||
|
label: Redis Local
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
master: redislocal
|
||||||
|
expert: true
|
||||||
|
REDIS_HOST:
|
||||||
|
id: REDIS_HOST
|
||||||
|
label: Host Redis
|
||||||
|
source: env/.env
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
slave: redislocal=0
|
||||||
|
REDIS_PORT:
|
||||||
|
id: REDIS_PORT
|
||||||
|
label: Port Redis
|
||||||
|
source: env/.env
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
slave: redislocal=0
|
||||||
|
|
||||||
admin:
|
admin:
|
||||||
id: admin
|
id: admin
|
||||||
label: Compte Administrateur
|
label: Comptes Administrateur
|
||||||
style: col-md-12
|
style: col-md-6
|
||||||
vars:
|
vars:
|
||||||
ADMIN_USER:
|
ADMIN_USER:
|
||||||
id: ADMIN_USER
|
id: ADMIN_USER
|
||||||
@ -98,14 +211,421 @@ admin:
|
|||||||
type: text
|
type: text
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
# password:
|
password:
|
||||||
# CAS_PASSWORD=${ADMIN_PASSWORD}-keycloak
|
id: password
|
||||||
|
label: Passwords
|
||||||
|
style: col-md-6
|
||||||
|
vars:
|
||||||
|
ADMIN_PASSWORD:
|
||||||
|
id: ADMIN_PASSWORD
|
||||||
|
label: Password du compte administrateur
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
KEYCLOAK_PASSWORD:
|
||||||
|
id: KEYCLOAK_PASSWORD
|
||||||
|
label: Keycloak Password administrateur
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
expert: true
|
||||||
|
slave: keycloakactive=1
|
||||||
|
MARIADB_ROOT_PASSWORD:
|
||||||
|
id: MARIADB_ROOT_PASSWORD
|
||||||
|
label: Root BDD Password
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
expert: true
|
||||||
|
MARIADB_PASSWORD:
|
||||||
|
id: MARIADB_PASSWORD
|
||||||
|
label: User BDD Password
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
expert: true
|
||||||
|
LDAP_PASSWORD:
|
||||||
|
id: LDAP_PASSWORD
|
||||||
|
label: LDAP Writter User Password
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
expert: true
|
||||||
|
|
||||||
|
# Email
|
||||||
|
email:
|
||||||
|
id: email
|
||||||
|
label: Email
|
||||||
|
style: col-md-6
|
||||||
|
vars:
|
||||||
|
MAILER_DSN:
|
||||||
|
id: MAILER_DSN
|
||||||
|
label: Mailer DSN
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
FAKESMTP_ACTIVATE:
|
||||||
|
id: FAKESMTP_ACTIVATE
|
||||||
|
label: activer FakeSMTP
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
master: fakesmtpactivate
|
||||||
|
expert: true
|
||||||
|
FAKESMTP_LOCAL:
|
||||||
|
id: FAKESMTP_LOCAL
|
||||||
|
label: FakeSMTP local
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
slave: fakesmtpactivate=1
|
||||||
|
master: fakesmtplocal
|
||||||
|
expert: true
|
||||||
|
FAKESMTP_URL:
|
||||||
|
id: FAKESMTP_URL
|
||||||
|
label: Url du fakeSMTP distant
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: fakesmtplocal=0
|
||||||
|
expert: true
|
||||||
|
|
||||||
|
annuaire:
|
||||||
|
id: annuaire
|
||||||
|
label: Annuaire
|
||||||
|
style: col-md-12
|
||||||
|
vars:
|
||||||
|
OPENLDAP_ACTIVATE:
|
||||||
|
id: OPENLDAP_ACTIVATE
|
||||||
|
label: Activer OpenLDAP
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
master: openldapactivate
|
||||||
|
OPENLDAP_LOCAL:
|
||||||
|
id: OPENLDAP_LOCAL
|
||||||
|
label: OpenLDAP local
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
slave: openldapactivate=1
|
||||||
|
master: openldaplocal
|
||||||
|
expert: true
|
||||||
|
LDAP_BASEDN:
|
||||||
|
id: LDAP_BASEDN
|
||||||
|
label: Base DN
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_ADMIN_USERNAME:
|
||||||
|
id: LDAP_ADMIN_USERNAME
|
||||||
|
label: LDAP Writter User
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_USER:
|
||||||
|
id: LDAP_USER
|
||||||
|
label: LDAP DN Writter User
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_OUORGANISATION:
|
||||||
|
id: LDAP_OUORGANISATION
|
||||||
|
label: LDAP OU Organisation
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_OUNIVEAU01:
|
||||||
|
id: LDAP_OUNIVEAU01
|
||||||
|
label: LDAP OU Niveau 01
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_OUNIVEAU02:
|
||||||
|
id: LDAP_OUNIVEAU02
|
||||||
|
label: LDAP OU Niveau 02
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_OUNIVEAU03:
|
||||||
|
id: LDAP_OUNIVEAU03
|
||||||
|
label: LDAP OU Niveau 03
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_OUNIVEAU04:
|
||||||
|
id: LDAP_OUNIVEAU04
|
||||||
|
label: LDAP OU Niveau 04
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_OUGROUP:
|
||||||
|
id: LDAP_OUGROUP
|
||||||
|
label: LDAP OU Groupe
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_BASEORGANISATION:
|
||||||
|
id: LDAP_BASEORGANISATION
|
||||||
|
label: LDAP Base Organisation
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_BASENIVEAU01:
|
||||||
|
id: LDAP_BASENIVEAU01
|
||||||
|
label: LDAP Base Niveau 01
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_BASENIVEAU02:
|
||||||
|
id: LDAP_BASENIVEAU02
|
||||||
|
label: LDAP Base Niveau 02
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_BASENIVEAU03:
|
||||||
|
id: LDAP_BASENIVEAU03
|
||||||
|
label: LDAP Base Niveau 03
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_BASENIVEAU04:
|
||||||
|
id: LDAP_BASENIVEAU04
|
||||||
|
label: LDAP Base Niveau 04
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_BASEUSER:
|
||||||
|
id: LDAP_BASEUSER
|
||||||
|
label: LDAP Base User
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_BASEGROUP:
|
||||||
|
id: LDAP_BASEGROUP
|
||||||
|
label: LDAP Base Group
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_USERNAME:
|
||||||
|
id: LDAP_USERNAME
|
||||||
|
label: Attribut username
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_FIRSTNAME:
|
||||||
|
id: LDAP_FIRSTNAME
|
||||||
|
label: Attribut firstname
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_LASTNAME:
|
||||||
|
id: LDAP_LASTNAME
|
||||||
|
label: Attribut lastname
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_DISPLAYNAME:
|
||||||
|
id: LDAP_DISPLAYNAME
|
||||||
|
label: Attribut displayname
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_EMAIL:
|
||||||
|
id: LDAP_EMAIL
|
||||||
|
label: Attribut email
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_MEMBEROF:
|
||||||
|
id: LDAP_MEMBEROF
|
||||||
|
label: Attribut memberof
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_GROUP_GID:
|
||||||
|
id: LDAP_GROUP_GID
|
||||||
|
label: Attribut gidnumber
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_GROUP_NAME:
|
||||||
|
id: LDAP_GROUP_NAME
|
||||||
|
label: Attribut cn
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_GROUP_MEMBER:
|
||||||
|
id: LDAP_GROUP_MEMBER
|
||||||
|
label: Attribut memberUid
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_GROUP_MEMBERISDN:
|
||||||
|
id: LDAP_GROUP_MEMBERISDN
|
||||||
|
label: Attribut member is a DN
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_LOGIN_FILTER:
|
||||||
|
id: LDAP_LOGIN_FILTER
|
||||||
|
label: Filtre login
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_USER_FILTER:
|
||||||
|
id: LDAP_USER_FILTER
|
||||||
|
label: Filtre utilisateur
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
LDAP_GROUP_FILTER:
|
||||||
|
id: LDAP_GROUP_FILTER
|
||||||
|
label: Filtre groupe
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldaplocal=0
|
||||||
|
|
||||||
|
portail:
|
||||||
|
id: portail
|
||||||
|
label: Portail Ninegate
|
||||||
|
style: col-md-12
|
||||||
|
vars:
|
||||||
|
NINEGATE_ACTIVATE:
|
||||||
|
id: NINEGATE_ACTIVATE
|
||||||
|
label: Activer Portail Ninegate
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
master: ninegateactivate
|
||||||
|
NINEGATE_LOCAL:
|
||||||
|
id: NINEGATE_LOCAL
|
||||||
|
label: Ninegate local
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
slave: ninegateactivate=1
|
||||||
|
master: ninegatelocal
|
||||||
|
expert: true
|
||||||
|
MODEREGISTRATION:
|
||||||
|
id: MODEREGISTRATION
|
||||||
|
label: Mode de Registration
|
||||||
|
source: env/.env
|
||||||
|
type: choice
|
||||||
|
choices: "none,byadmin,byuser"
|
||||||
|
required: true
|
||||||
|
slave: ninegatelocal=1&&masteridentity=SQL
|
||||||
|
NINEGATE_URL:
|
||||||
|
id: NINEGATE_URL
|
||||||
|
label: Url du Ninegate distant
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: ninegatelocal=0
|
||||||
|
expert: true
|
||||||
|
LDAP_SYNC:
|
||||||
|
id: LDAP_SYNC
|
||||||
|
label: Activer la synchronisation Annuaire
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
master: ldapsync
|
||||||
|
slave: openldapactivate=1
|
||||||
|
LDAP_TEMPLATE:
|
||||||
|
id: LDAP_TEMPLATE
|
||||||
|
label: Modele Annuaire
|
||||||
|
source: env/.env
|
||||||
|
type: choice
|
||||||
|
choices: "open,scribe"
|
||||||
|
required: true
|
||||||
|
master: ldaptemplate
|
||||||
|
slave: ldapsync=1&&openldaplocal=0
|
||||||
|
SCRIBE_GROUP:
|
||||||
|
id: SCRIBE_GROUP
|
||||||
|
label: Synchroniser les groupes SCRIBE
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
slave: LDAP_TEMPLATE=scribe
|
||||||
|
SCRIBE_MASTER:
|
||||||
|
id: SCRIBE_MASTER
|
||||||
|
label: Synchroniser les professeurs SCRIBE comme Master
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
slave: ldaptemplate=scribe
|
||||||
|
OPENLDAPREQNIVEAU01:
|
||||||
|
id: OPENLDAPREQNIVEAU01
|
||||||
|
label: Requete LDAP des Niveau 01
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: ldaptemplate=open
|
||||||
|
OPENLDAPSYNCHROGROUP:
|
||||||
|
id: OPENLDAPSYNCHROGROUP
|
||||||
|
label: Synchroniser les groupes
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
master: openldapsynchrogroup
|
||||||
|
slave: ldaptemplate=open
|
||||||
|
OPENLDAPREQGROUP:
|
||||||
|
id: OPENLDAPREQGROUP
|
||||||
|
label: Requete LDAP des Groupes
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: openldapsynchrogroup=1
|
||||||
|
|
||||||
applications:
|
applications:
|
||||||
id: applications
|
id: applications
|
||||||
label: Applications
|
label: Applications
|
||||||
style: col-md-12
|
style: col-md-12
|
||||||
vars:
|
vars:
|
||||||
|
DOKUWIKI_ACTIVATE:
|
||||||
|
id: DOKUWIKI_ACTIVATE
|
||||||
|
label: Activer Dokuwiki
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
master: dokuwikiactivate
|
||||||
|
KEEWEB_ACTIVATE:
|
||||||
|
id: KEEWEB_ACTIVATE
|
||||||
|
label: Activer Keeweb
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
master: keewebactivate
|
||||||
KOMGA_ACTIVATE:
|
KOMGA_ACTIVATE:
|
||||||
id: KOMGA_ACTIVATE
|
id: KOMGA_ACTIVATE
|
||||||
label: Activer Komga
|
label: Activer Komga
|
||||||
@ -113,6 +633,13 @@ applications:
|
|||||||
type: bool
|
type: bool
|
||||||
required: true
|
required: true
|
||||||
master: komgaactivate
|
master: komgaactivate
|
||||||
|
NEXTCLOUD_ACTIVATE:
|
||||||
|
id: NEXTCLOUD_ACTIVATE
|
||||||
|
label: Activer Nextcloud
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
master: nextcloudactivate
|
||||||
NINEBOARD_ACTIVATE:
|
NINEBOARD_ACTIVATE:
|
||||||
id: NINEBOARD_ACTIVATE
|
id: NINEBOARD_ACTIVATE
|
||||||
label: Activer Nineboard
|
label: Activer Nineboard
|
||||||
@ -134,6 +661,97 @@ applications:
|
|||||||
type: bool
|
type: bool
|
||||||
required: true
|
required: true
|
||||||
master: ninefolioactivate
|
master: ninefolioactivate
|
||||||
|
NINESCHOOL_ACTIVATE:
|
||||||
|
id: NINESCHOOL_ACTIVATE
|
||||||
|
label: Activer Nineschool
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
master: nineschoolactivate
|
||||||
|
PIWIGO_ACTIVATE:
|
||||||
|
id: PIWIGO_ACTIVATE
|
||||||
|
label: Activer Piwigo
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
master: piwigoactivate
|
||||||
|
WORDPRESS_ACTIVATE:
|
||||||
|
id: WORDPRESS_ACTIVATE
|
||||||
|
label: Activer Wordpress
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
master: wordpressactivate
|
||||||
|
|
||||||
|
applicationadmins:
|
||||||
|
id: applicationadmins
|
||||||
|
label: Applications Administrateur
|
||||||
|
style: col-md-12
|
||||||
|
vars:
|
||||||
|
NINECONFIG_ACTIVATE:
|
||||||
|
id: NINECONFIG_ACTIVATE
|
||||||
|
label: Activer Nineconfig
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
ADMINER_ACTIVATE:
|
||||||
|
id: ADMINER_ACTIVATE
|
||||||
|
label: Activer Adminer
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
master: admineractivate
|
||||||
|
PHPLDAPADMIN_ACTIVATE:
|
||||||
|
id: PHPLDAPADMIN_ACTIVATE
|
||||||
|
label: Activer PhpLDAPAdmin
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
master: phpldapadminactivate
|
||||||
|
|
||||||
|
dokuwiki:
|
||||||
|
id: dokuwiki
|
||||||
|
label: Dokuwiki
|
||||||
|
style: col-md-6
|
||||||
|
vars:
|
||||||
|
DOKUWIKI_LOCAL:
|
||||||
|
id: DOKUWIKI_LOCAL
|
||||||
|
label: Dokuwiki local
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
slave: dokuwikiactivate=1
|
||||||
|
master: dokuwikilocal
|
||||||
|
expert: true
|
||||||
|
DOKUWIKI_URL:
|
||||||
|
id: DOKUWIKI_URL
|
||||||
|
label: Url du Dokuwiki distant
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: dokuwikilocal=0
|
||||||
|
|
||||||
|
keeweb:
|
||||||
|
id: keeweb
|
||||||
|
label: Keeweb
|
||||||
|
style: col-md-6
|
||||||
|
vars:
|
||||||
|
KEEWEB_LOCAL:
|
||||||
|
id: KEEWEB_LOCAL
|
||||||
|
label: Keeweb local
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
slave: keewebactivate=1
|
||||||
|
master: keeweblocal
|
||||||
|
expert: true
|
||||||
|
KEEWEB_URL:
|
||||||
|
id: KEEWEB_URL
|
||||||
|
label: Url du Keeweb distant
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: keeweblocal=0
|
||||||
|
|
||||||
komga:
|
komga:
|
||||||
id: komga
|
id: komga
|
||||||
@ -148,6 +766,7 @@ komga:
|
|||||||
required: true
|
required: true
|
||||||
slave: komgaactivate=1
|
slave: komgaactivate=1
|
||||||
master: komgalocal
|
master: komgalocal
|
||||||
|
expert: true
|
||||||
KOMGA_URL:
|
KOMGA_URL:
|
||||||
id: KOMGA_URL
|
id: KOMGA_URL
|
||||||
label: Url du Komga distant
|
label: Url du Komga distant
|
||||||
@ -156,6 +775,28 @@ komga:
|
|||||||
required: true
|
required: true
|
||||||
slave: komgalocal=0
|
slave: komgalocal=0
|
||||||
|
|
||||||
|
nextcloud:
|
||||||
|
id: nextcloud
|
||||||
|
label: Nextcloud
|
||||||
|
style: col-md-6
|
||||||
|
vars:
|
||||||
|
NEXTCLOUD_LOCAL:
|
||||||
|
id: NEXTCLOUD_LOCAL
|
||||||
|
label: Nextcloud local
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
slave: nextcloudactivate=1
|
||||||
|
master: nextcloudlocal
|
||||||
|
expert: true
|
||||||
|
NEXTCLOUD_URL:
|
||||||
|
id: NEXTCLOUD_URL
|
||||||
|
label: Url du Nextcloud distant
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: nextcloudlocal=0
|
||||||
|
|
||||||
nineboard:
|
nineboard:
|
||||||
id: nineboard
|
id: nineboard
|
||||||
label: Nineboard
|
label: Nineboard
|
||||||
@ -169,6 +810,7 @@ nineboard:
|
|||||||
required: true
|
required: true
|
||||||
slave: nineboardactivate=1
|
slave: nineboardactivate=1
|
||||||
master: nineboardlocal
|
master: nineboardlocal
|
||||||
|
expert: true
|
||||||
NINEBOARD_URL:
|
NINEBOARD_URL:
|
||||||
id: NINEBOARD_URL
|
id: NINEBOARD_URL
|
||||||
label: Url du Nineboard distant
|
label: Url du Nineboard distant
|
||||||
@ -190,6 +832,7 @@ ninecompta:
|
|||||||
required: true
|
required: true
|
||||||
slave: ninecomptaactivate=1
|
slave: ninecomptaactivate=1
|
||||||
master: ninecomptalocal
|
master: ninecomptalocal
|
||||||
|
expert: true
|
||||||
NINECOMPTA_URL:
|
NINECOMPTA_URL:
|
||||||
id: NINECOMPTA_URL
|
id: NINECOMPTA_URL
|
||||||
label: Url du Ninecompta distant
|
label: Url du Ninecompta distant
|
||||||
@ -211,6 +854,7 @@ ninefolio:
|
|||||||
required: true
|
required: true
|
||||||
slave: ninefolioactivate=1
|
slave: ninefolioactivate=1
|
||||||
master: ninefoliolocal
|
master: ninefoliolocal
|
||||||
|
expert: true
|
||||||
NINEFOLIO_URL:
|
NINEFOLIO_URL:
|
||||||
id: NINEFOLIO_URL
|
id: NINEFOLIO_URL
|
||||||
label: Url du Ninefolio distant
|
label: Url du Ninefolio distant
|
||||||
@ -218,3 +862,113 @@ ninefolio:
|
|||||||
type: text
|
type: text
|
||||||
required: true
|
required: true
|
||||||
slave: ninefoliolocal=0
|
slave: ninefoliolocal=0
|
||||||
|
|
||||||
|
nineschool:
|
||||||
|
id: nineschool
|
||||||
|
label: Nineschool
|
||||||
|
style: col-md-6
|
||||||
|
vars:
|
||||||
|
NINESCHOOL_LOCAL:
|
||||||
|
id: NINESCHOOL_LOCAL
|
||||||
|
label: Nineschool local
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
slave: nineschoolactivate=1
|
||||||
|
master: nineschoollocal
|
||||||
|
expert: true
|
||||||
|
NINESCHOOL_URL:
|
||||||
|
id: NINESCHOOL_URL
|
||||||
|
label: Url du Nineschool distant
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: nineschoollocal=0
|
||||||
|
|
||||||
|
piwigo:
|
||||||
|
id: piwigo
|
||||||
|
label: Piwigo
|
||||||
|
style: col-md-6
|
||||||
|
vars:
|
||||||
|
PIWIGO_LOCAL:
|
||||||
|
id: PIWIGO_LOCAL
|
||||||
|
label: Piwigo local
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
slave: piwigoactivate=1
|
||||||
|
master: piwigolocal
|
||||||
|
expert: true
|
||||||
|
PIWIGO_URL:
|
||||||
|
id: PIWIGO_URL
|
||||||
|
label: Url du Piwigo distant
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: piwigolocal=0
|
||||||
|
|
||||||
|
wordpress:
|
||||||
|
id: wordpress
|
||||||
|
label: Wordpress
|
||||||
|
style: col-md-6
|
||||||
|
vars:
|
||||||
|
WORDPRESS_LOCAL:
|
||||||
|
id: WORDPRESS_LOCAL
|
||||||
|
label: Wordpress local
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
slave: wordpressactivate=1
|
||||||
|
master: wordpresslocal
|
||||||
|
expert: true
|
||||||
|
WORDPRESS_URL:
|
||||||
|
id: WORDPRESS_URL
|
||||||
|
label: Url du Wordpress distant
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: wordpresslocal=0
|
||||||
|
|
||||||
|
adminer:
|
||||||
|
id: adminer
|
||||||
|
label: Adminer
|
||||||
|
style: col-md-6
|
||||||
|
vars:
|
||||||
|
ADMINER_LOCAL:
|
||||||
|
id: ADMINER_LOCAL
|
||||||
|
label: Adminer local
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
slave: admineractivate=1
|
||||||
|
master: adminerlocal
|
||||||
|
expert: true
|
||||||
|
ADMINER_URL:
|
||||||
|
id: ADMINER_URL
|
||||||
|
label: Url du Adminer distant
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: adminerlocal=0
|
||||||
|
|
||||||
|
phpldapadmin:
|
||||||
|
id: phpldapadmin
|
||||||
|
label: phpLDAPAdmin
|
||||||
|
style: col-md-6
|
||||||
|
vars:
|
||||||
|
PHPLDAPADMIN_LOCAL:
|
||||||
|
id: PHPLDAPADMIN_LOCAL
|
||||||
|
label: phpLDAPAdmin local
|
||||||
|
source: env/.env
|
||||||
|
type: bool
|
||||||
|
required: true
|
||||||
|
slave: phpldapadminactivate=1
|
||||||
|
master: phpldapadminlocal
|
||||||
|
expert: true
|
||||||
|
PHPLDAPADMIN_URL:
|
||||||
|
id: PHPLDAPADMIN_URL
|
||||||
|
label: Url du phpLDAPAdmin distant
|
||||||
|
source: env/.env
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
slave: phpldapadminlocal=0
|
||||||
|
6
misc/sample/dicos/volumes.yml
Normal file
6
misc/sample/dicos/volumes.yml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
docker:
|
||||||
|
id: docker
|
||||||
|
source: misc/docker
|
||||||
|
misc:
|
||||||
|
id: misc
|
||||||
|
source: misc
|
23
misc/sample/env/.env
vendored
23
misc/sample/env/.env
vendored
@ -22,7 +22,7 @@ ADMIN_PASSWORD=changeme
|
|||||||
ADMIN_EMAIL=admin@noreply.fr
|
ADMIN_EMAIL=admin@noreply.fr
|
||||||
|
|
||||||
# MASTERIDENTITY
|
# MASTERIDENTITY
|
||||||
# SQL or SSO or (to do LDAP)
|
# SQL or SSO or LDAP
|
||||||
MASTERIDENTITY=SQL
|
MASTERIDENTITY=SQL
|
||||||
|
|
||||||
# AUTHENTIFICATION
|
# AUTHENTIFICATION
|
||||||
@ -46,8 +46,9 @@ NINEAPACHE_LETSENCRYPT=0
|
|||||||
# FAKESMTP
|
# FAKESMTP
|
||||||
# fake-smtp server
|
# fake-smtp server
|
||||||
FAKESMTP_SERVICE_NAME=fakesmtp
|
FAKESMTP_SERVICE_NAME=fakesmtp
|
||||||
|
FAKESMTP_ACTIVATE=0
|
||||||
FAKESMTP_LOCAL=0
|
FAKESMTP_LOCAL=0
|
||||||
FAKESMTP_ACTIVATE=1
|
FAKESMTP_URL=${PROTOCOLE}://${WEB_URL}/fakesmtp
|
||||||
|
|
||||||
# MTA
|
# MTA
|
||||||
# passerelle courriel
|
# passerelle courriel
|
||||||
@ -171,6 +172,12 @@ DOKUWIKI_ACTIVATE=0
|
|||||||
DOKUWIKI_LOCAL=1
|
DOKUWIKI_LOCAL=1
|
||||||
DOKUWIKI_URL=${PROTOCOLE}://${WEB_URL}/dokuwiki
|
DOKUWIKI_URL=${PROTOCOLE}://${WEB_URL}/dokuwiki
|
||||||
|
|
||||||
|
# KEEWEB
|
||||||
|
KEEWEB_SERVICE_NAME=keeweb
|
||||||
|
KEEWEB_ACTIVATE=0
|
||||||
|
KEEWEB_LOCAL=1
|
||||||
|
KEEWEB_URL=${PROTOCOLE}://${WEB_URL}/keeweb
|
||||||
|
|
||||||
# KOMGA
|
# KOMGA
|
||||||
KOMGA_SERVICE_NAME=komga
|
KOMGA_SERVICE_NAME=komga
|
||||||
KOMGA_ACTIVATE=0
|
KOMGA_ACTIVATE=0
|
||||||
@ -214,12 +221,6 @@ NINESCHOOL_ACTIVATE=1
|
|||||||
NINESCHOOL_LOCAL=1
|
NINESCHOOL_LOCAL=1
|
||||||
NINESCHOOL_URL=${PROTOCOLE}://${WEB_URL}/nineschool
|
NINESCHOOL_URL=${PROTOCOLE}://${WEB_URL}/nineschool
|
||||||
|
|
||||||
# NINESKELETOR
|
|
||||||
NINESKELETOR_SERVICE_NAME=nineskeletor
|
|
||||||
NINESKELETOR_ACTIVATE=0
|
|
||||||
NINESKELETOR_LOCAL=1
|
|
||||||
NINESKELETOR_URL=${PROTOCOLE}://${WEB_URL}/nineskeletor
|
|
||||||
|
|
||||||
# PIWIGO
|
# PIWIGO
|
||||||
PIWIGO_SERVICE_NAME=piwigo
|
PIWIGO_SERVICE_NAME=piwigo
|
||||||
PIWIGO_ACTIVATE=0
|
PIWIGO_ACTIVATE=0
|
||||||
@ -232,6 +233,12 @@ WORDPRESS_ACTIVATE=1
|
|||||||
WORDPRESS_LOCAL=1
|
WORDPRESS_LOCAL=1
|
||||||
WORDPRESS_URL=${PROTOCOLE}://${WEB_URL}/wordpress
|
WORDPRESS_URL=${PROTOCOLE}://${WEB_URL}/wordpress
|
||||||
|
|
||||||
|
# NINECONFIG
|
||||||
|
NINECONFIG_SERVICE_NAME=nineconfig
|
||||||
|
NINECONFIG_ACTIVATE=1
|
||||||
|
NINECONFIG_LOCAL=1
|
||||||
|
NINECONFIG_URL="${PROTOCOLE}://${WEB_URL}/nineconfig"
|
||||||
|
|
||||||
# ADMINER
|
# ADMINER
|
||||||
ADMINER_SERVICE_NAME=adminer
|
ADMINER_SERVICE_NAME=adminer
|
||||||
ADMINER_ACTIVATE=1
|
ADMINER_ACTIVATE=1
|
||||||
|
1
misc/sample/env/.env.local
vendored
1
misc/sample/env/.env.local
vendored
@ -1,4 +1,3 @@
|
|||||||
APP_ENV=DEV
|
|
||||||
KOMGA_ACTIVATE=1
|
KOMGA_ACTIVATE=1
|
||||||
NINECOMPTA_ACTIVATE=1
|
NINECOMPTA_ACTIVATE=1
|
||||||
NINEFOLIO_ACTIVATE=1
|
NINEFOLIO_ACTIVATE=1
|
||||||
|
43
src/Command/UnusedEnvVarsCommand.php
Normal file
43
src/Command/UnusedEnvVarsCommand.php
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Command;
|
||||||
|
|
||||||
|
use App\Service\DicosService;
|
||||||
|
use Symfony\Component\Console\Attribute\AsCommand;
|
||||||
|
use Symfony\Component\Console\Command\Command;
|
||||||
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||||
|
|
||||||
|
#[AsCommand(
|
||||||
|
name: 'app:unusedvars',
|
||||||
|
description: 'Liste les variables .env/.local non référencées dans le dico',
|
||||||
|
)]
|
||||||
|
class UnusedEnvVarsCommand extends Command
|
||||||
|
{
|
||||||
|
private DicosService $dicosService;
|
||||||
|
|
||||||
|
public function __construct(DicosService $dicosService)
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
$this->dicosService = $dicosService;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function execute(InputInterface $input, OutputInterface $output): int
|
||||||
|
{
|
||||||
|
$io = new SymfonyStyle($input, $output);
|
||||||
|
|
||||||
|
$unusedKeys = $this->dicosService->findUnusedEnvKeys();
|
||||||
|
|
||||||
|
if (empty($unusedKeys)) {
|
||||||
|
$io->success('✅ Toutes les variables .env/.local sont bien référencées dans le dico.');
|
||||||
|
} else {
|
||||||
|
$io->title('🔍 Variables .env/.local non référencées dans le dico :');
|
||||||
|
foreach ($unusedKeys as $key) {
|
||||||
|
$io->writeln(" - <fg=yellow>$key</>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Command::SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
@ -4,18 +4,22 @@ namespace App\Controller;
|
|||||||
|
|
||||||
use App\Form\DicosType;
|
use App\Form\DicosType;
|
||||||
use App\Service\DicosService;
|
use App\Service\DicosService;
|
||||||
|
use App\Service\VolumeService;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
use Symfony\Component\Routing\Attribute\Route;
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
|
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
|
||||||
|
|
||||||
class HomeController extends AbstractController
|
class HomeController extends AbstractController
|
||||||
{
|
{
|
||||||
private DicosService $dicosService;
|
private DicosService $dicosService;
|
||||||
|
private VolumeService $volumeService;
|
||||||
|
|
||||||
public function __construct(DicosService $dicosService)
|
public function __construct(DicosService $dicosService, VolumeService $volumeService)
|
||||||
{
|
{
|
||||||
$this->dicosService = $dicosService;
|
$this->dicosService = $dicosService;
|
||||||
|
$this->volumeService = $volumeService;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[Route('/', name: 'app_home')]
|
#[Route('/', name: 'app_home')]
|
||||||
@ -38,6 +42,33 @@ class HomeController extends AbstractController
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[Route('/volume', name: 'app_volume')]
|
||||||
|
public function volume(Request $request)
|
||||||
|
{
|
||||||
|
// Récupération de la liste des volumes possibles
|
||||||
|
$volumes = $this->volumeService->load();
|
||||||
|
|
||||||
|
// Query
|
||||||
|
$volume = $request->query->get('volume');
|
||||||
|
$folder = $request->query->get('folder');
|
||||||
|
|
||||||
|
// Controler que le volume est autorisé
|
||||||
|
if ($volume && !array_key_exists($volume, $volumes)) {
|
||||||
|
throw new AccessDeniedException('Accès non autorisé.');
|
||||||
|
} elseif ($volume) {
|
||||||
|
$ls = $this->volumeService->ls($volumes[$volume]['source'], $folder);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->render('home/volume.html.twig', [
|
||||||
|
'usemenu' => true,
|
||||||
|
'usesidebar' => false,
|
||||||
|
'maxwidth' => 1500,
|
||||||
|
'volumes' => $volumes,
|
||||||
|
'volume' => $volume,
|
||||||
|
'folder' => $folder,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
#[Route('/admin', name: 'app_admin')]
|
#[Route('/admin', name: 'app_admin')]
|
||||||
public function admin(): Response
|
public function admin(): Response
|
||||||
{
|
{
|
||||||
|
@ -16,7 +16,7 @@ class DicosType extends AbstractType
|
|||||||
{
|
{
|
||||||
$builder
|
$builder
|
||||||
->add('submit', SubmitType::class, [
|
->add('submit', SubmitType::class, [
|
||||||
'label' => 'Valider',
|
'label' => 'Enregistrer',
|
||||||
'attr' => ['class' => 'btn btn-success no-print'],
|
'attr' => ['class' => 'btn btn-success no-print'],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@ -67,6 +67,15 @@ class DicosType extends AbstractType
|
|||||||
$options['attr']['class'] .= 'slave ';
|
$options['attr']['class'] .= 'slave ';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (array_key_exists('expert', $var)) {
|
||||||
|
$options['attr']['data-expert'] = $var['expert'];
|
||||||
|
$options['attr']['class'] .= 'expert ';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (array_key_exists('default', $var)) {
|
||||||
|
$options['attr']['data-default'] = $var['default'];
|
||||||
|
}
|
||||||
|
|
||||||
$builder->add($var['id'], $type, $options);
|
$builder->add($var['id'], $type, $options);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -96,7 +96,6 @@ class DicosService
|
|||||||
foreach ($data['dicos'] as $section) {
|
foreach ($data['dicos'] as $section) {
|
||||||
foreach ($section['vars'] as $var) {
|
foreach ($section['vars'] as $var) {
|
||||||
if ($var['default'] != $values[$var['id']]) {
|
if ($var['default'] != $values[$var['id']]) {
|
||||||
dump($values[$var['id']]);
|
|
||||||
file_put_contents($this->routeSources.'/'.$var['source'].'.local', $var['id'].'='.$this->formatEnvValue($values[$var['id']]).PHP_EOL, FILE_APPEND);
|
file_put_contents($this->routeSources.'/'.$var['source'].'.local', $var['id'].'='.$this->formatEnvValue($values[$var['id']]).PHP_EOL, FILE_APPEND);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -142,4 +141,44 @@ class DicosService
|
|||||||
|
|
||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function findUnusedEnvKeys(): array
|
||||||
|
{
|
||||||
|
$allDeclaredKeys = [];
|
||||||
|
|
||||||
|
// Récupère toutes les clés de ton dico
|
||||||
|
$dicos = Yaml::parseFile($this->routeDicos.'/dicos.yml');
|
||||||
|
foreach ($dicos as $section) {
|
||||||
|
foreach ($section['vars'] as $var) {
|
||||||
|
$allDeclaredKeys[] = $var['id'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// On récupère toutes les sources mentionnées
|
||||||
|
$sources = [];
|
||||||
|
foreach ($dicos as $section) {
|
||||||
|
foreach ($section['vars'] as $var) {
|
||||||
|
if (!in_array($var['source'], $sources)) {
|
||||||
|
$sources[] = $var['source'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Charger toutes les variables depuis les sources (.env et .env.local)
|
||||||
|
$allEnvKeys = [];
|
||||||
|
foreach ($sources as $source) {
|
||||||
|
$env = $this->parseDotEnvFile($this->routeSources.'/'.$source);
|
||||||
|
$envLocal = $this->parseDotEnvFile($this->routeSources.'/'.$source.'.local');
|
||||||
|
|
||||||
|
$allEnvKeys = array_merge($allEnvKeys, array_keys($env), array_keys($envLocal));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Supprime les doublons
|
||||||
|
$allEnvKeys = array_unique($allEnvKeys);
|
||||||
|
|
||||||
|
// Différence entre variables trouvées et déclarées
|
||||||
|
$unused = array_diff($allEnvKeys, $allDeclaredKeys);
|
||||||
|
|
||||||
|
return array_values($unused);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
52
src/Service/VolumeService.php
Normal file
52
src/Service/VolumeService.php
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Service;
|
||||||
|
|
||||||
|
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
|
||||||
|
use Symfony\Component\Finder\Finder;
|
||||||
|
use Symfony\Component\Yaml\Yaml;
|
||||||
|
|
||||||
|
class VolumeService
|
||||||
|
{
|
||||||
|
private string $routeDicos;
|
||||||
|
private string $routeProject;
|
||||||
|
|
||||||
|
public function __construct(ParameterBagInterface $params)
|
||||||
|
{
|
||||||
|
$this->routeDicos = $params->get('routeDicos');
|
||||||
|
$this->routeProject = $params->get('kernel.project_dir');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function load(): array
|
||||||
|
{
|
||||||
|
$path = $this->routeDicos.'/volumes.yml';
|
||||||
|
|
||||||
|
// On s'assure de disposer du dicos
|
||||||
|
if (!file_exists($path)) {
|
||||||
|
throw new \RuntimeException("Le fichier $path n'existe pas.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parser le dicos
|
||||||
|
$data = Yaml::parseFile($path);
|
||||||
|
|
||||||
|
return $data ?? [];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function ls(string $volume, ?string $folder): array
|
||||||
|
{
|
||||||
|
$finder = new Finder();
|
||||||
|
$finder->depth('== 0')->in($this->routeProject.'/'.$volume.($folder ? '/'.$folder : ''));
|
||||||
|
|
||||||
|
$ls = [];
|
||||||
|
foreach ($finder as $file) {
|
||||||
|
array_push($ls, [
|
||||||
|
'basename' => $file->getBasename(),
|
||||||
|
'realpath' => $file->getRealPath(),
|
||||||
|
'type' => $file->getType(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
dump($ls);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
@ -4,6 +4,7 @@
|
|||||||
<style>
|
<style>
|
||||||
.card-body div {
|
.card-body div {
|
||||||
display:flex;
|
display:flex;
|
||||||
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-body div label {
|
.card-body div label {
|
||||||
@ -16,7 +17,15 @@
|
|||||||
|
|
||||||
|
|
||||||
{{ form_start(form) }}
|
{{ form_start(form) }}
|
||||||
{{ form_widget(form.submit) }}
|
<div class="d-flex justify-content-between align-items-center mb-3">
|
||||||
|
<div>
|
||||||
|
{{ form_widget(form.submit) }}
|
||||||
|
</div>
|
||||||
|
<div class="form-check form-switch">
|
||||||
|
<input class="form-check-input" type="checkbox" id="expertSwitch">
|
||||||
|
<label class="form-check-label ms-2" for="expertSwitch">Mode Expert</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
{% for section in dicos %}
|
{% for section in dicos %}
|
||||||
@ -39,12 +48,19 @@
|
|||||||
|
|
||||||
{% block localscript %}
|
{% block localscript %}
|
||||||
<script>
|
<script>
|
||||||
|
let isExpert=false;
|
||||||
|
|
||||||
|
function toggleExpertMode(isExpertMode) {
|
||||||
|
localStorage.setItem('expertMode', isExpertMode ? '1' : '0');
|
||||||
|
isExpert=isExpertMode;
|
||||||
|
refreshHideShow();
|
||||||
|
}
|
||||||
|
|
||||||
function moveToSection() {
|
function moveToSection() {
|
||||||
$('[data-section]').each(function() {
|
$('[data-section]').each(function() {
|
||||||
inputLabel = $(this).parent();
|
inputLabel = $(this).parent();
|
||||||
section = $(this).data('section');
|
section = $(this).data('section');
|
||||||
inputLabel.appendTo('#'+section);
|
inputLabel.appendTo('#'+section);
|
||||||
console.log('Section trouvée:', section);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$('label.required').each(function () {
|
$('label.required').each(function () {
|
||||||
@ -55,6 +71,69 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function addResetButtons() {
|
||||||
|
$('input, select, textarea').each(function () {
|
||||||
|
const $input = $(this);
|
||||||
|
const defaultValue = $input.data('default');
|
||||||
|
|
||||||
|
// Créer le bouton seulement si une valeur par défaut existe
|
||||||
|
if (typeof defaultValue !== 'undefined') {
|
||||||
|
const $wrapper = $input.closest('div');
|
||||||
|
|
||||||
|
// Évite les doublons
|
||||||
|
if ($wrapper.find('.reset-btn').length === 0) {
|
||||||
|
const $resetBtn = $(`
|
||||||
|
<button type="button" class="btn btn-sm btn-secondary ms-2 reset-btn" title="Réinitialiser">
|
||||||
|
<i class="fas fa-rotate-left"></i>
|
||||||
|
</button>
|
||||||
|
`);
|
||||||
|
|
||||||
|
$resetBtn.on('click', function () {
|
||||||
|
if ($input.is(':checkbox')) {
|
||||||
|
$input.prop('checked', defaultValue == 1 || defaultValue === 'true');
|
||||||
|
} else {
|
||||||
|
$input.val(defaultValue).trigger('change');
|
||||||
|
}
|
||||||
|
updateResetButtonStyle($input, $resetBtn); // maj couleur après reset
|
||||||
|
});
|
||||||
|
|
||||||
|
$wrapper.append($resetBtn);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Appliquer couleur initiale
|
||||||
|
const $resetBtn = $wrapper.find('.reset-btn');
|
||||||
|
updateResetButtonStyle($input, $resetBtn);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateResetButtonStyle($input, $btn) {
|
||||||
|
const currentVal = $input.is(':checkbox') ? $input.is(':checked') : $input.val();
|
||||||
|
const defaultVal = $input.data('default');
|
||||||
|
let isChanged = false;
|
||||||
|
|
||||||
|
if ($input.is(':checkbox')) {
|
||||||
|
isChanged = (defaultVal == '1' || defaultVal === true || defaultVal === 'true') !== $input.is(':checked');
|
||||||
|
} else {
|
||||||
|
isChanged = currentVal != defaultVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isChanged) {
|
||||||
|
$btn.removeClass('btn-secondary').addClass('btn-success');
|
||||||
|
} else {
|
||||||
|
$btn.removeClass('btn-success').addClass('btn-secondary');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function watchInputsForResetState() {
|
||||||
|
$('input[data-default], select[data-default], textarea[data-default]').on('input change', function () {
|
||||||
|
console.log("here");
|
||||||
|
const $input = $(this);
|
||||||
|
const $btn = $input.closest('div').find('.reset-btn');
|
||||||
|
updateResetButtonStyle($input, $btn);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function cardHideShow() {
|
function cardHideShow() {
|
||||||
$('.card-body').each(function () {
|
$('.card-body').each(function () {
|
||||||
const $cardBody = $(this);
|
const $cardBody = $(this);
|
||||||
@ -68,49 +147,78 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function refreshHideShow() {
|
function refreshHideShow() {
|
||||||
$('.slave').each(function() {
|
const isExpert = localStorage.getItem('expertMode') === '1';
|
||||||
slave = $(this);
|
|
||||||
slaveId = slave.attr('id');
|
|
||||||
|
|
||||||
// Déterminer si le champs est required
|
// Afficher / Masquer les slaves
|
||||||
isrequired = $('label[for="' + slaveId + '"]').hasClass('required');
|
$('.slave').each(function () {
|
||||||
console.log(slaveId);
|
const $slave = $(this);
|
||||||
console.log(isrequired);
|
const slaveConditions = $slave.data('slave'); // ex: "foo=1&&bar=SQL"
|
||||||
|
const isExpertField = $slave.data('expert');
|
||||||
|
const $wrapper = $slave.closest('div');
|
||||||
|
let toShow = true;
|
||||||
|
|
||||||
// Rechercher son maitre
|
// 1. Évaluer les conditions de dépendance
|
||||||
masterArray = slave.data('slave').split("=");
|
if (slaveConditions) {
|
||||||
master = $('[data-master="'+masterArray[0]+'"]')
|
const conditions = slaveConditions.split('&&');
|
||||||
|
|
||||||
// Déterminer si le slave doit etre afficher
|
for (const cond of conditions) {
|
||||||
toshow=false;
|
const [masterKey, expectedValue] = cond.split('=');
|
||||||
if(master.is(':visible')&&master.val()===masterArray[1]) {
|
const $master = $('[data-master="' + masterKey + '"]');
|
||||||
toshow=true;
|
|
||||||
|
if (!($master.length && $master.is(':visible') && $master.val() == expectedValue)) {
|
||||||
|
toShow = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(toshow) {
|
// 2. Appliquer l'affichage
|
||||||
slave.parent().show();
|
if (toShow) {
|
||||||
}
|
$wrapper.show();
|
||||||
else {
|
} else {
|
||||||
slave.parent().hide();
|
$wrapper.hide();
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
cardHideShow();
|
// Afficher / Masquer Mode expert
|
||||||
|
$('[data-expert]').each(function () {
|
||||||
|
const $el = $(this);
|
||||||
|
const isExpertField = $el.data('expert');
|
||||||
|
const $wrapper = $el.closest('div');
|
||||||
|
|
||||||
|
if (isExpertField && !isExpert) {
|
||||||
|
$wrapper.hide();
|
||||||
|
} else {
|
||||||
|
$wrapper.show();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
cardHideShow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
|
isExpert = localStorage.getItem('expertMode') === '1';
|
||||||
|
$('#expertSwitch').prop('checked', isExpert);
|
||||||
|
toggleExpertMode(isExpert);
|
||||||
|
|
||||||
|
$('#expertSwitch').on('change', function() {
|
||||||
|
toggleExpertMode(this.checked);
|
||||||
|
});
|
||||||
|
|
||||||
$('.master').on('change', function () {
|
$('.master').on('change', function () {
|
||||||
console.log($(this).val());
|
|
||||||
refreshHideShow();
|
refreshHideShow();
|
||||||
});
|
});
|
||||||
|
|
||||||
moveToSection();
|
moveToSection();
|
||||||
|
addResetButtons();
|
||||||
|
watchInputsForResetState();
|
||||||
refreshHideShow();
|
refreshHideShow();
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
22
templates/home/volume.html.twig
Normal file
22
templates/home/volume.html.twig
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
|
{% block localstyle%}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block body %}
|
||||||
|
<div style="display:flex; flex-direction: column">
|
||||||
|
{% if volume is empty %}
|
||||||
|
{% for volume in volumes %}
|
||||||
|
<div>
|
||||||
|
<a href="{{path("app_volume",{volume:volume.id})}}">{{ volume.id }}</a>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% else %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block localscript %}
|
||||||
|
{% endblock %}
|
Reference in New Issue
Block a user