306 Commits

Author SHA1 Message Date
4959a10857 Merge branch 'master' into dist/envole/6/master 2022-07-06 11:18:42 +02:00
d0d8183f7a ne plus concidèrer les profils scribe comme des groupes de travail 2022-07-06 11:11:59 +02:00
d42fdbfedd Merge branch 'master' into dist/envole/6/master 2022-05-10 09:32:08 +02:00
4f2fa1db4f Synchronisation scribe niveaux + eleves classes + profs classes (ref #34132) 2022-05-10 09:12:21 +02:00
75d935aa57 Synchronisation scribe niveaux + eleves classes + profs classes (ref #34132) 2022-05-09 13:51:33 +02:00
27e23fffaf ne pas afficher le clic sonde sur les app autogénérées par envole (fixes #33944) 2022-05-09 11:43:01 +02:00
70e2d49e7c Merge branch 'master' into dist/envole/6/master 2022-03-03 11:55:03 +01:00
df8bcfc1a1 ajout de l'item cdt et sa synchronisation poshprofil 2022-03-03 11:51:43 +01:00
666b90d513 Merge branch 'master' into dist/envole/6/master 2022-02-21 14:02:28 +01:00
2b86aa4e2f appel sonde sur click 2022-02-18 09:57:20 +01:00
cbae74f041 Merge branch 'master' into dist/envole/6/master 2022-02-04 13:34:04 +01:00
57f96132f4 mise en place jquerydate sur le formulaire des annonces (ref #33524) 2022-02-04 13:14:52 +01:00
ecbaed5c85 Merge branch 'master' into dist/envole/6/master 2022-02-04 11:33:43 +01:00
aac017c263 hauteur auto sur les images insérées dans les alertes (ref #33523) 2022-02-04 10:55:33 +01:00
e2d9380f65 Merge branch 'master' into dist/envole/6/master 2022-02-03 16:53:55 +01:00
21fc95f71e Merge branch 'master' into dist/envole/6/master 2022-02-03 16:49:54 +01:00
702d060503 optiomisation sur annonces lues / non lues cas annonces visiteur (ref #33746) 2022-02-03 16:34:44 +01:00
c6d349696e optiomisation sur annonces lues / non lues (ref #33746) 2022-02-03 16:30:40 +01:00
3818a38106 Merge branch 'master' into dist/envole/6/master 2021-12-08 11:33:34 +01:00
d0d933f28e dicos ajout service wssninegate 2021-12-08 11:16:56 +01:00
d155d5331f Merge branch 'master' into dist/envole/6/master 2021-12-08 09:39:19 +01:00
1249b7be21 ajout variable activer_revprox si non existante 2021-12-08 09:23:12 +01:00
f535e165ef Merge branch 'master' into dist/envole/6/master 2021-12-07 17:06:43 +01:00
6081e6a692 passer par un alias pour les websockets 2021-12-07 16:47:22 +01:00
fce9842064 Merge branch 'master' into dist/envole/6/master 2021-12-06 11:56:04 +01:00
01da55e6d6 gestion copier / coller des images dans les editeurs de texte (fixes #33465) 2021-12-06 11:40:02 +01:00
95e51c4d53 ne plus bloquer bundle edispatcher si masteridentity != SSO (fixes #33444) 2021-12-06 10:41:18 +01:00
9157b78671 user ldap reader si masteridentity != SQL 2021-12-03 11:44:34 +01:00
fec7eff6c5 Merge branch 'master' into dist/envole/6/master 2021-10-18 15:10:39 +02:00
e66f8999ed mise en forme de la zone username dans la barre de navigation (fixes #32780) 2021-10-18 14:29:41 +02:00
41915a0547 correction orthographe (fixes #33045) 2021-10-18 14:13:45 +02:00
c7586c86d5 ajout du titre de l'enregistrement dans le titre de la page modifiée (fixes #33046) 2021-10-18 14:08:53 +02:00
6a8e102fc6 modification style (fixes #33143) 2021-10-18 13:37:10 +02:00
e41093d3b9 Merge branch 'master' into dist/envole/6/master 2021-10-07 10:54:33 +02:00
eedaa86dcf rapatrier les variables eoledb dans la famille eoledb (ref #33188) 2021-10-07 10:52:59 +02:00
91d2febf2e Merge branch 'master' into dist/envole/6/master 2021-09-14 11:45:01 +02:00
1d448e70c7 autocreate user (fixes #33139) 2021-09-14 11:40:18 +02:00
0fc2346281 Merge branch 'master' into dist/envole/6/master 2021-08-27 10:59:48 +02:00
63c710c4fd correctif si groupe shared sans page 2021-08-27 10:02:15 +02:00
fbb5a4aca6 Merge branch 'master' into dist/envole/6/master 2021-07-20 10:21:52 +02:00
ac37691536 [THEME ACREUNION] mode reduit affichage username 2021-07-14 07:50:54 +04:00
13e5bfb428 [THEME ACREUNION] Adaptation des couleurs 2021-07-12 20:43:57 +04:00
98718ccc1e Merge branch 'master' into dist/envole/6/master 2021-07-12 16:35:55 +02:00
ed75b5f5c3 fixes #31884 , faire en sortes sur les urls soient compatibles https et http 2021-07-12 18:10:11 +04:00
5147a2b105 Merge branch 'master' into dist/envole/6/master 2021-07-12 15:51:41 +02:00
f361110766 Merge branch 'master' of https://dev-eole.ac-dijon.fr/git/ninegate 2021-07-12 15:48:34 +02:00
a5fbe134cc les alertes sans date de fin ne peuvent pas etre archivées (fixes #32914) 2021-07-12 15:47:57 +02:00
7dc7d708d3 [THEME ACREUNION] couleur du nom de l'utilisateur adapté au fond blanc du theme 2021-07-12 17:18:17 +04:00
9a260e6ae5 Merge branch 'master' into dist/envole/6/master 2021-07-12 12:49:59 +02:00
7ecfa45d75 mise en forme du bage item 2021-07-12 12:46:55 +02:00
7380823897 config typesso client ou proxy (fixes #32904) 2021-07-12 10:32:14 +02:00
8b794e8aa1 Merge branch 'master' into dist/envole/6/master 2021-07-05 14:41:20 +02:00
911bea2b5d correction orthographe (fixes #32829 2021-07-05 14:30:46 +02:00
13c24bd1ee ajout du param timerefreshnotif (fixes #32871) 2021-07-05 14:26:51 +02:00
fac25a036e passage en cas proxy pour imapunread 2021-07-05 14:09:54 +02:00
d61c2fc94d passage en cas proxy pour imapunread 2021-07-05 14:07:18 +02:00
f228f01c62 Merge branch 'master' into dist/envole/6/master 2021-07-05 10:47:55 +02:00
3e9e581116 prise en compte des usage dnma accueil 2021-07-05 10:44:59 +02:00
14283a731e correctif sur admin calendar 2021-06-30 09:29:31 +02:00
de04ab9bdb Merge branch 'master' into dist/envole/6/master 2021-06-17 15:08:49 +02:00
5271f992a7 replacer les modifs écrasées 2021-06-17 15:01:57 +02:00
729ed9fba9 Merge branch 'master' into dist/envole/6/master 2021-06-15 10:21:33 +02:00
e3188b1732 correctif style 2021-06-15 10:14:47 +02:00
39f45ab8b8 resolution conflit 2021-06-11 15:38:41 +02:00
fa62b8aa36 preference utilisateur modedesktop (fixes #32763) 2021-06-11 15:31:33 +02:00
3ba041b207 ajout du nom de la page dans la barre de navigation (fixes #32762) 2021-06-11 14:31:01 +02:00
465bfd0374 cacher les groupes aux users (fixes #32271) 2021-06-11 14:07:10 +02:00
2a2dfc55bb modification orthorgraphe (fixes #32760) 2021-06-11 11:29:18 +02:00
24e2fb3c2e ajout prenom nom dans la bannière (fixes #32761) 2021-06-11 10:26:00 +02:00
ebd9a5a0a6 modification subtitle content items (fixes #32764) 2021-06-11 09:34:04 +02:00
16eb147e5b ajout système de badge sur les items + init badge sur l'item roundcube (fixes #32115) 2021-06-10 16:18:03 +02:00
e4cb40fae8 modif strucutre pour badgeurl (ref #32115) 2021-06-10 11:43:09 +02:00
9d40aa6575 scinder les annonces à publier en ligne archivées (fixes #32602) 2021-06-10 11:26:55 +02:00
4399db9498 alerte = permettre aux users de masquer à oui par défaut (fixes #32749) 2021-06-10 10:43:36 +02:00
295c4bd4f7 prise en compte du port de l'ead configuré dans genconfig (fixes #32749) 2021-06-10 10:29:44 +02:00
27bcb3fbe7 ajout du theme white (fixes #32202) 2021-06-10 09:53:17 +02:00
aef67571f6 Merge branch 'master' into dist/envole/6/master 2021-05-21 11:06:50 +02:00
d3c8a95336 Merge branch 'master' of https://dev-eole.ac-dijon.fr/git/ninegate 2021-05-21 11:01:05 +02:00
2679d8f629 redirection vers le groupe après signature de la charte 2021-05-21 11:00:34 +02:00
2ec1ae6824 Merge branch 'master' into dist/envole/6/master 2021-05-17 11:17:31 +02:00
8ed97d8d96 fixes #32513 mise a jour entité datasource username.length=128 2021-05-17 10:16:29 +04:00
0ab5a40d98 Merge branch 'master' into dist/envole/6/master 2021-05-06 13:47:42 +02:00
2b4d048f9d enlarge your attributes 2021-05-06 13:41:33 +02:00
edd59cd60c Merge branch 'master' into dist/envole/6/master 2021-05-04 11:08:09 +02:00
20c131db2e desactivation possible des notifications de groupe de travail 2021-05-04 11:03:11 +02:00
da0f0ad0f3 Merge branch 'master' into dist/envole/6/master 2021-04-27 10:13:40 +02:00
72c5e49cf6 mise à plat valeur obligatoire sur fiche user 2021-04-27 10:09:19 +02:00
996651ca0e Merge branch 'master' into dist/envole/6/master 2021-04-26 15:43:33 +02:00
635f44a894 prise en compte des param des champs users dans la vue user et l'appartenance aux groupes 2021-04-26 15:38:56 +02:00
a78b2051f1 Merge branch 'master' into dist/envole/6/master 2021-04-21 09:18:28 +02:00
33841459d9 bug ajout fav 2021-04-21 09:14:21 +02:00
d61216216a Merge branch 'master' into dist/envole/6/master 2021-04-08 10:31:36 +02:00
150e624fca bug déplacement fichiers 2021-04-08 10:28:24 +02:00
1381e4f7be Merge branch 'master' into dist/envole/6/master 2021-04-02 14:39:51 +02:00
f621ebea82 resolution bug 2021-04-02 14:36:13 +02:00
1d490ae066 Merge branch 'master' into dist/envole/6/master 2021-04-02 11:12:10 +02:00
ccdacac7c5 erreur javascript sur function replaceall 2021-04-02 11:09:18 +02:00
a2a54c3501 Merge branch 'master' into dist/envole/6/master 2021-04-02 10:19:34 +02:00
0805750c33 redirect sur group d'invitation (ref #231) 2021-04-02 10:07:45 +02:00
ff7183ef5b modificatio msg confirmation page bookmark (ref #251) 2021-04-01 17:13:16 +02:00
67d026a8a0 adaption registration (ref #220) 2021-04-01 16:38:00 +02:00
cf255183bd modification icon et toolip du widget calendar (ref #248) 2021-04-01 16:18:59 +02:00
743ffa7910 titre de la page dans le widget info group (ref #249) 2021-04-01 15:25:00 +02:00
261129755d modif label (ref #223) 2021-04-01 13:04:15 +02:00
c150c15bc7 trie par lastname (ref #237) 2021-04-01 11:14:44 +02:00
3fc0a1b809 suppression du message formulaire (ref #240) 2021-04-01 10:53:30 +02:00
2d88133e60 Merge branch 'master' into dist/envole/6/master 2021-03-29 16:10:28 +02:00
1209c90388 modification infobulle (ref #240) 2021-03-29 16:07:43 +02:00
fdb7c9850e Merge branch 'master' into dist/envole/6/master 2021-03-29 09:22:37 +02:00
d65a003422 maj label config 2021-03-29 09:19:48 +02:00
3b6095cec7 Merge branch 'master' into dist/envole/6/master 2021-03-26 10:40:39 +01:00
04272afa3d partage d'event uniquement sur les groupes gestionnaire 2021-03-26 10:38:03 +01:00
75925d4969 Merge branch 'master' into dist/envole/6/master 2021-03-26 09:52:00 +01:00
4aa766759c mise en configuration des labels favoris et mes ressources 2021-03-26 09:46:00 +01:00
dbade2fce4 mise en place d'un systeme de commande local 2021-03-26 09:26:52 +01:00
ae4debf6b9 revu des permissions (ref #223) 2021-03-25 15:56:36 +01:00
74c0a44f56 Merge branch 'master' into dist/envole/6/master 2021-03-24 09:21:53 +01:00
4ecfa70106 utilisation de getvar pour récupere eolesso_cas_folder (ref #31446)
(commit ré-appliqué suite à une régression)
2021-03-23 16:39:32 +01:00
dd46b9ba01 clonage d'evenement (ref #244) 2021-03-23 14:42:29 +01:00
5aefa64fce permettre le reset de password meme si inscription non activée (ref #246) 2021-03-19 15:37:49 +01:00
9a8105edb9 préciser le job en erreur (ref #245) 2021-03-19 15:33:43 +01:00
26d31f4fce remplacer la liste des destinataires par select2 2021-03-19 15:27:59 +01:00
0102239e09 système de suivi des invitations à un groupe (ref #221) 2021-03-19 13:29:03 +01:00
e9242e4b0c lié les taches aux agendas (ref #222) 2021-03-18 17:14:05 +01:00
0886f96cf4 ajout du nom du calendrier sur le widget calendrier (ref #232) 2021-03-18 16:25:49 +01:00
ecfce10e3b ajustement sur le formulaire d'inscription (ref #220) 2021-03-18 16:18:24 +01:00
cf85ca9023 export groupe (ref #234) 2021-03-18 15:16:06 +01:00
8738cdeec5 ajout groupes et compteur visite sur export user (ref #233) 2021-03-16 11:51:26 +01:00
569f3a5860 preselection d'un nouveau avatar 2021-03-16 11:13:07 +01:00
4c707c5899 mise à plat des règles de désinscription (ref #235) 2021-03-16 10:37:36 +01:00
b2c78b523a copy des notes registration dans user (ref #241) 2021-03-15 17:07:48 +01:00
57606ce0d5 retour de l'icone de déscription des groupes ouvert (ref #235) 2021-03-15 16:55:15 +01:00
490d8112fa ajout d'une note administrateur dans les inscriptions 2021-03-15 16:19:40 +01:00
54158df23f mise à jour lien d'inscription dans un groupe (ref #228) 2021-03-15 15:58:19 +01:00
81f4614680 résolution anomalies widget fichier (ref #239) 2021-03-15 15:03:29 +01:00
49e2527337 renommer fichier dans widget file (ref #240) 2021-03-15 14:19:34 +01:00
3438392632 gestion poubelle sur widget fichier (ref #242) 2021-03-15 13:34:47 +01:00
788e0f511f Merge branch 'master' into dist/envole/6/master 2021-03-12 16:55:26 +01:00
1461ceca06 Merge branch 'master' into dist/envole/6/master 2021-03-12 11:52:45 +01:00
016f09983f Merge branch 'master' of https://dev-eole.ac-dijon.fr/git/ninegate 2021-03-12 11:51:43 +01:00
27ab0758e7 correctif fgheader 2021-03-12 11:48:26 +01:00
cf91d5c9cd api edispatcher/api/checkuser (ref #31889) 2021-03-12 11:50:11 +04:00
6d04f2a08e api edispatcher/api/applications (fixes #31889) 2021-03-11 16:17:32 +04:00
4328e7b7c8 Merge branch 'master' into dist/envole/6/master 2021-03-11 11:09:36 +01:00
0ceffe2fa3 fixes #31884 url des icones de catégories d'annonces préfixées par // plutot que https:// 2021-03-11 11:44:38 +04:00
b272e50f88 fixes #31883 les annonces avec la categorie 'sans categorie' sont dorénavant correctement remontées par l'api edispatcher/messages 2021-03-11 11:11:11 +04:00
9433a39649 Merge branch 'master' into dist/envole/6/master 2021-03-10 16:45:35 +01:00
eb3ed083e7 [api edispatcher] fix #31881 2021-03-10 18:12:13 +04:00
d0a7f05f50 fix typo 2021-03-10 17:41:27 +04:00
68410eeb34 api edispatcher/mxservices reponse correcte en cas d'erreur (fixes #31881) 2021-03-10 17:07:11 +04:00
224cc87e77 fix fa icon categorie MesRessources api/edispatcher/items 2021-03-09 13:51:05 +04:00
4247ead6bd Merge branch 'master' into dist/envole/6/master 2021-03-09 10:31:18 +01:00
3389eecb74 Merge branch 'master' into dist/envole/6/master 2021-03-09 10:12:12 +01:00
ee4c59a859 Merge branch 'master' into dist/envole/6/master 2021-03-08 16:01:39 +01:00
f2df26e0d9 Merge branch 'master' into dist/envole/6/master 2021-03-08 15:46:37 +01:00
429ce0ba1f Merge branch 'master' into dist/envole/6/master 2021-03-08 15:29:11 +01:00
4314cec399 Merge branch 'master' into dist/envole/6/master 2021-03-08 10:50:49 +01:00
aaaf22e3ba Merge branch 'master' into dist/envole/6/master 2021-03-05 17:00:51 +01:00
23219dd58e Merge branch 'master' into dist/envole/6/master 2021-03-05 16:27:00 +01:00
a11928569b Merge branch 'master' into dist/envole/6/master 2021-03-05 15:22:17 +01:00
b40e3c4eb8 Merge branch 'master' into dist/envole/6/master 2021-03-04 17:04:20 +01:00
b2d20b59cc Merge branch 'master' into dist/envole/6/master 2021-03-04 13:48:06 +01:00
0ed4fec378 Merge branch 'master' into dist/envole/6/master 2021-03-03 18:08:01 +01:00
e1458a0cac Merge branch 'master' into dist/envole/6/master 2021-03-03 17:36:12 +01:00
c17677e871 Merge branch 'master' into dist/envole/6/master 2021-03-03 16:39:00 +01:00
0904f306ce Merge branch 'master' into dist/envole/6/master 2021-02-24 17:01:12 +01:00
69848cf0cf Merge branch 'master' into dist/envole/6/master 2021-02-24 10:55:33 +01:00
8da037fd77 Merge branch 'master' into dist/envole/6/master 2021-02-23 16:35:25 +01:00
9cae1480bb Merge branch 'master' into dist/envole/6/master 2021-02-23 13:45:47 +01:00
34123aeb58 Merge branch 'master' into dist/envole/6/master 2021-02-23 13:29:08 +01:00
83eac6491c Merge branch 'master' into dist/envole/6/master 2021-02-19 13:01:30 +01:00
824a23e172 Merge branch 'master' into dist/envole/6/master 2021-02-17 10:55:58 +01:00
36a9b2e2bd Merge branch 'master' into dist/envole/6/master 2021-02-09 16:48:32 +01:00
3f9bd75d82 Merge branch 'master' into dist/envole/6/master 2021-02-09 09:53:00 +01:00
2bb89b008d Merge branch 'master' into dist/envole/6/master 2021-02-03 10:52:03 +01:00
c82afe13de Merge branch 'master' into dist/envole/6/master 2021-02-02 11:23:14 +01:00
3442eb0d12 Merge branch 'master' into dist/envole/6/master 2021-02-01 11:35:39 +01:00
30a89a23b8 Merge branch 'master' into dist/envole/6/master 2021-02-01 11:08:39 +01:00
0afd32a4e6 Merge branch 'master' into dist/envole/6/master 2021-01-28 10:30:36 +01:00
6890d67bba Merge branch 'master' into dist/envole/6/master 2021-01-27 15:42:12 +01:00
e684ee6701 Merge branch 'master' into dist/envole/6/master 2021-01-27 10:48:20 +01:00
031ca517ed Merge branch 'master' into dist/envole/6/master 2021-01-25 15:02:36 +01:00
ff9d07e0cb Merge branch 'master' into dist/envole/6/master 2021-01-21 17:32:11 +01:00
2077f643ab Merge branch 'master' into dist/envole/6/master 2021-01-21 16:03:06 +01:00
c88666dc9f resolution conflic 2021-01-21 15:23:45 +01:00
4a92ef8dbb Merge branch 'master' into dist/envole/6/master 2021-01-20 16:30:05 +01:00
92923badd8 prise en compte du logrotate dans le paquet 2021-01-20 13:23:15 +01:00
de2bf97fef Merge branch 'master' into dist/envole/6/master 2021-01-13 10:38:50 +01:00
258a7089d1 Merge branch 'master' into dist/envole/6/master 2021-01-13 09:18:05 +01:00
907ea53eb1 Merge branch 'master' into dist/envole/6/master 2021-01-08 15:49:44 +01:00
d69e869c10 Merge branch 'master' into dist/envole/6/master 2021-01-08 14:55:28 +01:00
ff71bfb5a4 Merge branch 'master' into dist/envole/6/master 2021-01-05 10:06:37 +01:00
d2dbe98e64 Merge branch 'master' into dist/envole/6/master 2020-12-16 11:55:19 +01:00
cce91c421a Merge branch 'master' into dist/envole/6/master 2020-12-16 11:14:37 +01:00
5dd372f2a2 Merge branch 'master' into dist/envole/6/master 2020-12-16 10:24:08 +01:00
0dba8c4dc1 resolve conflic 2020-12-15 16:37:58 +01:00
8dc2d81ab3 Merge branch 'master' into dist/envole/6/master 2020-11-19 15:16:20 +01:00
0885efd1f4 Merge branch 'master' into dist/envole/6/master 2020-11-06 14:10:45 +01:00
b648137665 Merge branch 'master' into dist/envole/6/master 2020-10-27 09:05:42 +01:00
cd4472ee71 Merge branch 'master' into dist/envole/6/master 2020-10-23 14:28:03 +02:00
2c8cc7a987 Merge branch 'master' into dist/envole/6/master 2020-10-23 14:03:55 +02:00
f07b95f1e4 Merge branch 'master' into dist/envole/6/master 2020-10-21 15:32:13 +02:00
ae1a97bcbd Merge branch 'master' into dist/envole/6/master 2020-10-19 11:01:12 +02:00
632102c813 Merge branch 'master' into dist/envole/6/master 2020-10-19 10:33:11 +02:00
5326152ff4 Merge branch 'master' into dist/envole/6/master 2020-10-14 09:44:50 +02:00
c02d5f0869 Merge branch 'master' into dist/envole/6/master 2020-10-13 17:40:03 +02:00
6f752a6b44 Merge branch 'master' into dist/envole/6/master 2020-10-13 11:15:45 +02:00
9b6e140808 resolution merge 2020-10-09 15:49:56 +02:00
30e4609f6f Merge branch 'master' into dist/envole/6/master 2020-10-07 11:14:49 +02:00
cc71a435f7 Merge branch 'master' into dist/envole/6/master 2020-10-06 17:12:50 +02:00
d32ded9f5e Merge branch 'master' into dist/envole/6/master 2020-10-01 16:35:39 +02:00
b1d9c2dc63 Merge branch 'master' into dist/envole/6/master 2020-10-01 16:09:55 +02:00
173ceacc8e Merge branch 'master' into dist/envole/6/master 2020-09-30 17:07:13 +02:00
0999f11f8c Merge branch 'master' into dist/envole/6/master 2020-09-29 09:09:32 +02:00
273ce5a3df Merge branch 'master' into dist/envole/6/master 2020-09-24 16:22:59 +02:00
d8be4e06e1 Merge branch 'master' into dist/envole/6/master 2020-09-23 15:30:46 +02:00
d64c20519d Merge branch 'master' into dist/envole/6/master 2020-09-23 14:48:43 +02:00
a2ebec25f8 Merge branch 'master' into dist/envole/6/master 2020-09-21 11:00:22 +02:00
2e5a8d39a5 Merge branch 'master' into dist/envole/6/master 2020-09-18 15:14:50 +02:00
82b329ab8f Merge branch 'master' into dist/envole/6/master 2020-09-17 15:36:41 +02:00
6da8f15c2d Merge branch 'master' into dist/envole/6/master 2020-09-02 16:25:44 +02:00
8659a32942 resolution conflit 2020-09-02 11:48:45 +02:00
68c8d599ff Merge branch 'master' into dist/envole/6/master 2020-07-27 10:19:39 +02:00
95784beed6 Merge branch 'master' into dist/envole/6/master 2020-07-23 10:09:10 +02:00
30eb0d07e2 Merge branch 'master' into dist/envole/6/master 2020-07-22 13:39:52 +02:00
87ef7fb6c7 resolution merge 2020-07-17 16:08:06 +02:00
af5fbf0a6a Merge branch 'master' into dist/envole/6/master 2020-07-15 16:57:37 +02:00
4ae4dabb9f resolv conflict 2020-07-10 12:23:07 +02:00
2392318922 Merge branch 'master' into dist/envole/6/master 2020-07-10 09:37:23 +02:00
5ee9a52554 Merge branch 'master' into dist/envole/6/master 2020-07-07 09:25:12 +02:00
ec6cf7e062 Merge branch 'master' into dist/envole/6/master 2020-07-06 12:00:07 +02:00
5cdd0a6703 Merge branch 'master' into dist/envole/6/master 2020-07-06 11:54:32 +02:00
d1637e4efa Merge branch 'master' into dist/envole/6/master 2020-06-26 15:46:34 +02:00
ba41570721 Merge branch 'master' into dist/envole/6/master 2020-06-26 08:43:25 +02:00
0777934192 Merge branch 'master' into dist/envole/6/master 2020-06-25 13:40:55 +02:00
0a6a5abe38 conflic 2020-06-24 13:46:57 +02:00
220bb795ae Merge branch 'master' into dist/envole/6/master 2020-06-24 12:04:55 +02:00
1877f101ee Merge branch 'master' into dist/envole/6/master 2020-06-24 11:41:37 +02:00
50ae3ed4c4 Merge branch 'master' into dist/envole/6/master 2020-06-24 09:54:52 +02:00
e03af01666 Merge branch 'master' into dist/envole/6/master 2020-06-22 13:32:50 +02:00
36b8cee983 Merge branch 'master' into dist/envole/6/master 2020-06-22 09:49:41 +02:00
286e49653e Merge branch 'master' into dist/envole/6/master 2020-06-18 11:59:09 +02:00
3a0c0c1458 Merge branch 'master' into dist/envole/6/master 2020-06-18 10:59:45 +02:00
58a07356be resol merge 2020-06-17 08:52:17 +02:00
de87ac1261 Merge branch 'master' into dist/envole/6/master 2020-05-27 15:37:14 +02:00
9f99fe2c3f Merge branch 'master' into dist/envole/6/master 2020-05-27 15:34:34 +02:00
2d2d8f0938 Merge branch 'master' into dist/envole/6/master 2020-05-15 16:03:17 +02:00
3f10684027 resolution merge 2020-05-15 15:52:05 +02:00
8fe1009186 Merge branch 'master' into dist/envole/6/master 2020-05-15 15:37:05 +02:00
314ec0e85c Merge branch 'master' into dist/envole/6/master 2020-04-21 12:22:11 +02:00
59e4b0ee28 Merge branch 'master' into dist/envole/6/master 2020-04-20 16:05:30 +02:00
d983e70f1d Merge branch 'master' into dist/envole/6/master 2020-04-20 13:58:46 +02:00
425eeb4f3b Merge branch 'master' into dist/envole/6/master 2020-04-20 11:33:02 +02:00
0cb286080d Merge branch 'master' into dist/envole/6/master 2020-04-20 09:36:38 +02:00
3eedb4d086 Merge branch 'master' into dist/envole/6/master 2020-04-20 08:49:54 +02:00
362047c295 Merge branch 'master' into dist/envole/6/master 2020-04-16 16:11:00 +02:00
f3d465f491 Merge branch 'master' into dist/envole/6/master 2020-03-09 11:29:34 +01:00
189ed35825 Merge branch 'master' into dist/envole/6/master 2020-03-09 09:29:53 +01:00
767dbe7230 Merge branch 'master' into dist/envole/6/master 2020-03-03 10:56:48 +01:00
c74f82e475 Merge branch 'master' into dist/envole/6/master 2020-03-03 10:22:38 +01:00
75e2737524 Merge branch 'master' into dist/envole/6/master 2020-02-28 15:37:42 +01:00
c788b97fca Merge branch 'master' into dist/envole/6/master 2020-02-28 10:58:13 +01:00
c813e78c69 Merge branch 'master' into dist/envole/6/master 2020-02-26 17:41:48 +01:00
e2da7e081f reglage conflit 2020-02-26 10:31:49 +01:00
afaa822d50 conflit 2020-02-13 11:21:06 +01:00
90eb93eebe Merge branch 'master' into dist/envole/6/master 2020-02-13 09:39:48 +01:00
03526d3374 Merge branch 'master' into dist/envole/6/master 2020-02-12 09:45:35 +01:00
bb77cc0ea0 Merge branch 'master' into dist/envole/6/master 2020-02-10 10:52:24 +01:00
5adab0951c Merge branch 'master' into dist/envole/6/master 2020-02-10 10:33:31 +01:00
fc06da09c9 Merge branch 'master' into dist/envole/6/master 2020-02-10 09:52:42 +01:00
743e9b6d3b Merge branch 'master' into dist/envole/6/master 2020-01-16 16:21:14 +01:00
bc2e2b4e4c Merge branch 'master' into dist/envole/6/master 2020-01-13 15:47:48 +01:00
d649c11821 Merge branch 'master' into dist/envole/6/master 2020-01-08 15:45:34 +01:00
61c8ad37fd Merge branch 'master' into dist/envole/6/master 2020-01-08 15:27:07 +01:00
a97ba39dbd Merge branch 'master' into dist/envole/6/master 2020-01-06 09:21:19 +01:00
3e35acb028 Merge branch 'master' into dist/envole/6/master 2019-12-19 14:13:03 +01:00
5b14604d9c Merge branch 'master' into dist/envole/6/master 2019-12-18 14:54:25 +01:00
81740cd4e5 Merge branch 'master' into dist/envole/6/master 2019-12-16 17:21:35 +01:00
8211c08403 Merge branch 'master' into dist/envole/6/master 2019-12-16 17:20:11 +01:00
1acce9d3fd Merge branch 'master' into dist/envole/6/master 2019-12-16 17:14:52 +01:00
742383206e Merge branch 'master' into dist/envole/6/master 2019-12-16 17:04:33 +01:00
f54efc703c Merge branch 'master' into dist/envole/6/master 2019-12-13 15:46:30 +01:00
d31d2d8628 Merge branch 'master' into dist/envole/6/master 2019-12-09 13:37:56 +01:00
8e00e5765a Merge branch 'master' into dist/envole/6/master 2019-12-06 11:21:00 +01:00
5f933a67b9 Merge branch 'master' into dist/envole/6/master 2019-12-06 10:59:04 +01:00
72ad84e1b7 Merge branch 'master' into dist/envole/6/master 2019-12-05 14:17:49 +01:00
0c099b0784 Merge branch 'master' into dist/envole/6/master 2019-11-21 10:42:56 +01:00
99f29975d8 resoulion merge 2019-11-20 10:02:37 +01:00
f141b15e48 dep 2019-11-19 11:00:44 +01:00
7416dfaa3e Merge branch 'master' into dist/envole/6/master 2019-11-19 10:28:59 +01:00
03e0a1dc7c Merge branch 'master' into dist/envole/6/master 2019-11-19 10:26:14 +01:00
fb5e3c72ee dependance sur envole-dependances 2019-11-19 10:25:56 +01:00
a0bb903635 ajout php-imagick en dépendance 2019-11-18 16:34:51 +01:00
6ad1eb5569 résolution conflit 2019-11-15 11:45:54 +01:00
9cbcdd28b9 déclaration du proxy en http et non plus en tcp (ref #29) 2019-10-29 16:16:41 +01:00
2b1625b5f8 Merge branch 'master' into dist/envole/6/master 2019-10-29 09:45:34 +01:00
28e9c37e48 Merge branch 'master' into dist/envole/6/master 2019-10-23 10:44:18 +02:00
2262bebcda Merge branch 'master' into dist/envole/6/master 2019-10-18 14:10:19 +02:00
f0ae7eb4f4 Merge branch 'master' into dist/envole/6/master 2019-10-18 13:56:17 +02:00
df29e2ca71 Merge branch 'master' into dist/envole/6/master 2019-10-16 13:55:20 +02:00
ef0d452bc2 Merge branch 'master' into dist/envole/6/master 2019-10-09 13:49:02 +02:00
ab2129de6e Merge branch 'master' into dist/envole/6/master 2019-10-04 11:40:46 +02:00
b14a2b3434 dep sur composer et envole-themes 2019-09-27 13:46:38 +02:00
faf244cf06 Merge branch 'master' into dist/envole/6/master 2019-09-27 13:39:57 +02:00
1acf74126e Merge branch 'master' into dist/envole/6/master 2019-09-25 14:11:13 +02:00
7ebc37268c repertoire debian 2019-09-25 14:08:13 +02:00
197 changed files with 4622 additions and 1566 deletions

1
debian/compat vendored Normal file
View File

@ -0,0 +1 @@
7

24
debian/control vendored Normal file
View File

@ -0,0 +1,24 @@
Source: eole-ninegate
Section: web
Priority: optional
Maintainer: Equipe Envole <eole@ac-dijon.fr>
Build-Depends: debhelper (>= 7.0.50)
Standards-Version: 3.8.4
Homepage: http://eole.orion.education.fr/diff/
Vcs-Git: http://dev-eole.ac-dijon.fr/git/ninegate
Vcs-Browser: http://dev-eole.ac-dijon.fr/projects/ninegate/repository
Package: ninegate-sso
Architecture: all
Depends: ${misc:Depends}, eole-sso
Description: Filtre SSO pour ninegate "EOLE".
Package: eole-ninegate
Architecture: all
Depends: ${misc:Depends}, eole-web (>= 2.6.1), ninegate-sso, eole-envole-dependances
Description: Eolisation de l'application ninegate.
Package: ninegate-apps
Architecture: all
Depends: ${misc:Depends}, eole-web-pkg (>= 2.6.1), envole-dependances-apps
Description: Sources pour ninegate "EOLE".

44
debian/copyright vendored Normal file
View File

@ -0,0 +1,44 @@
Format: http://dep.debian.net/deps/dep5
Upstream-Name: {PROJECT}
Source: {URL}
Files: *
Copyright: YEAR {UPSTREAM} {AUTHOR} <{MAIL}>
License: {UPSTREAM LICENSE}
Files: debian/*
Copyright: 2012 Équipe EOLE <eole@ac-dijon.fr>
License: CeCILL-2
License: {UPSTREAM LICENSE}
{TEXT OF THE LICENSE}
License: CeCILL-2
This software is governed by the CeCILL-2 license under French law and
abiding by the rules of distribution of free software. You can use,
modify and or redistribute the software under the terms of the CeCILL-2
license as circulated by CEA, CNRS and INRIA at the following URL
"http://www.cecill.info";.
.
As a counterpart to the access to the source code and rights to copy,
modify and redistribute granted by the license, users are provided only
with a limited warranty and the software's author, the holder of the
economic rights, and the successive licensors have only limited
liability.
.
In this respect, the user's attention is drawn to the risks associated
with loading, using, modifying and/or developing or reproducing the
software by the user in light of its specific status of free software,
that may mean that it is complicated to manipulate, and that also
therefore means that it is reserved for developers and experienced
professionals having in-depth computer knowledge. Users are therefore
encouraged to load and test the software's suitability as regards their
requirements in conditions enabling the security of their systems and/or
data to be ensured and, more generally, to use and operate it in the
same conditions as regards security.
.
The fact that you are presently reading this means that you have had
knowledge of the CeCILL-2 license and that you accept its terms.
.
On Eole systems, the complete text of the CeCILL-2 License can be found
in '/usr/share/common-licenses/CeCILL-2-en'.

1
debian/eole-ninegate.install vendored Normal file
View File

@ -0,0 +1 @@
usr/share/eole

3
debian/gbp.conf vendored Normal file
View File

@ -0,0 +1,3 @@
# Set per distribution debian tag
[DEFAULT]
debian-tag = debian/envole/%(version)s

2
debian/ninegate-apps.install vendored Normal file
View File

@ -0,0 +1,2 @@
var/www/html
etc

1
debian/ninegate-sso.install vendored Normal file
View File

@ -0,0 +1 @@
usr/share/sso

8
debian/rules vendored Executable file
View File

@ -0,0 +1,8 @@
#!/usr/bin/make -f
# -*- makefile -*-
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
%:
dh $@

1
debian/source/format vendored Normal file
View File

@ -0,0 +1 @@
3.0 (native)

View File

@ -2,6 +2,7 @@
<creole> <creole>
<files> <files>
<file filelist='ninegate' name='/etc/eole/eole-db.d/ninegate-db.yml' rm='True' mkdir='True'/> <file filelist='ninegate' name='/etc/eole/eole-db.d/ninegate-db.yml' rm='True' mkdir='True'/>
<file filelist='ninegate_nginx' name='/etc/nginx/web.d/ninegate.conf' source='ninegate-nginx.conf' rm='True' mkdir='True' />
</files> </files>
<containers> <containers>
@ -9,6 +10,7 @@
<package>ninegate-apps</package> <package>ninegate-apps</package>
<file filelist='ninegate' name='/etc/apache2/sites-available/ninegate' source='ninegate-apache.conf' rm="True"/> <file filelist='ninegate' name='/etc/apache2/sites-available/ninegate' source='ninegate-apache.conf' rm="True"/>
<file filelist='ninegate' name='/lib/systemd/system/wssninegate.service' source='ninegate.service'/>
<file filelist="ninegate" name="/var/www/html/ninegate/app/config/parameters.yml" source="ninegate-parameters.yml" rm="True"/> <file filelist="ninegate" name="/var/www/html/ninegate/app/config/parameters.yml" source="ninegate-parameters.yml" rm="True"/>
<file filelist="ninegate" name="/var/www/html/ninegate/app/config/template.yml" source="ninegate-template.yml" rm="True"/> <file filelist="ninegate" name="/var/www/html/ninegate/app/config/template.yml" source="ninegate-template.yml" rm="True"/>
<file filelist="ninegate" name="/var/www/html/ninegate/scripts/ninegate-postservice-00.sh" source="ninegate-postservice-00.sh" rm="True" mode="700" /> <file filelist="ninegate" name="/var/www/html/ninegate/scripts/ninegate-postservice-00.sh" source="ninegate-postservice-00.sh" rm="True" mode="700" />
@ -18,16 +20,12 @@
<file filelist='ninegate-migration' name='/var/www/html/envole-migration/config/config-db-ninegate.php' source='ninegate-migration.php' mkdir='True'/> <file filelist='ninegate-migration' name='/var/www/html/envole-migration/config/config-db-ninegate.php' source='ninegate-migration.php' mkdir='True'/>
<service method='apache' servicelist='ninegate'>ninegate</service> <service method='apache' servicelist='ninegate'>ninegate</service>
<service servicelist="ninegate">wssninegate</service>
<service_access service='ninegate_websocket'>
<port port_type="SymLinkOption">ninegate_websocket_portexterne</port>
</service_access>
</container> </container>
</containers> </containers>
<variables> <variables>
<family name='Ninegate'> <family name='Ninegate' icon='home'>
<variable type='oui/non' name='activer_cadolesldap' description='Activer Annuaire Cadoles' hidden='True' exists='False'/> <variable type='oui/non' name='activer_cadolesldap' description='Activer Annuaire Cadoles' hidden='True' exists='False'/>
<variable type='string' name='cadolesldap_pwdadmin' description="Mot de passe du compte admin durant l'instance" hidden='True' exists='False'/> <variable type='string' name='cadolesldap_pwdadmin' description="Mot de passe du compte admin durant l'instance" hidden='True' exists='False'/>
<variable type='string' name='cadolesldap_organization' description="Nom de l'organisation principale" hidden='True' exists='False'/> <variable type='string' name='cadolesldap_organization' description="Nom de l'organisation principale" hidden='True' exists='False'/>
@ -39,6 +37,7 @@
<variable name="ninegate_test_ninegate" type="oui/non" hidden='True' exists='False'><value>non</value></variable> <variable name="ninegate_test_ninegate" type="oui/non" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_adminer" type="oui/non" description="Activer Adminer" hidden='True' exists='False'><value>non</value></variable> <variable name="activer_adminer" type="oui/non" description="Activer Adminer" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_balado" type="oui/non" description="Activer Balado" hidden='True' exists='False'><value>non</value></variable> <variable name="activer_balado" type="oui/non" description="Activer Balado" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_cdt" type="oui/non" description="Activer CdT" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_dokuwiki" type="oui/non" description="Activer Dokuwiki" hidden='True' exists='False'><value>non</value></variable> <variable name="activer_dokuwiki" type="oui/non" description="Activer Dokuwiki" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_econnect" type="oui/non" description="Activer eConnect" hidden='True' exists='False'><value>non</value></variable> <variable name="activer_econnect" type="oui/non" description="Activer eConnect" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_ead_web" type="oui/non" description="Activer EAD" hidden='True' exists='False'><value>non</value></variable> <variable name="activer_ead_web" type="oui/non" description="Activer EAD" hidden='True' exists='False'><value>non</value></variable>
@ -65,6 +64,7 @@
<variable name="activer_roundcube" type="oui/non" description="Activer Roundcube" hidden='True' exists='False'><value>non</value></variable> <variable name="activer_roundcube" type="oui/non" description="Activer Roundcube" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_sacoche" type="oui/non" description="Activer Sacoche" hidden='True' exists='False'><value>non</value></variable> <variable name="activer_sacoche" type="oui/non" description="Activer Sacoche" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_wordpress" type="oui/non" description="Activer Wordpress" hidden='True' exists='False'><value>non</value></variable> <variable name="activer_wordpress" type="oui/non" description="Activer Wordpress" 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_sondepiwik_local" type="oui/non" description="Activer Sonde Piwik" hidden='True' exists='False'><value>non</value></variable> <variable name="activer_sondepiwik_local" type="oui/non" description="Activer Sonde Piwik" hidden='True' exists='False'><value>non</value></variable>
@ -78,8 +78,6 @@
<variable name='ninegate_test_conf_ldap' type='oui/non' hidden='True'/> <variable name='ninegate_test_conf_ldap' type='oui/non' hidden='True'/>
<variable type='oui/non' name='activer_ninegate' description='Activer Ninegate'><value>oui</value></variable> <variable type='oui/non' name='activer_ninegate' description='Activer Ninegate'><value>oui</value></variable>
<variable type='string' name='ninegate_masteridentity' description="Maître de l'Identité" mandatory='True'><value>LDAP</value></variable> <variable type='string' name='ninegate_masteridentity' description="Maître de l'Identité" mandatory='True'><value>LDAP</value></variable>
@ -90,6 +88,7 @@
<variable type='string' name='ninegate_ssoreqgroup' description="Attribut SSO associé à la notion de groupe" mandatory='True'><value>user_groups</value></variable> <variable type='string' name='ninegate_ssoreqgroup' description="Attribut SSO associé à la notion de groupe" mandatory='True'><value>user_groups</value></variable>
<variable type='oui/non' name='ninegate_ssosynchroitem' description="Associer automatiquement les items en fonction d'un attribut SSO"><value>non</value></variable> <variable type='oui/non' name='ninegate_ssosynchroitem' description="Associer automatiquement les items en fonction d'un attribut SSO"><value>non</value></variable>
<variable type='string' name='ninegate_ssoreqitem' description="Attribut SSO associé à la notion d'item" mandatory='True'><value></value></variable> <variable type='string' name='ninegate_ssoreqitem' description="Attribut SSO associé à la notion d'item" mandatory='True'><value></value></variable>
<variable type='string' name='ninegate_typesso' description="Mode de connexion SSO (Client ou Proxy)" mandatory='True'><value>client</value></variable>
<variable type='oui/non' name='ninegate_syncldap' description="Synchroniser Ninegate vers votre Annuaire CadolesLDAP"><value>non</value></variable> <variable type='oui/non' name='ninegate_syncldap' description="Synchroniser Ninegate vers votre Annuaire CadolesLDAP"><value>non</value></variable>
<variable type='string' name='ninegate_ldaptemplate' description="Modèle d'annuaire"><value>scribe</value></variable> <variable type='string' name='ninegate_ldaptemplate' description="Modèle d'annuaire"><value>scribe</value></variable>
@ -197,6 +196,13 @@
<variable type='string' name='ninegate_widbalado_url' description='URL complète de votre Balado' mandatory='True' /> <variable type='string' name='ninegate_widbalado_url' description='URL complète de votre Balado' mandatory='True' />
<variable type='string' name='ninegate_widbalado_syncenvole' description='URL Posh-Profil pour synchronisation Balado' mandatory='True' /> <variable type='string' name='ninegate_widbalado_syncenvole' description='URL Posh-Profil pour synchronisation Balado' mandatory='True' />
<!-- CDT -->
<variable type="oui/non" name='ninegate_activate_widcdt' description='Activer CdT' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widcdt_url' description='URL complète de votre CdT' mandatory='True' />
<variable type='string' name='ninegate_widcdt_syncenvole' description='URL Posh-Profil pour synchronisation CdT' mandatory='True' />
<!-- DOKUWIKI --> <!-- DOKUWIKI -->
<variable type="oui/non" name='ninegate_activate_widdokuwiki' description='Activer Dokuwiki' mandatory='True'> <variable type="oui/non" name='ninegate_activate_widdokuwiki' description='Activer Dokuwiki' mandatory='True'>
<value>non</value> <value>non</value>
@ -213,7 +219,6 @@
<variable type="oui/non" name='ninegate_activate_widead' description='Activer EAD' mandatory='True'> <variable type="oui/non" name='ninegate_activate_widead' description='Activer EAD' mandatory='True'>
<value>non</value> <value>non</value>
</variable> </variable>
<variable type='string' name='ninegate_widead_url' description='URL complète de votre EAD' mandatory='True' />
<!-- EOE --> <!-- EOE -->
<variable type="oui/non" name='ninegate_activate_wideoe' description='Activer EOE' mandatory='True'> <variable type="oui/non" name='ninegate_activate_wideoe' description='Activer EOE' mandatory='True'>
@ -374,19 +379,6 @@
<variable type='string' name='ninegate_widwordpress_url' description='URL complète de votre Wordpress' mandatory='True' /> <variable type='string' name='ninegate_widwordpress_url' description='URL complète de votre Wordpress' mandatory='True' />
<variable type='string' name='ninegate_widwordpress_syncenvole' description='URL Posh-Profil pour synchronisation Wordpress' mandatory='True' /> <variable type='string' name='ninegate_widwordpress_syncenvole' description='URL Posh-Profil pour synchronisation Wordpress' mandatory='True' />
<!-- WEBSOCKET -->
<variable type='string' name='ninegate_websocket_url' description='Host du serveur Websocket' mandatory='True' />
<variable type='string' name='ninegate_websocket_portexterne' description='Port de commuinication externe du serveur Websocket' mandatory='True' >
<value>5555</value>
</variable>
<variable type='string' name='ninegate_websocket_portinterne' description='Port de commuinication interne du serveur Websocket' mandatory='True'>
<value>5556</value>
</variable>
<!-- EMAIL --> <!-- EMAIL -->
<variable type='string' name='ninegate_noreply' description='Adresse mail utilisé pour le noreply' mandatory='True' /> <variable type='string' name='ninegate_noreply' description='Adresse mail utilisé pour le noreply' mandatory='True' />
<variable type="oui/non" name='ninegate_activer_localmail' description="Utiliser le serveur d'envoi de mail local" mandatory='True'> <variable type="oui/non" name='ninegate_activer_localmail' description="Utiliser le serveur d'envoi de mail local" mandatory='True'>
@ -398,9 +390,9 @@
<variable type='string' name='ninegate_smtppwd' description='Fichier contenant le mot de passe associé du compte SMTP' /> <variable type='string' name='ninegate_smtppwd' description='Fichier contenant le mot de passe associé du compte SMTP' />
<variable type='string' name='ninegate_smtpencryption' description='Type Encryptage du serveur SMTP' /> <variable type='string' name='ninegate_smtpencryption' description='Type Encryptage du serveur SMTP' />
<variable type='string' name='ninegate_smtpauthmode' description='Mode Authentification du serveur SMTP' /> <variable type='string' name='ninegate_smtpauthmode' description='Mode Authentification du serveur SMTP' />
</family>
<family name='EoleDB' icon='database' mode='expert'>
<!-- EOLEDB --> <!-- EOLEDB -->
<variable type='string' name='ninegate_db_mode' description='Serveur de bases de données à utiliser' mode='expert'/> <variable type='string' name='ninegate_db_mode' description='Serveur de bases de données à utiliser' mode='expert'/>
<variable type='string' name='ninegate_dbserver' description='Adresse du serveur de base de données' mode='expert'/> <variable type='string' name='ninegate_dbserver' description='Adresse du serveur de base de données' mode='expert'/>
@ -416,6 +408,7 @@
<separator name="ninegate_activate_portal">Paramètres associés aux modules à activer</separator> <separator name="ninegate_activate_portal">Paramètres associés aux modules à activer</separator>
<separator name="ninegate_activate_widadminer">Paramètres associés à Adminer</separator> <separator name="ninegate_activate_widadminer">Paramètres associés à Adminer</separator>
<separator name="ninegate_activate_widbalado">Paramètres associés à Balado</separator> <separator name="ninegate_activate_widbalado">Paramètres associés à Balado</separator>
<separator name="ninegate_activate_widcdt">Paramètres associés à CdT</separator>
<separator name="ninegate_activate_widdokuwiki">Paramètres associés à Dokuwiki</separator> <separator name="ninegate_activate_widdokuwiki">Paramètres associés à Dokuwiki</separator>
<separator name="ninegate_activate_wideconnect">Paramètres associés à eConnect</separator> <separator name="ninegate_activate_wideconnect">Paramètres associés à eConnect</separator>
<separator name="ninegate_activate_widead">Paramètres associés à EAD</separator> <separator name="ninegate_activate_widead">Paramètres associés à EAD</separator>
@ -443,9 +436,9 @@
<separator name="ninegate_activate_widroundcube">Paramètres associés à Roundcube</separator> <separator name="ninegate_activate_widroundcube">Paramètres associés à Roundcube</separator>
<separator name="ninegate_activate_widsacoche">Paramètres associés à Sacoche</separator> <separator name="ninegate_activate_widsacoche">Paramètres associés à Sacoche</separator>
<separator name="ninegate_activate_widwordpress">Paramètres associés à Wordpress</separator> <separator name="ninegate_activate_widwordpress">Paramètres associés à Wordpress</separator>
<separator name="ninegate_websocket_url">Paramètres associés au Serveur WEBSOCKET</separator> <separator name="ninegate_activate_websocket">Paramètres associés au Serveur WEBSOCKET</separator>
<separator name="ninegate_noreply">Paramètres associés aux Mails</separator> <separator name="ninegate_noreply">Paramètres associés aux Mails</separator>
<separator name="ninegate_db_mode">Paramètres associés à la Base de Données</separator> <separator name="ninegate_db_mode">Paramètres EoleDB associés à Ninegate</separator>
</separators> </separators>
</variables> </variables>
@ -455,6 +448,11 @@
<target type='variable'>activer_ninegate</target> <target type='variable'>activer_ninegate</target>
</condition> </condition>
<condition name='hidden_if_in' source='activer_revprox'>
<param>non</param>
<target type='filelist'>nineboard_nginx</target>
</condition>
<condition name='hidden_if_in' source='activer_ninegate'> <condition name='hidden_if_in' source='activer_ninegate'>
<param>non</param> <param>non</param>
@ -466,6 +464,7 @@
<target type='variable'>ninegate_ssoreqgroup</target> <target type='variable'>ninegate_ssoreqgroup</target>
<target type='variable'>ninegate_ssosynchroitem</target> <target type='variable'>ninegate_ssosynchroitem</target>
<target type='variable'>ninegate_ssoreqitem</target> <target type='variable'>ninegate_ssoreqitem</target>
<target type='variable'>ninegate_typesso</target>
<target type='variable'>ninegate_syncldap</target> <target type='variable'>ninegate_syncldap</target>
<target type='variable'>ninegate_ldaptemplate</target> <target type='variable'>ninegate_ldaptemplate</target>
@ -530,6 +529,7 @@
<target type='variable'>ninegate_dbpass</target> <target type='variable'>ninegate_dbpass</target>
<target type='filelist'>ninegate</target> <target type='filelist'>ninegate</target>
<target type='filelist'>ninegate_nginx</target>
<target type='filelist'>ninegate-migration</target> <target type='filelist'>ninegate-migration</target>
<target type='servicelist'>ninegate</target> <target type='servicelist'>ninegate</target>
@ -568,6 +568,14 @@
<target type='variable'>ninegate_ssoreqitem</target> <target type='variable'>ninegate_ssoreqitem</target>
</condition> </condition>
<condition name='hidden_if_in' source='ninegate_mode_auth'>
<param>SQL</param>
<param>LDAP</param>
<param>SAML</param>
<target type='variable'>ninegate_typesso</target>
</condition>
<condition name='hidden_if_in' source='ninegate_syncldap'> <condition name='hidden_if_in' source='ninegate_syncldap'>
<param>non</param> <param>non</param>
@ -717,6 +725,7 @@
<target type='variable'>ninegate_activate_widadminer</target> <target type='variable'>ninegate_activate_widadminer</target>
<target type='variable'>ninegate_activate_widbalado</target> <target type='variable'>ninegate_activate_widbalado</target>
<target type='variable'>ninegate_activate_widcdt</target>
<target type='variable'>ninegate_activate_widdokuwiki</target> <target type='variable'>ninegate_activate_widdokuwiki</target>
<target type='variable'>ninegate_activate_wideconnect</target> <target type='variable'>ninegate_activate_wideconnect</target>
<target type='variable'>ninegate_activate_widead</target> <target type='variable'>ninegate_activate_widead</target>
@ -766,6 +775,7 @@
<param>non</param> <param>non</param>
<target type='variable'>ninegate_widbalado_syncenvole</target> <target type='variable'>ninegate_widbalado_syncenvole</target>
<target type='variable'>ninegate_widcdt_syncenvole</target>
<target type='variable'>ninegate_widgepi_syncenvole</target> <target type='variable'>ninegate_widgepi_syncenvole</target>
<target type='variable'>ninegate_widlimesurvey_syncenvole</target> <target type='variable'>ninegate_widlimesurvey_syncenvole</target>
<target type='variable'>ninegate_widmoodle_syncenvole</target> <target type='variable'>ninegate_widmoodle_syncenvole</target>
@ -784,30 +794,12 @@
<condition name='hidden_if_in' source='poshprofil_typesynchro'> <condition name='hidden_if_in' source='poshprofil_typesynchro'>
<param>Annuaire</param> <param>Annuaire</param>
<target type='variable'>ninegate_widbalado_syncenvole</target> <target type='variable'>ninegate_widbalado_syncenvole</target>
<target type='variable'>ninegate_widcdt_syncenvole</target>
<target type='variable'>ninegate_widgepi_syncenvole</target> <target type='variable'>ninegate_widgepi_syncenvole</target>
<target type='variable'>ninegate_widnextcloud_syncenvole</target> <target type='variable'>ninegate_widnextcloud_syncenvole</target>
<target type='variable'>ninegate_widsacoche_syncenvole</target> <target type='variable'>ninegate_widsacoche_syncenvole</target>
</condition> </condition>
<!-- AFFICHAGE EN FONCTION DU MODULE WEBSOCKET -->
<condition name='hidden_if_in' source='ninegate_activate_websocket'>
<param>non</param>
<target type='variable'>ninegate_websocket_url</target>
<target type='variable'>ninegate_websocket_portinterne</target>
<target type='variable'>ninegate_websocket_portexterne</target>
<target type='servicelist'>ninegate_websocket</target>
</condition>
<fill name='calc_multi_condition' target='ninegate_websocket_url'>
<param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_apache</param>
<param type='eole' name='match' hidden='False'>web_url</param>
<param name='default_mismatch'>None</param>
</fill>
<!-- AFFICHAGE EN FONCTION DU WIDGET ADMINER --> <!-- AFFICHAGE EN FONCTION DU WIDGET ADMINER -->
<fill name='calc_multi_condition' target='ninegate_activate_widadminer'> <fill name='calc_multi_condition' target='ninegate_activate_widadminer'>
<param>oui</param> <param>oui</param>
@ -832,7 +824,7 @@
<!-- AFFICHAGE EN FONCTION DU WIDGET BALADAO --> <!-- AFFICHAGE EN FONCTION DU WIDGET BALADO -->
<fill name='calc_multi_condition' target='ninegate_activate_widbalado'> <fill name='calc_multi_condition' target='ninegate_activate_widbalado'>
<param>oui</param> <param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_balado</param> <param type='eole' name='condition_1' hidden='False'>activer_balado</param>
@ -863,6 +855,39 @@
</fill> </fill>
<!-- AFFICHAGE EN FONCTION DU WIDGET CDT -->
<fill name='calc_multi_condition' target='ninegate_activate_widcdt'>
<param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_cdt</param>
<param name='match'>oui</param>
<param name='mismatch'>non</param>
<param name='default_mismatch'>non</param>
</fill>
<condition name='hidden_if_in' source='ninegate_activate_widcdt'>
<param>non</param>
<target type='variable'>ninegate_widcdt_url</target>
<target type='variable'>ninegate_widcdt_syncenvole</target>
</condition>
<fill name='calc_multi_condition' target='ninegate_widcdt_url'>
<param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_cdt</param>
<param name='match'>/cdt</param>
<param name='default_mismatch'>None</param>
</fill>
<fill name='calc_multi_condition' target='ninegate_widcdt_syncenvole'>
<param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_cdt</param>
<param name='match'>/posh-profil</param>
<param name='default_mismatch'>None</param>
</fill>
<!-- AFFICHAGE EN FONCTION DU WIDGET DOKUWIKI --> <!-- AFFICHAGE EN FONCTION DU WIDGET DOKUWIKI -->
<fill name='calc_multi_condition' target='ninegate_activate_widdokuwiki'> <fill name='calc_multi_condition' target='ninegate_activate_widdokuwiki'>
<param>oui</param> <param>oui</param>
@ -919,18 +944,6 @@
<param name='default_mismatch'>non</param> <param name='default_mismatch'>non</param>
</fill> </fill>
<condition name='hidden_if_in' source='ninegate_activate_widead'>
<param>non</param>
<target type='variable'>ninegate_widead_url</target>
</condition>
<fill name='concat' target='ninegate_widead_url'>
<param>https://</param>
<param type='eole'>web_url</param>
<param>:4200</param>
</fill>
<!-- AFFICHAGE EN FONCTION DU WIDGET EOE --> <!-- AFFICHAGE EN FONCTION DU WIDGET EOE -->
<fill name='calc_multi_condition' target='ninegate_activate_wideoe'> <fill name='calc_multi_condition' target='ninegate_activate_wideoe'>
<param>oui</param> <param>oui</param>
@ -1651,6 +1664,10 @@
<param>['CAS', 'SAML', 'SQL', 'LDAP']</param> <param>['CAS', 'SAML', 'SQL', 'LDAP']</param>
</check> </check>
<check name='valid_enum' target='ninegate_typesso'>
<param>['client', 'proxy']</param>
</check>
<check name='valid_enum' target='ninegate_moderegistration'> <check name='valid_enum' target='ninegate_moderegistration'>
<param>['none', 'byuser', 'byadmin']</param> <param>['none', 'byuser', 'byadmin']</param>
</check> </check>

View File

@ -2,6 +2,7 @@
/app/config/parameters.yml /app/config/parameters.yml
/app/config/template.yml /app/config/template.yml
/src/Cadoles/CoreBundle/Command/data/core-init-01.sql /src/Cadoles/CoreBundle/Command/data/core-init-01.sql
/src/Cadoles/CoreBundle/Command/LocalCommand.php
/build/ /build/
/phpunit.xml /phpunit.xml
/var/* /var/*

View File

@ -127,16 +127,16 @@ gos_web_socket:
firewall: main firewall: main
shared_config: true shared_config: true
server: server:
port: %websocket_port% #The port the socket server will listen on port: 443 #The port the socket server will listen on
host: %websocket_host% #The host ip to bind to host: %weburl%/wssninegate #The host ip to bind to
router: router:
resources: resources:
- "@CadolesWebsocketBundle/Resources/config/topic.yml" - "@CadolesWebsocketBundle/Resources/config/topic.yml"
pushers: pushers:
wamp: wamp:
host: %websocket_host% host: 0.0.0.0
port: %websocket_portinterne% port: 5556
# ckeditor configuration # ckeditor configuration
ivory_ck_editor: ivory_ck_editor:
@ -147,7 +147,7 @@ ivory_ck_editor:
language: fr language: fr
toolbar: "my_toolbar_1" toolbar: "my_toolbar_1"
uiColor: "#ffffff" uiColor: "#ffffff"
extraPlugins: ["html5video","pastebase64"] extraPlugins: ["html5video"]
light_config: light_config:
language: fr language: fr
toolbar: "my_toolbar_2" toolbar: "my_toolbar_2"

View File

@ -0,0 +1,46 @@
<?php
namespace Cadoles\CoreBundle\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Finder\Finder;
use Symfony\Component\Filesystem\Filesystem;
class LocalCommand extends Command
{
private $container;
private $em;
private $output;
private $filesystem;
private $rootlog;
protected function configure()
{
$this
->setName('Core:Local')
->setDescription('Lauch Local Script')
;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->container = $this->getApplication()->getKernel()->getContainer();
$this->em = $this->container->get('doctrine')->getEntityManager();
$this->output = $output;
$this->filesystem = new Filesystem();
$this->rootlog = $this->container->get('kernel')->getRootDir()."/../var/logs/";
return 1;
}
private function writelnred($string) {
$this->output->writeln('<fg=red>'.$string.'</>');
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
}
private function writeln($string) {
$this->output->writeln($string);
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
}
}

View File

@ -49,6 +49,11 @@ rm -f /var/www/html/ninegate/var/logs/dev.log
# Copie des polices du projet dans le rep web # Copie des polices du projet dans le rep web
cp -rf src/Cadoles/CoreBundle/Resources/public/fonts web/ cp -rf src/Cadoles/CoreBundle/Resources/public/fonts web/
# Copie de la commande local de base si elle la commande n'existe pas
if [ ! -f src/Cadoles/CoreBundle/Command/LocalCommand.php ]; then
cp -rf scripts/LocalCommand.php src/Cadoles/CoreBundle/Command/LocalCommand.php
fi
# Nettoyage du cache # Nettoyage du cache
echo echo
echo CACHE = Refresh echo CACHE = Refresh
@ -66,6 +71,9 @@ php bin/console Portal:InitData --env=prod
# Passage des scripts # Passage des scripts
php bin/console Core:Script --env=prod php bin/console Core:Script --env=prod
# Passage des scripts locaux
php bin/console Core:Local --env=prod
# Generation des assets # Generation des assets
echo ASSET = Dump echo ASSET = Dump
bin/console assetic:dump --env=prod --quiet bin/console assetic:dump --env=prod --quiet

View File

@ -1,11 +1,9 @@
#!/bin/bash #!/bin/bash
websocket_url=$(CreoleGet adresse_ip_eth0 non)
websocket_portinterne=$(CreoleGet ninegate_websocket_portinterne non)
# Server Websocket # Server Websocket
if [[ "$1" != "restartifdown" ]]; then if [[ "$1" != "restartifdown" ]]; then
echo WEBSOCKET = STOP echo WEBSOCKET = STOP
pid="$(pgrep -a -f gos:websocket | grep $websocket_portinterne)" pid="$(pgrep -a -f gos:websocket | grep 5556)"
if [ -n "${pid}" ]; then if [ -n "${pid}" ]; then
IFS=' ' read -r -a array <<< "$pid" IFS=' ' read -r -a array <<< "$pid"
kill -9 ${array[0]}; kill -9 ${array[0]};
@ -13,7 +11,7 @@ if [[ "$1" != "restartifdown" ]]; then
fi fi
# Port LISTEN ? # Port LISTEN ?
pid="$(pgrep -a -f gos:websocket | grep $websocket_portinterne)" pid="$(pgrep -a -f gos:websocket | grep 5556)"
restart="yes" restart="yes"
if [ "$1" == "restartifdown" ] && [ -n "${pid}" ] ; then if [ "$1" == "restartifdown" ] && [ -n "${pid}" ] ; then
restart="no" restart="no"
@ -22,5 +20,5 @@ fi
if [ "$restart" == "yes" ] && [ "$1" != "stop" ] ; then if [ "$restart" == "yes" ] && [ "$1" != "stop" ] ; then
echo WEBSOCKET = START echo WEBSOCKET = START
cd /var/www/html/ninegate cd /var/www/html/ninegate
bin/console gos:websocket:server --port $websocket_portinterne -a $websocket_url --no-debug -n -q --env=prod & disown systemctl restart wssninegate
fi fi

View File

@ -30,7 +30,10 @@ class SecurityController extends Controller
// Init Client CAS // Init Client CAS
\phpCAS::setDebug("/var/log/phpcas/phpCAS-ninegate.log"); \phpCAS::setDebug("/var/log/phpcas/phpCAS-ninegate.log");
if($this->getParameter("cas_type")=="client")
@\phpCAS::client(CAS_VERSION_2_0, $this->getParameter('cas_host'), $this->getParameter('cas_port'), is_null($this->getParameter('cas_path')) ? '' : $this->getParameter('cas_path'), false); @\phpCAS::client(CAS_VERSION_2_0, $this->getParameter('cas_host'), $this->getParameter('cas_port'), is_null($this->getParameter('cas_path')) ? '' : $this->getParameter('cas_path'), false);
else
@\phpCAS::proxy(CAS_VERSION_2_0, $this->getParameter('cas_host'), $this->getParameter('cas_port'), is_null($this->getParameter('cas_path')) ? '' : $this->getParameter('cas_path'), false);
\phpCAS::setNoCasServerValidation(); \phpCAS::setNoCasServerValidation();
@ -75,7 +78,9 @@ class SecurityController extends Controller
if($masteridentity=="LDAP") { if($masteridentity=="LDAP") {
// Normalement la synchronisation des comptes aurait du générer le compte en base c'est donc pas normal // Normalement la synchronisation des comptes aurait du générer le compte en base c'est donc pas normal
// Peut-être juste relancer une synchronisation // Peut-être juste relancer une synchronisation
throw $this->createNotFoundException('Permission denied. Need to synchronize LDAP ? Contact your administrator'); // On tente une synchronisation via methode SSO
$masteridentity="SSO";
// throw $this->createNotFoundException('Permission denied. Need to synchronize LDAP ? Contact your administrator');
} }
if($masteridentity=="SSO") { if($masteridentity=="SSO") {
@ -86,8 +91,10 @@ class SecurityController extends Controller
// On calcule le niveau01 de l'utilisateur // On calcule le niveau01 de l'utilisateur
$niveau01=$em->getRepository('CadolesCoreBundle:Niveau01')->calculateNiveau01($attributes); $niveau01=$em->getRepository('CadolesCoreBundle:Niveau01')->calculateNiveau01($attributes);
if(!$niveau01) if(!$niveau01) {
throw $this->createNotFoundException('Permission denied. No Organisation Niveau 01 match'); $niveau01=$em->getRepository('CadolesCoreBundle:Niveau01')->findAll()[0];
//throw $this->createNotFoundException('Permission denied. No Organisation Niveau 01 match');
}
$user->setUsername($username); $user->setUsername($username);
$user->setEmail($email); $user->setEmail($email);
@ -104,6 +111,7 @@ class SecurityController extends Controller
$user->setAvatar("noavatar.png"); $user->setAvatar("noavatar.png");
$user->setVisible(true); $user->setVisible(true);
$user->setAuthlevel("simple"); $user->setAuthlevel("simple");
$user->setBelongingpopulation("agent");
$user->setRole("ROLE_USER"); $user->setRole("ROLE_USER");
if(in_array($username,$this->getParameter("ldap_usersadmin"))) if(in_array($username,$this->getParameter("ldap_usersadmin")))
@ -194,7 +202,10 @@ class SecurityController extends Controller
public function logoutAction() { public function logoutAction() {
// Init Client CAS // Init Client CAS
\phpCAS::setDebug(false); \phpCAS::setDebug(false);
if($this->getParameter("cas_type")=="client")
@\phpCAS::client(CAS_VERSION_2_0, $this->getParameter('cas_host'), $this->getParameter('cas_port'), is_null($this->getParameter('cas_path')) ? '' : $this->getParameter('cas_path'), true); @\phpCAS::client(CAS_VERSION_2_0, $this->getParameter('cas_host'), $this->getParameter('cas_port'), is_null($this->getParameter('cas_path')) ? '' : $this->getParameter('cas_path'), true);
else
@\phpCAS::proxy(CAS_VERSION_2_0, $this->getParameter('cas_host'), $this->getParameter('cas_port'), is_null($this->getParameter('cas_path')) ? '' : $this->getParameter('cas_path'), true);
\phpCAS::setNoCasServerValidation(); \phpCAS::setNoCasServerValidation();
@ -208,7 +219,10 @@ class SecurityController extends Controller
// Init Client CAS // Init Client CAS
\phpCAS::setDebug("/var/log/phpcas/phpCAS-ninegate.log"); \phpCAS::setDebug("/var/log/phpcas/phpCAS-ninegate.log");
if($this->getParameter("cas_type")=="client")
@\phpCAS::client(CAS_VERSION_2_0, $this->getParameter('cas_host'), $this->getParameter('cas_port'), is_null($this->getParameter('cas_path')) ? '' : $this->getParameter('cas_path'), false); @\phpCAS::client(CAS_VERSION_2_0, $this->getParameter('cas_host'), $this->getParameter('cas_port'), is_null($this->getParameter('cas_path')) ? '' : $this->getParameter('cas_path'), false);
else
@\phpCAS::proxy(CAS_VERSION_2_0, $this->getParameter('cas_host'), $this->getParameter('cas_port'), is_null($this->getParameter('cas_path')) ? '' : $this->getParameter('cas_path'), false);
\phpCAS::setNoCasServerValidation(); \phpCAS::setNoCasServerValidation();
@ -294,4 +308,29 @@ class SecurityController extends Controller
} }
} }
function imapunreadAction() {
if($this->getParameter("active_imapunread")&&$this->getParameter("cas_type")=="proxy") {
$ip=$this->getParameter("imapundread_ip");
// Init Client CAS
\phpCAS::setDebug("/var/log/phpcas/phpCAS-ninegate.log");
@\phpCAS::proxy(CAS_VERSION_2_0, $this->getParameter('cas_host'), $this->getParameter('cas_port'), is_null($this->getParameter('cas_path')) ? '' : $this->getParameter('cas_path'), false);
\phpCAS::setNoCasServerValidation();
\phpCAS::forceAuthentication();
$pt= \phpCAS::retrievePT('imap://'.$ip,$t,$f);
$a = \phpCAS::serviceMail("{".$ip.":993/imap/ssl/novalidate-cert}","imap://".$ip,0, $errc,$err,$pt);
$unseen = imap_status($a, "{".$ip.":993/imap/ssl/novalidate-cert}INBOX", SA_UNSEEN);
$count=$unseen->unseen;
$response = new Response(json_encode($count));
}
else
$response = new Response(json_encode(""));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
} }

View File

@ -10,3 +10,7 @@ cas_sp.test:
path: /test path: /test
defaults: { _controller: CadolesCASBundle:Security:test } defaults: { _controller: CadolesCASBundle:Security:test }
cas_sp.imapunread:
path: /imapunread
defaults: { _controller: CadolesCASBundle:Security:imapunread }

View File

@ -138,6 +138,7 @@ class InitDataCommand extends ContainerAwareCommand
$usergroup->setUser($user); $usergroup->setUser($user);
$usergroup->setGroup($group); $usergroup->setGroup($group);
$usergroup->setKeyvalue($key); $usergroup->setKeyvalue($key);
$usergroup->setRolegroup(0);
$em->persist($usergroup); $em->persist($usergroup);
$em->flush(); $em->flush();
$em->clear(); $em->clear();
@ -227,9 +228,17 @@ class InitDataCommand extends ContainerAwareCommand
$this->addModeration($profil,'cadoles_portal_config_flux',1); $this->addModeration($profil,'cadoles_portal_config_flux',1);
$this->addModeration($profil,'cadoles_portal_config_notice',1); $this->addModeration($profil,'cadoles_portal_config_notice',1);
$this->addModeration($profil,'cadoles_portal_config_icon',1); $this->addModeration($profil,'cadoles_portal_config_icon',1);
$this->addModeration($profil,'cadoles_portal_config_syncbalado',0);
$this->addModeration($profil,'cadoles_portal_config_synccdt',0);
$this->addModeration($profil,'cadoles_portal_config_syncgepiannu',0);
$this->addModeration($profil,'cadoles_portal_config_syncgepisiecle',0);
$this->addModeration($profil,'cadoles_portal_config_synclimesurvey',0); $this->addModeration($profil,'cadoles_portal_config_synclimesurvey',0);
$this->addModeration($profil,'cadoles_portal_config_syncmoodle',0); $this->addModeration($profil,'cadoles_portal_config_syncmoodle',0);
$this->addModeration($profil,'cadoles_portal_config_syncnextcloud',0);
$this->addModeration($profil,'cadoles_portal_config_syncsacoche',0);
$this->addModeration($profil,'cadoles_portal_config_syncpiwik',0);
$this->addModeration($profil,'cadoles_portal_config_syncwordpress',0); $this->addModeration($profil,'cadoles_portal_config_syncwordpress',0);
$this->addModeration($profil,'cadoles_core_config_statistic',1); $this->addModeration($profil,'cadoles_core_config_statistic',1);
$this->addModeration($profil,'cadoles_core_config_mailing',1); $this->addModeration($profil,'cadoles_core_config_mailing',1);
$this->addModeration($profil,'cadoles_core_config_importuser',0); $this->addModeration($profil,'cadoles_core_config_importuser',0);

View File

@ -287,7 +287,7 @@ class OnlyCommand extends Command
$this->em->flush(); $this->em->flush();
// On ajoute le propriétaire en tant que membre du groupe // On ajoute le propriétaire en tant que membre du groupe
$this->addMember($group,$user,true); $this->addMember($group,$user,100);
// On controle que le groupe a bien page / calendrier / blog / project // On controle que le groupe a bien page / calendrier / blog / project
$this->ctrlFgcanshare($group,$user,$pagetemplate); $this->ctrlFgcanshare($group,$user,$pagetemplate);
@ -318,7 +318,7 @@ class OnlyCommand extends Command
// On s'assure qu'il n'es pas déjà rattaché // On s'assure qu'il n'es pas déjà rattaché
$usergroup=$this->em->getRepository("CadolesCoreBundle:UserGroup")->findOneBy(["user"=>$user,"group"=>$group]); $usergroup=$this->em->getRepository("CadolesCoreBundle:UserGroup")->findOneBy(["user"=>$user,"group"=>$group]);
if(!$usergroup) { if(!$usergroup) {
$this->addMember($group,$user,false); $this->addMember($group,$user,0);
} }
} }
} }
@ -578,12 +578,12 @@ class OnlyCommand extends Command
} }
private function addMember($group,$user,$fgmanager) { private function addMember($group,$user,$role) {
$key = Uuid::uuid4(); $key = Uuid::uuid4();
$usergroup=new Usergroup; $usergroup=new UserGroup();
$usergroup->setUser($user); $usergroup->setUser($user);
$usergroup->setGroup($group); $usergroup->setGroup($group);
$usergroup->setFgmanager($fgmanager); $usergroup->setRolegroup($role);
$usergroup->setKeyvalue($key); $usergroup->setKeyvalue($key);
$this->em->persist($usergroup); $this->em->persist($usergroup);
$this->em->flush(); $this->em->flush();

View File

@ -380,6 +380,46 @@ class PurgeFileCommand extends Command
if($result) $find=true; if($result) $find=true;
} }
// Si pas trouvé on la cherche dans les projecttask
if(!$find) {
$result = $this->em
->getRepository("CadolesPortalBundle:Projecttask")->createQueryBuilder('projecttask')
->where('projecttask.description LIKE :tofind')
->setParameter('tofind', '%'.$tofind.'%')
->getQuery()->getResult();
if($result) $find=true;
}
// Si pas trouvé on la cherche dans les projectcomment
if(!$find) {
$result = $this->em
->getRepository("CadolesPortalBundle:Projectcomment")->createQueryBuilder('projectcomment')
->where('projectcomment.description LIKE :tofind')
->setParameter('tofind', '%'.$tofind.'%')
->getQuery()->getResult();
if($result) $find=true;
}
// Si pas trouvé on la cherche dans les blogcomment
if(!$find) {
$result = $this->em
->getRepository("CadolesPortalBundle:Blogcomment")->createQueryBuilder('blogcomment')
->where('blogcomment.description LIKE :tofind')
->setParameter('tofind', '%'.$tofind.'%')
->getQuery()->getResult();
if($result) $find=true;
}
// Si pas trouvé on la cherche dans les alert
if(!$find) {
$result = $this->em
->getRepository("CadolesPortalBundle:Alert")->createQueryBuilder('alert')
->where('alert.content LIKE :tofind')
->setParameter('tofind', '%'.$tofind.'%')
->getQuery()->getResult();
if($result) $find=true;
}
// Si pas trouvé on supprime // Si pas trouvé on supprime
if(!$find) { if(!$find) {
$this->writeln($name); $this->writeln($name);

View File

@ -239,6 +239,7 @@ class ScribeToNinegateCommand extends Command
$member= new UserGroup(); $member= new UserGroup();
$member->setGroup($group); $member->setGroup($group);
$member->setUser($user); $member->setUser($user);
$member->setRolegroup(0);
$this->em->persist($member); $this->em->persist($member);
$this->em->flush(); $this->em->flush();

View File

@ -49,7 +49,7 @@ class ScriptCommand extends Command
$script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"visibletrue"]); $script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"visibletrue"]);
if(!$script) { if(!$script) {
$this->writelnred("== SCRIPT = visibletrue"); $this->writeln("== SCRIPT = visibletrue");
$this->visibletrue(); $this->visibletrue();
$script=new Script(); $script=new Script();
@ -61,7 +61,7 @@ class ScriptCommand extends Command
$script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"setusersniveau"]); $script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"setusersniveau"]);
if(!$script) { if(!$script) {
$this->writelnred("== SCRIPT = setusersniveau"); $this->writeln("== SCRIPT = setusersniveau");
$this->setusersniveau(); $this->setusersniveau();
$script=new Script(); $script=new Script();
@ -73,7 +73,7 @@ class ScriptCommand extends Command
$script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"setfgcancreateproject"]); $script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"setfgcancreateproject"]);
if(!$script) { if(!$script) {
$this->writelnred("== SCRIPT = setfgcancreateproject"); $this->writeln("== SCRIPT = setfgcancreateproject");
$this->setfgcancreateproject(); $this->setfgcancreateproject();
$script=new Script(); $script=new Script();
@ -85,7 +85,7 @@ class ScriptCommand extends Command
$script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"createproject"]); $script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"createproject"]);
if(!$script) { if(!$script) {
$this->writelnred("== SCRIPT = createproject"); $this->writeln("== SCRIPT = createproject");
$this->createproject(); $this->createproject();
$script=new Script(); $script=new Script();
@ -97,7 +97,7 @@ class ScriptCommand extends Command
$script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"createthumbmini"]); $script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"createthumbmini"]);
if(!$script) { if(!$script) {
$this->writelnred("== SCRIPT = createthumbmini"); $this->writeln("== SCRIPT = createthumbmini");
$this->createthumbmini(); $this->createthumbmini();
$script=new Script(); $script=new Script();
@ -109,7 +109,7 @@ class ScriptCommand extends Command
$script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"createwidgetproject"]); $script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"createwidgetproject"]);
if(!$script) { if(!$script) {
$this->writelnred("== SCRIPT = createwidgetproject"); $this->writeln("== SCRIPT = createwidgetproject");
$this->createwidgetproject(); $this->createwidgetproject();
$script=new Script(); $script=new Script();
@ -121,7 +121,7 @@ class ScriptCommand extends Command
$script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"renamegroup"]); $script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"renamegroup"]);
if(!$script) { if(!$script) {
$this->writelnred("== SCRIPT = renamegroup"); $this->writeln("== SCRIPT = renamegroup");
$this->renamegroup(); $this->renamegroup();
$script=new Script(); $script=new Script();
@ -132,6 +132,68 @@ class ScriptCommand extends Command
} }
$script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"rolegroup"]);
if(!$script) {
$this->writeln("== SCRIPT = rolegroup");
$this->rolegroup();
$script=new Script();
$script->setName("rolegroup");
$this->em->persist($script);
$this->em->flush();
$this->writeln("");
}
$script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"userdefaultmissing"]);
if(!$script) {
$this->writeln("== SCRIPT = userdefaultmissing");
$this->userdefaultmissing();
$script=new Script();
$script->setName("userdefaultmissing");
$this->em->persist($script);
$this->em->flush();
$this->writeln("");
}
$script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"updateorthographe01"]);
if(!$script) {
$this->writeln("== SCRIPT = updateorthographe01");
$this->updateorthographe01();
$script=new Script();
$script->setName("updateorthographe01");
$this->em->persist($script);
$this->em->flush();
$this->writeln("");
}
$script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"updateorthographe02"]);
if(!$script) {
$this->writeln("== SCRIPT = updateorthographe02");
$this->updateorthographe02();
$script=new Script();
$script->setName("updateorthographe02");
$this->em->persist($script);
$this->em->flush();
$this->writeln("");
}
if($this->container->getParameter('ldap_template')=="scribe") {
$script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"purgepageprofil"]);
if(!$script) {
$this->writeln("== SCRIPT = purgepageprofil");
$this->purgepageprofil();
$script=new Script();
$script->setName("purgepageprofil");
$this->em->persist($script);
$this->em->flush();
$this->writeln("");
}
}
return 1; return 1;
} }
@ -289,11 +351,116 @@ class ScriptCommand extends Command
} }
} }
private function rolegroup(){
$usergroups = $this->em->getRepository('CadolesCoreBundle:UserGroup')->findAll();
foreach($usergroups as $usergroup) {
if(!$usergroup->getRolegroup()) {
$role=0;
if($usergroup->getFgmanager()) {
$role=50;
if($usergroup->getUser()==$usergroup->getGroup()->getOwner()) $role=100;
}
$usergroup->setRolegroup($role);
$this->em->persist($usergroup);
$this->em->flush();
}
}
}
private function userdefaultmissing(){
$users = $this->em->getRepository('CadolesCoreBundle:User')->findAll();
foreach($users as $user) {
if($user->getVisible()=="") {
$user->setVisible(true);
$this->em->persist($user);
$this->em->flush();
}
if($user->getAuthlevel()=="") {
$user->setAuthlevel("simple");
$this->em->persist($user);
$this->em->flush();
}
if($user->getBelongingpopulation()=="") {
$user->setBelongingpopulation("agent");
$this->em->persist($user);
$this->em->flush();
}
}
}
private function updateorthographe01(){
$config=$this->em->getRepository('CadolesCoreBundle:Config')->find("fgforceconnect");
if($config) {
$config->setHelp("Forcer la connexion afin de rendre votre site privé");
$this->em->persist($config);
$this->em->flush();
}
$config=$this->em->getRepository('CadolesCoreBundle:Config')->find("fontfacebody");
if($config) {
$config->setHelp("Police générale de votre site");
$this->em->persist($config);
$this->em->flush();
}
$config=$this->em->getRepository('CadolesCoreBundle:Config')->find("permgroup");
if($config) {
$config->setHelp("Détermine quel rôle aura la permission de créer des groupes de travail");
$this->em->persist($config);
$this->em->flush();
}
$config=$this->em->getRepository('CadolesCoreBundle:Config')->find("permannu");
if($config) {
$config->setHelp("Détermine quel rôle aura la permission de voir l'annuaire");
$this->em->persist($config);
$this->em->flush();
}
$config=$this->em->getRepository('CadolesCoreBundle:Config')->find("labelbookmarkuser");
if($config) {
$config->setHelp("Titre de la section des items créés par l'utilisateur, et qui ne sont listés que dans cette section.");
$this->em->persist($config);
$this->em->flush();
}
$config=$this->em->getRepository('CadolesCoreBundle:Config')->find("labelbookmarkitem");
if($config) {
$config->setHelp("Titre sur la section des items créés par l'administrateur ou le modérateur, mis à la disposition de l'utilisateur, et sélectionnés par ce dernier pour apparaitre dans cette section plutôt que dans leur catégorie d'origine.");
$this->em->persist($config);
$this->em->flush();
}
}
private function updateorthographe02(){
$entityItem = $this->em->getRepository('CadolesPortalBundle:Item')->find(-398);
if($entityItem) {
if($entityItem->getSubtitle()!="Messagerie") {
$entityItem->setSubtitle("Messagerie");
$entityItem->setContent("Messagerie permettant la communication sécurisée par méls. La messagerie na pas pour but denvoyer des gros fichiers mais plutôt de communiquer des informations, des liens.");
$this->em->persist($entityItem);
$this->em->flush();
}
}
}
private function purgepageprofil() {
$page=$this->em->getRepository('CadolesPortalBundle:Page')->findOneBy(['name'=>'PROFIL - Enseignants']);
if($page) {
$this->em->remove($page);
$this->em->flush();
}
$page=$this->em->getRepository('CadolesPortalBundle:Page')->findOneBy(['name'=>'PROFIL - Administratifs']);
if($page) {
$this->em->remove($page);
$this->em->flush();
}
}

View File

@ -128,7 +128,7 @@ class SynchroCommand extends Command
$ldapfilter="(|(&(uid=*)(ENTPersonProfils=enseignant))(&(uid=*)(typeadmin=0))(&(uid=*)(typeadmin=2)))"; $ldapfilter="(|(&(uid=*)(ENTPersonProfils=enseignant))(&(uid=*)(typeadmin=0))(&(uid=*)(typeadmin=2)))";
$label="PROFIL - Enseignants"; $label="PROFIL - Enseignants";
$this->writeln(" - $label"); $this->writeln(" - $label");
if(!$simulate) $this->addmodGroup($label,$ldapfilter,$scribe_group); if(!$simulate) $this->addmodGroup($label,$ldapfilter,false);
// Responsables // Responsables
$ldapfilter="(&(uid=*)(ENTPersonProfils=responsable))"; $ldapfilter="(&(uid=*)(ENTPersonProfils=responsable))";
@ -140,7 +140,20 @@ class SynchroCommand extends Command
$ldapfilter="(&(uid=*)(ENTPersonProfils=administratif))"; $ldapfilter="(&(uid=*)(ENTPersonProfils=administratif))";
$label="PROFIL - Administratifs"; $label="PROFIL - Administratifs";
$this->writeln(" - $label"); $this->writeln(" - $label");
if(!$simulate) $this->addmodGroup($label,$ldapfilter,$scribe_group); if(!$simulate) $this->addmodGroup($label,$ldapfilter,false);
// Niveaux
$this->writeln('');
$this->writeln('== NIVEAUX ==========================================');
$results = $this->ldap->search("type=Niveau", ['cn','description','gidNumber'], $this->ldap_basedn);
foreach($results as $result) {
$cn=$result["cn"];
$ldapfilter="(&(type=Niveau)(cn=$cn))";
$label="NIVEAU - ".$result["cn"];
$this->writeln(" - $label");
if(!$simulate) $this->addmodGroup($label,$ldapfilter,false);
}
// Classes // Classes
$this->writeln(''); $this->writeln('');
@ -155,6 +168,32 @@ class SynchroCommand extends Command
if(!$simulate) $this->addmodGroup($label,$ldapfilter,$scribe_group); if(!$simulate) $this->addmodGroup($label,$ldapfilter,$scribe_group);
} }
// Elèves des Classes
$this->writeln('');
$this->writeln('== ELEVES DES CLASSES ==========================================');
$results = $this->ldap->search("type=Classe", ['cn','description','gidNumber'], $this->ldap_basedn);
foreach($results as $result) {
$cn=$result["cn"];
$ldapfilter="(&(type=Classe)(cn=$cn))";
$label="ELEVES - ".$result["cn"];
$this->writeln(" - $label");
if(!$simulate) $this->addmodGroup($label,$ldapfilter,false);
}
// Professeurs des Classes
$this->writeln('');
$this->writeln('== PROFESSEURS DES CLASSES ==========================================');
$results = $this->ldap->search("type=Classe", ['cn','description','gidNumber'], $this->ldap_basedn);
foreach($results as $result) {
$cn=$result["cn"];
$ldapfilter="(|(&(type=Equipe)(cn=profs-$cn))(&(ENTPersonProfils=Administratif)(divcod=$cn)))";
$label="PROFESSEURS - ".$result["cn"];
$this->writeln(" - $label");
if(!$simulate) $this->addmodGroup($label,$ldapfilter,false);
}
// Options // Options
$this->writeln(''); $this->writeln('');
$this->writeln('== OPTIONS =========================================='); $this->writeln('== OPTIONS ==========================================');
@ -899,6 +938,7 @@ class SynchroCommand extends Command
$member= new UserGroup(); $member= new UserGroup();
$member->setGroup($group); $member->setGroup($group);
$member->setUser($user); $member->setUser($user);
$member->setRolegroup(0);
} }
// Si modèle scribe // Si modèle scribe
@ -907,7 +947,7 @@ class SynchroCommand extends Command
if($ldap_template=="scribe"&&$scribe_master) { if($ldap_template=="scribe"&&$scribe_master) {
$ldapfilter="(|(&(uid=".$user->getUsername().")(ENTPersonProfils=enseignant))(&(uid=".$user->getUsername().")(typeadmin=0))(&(uid=".$user->getUsername().")(typeadmin=2)))"; $ldapfilter="(|(&(uid=".$user->getUsername().")(ENTPersonProfils=enseignant))(&(uid=".$user->getUsername().")(typeadmin=0))(&(uid=".$user->getUsername().")(typeadmin=2)))";
$results = $this->ldap->search($ldapfilter, ['uid'], $this->ldap_basedn); $results = $this->ldap->search($ldapfilter, ['uid'], $this->ldap_basedn);
if($results) $member->setFgmanager(true); if($results) $member->setRolegroup(50);
} }
$this->em->persist($member); $this->em->persist($member);

View File

@ -326,10 +326,9 @@ class ConfigController extends Controller
$fields["niveau02"]["perm"]=1; $fields["niveau02"]["perm"]=1;
$fields["niveau02"]["label"]=$session->get('labelniveau02'); $fields["niveau02"]["label"]=$session->get('labelniveau02');
} }
if(!array_key_exists("group",$fields)) { if(!array_key_exists("group",$fields)) $fields["group"]["perm"]=1;
$fields["group"]["perm"]=1; $fields["group"]["label"]="Groupes (caché uniquement pour le rôle Utilisateur) ";
$fields["group"]["label"]="Groupes";
}
if(!array_key_exists("job",$fields)) { if(!array_key_exists("job",$fields)) {
$fields["job"]["perm"]=1; $fields["job"]["perm"]=1;
$fields["job"]["label"]="Métier"; $fields["job"]["label"]="Métier";
@ -346,10 +345,8 @@ class ConfigController extends Controller
$fields["telephonenumber"]["perm"]=1; $fields["telephonenumber"]["perm"]=1;
$fields["telephonenumber"]["label"]="Téléphone"; $fields["telephonenumber"]["label"]="Téléphone";
} }
if(!array_key_exists("visitedate",$fields)) { if(!array_key_exists("visitedate",$fields)) $fields["visitedate"]["perm"]=1;
$fields["visitedate"]["perm"]=1; $fields["visitedate"]["label"]="Visite (caché uniquement pour les rôles Animateur et Utilisateur) ";
$fields["visitedate"]["label"]="Visite";
}
if(!$session->get('viewniveau02')) if(!$session->get('viewniveau02'))
unset($fields["niveau02"]); unset($fields["niveau02"]);

View File

@ -59,17 +59,18 @@ class CoreController extends Controller
// Chargement des chartes à signer // Chargement des chartes à signer
if($user) { if($user) {
$notices=$em->getRepository("CadolesPortalBundle:Notice")->getNoticeToRead($user); $notices=$em->getRepository("CadolesPortalBundle:Notice")->getNoticeToRead($user);
if(! $notices->isEmpty()) { if(! $notices->isEmpty()) {
$notices=$em->getRepository("CadolesPortalBundle:Notice")->getNoticeUser($user,false); $notices=$em->getRepository("CadolesPortalBundle:Notice")->getNoticeUser($user,false);
return $this->render('CadolesPortalBundle:Notice:mustread.html.twig',[ return $this->render('CadolesPortalBundle:Notice:mustread.html.twig',[
'useheader' => true, 'useheader' => true,
'usemenu' => false, 'usemenu' => false,
'usesidebar' => false, 'usesidebar' => false,
'maxwidth' => true, 'maxwidth' => true,
'mustread' => true, 'mustread' => true,
'notices' => $notices 'notices' => $notices,
'id' => $id,
]); ]);
} }
@ -85,8 +86,8 @@ class CoreController extends Controller
switch($key) { switch($key) {
case "firstname": if($user->getFirstname()=="") $toprofil=true; break; case "firstname": if($user->getFirstname()=="") $toprofil=true; break;
case "visible": if($user->getVisible()=="") $toprofil=true; break; case "visible": if($user->getVisible()=="") $toprofil=true; break;
case "authlevel": if($user->getAuthlevel()=="") $toprofil=true; break; //case "authlevel": if($user->getAuthlevel()=="") $toprofil=true; break;
case "belongingpopulation": if($user->getBelongingpopulation()=="") $toprofil=true; break; //case "belongingpopulation": if($user->getBelongingpopulation()=="") $toprofil=true; break;
case "job": if($user->getJob()=="") $toprofil=true; break; case "job": if($user->getJob()=="") $toprofil=true; break;
case "position": if($user->getPosition()=="") $toprofil=true; break; case "position": if($user->getPosition()=="") $toprofil=true; break;
case "niveau02": if($user->geNiveau02()=="") $toprofil=true; break; case "niveau02": if($user->geNiveau02()=="") $toprofil=true; break;

View File

@ -26,6 +26,7 @@ class FileController extends Controller
$clear=$request->get("clear"); $clear=$request->get("clear");
$view=$request->get("view"); $view=$request->get("view");
$sort=$request->get("sort"); $sort=$request->get("sort");
$order=$request->get("order");
$defaultview=$request->get("defaultview"); $defaultview=$request->get("defaultview");
// Récupérer les préférences utilisateur // Récupérer les préférences utilisateur
@ -68,7 +69,7 @@ class FileController extends Controller
$preference["widgetviewdirectory"][$directory]=$view; $preference["widgetviewdirectory"][$directory]=$view;
} }
// Prérence trie // Prérence trie
if(!array_key_exists("widgetsortdirectory",$preference)) { if(!array_key_exists("widgetsortdirectory",$preference)) {
$toupdate=true; $toupdate=true;
$preference["widgetsortdirectory"]=[]; $preference["widgetsortdirectory"]=[];
@ -82,6 +83,21 @@ class FileController extends Controller
$preference["widgetsortdirectory"][$directory]=$sort; $preference["widgetsortdirectory"][$directory]=$sort;
} }
// Préférence order
if(!array_key_exists("widgetorderdirectory",$preference)) {
$toupdate=true;
$preference["widgetorderdirectory"]=[];
}
if((!array_key_exists($directory,$preference["widgetorderdirectory"]))) {
$toupdate=true;
$preference["widgetorderdirectory"][$directory]="SORT_ASC";
}
if($sort&&$preference["widgetorderdirectory"][$directory]!=$order) {
$toupdate=true;
$preference["widgetorderdirectory"][$directory]=$order;
}
// Mise à jour des préferences // Mise à jour des préferences
if($toupdate) { if($toupdate) {
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
@ -109,23 +125,27 @@ class FileController extends Controller
if($fs->exists($fulldirectory)) { if($fs->exists($fulldirectory)) {
$finder = new Finder(); $finder = new Finder();
$finder->depth('== 0')->sortByName()->in($fulldirectory)->exclude('thumb')->exclude('thumbmini'); $finder->depth('== 0')->sortByName()->in($fulldirectory)->exclude('thumb')->exclude('thumbmini')->exclude('__trash');
foreach ($finder as $file) { foreach ($finder as $file) {
if(is_dir($file)) { if(is_dir($file)) {
$tmp=[]; $tmp=[];
$tmp["name"]=$file->getRelativePathname(); $tmp["name"]=$file->getRelativePathname();
$tmp["namesort"]=strtolower($tmp["name"]);
$tmp["date"]=date ("d/m/Y H:i", filemtime($file)); $tmp["date"]=date ("d/m/Y H:i", filemtime($file));
$tmp["datesort"] = date ("YmdHi", filemtime($file));
array_push($dirs,$tmp); array_push($dirs,$tmp);
} }
else { else {
$tmp=[]; $tmp=[];
$tmp["name"]=$file->getRelativePathname(); $tmp["name"]=$file->getRelativePathname();
$tmp["namesort"]=strtolower($tmp["name"]);
$tmp["extension"]=strtolower($file->getExtension()); $tmp["extension"]=strtolower($file->getExtension());
$fileinfo = new file($file->getPathname()); $fileinfo = new file($file->getPathname());
$tmp["minetype"]=$fileinfo->getMimeType(); $tmp["minetype"]=$fileinfo->getMimeType();
$tmp["minefamily"]=explode("/",$tmp["minetype"])[0]; $tmp["minefamily"]=explode("/",$tmp["minetype"])[0];
$tmp["date"] = date ("d/m/Y H:i", filemtime($file)); $tmp["date"] = date ("d/m/Y H:i", filemtime($file));
$tmp["datesort"] = date ("YmdHi", filemtime($file));
$tmp["thumb"]=""; $tmp["thumb"]="";
if($tmp["extension"]=="pdf") { if($tmp["extension"]=="pdf") {
@ -148,12 +168,22 @@ class FileController extends Controller
} }
} }
// Trie du tableu // Flag poubelle
$sort = array_column($files, $preference["widgetsortdirectory"][$directory]); $fgtrash=false;
array_multisort($sort, SORT_ASC, $files); if(stripos($subdirectory,"_trash")==1) $fgtrash=true;
$sort = array_column($dirs, $preference["widgetsortdirectory"][$directory]); // Trie du tableu
$sort = array_column($files, $preference["widgetsortdirectory"][$directory]."sort");
if($preference["widgetorderdirectory"][$directory]=="SORT_ASC")
array_multisort($sort, SORT_ASC, $files);
else
array_multisort($sort, SORT_DESC, $files);
$sort = array_column($dirs, $preference["widgetsortdirectory"][$directory]."sort");
if($preference["widgetorderdirectory"][$directory]=="SORT_ASC")
array_multisort($sort, SORT_ASC, $dirs); array_multisort($sort, SORT_ASC, $dirs);
else
array_multisort($sort, SORT_DESC, $dirs);
return $this->render('CadolesCoreBundle:File:list.html.twig',[ return $this->render('CadolesCoreBundle:File:list.html.twig',[
'useheader' => false, 'useheader' => false,
@ -171,12 +201,17 @@ class FileController extends Controller
'canadd' => $canupdate, 'canadd' => $canupdate,
'view' => $preference["widgetviewdirectory"][$directory], 'view' => $preference["widgetviewdirectory"][$directory],
'sort' => $preference["widgetsortdirectory"][$directory], 'sort' => $preference["widgetsortdirectory"][$directory],
'order' => $preference["widgetorderdirectory"][$directory],
'fgtrash' => $fgtrash,
]); ]);
} }
public function uploadAction($id,$type,Request $request,$access="config") public function uploadAction($id,$type,Request $request,$access="config")
{ {
$subdirectory=$request->get("subdirectory"); $canupdate =$this->getPermission($access,$id);
if(!$canupdate) throw $this->createNotFoundException('Permission denied');
$subdirectory=urldecode($request->get("subdirectory"));
$forcereload=(is_null($request->get("forcereload"))?true:$request->get("forcereload")); $forcereload=(is_null($request->get("forcereload"))?true:$request->get("forcereload"));
return $this->render('CadolesCoreBundle:File:upload.html.twig',[ return $this->render('CadolesCoreBundle:File:upload.html.twig',[
@ -193,8 +228,10 @@ class FileController extends Controller
public function subdirectoryAction($id,$type,Request $request,$access="config") public function subdirectoryAction($id,$type,Request $request,$access="config")
{ {
$subdirectory=$request->get("subdirectory"); $canupdate =$this->getPermission($access,$id);
if(!$canupdate) throw $this->createNotFoundException('Permission denied');
$subdirectory=$request->get("subdirectory");
$defaultData = []; $defaultData = [];
$form = $this->createFormBuilder() $form = $this->createFormBuilder()
->add('subdirectory', TextType::class,["label"=>"Répertoire"]) ->add('subdirectory', TextType::class,["label"=>"Répertoire"])
@ -206,7 +243,7 @@ class FileController extends Controller
if ($form->isSubmitted() && $form->isValid()) { if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData(); $data = $form->getData();
if($data["subdirectory"]=="thumb"||$data["subdirectory"]=="thumbmini") { if($data["subdirectory"]=="thumb"||$data["subdirectory"]=="thumbmini"||$data["subdirectory"]=="__trash") {
$form->addError(new FormError('Nom de répertoire réservé, merci de choisir un autre nom de répertoire')); $form->addError(new FormError('Nom de répertoire réservé, merci de choisir un autre nom de répertoire'));
$this->get('session')->getFlashBag()->clear(); $this->get('session')->getFlashBag()->clear();
$request->getSession()->getFlashBag()->add("error", 'Nom de répertoire réservé, merci de choisir un autre nom de répertoire'); $request->getSession()->getFlashBag()->add("error", 'Nom de répertoire réservé, merci de choisir un autre nom de répertoire');
@ -234,6 +271,225 @@ class FileController extends Controller
]); ]);
} }
public function renameAction($id,$oldname, Request $request,$access="config")
{
$canupdate =$this->getPermission($access,$id);
if(!$canupdate) throw $this->createNotFoundException('Permission denied');
$subdirectory=$request->get("subdirectory");
$form = $this->createFormBuilder()
->add('subdirectory', TextType::class,["label"=>"Renommer"])
->add('submit', SubmitType::class,["label"=>"Valider"])
->getForm();
$form->handleRequest($request);
$toclose=false;
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
if($data["subdirectory"]=="thumb"||$data["subdirectory"]=="thumbmini"||$data["subdirectory"]=="__trash") {
$form->addError(new FormError('Nom réservé, merci de choisir un autre nom'));
$this->get('session')->getFlashBag()->clear();
$request->getSession()->getFlashBag()->add("error", 'Nom réservé, merci de choisir un autre nom');
}
else {
$fs = new Filesystem();
$fulldirectory=$this->get('kernel')->getRootDir()."/../uploads/file/".$id;
if($subdirectory) $fulldirectory.="/".$subdirectory;
$urlsource= $fulldirectory."/".$oldname;
$urldestination = $fulldirectory."/".$data["subdirectory"];
if($urlsource!=$urldestination) {
if($fs->exists($urldestination)) {
$form->addError(new FormError('Ce nom existe déjà'));
$this->get('session')->getFlashBag()->clear();
$request->getSession()->getFlashBag()->add("error", 'Ce nom existe déjà');
}
elseif($fs->exists($urlsource)) {
if(is_dir($urlsource)) {
$fs->mirror($urlsource,$urldestination);
$fs->remove($urlsource);
}
else {
$fs->rename($urlsource,$urldestination,true);
$fs->touch($urldestination);
$urlsource= $fulldirectory."/thumb/".$oldname;
$urldestination = $fulldirectory."/thumb/".$data["subdirectory"];
if($fs->exists($urlsource))
$fs->rename($urlsource,$urldestination,true);
$urlsource= $fulldirectory."/thumbmini/".$oldname;
$urldestination = $fulldirectory."/thumbmini/".$data["subdirectory"];
if($fs->exists($urlsource))
$fs->rename($urlsource,$urldestination,true);
}
$toclose=true;
}
}
}
} else $form->get('subdirectory')->setData($oldname);
return $this->render('CadolesCoreBundle:File:subdirectory.html.twig',[
'useheader' => false,
'usemenu' => false,
'usesidebar' => false,
'access' => $access,
'id' => $id,
'subdirectory' => $subdirectory,
'form' => $form->createView(),
'toclose' => $toclose,
]);
}
public function trashAction(Request $request,$access="config")
{
// S'assurer que c'est un appel ajax
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('message' => 'Interdit'), 400);
}
$output=array();
$directory=$request->request->get('directory');
// Récupération du répertoire source et le nom du fichier
$racine=$this->get('kernel')->getRootDir()."/../uploads/file";
$directory=$request->request->get('directory');
$dirsource =$request->request->get('subdirectory');
$namesource =$request->request->get('filename');
$canupdate =$this->getPermission($access,$directory);
if(!$canupdate) throw $this->createNotFoundException('Permission denied');
$fs = new Filesystem();
// Déplacer le fichier
$urlsource=$racine."/".$directory."/".$dirsource."/".$namesource;
$urldestination=$racine."/".$directory."/__trash/".$dirsource."/".$namesource;
$fs->mkdir($racine."/".$directory."/__trash/".$dirsource);
if($fs->exists($urlsource)) {
if(is_dir($urlsource)) {
$fs->mirror($urlsource,$urldestination);
$fs->remove($urlsource);
}
else $fs->rename($urlsource,$urldestination,true);
}
// Déplacer le thumb
$fs->mkdir($racine."/".$directory."/__trash/".$dirsource."/thumb");
$urlsource=$racine."/".$directory."/".$dirsource."/thumb/".$namesource;
$urldestination=$racine."/".$directory."/__trash/".$dirsource."/thumb/".$namesource;
if($fs->exists($urlsource)) {
if(is_dir($urlsource)) {
$fs->mirror($urlsource,$urldestination);
$fs->remove($urlsource);
}
else $fs->rename($urlsource,$urldestination,true);
}
// Déplacer le thumbmini
$fs->mkdir($racine."/".$directory."/__trash/".$dirsource."/thumbmini");
$urlsource=$racine."/".$directory."/".$dirsource."/thumbmini/".$namesource;
$urldestination=$racine."/".$directory."/__trash/".$dirsource."/thumbmini/".$namesource;
if($fs->exists($urlsource)) {
if(is_dir($urlsource)) {
$fs->mirror($urlsource,$urldestination);
$fs->remove($urlsource);
}
else $fs->rename($urlsource,$urldestination,true);
}
$response = new Response(json_encode($output));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
public function restaureAction(Request $request,$access="config")
{
// S'assurer que c'est un appel ajax
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('message' => 'Interdit'), 400);
}
$output=array();
$directory=$request->request->get('directory');
// Récupération du répertoire source et le nom du fichier
$racine=$this->get('kernel')->getRootDir()."/../uploads/file";
$directory=$request->request->get('directory');
$dirsource =$request->request->get('subdirectory');
$namesource =$request->request->get('filename');
$canupdate =$this->getPermission($access,$directory);
if(!$canupdate) throw $this->createNotFoundException('Permission denied');
$fs = new Filesystem();
// Déplacer le fichier
$dirdestination=str_replace("__trash/","",$dirsource);
$urlsource=$racine."/".$directory."/".$dirsource."/".$namesource;
$urldestination=str_replace("__trash/","/",$urlsource);
$fs->mkdir($racine."/".$directory."/".$dirdestination);
if($fs->exists($urlsource)) {
if(is_dir($urlsource)) {
$fs->mirror($urlsource,$urldestination);
$fs->remove($urlsource);
}
else $fs->rename($urlsource,$urldestination,true);
}
// Déplacer le thumb
$urlsource=$racine."/".$directory."/".$dirsource."/thumb/".$namesource;
$urldestination=str_replace("__trash/","/",$urlsource);
$fs->mkdir($racine."/".$directory."/".$dirdestination."/thumb");
if($fs->exists($urlsource)) {
if(is_dir($urlsource)) {
$fs->mirror($urlsource,$urldestination);
$fs->remove($urlsource);
}
else $fs->rename($urlsource,$urldestination,true);
}
// Déplacer le thumbmini
$urlsource=$racine."/".$directory."/".$dirsource."/thumbmini/".$namesource;
$urldestination=str_replace("__trash/","/",$urlsource);
$fs->mkdir($racine."/".$directory."/".$dirdestination."/thumbmini");
if($fs->exists($urlsource)) {
if(is_dir($urlsource)) {
$fs->mirror($urlsource,$urldestination);
$fs->remove($urlsource);
}
else $fs->rename($urlsource,$urldestination,true);
}
$response = new Response(json_encode($output));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
public function purgetrashAction($directory,Request $request,$access="config")
{
$output=array();
$canupdate =$this->getPermission($access,$directory);
if(!$canupdate) throw $this->createNotFoundException('Permission denied');
$fs = new Filesystem();
$url=$this->get('kernel')->getRootDir()."/../uploads/file/".$directory."/__trash";
if($fs->exists($url)) {
$fs->remove($url);
}
return $this->redirectToRoute('cadoles_core_'.$access.'_file_list',['directory'=>$directory]);
}
public function deleteAction(Request $request,$access="config") public function deleteAction(Request $request,$access="config")
{ {
// S'assurer que c'est un appel ajax // S'assurer que c'est un appel ajax
@ -247,7 +503,9 @@ class FileController extends Controller
$filename=$request->request->get('filename'); $filename=$request->request->get('filename');
if($subdirectory) $directory.="/".$subdirectory; if($subdirectory) $directory.="/".$subdirectory;
$this->getPermission($access,$directory); $canupdate =$this->getPermission($access,$directory);
if(!$canupdate) throw $this->createNotFoundException('Permission denied');
$fs = new Filesystem(); $fs = new Filesystem();
$url=$this->get('kernel')->getRootDir()."/../uploads/file/".$directory."/".$filename; $url=$this->get('kernel')->getRootDir()."/../uploads/file/".$directory."/".$filename;
if($fs->exists($url)) { if($fs->exists($url)) {
@ -267,25 +525,44 @@ class FileController extends Controller
} }
$output=array(); $output=array();
$directory=$request->request->get('directory');+ $directory=$request->request->get('directory');
// Récupération du répertoire source et le nom du fichier // Récupération du répertoire source et le nom du fichier
$racine=$this->get('kernel')->getRootDir()."/../uploads/file"; $racine=$this->get('kernel')->getRootDir()."/../uploads/file";
$dirsource =$request->request->get('dirsource'); $directory = $request->request->get('directory');
$namesource =$request->request->get('namesource'); $dirsource = $request->request->get('dirsource');
$dirdestination =$request->request->get('dirdestination'); $namesource = $request->request->get('namesource');
$namedestination =$request->request->get('namedestination'); $dirdestination = $request->request->get('dirdestination');
$namedestination = $request->request->get('namedestination');
$destid=$request->request->get('destid');
$this->getPermission($access,$directory); $canupdate =$this->getPermission($access,$directory);
if(!$canupdate) throw $this->createNotFoundException('Permission denied');
$fs = new Filesystem(); $fs = new Filesystem();
// Déplacer le fichier // Déplacer le fichier
$urlsource=$racine."/".$dirsource."/".$namesource; $urlsource=str_replace("//","/",$racine."/".$dirsource."/".$namesource);
$urldestination=$racine."/".$dirdestination."/".$namedestination; $urldestination=str_replace("//","/",$racine."/".$dirdestination."/".$namedestination);
// Controle de cohérance du déplacement
$fgerror=false;
if(empty($racine)) $fgerror=true;
if(empty($dirsource)) $fgerror=true;
if(empty($directory)) $fgerror=true;
if($urlsource==$urldestination) $fgerror=true;
if(stripos($urldestination,$urlsource)!==false) $fgerror=true;
if($fgerror) return new JsonResponse(array('message' => 'Interdit'), 400);
if($fs->exists($urlsource)) { if($fs->exists($urlsource)) {
$fs->rename($urlsource,$urldestination); if(is_dir($urlsource)) {
$fs->mirror($urlsource,$urldestination);
$fs->remove($urlsource);
}
else
$fs->rename($urlsource,$urldestination, true);
} }
// Déplacer le thumb // Déplacer le thumb
@ -293,7 +570,12 @@ class FileController extends Controller
$urlsource=$racine."/".$dirsource."/thumb/".$namesource; $urlsource=$racine."/".$dirsource."/thumb/".$namesource;
$urldestination=$racine."/".$dirdestination."/thumb/".$namedestination; $urldestination=$racine."/".$dirdestination."/thumb/".$namedestination;
if($fs->exists($urlsource)) { if($fs->exists($urlsource)) {
$fs->rename($urlsource,$urldestination); if(is_dir($urlsource)) {
$fs->mirror($urlsource,$urldestination);
$fs->remove($urlsource);
}
else
$fs->rename($urlsource,$urldestination, true);
} }
// Déplacer le thumbmini // Déplacer le thumbmini
@ -301,7 +583,12 @@ class FileController extends Controller
$urlsource=$racine."/".$dirsource."/thumbmini/".$namesource; $urlsource=$racine."/".$dirsource."/thumbmini/".$namesource;
$urldestination=$racine."/".$dirdestination."/thumbmini/".$namedestination; $urldestination=$racine."/".$dirdestination."/thumbmini/".$namedestination;
if($fs->exists($urlsource)) { if($fs->exists($urlsource)) {
$fs->rename($urlsource,$urldestination); if(is_dir($urlsource)) {
$fs->mirror($urlsource,$urldestination);
$fs->remove($urlsource);
}
else
$fs->rename($urlsource,$urldestination, true);
} }
$response = new Response(json_encode($output)); $response = new Response(json_encode($output));
@ -309,6 +596,7 @@ class FileController extends Controller
return $response; return $response;
} }
public function viewAction($directory,$filename,Request $request,$access="config") public function viewAction($directory,$filename,Request $request,$access="config")
{ {
$this->getPermission($access,$directory); $this->getPermission($access,$directory);
@ -447,8 +735,9 @@ class FileController extends Controller
// On s'assure que l'utilisateur à la permission de voir // On s'assure que l'utilisateur à la permission de voir
$page=$widget->getPage(); $page=$widget->getPage();
$em->getRepository("CadolesPortalBundle:Page")->getPermission($this->getUser(),$page,$cansee,$canupdate); $em->getRepository("CadolesPortalBundle:Page")->getPermission($this->getUser(),$page,$cansee,$canupdate,$canadd);
if(!$cansee) throw $this->createNotFoundException('Permission denied'); if(!$cansee) throw $this->createNotFoundException('Permission denied');
return $canadd;
break; break;
case "projecttask": case "projecttask":
@ -461,6 +750,7 @@ class FileController extends Controller
$user=$this->getUser(); $user=$this->getUser();
$em->getRepository("CadolesPortalBundle:Project")->getPermission($user,$project,$cansee,$canupdate,$canadd); $em->getRepository("CadolesPortalBundle:Project")->getPermission($user,$project,$cansee,$canupdate,$canadd);
if(!$cansee) throw $this->createNotFoundException('Permission denied'); if(!$cansee) throw $this->createNotFoundException('Permission denied');
return $canupdate;
break; break;
case "calendarevent": case "calendarevent":
@ -471,13 +761,12 @@ class FileController extends Controller
// On s'assure que l'utilisateur à la permission de voir // On s'assure que l'utilisateur à la permission de voir
$calendar=$calendarevent->getCalendar(); $calendar=$calendarevent->getCalendar();
$user=$this->getUser(); $user=$this->getUser();
$em->getRepository("CadolesPortalBundle:Calendar")->getPermission($user,$calendar,$cansee,$canupdate); $em->getRepository("CadolesPortalBundle:Calendar")->getPermission($user,$calendar,$cansee,$canupdate,$canadd);
if(!$cansee) throw $this->createNotFoundException('Permission denied'); if(!$cansee) throw $this->createNotFoundException('Permission denied');
return $canadd;
break; break;
} }
} }
else $canupdate=true; else $canupdate=true;
return $canupdate;
} }
} }

View File

@ -139,16 +139,16 @@ class GroupController extends Controller
case 6 : case 6 :
$qb->orderBy('table.owner',$order[0]["dir"]); $qb->orderBy('table.owner',$order[0]["dir"]);
break; break;
case 7 : case 8 :
$qb->orderBy('table.fgcancreatepage',$order[0]["dir"]); $qb->orderBy('table.fgcancreatepage',$order[0]["dir"]);
break; break;
case 8 : case 9 :
$qb->orderBy('table.fgcancreatecalendar',$order[0]["dir"]); $qb->orderBy('table.fgcancreatecalendar',$order[0]["dir"]);
break; break;
case 9 : case 10 :
$qb->orderBy('table.fgcancreateblog',$order[0]["dir"]); $qb->orderBy('table.fgcancreateblog',$order[0]["dir"]);
break; break;
case 10 : case 11 :
$qb->orderBy('table.fgcancreateproject',$order[0]["dir"]); $qb->orderBy('table.fgcancreateproject',$order[0]["dir"]);
break; break;
} }
@ -175,30 +175,35 @@ class GroupController extends Controller
if(!$data->getFgall()) $action .="<a href='".$this->generateUrl('cadoles_core_config_group_users', array('id'=>$data->getId()))."'><i class='fa fa-users fa-2x fa-fw'></i></a>"; if(!$data->getFgall()) $action .="<a href='".$this->generateUrl('cadoles_core_config_group_users', array('id'=>$data->getId()))."'><i class='fa fa-users fa-2x fa-fw'></i></a>";
if($data->getFgcanshare()) if($data->getFgcanshare())
$action.="<a href='".$this->generateUrl('cadoles_core_'.$access.'_group_statistic', array('id'=>$data->getId()))."'><i class='fa fa-bar-chart-o fa-fw fa-2x'></i></a>"; $action.="<a href='".$this->generateUrl('cadoles_core_'.$access.'_group_statistic', array('id'=>$data->getId()))."'><i class='fa fa-chart-area fa-fw fa-2x'></i></a>";
} }
else { else {
$fgproprio=($user==$data->getOwner()); $fgcanupdate=($user==$data->getOwner());
$fgmanager=false; $fgcanmanage=false;
$usergroup=$this->getDoctrine()->getRepository("CadolesCoreBundle:UserGroup")->findOneBy(["user"=>$this->getUser(),"group"=>$data]); $usergroup=$this->getDoctrine()->getRepository("CadolesCoreBundle:UserGroup")->findOneBy(["user"=>$this->getUser(),"group"=>$data]);
if($usergroup) $fgmanager=$usergroup->getFgmanager(); if($usergroup) $fgcanmanage=($usergroup->getRolegroup()>=90);
// Modification possible uniquement si l'utilisateur est propriétaire du groupe // Modification possible uniquement si l'utilisateur est propriétaire du groupe
if($fgproprio) { if($fgcanupdate) {
$action .="<a href='".$this->generateUrl('cadoles_core_'.$access.'_group_update', array('id'=>$data->getId()))."'><i class='fa fa-file fa-2x fa-fw'></i></a>"; $action .="<a href='".$this->generateUrl('cadoles_core_'.$access.'_group_update', array('id'=>$data->getId()))."'><i class='fa fa-file fa-2x fa-fw'></i></a>";
$action .="<a href='".$this->generateUrl('cadoles_core_'.$access.'_group_delete', array('id'=>$data->getId()))."'><i class='fa fa-trash fa-2x fa-fw'></i></a>"; $action .="<a href='".$this->generateUrl('cadoles_core_'.$access.'_group_delete', array('id'=>$data->getId()))."'><i class='fa fa-trash fa-2x fa-fw'></i></a>";
} }
// Gestion des utilisateurs du groupe uniquement pour le proprio ou les managers // Gestion des utilisateurs du groupe uniquement pour le proprio ou les managers
if($fgproprio||$fgmanager) { if($fgcanupdate||$fgcanmanage) {
$action .="<a href='".$this->generateUrl('cadoles_core_'.$access.'_group_users', array('id'=>$data->getId()))."'><i class='fa fa-users fa-2x fa-fw'></i></a>"; $action .="<a href='".$this->generateUrl('cadoles_core_'.$access.'_group_users', array('id'=>$data->getId()))."'><i class='fa fa-users fa-2x fa-fw'></i></a>";
} }
else { else {
$action.="<a href='".$this->generateUrl('cadoles_core_'.$access.'_group_out', array('id'=>$data->getId()))."'><i class='fa fa-sign-out fa-fw fa-2x'></i></a>"; // On ne peut se désinscrire que si le groupe est ouvert et qu'il n'est pas lié à un groupe ldap ou sso
$fgcanleave=true;
if($data->getFgtemplate() or $data->getFgall()) $fgcanleave=false;
elseif(!$data->getFgcanshare() && !$data->getFgopen()) $fgcanleave=false;
elseif($data->getFgcanshare() && !$this->get('session')->get('permunsubscribe') && !$data->getFgopen()) $fgcanleave=false;
if($fgcanleave) $action.="<a href='".$this->generateUrl('cadoles_core_'.$access.'_group_out', array('id'=>$data->getId()))."'><i class='fa fa-sign-out-alt fa-fw fa-2x'></i></a>";
} }
if($data->getFgcanshare()) if($data->getFgcanshare())
$action.="<a href='".$this->generateUrl('cadoles_core_'.$access.'_group_statistic', array('id'=>$data->getId()))."'><i class='fa fa-bar-chart-o fa-fw fa-2x'></i></a>"; $action.="<a href='".$this->generateUrl('cadoles_core_'.$access.'_group_statistic', array('id'=>$data->getId()))."'><i class='fa fa-chart-area fa-fw fa-2x'></i></a>";
} }
@ -217,6 +222,12 @@ class GroupController extends Controller
$userinfo.="<br>".$data->getOwner()->getUsername(); $userinfo.="<br>".$data->getOwner()->getUsername();
} }
$visitecpt="";
$visitelast=null;
foreach($data->getUsers() as $usergroup) {
$visitecpt+=$usergroup->getVisitecpt();
$visitelast=($usergroup->getVisitedate()>$visitelast?$usergroup->getVisitedate():$visitelast);
}
array_push($output["data"],array( array_push($output["data"],array(
@ -227,6 +238,7 @@ class GroupController extends Controller
$filtre, $filtre,
($data->getFgcanshare()?"oui":"non"), ($data->getFgcanshare()?"oui":"non"),
$userinfo, $userinfo,
($visitelast?$visitelast->format("d/m/Y H:i")."<br>":"")."nb = ".$visitecpt,
($data->getFgcancreatepage()?"oui":"non"), ($data->getFgcancreatepage()?"oui":"non"),
($data->getFgcancreatecalendar()?"oui":"non"), ($data->getFgcancreatecalendar()?"oui":"non"),
($data->getFgcancreateblog()?"oui":"non"), ($data->getFgcancreateblog()?"oui":"non"),
@ -358,12 +370,10 @@ class GroupController extends Controller
if($group->getLdapfilter()==""&&$group->getAttributes()=="") if($group->getLdapfilter()==""&&$group->getAttributes()=="")
$action.="<a style='cursor:pointer' onClick='addUsers(".$data->getId().")'><i class='fa fa-plus fa-fw'></i></a>"; $action.="<a style='cursor:pointer' onClick='addUsers(".$data->getId().")'><i class='fa fa-plus fa-fw'></i></a>";
$fgmanager="<input type='checkbox' class='switch' onChange='switchManager(".$data->getId().");'>";
// Avatar // Avatar
$avatar="<img onClick='seeUser(".$data->getId().")' src='/".$this->container->getParameter('alias')."/uploads/avatar/".$data->getAvatar()."' style='width:30px;background-color:#337ab7;margin:auto;display:block;cursor:pointer;'>"; $avatar="<img onClick='seeUser(".$data->getId().")' src='/".$this->container->getParameter('alias')."/uploads/avatar/".$data->getAvatar()."' style='width:30px;background-color:#337ab7;margin:auto;display:block;cursor:pointer;'>";
array_push($output["data"],array("DT_RowId"=>"user".$data->getId(),$action,$avatar,$data->getUsername(),$data->getEmail(),"",$fgmanager)); array_push($output["data"],array("DT_RowId"=>"user".$data->getId(),$action,$avatar,$data->getUsername(),$data->getEmail(),"",""));
} }
// Retour // Retour
@ -482,6 +492,14 @@ class GroupController extends Controller
} }
$datas=$qb->setFirstResult($start)->setMaxResults($length)->getQuery()->getResult(); $datas=$qb->setFirstResult($start)->setMaxResults($length)->getQuery()->getResult();
$user=$this->getUser();
$config=$em->getRepository('CadolesCoreBundle:Config')->find("datausers");
$fields=$config->getValue();
$fields=json_decode($fields,true);
if(!is_array($fields)) $fields=[];
if(!array_key_exists("visite",$fields)) $fields["visite"]["perm"]=0;
$fgviewvisite=($fields["visite"]["perm"]==1);
foreach($datas as $data) { foreach($datas as $data) {
// Propriétaire // Propriétaire
@ -497,22 +515,32 @@ class GroupController extends Controller
$avatar="<img onClick='seeUser(".$data->getId().")' src='/".$this->container->getParameter('alias')."/uploads/avatar/".$data->getAvatar()."' style='width:30px;background-color:#337ab7;margin:auto;display:block;cursor:pointer'>"; $avatar="<img onClick='seeUser(".$data->getId().")' src='/".$this->container->getParameter('alias')."/uploads/avatar/".$data->getAvatar()."' style='width:30px;background-color:#337ab7;margin:auto;display:block;cursor:pointer'>";
// Flag manager // Flag manager
$fgmanager=""; $rolegroup="";
if($fgcanshare) { if($fgcanshare) {
if($fgproprio) $rolegroup="Propriétaire du groupe";
elseif($user==$usergroup->getUser()) $rolegroup="Gestionnaire";
else {
$selectuser=($usergroup->getRolegroup()==0?"selected='selected'":"");
$selectwritter=($usergroup->getRolegroup()==50?"selected='selected'":"");
$selectmanager=($usergroup->getRolegroup()==90?"selected='selected'":"");
$checked=($usergroup->getFgmanager()?"checked":""); $rolegroup='<select id="roleuser-'.$data->getId().'" name="user[visible]" onChange="changeRole('.$data->getId().');"><option value="0" '.$selectuser.'>Utilisateur</option><option value="50" '.$selectwritter.'>Collaborateur</option><option value="90" '.$selectmanager.'>Gestionnaire</option></select>';
$fgmanager="<input type='checkbox' class='switch' onChange='switchManager(".$data->getId().");' $checked>"; }
if($fgproprio) $fgmanager="Propriétaire du groupe";
} }
// Visite // Visite
if($fgviewvisite) {
$visite=""; $visite="";
if($usergroup->getVisitedate()) { if($usergroup->getVisitedate()) {
$visite=$usergroup->getVisitedate()->format("d/m/Y H:i")."<br>nb = ".$usergroup->getVisitecpt(); $visite=$usergroup->getVisitedate()->format("d/m/Y H:i")."<br>nb = ".$usergroup->getVisitecpt();
} }
}
if($fgviewvisite)
$tmp=array("DT_RowId"=>"user".$data->getId(),$action,$avatar,$data->getUsername(),$data->getEmail(),$visite,$rolegroup);
else
$tmp=array("DT_RowId"=>"user".$data->getId(),$action,$avatar,$data->getUsername(),$data->getEmail(),$rolegroup);
array_push($output["data"],array("DT_RowId"=>"user".$data->getId(),$action,$avatar,$data->getUsername(),$data->getEmail(),$visite,$fgmanager)); array_push($output["data"],$tmp);
} }
// Retour // Retour
@ -545,11 +573,12 @@ class GroupController extends Controller
} }
$key = Uuid::uuid4(); $key = Uuid::uuid4();
$usergroup=new Usergroup; $usergroup=new UserGroup();
$user=$em->getRepository("CadolesCoreBundle:User")->find($userid); $user=$em->getRepository("CadolesCoreBundle:User")->find($userid);
$usergroup->setUser($user); $usergroup->setUser($user);
$usergroup->setGroup($group); $usergroup->setGroup($group);
$usergroup->setKeyvalue($key); $usergroup->setKeyvalue($key);
$usergroup->setRolegroup(0);
$em->persist($usergroup); $em->persist($usergroup);
$em->flush(); $em->flush();
@ -559,9 +588,9 @@ class GroupController extends Controller
$websocket = $this->container->get('cadoles.websocket.pushmessage')->send($key->toString(),$userid,$groupid,$message); $websocket = $this->container->get('cadoles.websocket.pushmessage')->send($key->toString(),$userid,$groupid,$message);
// Notification mail auprès de la personne inscrite // Notification mail auprès de la personne inscrite
if($group->getFgcanshare()) { if($group->getFgcanshare()&&$this->get('session')->get('fgnotifgroup')) {
$idpage =$group->getPages()->first()->getId(); $idpage =$group->getPages()->first()->getId();
$url = $this->generateUrl('cadoles_core_home', ["id"=>$idpage], UrlGeneratorInterface::ABSOLUTE_URL); $url = $this->generateUrl('cadoles_core_redirect', ["route"=>"cadoles_core_home","id"=>$idpage], UrlGeneratorInterface::ABSOLUTE_URL);
$texthtml="Vous venez d'être inscrit dans le groupe de travail : ".$group->getLabel()."<br>Suivez le lien suivant pour y accéder = <a href='$url'>$url</a>"; $texthtml="Vous venez d'être inscrit dans le groupe de travail : ".$group->getLabel()."<br>Suivez le lien suivant pour y accéder = <a href='$url'>$url</a>";
$text="Vous venez d'être inscrit dans le groupe de travail : ".$group->getLabel()."<br>Suivez le lien suivant pour y accéder = $url"; $text="Vous venez d'être inscrit dans le groupe de travail : ".$group->getLabel()."<br>Suivez le lien suivant pour y accéder = $url";
@ -613,7 +642,7 @@ class GroupController extends Controller
$em->flush(); $em->flush();
// Notification mail auprès des managers // Notification mail auprès des managers
if($group->getFgcanshare()) { if($group->getFgcanshare()&&$this->get('session')->get('fgnotifgroup')) {
$text=$user->getUsername()." a été désinscrit du groupe de travail : ".$group->getLabel(); $text=$user->getUsername()." a été désinscrit du groupe de travail : ".$group->getLabel();
$template="template"; $template="template";
$mail_params=array( $mail_params=array(
@ -621,10 +650,11 @@ class GroupController extends Controller
"body_html"=>nl2br($text), "body_html"=>nl2br($text),
"body_text"=>$text "body_text"=>$text
); );
$managers=$em->getRepository("CadolesCoreBundle:Usergroup")->findBy(array("group"=>$groupid,"fgmanager"=>true)); $usergroups=$em->getRepository("CadolesCoreBundle:Usergroup")->findBy(array("group"=>$groupid));
$to=array(); $to=array();
foreach($managers as $manager) { foreach($usergroups as $usergroup) {
array_push($to,$manager->getUser()->getEmail()); if($usergroup->getRolegroup()>=90)
array_push($to,$usergroup->getUser()->getEmail());
} }
$from = $this->getParameter('noreply');; $from = $this->getParameter('noreply');;
@ -658,7 +688,7 @@ class GroupController extends Controller
$em->flush(); $em->flush();
// Notification mail auprès des managers // Notification mail auprès des managers
if($group->getFgcanshare()) { if($group->getFgcanshare()&&$this->get('session')->get('fgnotifgroup')) {
$text=$user->getUsername()." a été désinscrit du groupe de travail : ".$group->getLabel(); $text=$user->getUsername()." a été désinscrit du groupe de travail : ".$group->getLabel();
$template="template"; $template="template";
$mail_params=array( $mail_params=array(
@ -666,10 +696,11 @@ class GroupController extends Controller
"body_html"=>nl2br($text), "body_html"=>nl2br($text),
"body_text"=>$text "body_text"=>$text
); );
$managers=$em->getRepository("CadolesCoreBundle:Usergroup")->findBy(array("group"=>$group,"fgmanager"=>true)); $usergroups=$em->getRepository("CadolesCoreBundle:Usergroup")->findBy(array("group"=>$group));
$to=array(); $to=array();
foreach($managers as $manager) { foreach($usergroups as $usergroup) {
array_push($to,$manager->getUser()->getEmail()); if($usergroup->getRolegroup()>=90)
array_push($to,$usergroup->getUser()->getEmail());
} }
$from = $this->getParameter('noreply');; $from = $this->getParameter('noreply');;
@ -683,7 +714,7 @@ class GroupController extends Controller
return $this->redirect($this->generateUrl("cadoles_core_user_group")); return $this->redirect($this->generateUrl("cadoles_core_user_group"));
} }
public function switchmanagerAction(Request $request,$access="config") public function changeroleAction(Request $request,$access="config")
{ {
// S'assurer que c'est un appel ajax // S'assurer que c'est un appel ajax
if (!$request->isXmlHttpRequest()) { if (!$request->isXmlHttpRequest()) {
@ -695,12 +726,13 @@ class GroupController extends Controller
$output=array(); $output=array();
$userid=$request->request->get('user'); $userid=$request->request->get('user');
$groupid=$request->request->get('group'); $groupid=$request->request->get('group');
$role=$request->request->get('role');
$group=$em->getRepository("CadolesCoreBundle:Group")->find($groupid); $group=$em->getRepository("CadolesCoreBundle:Group")->find($groupid);
$this->canManager($group,$access); $this->canManager($group,$access);
$data = $em->getRepository("CadolesCoreBundle:Usergroup")->findOneBy(array("user"=>$userid,"group"=>$groupid)); $data = $em->getRepository("CadolesCoreBundle:Usergroup")->findOneBy(array("user"=>$userid,"group"=>$groupid));
if($data) $data->setFgmanager(!$data->getFgmanager()); if($data) $data->setRolegroup($role);
$em->persist($data); $em->persist($data);
$em->flush(); $em->flush();
@ -856,7 +888,7 @@ class GroupController extends Controller
$this->ctrlFgcanshare($data,$access); $this->ctrlFgcanshare($data,$access);
// Si le propriétaire change de main on prévient le nouveau propriétaire // Si le propriétaire change de main on prévient le nouveau propriétaire
if($data->getOwner()&&$data->getOwner()!=$oldowner) { if($data->getOwner()&&$data->getOwner()!=$oldowner&&$this->get('session')->get('fgnotifgroup')) {
// Email à destination de l'inscript pour le prévenir qu'un administrateur doit valider // Email à destination de l'inscript pour le prévenir qu'un administrateur doit valider
$text="On vient de vous tranférer la propriété du groupe ".$data->getLabel(); $text="On vient de vous tranférer la propriété du groupe ".$data->getLabel();
$template="template"; $template="template";
@ -999,6 +1031,14 @@ class GroupController extends Controller
// idreturn ? // idreturn ?
$idreturn=$request->get("idreturn"); $idreturn=$request->get("idreturn");
$em = $this->getDoctrine()->getManager();
$config=$em->getRepository('CadolesCoreBundle:Config')->find("datausers");
$fields=$config->getValue();
$fields=json_decode($fields,true);
if(!is_array($fields)) $fields=[];
if(!array_key_exists("visite",$fields)) $fields["visite"]["perm"]=0;
$fgviewvisite=($fields["visite"]["perm"]==1);
// Affichage du formulaire // Affichage du formulaire
return $this->render($this->labelentity.':users.html.twig', [ return $this->render($this->labelentity.':users.html.twig', [
'useheader' => true, 'useheader' => true,
@ -1007,9 +1047,65 @@ class GroupController extends Controller
'access' => $access, 'access' => $access,
$this->labeldata => $data, $this->labeldata => $data,
'idreturn' => $idreturn, 'idreturn' => $idreturn,
'fgviewvisite' => $fgviewvisite,
]); ]);
} }
public function groupexportAction(Request $request, $access="config")
{
$em = $this->getDoctrine()->getManager();
$dir = $this->get('kernel')->getRootDir() . '/../uploads/export/';
$file = "exportgroup.csv";
$fs = new Filesystem();
$fs->mkdir($dir);
$csvh = fopen($dir.$file, 'w');
$d = ';'; // this is the default but i like to be explicit
$e = '"'; // this is the default but i like to be explicit
// Entête de colonne
$data=["id","Label","Ouvert","Groupe de Travail","Propriétaire","Date Visite","Cpt Visite","Création Page","Création Calendriers","Création Blogs","Création Projets"];
fputcsv($csvh, $data, $d, $e);
// Liste des utilisateurs en fonction du role de l'utilisateur en cours
$groups=$em->getRepository("CadolesCoreBundle:Group")->findAll();
foreach($groups as $group) {
$data = [
"id"=>$group->getId(),
"label"=>$group->getLabel(),
"fgopen"=>($group->getFgopen()?"oui":"non"),
"fgcanshare"=>($group->getFgcanshare()?"oui":"non"),
"owner"=>($group->getOwner()?$group->getOwner()->getUsername():""),
"visitedate"=>"",
"visitecpt"=>"",
"fgcancreatepage"=>($group->getFgcancreatepage()?"oui":"non"),
"fgcancreatecalendar"=>($group->getFgcancreatecalendar()?"oui":"non"),
"fgcancreateblog"=>($group->getFgcancreateblog()?"oui":"non"),
"fgcancreateproject"=>($group->getFgcancreateproject()?"oui":"non"),
];
$visitecpt="";
$visitelast=null;
foreach($group->getUsers() as $usergroup) {
$visitecpt+=$usergroup->getVisitecpt();
$visitelast=($usergroup->getVisitedate()>$visitelast?$usergroup->getVisitedate():$visitelast);
}
$data["visitedate"]=($visitelast?$visitelast->format("d/m/Y H:i"):"");
$data["visitecpt"]=$visitecpt;
fputcsv($csvh, $data, $d, $e);
}
fclose($csvh);
$response = new BinaryFileResponse($dir.$file);
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT);
return $response;
}
public function usergroupexportAction($id,Request $request, $access="config") public function usergroupexportAction($id,Request $request, $access="config")
{ {
// Récupération de l'enregistrement courant // Récupération de l'enregistrement courant
@ -1131,11 +1227,51 @@ class GroupController extends Controller
]); ]);
} }
public function invitationAction($id,Request $request, $access="config")
{
// Récupération de l'enregistrement courant
$em = $this->getDoctrine()->getManager();
$group=$this->getData($id);
$this->canManager($group,$access);
$invitations=$group->getInvitations();
if(!is_array($invitations)) $invitations=[];
foreach($invitations as $key => $mail) {
$user=$em->getRepository("CadolesCoreBundle:User")->findOneBy(["email"=>$mail]);
// Si l'utilisateur est inscript plus la peine de le suivre
if($user) {
$listinvitations[$key]=["email"=>$mail,"statut"=>"","relance"=>false];
$usergroup=$em->getRepository("CadolesCoreBundle:UserGroup")->findOneBy(["user"=>$user,"group"=>$group]);
if($usergroup)
$listinvitations[$key]["statut"]="Inscrit dans le groupe";
else
$listinvitations[$key]["statut"]="Inscrit sur ".$this->get('session')->get('appname')." mais pas dans le groupe";
}
else {
$listinvitations[$key]=["email"=>$mail,"statut"=>"Non inscrit sur ".$this->get('session')->get('appname'),"relance"=>true];
$user=$em->getRepository("CadolesCoreBundle:Registration")->findOneBy(["email"=>$mail]);
if($user) {
$listinvitations[$key]["statut"]=$user->getStatut()->getLabel();
$listinvitations[$key]["relance"]=false;
}
}
}
return $this->render('CadolesCoreBundle:Group:invitations.html.twig',[
'useheader' => false,
'usemenu' => false,
'usesidebar' => false,
'id' => $id,
'invitations' => $listinvitations,
]);
}
protected function canManager($group,$access) { protected function canManager($group,$access) {
if($access!="config") { if($access!="config") {
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
$ismanager=$em->getRepository("CadolesCoreBundle:Usergroup")->findOneBy(["group"=>$group,"user"=>$this->getUser(),"fgmanager"=>true]); $user=$em->getRepository("CadolesCoreBundle:Usergroup")->findOneBy(["group"=>$group,"user"=>$this->getUser()]);
if(!$ismanager) if(!$user||$user->getRolegroup()<90)
throw $this->createNotFoundException('Permission denied'); throw $this->createNotFoundException('Permission denied');
} }
} }
@ -1151,19 +1287,27 @@ class GroupController extends Controller
protected function ctrlOwner($group) { protected function ctrlOwner($group) {
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
// Le propriétaire passe manager
$usergroups=$em->getRepository("CadolesCoreBundle:Usergroup")->findBy(["group"=>$group,"rolegroup"=>"100"]);
foreach($usergroups as $usergroup) {
$usergroup->setRolegroup(90);
$em->persist($usergroup);
$em->flush();
}
// Le propriétaire prend son role dans le groupe
if($group->getOwner()) { if($group->getOwner()) {
$usergroup=$em->getRepository("CadolesCoreBundle:Usergroup")->findOneBy(["group"=>$group,"user"=>$group->getOwner()]); $usergroup=$em->getRepository("CadolesCoreBundle:Usergroup")->findOneBy(["group"=>$group,"user"=>$group->getOwner()]);
if(!$usergroup) { if(!$usergroup) {
$key = Uuid::uuid4(); $key = Uuid::uuid4();
$usergroup=new Usergroup; $usergroup=new UserGroup();
$usergroup->setUser($group->getOwner()); $usergroup->setUser($group->getOwner());
$usergroup->setGroup($group); $usergroup->setGroup($group);
$usergroup->setKeyvalue($key); $usergroup->setKeyvalue($key);
} }
$usergroup->setFgmanager(true); $usergroup->setRolegroup(100);
$em->persist($usergroup); $em->persist($usergroup);
$em->flush(); $em->flush();
} }
} }

View File

@ -23,6 +23,10 @@ class MailController extends Controller
throw $this->createNotFoundException('Unable to find '.$this->labeldata); throw $this->createNotFoundException('Unable to find '.$this->labeldata);
} }
// On récupère la liste des email invités
$invitations=$group->getInvitations();
if(!is_array($invitations)) $invitations=[];
// Création du formulaire // Création du formulaire
$form = $this->createForm(MailType::class); $form = $this->createForm(MailType::class);
@ -34,7 +38,7 @@ class MailController extends Controller
// Sujet // Sujet
$url = $this->generateUrl('cadoles_core_registration',[], UrlGeneratorInterface::ABSOLUTE_URL)."?group=".$group->getId(); $url = $this->generateUrl('cadoles_core_registration',[], UrlGeneratorInterface::ABSOLUTE_URL)."?group=".$group->getId();
$message = "Bonjour,<br><br>En tant que responsable du projet <b>'".$group->getLabel()."'</b>, je vous ai invité à rejoindre cette communauté de travail<br><br>"; $message = "Bonjour,<br><br>En tant que responsable du groupe <b>'".$group->getLabel()."'</b>, je vous ai invité à rejoindre cette communauté de travail<br><br>";
$message.= "Merci de bien vouloir tout dabord vous inscrire sur <b>".$this->get('session')->get('appname')."</b> en suivant le lien suivant<br>"; $message.= "Merci de bien vouloir tout dabord vous inscrire sur <b>".$this->get('session')->get('appname')."</b> en suivant le lien suivant<br>";
$message.= "<a href='$url'>$url</a><br><br>"; $message.= "<a href='$url'>$url</a><br><br>";
$message.= "Une fois le processus d'inscription complété, vous serez automatiquement rattaché à notre groupe de travail<br><br>"; $message.= "Une fois le processus d'inscription complété, vous serez automatiquement rattaché à notre groupe de travail<br><br>";
@ -64,7 +68,14 @@ class MailController extends Controller
if($usergroup) array_push($usersin,$user); if($usergroup) array_push($usersin,$user);
else array_push($usersnotin,$user); else array_push($usersnotin,$user);
} }
else {
// On enregistre l'invitation si elle n'existe pas déjà
if(!in_array($mail,$invitations)) {
array_push($invitations,$mail);
} }
}
}
$text=$form->get("message")->getData(); $text=$form->get("message")->getData();
$subject=$form->get("subject")->getData(); $subject=$form->get("subject")->getData();
@ -78,6 +89,17 @@ class MailController extends Controller
$fromName = $this->getUser()->getFirstname()." ".$this->getUser()->getLastname(); $fromName = $this->getUser()->getFirstname()." ".$this->getUser()->getLastname();
$message = $this->container->get('cadoles.core.service.mail'); $message = $this->container->get('cadoles.core.service.mail');
$message->sendEmail($template, $mail_params, $to, $from, $fromName); $message->sendEmail($template, $mail_params, $to, $from, $fromName);
// Sauvegarde des invitation
$group->setInvitations($invitations);
$em->persist($group);
$em->flush();
}
else {
$email=$request->get("email");
if($email) {
$form->get('destinataire')->setData($email);
}
} }
if($closed && (!empty($usersin)||!empty($usersnotin))) { if($closed && (!empty($usersin)||!empty($usersnotin))) {

View File

@ -331,8 +331,15 @@ class PermmodoprofilController extends Controller
$this->addModeration($profil,'cadoles_portal_config_flux',1); $this->addModeration($profil,'cadoles_portal_config_flux',1);
$this->addModeration($profil,'cadoles_portal_config_notice',1); $this->addModeration($profil,'cadoles_portal_config_notice',1);
$this->addModeration($profil,'cadoles_portal_config_icon',1); $this->addModeration($profil,'cadoles_portal_config_icon',1);
$this->addModeration($profil,'cadoles_portal_config_syncbalado',0);
$this->addModeration($profil,'cadoles_portal_config_synccdt',0);
$this->addModeration($profil,'cadoles_portal_config_syncgepiannu',0);
$this->addModeration($profil,'cadoles_portal_config_syncgepisiecle',0);
$this->addModeration($profil,'cadoles_portal_config_synclimesurvey',0); $this->addModeration($profil,'cadoles_portal_config_synclimesurvey',0);
$this->addModeration($profil,'cadoles_portal_config_syncmoodle',0); $this->addModeration($profil,'cadoles_portal_config_syncmoodle',0);
$this->addModeration($profil,'cadoles_portal_config_syncnextcloud',0);
$this->addModeration($profil,'cadoles_portal_config_syncsacoche',0);
$this->addModeration($profil,'cadoles_portal_config_syncpiwik',0);
$this->addModeration($profil,'cadoles_portal_config_syncwordpress',0); $this->addModeration($profil,'cadoles_portal_config_syncwordpress',0);
$this->addModeration($profil,'cadoles_core_config_statistic',1); $this->addModeration($profil,'cadoles_core_config_statistic',1);
$this->addModeration($profil,'cadoles_core_config_mailing',1); $this->addModeration($profil,'cadoles_core_config_mailing',1);

View File

@ -212,7 +212,7 @@ class RegistrationController extends Controller
// Sur erreur // Sur erreur
$this->getErrorForm(null,$form,$request,$data,"submit",$idstatut); $this->getErrorForm(null,$form,$request,$data,"submit",$idstatut);
// Sur validation(z) // Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) { if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData(); $data = $form->getData();
@ -342,6 +342,8 @@ class RegistrationController extends Controller
// A voir retour sur un écran d'info indiquant si validation par admion ou s'il doit matter ses email // A voir retour sur un écran d'info indiquant si validation par admion ou s'il doit matter ses email
$this->get('session')->set('registrationinfo', $info); $this->get('session')->set('registrationinfo', $info);
$this->get('session')->set('registrationmode', "info"); $this->get('session')->set('registrationmode', "info");
$this->get('session')->set('registrationredirectto', null);
return $this->redirectToRoute('cadoles_core_registration_info'); return $this->redirectToRoute('cadoles_core_registration_info');
} }
else { else {
@ -360,12 +362,16 @@ class RegistrationController extends Controller
{ {
$info = $this->get('session')->get('registrationinfo'); $info = $this->get('session')->get('registrationinfo');
$mode = $this->get('session')->get('registrationmode'); $mode = $this->get('session')->get('registrationmode');
$redirectto = $this->get('session')->get('registrationredirectto');
return $this->render($this->labelentity.':info.html.twig', [ return $this->render($this->labelentity.':info.html.twig', [
'useheader' => true, 'useheader' => true,
'usemenu' => false, 'usemenu' => false,
'usesidebar' => false, 'usesidebar' => false,
'info' => $info, 'info' => $info,
'mode' => $mode 'mode' => $mode,
'redirectto' => $redirectto,
]); ]);
} }
@ -467,6 +473,7 @@ class RegistrationController extends Controller
{ {
$moderegistration = $this->getParameter('moderegistration'); $moderegistration = $this->getParameter('moderegistration');
$masteridentity = $this->getParameter('masteridentity'); $masteridentity = $this->getParameter('masteridentity');
if($moderegistration=="none"||$masteridentity!="SQL") if($moderegistration=="none"||$masteridentity!="SQL")
throw $this->createNotFoundException('Permission denied'); throw $this->createNotFoundException('Permission denied');
@ -489,6 +496,7 @@ class RegistrationController extends Controller
$this->get('session')->set('registrationinfo', $info); $this->get('session')->set('registrationinfo', $info);
$this->get('session')->set('registrationmode', $mode); $this->get('session')->set('registrationmode', $mode);
$this->get('session')->set('registrationredirectto', null);
} }
else { else {
$url=$this->getUrlLogin(); $url=$this->getUrlLogin();
@ -509,6 +517,7 @@ class RegistrationController extends Controller
$user->setPasswordDirect($data[0]->getPassword()); $user->setPasswordDirect($data[0]->getPassword());
$user->setVisible($data[0]->getVisible()); $user->setVisible($data[0]->getVisible());
$user->setMotivation($data[0]->getMotivation()); $user->setMotivation($data[0]->getMotivation());
$user->setNote($data[0]->getNote());
$user->setNiveau01($data[0]->getNiveau01()); $user->setNiveau01($data[0]->getNiveau01());
$user->setSiren($data[0]->getNiveau01()->getSiren()); $user->setSiren($data[0]->getNiveau01()->getSiren());
@ -538,16 +547,24 @@ class RegistrationController extends Controller
// Si invitation à un groupe : on le rattache directement à ce groupe // Si invitation à un groupe : on le rattache directement à ce groupe
$groupid=$data[0]->getGroupid(); $groupid=$data[0]->getGroupid();
$userid=$user->getId(); $userid=$user->getId();
if($groupid) { if($groupid) {
$group=$em->getRepository("CadolesCoreBundle:Group")->find($groupid); $group=$em->getRepository("CadolesCoreBundle:Group")->find($groupid);
if($group) { if($group) {
$idpage =$group->getPages()->first()->getId();
$url = $this->generateUrl('cadoles_core_redirect', ["route"=>"cadoles_core_home","id"=>$idpage], UrlGeneratorInterface::ABSOLUTE_URL);
$info="<p>Votre compte est à présent activé</p><p>Vous allez être redirigé vers la mire de connexion puis vers votre groupe de travail</p><p><a href='".$url."'>Connexion</a>";
$this->get('session')->set('registrationinfo', $info);
$this->get('session')->set('registrationredirectto', $url);
$key = Uuid::uuid4(); $key = Uuid::uuid4();
$usergroup=new Usergroup; $usergroup=new UserGroup();
$user=$em->getRepository("CadolesCoreBundle:User")->find($userid); $user=$em->getRepository("CadolesCoreBundle:User")->find($userid);
$usergroup->setUser($user); $usergroup->setUser($user);
$usergroup->setGroup($group); $usergroup->setGroup($group);
$usergroup->setKeyvalue($key); $usergroup->setKeyvalue($key);
$usergroup->setRolegroup(0);
$em->persist($usergroup); $em->persist($usergroup);
$em->flush(); $em->flush();
@ -686,6 +703,7 @@ class RegistrationController extends Controller
$mode="info"; $mode="info";
$this->get('session')->set('registrationinfo', $info); $this->get('session')->set('registrationinfo', $info);
$this->get('session')->set('registrationmode', $mode); $this->get('session')->set('registrationmode', $mode);
$this->get('session')->set('registrationredirectto', null);
return $this->redirectToRoute('cadoles_core_registration_info'); return $this->redirectToRoute('cadoles_core_registration_info');
} }
@ -700,9 +718,8 @@ class RegistrationController extends Controller
public function resetpwd02Action($key,Request $request) public function resetpwd02Action($key,Request $request)
{ {
$moderegistration = $this->getParameter('moderegistration');
$masteridentity = $this->getParameter('masteridentity'); $masteridentity = $this->getParameter('masteridentity');
if($moderegistration=="none"||$masteridentity!="SQL") if($masteridentity!="SQL")
throw $this->createNotFoundException('Permission denied'); throw $this->createNotFoundException('Permission denied');
$now=new \DateTime(); $now=new \DateTime();
@ -723,6 +740,7 @@ class RegistrationController extends Controller
$mode="danger"; $mode="danger";
$this->get('session')->set('registrationinfo', $info); $this->get('session')->set('registrationinfo', $info);
$this->get('session')->set('registrationmode', $mode); $this->get('session')->set('registrationmode', $mode);
$this->get('session')->set('registrationredirectto', null);
return $this->redirectToRoute('cadoles_core_registration_info'); return $this->redirectToRoute('cadoles_core_registration_info');
} }
else { else {
@ -782,6 +800,7 @@ class RegistrationController extends Controller
$mode="success"; $mode="success";
$this->get('session')->set('registrationinfo', $info); $this->get('session')->set('registrationinfo', $info);
$this->get('session')->set('registrationmode', $mode); $this->get('session')->set('registrationmode', $mode);
$this->get('session')->set('registrationredirectto', null);
return $this->redirectToRoute('cadoles_core_registration_info'); return $this->redirectToRoute('cadoles_core_registration_info');
} }
@ -872,7 +891,7 @@ class RegistrationController extends Controller
$niveau01=strtolower($data->getNiveau01()->getLabel()); $niveau01=strtolower($data->getNiveau01()->getLabel());
if(stripos($niveau01,"autre")===0) { if(stripos($niveau01,"autre")===0) {
if(!$data->getNiveau01other()) { if(!$data->getNiveau01other()) {
$form->addError(new FormError("Merci d'indiquer votre ".$this->getParameter("labelniveau01"))); $form->addError(new FormError("Merci de compléter le champ 'Autre ".$this->getParameter("labelniveau01")."'"));
} }
} }

View File

@ -46,6 +46,7 @@ class SondeController extends Controller
elseif($route=="cadoles_portal_user_page_view") { elseif($route=="cadoles_portal_user_page_view") {
if($usage=="group") $usagesonde="collaboratif"; if($usage=="group") $usagesonde="collaboratif";
elseif($usage=="user") $usagesonde="collaboratif"; elseif($usage=="user") $usagesonde="collaboratif";
elseif($usage=="accueil") $usagesonde="accueil";
else $usagesonde="portail"; else $usagesonde="portail";
} }
elseif(stripos($route,"cadoles_portal_user_calendar")!==false) elseif(stripos($route,"cadoles_portal_user_calendar")!==false)

View File

@ -68,9 +68,6 @@ class ThemeController extends Controller
$logo=$request->query->get('logo'); $logo=$request->query->get('logo');
if(!empty($logo)) $session->set('logo',"bundles/cadolescore/themes/$themename/".$logo); if(!empty($logo)) $session->set('logo',"bundles/cadolescore/themes/$themename/".$logo);
$fgheader=$request->query->get('fgheader');
if(!empty($fgheader)) $session->set('fgheader',boolval($fgheader));
$header=$request->query->get('header'); $header=$request->query->get('header');
if(!empty($header)) $session->set('header',"bundles/cadolescore/themes/$themename/".$header); if(!empty($header)) $session->set('header',"bundles/cadolescore/themes/$themename/".$header);

View File

@ -366,8 +366,8 @@ class UserController extends Controller
// Initialisation de l'enregistrement // Initialisation de l'enregistrement
$data = new User(); $data = new User();
$data->setVisible(true); $data->setVisible(true);
$data->setBelongingpopulation("authlevel");
$data->setAuthlevel("simple"); $data->setAuthlevel("simple");
$data->setBelongingpopulation("agent");
$fields=$this->getDefaultDatauser(); $fields=$this->getDefaultDatauser();
// Création du formulaire // Création du formulaire
@ -419,6 +419,7 @@ class UserController extends Controller
$datagroup = $group; $datagroup = $group;
$usergroup->setGroup($datagroup); $usergroup->setGroup($datagroup);
$usergroup->setKeyvalue($key); $usergroup->setKeyvalue($key);
$usergroup->setRolegroup(0);
$em->persist($usergroup); $em->persist($usergroup);
$em->flush(); $em->flush();
} }
@ -428,12 +429,16 @@ class UserController extends Controller
$websocket = $this->container->get('cadoles.websocket.pushmessage')->send($key->toString(),$iduser,$idgroup,$message); $websocket = $this->container->get('cadoles.websocket.pushmessage')->send($key->toString(),$iduser,$idgroup,$message);
// Notification mail auprès de la personne inscrite // Notification mail auprès de la personne inscrite
if($group->getFgcanshare()) { if($group->getFgcanshare()&&$this->get('session')->get('fgnotifgroup')) {
$text="Vous venez d'être inscrit dans le groupe de travail : ".$group->getLabel(); $idpage =$group->getPages()->first()->getId();
$url = $this->generateUrl('cadoles_core_redirect', ["route"=>"cadoles_core_home","id"=>$idpage], UrlGeneratorInterface::ABSOLUTE_URL);
$texthtml="Vous venez d'être inscrit dans le groupe de travail : ".$group->getLabel()."<br>Suivez le lien suivant pour y accéder = <a href='$url'>$url</a>";
$text="Vous venez d'être inscrit dans le groupe de travail : ".$group->getLabel()."<br>Suivez le lien suivant pour y accéder = $url";
$template="template"; $template="template";
$mail_params=array( $mail_params=array(
"subject" => $this->get('session')->get('appname')." : Inscription au groupe de travail : ".$group->getLabel()."\n\n".$group->getDescription(), "subject" => $this->get('session')->get('appname')." : Inscription au groupe de travail : ".$group->getLabel()."\n\n".$group->getDescription(),
"body_html"=>nl2br($text), "body_html"=>$texthtml,
"body_text"=>$text "body_text"=>$text
); );
$to = $data->getEmail(); $to = $data->getEmail();
@ -484,6 +489,7 @@ class UserController extends Controller
$oldpassword=$data->getPassword(); $oldpassword=$data->getPassword();
$fields=$this->getDefaultDatauser(); $fields=$this->getDefaultDatauser();
// Si un acces modo via console d'admin on s'assure qu'il a les droit dessus sinon retour à la liste // Si un acces modo via console d'admin on s'assure qu'il a les droit dessus sinon retour à la liste
if($this->isGranted('ROLE_MODO')&&$access=="config") { if($this->isGranted('ROLE_MODO')&&$access=="config") {
$niveau01=$data->getNiveau01(); $niveau01=$data->getNiveau01();
@ -565,6 +571,7 @@ class UserController extends Controller
$datagroup = $group; $datagroup = $group;
$usergroup->setGroup($datagroup); $usergroup->setGroup($datagroup);
$usergroup->setKeyvalue($key); $usergroup->setKeyvalue($key);
$usergroup->setRolegroup(0);
$em->persist($usergroup); $em->persist($usergroup);
$em->flush(); $em->flush();
} }
@ -574,12 +581,16 @@ class UserController extends Controller
$websocket = $this->container->get('cadoles.websocket.pushmessage')->send($key->toString(),$id,$idgroup,$message); $websocket = $this->container->get('cadoles.websocket.pushmessage')->send($key->toString(),$id,$idgroup,$message);
// Notification mail auprès de la personne inscrite // Notification mail auprès de la personne inscrite
if($group->getFgcanshare()) { if($group->getFgcanshare()&&$this->get('session')->get('fgnotifgroup')) {
$text="Vous venez d'être inscrit dans le groupe de travail : ".$group->getLabel(); $idpage =$group->getPages()->first()->getId();
$url = $this->generateUrl('cadoles_core_redirect', ["route"=>"cadoles_core_home","id"=>$idpage], UrlGeneratorInterface::ABSOLUTE_URL);
$texthtml="Vous venez d'être inscrit dans le groupe de travail : ".$group->getLabel()."<br>Suivez le lien suivant pour y accéder = <a href='$url'>$url</a>";
$text="Vous venez d'être inscrit dans le groupe de travail : ".$group->getLabel()."<br>Suivez le lien suivant pour y accéder = $url";
$template="template"; $template="template";
$mail_params=array( $mail_params=array(
"subject" => $this->get('session')->get('appname')." : Inscription au groupe de travail : ".$group->getLabel()."\n\n".$group->getDescription(), "subject" => $this->get('session')->get('appname')." : Inscription au groupe de travail : ".$group->getLabel()."\n\n".$group->getDescription(),
"body_html"=>nl2br($text), "body_html"=>$texthtml,
"body_text"=>$text "body_text"=>$text
); );
$to = $data->getEmail(); $to = $data->getEmail();
@ -613,7 +624,7 @@ class UserController extends Controller
$em->flush(); $em->flush();
// Notification mail auprès des managers // Notification mail auprès des managers
if($group->getFgcanshare()) { if($group->getFgcanshare()&&$this->get('session')->get('fgnotifgroup')) {
$text=$data->getUsername()." a été désinscrit du groupe de travail : ".$group->getLabel(); $text=$data->getUsername()." a été désinscrit du groupe de travail : ".$group->getLabel();
$template="template"; $template="template";
$mail_params=array( $mail_params=array(
@ -621,12 +632,14 @@ class UserController extends Controller
"body_html"=>nl2br($text), "body_html"=>nl2br($text),
"body_text"=>$text "body_text"=>$text
); );
$managers=$em->getRepository("CadolesCoreBundle:Usergroup")->findBy(array("group"=>$group,"fgmanager"=>true)); $usergroups=$em->getRepository("CadolesCoreBundle:Usergroup")->findBy(array("group"=>$group));
$to=array(); $to=array();
foreach($managers as $manager) { foreach($usergroups as $usergroup) {
array_push($to,$manager->getUser()->getEmail()); if($usergroup->getRolegroup()>=90)
array_push($to,$usergroup->getUser()->getEmail());
} }
$from = $this->getParameter('noreply');; $from = $this->getParameter('noreply');;
$fromName = $this->get('session')->get('appname'); $fromName = $this->get('session')->get('appname');
$message = $this->container->get('cadoles.core.service.mail'); $message = $this->container->get('cadoles.core.service.mail');
@ -829,12 +842,15 @@ class UserController extends Controller
public function viewAction($id, Request $request) public function viewAction($id, Request $request)
{ {
$user=$this->getData($id); $user=$this->getData($id);
$fields=$this->getDefaultDatausers();
return $this->render('CadolesCoreBundle:User:view.html.twig', [ return $this->render('CadolesCoreBundle:User:view.html.twig', [
'useheader' => false, 'useheader' => false,
'usemenu' => false, 'usemenu' => false,
'usesidebar' => false, 'usesidebar' => false,
"user" => $user 'user' => $user,
'fields' => $fields,
]); ]);
} }
@ -910,7 +926,7 @@ class UserController extends Controller
public function exportuserAction(Request $request) { public function exportuserAction(Request $request) {
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
$dir = $this->get('kernel')->getRootDir() . '/../uploads/export/'; $dir = $this->get('kernel')->getRootDir() . '/../uploads/export/';
$file = "export.csv"; $file = "exportuser.csv";
$fs = new Filesystem(); $fs = new Filesystem();
$fs->mkdir($dir); $fs->mkdir($dir);
@ -920,7 +936,7 @@ class UserController extends Controller
$e = '"'; // this is the default but i like to be explicit $e = '"'; // this is the default but i like to be explicit
// Entête de colonne // Entête de colonne
$data=["id","Login","Nom","Prénom","Email","Téléphone",$this->getParameter("labelniveau01"),$this->getParameter("labelniveau02"),"Métier","Fonction","Nom Usage","Autres Prénom","Sexe","Adresse","Date Naissance","Pays Naissance","Ville Naissance"]; $data=["id","Login","Nom","Prénom","Email","Téléphone",$this->getParameter("labelniveau01"),$this->getParameter("labelniveau02"),"Métier","Fonction","Nom Usage","Autres Prénom","Sexe","Adresse","Date Naissance","Pays Naissance","Ville Naissance","Date Visite","Cpt Visite","Groupes"];
fputcsv($csvh, $data, $d, $e); fputcsv($csvh, $data, $d, $e);
// Liste des utilisateurs en fonction du role de l'utilisateur en cours // Liste des utilisateurs en fonction du role de l'utilisateur en cours
@ -942,6 +958,17 @@ class UserController extends Controller
} }
foreach($users as $user) { foreach($users as $user) {
$groups="";
$fgfirst=true;
foreach($user->getGroups() as $key => $usergroup) {
if(!$fgfirst) $groups.=" - ";
$groups.=$usergroup->getGroup()->getLabel();
if($fgfirst) $fgfirst=false;
}
$visite = ($user->getVisitedate()?$user->getVisitedate()->format("d/m/Y H:i"):"");
$cptvisite = ($user->getVisitedate()?$user->getVisitecpt():"");
$data = [ $data = [
"id"=>$user->getId(), "id"=>$user->getId(),
"username"=>$user->getUsername(), "username"=>$user->getUsername(),
@ -960,6 +987,9 @@ class UserController extends Controller
"birthdate"=>($user->getBirthdate()?$user->getBirthdate()->format("d/m/Y"):""), "birthdate"=>($user->getBirthdate()?$user->getBirthdate()->format("d/m/Y"):""),
"birthcountry"=>($user->getBirthcountry()?$user->getBirthcountry()->getLabel():""), "birthcountry"=>($user->getBirthcountry()?$user->getBirthcountry()->getLabel():""),
"birthplace"=>($user->getBirthplace()?$user->getBirthplace()->getLabel():""), "birthplace"=>($user->getBirthplace()?$user->getBirthplace()->getLabel():""),
"visite"=>$visite,
"cptvisite"=>$cptvisite,
"groups"=>$groups,
]; ];
@ -1264,7 +1294,7 @@ class UserController extends Controller
$toupdate=true; $toupdate=true;
$preference[$key][$id]=$value; $preference[$key][$id]=$value;
} }
if($value&&$preference[$key][$id]!=$value) { if($preference[$key][$id]!=$value) {
$toupdate=true; $toupdate=true;
$preference[$key][$id]=$value; $preference[$key][$id]=$value;
} }
@ -1427,6 +1457,75 @@ class UserController extends Controller
$fields["visite"]["perm"]=1; $fields["visite"]["perm"]=1;
$fields["visite"]["label"]="Visite"; $fields["visite"]["label"]="Visite";
} }
return $fields;
}
protected function getDefaultDatausers()
{
$em = $this->getDoctrine()->getManager();
$session=$this->get('session');
$config=$em->getRepository('CadolesCoreBundle:Config')->find("datausers");
$fields=$config->getValue();
$fields=json_decode($fields, true);
if(!is_array($fields)) $fields=[];
// Valeur par défaut 0=caché / 3=visible
if(!array_key_exists("avatar",$fields)) {
$fields["avatar"]["perm"]=1;
$fields["avatar"]["label"]="Avatar";
}
if(!array_key_exists("login",$fields)) {
$fields["login"]["perm"]=1;
$fields["login"]["label"]="Login";
}
if(!array_key_exists("lastname",$fields)) {
$fields["lastname"]["perm"]=1;
$fields["lastname"]["label"]="Nom";
}
if(!array_key_exists("firstname",$fields)) {
$fields["firstname"]["perm"]=1;
$fields["firstname"]["label"]="Prenom";
}
if(!array_key_exists("email",$fields)) {
$fields["email"]["perm"]=1;
$fields["email"]["label"]="Email";
}
if(!array_key_exists("niveau01",$fields)) {
$fields["niveau01"]["perm"]=1;
$fields["niveau01"]["label"]=$session->get('labelniveau01');
}
if(!array_key_exists("niveau02",$fields)) {
$fields["niveau02"]["perm"]=1;
$fields["niveau02"]["label"]=$session->get('labelniveau02');
}
if(!array_key_exists("group",$fields)) $fields["group"]["perm"]=1;
$fields["group"]["label"]="Groupes (caché uniquement pour le rôle Utilisateur) ";
if(!array_key_exists("job",$fields)) {
$fields["job"]["perm"]=1;
$fields["job"]["label"]="Métier";
}
if(!array_key_exists("position",$fields)) {
$fields["position"]["perm"]=1;
$fields["position"]["label"]="Fonction";
}
if(!array_key_exists("role",$fields)) {
$fields["role"]["perm"]=1;
$fields["role"]["label"]="Rôles";
}
if(!array_key_exists("telephonenumber",$fields)) {
$fields["telephonenumber"]["perm"]=1;
$fields["telephonenumber"]["label"]="Téléphone";
}
if(!array_key_exists("visitedate",$fields)) $fields["visitedate"]["perm"]=1;
$fields["visitedate"]["label"]="Visite (caché uniquement pour les rôles Animateur et Utilisateur) ";
if(!$session->get('viewniveau02'))
unset($fields["niveau02"]);
return $fields; return $fields;
} }
@ -1461,7 +1560,7 @@ class UserController extends Controller
$niveau01=strtolower($data->getNiveau01()->getLabel()); $niveau01=strtolower($data->getNiveau01()->getLabel());
if(stripos($niveau01,"autre")===0) { if(stripos($niveau01,"autre")===0) {
if(!$data->getNiveau01other()) { if(!$data->getNiveau01other()) {
$form->addError(new FormError("Merci d'indiquer votre ".$this->getParameter("labelniveau01"))); $form->addError(new FormError("Merci de compléter le champ 'Autre ".$this->getParameter("labelniveau01")."'"));
} }
} }
} }

View File

@ -207,6 +207,25 @@ class WhitelistController extends Controller
]); ]);
} }
public function ajaxiswhitelistAction(Request $request)
{
// S'assurer que c'est un appel ajax
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('message' => 'Interdit'), 400);
}
$email=$request->request->get('email');
$email=explode("@",$email);
$domaine=end($email);
// Rechercher le mail dans la liste blanche
$em = $this->getDoctrine()->getManager();
$whitelist=$em->getRepository($this->labelentity)->findOneBy(["label"=>$domaine]);
if($whitelist)
return new Response("OK", 200);
else
return new Response("KO", 200);
}
protected function getDatas() protected function getDatas()
{ {
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();

View File

@ -103,6 +103,11 @@ class Group
*/ */
private $idonlyoffice; private $idonlyoffice;
/**
* @ORM\Column(name="invitations", type="array", nullable=true)
*/
private $invitations;
/** /**
* @ORM\ManyToOne(targetEntity="Cadoles\PortalBundle\Entity\Icon", inversedBy="groups") * @ORM\ManyToOne(targetEntity="Cadoles\PortalBundle\Entity\Icon", inversedBy="groups")
* @ORM\JoinColumn(nullable=true, onDelete="SET NULL") * @ORM\JoinColumn(nullable=true, onDelete="SET NULL")
@ -1085,4 +1090,28 @@ class Group
{ {
return $this->email; return $this->email;
} }
/**
* Set invitations
*
* @param array $invitations
*
* @return Group
*/
public function setInvitations($invitations)
{
$this->invitations = $invitations;
return $this;
}
/**
* Get invitations
*
* @return array
*/
public function getInvitations()
{
return $this->invitations;
}
} }

View File

@ -27,10 +27,10 @@ class Registration implements UserInterface, \Serializable
private $id; private $id;
/** /**
* @ORM\Column(type="string", length=25, unique=true) * @ORM\Column(type="string", length=128, unique=true)
* @Assert\Length( * @Assert\Length(
* min = "5", * min = "5",
* max = "25", * max = "128",
* minMessage = "Votre nom doit faire au moins {{ limit }} caractères", * minMessage = "Votre nom doit faire au moins {{ limit }} caractères",
* maxMessage = "Votre nom ne peut pas être plus long que {{ limit }} caractères" * maxMessage = "Votre nom ne peut pas être plus long que {{ limit }} caractères"
* ) * )
@ -68,7 +68,7 @@ class Registration implements UserInterface, \Serializable
private $passwordad; private $passwordad;
/** /**
* @ORM\Column(type="string", length=60, unique=true) * @ORM\Column(type="string", length=128, unique=true)
*/ */
private $email; private $email;
@ -143,6 +143,11 @@ class Registration implements UserInterface, \Serializable
*/ */
private $motivation; private $motivation;
/**
* @ORM\Column(name="note", type="text", nullable=true)
*/
private $note;
/** /**
* @ORM\Column(type="integer", length=60, nullable=true) * @ORM\Column(type="integer", length=60, nullable=true)
*/ */
@ -840,4 +845,28 @@ class Registration implements UserInterface, \Serializable
{ {
return $this->passwordad; return $this->passwordad;
} }
/**
* Set note
*
* @param string $note
*
* @return Registration
*/
public function setNote($note)
{
$this->note = $note;
return $this;
}
/**
* Get note
*
* @return string
*/
public function getNote()
{
return $this->note;
}
} }

View File

@ -30,10 +30,10 @@ class User implements UserInterface, \Serializable
private $id; private $id;
/** /**
* @ORM\Column(type="string", length=50, unique=true) * @ORM\Column(type="string", length=128, unique=true)
* @Assert\Length( * @Assert\Length(
* min = "5", * min = "5",
* max = "25", * max = "128",
* minMessage = "Votre nom doit faire au moins {{ limit }} caractères", * minMessage = "Votre nom doit faire au moins {{ limit }} caractères",
* maxMessage = "Votre nom ne peut pas être plus long que {{ limit }} caractères" * maxMessage = "Votre nom ne peut pas être plus long que {{ limit }} caractères"
* ) * )
@ -71,7 +71,7 @@ class User implements UserInterface, \Serializable
private $passwordad; private $passwordad;
/** /**
* @ORM\Column(type="string", length=60, unique=true) * @ORM\Column(type="string", length=128, unique=true)
*/ */
private $email; private $email;
@ -196,6 +196,11 @@ class User implements UserInterface, \Serializable
*/ */
private $motivation; private $motivation;
/**
* @ORM\Column(name="note", type="text", nullable=true)
*/
private $note;
/** /**
* @ORM\Column(name="preference", type="array", nullable=true) * @ORM\Column(name="preference", type="array", nullable=true)
*/ */
@ -2059,4 +2064,28 @@ class User implements UserInterface, \Serializable
{ {
return $this->passwordad; return $this->passwordad;
} }
/**
* Set note
*
* @param string $note
*
* @return User
*/
public function setNote($note)
{
$this->note = $note;
return $this;
}
/**
* Get note
*
* @return string
*/
public function getNote()
{
return $this->note;
}
} }

View File

@ -37,9 +37,15 @@ class UserGroup
/** /**
* @ORM\Column(type="boolean", options={"default" : false}) * @ORM\Column(type="boolean", options={"default" : false})
* CE CHAMP N'EST PLUS UTILSE
*/ */
private $fgmanager = false; private $fgmanager = false;
/**
* @ORM\Column(type="integer", length=60, nullable=true)
*/
private $rolegroup;
/** /**
* @ORM\Column(type="string", length=60, nullable=true) * @ORM\Column(type="string", length=60, nullable=true)
*/ */
@ -208,4 +214,28 @@ class UserGroup
{ {
return $this->visitecpt; return $this->visitecpt;
} }
/**
* Set rolegroup
*
* @param integer $rolegroup
*
* @return UserGroup
*/
public function setRolegroup($rolegroup)
{
$this->rolegroup = $rolegroup;
return $this;
}
/**
* Get rolegroup
*
* @return integer
*/
public function getRolegroup()
{
return $this->rolegroup;
}
} }

View File

@ -13,12 +13,15 @@
class sessionListener { class sessionListener {
protected $container; protected $container;
protected $em; protected $em;
protected $token_storage;
protected $session;
public function __construct($container, EntityManager $em, TokenStorageInterface $token_storage) public function __construct($container, EntityManager $em, TokenStorageInterface $token_storage,Session $session)
{ {
$this->container = $container; $this->container = $container;
$this->em = $em; $this->em = $em;
$this->token_storage = $token_storage; $this->token_storage = $token_storage;
$this->session = $session;
} }
public function haveRole($curentuser,$roles,$tohave,$route) { public function haveRole($curentuser,$roles,$tohave,$route) {
@ -44,9 +47,7 @@
} }
public function onDomainParse(Event $event) { public function onDomainParse(Event $event) {
$session = new Session(); $session = $this->session;
$configs = $this->em->getRepository("CadolesCoreBundle:Config")->findAll(); $configs = $this->em->getRepository("CadolesCoreBundle:Config")->findAll();
foreach($configs as $config) { foreach($configs as $config) {
@ -93,6 +94,7 @@
$app["activate_widwordpress"] =$this->container->getParameter('activate_widwordpress'); $app["activate_widwordpress"] =$this->container->getParameter('activate_widwordpress');
$app["widbalado_activate_syncenvole"] =$this->container->getParameter('widbalado_activate_syncenvole'); $app["widbalado_activate_syncenvole"] =$this->container->getParameter('widbalado_activate_syncenvole');
$app["widcdt_activate_syncenvole"] =$this->container->getParameter('widcdt_activate_syncenvole');
$app["widgepi_activate_syncenvole"] =$this->container->getParameter('widgepi_activate_syncenvole'); $app["widgepi_activate_syncenvole"] =$this->container->getParameter('widgepi_activate_syncenvole');
$app["widnextcloud_activate_syncenvole"] =$this->container->getParameter('widnextcloud_activate_syncenvole'); $app["widnextcloud_activate_syncenvole"] =$this->container->getParameter('widnextcloud_activate_syncenvole');
$app["widpiwik_activate_syncenvole"] =$this->container->getParameter('widpiwik_activate_syncenvole'); $app["widpiwik_activate_syncenvole"] =$this->container->getParameter('widpiwik_activate_syncenvole');

View File

@ -181,6 +181,7 @@ class syncUser implements EventSubscriber
$data->setUser($user); $data->setUser($user);
$data->setGroup($fgall[0]); $data->setGroup($fgall[0]);
$data->setKeyvalue($key); $data->setKeyvalue($key);
$data->setRolegroup(0);
$this->em->persist($data); $this->em->persist($data);
$this->em->flush(); $this->em->flush();
} }

View File

@ -52,7 +52,7 @@ class MailType extends AbstractType
'mapped'=> false, 'mapped'=> false,
'required' => false, 'required' => false,
'attr' => array("class" => "form-control", "style" => "margin-bottom:15px"), 'attr' => array("class" => "form-control", "style" => "margin-bottom:15px"),
'config' => ["height" => "150px",'filebrowserUploadRoute' => 'cadoles_portal_user_pagewidget_upload'] 'config' => ["height" => "150px"]
]); ]);
} }

View File

@ -99,7 +99,7 @@ class MailingType extends AbstractType
'mapped'=> false, 'mapped'=> false,
'required' => true, 'required' => true,
'attr' => array("class" => "form-control", "style" => "margin-bottom:15px"), 'attr' => array("class" => "form-control", "style" => "margin-bottom:15px"),
'config' => ["height" => "400px",'filebrowserUploadRoute' => 'cadoles_portal_user_pagewidget_upload'] 'config' => ["height" => "400px"]
]); ]);
} }

View File

@ -45,6 +45,15 @@ class RegistrationType extends AbstractType
"attr" => array("class" => "btn btn-success") "attr" => array("class" => "btn btn-success")
) )
); );
$builder->add('note',
TextareaType::class, array(
"label" => "Notes Administrateur",
"required" => false,
"disabled" => ($options["mode"]=="delete"?true:false),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px; height: 130px")
)
);
} }
# Obligatoire # Obligatoire
@ -87,7 +96,7 @@ class RegistrationType extends AbstractType
$builder->add('niveau01other', $builder->add('niveau01other',
TextType::class, array( TextType::class, array(
"label" =>"Autre ".$session->get('labelniveau01'), "label" =>"Autre ".$session->get('labelniveau01'). " *",
"disabled" => ($options["mode"]=="delete"?true:false), "disabled" => ($options["mode"]=="delete"?true:false),
"required" => false, "required" => false,
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px") "attr" => array("class" => "form-control", "style" => "margin-bottom:15px")
@ -101,7 +110,8 @@ class RegistrationType extends AbstractType
"type" => PasswordType::class, "type" => PasswordType::class,
"required" => ($options["mode"]=="submit"?true:false), "required" => ($options["mode"]=="submit"?true:false),
"first_options" => array("label" => "Mot de Passe","attr" => array("class" => "form-control", "style" => "margin-bottom:15px", "autocomplete" => "new-password")), "first_options" => array("label" => "Mot de Passe","attr" => array("class" => "form-control", "style" => "margin-bottom:15px", "autocomplete" => "new-password")),
"second_options" => array('label' => 'Confirmer Mot de Passe',"attr" => array("class" => "form-control", "style" => "margin-bottom:15px")) "second_options" => array('label' => 'Confirmer Mot de Passe',"attr" => array("class" => "form-control", "style" => "margin-bottom:15px")),
"invalid_message" => "Mot de passe non valide"
) )
); );

View File

@ -45,7 +45,8 @@ class ResetpwdType extends AbstractType
"required" => ($options["mode"]=="submit"?true:false), "required" => ($options["mode"]=="submit"?true:false),
"options" => array("always_empty" => true), "options" => array("always_empty" => true),
"first_options" => array("label" => "Votre nouveau Mot de Passe","attr" => array("class" => "form-control", "style" => "margin-bottom:15px")), "first_options" => array("label" => "Votre nouveau Mot de Passe","attr" => array("class" => "form-control", "style" => "margin-bottom:15px")),
"second_options" => array('label' => 'Confirmer votre nouveau Mot de Passe',"attr" => array("class" => "form-control", "style" => "margin-bottom:15px")) "second_options" => array('label' => 'Confirmer votre nouveau Mot de Passe',"attr" => array("class" => "form-control", "style" => "margin-bottom:15px")),
"invalid_message" => "Mot de passe non valide"
) )
); );
} }

View File

@ -86,6 +86,15 @@ class UserType extends AbstractType
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px;$readonly","onfocus" => $onfocus, "onchange" => $onchange), "attr" => array("class" => "form-control", "style" => "margin-bottom:15px;$readonly","onfocus" => $onfocus, "onchange" => $onchange),
] ]
); );
$builder->add('note',
TextareaType::class, array(
"label" => "Notes Administrateur",
"required" => false,
"disabled" => ($options["mode"]=="delete"?true:false),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px; height: 130px")
)
);
} }
$perm=$options["perm"]; $perm=$options["perm"];
@ -132,7 +141,8 @@ class UserType extends AbstractType
"required" => ($options["mode"]=="submit"?true:false), "required" => ($options["mode"]=="submit"?true:false),
"options" => array("always_empty" => true), "options" => array("always_empty" => true),
"first_options" => array("label" => "Mot de Passe","attr" => array("class" => "form-control", "style" => "margin-bottom:15px", "autocomplete" => "new-password")), "first_options" => array("label" => "Mot de Passe","attr" => array("class" => "form-control", "style" => "margin-bottom:15px", "autocomplete" => "new-password")),
"second_options" => array('label' => 'Confirmer Mot de Passe',"attr" => array("class" => "form-control", "style" => "margin-bottom:15px")) "second_options" => array('label' => 'Confirmer Mot de Passe',"attr" => array("class" => "form-control", "style" => "margin-bottom:15px")),
"invalid_message" => "Mot de passe non valide"
) )
); );
} }

View File

@ -63,6 +63,7 @@ class GroupRepository extends \Doctrine\ORM\EntityRepository
$usergroup->setUser($user); $usergroup->setUser($user);
$usergroup->setGroup($retgroup); $usergroup->setGroup($retgroup);
$usergroup->setKeyvalue($key); $usergroup->setKeyvalue($key);
$usergroup->setRolegroup(0);
$this->_em->persist($usergroup); $this->_em->persist($usergroup);
$this->_em->flush(); $this->_em->flush();

View File

@ -74,6 +74,22 @@ cadoles_core_config_file_subdirectory:
path: /config/file/subdirectory/{id}/{type} path: /config/file/subdirectory/{id}/{type}
defaults: { _controller: CadolesCoreBundle:File:subdirectory, access: config } defaults: { _controller: CadolesCoreBundle:File:subdirectory, access: config }
cadoles_core_config_file_rename:
path: /config/file/rename/{id}/{oldname}
defaults: { _controller: CadolesCoreBundle:File:rename, access: config }
cadoles_core_config_file_trash:
path: /config/file/trash/
defaults: { _controller: CadolesCoreBundle:File:trash, access: config }
cadoles_core_config_file_restaure:
path: /config/file/restaure/
defaults: { _controller: CadolesCoreBundle:File:restaure, access: config }
cadoles_core_config_file_purgetrash:
path: /config/file/purgetrash/{directory}
defaults: { _controller: CadolesCoreBundle:File:purgetrash, access: config }
cadoles_core_config_file_delete: cadoles_core_config_file_delete:
path: /config/file/delete/ path: /config/file/delete/
defaults: { _controller: CadolesCoreBundle:File:delete, access: config } defaults: { _controller: CadolesCoreBundle:File:delete, access: config }
@ -107,6 +123,22 @@ cadoles_core_user_file_subdirectory:
path: /user/file/subdirectory/{id}/{type} path: /user/file/subdirectory/{id}/{type}
defaults: { _controller: CadolesCoreBundle:File:subdirectory, access: user } defaults: { _controller: CadolesCoreBundle:File:subdirectory, access: user }
cadoles_core_user_file_rename:
path: /user/file/rename/{id}/{oldname}
defaults: { _controller: CadolesCoreBundle:File:rename, access: user }
cadoles_core_user_file_trash:
path: /user/file/trash/
defaults: { _controller: CadolesCoreBundle:File:trash, access: user }
cadoles_core_user_file_restaure:
path: /user/file/restaure/
defaults: { _controller: CadolesCoreBundle:File:restaure, access: user }
cadoles_core_user_file_purgetrash:
path: /user/file/purgetrash/{directory}
defaults: { _controller: CadolesCoreBundle:File:purgetrash, access: user }
cadoles_core_user_file_delete: cadoles_core_user_file_delete:
path: /user/file/delete path: /user/file/delete
defaults: { _controller: CadolesCoreBundle:File:delete, access: user } defaults: { _controller: CadolesCoreBundle:File:delete, access: user }
@ -128,6 +160,7 @@ cadoles_core_user_file_show:
defaults: { _controller: CadolesCoreBundle:File:show, access: user } defaults: { _controller: CadolesCoreBundle:File:show, access: user }
#== Ajax ================================================================================================================= #== Ajax =================================================================================================================
cadoles_core_ajax_country_list: cadoles_core_ajax_country_list:
path: /ajax/country/list path: /ajax/country/list
@ -161,6 +194,10 @@ cadoles_core_ajax_item_list:
path: /ajax/item/list path: /ajax/item/list
defaults: { _controller: CadolesCoreBundle:Ajax:itemlist } defaults: { _controller: CadolesCoreBundle:Ajax:itemlist }
cadoles_core_ajax_iswhitelist:
path: /ajax/iswhitelist
defaults: { _controller: CadolesCoreBundle:Whitelist:ajaxiswhitelist }
#== Home Config ========================================================================================================== #== Home Config ==========================================================================================================
cadoles_core_config: cadoles_core_config:
path: /config/home path: /config/home
@ -457,14 +494,22 @@ cadoles_core_config_group_ajax_usergroup_del:
path: /config/group/ajax/usergroupdel path: /config/group/ajax/usergroupdel
defaults: { _controller: CadolesCoreBundle:Group:usergroupdel, access: config } defaults: { _controller: CadolesCoreBundle:Group:usergroupdel, access: config }
cadoles_core_config_group_ajax_switchmanager: cadoles_core_config_group_ajax_changerole:
path: /config/group/ajax/switchmanager path: /config/group/ajax/changerole
defaults: { _controller: CadolesCoreBundle:Group:switchmanager, access: config } defaults: { _controller: CadolesCoreBundle:Group:changerole, access: config }
cadoles_core_config_group_export:
path: /config/group/export
defaults: { _controller: CadolesCoreBundle:Group:groupexport }
cadoles_core_config_group_usergroup_export: cadoles_core_config_group_usergroup_export:
path: /config/group/users/export/{id} path: /config/group/users/export/{id}
defaults: { _controller: CadolesCoreBundle:Group:usergroupexport, access: config } defaults: { _controller: CadolesCoreBundle:Group:usergroupexport, access: config }
cadoles_core_config_group_invitation:
path: /config/group/invitation/{id}
defaults: { _controller: CadolesCoreBundle:Group:invitation, access: config }
#-- Access user #-- Access user
cadoles_core_user_group: cadoles_core_user_group:
path: /user/group path: /user/group
@ -514,14 +559,18 @@ cadoles_core_user_group_ajax_usergroup_del:
path: /user/group/ajax/usergroupdel path: /user/group/ajax/usergroupdel
defaults: { _controller: CadolesCoreBundle:Group:usergroupdel, access: user } defaults: { _controller: CadolesCoreBundle:Group:usergroupdel, access: user }
cadoles_core_user_group_ajax_switchmanager: cadoles_core_user_group_ajax_changerole:
path: /user/group/ajax/switchmanager path: /user/group/ajax/changerole
defaults: { _controller: CadolesCoreBundle:Group:switchmanager, access: user } defaults: { _controller: CadolesCoreBundle:Group:changerole, access: user }
cadoles_core_user_group_usergroup_export: cadoles_core_user_group_usergroup_export:
path: /user/group/users/export/{id} path: /user/group/users/export/{id}
defaults: { _controller: CadolesCoreBundle:Group:usergroupexport, access: user } defaults: { _controller: CadolesCoreBundle:Group:usergroupexport, access: user }
cadoles_core_user_group_invitation:
path: /user/group/invitation/{id}
defaults: { _controller: CadolesCoreBundle:Group:invitation, access: user }
#== Whitelist ============================================================================================================ #== Whitelist ============================================================================================================
cadoles_core_config_whitelist: cadoles_core_config_whitelist:

View File

@ -26,7 +26,7 @@ services:
cadoles.core.session.listener: cadoles.core.session.listener:
public: true public: true
class: Cadoles\CoreBundle\EventListener\sessionListener class: Cadoles\CoreBundle\EventListener\sessionListener
arguments: ['@service_container','@doctrine.orm.entity_manager',"@security.token_storage"] arguments: ['@service_container','@doctrine.orm.entity_manager',"@security.token_storage","@session"]
tags: tags:
- { name: kernel.event_listener, event: kernel.request, method: onDomainParse } - { name: kernel.event_listener, event: kernel.request, method: onDomainParse }

View File

@ -0,0 +1,12 @@
/* jQuery UI Datepicker moving pixels fix */
table.ui-datepicker-calendar {border-collapse: separate;}
.ui-datepicker-calendar td {border: 1px solid transparent;}
/* jQuery UI Datepicker hide datepicker helper */
#ui-datepicker-div {display:none;}
/* jQuery UI Datepicker emphasis on selected dates */
.ui-datepicker .ui-datepicker-calendar .ui-state-highlight a {
background: #743620 none;
color: white;
}

View File

@ -60,6 +60,17 @@ body {
height: 20px; height: 20px;
} }
@media (max-width: 991px) {
.header .title{
font-size: 30px;
}
.header small {
font-size:14px;
top: 25px;
}
}
@media (max-width: 767px) { @media (max-width: 767px) {
.header { display: none } .header { display: none }
#menu-header { display: none } #menu-header { display: none }
@ -110,6 +121,25 @@ body {
margin-left: 10px; margin-left: 10px;
} }
#navbar-nameuser {
position: absolute;
top: 50px;
right: 30px;
}
.navbar-top-links #navbar-nameuser {
position: relative;
top: -8px;
right: inherit;
}
@media (max-width: 991px) {
.navbar-top-links #navbar-nameuser {
display: none;
}
}
@media (max-width: 767px) { @media (max-width: 767px) {
.navbar-default .navbar-header #title { .navbar-default .navbar-header #title {
display: none; display: none;
@ -337,12 +367,12 @@ span.item-drag {
.grid-item .item-link img { .grid-item .item-link img {
display: block; display: block;
max-width: 100%; margin: 10px;
//max-height: 110px; height: 105px;
height: auto;
} }
.grid-item .grid-item-title { .grid-item .grid-item-title {
display: inline-block; display: inline-block;
vertical-align: top; vertical-align: top;
@ -381,6 +411,15 @@ a.item-update {
z-index: 1000; z-index: 1000;
} }
a.item-restaure {
display: none;
position: absolute;
right: 25px;
top: 2px;
z-index: 1000;
}
a.item-delete { a.item-delete {
display: none; display: none;
position: absolute; position: absolute;
@ -726,6 +765,11 @@ a.item-heart {
max-width: 100%; max-width: 100%;
} }
.widget-ckeditor img {
height:auto !important;
}
.frameitem { .frameitem {
position: absolute; position: absolute;
right: 0px; right: 0px;

View File

@ -0,0 +1,498 @@
/*
* MultiDatesPicker v1.6.4
* http://multidatespickr.sourceforge.net/
*
* Copyright 2014, Luca Lauretta
* Dual licensed under the MIT or GPL version 2 licenses.
*/
(function( $ ){
$.extend($.ui, { multiDatesPicker: { version: "1.6.4" } });
$.fn.multiDatesPicker = function(method) {
var mdp_arguments = arguments;
var ret = this;
var today_date = new Date();
var day_zero = new Date(0);
var mdp_events = {};
function removeDate(date, type) {
if(!type) type = 'picked';
date = dateConvert.call(this, date);
for(var i = 0; i < this.multiDatesPicker.dates[type].length; i++)
if(!methods.compareDates(this.multiDatesPicker.dates[type][i], date))
return this.multiDatesPicker.dates[type].splice(i, 1).pop();
}
function removeIndex(index, type) {
if(!type) type = 'picked';
return this.multiDatesPicker.dates[type].splice(index, 1).pop();
}
function addDate(date, type, no_sort) {
if(!type) type = 'picked';
date = dateConvert.call(this, date);
// @todo: use jQuery UI datepicker method instead
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
date.setMilliseconds(0);
if (methods.gotDate.call(this, date, type) === false) {
this.multiDatesPicker.dates[type].push(date);
if(!no_sort) this.multiDatesPicker.dates[type].sort(methods.compareDates);
}
}
function sortDates(type) {
if(!type) type = 'picked';
this.multiDatesPicker.dates[type].sort(methods.compareDates);
}
function dateConvert(date, desired_type, date_format) {
if(!desired_type) desired_type = 'object';/*
if(!date_format && (typeof date == 'string')) {
date_format = $(this).datepicker('option', 'dateFormat');
if(!date_format) date_format = $.datepicker._defaults.dateFormat;
}
*/
return methods.dateConvert.call(this, date, desired_type, date_format);
}
var methods = {
init : function( options ) {
var $this = $(this);
this.multiDatesPicker.changed = false;
var mdp_events = {
beforeShow: function(input, inst) {
this.multiDatesPicker.changed = false;
if(this.multiDatesPicker.originalBeforeShow)
this.multiDatesPicker.originalBeforeShow.call(this, input, inst);
},
onSelect : function(dateText, inst) {
var $this = $(this);
this.multiDatesPicker.changed = true;
if (dateText) {
$this.multiDatesPicker('toggleDate', dateText);
this.multiDatesPicker.changed = true;
// @todo: this will be optimized when I'll move methods to the singleton.
}
if (this.multiDatesPicker.mode == 'normal' && this.multiDatesPicker.pickableRange) {
if(this.multiDatesPicker.dates.picked.length > 0) {
var min_date = this.multiDatesPicker.dates.picked[0],
max_date = new Date(min_date.getTime());
methods.sumDays(max_date, this.multiDatesPicker.pickableRange-1);
// counts the number of disabled dates in the range
if(this.multiDatesPicker.adjustRangeToDisabled) {
var c_disabled,
disabled = this.multiDatesPicker.dates.disabled.slice(0);
do {
c_disabled = 0;
for(var i = 0; i < disabled.length; i++) {
if(disabled[i].getTime() <= max_date.getTime()) {
if((min_date.getTime() <= disabled[i].getTime()) && (disabled[i].getTime() <= max_date.getTime()) ) {
c_disabled++;
}
disabled.splice(i, 1);
i--;
}
}
max_date.setDate(max_date.getDate() + c_disabled);
} while(c_disabled != 0);
}
if(this.multiDatesPicker.maxDate && (max_date > this.multiDatesPicker.maxDate))
max_date = this.multiDatesPicker.maxDate;
$this
.datepicker("option", "minDate", min_date)
.datepicker("option", "maxDate", max_date);
} else {
$this
.datepicker("option", "minDate", this.multiDatesPicker.minDate)
.datepicker("option", "maxDate", this.multiDatesPicker.maxDate);
}
}
if(this.multiDatesPicker.originalOnSelect && dateText)
this.multiDatesPicker.originalOnSelect.call(this, dateText, inst);
},
beforeShowDay : function(date) {
var $this = $(this),
gotThisDate = $this.multiDatesPicker('gotDate', date) !== false,
isDisabledCalendar = $this.datepicker('option', 'disabled'),
isDisabledDate = $this.multiDatesPicker('gotDate', date, 'disabled') !== false,
areAllSelected = this.multiDatesPicker.maxPicks <= this.multiDatesPicker.dates.picked.length;
var bsdReturn = [true, '', null];
if(this.multiDatesPicker.originalBeforeShowDay)
bsdReturn = this.multiDatesPicker.originalBeforeShowDay.call(this, date);
bsdReturn[1] = gotThisDate ? 'ui-state-highlight '+bsdReturn[1] : bsdReturn[1];
bsdReturn[0] = bsdReturn[0] && !(isDisabledCalendar || isDisabledDate || (areAllSelected && !bsdReturn[1]));
return bsdReturn;
}
};
// value have to be extracted before datepicker is initiated
if($this.val()) var inputDates = $this.val()
if(options) {
// value have to be extracted before datepicker is initiated
//if(options.altField) var inputDates = $(options.altField).val();
if(options.separator) this.multiDatesPicker.separator = options.separator;
if(!this.multiDatesPicker.separator) this.multiDatesPicker.separator = ', ';
this.multiDatesPicker.originalBeforeShow = options.beforeShow;
this.multiDatesPicker.originalOnSelect = options.onSelect;
this.multiDatesPicker.originalBeforeShowDay = options.beforeShowDay;
this.multiDatesPicker.originalOnClose = options.onClose;
// datepicker init
$this.datepicker(options);
this.multiDatesPicker.minDate = $.datepicker._determineDate(this, options.minDate, null);
this.multiDatesPicker.maxDate = $.datepicker._determineDate(this, options.maxDate, null);
if(options.addDates) methods.addDates.call(this, options.addDates);
if(options.addDisabledDates)
methods.addDates.call(this, options.addDisabledDates, 'disabled');
methods.setMode.call(this, options);
} else {
$this.datepicker();
}
$this.datepicker('option', mdp_events);
// adds any dates found in the input or alt field
if(inputDates) $this.multiDatesPicker('value', inputDates);
// generates the new string of added dates
var inputs_values = $this.multiDatesPicker('value');
// fills the input field back with all the dates in the calendar
$this.val(inputs_values);
// Fixes the altField filled with defaultDate by default
var altFieldOption = $this.datepicker('option', 'altField');
if (altFieldOption) $(altFieldOption).val(inputs_values);
// Updates the calendar view
$this.datepicker('refresh');
},
compareDates : function(date1, date2) {
date1 = dateConvert.call(this, date1);
date2 = dateConvert.call(this, date2);
// return > 0 means date1 is later than date2
// return == 0 means date1 is the same day as date2
// return < 0 means date1 is earlier than date2
var diff = date1.getFullYear() - date2.getFullYear();
if(!diff) {
diff = date1.getMonth() - date2.getMonth();
if(!diff)
diff = date1.getDate() - date2.getDate();
}
return diff;
},
sumDays : function( date, n_days ) {
var origDateType = typeof date;
obj_date = dateConvert.call(this, date);
obj_date.setDate(obj_date.getDate() + n_days);
return dateConvert.call(this, obj_date, origDateType);
},
dateConvert : function( date, desired_format, dateFormat ) {
var from_format = typeof date;
var $this = $(this);
if(from_format == desired_format) {
if(from_format == 'object') {
try {
date.getTime();
} catch (e) {
$.error('Received date is in a non supported format!');
return false;
}
}
return date;
}
if(typeof date == 'undefined') date = new Date(0);
if(desired_format != 'string' && desired_format != 'object' && desired_format != 'number')
$.error('Date format "'+ desired_format +'" not supported!');
if(!dateFormat) {
// thanks to bibendus83 -> http://sourceforge.net/tracker/index.php?func=detail&aid=3213174&group_id=358205&atid=1495382
var dp_dateFormat = $this.datepicker('option', 'dateFormat');
if (dp_dateFormat) {
dateFormat = dp_dateFormat;
} else {
dateFormat = $.datepicker._defaults.dateFormat;
}
}
// converts to object as a neutral format
switch(from_format) {
case 'object': break;
case 'string': date = $.datepicker.parseDate(dateFormat, date); break;
case 'number': date = new Date(date); break;
default: $.error('Conversion from "'+ desired_format +'" format not allowed on jQuery.multiDatesPicker');
}
// then converts to the desired format
switch(desired_format) {
case 'object': return date;
case 'string': return $.datepicker.formatDate(dateFormat, date);
case 'number': return date.getTime();
default: $.error('Conversion to "'+ desired_format +'" format not allowed on jQuery.multiDatesPicker');
}
return false;
},
gotDate : function( date, type ) {
if(!type) type = 'picked';
for(var i = 0; i < this.multiDatesPicker.dates[type].length; i++) {
if(methods.compareDates.call(this, this.multiDatesPicker.dates[type][i], date) === 0) {
return i;
}
}
return false;
},
value : function( value ) {
if(value && typeof value == 'string') {
methods.addDates.call(this, value.split(this.multiDatesPicker.separator));
} else {
var dates = methods.getDates.call(this, 'string');
return dates.length
? dates.join(this.multiDatesPicker.separator)
: "";
}
},
getDates : function( format, type ) {
if(!format) format = 'string';
if(!type) type = 'picked';
switch (format) {
case 'object':
return this.multiDatesPicker.dates[type];
case 'string':
case 'number':
var o_dates = new Array();
for(var i in this.multiDatesPicker.dates[type])
o_dates.push(
dateConvert.call(
this,
this.multiDatesPicker.dates[type][i],
format
)
);
return o_dates;
default: $.error('Format "'+format+'" not supported!');
}
},
addDates : function( dates, type ) {
if(dates.length > 0) {
if(!type) type = 'picked';
switch(typeof dates) {
case 'object':
case 'array':
if(dates.length) {
for(var i = 0; i < dates.length; i++)
addDate.call(this, dates[i], type, true);
sortDates.call(this, type);
break;
} // else does the same as 'string'
case 'string':
case 'number':
addDate.call(this, dates, type);
break;
default:
$.error('Date format "'+ typeof dates +'" not allowed on jQuery.multiDatesPicker');
}
//$(this).datepicker('refresh');
} else {
$.error('Empty array of dates received.');
}
},
removeDates : function( dates, type ) {
if(!type) type = 'picked';
var removed = [];
if (Object.prototype.toString.call(dates) === '[object Array]') {
for(var i in dates.sort(function(a,b){return b-a})) {
removed.push(removeDate.call(this, dates[i], type));
}
} else {
removed.push(removeDate.call(this, dates, type));
}
return removed;
},
removeIndexes : function( indexes, type ) {
if(!type) type = 'picked';
var removed = [];
if (Object.prototype.toString.call(indexes) === '[object Array]') {
for(var i in indexes.sort(function(a,b){return b-a})) {
removed.push(removeIndex.call(this, indexes[i], type));
}
} else {
removed.push(removeIndex.call(this, indexes, type));
}
return removed;
},
resetDates : function ( type ) {
if(!type) type = 'picked';
this.multiDatesPicker.dates[type] = [];
},
toggleDate : function( date, type ) {
if(!type) type = 'picked';
switch(this.multiDatesPicker.mode) {
case 'daysRange':
this.multiDatesPicker.dates[type] = []; // deletes all picked/disabled dates
var end = this.multiDatesPicker.autoselectRange[1];
var begin = this.multiDatesPicker.autoselectRange[0];
if(end < begin) { // switch
end = this.multiDatesPicker.autoselectRange[0];
begin = this.multiDatesPicker.autoselectRange[1];
}
for(var i = begin; i < end; i++)
methods.addDates.call(this, methods.sumDays.call(this,date, i), type);
break;
default:
if(methods.gotDate.call(this, date) === false) // adds dates
methods.addDates.call(this, date, type);
else // removes dates
methods.removeDates.call(this, date, type);
break;
}
},
setMode : function( options ) {
var $this = $(this);
if(options.mode) this.multiDatesPicker.mode = options.mode;
switch(this.multiDatesPicker.mode) {
case 'normal':
for(option in options)
switch(option) {
case 'maxPicks':
case 'minPicks':
case 'pickableRange':
case 'adjustRangeToDisabled':
this.multiDatesPicker[option] = options[option];
break;
//default: $.error('Option ' + option + ' ignored for mode "'.options.mode.'".');
}
break;
case 'daysRange':
case 'weeksRange':
var mandatory = 1;
for(option in options)
switch(option) {
case 'autoselectRange':
mandatory--;
case 'pickableRange':
case 'adjustRangeToDisabled':
this.multiDatesPicker[option] = options[option];
break;
//default: $.error('Option ' + option + ' does not exist for setMode on jQuery.multiDatesPicker');
}
if(mandatory > 0) $.error('Some mandatory options not specified!');
break;
}
/*
if(options.pickableRange) {
$this.datepicker("option", "maxDate", options.pickableRange);
$this.datepicker("option", "minDate", this.multiDatesPicker.minDate);
}
*/
if(mdp_events.onSelect)
mdp_events.onSelect();
},
destroy: function(){
this.multiDatesPicker = null;
$(this).datepicker('destroy');
}
};
this.each(function() {
var $this = $(this);
if (!this.multiDatesPicker) {
this.multiDatesPicker = {
dates: {
picked: [],
disabled: []
},
mode: 'normal',
adjustRangeToDisabled: true
};
}
if(methods[method]) {
var exec_result = methods[method].apply(this, Array.prototype.slice.call(mdp_arguments, 1));
switch(method) {
case 'removeDates':
case 'removeIndexes':
case 'resetDates':
case 'toggleDate':
case 'addDates':
var altField = $this.datepicker('option', 'altField');
// @todo: should use altFormat for altField
var dates_string = methods.value.call(this);
if (altField !== undefined && altField != "") {
$(altField).val(dates_string);
}
$this.val(dates_string);
$.datepicker._refreshDatepicker(this);
}
switch(method) {
case 'removeDates':
case 'getDates':
case 'gotDate':
case 'sumDays':
case 'compareDates':
case 'dateConvert':
case 'value':
ret = exec_result;
}
return exec_result;
} else if( typeof method === 'object' || ! method ) {
return methods.init.apply(this, mdp_arguments);
} else {
$.error('Method ' + method + ' does not exist on jQuery.multiDatesPicker');
}
return false;
});
return ret;
};
var PROP_NAME = 'multiDatesPicker';
var dpuuid = new Date().getTime();
var instActive;
$.multiDatesPicker = {version: false};
//$.multiDatesPicker = new MultiDatesPicker(); // singleton instance
$.multiDatesPicker.initialized = false;
$.multiDatesPicker.uuid = new Date().getTime();
$.multiDatesPicker.version = $.ui.multiDatesPicker.version;
// allows MDP not to hide everytime a date is picked
$.multiDatesPicker._hideDatepicker = $.datepicker._hideDatepicker;
$.datepicker._hideDatepicker = function(){
var target = this._curInst.input[0];
var mdp = target.multiDatesPicker;
if(!mdp || (this._curInst.inline === false && !mdp.changed)) {
return $.multiDatesPicker._hideDatepicker.apply(this, arguments);
} else {
mdp.changed = false;
$.datepicker._refreshDatepicker(target);
return;
}
};
// Workaround for #4055
// Add another global to avoid noConflict issues with inline event handlers
window['DP_jQuery_' + dpuuid] = $;
})( jQuery );

View File

@ -14,7 +14,6 @@
render(url("cadoles_core_theme_setconfig", render(url("cadoles_core_theme_setconfig",
{ {
'logo':logo, 'logo':logo,
'fgheader':fgheader,
'header': header, 'header': header,
'heightheader': heightheader, 'heightheader': heightheader,
'colormain': colormain, 'colormain': colormain,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -14,7 +14,6 @@
render(url("cadoles_core_theme_setconfig", render(url("cadoles_core_theme_setconfig",
{ {
'logo':logo, 'logo':logo,
'fgheader':fgheader,
'header': header, 'header': header,
'heightheader': heightheader, 'heightheader': heightheader,
'colormain': colormain, 'colormain': colormain,

View File

@ -14,7 +14,6 @@
render(url("cadoles_core_theme_setconfig", render(url("cadoles_core_theme_setconfig",
{ {
'logo':logo, 'logo':logo,
'fgheader':fgheader,
'header': header, 'header': header,
'heightheader': heightheader, 'heightheader': heightheader,
'colormain': colormain, 'colormain': colormain,

View File

@ -14,7 +14,6 @@
render(url("cadoles_core_theme_setconfig", render(url("cadoles_core_theme_setconfig",
{ {
'logo':logo, 'logo':logo,
'fgheader':fgheader,
'header': header, 'header': header,
'heightheader': heightheader, 'heightheader': heightheader,
'colormain': colormain, 'colormain': colormain,

View File

@ -14,7 +14,6 @@
render(url("cadoles_core_theme_setconfig", render(url("cadoles_core_theme_setconfig",
{ {
'logo':logo, 'logo':logo,
'fgheader':fgheader,
'header': header, 'header': header,
'heightheader': heightheader, 'heightheader': heightheader,
'colormain': colormain, 'colormain': colormain,

View File

@ -49,6 +49,12 @@
.header.reduit .avatar {height: 25px; } .header.reduit .avatar {height: 25px; }
.header.reduit #navbar-nameuser
{
top: 14px;
right: 210px;
}
/* ===================== FIN MODE REDUIT ==========================*/ /* ===================== FIN MODE REDUIT ==========================*/
/* fix defaut d'affichage sur toogle switch */ /* fix defaut d'affichage sur toogle switch */
@ -57,7 +63,11 @@ body {
background: linear-gradient(180deg, var(--main), white,50%); background: linear-gradient(180deg, var(--main), white,50%);
} }
body.eleves, body.grp-National_1 { #navbar-nameuser a {
color: var(--main, #004d9a) !important;
}
body.eleves, body.grp-National_1, body.grp-eleves {
--colorbody: #ffffff; --colorbody: #ffffff;
--main: #169b62; --main: #169b62;
--mainR: 22; --mainR: 22;
@ -77,7 +87,7 @@ body.eleves, body.grp-National_1 {
/* responsables #MAUVE #7D4E5B /* responsables #MAUVE #7D4E5B
*/ */
body.responsables, body.grp-National_2 { body.responsables, body.grp-National_2,body.grp-responsables {
--colorbody: #ffffff; --colorbody: #ffffff;
--main: #7d4e5b; --main: #7d4e5b;
--mainR: 125; --mainR: 125;
@ -96,7 +106,7 @@ body.responsables, body.grp-National_2 {
/* professeurs, enseignants1d #BLEU1 #5770BE */ /* professeurs, enseignants1d #BLEU1 #5770BE */
body.professeurs, body.enseignants1d, body.grp-National_3 { body.professeurs, body.enseignants1d, body.grp-National_3, body.grp-professeurs {
--colorbody: #ffffff; --colorbody: #ffffff;
--main: #5770be; --main: #5770be;
--mainR: 87; --mainR: 87;
@ -114,7 +124,7 @@ body.professeurs, body.enseignants1d, body.grp-National_3 {
} }
/* administratifs, admin #ORANGE #FF6F4C */ /* administratifs, admin #ORANGE #FF6F4C */
body.administratifs, body.admin, body.grp-National_4 , body.grp-National_5, body.grp-National_6 { body.administratifs, body.admin, body.grp-National_4 , body.grp-National_5, body.grp-National_6 , body.grp-administratifs, {
--colorbody: #ffffff; --colorbody: #ffffff;
--main: #ff6f4c; --main: #ff6f4c;
--mainR: 255; --mainR: 255;
@ -278,7 +288,9 @@ div.header > a.title > span {
} }
.nav.navbar-top-links.navbar-right > li a:hover { .nav.navbar-top-links.navbar-right > li a:hover {
color: var(--fontcolorhover, white) !important; color: var(--fontcolorhover, white) !important;
background: var(--fontcolorhoverdark, black) !important; background: var(--light, black) !important;
border-radius: 5px;
padding-top: 1px;
} }
/* /*

View File

@ -14,7 +14,6 @@
render(url("cadoles_core_theme_setconfig", render(url("cadoles_core_theme_setconfig",
{ {
'logo':logo, 'logo':logo,
'fgheader':fgheader,
'header': header, 'header': header,
'heightheader': heightheader, 'heightheader': heightheader,
'colormain': colormain, 'colormain': colormain,

View File

@ -14,7 +14,6 @@
render(url("cadoles_core_theme_setconfig", render(url("cadoles_core_theme_setconfig",
{ {
'logo':logo, 'logo':logo,
'fgheader':fgheader,
'header': header, 'header': header,
'heightheader': heightheader, 'heightheader': heightheader,
'colormain': colormain, 'colormain': colormain,

View File

@ -14,7 +14,6 @@
render(url("cadoles_core_theme_setconfig", render(url("cadoles_core_theme_setconfig",
{ {
'logo':logo, 'logo':logo,
'fgheader':fgheader,
'header': header, 'header': header,
'heightheader': heightheader, 'heightheader': heightheader,
'colormain': colormain, 'colormain': colormain,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -0,0 +1,26 @@
{% set logo = "" %}
{% set header = "header.jpg" %}
{% set heightheader = "" %}
{% set colormain = "" %}
{% set fontcolorhover = "" %}
{% set colorbody = "" %}
{% set fontfacetitle = "" %}
{% set fontfacebody = "" %}
{{
render(url("cadoles_core_theme_setconfig",
{
'logo':logo,
'header': header,
'heightheader': heightheader,
'colormain': colormain,
'fontcolorhover': fontcolorhover,
'colorbody': colorbody,
'fontfacetitle': fontfacetitle,
'fontfacebody': fontfacebody
}
))
}}

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

View File

@ -0,0 +1,25 @@
.header{
background-image: url(header.jpg) !important;
}
.header .title {
color: var(--main);
}
.header .title:hover {
color: var(--light);
}
.header a {
color: var(--main);
}
.header a:hover {
color: #ffffff;
}
.grid-item .grid-item-title h2 {
font-weight: bold;
text-transform: initial;
font-size:110% !important;
}

View File

@ -14,7 +14,6 @@
render(url("cadoles_core_theme_setconfig", render(url("cadoles_core_theme_setconfig",
{ {
'logo':logo, 'logo':logo,
'fgheader':fgheader,
'header': header, 'header': header,
'heightheader': heightheader, 'heightheader': heightheader,
'colormain': colormain, 'colormain': colormain,

View File

@ -4,6 +4,8 @@
<form> <form>
<h1 class="page-header">Configuration Générale</h1> <h1 class="page-header">Configuration Générale</h1>
Attention, selon la configuration du portail, certains paramètres sont forcés au niveau du serveur et donc certains réglages peuvent être inopérants dans cette interface.
<br><br>
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading"> <div class="panel-heading">
<i class="fa fa-table fa-fw"></i> Liste des Configurations <i class="fa fa-table fa-fw"></i> Liste des Configurations
@ -17,6 +19,7 @@
<th width="90px">Action</th> <th width="90px">Action</th>
<th width="70px">Ordre</th> <th width="70px">Ordre</th>
<th width="200px">Clé</th> <th width="200px">Clé</th>
<th>Description</th>
<th>Valeur</th> <th>Valeur</th>
</tr> </tr>
</thead> </thead>
@ -38,6 +41,7 @@
</td> </td>
<td>{{ config.order }}</td> <td>{{ config.order }}</td>
<td>{{ config.id }}</td> <td>{{ config.id }}</td>
<td>{{ config.help|raw }}</td>
<td> <td>
{% if config.type == "boolean" %} {% if config.type == "boolean" %}
{% if config.value == "0" %} {% if config.value == "0" %}

View File

@ -2,7 +2,7 @@
{% block pagewrapper %} {% block pagewrapper %}
{{ form_start(form) }} {{ form_start(form) }}
<h1 class="page-header">Modification Configuration Générale</h1> <h1 class="page-header">Modification Configuration Générale = {{config.id}}</h1>
{{ form_widget(form.submit) }} <a class="btn btn-default" href={{ path('cadoles_core_config_commun') }}>Annuler</a> {{ form_widget(form.submit) }} <a class="btn btn-default" href={{ path('cadoles_core_config_commun') }}>Annuler</a>

View File

@ -49,5 +49,24 @@
$(window).load(function () { $(window).load(function () {
$('#largeimg').imgAreaSelect({ aspectRatio: '1:1', onSelectChange: preview }); $('#largeimg').imgAreaSelect({ aspectRatio: '1:1', onSelectChange: preview });
var selection = new Object();
if($('#largeimg').height()<$('#largeimg').width()) {
selection.width = $('#largeimg').height();
selection.height = $('#largeimg').height();
}
else {
selection.width = $('#largeimg').width();
selection.height = $('#largeimg').width();
}
selection.x1=0;
selection.x2=0;
selection.y1=0;
selection.y2=0;
preview($('#largeimg'),selection);
}); });
{% endblock %} {% endblock %}

View File

@ -33,6 +33,10 @@
text-transform: initial !important; text-transform: initial !important;
} }
a.item-update {
right: 25px;
}
{% endblock %} {% endblock %}
@ -41,7 +45,7 @@
<div id="explorer"> <div id="explorer">
<div class="btn-toolbar" role="toolbar" aria-label="Toolbar with button groups" style="margin-top:5px"> <div class="btn-toolbar" role="toolbar" aria-label="Toolbar with button groups" style="margin-top:5px">
{% if canupdate %} {% if canupdate and not fgtrash %}
<div class="btn-group mr-2" role="group" aria-label="First group"> <div class="btn-group mr-2" role="group" aria-label="First group">
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#mymodal" onClick="ModalLoad('mymodal','Téléchargez vos Fichiers','{{ path('cadoles_core_'~access~'_file_upload',{'id': directory,'type':'all','subdirectory':subdirectory}) }}');" title="Ajouter des fichiers"> <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#mymodal" onClick="ModalLoad('mymodal','Téléchargez vos Fichiers','{{ path('cadoles_core_'~access~'_file_upload',{'id': directory,'type':'all','subdirectory':subdirectory}) }}');" title="Ajouter des fichiers">
<i class="fa fa-upload"></i> <i class="fa fa-upload"></i>
@ -49,7 +53,6 @@
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#mymodal" onClick="ModalLoad('mymodal','Création Répertoire','{{ path('cadoles_core_'~access~'_file_subdirectory',{'id': directory,'type':'all','subdirectory':subdirectory}) }}');" title="Ajouter un Répertoire"> <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#mymodal" onClick="ModalLoad('mymodal','Création Répertoire','{{ path('cadoles_core_'~access~'_file_subdirectory',{'id': directory,'type':'all','subdirectory':subdirectory}) }}');" title="Ajouter un Répertoire">
<i class="fa fa-folder-plus"></i> <i class="fa fa-folder-plus"></i>
</button> </button>
</div> </div>
{% endif %} {% endif %}
@ -71,23 +74,59 @@
{% endif %} {% endif %}
</a> </a>
{% set active="" %}
{% if sort=="name" %} {% if sort=="name" %}
{%set action="date" %} {% set active="active" %}
{%endif%}
{% if order=="SORT_ASC" %}
{%set action="SORT_DESC" %}
{% else %} {% else %}
{%set action="name" %} {%set action="SORT_ASC" %}
{% endif %} {% endif %}
{% if not subdirectory is empty %} {% if not subdirectory is empty %}
<a href="{{ path('cadoles_core_'~access~'_file_list',{'directory':directory,'subdirectory':subdirectory,'sort':action }) }}" type="button" class="btn btn-primary"> <a href="{{ path('cadoles_core_'~access~'_file_list',{'directory':directory,'subdirectory':subdirectory,'sort':'name', 'order':action }) }}" type="button" class="btn btn-primary {{active}}">
{% else %} {% else %}
<a href="{{ path('cadoles_core_'~access~'_file_list',{'directory':directory,'clear':true,'sort':action }) }}" type="button" class="btn btn-primary"> <a href="{{ path('cadoles_core_'~access~'_file_list',{'directory':directory,'clear':true,'sort':'name', 'order':action }) }}" type="button" class="btn btn-primary {{active}}">
{% endif %} {% endif %}
{% if sort=="name" %} {% if order=="SORT_ASC" %}
<i class="fas fa-long-arrow-alt-down"></i> Nom <i class="fas fa-long-arrow-alt-down"></i> Nom
{% else %} {% else %}
<i class="fas fa-long-arrow-alt-up"></i> Nom
{% endif %}
</a>
{% set active="" %}
{% if sort=="date" %}
{% set active="active" %}
{%endif%}
{% if order=="SORT_ASC" %}
{%set action="SORT_DESC" %}
{% else %}
{%set action="SORT_ASC" %}
{% endif %}
{% if not subdirectory is empty %}
<a href="{{ path('cadoles_core_'~access~'_file_list',{'directory':directory,'subdirectory':subdirectory,'sort':'date', 'order':action }) }}" type="button" class="btn btn-primary {{active}}">
{% else %}
<a href="{{ path('cadoles_core_'~access~'_file_list',{'directory':directory,'clear':true,'sort':'date', 'order':action }) }}" type="button" class="btn btn-primary {{active}}">
{% endif %}
{% if order=="SORT_ASC" %}
<i class="fas fa-long-arrow-alt-down"></i> Date <i class="fas fa-long-arrow-alt-down"></i> Date
{% else %}
<i class="fas fa-long-arrow-alt-up"></i> Date
{% endif %} {% endif %}
</a> </a>
</div> </div>
{% if canupdate %}
<div class="btn-group mr-2" role="group" aria-label="Third group">
<a href="{{ path('cadoles_core_'~access~'_file_list',{'directory':directory,'subdirectory':'__trash' }) }}" type="button" class="btn btn-primary"><i class="fas fa-trash"></i></a>
{% if fgtrash %}
<a href="{{ path('cadoles_core_'~access~'_file_purgetrash',{'directory':directory }) }}" type="button" class="btn btn-primary" data-method="delete" data-confirm="Souhaitez-vous purger votre poubelle ? Cette action sera irrévocable.">Purger la poubelle</a>
{% endif %}
</div>
{% endif %}
</div> </div>
@ -104,11 +143,13 @@
{% set sub = sub~"/"~parent %} {% set sub = sub~"/"~parent %}
{% endif %} {% endif %}
<li class="brea.dcrumb-item directory" data-dir="{{datadir}}" data-name="{{ parent }}"><a href="{{ path('cadoles_core_'~access~'_file_list',{'directory':directory,'subdirectory':sub }) }}">{{parent|raw}}</a></li> {% set tmpdirname = parent|replace({'__trash': 'Poubelle'}) %}
<li class="brea.dcrumb-item directory" data-dir="{{datadir}}" data-name="{{ parent }}"><a href="{{ path('cadoles_core_'~access~'_file_list',{'directory':directory,'subdirectory':sub }) }}">{{tmpdirname|raw}}</a></li>
{% endfor %} {% endfor %}
{% if not subdirectory is empty %} {% if not subdirectory is empty %}
<li class="breadcrumb-item directory" data-dir="{{directory}}/{{sub}}" data-name="{{dirname}}"><a href="{{ path('cadoles_core_'~access~'_file_list',{'directory':directory,'subdirectory':subdirectory }) }}">{{dirname|raw}}</a></li> {% set tmpdirname = dirname|replace({'__trash': 'Poubelle'}) %}
<li class="breadcrumb-item directory" data-dir="{{directory}}/{{sub}}" data-name="{{dirname}}"><a href="{{ path('cadoles_core_'~access~'_file_list',{'directory':directory,'subdirectory':subdirectory }) }}">{{tmpdirname|raw}}</a></li>
{% endif %} {% endif %}
</ol> </ol>
@ -124,9 +165,23 @@
<div id="{{dir.name|e('js')|raw }}" class="grid-item grid-{{view}} directory" data-dir="{{directory}}/{{subdirectory}}" data-name="{{dir.name}}"> <div id="{{dir.name|e('js')|raw }}" class="grid-item grid-{{view}} directory" data-dir="{{directory}}/{{subdirectory}}" data-name="{{dir.name}}">
<div class="grid-item-content"> <div class="grid-item-content">
{% if canadd %} {% if canadd %}
{% if fgtrash %}
<a style="cursor:pointer;" onClick="restaureFile('{{ directory }}','{{subdirectory}}','{{dir.name|e('js')|raw }}')" class="item-restaure">
<i class="fa fa-undo" title="Restaurer le fichier"></i>
</a>
<a style="cursor:pointer;" onClick="delFile('{{ directory }}','{{subdirectory}}','{{dir.name|e('js')|raw }}')" class="item-delete"> <a style="cursor:pointer;" onClick="delFile('{{ directory }}','{{subdirectory}}','{{dir.name|e('js')|raw }}')" class="item-delete">
<i class="fa fa-trash" title="Supprimer le dossier"></i> <i class="fa fa-trash" title="Supprimer le dossier"></i>
</a> </a>
{% else %}
<a style="cursor:pointer;" data-toggle="modal" data-target="#mymodal" onClick="ModalLoad('mymodal','Modification Répertoire','{{ path('cadoles_core_'~access~'_file_rename',{'id': directory,'subdirectory':subdirectory,'oldname':dir.name}) }}');" class="item-update">
<i class="fa fa-file" title="Renommer le dossier"></i>
</a>
<a style="cursor:pointer;" onClick="trashFile('{{ directory }}','{{subdirectory}}','{{dir.name|e('js')|raw }}')" class="item-delete">
<i class="fa fa-trash" title="Supprimer le dossier"></i>
</a>
{% endif %}
{% endif %} {% endif %}
{% if subdirectory is empty %} {% if subdirectory is empty %}
@ -153,9 +208,23 @@
<div class="grid-item grid-{{view}} file" data-dir="{{directory}}/{{subdirectory}}" data-name="{{file.name}}"> <div class="grid-item grid-{{view}} file" data-dir="{{directory}}/{{subdirectory}}" data-name="{{file.name}}">
<div class="grid-item-content"> <div class="grid-item-content">
{% if canadd %} {% if canadd %}
{% if fgtrash %}
<a style="cursor:pointer;" onClick="restaureFile('{{ directory }}','{{subdirectory}}','{{file.name|e('js')|raw }}')" class="item-restaure">
<i class="fa fa-undo" title="Restaurer le fichier"></i>
</a>
<a style="cursor:pointer;" onClick="delFile('{{ directory }}','{{subdirectory}}','{{file.name|e('js')|raw }}')" class="item-delete"> <a style="cursor:pointer;" onClick="delFile('{{ directory }}','{{subdirectory}}','{{file.name|e('js')|raw }}')" class="item-delete">
<i class="fa fa-trash" title="Supprimer le fichier"></i> <i class="fa fa-trash" title="Supprimer le fichier"></i>
</a> </a>
{% else %}
<a style="cursor:pointer;" data-toggle="modal" data-target="#mymodal" onClick="ModalLoad('mymodal','Modification Fichier','{{ path('cadoles_core_'~access~'_file_rename',{'id': directory,'subdirectory':subdirectory,'oldname':file.name}) }}');" class="item-update">
<i class="fa fa-file" title="Renommer le fichier"></i>
</a>
<a style="cursor:pointer;" onClick="trashFile('{{ directory }}','{{subdirectory}}','{{file.name|e('js')|raw }}')" class="item-delete">
<i class="fa fa-trash" title="Supprimer le fichier"></i>
</a>
{% endif %}
{% endif %} {% endif %}
{% if file.minefamily=="text" or file.minefamily=="image" or file.minetype == "application/pdf" %} {% if file.minefamily=="text" or file.minefamily=="image" or file.minetype == "application/pdf" %}
@ -205,8 +274,12 @@
else { else {
color = "#{{ color["main"]}}"; color = "#{{ color["main"]}}";
} }
$(".item-update").css("color",color);
$(".item-update > i").css("color",color);
$(".item-delete").css("color",color); $(".item-delete").css("color",color);
$(".item-delete > i").css("color",color); $(".item-delete > i").css("color",color);
$(".item-restaure").css("color",color);
$(".item-restaure > i").css("color",color);
$(".grid-item-title > h2").css("color",color); $(".grid-item-title > h2").css("color",color);
$('#mymodal').on('shown.bs.modal', function() { $('#mymodal').on('shown.bs.modal', function() {
@ -218,6 +291,7 @@
}); });
{% if canupdate and not fgtrash %}
$('.file').on('dragstart', function (s) { $('.file').on('dragstart', function (s) {
dirsource=$(this).data("dir"); dirsource=$(this).data("dir");
namesource=$(this).data("name"); namesource=$(this).data("name");
@ -240,11 +314,17 @@
dirdestination=$(this).data("dir")+"/"+$(this).data("name"); dirdestination=$(this).data("dir")+"/"+$(this).data("name");
namedestination=namesource; namedestination=namesource;
// Si la source est la meme que la destination on ne fait rien urlsource=dirsource+"/"+namesource;
if(dirdestination+"/"+namedestination==dirsource+"/"+namesource) return false; urlsource=urlsource.replace("//","/");
urldestination=dirdestination+"/"+namedestination;
urldestination=urldestination.replace("//","/");
// Si la source est la meme que la destination on ne fait rien
if(urlsource==urldestination) return false;
// Si la source est dans la destination on ne fait rien
//if(urldestination.includes(urlsource)) return false;
console.log(dirsource+"/"+namesource);
console.log(dirdestination+"/"+namedestination);
// On déplace l'element // On déplace l'element
$.ajax({ $.ajax({
method: "POST", method: "POST",
@ -263,11 +343,9 @@
} }
}); });
return false; return false;
}); });
{% endif %}
}); });
@ -293,9 +371,48 @@
} }
} }
{% if canupdate %}
// Trasher un fichier
function trashFile(directory,subdirectory,filename) {
var r = confirm("Confirmez-vous la mise à la poubelle de ce fichier ? Vous pourrez le récupèrer si besoin.");
if (r == true) {
$.ajax({
method: "POST",
url: "{{ path('cadoles_core_'~access~'_file_trash') }}",
data: {
directory:directory,
subdirectory:subdirectory,
filename:filename
},
success: function() {
location.reload();
}
});
}
}
// Restaurer un fichier
function restaureFile(directory,subdirectory,filename) {
var r = confirm("Confirmez-vous la restauration de ce fichier ?");
if (r == true) {
$.ajax({
method: "POST",
url: "{{ path('cadoles_core_'~access~'_file_restaure') }}",
data: {
directory:directory,
subdirectory:subdirectory,
filename:filename
},
success: function() {
location.reload();
}
});
}
}
// Supprimer un fichier // Supprimer un fichier
function delFile(directory,subdirectory,filename) { function delFile(directory,subdirectory,filename) {
var r = confirm("Confirmez-vous la suppression de ce fichier ?"); var r = confirm("Confirmez-vous la suppression définitive de ce fichier ?");
if (r == true) { if (r == true) {
$.ajax({ $.ajax({
method: "POST", method: "POST",
@ -311,6 +428,7 @@
}); });
} }
} }
{% endif %}
// Affichage des frames associés aux items de bureau // Affichage des frames associés aux items de bureau

View File

@ -46,7 +46,8 @@
$('document').ready(function(){ $('document').ready(function(){
{% if toclose %} {% if toclose %}
parent.location.reload(); href=parent.location.href;
parent.location.href=href;
{% endif %} {% endif %}
$("#form_subdirectory").focus(); $("#form_subdirectory").focus();

View File

@ -23,7 +23,7 @@
init: function() { init: function() {
this.on("sending", function(file, xhr, formData) { this.on("sending", function(file, xhr, formData) {
formData.append("directory", "{{ id }}"); formData.append("directory", "{{ id }}");
formData.append("subdirectory", "{{ subdirectory }}"); formData.append("subdirectory", "{{ subdirectory|raw }}");
}); });
var totalFiles = 0; var totalFiles = 0;

View File

@ -4,11 +4,11 @@
{{ form_start(form) }} {{ form_start(form) }}
<h1 class="page-header"> <h1 class="page-header">
{% if mode=="update" %} {% if mode=="update" %}
Modification Groupe Modification Groupe = {{ group.label }}
{% elseif mode=="submit" %} {% elseif mode=="submit" %}
Création Groupe Création Groupe
{% elseif mode=="delete" %} {% elseif mode=="delete" %}
Suppression Groupe Suppression Groupe = {{ group.label }}
{% endif %} {% endif %}
</h1> </h1>

View File

@ -0,0 +1,52 @@
{% extends '@CadolesCore/base.html.twig' %}
{% block pagewrapper %}
<a class="btn btn-default" onClick="closeModal()">Fermer</a>
<br><br>
<table class="table table-striped table-bordered table-hover" id="dataTablesnotin" style="width:100%">
<thead>
<tr>
<th>Action</th>
<th>Email</th>
<th>Statut</th>
</tr>
</thead>
<tbody>
{% for invitation in invitations %}
<tr>
<td>
{% if invitation.relance %}
<a style='cursor:pointer' onClick='showMail("{{invitation.email}}")'><i class='fa fa-envelope fa-fw'></i></a>
{% endif %}
</td>
<td>{{invitation.email}}</td>
<td>{{invitation.statut}}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
{% block localjavascript %}
$(document).ready(function() {
});
function showMail(email) {
window.parent.$("#mymodal").hide();
$("#mymodal").find(".modal-title").html("INVITATION");
var url="{{ path('cadoles_core_mail_invitationgroup',{id:id,email:'xxx'}) }}";
url=url.replace('xxx',email);
window.parent.$("#mymodal").find("#framemodal").attr("src",url);
window.parent.$("#mymodal").modal().show();
}
function closeModal() {
url=window.parent.location;
window.parent.location=url;
}
{% endblock %}

View File

@ -9,17 +9,21 @@
{%endif%} {%endif%}
</h1> </h1>
<p>
{% set permgroup = app.session.get('permgroup') %} {% set permgroup = app.session.get('permgroup') %}
{% if is_granted('ROLE_ADMIN') or (is_granted('ROLE_MODO') and (permgroup=="ROLE_MODO" or permgroup=="ROLE_ANIM" or permgroup=="ROLE_USER")) or (is_granted('ROLE_ANIM') and (permgroup=="ROLE_ANIM" or permgroup=="ROLE_USER")) or (is_granted('ROLE_USER') and permgroup=="ROLE_USER") %} {% if is_granted('ROLE_ADMIN') or (is_granted('ROLE_MODO') and (permgroup=="ROLE_MODO" or permgroup=="ROLE_ANIM" or permgroup=="ROLE_USER")) or (is_granted('ROLE_ANIM') and (permgroup=="ROLE_ANIM" or permgroup=="ROLE_USER")) or (is_granted('ROLE_USER') and permgroup=="ROLE_USER") %}
<p><a class="btn btn-success" href={{ path('cadoles_core_'~access~'_group_submit') }}> <a class="btn btn-success" href={{ path('cadoles_core_'~access~'_group_submit') }}>
{% if access=="config" %} {% if access=="config" %}
Ajouter Ajouter
{% else %} {% else %}
Créer un Groupe de Travail Créer un Groupe de Travail
{% endif %} {% endif %}
</a></p> </a>
{% endif %} {% endif %}
{%if access=="config" %}
<a class="btn btn-success" href={{ path('cadoles_core_config_group_export') }}>Exporter CSV</a>
{% endif %}
</p>
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading"> <div class="panel-heading">
@ -39,6 +43,7 @@
{% if portal_activate %} {% if portal_activate %}
<th>Groupe de Travail</th> <th>Groupe de Travail</th>
<th class="text-center">Propriétaire</th> <th class="text-center">Propriétaire</th>
<th class="no-sort">Visite</th>
{% if access=="config" %} {% if access=="config" %}
<th>Création Pages</th> <th>Création Pages</th>
<th>Création Calendriers</th> <th>Création Calendriers</th>

View File

@ -9,9 +9,15 @@
<a class="btn btn-default" href={{ path('cadoles_core_home',{'id':idreturn}) }}>Fermer</a> <a class="btn btn-default" href={{ path('cadoles_core_home',{'id':idreturn}) }}>Fermer</a>
{% endif %} {% endif %}
{% if moderegistration!="none" and masteridentity=="SQL"%} {% if moderegistration!="none" and masteridentity=="SQL" and group.fgcanshare %}
<a class="btn btn-primary" style="cursor:pointer" onClick="showMail();">Inviter des personnes non listées ci-dessous</a> <a class="btn btn-primary" style="cursor:pointer" onClick="showMail();">Inviter des personnes non listées ci-dessous</a>
<a class="btn btn-primary" style="cursor:pointer" onClick="showInvitations();">Suivi des Invitations</a>
{%endif%} {%endif%}
{% if group.fgcanshare %}
<button class="btn btn-default pull-right" style="margin-left:10px" data-toggle="modal" data-target="#modalperm">Matrice des permissions</button>
{%endif%}
<a class="btn btn-default pull-right" href={{ path('cadoles_core_'~access~'_group_usergroup_export',{'id':group.id}) }}>Exporter CSV</a> <a class="btn btn-default pull-right" href={{ path('cadoles_core_'~access~'_group_usergroup_export',{'id':group.id}) }}>Exporter CSV</a>
<br><br> <br><br>
@ -30,9 +36,11 @@
<th width="70px" class="no-sort">Avatar</th> <th width="70px" class="no-sort">Avatar</th>
<th width="200px">Login</th> <th width="200px">Login</th>
<th>Email</th> <th>Email</th>
{% if fgviewvisite %}
<th class="no-sort no-visible">Visite</th> <th class="no-sort no-visible">Visite</th>
{% endif %}
{% if group.fgcanshare %} {% if group.fgcanshare %}
<th class="no-sort no-visible">Manager</th> <th class="no-sort no-visible">Permissions</th>
{% endif %} {% endif %}
</tr> </tr>
</thead> </thead>
@ -57,9 +65,11 @@
<th width="70px" class="no-sort">Avatar</th> <th width="70px" class="no-sort">Avatar</th>
<th width="200px">Login</th> <th width="200px">Login</th>
<th>Email</th> <th>Email</th>
{% if fgviewvisite %}
<th class="no-sort">Visite</th> <th class="no-sort">Visite</th>
{% endif %}
{% if group.fgcanshare %} {% if group.fgcanshare %}
<th class="no-sort">Manager</th> <th class="no-sort">Permissions</th>
{% endif %} {% endif %}
</tr> </tr>
</thead> </thead>
@ -69,6 +79,333 @@
</div> </div>
</div> </div>
<div id="modalperm" class="modal fade bs-item-modal" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">MATRICE DES PERMISSIONS</h4>
</div>
<div class="modal-body">
<div class="dataTable_wrapper">
<table class="table table-striped table-bordered table-hover" id="dataTablesnotin" style="width:100%; text-align:center; zoom:80%">
<thead>
<tr>
<th>Permissions</th>
<th style="text-align:center">Propriétaire<br>***</th>
<th style="text-align:center">Gestionnaire<br>**</th>
<th style="text-align:center">Collaborateur<br>*</th>
<th style="text-align:center">Utilisateur<br>&nbsp;</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="5" style="font-weight: bold;">GROUPE</td>
</tr>
<tr>
<td style="text-align:left;">Modifier le groupe</td>
<td>x</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Supprimer le groupe</td>
<td>x</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Changer le propriétaire du groupe</td>
<td>x</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Affecter des utilisateurs au groupe</td>
<td>x</td>
<td>x</td>
<td></td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Désaffecter des utilisateurs au groupe</td>
<td>x</td>
<td>x</td>
<td></td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Inviter des utilisateurs dans le groupe</td>
<td>x</td>
<td>x</td>
<td></td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Visualiser les statistiques du groupe</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td>x</td>
</tr>
<tr>
<td style="text-align:left;">Sinscrire par soi-même sur les groupes ouverts</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td>x</td>
</tr>
<tr>
<td style="text-align:left;">Se désinscrire par soi-même </td>
<td></td>
<td>x</td>
<td>x</td>
<td>x</td>
</tr>
<tr>
<td colspan="5" style="font-weight: bold;">PAGE</td>
</tr>
<tr>
<td style="text-align:left;">Créer / Modifier / Supprimer / Partager des Pages sur le groupe</td>
<td>x</td>
<td>x</td>
<td></td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Placer en favoris une page du groupe</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td>x</td>
</tr>
<tr>
<td colspan="5" style="font-weight: bold;">WIDGET</td>
</tr>
<tr>
<td style="text-align:left;">Widget Favoris = Ajouter / Modifier / Supprimer Lien</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Widget Fichier = Ajouter / Modifier / Supprimer Fichiers</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Widget Lien = Modifier Lien</td>
<td>x</td>
<td>x</td>
<td></td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Widget Editeur = Modifier Texte</td>
<td>x</td>
<td>x</td>
<td></td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Widget Carrousel = Créer / Modifier / Supprimer Image</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Widget Gallerie Images = Créer / Modifier / Supprimer Image</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Widget Chat = Ajouter commentaires</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td>x</td>
</tr>
<tr>
<td style="text-align:left;">Widget Chat = Modifier / Supprimer Commentaires des membres du groupe</td>
<td>x</td>
<td>x</td>
<td></td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Widget Chat = Masquer Commentaires des membres du groupe</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td>x</td>
</tr>
<tr>
<td colspan="5" style="font-weight: bold;">BLOG</td>
</tr>
<tr>
<td style="text-align:left;">Créer / Modifier / Supprimer / Partager un blog sur le groupe</td>
<td>x</td>
<td>x</td>
<td></td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Créer des articles sur les blogs du groupe</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Modifier / Supprimer ses articles sur les blogs du groupe</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Modifier / Supprimer des articles de blog des autres membres du groupe</td>
<td>x</td>
<td>x</td>
<td></td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Ajouter des commentaires sur les articles du blog</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td>x</td>
</tr>
<tr>
<td style="text-align:left;">Modifier / Supprimer ses propres commentaires</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td>x</td>
</tr>
<tr>
<td style="text-align:left;">Modifier / Supprimer les commentaires des autres membre du groupe de ses articles</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Modifier / Supprimer les commentaires des autres membre du groupe sur l'ensemble du blog</td>
<td>x</td>
<td>x</td>
<td></td>
<td></td>
</tr>
<tr>
<td colspan="5" style="font-weight: bold;">PROJET</td>
</tr>
<tr>
<td style="text-align:left;">Créer / Modifier / Supprimer / Partager des projets sur le groupe</td>
<td>x</td>
<td>x</td>
<td></td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Créer des taches sur les projets du groupe</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td>x</td>
</tr>
<tr>
<td style="text-align:left;">Modifier / Supprimer ses propres tâches</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td>x</td>
</tr>
<tr>
<td style="text-align:left;">Affecter des tâches aux autres membres du groupe</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Modifier / Supprimer des Tâches à des autres membres du groupe</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Ajouter des commentaires sur les tâches</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td>x</td>
</tr>
<tr>
<td style="text-align:left;">Modifier / Supprimer ses propres commentaires de tâches</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td>x</td>
</tr>
<tr>
<td style="text-align:left;">Modifier / Supprimer les commentaires des autres membre du groupe de ses taches</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Modifier / Supprimer les commentaires des taches sur l'ensemble du projet</td>
<td>x</td>
<td>x</td>
<td></td>
<td></td>
</tr>
<tr>
<td colspan="5" style="font-weight: bold;">CALENDRIER</td>
</tr>
<tr>
<td style="text-align:left;">Créer / Modifier / Supprimer / Partager un calendrier sur le groupe</td>
<td>x</td>
<td>x</td>
<td></td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Créer des évènements sur les calendriers du groupe</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td></td>
</tr>
<tr>
<td style="text-align:left;">Créer / Modifier / Supprimer / Partager des évènements sur les calendriers du groupe</td>
<td>x</td>
<td>x</td>
<td>x</td>
<td></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
{% endblock %} {% endblock %}
{% block localjavascript %} {% block localjavascript %}
@ -151,15 +488,17 @@
}); });
} }
function switchManager(id) { function changeRole(id) {
$.ajax({ $.ajax({
method: "POST", method: "POST",
url: "{{ path('cadoles_core_'~access~'_group_ajax_switchmanager') }}", url: "{{ path('cadoles_core_'~access~'_group_ajax_changerole') }}",
data: { data: {
"group": {{ group.id }}, "group": {{ group.id }},
"user": id, "user": id,
"role": $("#roleuser-"+id).val(),
} }
}); });
} }
function showMail() { function showMail() {
@ -168,4 +507,11 @@
$("#mymodal").find("#framemodal").attr("src",url); $("#mymodal").find("#framemodal").attr("src",url);
$("#mymodal").modal().show(); $("#mymodal").modal().show();
} }
function showInvitations() {
$("#mymodal").find(".modal-title").html("SUVI DES INVITATIONS");
var url="{{ path('cadoles_core_'~access~'_group_invitation',{id:group.id}) }}";
$("#mymodal").find("#framemodal").attr("src",url);
$("#mymodal").modal().show();
}
{% endblock %} {% endblock %}

View File

@ -217,6 +217,7 @@
$( ".grid-item-content").hover(function() { $( ".grid-item-content").hover(function() {
$(this).children(".item-heart").show(); $(this).children(".item-heart").show();
$(this).children(".item-delete").show(); $(this).children(".item-delete").show();
$(this).children(".item-restaure").show();
$(this).children(".item-update").show(); $(this).children(".item-update").show();
$(this).children(".item-preview").show(); $(this).children(".item-preview").show();
}); });
@ -224,6 +225,7 @@
$( ".grid-item-content" ).mouseleave(function() { $( ".grid-item-content" ).mouseleave(function() {
$(this).children(".item-heart").hide(); $(this).children(".item-heart").hide();
$(this).children(".item-delete").hide(); $(this).children(".item-delete").hide();
$(this).children(".item-restaure").hide();
$(this).children(".item-update").hide(); $(this).children(".item-update").hide();
$(this).children(".item-preview").hide(); $(this).children(".item-preview").hide();
}); });

View File

@ -6,9 +6,9 @@
{% set permannu = app.session.get('permannu') %} {% set permannu = app.session.get('permannu') %}
{% if fgheader %} {% if fgheader %}
<li id="menu-header"><a onclick="switchHeader()" title="Cacher / Affichier Bannière " style="cursor:pointer"><i class="fa fa-chevron-up fa-fw"></i></a> <li id="menu-header"><a onclick="switchHeader()" title="Cacher / Afficher Bannière " style="cursor:pointer"><i class="fa fa-chevron-up fa-fw"></i></a>
{% else %} {% else %}
<li id="menu-header"><a onclick="switchHeader()" title="Cacher / Affichier Bannière " style="cursor:pointer"><i class="fa fa-chevron-down fa-fw"></i></a> <li id="menu-header"><a onclick="switchHeader()" title="Cacher / Afficher Bannière " style="cursor:pointer"><i class="fa fa-chevron-down fa-fw"></i></a>
{% endif %} {% endif %}
{% if is_granted('ROLE_ADMIN') or (is_granted('ROLE_MODO') and (permannu=="ROLE_MODO" or permannu=="ROLE_ANIM" or permannu=="ROLE_USER")) or (is_granted('ROLE_ANIM') and (permannu=="ROLE_ANIM" or permannu=="ROLE_USER")) or (is_granted('ROLE_USER') and permannu=="ROLE_USER") %} {% if is_granted('ROLE_ADMIN') or (is_granted('ROLE_MODO') and (permannu=="ROLE_MODO" or permannu=="ROLE_ANIM" or permannu=="ROLE_USER")) or (is_granted('ROLE_ANIM') and (permannu=="ROLE_ANIM" or permannu=="ROLE_USER")) or (is_granted('ROLE_USER') and permannu=="ROLE_USER") %}

View File

@ -4,11 +4,11 @@
{{ form_start(form) }} {{ form_start(form) }}
<h1 class="page-header"> <h1 class="page-header">
{% if mode=="update" %} {% if mode=="update" %}
Modification {{ labelniveau01 }} Modification {{ labelniveau01 }} = {{niveau01.label}}
{% elseif mode=="submit" %} {% elseif mode=="submit" %}
Création {{ labelniveau01 }} Création {{ labelniveau01 }}
{% elseif mode=="delete" %} {% elseif mode=="delete" %}
Suppression {{ labelniveau01 }} Suppression {{ labelniveau01 }} = {{niveau01.label}}
{% endif %} {% endif %}
</h1> </h1>

View File

@ -4,11 +4,11 @@
{{ form_start(form) }} {{ form_start(form) }}
<h1 class="page-header"> <h1 class="page-header">
{% if mode=="update" %} {% if mode=="update" %}
Modification {{ labelniveau02 }} Modification {{ labelniveau02 }} = {{niveau02.label}}
{% elseif mode=="submit" %} {% elseif mode=="submit" %}
Création {{ labelniveau02 }} Création {{ labelniveau02 }}
{% elseif mode=="delete" %} {% elseif mode=="delete" %}
Suppression {{ labelniveau02 }} Suppression {{ labelniveau02 }} = {{niveau02.label}}
{% endif %} {% endif %}
</h1> </h1>

View File

@ -4,11 +4,11 @@
{{ form_start(form) }} {{ form_start(form) }}
<h1 class="page-header"> <h1 class="page-header">
{% if mode=="update" %} {% if mode=="update" %}
Modification Profil de Modération Modification Profil de Modération = {{ permmodoprofil.name }}
{% elseif mode=="submit" %} {% elseif mode=="submit" %}
Création Profil de Modération Création Profil de Modération
{% elseif mode=="delete" %} {% elseif mode=="delete" %}
Suppression Profil de Modération Suppression Profil de Modération = {{ permmodoprofil.name }}
{% endif %} {% endif %}
</h1> </h1>

View File

@ -5,11 +5,11 @@
{% if moderegistration!="none" %} {% if moderegistration!="none" %}
<h1 class="page-header"> <h1 class="page-header">
{% if mode=="send" %} {% if mode=="send" %}
Confirmation à l'Utilisateur Confirmation à l'Utilisateur = {{ registration.username }}
{% elseif mode=="submit" %} {% elseif mode=="submit" %}
Inscription Inscription
{% elseif mode=="delete" %} {% elseif mode=="delete" %}
Suppression Inscription Suppression Inscription = {{ registration.username }}
{% endif %} {% endif %}
</h1> </h1>
@ -21,7 +21,11 @@
{% endif %} {% endif %}
{% if mode!="submit" %} {% if mode!="submit" %}
{% if mode=="send" %} {{ form_widget(form.save) }} {%endif%} {% if mode=="send" %}
{{ form_widget(form.save) }}
<a class="btn btn-default" href="mailto:{{registration.email}}?subject= {{app.session.get('appname')}} : à propos de votre inscription">Envoyer un mail</a>
{%endif%}
<a class="btn btn-default" href={{ path('cadoles_core_config_registration') }}>Annuler</a> <a class="btn btn-default" href={{ path('cadoles_core_config_registration') }}>Annuler</a>
{% endif %} {% endif %}
@ -56,6 +60,19 @@
{% endif %} {% endif %}
<div class="row"> <div class="row">
{% if mode=="send" %}
<div class="col-sm-12">
<div class="panel panel-primary">
<div class="panel-heading">
<i class="fa fa-key fa-fw"></i> Notes Administrateur
</div>
<div class="panel-body">
{{ form_widget(form.note) }}
</div>
</div>
</div>
{%endif%}
<div class="col-sm-6"> <div class="col-sm-6">
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading"> <div class="panel-heading">
@ -90,7 +107,13 @@
<div class="panel-body"> <div class="panel-body">
{% if form.firstname is defined %} {{ form_row(form.firstname) }} {% endif %} {% if form.firstname is defined %} {{ form_row(form.firstname) }} {% endif %}
{{ form_row(form.lastname) }} {{ form_row(form.lastname) }}
{% if form.email is defined %} {{ form_row(form.email) }} {% endif %} {% if form.email is defined %}
{{ form_row(form.email) }}
<div class='alert alert-info alert-email' style='display:none; font-size: 80%;padding: 5px;margin-top: -10px;'>
Votre mail ne fait pas partie des mails professonniels pré-inscrits dans {{app.session.get("appname")}}.<br>
S'il s'agit de votre mail professionnel vous devez compléter le formulaire "Motivations" pour que l'administrateur de {{app.session.get("appname")}} valide votre demannde d'inscription.
</div>
{% endif %}
{% if form.visible is defined %} {{ form_row(form.visible) }} {% endif %} {% if form.visible is defined %} {{ form_row(form.visible) }} {% endif %}
</div> </div>
</div> </div>
@ -196,6 +219,29 @@
}); });
}); });
$(document.body).on("focusout","#registration_email",function(){
$.ajax({
method: "POST",
url: "{{ path('cadoles_core_ajax_iswhitelist') }}",
data: {
email:$("#registration_email").val(),
},
success: function(data) {
if(data=="KO") {
$("#registration_motivation").attr("required","required");
$(".alert-email").show();
$("label[for='registration_motivation']").text("Motivation *");
}
else {
$("#registration_motivation").removeAttr("required");
$(".alert-email").hide();
$("label[for='registration_motivation']").text("Motivation");
}
}
});
});
function hideshow() { function hideshow() {
if($("#registration_birthcountry").val()==269) if($("#registration_birthcountry").val()==269)
$("#blockcity").show(); $("#blockcity").show();
@ -207,10 +253,12 @@
niveau01=$("#registration_niveau01 option:selected").text().toLowerCase(); niveau01=$("#registration_niveau01 option:selected").text().toLowerCase();
if(niveau01.startsWith("autre")) { if(niveau01.startsWith("autre")) {
$("#niveau01other").show(); $("#niveau01other").show();
$("#registration_niveau01other").attr("required","required");
} }
else { else {
$("#registration_niveau01other").val(""); $("#registration_niveau01other").val("");
$("#niveau01other").hide(); $("#niveau01other").hide();
$("#registration_niveau01other").removeAttr("required");
} }
} }

View File

@ -18,7 +18,9 @@
$(document).ready(function() { $(document).ready(function() {
// Redirection vers la mire d'authentification // Redirection vers la mire d'authentification
setTimeout(function(){ setTimeout(function(){
{% if mode_auth == "SAML" %} {% if redirectto is defined and redirectto is not null %}
window.location.href="{{ redirectto }}";
{% elseif mode_auth == "SAML" %}
window.location.href="{{ path("lightsaml_sp.login") }}"; window.location.href="{{ path("lightsaml_sp.login") }}";
{% elseif mode_auth == "CAS" %} {% elseif mode_auth == "CAS" %}
window.location.href="{{ path("cas_sp.login") }}"; window.location.href="{{ path("cas_sp.login") }}";
@ -32,6 +34,5 @@
}, 6000); }, 6000);
}); });
{% endif %} {% endif %}
{% endblock %} {% endblock %}

View File

@ -5,7 +5,7 @@
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading"> <div class="panel-heading">
<i class="fa fa-table fa-fw"></i> Compteur de visites journalière <i class="fa fa-table fa-fw"></i> Compteur de visites journalières
</div> </div>
<div class="panel-body"> <div class="panel-body">
@ -15,7 +15,7 @@
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading"> <div class="panel-heading">
<i class="fa fa-table fa-fw"></i> Compteur de visites journalière des groupes de travail <i class="fa fa-table fa-fw"></i> Compteur de visites journalières des groupes de travail
</div> </div>
<div class="panel-body"> <div class="panel-body">
@ -27,7 +27,7 @@
<div class="col col-md-6"> <div class="col col-md-6">
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading"> <div class="panel-heading">
<i class="fa fa-table fa-fw"></i> Evolution du nombre de message dans les tchat <i class="fa fa-table fa-fw"></i> Évolution du nombre de message dans les chats
</div> </div>
<div class="panel-body"> <div class="panel-body">
@ -39,7 +39,7 @@
<div class="col col-md-6"> <div class="col col-md-6">
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading"> <div class="panel-heading">
<i class="fa fa-table fa-fw"></i> Evolution du nombre d'articles de blog <i class="fa fa-table fa-fw"></i> Évolution du nombre d'articles de blog
</div> </div>
<div class="panel-body"> <div class="panel-body">

View File

@ -5,7 +5,7 @@
<h1 class="page-header"> <h1 class="page-header">
{% if mode=="update" %} {% if mode=="update" %}
{% if access=="config" %} {% if access=="config" %}
Modification Utilisateur Modification Utilisateur = {{ user.username}}
{% else %} {% else %}
Profil Profil
{% endif %} {% endif %}
@ -63,6 +63,19 @@
<a class="btn btn-info" style="width:100%; margin-bottom:15px;" data-toggle="modal" data-target="#mymodal" onClick="ModalLoad('mymodal','Avatar','{{ path('cadoles_core_crop01') }}');" title='Ajouter un avatar'>Modifier</a> <a class="btn btn-info" style="width:100%; margin-bottom:15px;" data-toggle="modal" data-target="#mymodal" onClick="ModalLoad('mymodal','Avatar','{{ path('cadoles_core_crop01') }}');" title='Ajouter un avatar'>Modifier</a>
</div> </div>
{% if access=="config" %}
<div class="col-sm-12">
<div class="panel panel-primary">
<div class="panel-heading">
<i class="fa fa-key fa-fw"></i> Notes Administrateur
</div>
<div class="panel-body">
{{ form_widget(form.note) }}
</div>
</div>
</div>
{%endif%}
<div class="col-sm-6"> <div class="col-sm-6">
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading"> <div class="panel-heading">
@ -169,10 +182,19 @@
<tbody> <tbody>
{% for group in user.groups %} {% for group in user.groups %}
<tr id="linkgroup{{ group.group.id }}"> <tr id="linkgroup{{ group.group.id }}">
{% if access=="config" and not group.group.fgall and group.group.ldapfilter=="" and group.group.attributes =="" %} {% set canleave = true %}
<td><a style="cursor:pointer" title="Se Désinscrire"><i class="fa fa-sign-out fa-fw" onclick="removeLinkGroup({{ group.group.id }})"></i></a></td> {% if group.group.fgtemplate or group.group.fgall or group.group.owner==user %}
{% elseif (group.group.fgopen or group.group.fgcanshare) and group.group.owner!=app.user and not group.group.fgall and group.group.ldapfilter=="" and group.group.attributes =="" %} {% set canleave = false %}
<td><a style="cursor:pointer" title="Se Désinscrire"><i class="fa fa-sign-out fa-fw" onclick="removeLinkGroup({{ group.group.id }})"></i></a></td> {% elseif access!="config" %}
{% if not group.group.fgcanshare and not group.group.fgopen %}
{% set canleave = false %}
{% elseif group.group.fgcanshare and not app.session.get('permunsubscribe') and not group.group.fgopen %}
{% set canleave = false %}
{% endif %}
{% endif %}
{% if canleave %}
<td><a style="cursor:pointer" title="Se Désinscrire"><i class="fa fa-sign-out-alt fa-fw" onclick="removeLinkGroup({{ group.group.id }})"></i></a></td>
{% else %} {% else %}
<td></td> <td></td>
{% endif %} {% endif %}

View File

@ -42,10 +42,10 @@ td { font-size: 10px; }
{% if viewniveau02 %} {% if viewniveau02 %}
<th class="no-sort {% if fields["niveau02"] is defined and fields["niveau02"].perm==0 %}no-visible{% endif %}">{{ labelniveau02 }}</th> <th class="no-sort {% if fields["niveau02"] is defined and fields["niveau02"].perm==0 %}no-visible{% endif %}">{{ labelniveau02 }}</th>
{% endif %} {% endif %}
<th class="no-sort {% if fields["group"] is defined and fields["group"].perm==0 %}no-visible{% endif %}">Groupes</th> <th class="no-sort {% if fields["group"] is defined and fields["group"].perm==0 and is_granted('ROLE_USER') %}no-visible{% endif %}">Groupes</th>
<th class="{% if fields["job"] is defined and fields["job"].perm==0 %}no-visible{% endif %}">Métier</th> <th class="{% if fields["job"] is defined and fields["job"].perm==0 %}no-visible{% endif %}">Métier</th>
<th class="{% if fields["position"] is defined and fields["position"].perm==0 %}no-visible{% endif %}">Fonction</th> <th class="{% if fields["position"] is defined and fields["position"].perm==0 %}no-visible{% endif %}">Fonction</th>
<th class="{% if fields["visitedate"] is defined and fields["visitedate"].perm==0 %}no-visible{% endif %}">Visite</th> <th class="{% if fields["visitedate"] is defined and fields["visitedate"].perm==0 and (is_granted('ROLE_USER') or is_granted('ROLE_ANIM')) %}no-visible{% endif %}">Visite</th>
<th class="{% if fields["role"] is defined and fields["role"].perm==0 %}no-visible{% endif %}">Rôle</th> <th class="{% if fields["role"] is defined and fields["role"].perm==0 %}no-visible{% endif %}">Rôle</th>
</tr> </tr>
</thead> </thead>

View File

@ -11,16 +11,19 @@
<br>L'utilisateur souhaite masquer ses informations personnelles. <br>L'utilisateur souhaite masquer ses informations personnelles.
{% else %} {% else %}
{%if user.lastname %}<b>Nom</b> = {{ user.lastname }}<br>{%endif%} {%if user.lastname %}<b>Nom</b> = {{ user.lastname }}<br>{%endif%}
{%if user.firstname %}<b>Prénom</b> = {{ user.firstname }}<br>{%endif%} {%if user.firstname and not fields["firstname"]["perm"]==0 %}<b>{{fields["firstname"]["label"]}}</b> = {{ user.firstname }}<br>{%endif%}
{%if user.email %}<b>Email</b> = <a href='mailto:{{ user.email }}'>{{ user.email }}</a><br>{%endif%} {%if user.email %}<b>Email</b> = <a href='mailto:{{ user.email }}'>{{ user.email }}</a><br>{%endif%}
{%if user.telephonenumber %}<b>Téléphone</b> = {{ user.telephonenumber }}<br>{%endif%} {%if user.telephonenumber and not fields["telephonenumber"]["perm"]==0 %}<b>{{fields["telephonenumber"]["label"]}}</b> = {{ user.telephonenumber }}<br>{%endif%}
{%if user.niveau01 %}<b>{{ labelniveau01 }}</b> = {{ user.niveau01.label }}<br>{%endif%} {%if user.niveau01 %}<b>{{ labelniveau01 }}</b> = {{ user.niveau01.label }}<br>{%endif%}
{%if viewniveau02 and user.niveau02%}<b>{{ labelniveau02 }}</b> = {{ user.niveau02.label }}<br>{% endif %} {%if viewniveau02 and user.niveau02%}<b>{{ labelniveau02 }}</b> = {{ user.niveau02.label }}<br>{% endif %}
{%if user.job %}<b>Métier</b> = {{ user.job }}<br>{%endif%} {%if user.job and not fields["job"]["perm"]==0 %}<b>{{fields["position"]["job"]}}</b> = {{ user.job }}<br>{%endif%}
{%if user.position %}<b>Fonction</b> = {{ user.position }}<br>{%endif%} {%if user.position and not fields["position"]["perm"]==0 %}<b>{{fields["position"]["label"]}}</b> = {{ user.position }}<br>{%endif%}
{%if user.postaladress %}<b>Adresse</b> = {{ user.postaladress }}<br>{%endif%} {%if user.postaladress and not fields["postaladress"]["perm"]==0 %}<b>{{fields["postaladress"]["label"]}}</b> = {{ user.postaladress }}<br>{%endif%}
{%if user.visitedate %}<b>Date de dernière visite</b> = {{ user.visitedate|date('d/m/Y H:i') }}<br>{%endif%}
{%if user.visitecpt %}<b>Nombre de visites</b> = {{ user.visitecpt }}<br>{%endif%} {%if user.visitedate and (not fields["visitedate"]["perm"]==0 or (not is_granted('ROLE_USER') and not is_granted('ROLE_ANIM'))) %}<b>Date de dernière visite</b> = {{ user.visitedate|date('d/m/Y H:i') }}<br>{%endif%}
{%if user.visitecpt and (not fields["visitedate"]["perm"]==0 or (not is_granted('ROLE_USER') and not is_granted('ROLE_ANIM'))) %}<b>Nombre de visites</b> = {{ user.visitecpt }}<br>{%endif%}
{% if not fields["group"].perm==0 or not is_granted('ROLE_USER') %}
<br> <br>
{% set fgtitle=false %} {% set fgtitle=false %}
{% for usergroup in user.groups %} {% for usergroup in user.groups %}
@ -35,6 +38,7 @@
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% endif %} {% endif %}
{% endif %}
</div> </div>
{% endblock %} {% endblock %}

View File

@ -4,11 +4,11 @@
{{ form_start(form) }} {{ form_start(form) }}
<h1 class="page-header"> <h1 class="page-header">
{% if mode=="update" %} {% if mode=="update" %}
Modification Liste Blanche Modification Liste Blanche = {{ whitelist.label }}
{% elseif mode=="submit" %} {% elseif mode=="submit" %}
Création Liste Blanche Création Liste Blanche
{% elseif mode=="delete" %} {% elseif mode=="delete" %}
Suppression Liste Blanche Suppression Liste Blanche = {{ whitelist.label }}
{% endif %} {% endif %}
</h1> </h1>

View File

@ -84,6 +84,10 @@
{{ include('@CadolesCore/Include/menu.html.twig') }} {{ include('@CadolesCore/Include/menu.html.twig') }}
{% endif %} {% endif %}
</ul> </ul>
{% if app.user %}
<div id="navbar-nameuser"><a href="{{ path('cadoles_core_user') }}" title="Profil">{{ app.user.firstname }} {{ app.user.lastname }}</a></div>
{% endif %}
</div> </div>
{% endif %} {% endif %}
{% endif %} {% endif %}
@ -106,6 +110,9 @@
</div> </div>
<ul class="nav navbar-top-links navbar-right"> <ul class="nav navbar-top-links navbar-right">
{% if app.user %}
<a id="navbar-nameuser" href="{{ path('cadoles_core_user') }}" title="Profil">{{ app.user.firstname }} {{ app.user.lastname }}</a>
{% endif %}
{% if mustread is not defined %} {% if mustread is not defined %}
{{ include('@CadolesCore/Include/menu.html.twig') }} {{ include('@CadolesCore/Include/menu.html.twig') }}
{% endif %} {% endif %}

View File

@ -81,6 +81,7 @@ class samlUserCreatorService implements UserCreatorInterface
$user->setAvatar("noavatar.png"); $user->setAvatar("noavatar.png");
$user->setVisible(true); $user->setVisible(true);
$user->setAuthlevel("simple"); $user->setAuthlevel("simple");
$user->setBelongingpopulation("agent");
$user->setRole("ROLE_USER"); $user->setRole("ROLE_USER");
// Création // Création

View File

@ -145,7 +145,7 @@ class CronCommand extends ContainerAwareCommand
if($cron->getRepeatcall()>0) $cron->setRepeatexec($cron->getRepeatexec()+1); if($cron->getRepeatcall()>0) $cron->setRepeatexec($cron->getRepeatexec()+1);
// Envoyer un mail à l'ensemble des administrateurs // Envoyer un mail à l'ensemble des administrateurs
$this->sendMailerror(); $this->sendMailerror($cron);
} }
} }
@ -161,7 +161,7 @@ class CronCommand extends ContainerAwareCommand
} }
} }
private function sendMailerror() { private function sendMailerror($cron) {
$appname=""; $appname="";
$config = $this->em->getRepository("CadolesCoreBundle:Config")->findOneBy(["id"=>"appname"]); $config = $this->em->getRepository("CadolesCoreBundle:Config")->findOneBy(["id"=>"appname"]);
if($config) $appname = $config->getValue(); if($config) $appname = $config->getValue();
@ -184,8 +184,8 @@ class CronCommand extends ContainerAwareCommand
$mail_params=array( $mail_params=array(
"subject" => $appname." : ERREUR SUR EXECUTION JOB", "subject" => $appname." : ERREUR SUR EXECUTION JOB",
"body_html"=> "ATTENTION UN JOB EST EN ERREUR. MERCI DE VERIFIER LES LOGS.", "body_html"=> "ATTENTION UN JOB EST EN ERREUR. MERCI DE VERIFIER LES LOGS.<br>Command = ".$cron->getCommand()."<br>Description = ".$cron->getDescription(),
"body_text"=> "ATTENTION UN JOB EST EN ERREUR. MERCI DE VERIFIER LES LOGS." "body_text"=> "ATTENTION UN JOB EST EN ERREUR. MERCI DE VERIFIER LES LOGS.\nCommand = ".$cron->getCommand()."\nDescription = ".$cron->getDescription()
); );
$message = $this->container->get('cadoles.core.service.mail'); $message = $this->container->get('cadoles.core.service.mail');

View File

@ -39,6 +39,72 @@ use Cadoles\EdispatcherBundle\Entity\Datasource;
class ApiController extends Controller class ApiController extends Controller
{ {
public function applicationsAction() {
$itemcategorys = $this->getDoctrine()->getRepository('CadolesPortalBundle:Itemcategory')->findBy(
[], ['rowOrder' => 'asc']);
$groups = $this->getDoctrine()->getRepository('CadolesCoreBundle:Group')->findBy([], ['label' =>
'asc']);
foreach($itemcategorys as $itemcategory) {
$items = $itemcategory->getItems();
foreach($items as $item) {
$output = [];
$output["id"] = $item->getId();
$output["name"] = $item->getTitle();
$output["libelle"] = $item->getSubtitle();
$output["icon"] = $item->getIcon()?$item->getIcon()->getLabel():"default";
$output["url"] = $item->getUrl();
$output["profils"] = [];
foreach($item->getGroups() as $group) {
$output["profils"]["groupes"][] = "NINEGATE|".$group->getLabel();
}
foreach($item->getRoles() as $role) {
$output["profils"]["roles"][] = "NINEGATE|".$role;
}
if ($item->getSsoitem()!="") $output["profils"]["SSOITEM"] = $item->getSsoitem();
$reponse[$item->getTitle()] = $output;
}
}
return new Response(json_encode($reponse), Response::HTTP_OK);
}
public function checkuserAction() {
$em = $this->getDoctrine()->getManager();
$request = $this->container->get('request_stack')->getCurrentRequest();
$id = $request->query->get('id',false);
if ($id) {
$user=$em->getRepository('CadolesCoreBundle:User')->findOneBy(["username"=>$id]);
if (!$user) {
$output["error"]="id=".$id." : user not found";
return new Response(json_encode($output), 400);
}
$output["username"] = $user->getUsername();
$output["firstname"] = $user->getFirstname();
$output["lastname"] = $user->getLastname();
$output["email"] = $user->getEmail();
$output["role"] = $user->getRole();
foreach($user->getGroups() as $group) {
$output["groupes"][] = $group->getGroup()->getLabel();
}
} else {
$output["error"]="id needed";
return new Response(json_encode($output), 404);
}
return new Response(json_encode($output), Response::HTTP_OK);
}
public function testAction() { public function testAction() {
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
@ -134,7 +200,8 @@ class ApiController extends Controller
$bookmarks=null; $bookmarks=null;
$items=null; $items=null;
$itemcategorys=null; $itemcategorys=null;
$weburl="https://".$this->getParameter("weburl")."/".$this->getParameter("alias")."/"; # fixe #31884 "https://" => "//"
$weburl="//".$this->getParameter("weburl")."/".$this->getParameter("alias")."/";
$em->getRepository("CadolesPortalBundle:Item")->getUserItems($user,$bookmarks,$items,$itemcategorys,null,$ssoitems,3); $em->getRepository("CadolesPortalBundle:Item")->getUserItems($user,$bookmarks,$items,$itemcategorys,null,$ssoitems,3);
@ -285,7 +352,7 @@ class ApiController extends Controller
$ret_str=$ret_str."<categorie>"; $ret_str=$ret_str."<categorie>";
$ret_str=$ret_str."<nom>Mes Ressources</nom>"; $ret_str=$ret_str."<nom>Mes Ressources</nom>";
$ret_str=$ret_str."<indice>-1</indice>"; $ret_str=$ret_str."<indice>-1</indice>";
$ret_str=$ret_str."<icone>fa-user-circle</icone>"; $ret_str=$ret_str."<icone>fa-star</icone>";
$ret_str=$ret_str."</categorie>"; $ret_str=$ret_str."</categorie>";
} }
@ -376,7 +443,8 @@ EOL
return new Response(json_encode($output), 400); return new Response(json_encode($output), 400);
} }
$weburl="https://".$this->getParameter("weburl")."/".$this->getParameter("alias")."/"; # fixe #31884 "https://" => "//"
$weburl="//".$this->getParameter("weburl")."/".$this->getParameter("alias")."/";
$serializer = new Serializer(array(new DateTimeNormalizer())); $serializer = new Serializer(array(new DateTimeNormalizer()));
if ($action == null) { if ($action == null) {
@ -407,7 +475,6 @@ EOL
} }
$categorielabel=""; $categorielabel="";
if ($compteur==0) { if ($compteur==0) {
if ($alert->getAlertcategory()->getLabel()!="sans categorie")
if ($flag=="") { if ($flag=="") {
$categorielabel="<div style='float:left;width: 102.5%;padding: 4px;padding-left: 4px;color:white;background-color: #$bgcolor;position:relative;top: -16px;left: -11px;'><img src='$iconeurl' width='24em'>&nbsp;".$alert->getAlertcategory()->getLabel()."</div></br>"; $categorielabel="<div style='float:left;width: 102.5%;padding: 4px;padding-left: 4px;color:white;background-color: #$bgcolor;position:relative;top: -16px;left: -11px;'><img src='$iconeurl' width='24em'>&nbsp;".$alert->getAlertcategory()->getLabel()."</div></br>";
$tmp["message"] = "$categorielabel<h4>".$alert->getTitle()."</h4>".$alert->getContent(); $tmp["message"] = "$categorielabel<h4>".$alert->getTitle()."</h4>".$alert->getContent();
@ -415,7 +482,6 @@ EOL
} }
else else
{ {
if ($alert->getAlertcategory()->getLabel()!="sans categorie")
if ($flag=="") { if ($flag=="") {
$categorielabel="<img src='$iconeurl' width='16em' ><span style='font-weight: bold'> ".$alert->getAlertcategory()->getLabel()."</span> : "; $categorielabel="<img src='$iconeurl' width='16em' ><span style='font-weight: bold'> ".$alert->getAlertcategory()->getLabel()."</span> : ";
$tmp["message"] = $categorielabel.$alert->getTitle()."".$alert->getContent(); $tmp["message"] = $categorielabel.$alert->getTitle()."".$alert->getContent();
@ -608,10 +674,10 @@ $api('$id',data);";
} }
public function sessionAction($id="",$access="config") { public function sessionAction($id="",$access="config") {
// Masteridentity // mode_auth
$masteridentity=$this->getParameter("masteridentity"); $mode_auth=$this->getParameter("mode_auth");
if($masteridentity!="SSO") { if($mode_auth!="CAS") {
$output["error"]="Le bundle Edispatcher ne fonctionne qu'en mode MasterIdentity=SSO"; $output["error"]="Le bundle Edispatcher ne fonctionne qu'en mode mode_auth=CAS";
return new Response(json_encode($output), 400); return new Response(json_encode($output), 400);
} }
@ -664,6 +730,7 @@ $api('$id',data);";
$user->setAvatar("noavatar.png"); $user->setAvatar("noavatar.png");
$user->setVisible(true); $user->setVisible(true);
$user->setAuthlevel("simple"); $user->setAuthlevel("simple");
$user->setBelongingpopulation("agent");
$user->setRole("ROLE_USER"); $user->setRole("ROLE_USER");
if(in_array($username,$this->getParameter("ldap_usersadmin"))) if(in_array($username,$this->getParameter("ldap_usersadmin")))
@ -779,9 +846,9 @@ $api('$id',data);";
$debug = ob_get_clean(); $debug = ob_get_clean();
//$debug=json_encode($request->query); //$debug=json_encode($request->query);
//return new Response(json_encode($output), 400);
if(is_null($token)||is_null($libelle)||is_null($icon)||is_null($favurl)||is_null($nom)||is_null($categorie)||is_null($callback)||is_null($action)||is_null($callbackid)){ if(is_null($token)||is_null($libelle)||is_null($icon)||is_null($favurl)||is_null($nom)||is_null($categorie)||is_null($callback)||is_null($action)||is_null($callbackid)){
$output["error"]="missing parameter : token - id - libelle - icon - favurl - nom - categorie - callback - action - callbackid"; $output["error"]="missing parameter : token - id - libelle - icon - favurl - nom - categorie - callback - action - callbackid";
return new Response(json_encode($output), 400);
} }
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
@ -789,15 +856,13 @@ $api('$id',data);";
$datasource = $em->getRepository('CadolesEdispatcherBundle:Datasource')->findOneBy(["token"=>$token]); $datasource = $em->getRepository('CadolesEdispatcherBundle:Datasource')->findOneBy(["token"=>$token]);
if (!$datasource) { if (!$datasource) {
$output["error"]="no datasource session found for token = $token"; $output["error"]="no datasource session found for token = $token";
return new Response(json_encode($output), 400);
} }
$login = $datasource->getUsername(); $login = $datasource->getUsername();
// Récupérer l'utilisateur // Récupérer l'utilisateur
$user=$em->getRepository('CadolesCoreBundle:User')->findOneBy(["username"=>$login]); $user=$em->getRepository('CadolesCoreBundle:User')->findOneBy(["username"=>$login]);
if(!$user) { if(!$user) {
$output["error"]="user not exist"; $output["error"]="user does not exist";
return new Response(json_encode($output), 400);
} }
// chercher l'item // chercher l'item
@ -805,8 +870,7 @@ $api('$id',data);";
if(!$item) { if(!$item) {
$altitem=$em->getRepository('CadolesPortalBundle:Item')->findOneBy(["url"=>$favurl."?gestion_edispatcher=locale"]); $altitem=$em->getRepository('CadolesPortalBundle:Item')->findOneBy(["url"=>$favurl."?gestion_edispatcher=locale"]);
if(!$altitem) { if(!$altitem) {
$output["error"]="item with url=$favurl(?gestion_edispatcher=locale) not exist"; $output["error"]="item with url=$favurl(?gestion_edispatcher=locale) not found";
return new Response(json_encode($output), 400);
} else { } else {
$item = $altitem; $item = $altitem;
} }
@ -815,10 +879,15 @@ $api('$id',data);";
$bookmark = $em->getRepository('CadolesPortalBundle:Bookmark')->findOneBy(["user"=>$user,"item"=>$item]); $bookmark = $em->getRepository('CadolesPortalBundle:Bookmark')->findOneBy(["user"=>$user,"item"=>$item]);
$title=""; $title="";
$subtitle=""; $subtitle="";
$message="";
if (isset($output["error"])) {
$message=$output["error"];
$success=0;
} else {
$output=""; $output="";
if(!$bookmark) { if(!$bookmark) {
if ($action=="BOOKMARK_ADD") { if ($action=="BOOKMARK_ADD") {
$bookmark = new Bookmark(); $bookmark = new Bookmark();
$bookmark->setTitle($item->getTitle()); $bookmark->setTitle($item->getTitle());
$title=$item->getTitle(); $title=$item->getTitle();
@ -833,33 +902,29 @@ $api('$id',data);";
$em->persist($bookmark); $em->persist($bookmark);
$em->flush(); $em->flush();
$success=1; $success=1;
$output="<html><body> $message="$title : $subtitle a &eacute;t&eacute; ajout&eacute; &agrave; vos favoris";
<form id='form2submit' name='form2submit' method='POST' action='$callback'> } else {
<input name='action' id='action' type='hidden' value='$action' /> $success=0;
<input name='message' id='message' type='hidden' value='$title : $subtitle a &eacute;t&eacute; ajout&eacute; &agrave; vos favoris' /> $message="item introuvable en favori mais action=DEL (retrait)";
<input name='success' id='success' type='hidden' value='1' /> }
<input name='id' id='id' type='hidden' value='$id' />
<input name='callbackid' id='callbackid' type='hidden' value='$callbackid' />
</form>
<script>
document.form2submit.submit();
</script>
</body></html>
";
} else $success=0; // item pas en favori, mais ce n'est pas une demande d'ajout
} else { } else {
if ($action=="BOOKMARK_DEL") { if ($action=="BOOKMARK_DEL") {
$em->remove($bookmark); $em->remove($bookmark);
$em->flush(); $em->flush();
$success=1; $success=1;
$message="item supprimé de vos favoris";
} else {
$success=0;
$message="item deja en favori mais action=ADD (ajout)";
}
}
}
$output="<html><body> $output="<html><body>
<form id='form2submit' name='form2submit' method='POST' action='$callback'> <form id='form2submit' name='form2submit' method='POST' action='$callback'>
<input name='action' id='action' type='hidden' value='$action' /> <input name='action' id='action' type='hidden' value='$action' />
<input name='message' id='message' type='hidden' value='item supprimé de vos favoris' /> <input name='message' id='message' type='hidden' value='$message' />
<input name='success' id='success' type='hidden' value='1' /> <input name='success' id='success' type='hidden' value='$success' />
<input name='id' id='id' type='hidden' value='$id' /> <input name='id' id='id' type='hidden' value='$id' />
<input name='callbackid' id='callbackid' type='hidden' value='$callbackid' /> <input name='callbackid' id='callbackid' type='hidden' value='$callbackid' />
</form> </form>
@ -869,8 +934,7 @@ document.form2submit.submit();
</body></html> </body></html>
"; ";
} else $success=0; // item deja en favori mais demande d'ajout
}
$reponse = new Response(); $reponse = new Response();
$reponse->setContent($output); $reponse->setContent($output);

View File

@ -24,7 +24,7 @@ class Datasource
private $id; private $id;
/** /**
* @ORM\Column(type="string", length=50, unique=true) * @ORM\Column(type="string", length=128, unique=true)
*/ */
private $username; private $username;

View File

@ -12,6 +12,10 @@ div.header {
position: relative !important; position: relative !important;
} }
#navbar-nameuser a {
color: var(--main, #004d9a) !important;
}
div.header > a > span { div.header > a > span {
color: black !important; color: black !important;
} }

View File

@ -25,6 +25,14 @@ cadoles_edispatcher_api_public_hello:
path: /edispatcher/api/public/hello path: /edispatcher/api/public/hello
defaults: { _controller: CadolesEdispatcherBundle:Api:hello } defaults: { _controller: CadolesEdispatcherBundle:Api:hello }
cadoles_edispatcher_api_applications:
path: /edispatcher/api/applications
defaults: { _controller: CadolesEdispatcherBundle:Api:applications }
cadoles_edispatcher_api_checkuser:
path: /edispatcher/api/checkuser
defaults: { _controller: CadolesEdispatcherBundle:Api:checkuser }
cadoles_edispatcher_api_apps_all: cadoles_edispatcher_api_apps_all:
path: /edispatcher/api/apps/all path: /edispatcher/api/apps/all
defaults: { _controller: CadolesEdispatcherBundle:Api:hello } defaults: { _controller: CadolesEdispatcherBundle:Api:hello }

Some files were not shown because too many files have changed in this diff Show More