dockerisation
This commit is contained in:
parent
dfb8eb6236
commit
cda63eddba
51
.env
Normal file
51
.env
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# Symfony
|
||||||
|
APP_ENV=PROD
|
||||||
|
APP_SECRET=changemeinenvlocal
|
||||||
|
#TRUSTED_PROXIES=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
|
||||||
|
#TRUSTED_HOSTS='^(localhost|example\.com)$'
|
||||||
|
|
||||||
|
|
||||||
|
# Basic
|
||||||
|
APP_WEBURL=localhost:8000
|
||||||
|
APP_AUTH=OAUTH
|
||||||
|
APP_ALIAS=/
|
||||||
|
APP_NAME=Ninegitea
|
||||||
|
APP_CRON=1
|
||||||
|
APP_ADMINS='["admin"]'
|
||||||
|
|
||||||
|
|
||||||
|
# GITEA
|
||||||
|
GITEA_URL=https://forge.cadoles.com
|
||||||
|
|
||||||
|
# OAUTH
|
||||||
|
OAUTH_CLIENTID=b7797320-d5ca-45f8-9aa1-8aae8fb9b229
|
||||||
|
OAUTH_CLIENTSECRET=gto_aguhtokmdl7mmplfox3fgk5wnaoraaqgd4suj5yghmgxh4aszhtq
|
||||||
|
OAUTH_LOGINURL=https://forge.cadoles.com/login/oauth/authorize
|
||||||
|
OAUTH_LOGOUTURL=https://forge.cadoles.com/user/logout
|
||||||
|
OAUTH_TOKENURL=https://forge.cadoles.com/login/oauth/access_token
|
||||||
|
|
||||||
|
# BDD
|
||||||
|
DATABASE_HOST=mariadb
|
||||||
|
DATABASE_NAME=ninegitea
|
||||||
|
DATABASE_USER=user
|
||||||
|
DATABASE_PASSWORD=changeme
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# MAIL sendmail / smtp
|
||||||
|
MAILER_METHOD=sendmail
|
||||||
|
MAILER_URL=
|
||||||
|
MAILER_NOREPLY=noreply@noreply.fr
|
||||||
|
|
||||||
|
|
||||||
|
# WEBSOCKET
|
||||||
|
WSS_USE=0
|
||||||
|
WSS_PORT=5588
|
||||||
|
|
||||||
|
|
||||||
|
# Proxy
|
||||||
|
PROXY_USE=0
|
||||||
|
PROXY_HOST=
|
||||||
|
PROXY_PORT=
|
||||||
|
|
||||||
|
|
36
.gitignore
vendored
Normal file
36
.gitignore
vendored
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
|
||||||
|
###> symfony/framework-bundle ###
|
||||||
|
/.env.local
|
||||||
|
/.env.local.php
|
||||||
|
/.env.*.local
|
||||||
|
/docker-compose.override.yml
|
||||||
|
/config/secrets/prod/prod.decrypt.private.php
|
||||||
|
/public/bundles/
|
||||||
|
/var/
|
||||||
|
/vendor/
|
||||||
|
###< symfony/framework-bundle ###
|
||||||
|
|
||||||
|
###> symfony/phpunit-bridge ###
|
||||||
|
.phpunit
|
||||||
|
.phpunit.result.cache
|
||||||
|
/phpunit.xml
|
||||||
|
###< symfony/phpunit-bridge ###
|
||||||
|
|
||||||
|
###> symfony/webpack-encore-bundle ###
|
||||||
|
/node_modules/
|
||||||
|
npm-debug.log
|
||||||
|
yarn-error.log
|
||||||
|
###< symfony/webpack-encore-bundle ###
|
||||||
|
|
||||||
|
.key
|
||||||
|
/scripts/proxy.sh
|
||||||
|
/uploads
|
||||||
|
!/public/uploads/avatar
|
||||||
|
/public/uploads/avatar/*
|
||||||
|
!/public/uploads/avatar/admin.jpg
|
||||||
|
!/public/uploads/avatar/noavatar.jpg
|
||||||
|
!/public/uploads/avatar/system.jpg
|
||||||
|
!/public/uploads/avatar
|
||||||
|
/public/uploads/logo/*
|
||||||
|
!/public/uploads/logo/logo.png
|
||||||
|
/public/uploads/ckeditor
|
26
Makefile
26
Makefile
@ -1,26 +0,0 @@
|
|||||||
################################
|
|
||||||
# Makefile
|
|
||||||
################################
|
|
||||||
|
|
||||||
SOURCE=ninegitea
|
|
||||||
VERSION=1.0
|
|
||||||
EOLE_VERSION=2.7
|
|
||||||
EOLE_RELEASE=2.7.1
|
|
||||||
PKGAPPS=web
|
|
||||||
|
|
||||||
################################
|
|
||||||
# Début de zone à ne pas éditer
|
|
||||||
################################
|
|
||||||
|
|
||||||
include eole.mk
|
|
||||||
include apps.mk
|
|
||||||
|
|
||||||
################################
|
|
||||||
# Fin de zone à ne pas éditer
|
|
||||||
################################
|
|
||||||
|
|
||||||
# Makefile rules dedicated to application
|
|
||||||
# if exists
|
|
||||||
ifneq (, $(strip $(wildcard $(SOURCE).mk)))
|
|
||||||
include $(SOURCE).mk
|
|
||||||
endif
|
|
231
README.md
231
README.md
@ -1,231 +0,0 @@
|
|||||||
# Renommer le squelette
|
|
||||||
## Dupliquer nineskeletor et renommer en nineXXXX
|
|
||||||
Puis effectuer les changement suivants
|
|
||||||
- Renommer db/nineskeletor-create-0.sql en db/nineXXXX-create-0.sql
|
|
||||||
- Modifier db/nineXXXX-create-0.sql et changer le nom de la base de données en nineXXXX
|
|
||||||
- Renommer dicos/90_nineskeletor.xml en dicos/90_nineXXXX.xml
|
|
||||||
- Modifier dicos/nineXXXX-nineXXXX.xml et remplacer tout les nineskeletor en nineXXXX
|
|
||||||
- Renommer logrotate/nineskeletor en logrotate/nineXXXX
|
|
||||||
- Modifier logrotate/nineXXXX et remplacer tout les nineskeletor en nineXXXX
|
|
||||||
- Renommer postservice/90-nineskeletor en postservice/90-nineXXXX
|
|
||||||
- Modifier postservice/90-nineXXXX et remplacer tout les nineskeletor en nineXXXX
|
|
||||||
- Renommer pretemplate/25-nineskeletor en pretemplate/25-nineXXXX
|
|
||||||
- Modifier pretemplate/25-nineXXXX et remplacer tout les nineskeletor en nineXXXX
|
|
||||||
- Renommer src/nineskeletor-1.0 en src/nineXXXX-1.0
|
|
||||||
- Modifier src/nineXXXX-1.0/webpack.config.js et remplacer tout les nineskeletor en nineXXXX
|
|
||||||
- Renommer sso/filtres/nineskeletor.ini en sso/filtres/nineXXXX.ini
|
|
||||||
- Renommer sso/filtres/nineskeletor_apps.ini en sso/filtres/nineXXXX_apps.ini
|
|
||||||
- Modifier sso/filtres/nineXXXX_apps.ini et remplacer tout les nineskeletor en nineXXXX
|
|
||||||
- Renommer tmpl/nineskeletor.cron en tmpl/nineXXXX.cron
|
|
||||||
- Modifier tmpl/nineXXXX.cron et remplacer tout les nineskeletor en nineXXXX
|
|
||||||
- Renommer tmpl/nineskeletor-apache.conf en tmpl/nineXXXX-apache.conf
|
|
||||||
- Modifier tmpl/nineXXXX-apache.conf et remplacer tout les nineskeletor en nineXXXX
|
|
||||||
- Renommer tmpl/nineskeletor-db.yml en tmpl/nineXXXX-db.yml
|
|
||||||
- Modifier tmpl/nineXXXX-db.yml et remplacer tout les nineskeletor en nineXXXX
|
|
||||||
- Renommer tmpl/nineskeletor-env.local en tmpl/nineXXXX-env.local
|
|
||||||
- Modifier tmpl/nineXXXX-env.local et remplacer tout les nineskeletor en nineXXXX
|
|
||||||
- Renommer tmpl/nineskeletor-proxy.sh en tmpl/nineXXXX-proxy.sh
|
|
||||||
- Modifier Makefile et remplacer tout les nineskeletor en nineXXXX
|
|
||||||
- Remplacer logo public/uploads/logo/logo.png
|
|
||||||
|
|
||||||
## Compilier les asset
|
|
||||||
- apt-get install npm
|
|
||||||
- si proxy
|
|
||||||
- npm config set proxy "http://monproxyurl:monproxyport"
|
|
||||||
- npm config set https-proxy "http://monproxyurl:monproxyport"
|
|
||||||
- npm install -g yarn
|
|
||||||
- yarn install
|
|
||||||
- yarn encore dev
|
|
||||||
- yarn encore prod
|
|
||||||
|
|
||||||
# Description du squelette
|
|
||||||
|
|
||||||
## Bundle
|
|
||||||
- DebugBundle
|
|
||||||
- DoctrineBundle
|
|
||||||
- DoctrineMigrationsBundle
|
|
||||||
- FOSCKEditorBundle
|
|
||||||
- FOSRestBundle
|
|
||||||
- FrameworkBundle
|
|
||||||
- KnpSnappyBundle
|
|
||||||
- MakerBundle
|
|
||||||
- MonologBundle
|
|
||||||
- NelmioApiDocBundle
|
|
||||||
- OneupUploaderBundle
|
|
||||||
- SecurityBundle
|
|
||||||
- SensioFrameworkExtraBundle
|
|
||||||
- SwiftmailerBundle
|
|
||||||
- TetranzSelect2EntityBundle
|
|
||||||
- TwigBundle
|
|
||||||
- TwigExtraBundle
|
|
||||||
- WebProfilerBundle
|
|
||||||
- WebpackEncoreBundle
|
|
||||||
- ramsey/uuid
|
|
||||||
- cboden/ratchet
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Asset
|
|
||||||
|
|
||||||
### Tag app
|
|
||||||
- jQuery = https://www.npmjs.com/package/jquery
|
|
||||||
- jqueryui = https://www.npmjs.com/package/jqueryui
|
|
||||||
- bootstrap = https://www.npmjs.com/package/bootstrap
|
|
||||||
- timepicki = https://www.npmjs.com/package/timepicki
|
|
||||||
- datatables.net-bs4 = https://www.npmjs.com/package/datatables.net-bs4
|
|
||||||
- fontawsome-free = https://www.npmjs.com/package/@fortawesome/fontawesome-free
|
|
||||||
- bs-stepper = https://www.npmjs.com/package/bs-stepper
|
|
||||||
- masonry-layout = https://www.npmjs.com/package/masonry-layout
|
|
||||||
- react-slick = https://www.npmjs.com/package/react-slick
|
|
||||||
- image-loaded = https://www.npmjs.com/package/image-loaded
|
|
||||||
- moment = https://www.npmjs.com/package/moment
|
|
||||||
- select2 = https://www.npmjs.com/package/select2
|
|
||||||
- crop-select-js = https://www.npmjs.com/package/crop-select-js
|
|
||||||
- spectrum-colorpicker2 = https://www.npmjs.com/package/spectrum-colorpicker2
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Tag fullcalendar
|
|
||||||
- @fullcalendar/core = https://www.npmjs.com/package/@fullcalendar/core
|
|
||||||
- @fullcalendar/interaction = https://www.npmjs.com/package/@fullcalendar/interaction
|
|
||||||
- @fullcalendar/daygrid = https://www.npmjs.com/package/@fullcalendar/daygrid
|
|
||||||
|
|
||||||
### Tag dropzone
|
|
||||||
- dropzone = https://www.npmjs.com/package/dropzone
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Parameters
|
|
||||||
|
|
||||||
Provient du template env.local
|
|
||||||
- appEnv = PROD
|
|
||||||
- appSecret = valeur du fichier .key autogénéré au premier reconfigure
|
|
||||||
- appWeburl = Valeur du dicos web_url
|
|
||||||
- appAuth = Valeur du dicos = CAS / SQL
|
|
||||||
- appAlias = En dur l'alias web
|
|
||||||
- appName = Nom de l'application
|
|
||||||
- appCron = En dur à true pour activer le système de cron
|
|
||||||
- appMasteridentity = Valeur du dicos = Ninegate / LDAP / SQL
|
|
||||||
- appMasterurl = Si appMasteridentity la valeur du dicos correspondant à l'url du Ninegate maître
|
|
||||||
- appMasterkey = Si appMasteridentity la valeur du dicos correspondant à la clé d'API du Ninegate maître
|
|
||||||
- databaseName = En dur le nom de la base
|
|
||||||
- databaseUser = En dur le user de la base
|
|
||||||
- databasePassword = Autogénéré par le reconfigure
|
|
||||||
- databaseHost = Valeur du dicos pour le host de la base
|
|
||||||
- appMailmethod = Valeur du dicos soit sendmail soit smtp. sendmail par défaut si exim est activé sur le serveur
|
|
||||||
- appMailurl = Si smtp url calculé combinant smtphost smtpport smtpencryption smtpauthmode smtpuser smtppwd
|
|
||||||
- appMailnoreply = Valeur du dicos du noreplay
|
|
||||||
- ldapModel = si masteridentity à LDAP soit open soit scribe
|
|
||||||
- ldapHost = Valeur dicos Host LDAP
|
|
||||||
- ldapPort = Valeur dicos Port LDAP
|
|
||||||
- ldapUser = Valeur dicos User LDAP
|
|
||||||
- ldapPassword = Valeur dicos Password LDAP
|
|
||||||
- ldapBasedn = Valeur dicos Basedn LDAP
|
|
||||||
- ldapUsername = si Scribe en dur sinon valeur du dicos champs annuaire utilisé comme username
|
|
||||||
- ldapFirstname = si Scribe en dur sinon valeur du dicos champs annuaire utilisé comme firstname
|
|
||||||
- ldapLastname = si Scribe en dur sinon valeur du dicos champs annuaire utilisé comme lastname
|
|
||||||
- ldapEmail = si Scribe en dur sinon valeur du dicos champs annuaire utilisé comme email
|
|
||||||
- ldapFiltergroup = si Scribe en dur sinon valeur du dicos filtre ldap de recherche des groupes
|
|
||||||
- ldapFilteruser = si Scribe en dur sinon valeur du dicos filtre ldap des groupes
|
|
||||||
- ldapAdmins = Liste des admins obligatoire = Admin + valeur dicos
|
|
||||||
- casHost = Valeur dicos du host SSO
|
|
||||||
- casPort = Valeur dicos du Porst SSO
|
|
||||||
- casPath = Valeur dicos du Path SSO
|
|
||||||
- casUsername = Valeur en dur correspondant au filtre sso du username
|
|
||||||
- casEmail = Valeur en dur correspondant au filtre sso du email
|
|
||||||
- casLastname = Valeur en dur correspondant au filtre sso du lastname
|
|
||||||
- casFirstname = Valeur en dur correspondant au filtre sso du fistname
|
|
||||||
- proxyUse = Valeur dicos utiliser oui/non un proxy
|
|
||||||
- proxyHost = Si oui valeurs du dicos du host proxy
|
|
||||||
- proxyPort = Si oui valeurs du dicos du post proxy
|
|
||||||
- sondeUse = Valeur dicos utiliser oui/non une sonde statistique
|
|
||||||
- sondeUrl = Si oui url de la sonde statistique
|
|
||||||
|
|
||||||
## Sécurité
|
|
||||||
|
|
||||||
4 rôles possibles
|
|
||||||
- ROLE_ADMIN
|
|
||||||
- ROLE_MODO
|
|
||||||
- ROLE_MASTER
|
|
||||||
- ROLE_USER
|
|
||||||
|
|
||||||
4 routes protégés
|
|
||||||
- /user = accèssible à ROLE_USER / ROLE_MASTER / ROLE_MODO / ROLE_ADMIN
|
|
||||||
- /master = accèssible à ROLE_MASTER / ROLE_MODO / ROLE_ADMIN
|
|
||||||
- /modo = = accèssible à ROLE_MODO / ROLE_ADMIN
|
|
||||||
- /admin = = accèssible à ROLE_ADMIN
|
|
||||||
|
|
||||||
## Job
|
|
||||||
|
|
||||||
Nineskeletor intègre un système de job.
|
|
||||||
Ce système va exécuter des commandes symfony à interval régulier.
|
|
||||||
De base les jobs suivants sont livrés :
|
|
||||||
- app:sendMail = toutes les minutes = Execution du spool de mail en attente
|
|
||||||
- app:dumpBdd = toutes les nuits à 2h00 = Dump de la base
|
|
||||||
- app:purgeFile = toutes les nuits à 3h00 = Suppresion des fichiers obsolètes
|
|
||||||
- app:synchroUsers = toutes les nuites à 3h00 = Synchronisation des comptes utilisateurs soit via LDAP soit via Ninegate
|
|
||||||
|
|
||||||
Pour ajouter un job à la listes, modifier la commande app:initCron qui sera exécutée à chaque reconfigure
|
|
||||||
|
|
||||||
## Service
|
|
||||||
|
|
||||||
- app.password.encoder = encodage password sur la methode que l'annuaire
|
|
||||||
- app.upload.listener = action à réaliser sur upload via oneupload
|
|
||||||
- app.upload.samename = permet d'uploader un fichier et préserver le nom de fichier via oneupload
|
|
||||||
- app.ldap.service = fonction ldap
|
|
||||||
- app.sendmail.transport = executuion du spool de mail via sendmail
|
|
||||||
- app.mail.service = fonction envoit de mail
|
|
||||||
- app.twig.extension = extention twig
|
|
||||||
|
|
||||||
|
|
||||||
## Twig
|
|
||||||
|
|
||||||
### Twig Constantes
|
|
||||||
|
|
||||||
Variables globales twig reprises des parametres symfony
|
|
||||||
- appAlias
|
|
||||||
- appAuth
|
|
||||||
- appName
|
|
||||||
- appCron
|
|
||||||
- appMasteridentity
|
|
||||||
- sondeUse
|
|
||||||
- sondeUrl
|
|
||||||
|
|
||||||
### Twig Extention
|
|
||||||
|
|
||||||
App\Twig\AppExtension
|
|
||||||
- filtre = urlAvatar à placer avec user.avatar afin de définir l'url complète de l'avatar du user
|
|
||||||
|
|
||||||
### Twig Template de base
|
|
||||||
|
|
||||||
#### templates/base.html.twig
|
|
||||||
|
|
||||||
Deux paramétres non obligatoire
|
|
||||||
- useheader = permet d'afficher ou non la bannière dans la page = false par défaut
|
|
||||||
- usesidebar = permet d'afficher oun non la sidebar dans la page = false par défaut
|
|
||||||
- usemonocolor = afin de placer uniquement la couleur dark sur la page
|
|
||||||
Block
|
|
||||||
- block encorelinktags = pour déclarer des encore_link_tags spécifique à la page (encorelinktags app est intégré de base)
|
|
||||||
- block localstyle = pour déclarer des propriétés css spécifique à page (Include/style.css.twig est intégré de base)
|
|
||||||
- block body = le corps de la page
|
|
||||||
- block encorescripttags pour déclarer des encore_script_tags spécifique à la page (encorescripttags app est intégré de base)
|
|
||||||
- block localjavascript = pour déclarer du js spécifique à la page (Include/javascript.js.twig est intégré de base)
|
|
||||||
|
|
||||||
#### templates/Include/style.css.twig
|
|
||||||
|
|
||||||
Style de l'applicaiton en surcouche de bootstrap
|
|
||||||
|
|
||||||
#### templates/Include/sidebar.html.twig
|
|
||||||
|
|
||||||
La sidebar de l'application quand elle est affichée
|
|
||||||
|
|
||||||
#### templates/Include/javascript.js.twig
|
|
||||||
|
|
||||||
Librairie js de l'application
|
|
||||||
|
|
||||||
- object a et button s'ils ont un attribut data-method et data_confirm proposeront une confirmation à l'utilisateur avant de poursuivre l'action
|
|
||||||
- ModalLoad(idmodal,titre,url) = permet d'afficher en modal l'url indiqué en parametre. Par défaut on dispose de la modal #mymodal
|
|
||||||
|
|
||||||
#### templates/Form/fields.htms.twig
|
|
||||||
|
|
||||||
Mise en forme de champs de formulaire
|
|
64
apps.mk
64
apps.mk
@ -1,64 +0,0 @@
|
|||||||
#
|
|
||||||
# NE PAS EDITER CE FICHIER
|
|
||||||
#
|
|
||||||
# Voir Makefile
|
|
||||||
|
|
||||||
|
|
||||||
##########################
|
|
||||||
# Application web envole #
|
|
||||||
##########################
|
|
||||||
ifneq (, $(filter oui web, $(PKGAPPS)))
|
|
||||||
#
|
|
||||||
# Sanity check
|
|
||||||
#
|
|
||||||
ifeq (, $(filter-out X.X, $(strip $(VERSION))))
|
|
||||||
$(error $$(VERSION) variable has incorrect value '$(VERSION)')
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Where to store web application files
|
|
||||||
WEB_PATH := $(DESTDIR)/var/www/html
|
|
||||||
|
|
||||||
# Envole
|
|
||||||
sharenvole_PROG_DIR := $(DESTDIR)/usr/share/envole/$(SOURCE)
|
|
||||||
|
|
||||||
src_$(SOURCE)-$(VERSION)_REC_DIR := $(WEB_PATH)/$(SOURCE)
|
|
||||||
src_plugins-$(VERSION)_REC_DIR := $(WEB_PATH)/$(SOURCE)/plugin
|
|
||||||
src_lang-$(VERSION)_REC_DIR := $(WEB_PATH)/$(SOURCE)/lang
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
##########################
|
|
||||||
# Application EOLE flask #
|
|
||||||
##########################
|
|
||||||
ifneq (, $(filter flask, $(PKGAPPS)))
|
|
||||||
#
|
|
||||||
# Sanity check
|
|
||||||
#
|
|
||||||
ifeq (, $(filter-out XXX, $(strip $(FLASK_MODULE))))
|
|
||||||
$(error $$(FLASK_MODULE) variable has incorrect value '$(FLASK_MODULE)')
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq (, $(strip $(wildcard src/$(FLASK_MODULE).conf)))
|
|
||||||
$(error missing eoleflask configuration file 'src/$(FLASK_MODULE).conf')
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Everything is related to mount point
|
|
||||||
APPS_MOUNT_POINT := $(shell sed -ne 's|^"MOUNT_POINT"[[:space:]]*:[[:space:]]*"/\([^"]*\)",|\1|p' \
|
|
||||||
src/$(FLASK_MODULE).conf)
|
|
||||||
|
|
||||||
ifeq (, $(strip $(APPS_MOUNT_POINT)))
|
|
||||||
$(error no "MOUNT_POINT" in eoleflask configuration file 'src/$(FLASK_MODULE).conf')
|
|
||||||
endif
|
|
||||||
|
|
||||||
# eole-flask configuration
|
|
||||||
src_DATA_DIR := $(DESTDIR)/etc/eole/flask/available
|
|
||||||
|
|
||||||
# Where to store flask application files
|
|
||||||
FLASK_PATH := $(eole_DIR)/flask/$(APPS_MOUNT_POINT)
|
|
||||||
|
|
||||||
# static files
|
|
||||||
src_$(FLASK_MODULE)_static_REC_DIR := $(FLASK_PATH)/static
|
|
||||||
src_$(FLASK_MODULE)_templates_REC_DIR := $(FLASK_PATH)/templates
|
|
||||||
src_$(FLASK_MODULE)_instance_REC_DIR := $(FLASK_PATH)/resources
|
|
||||||
|
|
||||||
endif
|
|
21
assets/js/dropzone.js
Normal file
21
assets/js/dropzone.js
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
require('dropzone/dist/dropzone.css');
|
||||||
|
const { Dropzone } = require("dropzone");
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
var elt = document.getElementById('mydropzone');
|
||||||
|
maxFiles=elt.getAttribute("data-maxFiles");
|
||||||
|
if(maxFiles!=1) maxFiles=null;
|
||||||
|
|
||||||
|
var mydropzone = new Dropzone(elt, {
|
||||||
|
acceptedMimeTypes: $(elt).data("acceptedMimeTypes"),
|
||||||
|
maxFiles: maxFiles,
|
||||||
|
init: function() {
|
||||||
|
dropzoneinit(this);
|
||||||
|
},
|
||||||
|
success: function( file, response ){
|
||||||
|
dropzonesuccess(file,response);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
window.mydropzone=mydropzone;
|
||||||
|
});
|
98
composer.json
Normal file
98
composer.json
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
{
|
||||||
|
"type": "project",
|
||||||
|
"license": "proprietary",
|
||||||
|
"require": {
|
||||||
|
"php": "^7.1.3",
|
||||||
|
"ext-ctype": "*",
|
||||||
|
"ext-iconv": "*",
|
||||||
|
"cboden/ratchet": "^0.4.3",
|
||||||
|
"doctrine/annotations": "^1.8",
|
||||||
|
"friendsofsymfony/ckeditor-bundle": "^2.2",
|
||||||
|
"friendsofsymfony/rest-bundle": "^3.0",
|
||||||
|
"jasig/phpcas": "^1.3",
|
||||||
|
"knplabs/knp-snappy-bundle": "^1.7",
|
||||||
|
"mashape/unirest-php": "^3.0",
|
||||||
|
"nategood/httpful": "^0.3.2",
|
||||||
|
"nelmio/api-doc-bundle": "^3.6",
|
||||||
|
"oneup/uploader-bundle": "^3.0",
|
||||||
|
"ramsey/uuid": "^4.1",
|
||||||
|
"sensio/framework-extra-bundle": "^5.1",
|
||||||
|
"symfony/apache-pack": "^1.0",
|
||||||
|
"symfony/asset": "5.1.*",
|
||||||
|
"symfony/console": "5.1.*",
|
||||||
|
"symfony/dotenv": "5.1.*",
|
||||||
|
"symfony/expression-language": "5.1.*",
|
||||||
|
"symfony/flex": "^1.3.1",
|
||||||
|
"symfony/form": "5.1.*",
|
||||||
|
"symfony/framework-bundle": "5.1.*",
|
||||||
|
"symfony/http-client": "5.1.*",
|
||||||
|
"symfony/intl": "5.1.*",
|
||||||
|
"symfony/lock": "5.1.*",
|
||||||
|
"symfony/mailer": "5.1.*",
|
||||||
|
"symfony/maker-bundle": "^1.14",
|
||||||
|
"symfony/monolog-bundle": "^3.5",
|
||||||
|
"symfony/orm-pack": "^1.0",
|
||||||
|
"symfony/process": "5.1.*",
|
||||||
|
"symfony/profiler-pack": "^1.0",
|
||||||
|
"symfony/security-bundle": "5.1.*",
|
||||||
|
"symfony/serializer-pack": "*",
|
||||||
|
"symfony/swiftmailer-bundle": "^3.4",
|
||||||
|
"symfony/translation": "5.1.*",
|
||||||
|
"symfony/twig-pack": "*",
|
||||||
|
"symfony/validator": "5.1.*",
|
||||||
|
"symfony/web-link": "5.1.*",
|
||||||
|
"symfony/webpack-encore-bundle": "^1.7",
|
||||||
|
"symfony/yaml": "5.1.*",
|
||||||
|
"tetranz/select2entity-bundle": "^3.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"symfony/debug-pack": "*",
|
||||||
|
"symfony/test-pack": "*"
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"preferred-install": {
|
||||||
|
"*": "dist"
|
||||||
|
},
|
||||||
|
"sort-packages": true
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"App\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload-dev": {
|
||||||
|
"psr-4": {
|
||||||
|
"App\\Tests\\": "tests/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"replace": {
|
||||||
|
"paragonie/random_compat": "2.*",
|
||||||
|
"symfony/polyfill-ctype": "*",
|
||||||
|
"symfony/polyfill-iconv": "*",
|
||||||
|
"symfony/polyfill-php71": "*",
|
||||||
|
"symfony/polyfill-php70": "*",
|
||||||
|
"symfony/polyfill-php56": "*"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"auto-scripts": {
|
||||||
|
"cache:clear": "symfony-cmd",
|
||||||
|
"cache:clear --env=prod": "symfony-cmd",
|
||||||
|
"assets:install %PUBLIC_DIR%": "symfony-cmd"
|
||||||
|
},
|
||||||
|
"post-install-cmd": [
|
||||||
|
"@auto-scripts"
|
||||||
|
],
|
||||||
|
"post-update-cmd": [
|
||||||
|
"@auto-scripts"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"symfony/symfony": "*"
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"symfony": {
|
||||||
|
"allow-contrib": true,
|
||||||
|
"require": "5.1.*"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
config/packages/framework.yaml
Normal file
21
config/packages/framework.yaml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
framework:
|
||||||
|
secret: '%env(APP_SECRET)%'
|
||||||
|
#csrf_protection: true
|
||||||
|
#http_method_override: true
|
||||||
|
|
||||||
|
# Enables session support. Note that the session will ONLY be started if you read or write from it.
|
||||||
|
# Remove or comment this section to explicitly disable session support.
|
||||||
|
session:
|
||||||
|
name: '%env(APP_NAME)%'
|
||||||
|
handler_id: null
|
||||||
|
gc_probability: null
|
||||||
|
cookie_secure: auto
|
||||||
|
cookie_samesite: lax
|
||||||
|
|
||||||
|
esi: true
|
||||||
|
#fragments: true
|
||||||
|
php_errors:
|
||||||
|
log: true
|
||||||
|
|
||||||
|
|
||||||
|
validation: { enable_annotations: true }
|
@ -1,5 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
|
|
||||||
CREATE DATABASE ninegitea DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
|
|
||||||
|
|
@ -1,170 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<creole>
|
|
||||||
<files>
|
|
||||||
<file filelist='ninegitea' name='/etc/eole/eole-db.d/ninegitea-db.yml' rm='True' mkdir='True'/>
|
|
||||||
<file filelist='ninegitea_nginx' name='/etc/nginx/web.d/ninegitea.conf' source='ninegitea-nginx.conf' rm='True' mkdir='True' />
|
|
||||||
</files>
|
|
||||||
|
|
||||||
<containers>
|
|
||||||
<container name='web'>
|
|
||||||
<!--
|
|
||||||
<package>ninegitea-apps</package>
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- service de configuration apache -->
|
|
||||||
<service method="apache" servicelist="ninegitea">ninegitea</service>
|
|
||||||
|
|
||||||
<!-- template -->
|
|
||||||
<file filelist='ninegitea' name='/etc/apache2/sites-available/ninegitea' source='ninegitea-apache.conf' />
|
|
||||||
<file filelist='ninegitea' name='/var/www/html/ninegitea/.env.local' source='ninegitea-env.local' rm='True'/>
|
|
||||||
<file filelist='ninegitea' name='/etc/cron.d/ninegitea' source='ninegitea.cron' rm='True'/>
|
|
||||||
</container>
|
|
||||||
</containers>
|
|
||||||
|
|
||||||
<variables>
|
|
||||||
<family name='ninegitea'>
|
|
||||||
<variable name="ninegate_test_ninegate" type="oui/non" hidden='True' exists='False'><value>non</value></variable>
|
|
||||||
<variable name="activer_revprox" type="oui/non" description="Activer le reverse proxy Nginx" hidden='True' exists='False'><value>non</value></variable>
|
|
||||||
|
|
||||||
<variable name='activer_ninegitea' type='oui/non' description='Activer Ninegitea'>
|
|
||||||
<value>oui</value>
|
|
||||||
</variable>
|
|
||||||
|
|
||||||
<variable type='string' name='ninegitea_gitea_url' description="Gitea URL" mandatory='True' />
|
|
||||||
|
|
||||||
<variable type='string' name='ninegitea_oauth_clientid' description="oAuth Client ID" mandatory='True' />
|
|
||||||
<variable type='string' name='ninegitea_oauth_clientsecret' description="oAuth Client Secret" mandatory='True' />
|
|
||||||
<variable type='string' name='ninegitea_oauth_loginurl' description="oAuth Client Login URL" mandatory='True' />
|
|
||||||
<variable type='string' name='ninegitea_oauth_logouturl' description="oAuth Client Logout URL" mandatory='True' />
|
|
||||||
<variable type='string' name='ninegitea_oauth_tokenurl' description="oAuth Client Token URL" mandatory='True' />
|
|
||||||
|
|
||||||
|
|
||||||
<!-- EMAIL -->
|
|
||||||
<variable type='string' name='ninegitea_noreply' description='Adresse mail utilisé pour le noreply' mandatory='True' />
|
|
||||||
<variable type="oui/non" name='ninegitea_activer_localmail' description="Utiliser le serveur d'envoi de mail local" mandatory='True'>
|
|
||||||
<value>oui</value>
|
|
||||||
</variable>
|
|
||||||
<variable type='string' name='ninegitea_smtphost' description='Host du serveur SMTP' mandatory='True' />
|
|
||||||
<variable type='string' name='ninegitea_smtpport' description='Port du serveur SMTP' mandatory='True' />
|
|
||||||
<variable type='string' name='ninegitea_smtpuser' description='Compte du serveur SMTP' mandatory='True' />
|
|
||||||
<variable type='string' name='ninegitea_smtppwd' description='Mot de passe associé du compte SMTP' mandatory='True' />
|
|
||||||
<variable type='string' name='ninegitea_smtpencryption' description='Type Encryptage du serveur SMTP' mandatory='True' />
|
|
||||||
<variable type='string' name='ninegitea_smtpauthmode' description='Mode Authentification du serveur SMTP' mandatory='True' />
|
|
||||||
|
|
||||||
|
|
||||||
<!-- BDD -->
|
|
||||||
<variable type='string' name='ninegitea_db_mode' description='Serveur de bases de données à utiliser' mode='expert'/>
|
|
||||||
<variable type='string' name='ninegitea_dbserver' description='Adresse du serveur de base de données' mode='expert'/>
|
|
||||||
<variable type='number' name='ninegitea_dbport' description="Port d'écoute du serveur de base de données" mode='expert'/>
|
|
||||||
<variable type='string' name='ninegitea_allow_hosts' description="Hôtes autorisés à utiliser la base de données" multi='True' mode='expert'/>
|
|
||||||
<variable type='string' name='ninegitea_dbuser' description='Utilisateur du serveur de base de données' mode='expert'/>
|
|
||||||
<variable type='string' name='ninegitea_dbpass' description='Fichier de mot de passe du serveur' mode='expert'/>
|
|
||||||
</family>
|
|
||||||
|
|
||||||
<separators>
|
|
||||||
<separator name="ninegitea_noreply">Paramètres associés aux Mails</separator>
|
|
||||||
<separator name="ninegitea_db_mode">Paramètres associés à la Base de Données</separator>
|
|
||||||
</separators>
|
|
||||||
</variables>
|
|
||||||
|
|
||||||
<constraints>
|
|
||||||
<!-- AFFICHAGE EN FONCTION DE APACHE -->
|
|
||||||
<condition name='hidden_if_in' source='activer_apache'>
|
|
||||||
<param>non</param>
|
|
||||||
<target type='filelist'>ninegitea</target>
|
|
||||||
<target type='filelist'>ninegitea_nginx</target>
|
|
||||||
<target type='servicelist'>ninegitea</target>
|
|
||||||
</condition>
|
|
||||||
|
|
||||||
<!-- AFFICHAGE EN FONCTION DE REVERSE PROXY -->
|
|
||||||
<condition name='hidden_if_in' source='activer_revprox'>
|
|
||||||
<param>non</param>
|
|
||||||
<target type='filelist'>ninegitea_nginx</target>
|
|
||||||
</condition>
|
|
||||||
|
|
||||||
<!-- AFFICHAGE EN FONCTION DE ninegitea -->
|
|
||||||
<condition name='hidden_if_in' source='activer_ninegitea'>
|
|
||||||
<param>non</param>
|
|
||||||
|
|
||||||
<target type='variable'>ninegitea_gitea_url</target>
|
|
||||||
<target type='variable'>ninegitea_oauth_clientid</target>
|
|
||||||
<target type='variable'>ninegitea_oauth_clientsecret</target>
|
|
||||||
<target type='variable'>ninegitea_oauth_loginurl</target>
|
|
||||||
<target type='variable'>ninegitea_oauth_logouturl</target>
|
|
||||||
<target type='variable'>ninegitea_oauth_tokenurl</target>
|
|
||||||
|
|
||||||
<target type='variable'>ninegitea_noreply</target>
|
|
||||||
<target type='variable'>ninegitea_activer_localmail</target>
|
|
||||||
<target type='variable'>ninegitea_smtphost</target>
|
|
||||||
<target type='variable'>ninegitea_smtpport</target>
|
|
||||||
<target type='variable'>ninegitea_smtpuser</target>
|
|
||||||
<target type='variable'>ninegitea_smtppwd</target>
|
|
||||||
<target type='variable'>ninegitea_smtpencryption</target>
|
|
||||||
<target type='variable'>ninegitea_smtpauthmode</target>
|
|
||||||
|
|
||||||
<target type='variable'>ninegitea_db_mode</target>
|
|
||||||
<target type='variable'>ninegitea_dbserver</target>
|
|
||||||
<target type='variable'>ninegitea_dbport</target>
|
|
||||||
<target type='variable'>ninegitea_allow_hosts</target>
|
|
||||||
<target type='variable'>ninegitea_dbuser</target>
|
|
||||||
<target type='variable'>ninegitea_dbpass</target>
|
|
||||||
|
|
||||||
<target type='filelist'>ninegitea</target>
|
|
||||||
<target type='filelist'>ninegitea_nginx</target>
|
|
||||||
<target type='servicelist'>ninegitea</target>
|
|
||||||
</condition>
|
|
||||||
|
|
||||||
<!-- AFFICHAGE EN FONCTION DU MAIL -->
|
|
||||||
<fill name='concat' target='ninegitea_noreply'>
|
|
||||||
<param>noreply@</param>
|
|
||||||
<param type='eole'>domaine_messagerie_etab</param>
|
|
||||||
</fill>
|
|
||||||
|
|
||||||
<condition name='hidden_if_in' source='ninegitea_activer_localmail'>
|
|
||||||
<param>oui</param>
|
|
||||||
|
|
||||||
<target type='variable'>ninegitea_smtphost</target>
|
|
||||||
<target type='variable'>ninegitea_smtpport</target>
|
|
||||||
<target type='variable'>ninegitea_smtpuser</target>
|
|
||||||
<target type='variable'>ninegitea_smtppwd</target>
|
|
||||||
<target type='variable'>ninegitea_smtpencryption</target>
|
|
||||||
<target type='variable'>ninegitea_smtpauthmode</target>
|
|
||||||
</condition>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- AFFICHAGE EN FONCTION DU MODE DE BDD -->
|
|
||||||
<condition name='disabled_if_in' source='ninegitea_db_mode'>
|
|
||||||
<param>local</param>
|
|
||||||
<target type='variable'>ninegitea_dbserver</target>
|
|
||||||
<target type='variable'>ninegitea_dbuser</target>
|
|
||||||
<target type='variable'>ninegitea_dbport</target>
|
|
||||||
<target type='variable'>ninegitea_dbpass</target>
|
|
||||||
</condition>
|
|
||||||
<condition name='disabled_if_in' source='ninegitea_db_mode'>
|
|
||||||
<param>default</param>
|
|
||||||
<target type='variable'>ninegitea_dbserver</target>
|
|
||||||
<target type='variable'>ninegitea_dbuser</target>
|
|
||||||
<target type='variable'>ninegitea_dbport</target>
|
|
||||||
<target type='variable'>ninegitea_dbpass</target>
|
|
||||||
<target type='variable'>ninegitea_allow_hosts</target>
|
|
||||||
</condition>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- VALID EMUN DES DIFFRENTES COMBO -->
|
|
||||||
<check name='valid_enum' target='ninegitea_smtpencryption'>
|
|
||||||
<param>['tls', 'ssl', 'null']</param>
|
|
||||||
</check>
|
|
||||||
<check name='valid_enum' target='ninegitea_smtpauthmode'>
|
|
||||||
<param>['plain', 'login', 'cram-md5', 'null']</param>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<check name='valid_enum' target='ninegitea_db_mode'>
|
|
||||||
<param>['default', 'externe', 'local']</param>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
</constraints>
|
|
||||||
|
|
||||||
<help>
|
|
||||||
<variable name='activer_ninegitea'>Application kanban gitea</variable>
|
|
||||||
</help>
|
|
||||||
</creole>
|
|
29
docker-compose.yml
Normal file
29
docker-compose.yml
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
version: '3'
|
||||||
|
|
||||||
|
services:
|
||||||
|
mariadb:
|
||||||
|
image: mariadb
|
||||||
|
container_name: ninegitea-mariadb
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "3306:3306"
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: changeme
|
||||||
|
MYSQL_DATABASE: ninegitea
|
||||||
|
MYSQL_USER: user
|
||||||
|
MYSQL_PASSWORD: changeme
|
||||||
|
volumes:
|
||||||
|
- mariadb-data:/var/lib/mysql
|
||||||
|
|
||||||
|
ninegitea:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: ./misc/docker/Dockerfile
|
||||||
|
container_name: ninegitea-app
|
||||||
|
image: reg.cadoles.com/envole/ninegitea
|
||||||
|
ports:
|
||||||
|
- "8000:80"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
mariadb-data:
|
||||||
|
|
231
eole.mk
231
eole.mk
@ -1,231 +0,0 @@
|
|||||||
#
|
|
||||||
# NE PAS EDITER CE FICHIER
|
|
||||||
#
|
|
||||||
# Utiliser <appli>.mk à inclure à la fin de Makefile
|
|
||||||
|
|
||||||
#################
|
|
||||||
# Sanity checks #
|
|
||||||
#################
|
|
||||||
|
|
||||||
ifeq (, $(DESTDIR))
|
|
||||||
$(warning $$(DESTDIR) is empty, installation will be done in /)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq (, $(filter-out XXX-XXX, $(strip $(SOURCE))))
|
|
||||||
$(error $$(SOURCE) variable has incorrect value '$(SOURCE)')
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq (, $(filter-out 2.X, $(strip $(EOLE_VERSION))))
|
|
||||||
$(error $$(EOLE_VERSION) variable has incorrect value '$(EOLE_VERSION)')
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq (, $(filter-out 2.X.Y, $(strip $(EOLE_RELEASE))))
|
|
||||||
$(error $$(EOLE_RELEASE) variable has incorrect value '$(EOLE_RELEASE)')
|
|
||||||
endif
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Variables definitions #
|
|
||||||
#########################
|
|
||||||
|
|
||||||
INSTALL := install
|
|
||||||
INSTALL_DATA := install -m 644
|
|
||||||
INSTALL_PROGRAM := install -m 755
|
|
||||||
INSTALL_DIRECTORY := install -m 755 -d
|
|
||||||
INSTALL_RECURSIVE := cp -dr --no-preserve=ownership
|
|
||||||
|
|
||||||
# Standard path
|
|
||||||
bin_PROG_DIR := $(DESTDIR)/usr/bin
|
|
||||||
sbin_PROG_DIR := $(DESTDIR)/usr/sbin
|
|
||||||
man8_DATA_DIR := $(DESTDIR)/usr/share/man/fr.UTF-8/man8
|
|
||||||
|
|
||||||
# Base
|
|
||||||
eole_DIR := $(DESTDIR)/usr/share/eole
|
|
||||||
|
|
||||||
ifeq ($(strip $(EOLE_VERSION)), 2.3)
|
|
||||||
diagnose_PROG_DIR := $(eole_DIR)/diagnose/module
|
|
||||||
else
|
|
||||||
diagnose_PROG_DIR := $(eole_DIR)/diagnose/
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Creole
|
|
||||||
creole_DIR := $(eole_DIR)/creole
|
|
||||||
dicos_DATA_DIR := $(creole_DIR)/dicos
|
|
||||||
tmpl_DATA_DIR := $(creole_DIR)/distrib
|
|
||||||
preservice_PROG_DIR := $(eole_DIR)/preservice
|
|
||||||
pretemplate_PROG_DIR := $(eole_DIR)/pretemplate
|
|
||||||
posttemplate_PROG_DIR := $(eole_DIR)/posttemplate
|
|
||||||
postservice_PROG_DIR := $(eole_DIR)/postservice
|
|
||||||
ifeq ($(strip $(EOLE_VERSION)), 2.3)
|
|
||||||
firewall_DATA_DIR := $(eole_DIR)/firewall
|
|
||||||
endif
|
|
||||||
bacula_restore_DATA_DIR := $(eole_DIR)/bacula/restore
|
|
||||||
bareos_restore_DATA_DIR := $(eole_DIR)/bareos/restore
|
|
||||||
bacula_fichier_DATA_DIR := $(DESTDIR)/etc/bacula/baculafichiers.d
|
|
||||||
bareos_fichier_DATA_DIR := $(DESTDIR)/etc/bareos/bareosfichiers.d
|
|
||||||
ifeq ($(strip $(EOLE_VERSION)), 2.3)
|
|
||||||
schedule_pre_PROG_DIR := $(eole_DIR)/schedule/pre
|
|
||||||
schedule_post_PROG_DIR := $(eole_DIR)/schedule/post
|
|
||||||
else
|
|
||||||
schedule_scripts_PROG_DIR := $(eole_DIR)/schedule/scripts
|
|
||||||
endif
|
|
||||||
extra_REC_DIR := $(creole_DIR)/extra
|
|
||||||
|
|
||||||
# Zéphir
|
|
||||||
zephir_DATA_DIR := $(DESTDIR)/usr/share/zephir
|
|
||||||
zephir_configs_DATA_DIR := $(zephir_DATA_DIR)/monitor/configs
|
|
||||||
zephir_srv_DATA_DIR := $(zephir_configs_DATA_DIR)/services
|
|
||||||
zephir_scripts_PROG_DIR := $(zephir_DATA_DIR)/scripts
|
|
||||||
|
|
||||||
# SSO
|
|
||||||
sso_DATA_DIR := $(DESTDIR)/usr/share/sso
|
|
||||||
sso_filtres_DATA_DIR := $(sso_DATA_DIR)/app_filters
|
|
||||||
sso_user-info_DATA_DIR := $(sso_DATA_DIR)/user_infos
|
|
||||||
|
|
||||||
# EAD
|
|
||||||
ead_DATA_DIR := $(DESTDIR)/usr/share/ead2/backend/config
|
|
||||||
ead_actions_DATA_DIR := $(ead_DATA_DIR)/actions
|
|
||||||
ead_perms_DATA_DIR := $(ead_DATA_DIR)/perms
|
|
||||||
ead_roles_DATA_DIR := $(ead_DATA_DIR)/roles
|
|
||||||
|
|
||||||
# Program libraries goes under /usr/lib/<PROGRAM>/
|
|
||||||
lib_$(SOURCE)_DATA_DIR := $(DESTDIR)/usr/lib/$(SOURCE)
|
|
||||||
|
|
||||||
# Scripts Eole
|
|
||||||
scripts_PROG_DIR := $(eole_DIR)/sbin
|
|
||||||
lib_eole_DATA_DIR := $(DESTDIR)/usr/lib/eole
|
|
||||||
|
|
||||||
# LDAP
|
|
||||||
ldap_passwords_DATA_DIR := $(eole_DIR)/annuaire/password_files
|
|
||||||
|
|
||||||
# LXC
|
|
||||||
lxc_DATA_DIR := $(eole_DIR)/lxc
|
|
||||||
lxc_fstab_DATA_DIR := $(lxc_DATA_DIR)/fstab
|
|
||||||
lxc_hosts_DATA_DIR := $(lxc_DATA_DIR)/hosts
|
|
||||||
|
|
||||||
# SQL
|
|
||||||
sql_DATA_DIR := $(eole_DIR)/mysql/$(SOURCE)
|
|
||||||
sql_gen_DATA_DIR := $(sql_DATA_DIR)/gen
|
|
||||||
sql_updates_DATA_DIR := $(sql_DATA_DIR)/updates
|
|
||||||
|
|
||||||
sql_conf_gen_DATA_DIR := $(eole_DIR)/applications/gen
|
|
||||||
sql_conf_passwords_DATA_DIR := $(eole_DIR)/applications/passwords
|
|
||||||
sql_conf_updates_DATA_DIR := $(eole_DIR)/applications/updates/$(SOURCE)
|
|
||||||
|
|
||||||
# EoleDB sql directory
|
|
||||||
db_DIR := $(eole_DIR)/db
|
|
||||||
db_gen_DATA_DIR := $(eole_DIR)/db/$(SOURCE)/gen
|
|
||||||
db_updates_DATA_DIR := $(eole_DIR)/db/$(SOURCE)/updates
|
|
||||||
|
|
||||||
# Certifs
|
|
||||||
certs_DATA_DIR := $(eole_DIR)/certs
|
|
||||||
|
|
||||||
# Logrotate
|
|
||||||
logrotate_DATA_DIR := $(DESTDIR)/etc/logrotate.d
|
|
||||||
|
|
||||||
# Cron
|
|
||||||
cron_PROG_DIR := $(DESTDIR)/etc/cron.daily
|
|
||||||
|
|
||||||
# Python modules
|
|
||||||
ifneq ($(DESTDIR),)
|
|
||||||
PYTHON_OPTS := --root $(DESTDIR)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Translation
|
|
||||||
TRANSLATION_SRC := translation
|
|
||||||
TRANSLATION_DEST := $(DESTDIR)/usr/share/locale
|
|
||||||
PO_FILES = $(wildcard $(TRANSLATION_SRC)/*/*.po)
|
|
||||||
MO_FOLDERS = $(addprefix $(TRANSLATION_DEST), $(addsuffix LC_MESSAGES,$(subst $(TRANSLATION_SRC),,$(dir $(PO_FILES)))))
|
|
||||||
|
|
||||||
#############################################
|
|
||||||
# Common directories and files installation #
|
|
||||||
#############################################
|
|
||||||
|
|
||||||
all:
|
|
||||||
|
|
||||||
$(MO_FOLDERS):
|
|
||||||
$(INSTALL_DIRECTORY) $@
|
|
||||||
|
|
||||||
$(PO_FILES): $(MO_FOLDERS)
|
|
||||||
msgfmt -o $(TRANSLATION_DEST)$(subst $(TRANSLATION_SRC),,$(addsuffix LC_MESSAGES,$(dir $@)))/$(notdir $(@:.po=.mo)) $@
|
|
||||||
|
|
||||||
install-lang: $(PO_FILES)
|
|
||||||
|
|
||||||
install:: install-dirs install-files install-lang
|
|
||||||
|
|
||||||
# $1 = command to run
|
|
||||||
# $2 = source directory
|
|
||||||
# $3 = destination directory
|
|
||||||
define fc_install_file
|
|
||||||
if [ -d $2 ]; then \
|
|
||||||
for file in `ls -1 $2/`; do \
|
|
||||||
$1 $2/$$file $3 || true; \
|
|
||||||
done; \
|
|
||||||
fi
|
|
||||||
endef
|
|
||||||
|
|
||||||
##
|
|
||||||
## Directory creation
|
|
||||||
##
|
|
||||||
|
|
||||||
# use % to catch local name in $*
|
|
||||||
# data, program and recursive directory require a corresponding
|
|
||||||
# directory in local sources
|
|
||||||
%_DATA_DIR %_PROG_DIR %REC_DIR:
|
|
||||||
test ! -d $(subst _,/,$*) || $(INSTALL_DIRECTORY) $($@)
|
|
||||||
|
|
||||||
# Create the directory referenced by the variable without a local one.
|
|
||||||
%_DIR:
|
|
||||||
@: # do nothing
|
|
||||||
|
|
||||||
##
|
|
||||||
## Install files present directly under data, program and recursive directories
|
|
||||||
##
|
|
||||||
|
|
||||||
# $* : name of variable
|
|
||||||
# $($*): value of variable
|
|
||||||
%-instdata:
|
|
||||||
$(call fc_install_file, $(INSTALL_DATA), $(subst _,/,$(subst _DATA_DIR,,$*)), $($*))
|
|
||||||
|
|
||||||
%-instprog:
|
|
||||||
$(call fc_install_file, $(INSTALL_PROGRAM), $(subst _,/,$(subst _PROG_DIR,,$*)), $($*))
|
|
||||||
|
|
||||||
%-instrec:
|
|
||||||
$(call fc_install_file, $(INSTALL_RECURSIVE), $(subst _,/,$(subst _REC_DIR,,$*)), $($*))
|
|
||||||
|
|
||||||
|
|
||||||
# Use second expansion as variables may be created in included
|
|
||||||
# Makefiles
|
|
||||||
.SECONDEXPANSION:
|
|
||||||
|
|
||||||
# List of all directories
|
|
||||||
installdirs_LIST = $(foreach V, $(filter %_DIR, $(.VARIABLES)), \
|
|
||||||
$(if $(filter file, $(origin $(V))), \
|
|
||||||
$(V)))
|
|
||||||
# List of data directories
|
|
||||||
installdata_LIST = $(filter %_DATA_DIR, $(installdirs_LIST))
|
|
||||||
# List of program directories
|
|
||||||
installprog_LIST = $(filter %_PROG_DIR, $(installdirs_LIST))
|
|
||||||
# List of recursive directories
|
|
||||||
installrec_LIST = $(filter %_REC_DIR, $(installdirs_LIST))
|
|
||||||
|
|
||||||
# Expand directories to create as dependency
|
|
||||||
# Use double-colon to permit user to define additionnal install-dirs
|
|
||||||
install-dirs:: $$(installdirs_LIST)
|
|
||||||
|
|
||||||
# Expand files to install as dependency
|
|
||||||
# Use double-colon to permit user to define additionnal install-files
|
|
||||||
install-files:: install-data-files install-prog-files install-rec-dirs
|
|
||||||
|
|
||||||
install-data-files: $$(patsubst %,%-instdata,$$(installdata_LIST))
|
|
||||||
|
|
||||||
install-prog-files: $$(patsubst %,%-instprog,$$(installprog_LIST))
|
|
||||||
|
|
||||||
install-rec-dirs: $$(patsubst %,%-instrec,$$(installrec_LIST))
|
|
||||||
|
|
||||||
# Installation of python modules
|
|
||||||
ifeq ($(shell test -f setup.py && echo 0), 0)
|
|
||||||
install-files::
|
|
||||||
python setup.py install --no-compile --install-layout=deb $(PYTHON_OPTS)
|
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY: install install-dirs install-files install-data-files install-prog-files install-rec-dirs
|
|
@ -1,13 +0,0 @@
|
|||||||
/var/www/html/ninegitea/var/log/*.log {
|
|
||||||
su root www-data
|
|
||||||
daily
|
|
||||||
rotate 7
|
|
||||||
size 900
|
|
||||||
maxage 7
|
|
||||||
compress
|
|
||||||
dateext
|
|
||||||
dateformat -%Y%m%d
|
|
||||||
missingok
|
|
||||||
create 644 www-data www-data
|
|
||||||
}
|
|
||||||
|
|
18
misc/docker/Dockerfile
Normal file
18
misc/docker/Dockerfile
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
FROM reg.cadoles.com/envole/nineapache:7.4
|
||||||
|
RUN apk add mariadb-client
|
||||||
|
|
||||||
|
RUN composer self-update --1
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN yarn install
|
||||||
|
RUN yarn encore dev
|
||||||
|
RUN yarn encore prod
|
||||||
|
|
||||||
|
RUN mkdir -p /app/public/uploads
|
||||||
|
RUN chown apache /app/public/uploads -R
|
||||||
|
RUN chmod u+w /app/public/uploads -R
|
||||||
|
|
||||||
|
CMD /app/misc/script/reconfigure.sh && /etc/apache2/apache2.sh
|
||||||
|
#CMD /etc/apache2/apache2.sh
|
15
misc/script/reconfigure.sh
Executable file
15
misc/script/reconfigure.sh
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
# Se positionner sur la racine du projet
|
||||||
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||||
|
cd ${DIR}
|
||||||
|
cd ../..
|
||||||
|
DIR=$(pwd)
|
||||||
|
|
||||||
|
# Installation des dépendances composer
|
||||||
|
composer install --no-interaction
|
||||||
|
|
||||||
|
bin/console d:s:u --force --complete
|
||||||
|
|
||||||
|
exec $@
|
44
package.json
Normal file
44
package.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"devDependencies": {
|
||||||
|
"@symfony/webpack-encore": "^0.28.2",
|
||||||
|
"core-js": "^3.0.0",
|
||||||
|
"regenerator-runtime": "^0.13.2",
|
||||||
|
"webpack-notifier": "^1.6.0"
|
||||||
|
},
|
||||||
|
"license": "UNLICENSED",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"dev-server": "encore dev-server",
|
||||||
|
"dev": "encore dev",
|
||||||
|
"watch": "encore dev --watch",
|
||||||
|
"build": "encore production --progress"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@fortawesome/fontawesome-free": "^5.12.1",
|
||||||
|
"@fullcalendar/core": "^4.4.0",
|
||||||
|
"@fullcalendar/daygrid": "^4.4.0",
|
||||||
|
"@fullcalendar/interaction": "^4.4.0",
|
||||||
|
"@ttskch/select2-bootstrap4-theme": "^1.3.2",
|
||||||
|
"bootstrap": "^4.4.1",
|
||||||
|
"bs-stepper": "^1.7.0",
|
||||||
|
"ckeditor": "^4.12.1",
|
||||||
|
"crop-select-js": "^1.0.1",
|
||||||
|
"datatables.net-bs4": "^1.10.20",
|
||||||
|
"dropzone": "^6.0.0-beta.2",
|
||||||
|
"encore": "^0.0.30-beta",
|
||||||
|
"imagesloaded": "^4.1.4",
|
||||||
|
"jquery": "^3.4.1",
|
||||||
|
"jquery.flot": "^0.8.3",
|
||||||
|
"jqueryui": "^1.11.1",
|
||||||
|
"masonry-layout": "^4.2.2",
|
||||||
|
"moment": "^2.24.0",
|
||||||
|
"morris.js": "^0.5.0",
|
||||||
|
"popper.js": "^1.16.1",
|
||||||
|
"raphael": "^2.3.0",
|
||||||
|
"select2": "^4.0.13",
|
||||||
|
"slick-carousel": "^1.8.1",
|
||||||
|
"spectrum-colorpicker2": "^2.0.0",
|
||||||
|
"tempusdominus-core": "^5.0.3",
|
||||||
|
"timepicki": "^2.0.1"
|
||||||
|
}
|
||||||
|
}
|
@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
CreoleRun "/var/www/html/ninegitea/scripts/reconfigure.sh" web
|
|
@ -1,3 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
CreoleRun "/var/www/html/ninegitea/scripts/genkey.sh" web
|
|
||||||
exit 0
|
|
1
public/build/0.577458bf.js
Normal file
1
public/build/0.577458bf.js
Normal file
File diff suppressed because one or more lines are too long
28
public/build/1.14e9dd6b.css
Normal file
28
public/build/1.14e9dd6b.css
Normal file
File diff suppressed because one or more lines are too long
493
public/build/1.1a68acdd.js
Normal file
493
public/build/1.1a68acdd.js
Normal file
File diff suppressed because one or more lines are too long
1
public/build/2.483c24c4.css
Normal file
1
public/build/2.483c24c4.css
Normal file
File diff suppressed because one or more lines are too long
59
public/build/2.81db2cb1.js
Normal file
59
public/build/2.81db2cb1.js
Normal file
File diff suppressed because one or more lines are too long
1
public/build/3.2af3a9ae.js
Normal file
1
public/build/3.2af3a9ae.js
Normal file
File diff suppressed because one or more lines are too long
1
public/build/3.986bb952.css
Normal file
1
public/build/3.986bb952.css
Normal file
@ -0,0 +1 @@
|
|||||||
|
@keyframes passing-through{0%{opacity:0;transform:translateY(40px)}30%,70%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-40px)}}@keyframes slide-in{0%{opacity:0;transform:translateY(40px)}30%{opacity:1;transform:translateY(0)}}@keyframes pulse{0%{transform:scale(1)}10%{transform:scale(1.1)}20%{transform:scale(1)}}.dropzone,.dropzone *{box-sizing:border-box}.dropzone{min-height:150px;border:1px solid rgba(0,0,0,.8);border-radius:5px;padding:20px}.dropzone.dz-clickable{cursor:pointer}.dropzone.dz-clickable *{cursor:default}.dropzone.dz-clickable .dz-message,.dropzone.dz-clickable .dz-message *{cursor:pointer}.dropzone.dz-started .dz-message{display:none}.dropzone.dz-drag-hover{border-style:solid}.dropzone.dz-drag-hover .dz-message{opacity:.5}.dropzone .dz-message{text-align:center;margin:3em 0}.dropzone .dz-message .dz-button{background:none;color:inherit;border:none;padding:0;font:inherit;cursor:pointer;outline:inherit}.dropzone .dz-preview{position:relative;display:inline-block;vertical-align:top;margin:16px;min-height:100px}.dropzone .dz-preview:hover{z-index:1000}.dropzone .dz-preview.dz-file-preview .dz-image{border-radius:20px;background:#999;background:linear-gradient(180deg,#eee,#ddd)}.dropzone .dz-preview.dz-file-preview .dz-details{opacity:1}.dropzone .dz-preview.dz-image-preview{background:#fff}.dropzone .dz-preview.dz-image-preview .dz-details{transition:opacity .2s linear}.dropzone .dz-preview .dz-remove{font-size:14px;text-align:center;display:block;cursor:pointer;border:none}.dropzone .dz-preview .dz-remove:hover{text-decoration:underline}.dropzone .dz-preview:hover .dz-details{opacity:1}.dropzone .dz-preview .dz-details{z-index:20;position:absolute;top:0;left:0;opacity:0;font-size:13px;min-width:100%;max-width:100%;padding:2em 1em;text-align:center;color:rgba(0,0,0,.9);line-height:150%}.dropzone .dz-preview .dz-details .dz-size{margin-bottom:1em;font-size:16px}.dropzone .dz-preview .dz-details .dz-filename{white-space:nowrap}.dropzone .dz-preview .dz-details .dz-filename:hover span{border:1px solid hsla(0,0%,78.4%,.8);background-color:hsla(0,0%,100%,.8)}.dropzone .dz-preview .dz-details .dz-filename:not(:hover){overflow:hidden;text-overflow:ellipsis}.dropzone .dz-preview .dz-details .dz-filename:not(:hover) span{border:1px solid transparent}.dropzone .dz-preview .dz-details .dz-filename span,.dropzone .dz-preview .dz-details .dz-size span{background-color:hsla(0,0%,100%,.4);padding:0 .4em;border-radius:3px}.dropzone .dz-preview:hover .dz-image img{transform:scale(1.05);filter:blur(8px)}.dropzone .dz-preview .dz-image{border-radius:20px;overflow:hidden;width:120px;height:120px;position:relative;display:block;z-index:10}.dropzone .dz-preview .dz-image img{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{animation:passing-through 3s cubic-bezier(.77,0,.175,1)}.dropzone .dz-preview.dz-error .dz-error-mark{opacity:1;animation:slide-in 3s cubic-bezier(.77,0,.175,1)}.dropzone .dz-preview .dz-error-mark,.dropzone .dz-preview .dz-success-mark{pointer-events:none;opacity:0;z-index:500;position:absolute;display:block;top:50%;left:50%;margin-left:-27px;margin-top:-27px;background:rgba(0,0,0,.8);border-radius:50%}.dropzone .dz-preview .dz-error-mark svg,.dropzone .dz-preview .dz-success-mark svg{display:block;width:54px;height:54px;fill:#fff}.dropzone .dz-preview.dz-processing .dz-progress{opacity:1;transition:all .2s linear}.dropzone .dz-preview.dz-complete .dz-progress{opacity:0;transition:opacity .4s ease-in}.dropzone .dz-preview:not(.dz-processing) .dz-progress{animation:pulse 6s ease infinite}.dropzone .dz-preview .dz-progress{opacity:1;z-index:1000;pointer-events:none;position:absolute;height:20px;top:50%;margin-top:-10px;left:15%;right:15%;border:3px solid rgba(0,0,0,.8);background:rgba(0,0,0,.8);border-radius:10px;overflow:hidden}.dropzone .dz-preview .dz-progress .dz-upload{background:#fff;display:block;position:relative;height:100%;width:0;transition:width .3s ease-in-out;border-radius:17px}.dropzone .dz-preview.dz-error .dz-error-message{display:block}.dropzone .dz-preview.dz-error:hover .dz-error-message{opacity:1;pointer-events:auto}.dropzone .dz-preview .dz-error-message{pointer-events:none;z-index:1000;position:absolute;display:block;display:none;opacity:0;transition:opacity .3s ease;border-radius:8px;font-size:13px;top:130px;left:-10px;width:140px;background:#b10606;padding:.5em 1em;color:#fff}.dropzone .dz-preview .dz-error-message:after{content:"";position:absolute;top:-6px;left:64px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #b10606}
|
1
public/build/app.14c7e47f.js
Normal file
1
public/build/app.14c7e47f.js
Normal file
File diff suppressed because one or more lines are too long
1
public/build/ckeditor/contents.css
Normal file
1
public/build/ckeditor/contents.css
Normal file
@ -0,0 +1 @@
|
|||||||
|
body{font-family:sans-serif,Arial,Verdana,Trebuchet MS,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:12px;color:#333;background-color:#fff;margin:20px}.cke_editable{font-size:13px;line-height:1.6;word-wrap:break-word}blockquote{font-style:italic;font-family:Georgia,Times,Times New Roman,serif;padding:2px 0;border:0 solid #ccc}.cke_contents_ltr blockquote{padding-left:20px;padding-right:8px;border-left-width:5px}.cke_contents_rtl blockquote{padding-left:8px;padding-right:20px;border-right-width:5px}a{color:#0782c1}dl,ol,ul{*margin-right:0;padding:0 40px}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.2}hr{border:0;border-top:1px solid #ccc}img.right{float:right;margin-left:15px}img.left,img.right{border:1px solid #ccc;padding:5px}img.left{float:left;margin-right:15px}pre{white-space:pre-wrap;word-wrap:break-word;-moz-tab-size:4;tab-size:4}.marker{background-color:#ff0}span[lang]{font-style:italic}figure{text-align:center;outline:1px solid #ccc;background:rgba(0,0,0,.05);padding:10px;margin:10px 20px;display:inline-block}figure>figcaption{text-align:center;display:block}a>img{padding:1px;margin:1px;border:none;outline:1px solid #0782c1}.code-featured{border:5px solid red}.math-featured{padding:20px;box-shadow:0 0 2px #c80000;background-color:rgba(255,0,0,.05);margin:10px}.image-clean{border:0;background:none;padding:0}.image-clean>figcaption{font-size:.9em;text-align:right}.image-grayscale{background-color:#fff;color:#666}.image-grayscale img,img.image-grayscale{filter:grayscale(100%)}.embed-240p{max-width:426px;max-height:240px;margin:0 auto}.embed-360p{max-width:640px;max-height:360px;margin:0 auto}.embed-480p{max-width:854px;max-height:480px;margin:0 auto}.embed-720p{max-width:1280px;max-height:720px;margin:0 auto}.embed-1080p{max-width:1920px;max-height:1080px;margin:0 auto}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user