324 Commits

Author SHA1 Message Date
461324fe3f ajout error doublon mail 2022-12-09 11:50:38 +01:00
594122ed07 ajout error doublon mail 2022-12-09 09:18:52 +01:00
c5333887cc ajout info dnma 2022-12-08 10:12:54 +01:00
629d77175a evolution items 2022-12-06 13:09:24 +01:00
1a54b9a3f9 evolution items 2022-12-05 12:05:16 +01:00
d0d8183f7a ne plus concidèrer les profils scribe comme des groupes de travail 2022-07-06 11:11:59 +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
df8bcfc1a1 ajout de l'item cdt et sa synchronisation poshprofil 2022-03-03 11:51:43 +01:00
2b86aa4e2f appel sonde sur click 2022-02-18 09:57:20 +01:00
57f96132f4 mise en place jquerydate sur le formulaire des annonces (ref #33524) 2022-02-04 13:14:52 +01:00
aac017c263 hauteur auto sur les images insérées dans les alertes (ref #33523) 2022-02-04 10:55:33 +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
d0d933f28e dicos ajout service wssninegate 2021-12-08 11:16:56 +01:00
1249b7be21 ajout variable activer_revprox si non existante 2021-12-08 09:23:12 +01:00
6081e6a692 passer par un alias pour les websockets 2021-12-07 16:47:22 +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
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
eedaa86dcf rapatrier les variables eoledb dans la famille eoledb (ref #33188) 2021-10-07 10:52:59 +02:00
1d448e70c7 autocreate user (fixes #33139) 2021-09-14 11:40:18 +02:00
63c710c4fd correctif si groupe shared sans page 2021-08-27 10:02:15 +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
ed75b5f5c3 fixes #31884 , faire en sortes sur les urls soient compatibles https et http 2021-07-12 18:10:11 +04: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
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
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
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
5271f992a7 replacer les modifs écrasées 2021-06-17 15:01:57 +02:00
e3188b1732 correctif style 2021-06-15 10:14:47 +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
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
8ed97d8d96 fixes #32513 mise a jour entité datasource username.length=128 2021-05-17 10:16:29 +04:00
2b4d048f9d enlarge your attributes 2021-05-06 13:41:33 +02:00
20c131db2e desactivation possible des notifications de groupe de travail 2021-05-04 11:03:11 +02:00
72c5e49cf6 mise à plat valeur obligatoire sur fiche user 2021-04-27 10:09:19 +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
33841459d9 bug ajout fav 2021-04-21 09:14:21 +02:00
150e624fca bug déplacement fichiers 2021-04-08 10:28:24 +02:00
f621ebea82 resolution bug 2021-04-02 14:36:13 +02:00
ccdacac7c5 erreur javascript sur function replaceall 2021-04-02 11:09:18 +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
1209c90388 modification infobulle (ref #240) 2021-03-29 16:07:43 +02:00
d65a003422 maj label config 2021-03-29 09:19:48 +02:00
04272afa3d partage d'event uniquement sur les groupes gestionnaire 2021-03-26 10:38:03 +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
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
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
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
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
2acf186c9b correction sur mes ressources 2021-03-09 10:19:08 +01:00
6a5a50a2f8 correctif item sso optionnel 2021-03-09 09:59:37 +01:00
4a72cf0d6c [theme Metice] prise en compte bandeau escamotable #31431 2021-03-09 10:12:14 +04:00
094ef42e9b enlever msg debug 2021-03-08 16:00:05 +01:00
2a4d246a00 pb init rest ssoitems 2021-03-08 15:43:59 +01:00
4a7c8258b7 pagebookmark 2021-03-08 15:27:33 +01:00
eacc7dea66 pb fgheader dans les themes 2021-03-08 10:49:02 +01:00
a91f357d7c scinder dans le bureau les favoris et les ressources (fixes #30779) 2021-03-05 16:52:49 +01:00
fdc9772c54 mise en place d'un page d'accueil via préférence utilisateur (fixes #31038) 2021-03-05 16:23:12 +01:00
3c90728464 ajout de l'option forcereload sur les pages de type url (fixes #31676) 2021-03-05 13:50:07 +01:00
fc094ab57e groupe SSO de type DN 2021-03-04 17:02:39 +01:00
c7c10ded30 gestion du header escamotable en préférence utilisateur (fixes #31431) 2021-03-04 13:46:32 +01:00
3c47ed1d40 supprimer des bookmark les items qui ne sont plus lié au profil (fixes #31269) 2021-03-03 18:04:00 +01:00
55e34b7526 mise à niveau appkernel par rapport à composer.json (fixes #31626) 2021-03-03 17:40:02 +01:00
300b204088 ajout du meta dans le header de ninegate (fixes #31783) 2021-03-03 16:44:46 +01:00
97cf0a727b pouvoir forcer l'utilisation d'un theme (fixes #31090) 2021-03-03 16:34:28 +01:00
563cc48200 widget dokuwiki 2021-02-24 16:59:53 +01:00
ef0ba6ef25 prise en compte attribut member pour AD 2021-02-24 10:54:13 +01:00
d1a3187cba gestion attribut sAMAccountType AD 2021-02-23 16:34:27 +01:00
8574a7e35a compilation 2021-02-23 13:45:37 +01:00
d4c2274d34 gestion exception caldav et acces dans le reseau interne 2021-02-22 12:00:11 +01:00
cd9cff085c suppression blocage sur warning phpcas client 2021-02-19 13:00:37 +01:00
c8ad97f4ce gestion sondednma alone 2021-02-15 16:58:16 +01:00
4b038e8c56 gestion du menu grouppage 2021-02-15 11:38:28 +01:00
3f1eab00ad gestion du menu grouppage 2021-02-15 11:29:02 +01:00
1b36560d80 passage à eole 2.8 2021-02-09 16:14:47 +01:00
b151f0e889 mise à plat composer.json 2021-02-09 14:38:05 +01:00
f97b38eca7 mise à plat composer.json qqsoit la version de php 2021-02-09 13:47:27 +01:00
7dfa172682 fix regression entre #105 et #106 rajout template 'orm: CadolesEdispatcherBundle: ~' 2021-02-09 07:42:17 +04:00
e1152ab89b mise en cohérence theme métice 2021-02-08 14:47:45 +04:00
d878f3ca9f variable --themespath plus générique pour viser un fichier du dossier theme de son choix 2021-02-05 17:16:49 +04:00
3e1145da88 Merge branch 'master' of https://dev-eole.ac-dijon.fr/git/ninegate 2021-02-05 10:21:16 +04:00
325de094d0 ajout d'une variable --path : chemin d'acces au theme 2021-02-05 10:20:14 +04:00
e1ae00528d correction ano template si masteridentity à sso 2021-02-03 10:47:56 +01:00
fda8577ac7 update theme Métice ac-reunion 2021-02-02 11:12:40 +04:00
2294b0ed68 resize frame sur mini menu (fixes #31608) 2021-02-01 11:32:27 +01:00
5ef2a98b51 gestion de la deconnexion ldap 2021-02-01 10:58:48 +01:00
70d1ccd220 ignorer l'usage de la sonde dnma sur les widgets 2021-01-28 10:27:50 +01:00
4fa022c550 deco / reco LDAP 2021-01-27 15:39:12 +01:00
5dedf3b183 LDAP_OPT_REFERRALS 2021-01-27 10:45:11 +01:00
e82d932cfb profilePath AD 2021-01-25 15:02:11 +01:00
92477123b7 fixes #31442 access control allow origin /edispatcher/api/public/hello 2021-01-25 08:41:25 +04:00
f77be05751 gestion des no email 2021-01-21 17:24:21 +01:00
69af156662 gestion des no email 2021-01-21 16:00:15 +01:00
b8ee13c49b controle cohérance pwd 2021-01-21 15:22:59 +01:00
7c26cdb57f reset password possible si maitre sql sans registration 2021-01-21 11:43:39 +01:00
f75058bc30 adhomeDirectory 2021-01-21 11:35:12 +01:00
ceeac44ede preserver le password si modification direct dans ldap 2021-01-20 17:00:01 +01:00
f9a038b1b7 creation item nineschool ninesurvey piwigo 2021-01-20 16:29:48 +01:00
9e1d4f08f0 ajout icon piwigo et ninesurvey 2021-01-13 14:25:15 +01:00
d6bbf7bf9a ano sur synchro mail groupe dans openldap 2021-01-13 10:34:07 +01:00
a410415b97 cadolesAD 2021-01-12 13:52:11 +01:00
48fcfb9919 cadolesAD 2021-01-12 12:03:02 +01:00
eeca16fda9 ninegate seth-aaf et seth-edu 2021-01-08 15:48:08 +01:00
0bc8bf71ce ninegate seth-aaf et seth-edu 2021-01-08 14:53:43 +01:00
a9c5b925fd utilisation de getvar pour récupere eolesso_cas_folder (ref #31446) 2021-01-05 10:05:03 +01:00
9ef880a881 ajout bundle edispatcher 2020-12-16 11:54:51 +01:00
81520d0d7d fix role_admin route edispatcher/test 2020-12-16 13:33:23 +04:00
f974047a61 correctif ajouts acreunion : edispatcher bundle, theme metice 2020-12-16 13:23:15 +04:00
277f777744 ajout bundle edispatcher 2020-12-15 16:36:47 +01:00
fb98a703c0 mise en place de ssoitems (fixes ##31089) 2020-11-19 15:08:51 +01:00
e115929020 ajout des groupes en tant que nom de class body (fixes #31091) 2020-11-19 11:15:33 +01:00
b7b9ae6ec1 accès à l'annuaire via configuration (fixes #31092) 2020-11-19 11:01:43 +01:00
9b877c2de0 possibilité de profiler les alertes par items (fixes #31120) 2020-11-19 10:09:37 +01:00
f5633610a9 ajout font et variable css 2020-11-06 14:03:52 +01:00
6d00b6c547 erreur sur filtre par categorie d'items 2020-10-27 08:59:20 +01:00
0a15805d4b refonte sonde 2020-10-23 14:19:50 +02:00
a0002bcd90 parameter fgdebug 2020-10-23 13:37:58 +02:00
33c61bb618 refonte sonde 2020-10-23 13:27:07 +02:00
463cf49fe0 correctif sur mise à jour de niveau sso 2020-10-21 15:26:12 +02:00
61abb269e4 mise à niveau log 2020-10-19 10:44:16 +02:00
40ab9ad001 mise à niveau log 2020-10-19 10:27:19 +02:00
61702791b9 reduire les logs 2020-10-16 11:12:29 +02:00
3a1da0f3fd modification label bouton 2020-10-14 09:39:14 +02:00
8b87c6927a déplacement fichier dans widget fichier 2020-10-13 15:46:27 +02:00
0dc13592f9 petits correctifs 2020-10-13 11:10:12 +02:00
18963d115b feature profil de modération 2020-10-09 15:43:50 +02:00
bd547d9a21 petit ajustement look sur pagewidget look list 2020-10-07 11:09:27 +02:00
b648fecb32 vue pagewidget list 2020-10-06 17:06:26 +02:00
b6fc868652 look du widget info groupe/page (ref #210) 2020-10-06 09:57:24 +02:00
397f0242f6 order by sur select niveau01 (ref #211) 2020-10-06 09:50:56 +02:00
1ab804ee9b ajout icone page dans liste des pages 2020-10-01 16:29:40 +02:00
8cc5f686ab modificatio rest pour afficher attribut item d'un bookmark 2020-10-01 16:04:50 +02:00
8414bd58b2 ajout attribut sso rne 2020-10-01 15:45:54 +02:00
06c3e0559b ajout calendars dans api rest 2020-09-30 17:02:14 +02:00
6f77194ae5 auto create groupe sso 2020-09-30 14:56:00 +02:00
923c6c0b42 resolution attribut sso en tableau 2020-09-30 13:55:31 +02:00
21295df381 mise en place d'une auto creation des groupes sur le modele LDAP-Open 2020-09-29 17:33:21 +02:00
93c6a9a1e1 resolution activer_admin_passfile 2020-09-28 17:29:04 +02:00
0129fc59ad gerer cadolesldap installé sur meme serveur (ref #214) 2020-09-28 16:39:42 +02:00
68dd1874d0 api & scribetoninegate 2020-09-28 13:51:25 +02:00
87604176b2 fonticon possible sur les pages 2020-09-25 13:54:49 +02:00
0c10081907 evolution rest api 2020-09-24 16:18:15 +02:00
68239f469d style widget frame 2020-09-23 15:26:09 +02:00
0d06263227 preference user widgetshowhide (#203) 2020-09-23 14:42:49 +02:00
e029ad79a6 widget only preference 2020-09-22 11:33:31 +02:00
8f2e412b60 prefence user 2020-09-22 10:15:57 +02:00
ea2af3b861 trie sur widget fichier 2020-09-21 16:47:57 +02:00
9947b7db23 2admin 2020-09-21 10:54:03 +02:00
9a4760601f correction orthographe 2020-09-18 15:22:47 +02:00
00aa5c05db gestion repertoire only 2020-09-18 15:14:07 +02:00
57ff4d645c gestion repertoire only 2020-09-18 15:09:53 +02:00
ed1b32e481 gestion repertoire only 2020-09-18 15:09:03 +02:00
e92e972c5a motivation sur la fiche user + report motivation/autres de inscription à user (ref #177) 2020-09-17 15:30:01 +02:00
6c00001075 purge conteneur file projecttask et calendarevent 2020-09-17 14:57:02 +02:00
5941260165 ajout PJ et editeur riche sur evenement calendrier (ref #170) 2020-09-17 14:51:15 +02:00
2da3128312 repondre pas mail à un message chat (ref #179) 2020-09-16 11:16:35 +02:00
cb5b98237d resolution lenteur sur submit/update blogarticle (ref #180) 2020-09-16 09:58:57 +02:00
936b6810b0 explorer de fichier 2020-09-16 09:46:48 +02:00
2aff9d641b explorer de fichier 2020-09-16 09:33:46 +02:00
8f69cb0bc9 explorer de fichier 2020-09-15 16:44:59 +02:00
4f9ce5fba7 debut explore de fichier 2020-09-11 17:02:46 +02:00
16d24deab1 cacher les colonnes visite et manager du tableau des users non affectés au groupe (ref #202) 2020-09-11 13:44:55 +02:00
f21fb579c4 correction orthographe (ref #200) 2020-09-11 12:47:59 +02:00
7be2f8e12d passage à 12h de durée de validité du jeton d'inscription (ref #208) 2020-09-11 12:36:50 +02:00
65d9a3da5d hauteur maxi pour le menu des groupes (ref #212) 2020-09-11 11:42:26 +02:00
88287f7cfe ajout theme acpoitiers 2020-09-04 16:17:52 +02:00
688bd52ff2 ajout widget urlfixe 2020-09-04 10:09:30 +02:00
c05d21545d ajout widget roundcube (ref #72) 2020-09-03 16:19:12 +02:00
7d10bba1ee mise à jour style 2020-09-03 11:59:15 +02:00
2751bcea77 couleur principale sur bookmark sans couleur (ref #199) 2020-09-02 17:17:56 +02:00
1de042ed77 ajout item administration EOLE (ref #198) 2020-09-02 16:22:07 +02:00
cbbd67c6ea gérer exception sur lecture de rss (ref #197) 2020-09-02 11:44:22 +02:00
ececb38afe demander la motiviation uniquement si registration byadmin et non whitelist 2020-07-27 09:54:26 +02:00
b7d157cf1b configuration pour envolemigration 2020-07-23 10:07:16 +02:00
b6a33c03ec modification theme transnum 2020-07-22 09:05:07 +02:00
57a5517e19 system de tag sur les icones (ref #190) 2020-07-17 16:06:18 +02:00
6db9222fc4 phrase indicateur sur la création des icones (ref #192) 2020-07-17 12:14:48 +02:00
de803ac336 pouvoir gérer les icones directement via la selection des icones (ref #188) 2020-07-17 12:02:25 +02:00
bdddfc925f gestion des annonces masquables (ref #191) 2020-07-17 11:12:01 +02:00
01fd5f297f widget chat non accessible sur les pages perso (ref #193) 2020-07-15 16:54:28 +02:00
2119a68368 modification icone modifier page/blog/calendar/project en engrenage & acces direct depuis les listes (ref #185 #184) 2020-07-15 16:50:41 +02:00
0602505f63 creation categorie alerte par défaut (ref #189) 2020-07-15 15:36:18 +02:00
c4815ac935 orthographe icône (ref #187) 2020-07-15 15:25:24 +02:00
514fe6b82c orthographe connection en connexion (ref #186) 2020-07-15 15:15:38 +02:00
2c1078d19e purge des groupes inexistant dans l'annuaire 2020-07-15 15:08:42 +02:00
fb879143d5 parametrer la synchro scribe (ref #183) 2020-07-15 14:38:16 +02:00
177f366a83 pb sur modification du mail sur synchronisation ldap (ref #182) 2020-07-15 14:07:39 +02:00
39c469fd45 afficher tt item si vu item only 2020-07-10 12:21:42 +02:00
4a941665dc suppression du = dans les noms de groupe scribe 2020-07-10 09:31:00 +02:00
8dec77a946 post api à la place de get api 2020-07-07 09:23:24 +02:00
025009e76c tout les groups sur rest user 2020-07-06 11:59:17 +02:00
e59b85701c rest api 2020-07-06 11:19:44 +02:00
c856315a8d rest users & groups 2020-07-03 16:10:28 +02:00
f4325bfb4f rest users & groups 2020-07-03 10:30:41 +02:00
151be1a66e event shared 2020-06-26 15:45:48 +02:00
2a8c9287b1 erreur sur param synchro envole 2020-06-26 08:42:33 +02:00
328189222a gestion nineboard 2020-06-25 13:40:17 +02:00
c1fed2d994 ajout des event shared dans le widget calendar (ref #168) 2020-06-25 11:37:03 +02:00
88a4e9882b binary 2020-06-24 13:45:36 +02:00
baf09e9e82 rename dico postservice 2020-06-24 13:39:39 +02:00
bd039015e1 rename dicos 2020-06-24 12:12:29 +02:00
0699403a55 rename dicos 2020-06-24 12:04:18 +02:00
4dac861b9b ajout item eoe eop nineboard 2020-06-24 11:40:43 +02:00
02aa36a194 ajout icon eoe eop 2020-06-24 10:30:12 +02:00
d90d3039a2 pb reconf si non only 2020-06-24 09:48:57 +02:00
8f85f5eb5e retour sur page groupe blog et calendrier (ref #168) 2020-06-23 14:53:16 +02:00
be3cfa2814 correction mineure 2020-06-23 12:21:45 +02:00
92a0d91a1d personnalisation par niveau01 (ref #162) 2020-06-23 10:44:22 +02:00
7444af740e griser menu navigation projet / blog / calendrier (ref #152) 2020-06-22 16:15:56 +02:00
4759940401 suppresion autocomplete sur zone login / password du user (ref #169) 2020-06-22 16:03:37 +02:00
0c0ee8eb2e correction ortho 2020-06-22 15:55:43 +02:00
0de395baee notification et permission chg proprio groupe (ref #146) 2020-06-22 13:21:47 +02:00
977705c5fe ordre des labels d'explication login (ref #132) 2020-06-22 10:45:08 +02:00
47d603b0d1 label title (ref #148) 2020-06-22 10:40:06 +02:00
9242586254 suppresion du label project (ref #128) 2020-06-22 10:31:33 +02:00
20343637b9 resolution project (ref #152) 2020-06-22 10:25:23 +02:00
8d66c9a925 resolution problème de couleur du switch (ref #155 #154) 2020-06-22 10:01:02 +02:00
f0394428ef postservice si activer 2020-06-22 09:48:38 +02:00
000f0114c2 init datevisite 2020-06-18 11:55:37 +02:00
eedd7a786f supression icon si fichier non existant 2020-06-18 10:56:13 +02:00
d916b59f1c auto connexion sur onlyoffice (ref #89) 2020-06-18 10:41:48 +02:00
fcbf0ab4ad controle d'unicité de rattachement à un groupe (ref #160) 2020-06-18 09:57:05 +02:00
9f6024049b réponse sur commentaire d'article de blog (ref #157) 2020-06-17 11:44:47 +02:00
c0517eb238 envoyer un mail en cas d'erreur sur job cron (ref #159) 2020-06-16 11:10:51 +02:00
3c08e2ef8f ajout d'un job de dump bdd (ref #158) 2020-06-16 10:06:13 +02:00
dfe6a90673 indicateurs (ref #156) 2020-06-16 09:09:59 +02:00
a379e52dea gestion de réponse à msg de chat (ref #8) 2020-06-12 14:02:19 +02:00
b49c25e07e System de mailing (ref #144) 2020-06-11 14:12:32 +02:00
a6e5cfbb81 possibilité de masquer les messages du chat (ref #155) 2020-06-09 17:31:03 +02:00
c49461aa58 possibilité de masquer les messages du chat (ref #155) 2020-06-09 17:28:47 +02:00
2a1179ae9a datatable sur tableau des groupes rattachables à un user (ref #142) 2020-06-09 15:29:47 +02:00
6baed4dea7 motivation obligatoire si mail non présent dans la liste blanche (ref #145) 2020-06-09 15:16:38 +02:00
f20eff9b05 gestion du niveau01 autre (ref #141) 2020-06-09 14:18:17 +02:00
e85f74cda5 compteur de visite group (ref #151) 2020-06-09 11:24:07 +02:00
e18790790b ajout compteur visite utilisateur (ref #150) 2020-06-09 09:53:25 +02:00
dc13f8a388 ajout de tooltip sur l'ensemble des boutons widgets (ref #148) 2020-06-08 16:07:39 +02:00
28f84e2460 notification ajout suppression widget (ref #131) 2020-06-08 15:21:31 +02:00
354d8df055 optimisation sur selection du projet associé à une tache (ref #138) 2020-06-08 12:13:43 +02:00
6fb6fe6ab1 optimisation sur selection du projet associé à une tache (ref #138) 2020-06-08 11:43:17 +02:00
eac7f63094 navigation projet pour retour vers le groupe (ref #152) 2020-06-08 10:55:27 +02:00
a2c17379e4 date de fin sous forme calendrier (ref #153) 2020-06-08 09:52:16 +02:00
7eae2ee972 formattage de la légende du login correcte (ref #132) 2020-06-08 09:16:26 +02:00
920e6d66d3 permettre au propriétaire du groupe de changer le propriétaire (ref #146) 2020-06-08 09:07:16 +02:00
228993dbd6 filtre de recherche sur le nom du propriétaire (ref #147) 2020-06-08 09:01:52 +02:00
1fc6d05bf5 commit compilation 2020-05-27 15:37:03 +02:00
c190db2400 executer les commandes en quiet (fixes #30105) 2020-05-27 15:31:43 +02:00
90cd03196d resolution add fav si non permis 2020-05-15 16:01:32 +02:00
866b7ada81 resolution de la creation des groupe en mode master LDAP (fixes #74) 2020-05-15 15:49:22 +02:00
9c27cd82f9 svg 2020-04-23 14:43:03 +02:00
526f9eec3d debut script install hors eole 2020-04-23 14:42:45 +02:00
a40e46113f svg 2020-04-23 14:35:50 +02:00
23724edfdb ignore template.yml 2020-04-23 14:34:46 +02:00
a7f181c2af suppression template des sources 2020-04-23 14:05:41 +02:00
7e37599fb6 maj 2020-04-23 08:47:16 +02:00
9b5aae23b2 debut d'un system d'execution de command à la volet 2020-04-22 11:33:42 +02:00
9c0b1b3280 pb de template en mode scribe 2020-04-21 12:21:57 +02:00
7184cfdbc6 correction sur suppression d'inscription (ref #113) 2020-04-20 16:04:18 +02:00
eea53bdeb4 resolution reload form (ref #107) 2020-04-20 13:57:34 +02:00
4ea1540233 resolution tableau user qui déborde (ref #117) 2020-04-20 12:10:26 +02:00
eaab6fcb14 terme enregistrer plutot que sauvegarder (ref #113) 2020-04-20 11:25:58 +02:00
e662463969 url sur notif message via redirect (ref #19) 2020-04-20 09:34:06 +02:00
57df7bddbe retour sur page après creation de groupe (ref #126) 2020-04-20 09:09:21 +02:00
400 changed files with 101533 additions and 6597 deletions

1
debian/compat vendored
View File

@ -1 +0,0 @@
7

24
debian/control vendored
View File

@ -1,24 +0,0 @@
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
View File

@ -1,44 +0,0 @@
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'.

View File

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

3
debian/gbp.conf vendored
View File

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

View File

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

View File

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

8
debian/rules vendored
View File

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

View File

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

View File

@ -2,6 +2,7 @@
<creole>
<files>
<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>
<containers>
@ -9,29 +10,42 @@
<package>ninegate-apps</package>
<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/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/src/Cadoles/CoreBundle/Command/data/core-init-01.sql" source="ninegate-init-01.sql" rm="True"/>
<file filelist='ninegate' name='/etc/cron.d/ninegate' source='ninegate.cron' rm='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_access service='ninegate_websocket'>
<port port_type="SymLinkOption">ninegate_websocket_portexterne</port>
</service_access>
<service servicelist="ninegate">wssninegate</service>
</container>
</containers>
<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='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_niveau01branche' description="Nom de la branche de Niveau 01" hidden='True' exists='False'><value>niveau01</value></variable>
<variable type='string' name='cadolesldap_niveau02branche' description="Nom de la branche de Niveau 02" hidden='True' exists='False'><value>niveau02</value></variable>
<variable type='string' name='cadolesldap_niveau01name' description="Nom de la première orgranisation de Niveau 01" hidden='True' exists='False'/>
<variable type='string' name='cadolesldap_niveau01siren' description="SIREN de la première orgranisation de Niveau 01" hidden='True' exists='False'/>
<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_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_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_eoe" type="oui/non" description="Activer EOE" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_eop" type="oui/non" description="Activer EOP" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_etherhome" type="oui/non" description="Activer Etherhome" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_fluxbb" type="oui/non" description="Activer Fluxbb" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_genconfig" type="oui/non" description="Activer Genconfig" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_gepi" type="oui/non" description="Activer GEPI" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_glpi" type="oui/non" description="Activer GLPI" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_grr" type="oui/non" description="Activer Grr" hidden='True' exists='False'><value>non</value></variable>
@ -40,12 +54,17 @@
<variable name="activer_mindmaps" type="oui/non" description="Activer Mindmaps" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_moodle" type="oui/non" description="Activer Moodle" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_nextcloud" type="oui/non" description="Activer Nextcloud" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_nineboard" type="oui/non" description="Activer Nineboard" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_nineschool" type="oui/non" description="Activer Nineschool" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_ninesurvey" type="oui/non" description="Activer Ninesurvey" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_opensondage" type="oui/non" description="Activer Opensondage" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_phpldapadmin" type="oui/non" description="Activer phpLdapAdmin" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_piwigo" type="oui/non" description="Activer Piwigo" hidden='True' exists='False'><value>non</value></variable>
<variable name="activer_piwik" type="oui/non" description="Activer Piwik" 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_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>
@ -59,39 +78,56 @@
<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='string' name='ninegate_masteridentity' description="Maître de l'Identité" mandatory='True'><value>LDAP</value></variable>
<variable type='string' name='ninegate_mode_auth' description="Mode Authentification" mandatory='True'><value>CAS</value></variable>
<variable type='string' name='ninegate_api_key' description="Clé d'accès API" mandatory='True'><value>APIKeyNinegate</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_mode_auth' description="Mode Authentification" mandatory='True'><value>CAS</value></variable>
<variable type='string' name='ninegate_api_key' description="Clé d'accès API" mandatory='True'><value>APIKeyNinegate</value></variable>
<variable type='oui/non' name='ninegate_syncldap' description="Synchroniser Ninegate vers votre annuaire"><value>non</value></variable>
<variable type='string' name='ninegate_ldaptemplate' description="Modèle d'annuaire"><value>scribe</value></variable>
<variable type='oui/non' name='ninegate_ssosynchrogroup' description="Générer automatiquement les groupes en fonction d'un attribut SSO"><value>oui</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='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='string' name='ninegate_pwdadmin' description="Mot de passe du compte admin durant l'instance (idem valeur Cadoles ldap)" mandatory='True'><value>cadoles</value></variable>
<variable type='string' name='ninegate_organization' description="Nom de l'organisation principale (idem valeur Cadoles ldap)" mandatory='True'><value>cadoles</value></variable>
<variable type='string' name='ninegate_niveau01branche' description="Nom de la branche de Niveau 01 (idem valeur Cadoles ldap)" mandatory='True'><value>niveau01</value></variable>
<variable type='string' name='ninegate_niveau02branche' description="Nom de la branche de Niveau 02 (idem valeur Cadoles ldap)" mandatory='True'><value>niveau02</value></variable>
<variable type='string' name='ninegate_niveau01name' description="Nom de la première orgranisation de Niveau 01 (idem valeur Cadoles ldap)" mandatory='True'><value>cadoles</value></variable>
<variable type='string' name='ninegate_niveau01siren' description="SIREN de la première orgranisation de Niveau 01 (idem valeur Cadoles ldap)" mandatory='True'><value>cadoles</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='oui/non' name='ninegate_scribegroup' description="Considérer les classes/options comme des groupes de travail"><value>oui</value></variable>
<variable type='oui/non' name='ninegate_scribemaster' description="Placer les professeurs comme manager des groupes classes/options"><value>oui</value></variable>
<variable type='string' name='ninegate_openldapreqniveau01' description="Lors de l'initalisation de Ninegate requete LDAP utilisateur de votre premier Niveau01" mandatory='True'><value>(uid=*)</value></variable>
<variable type='oui/non' name='ninegate_openldapsynchrogroup' description="Générer automatiquement les groupes en fonction de votre annuaire"><value>oui</value></variable>
<variable type='string' name='ninegate_openldapreqgroup' description="Générer automatiquement les groupes en fonction de votre annuaire" mandatory='True'><value>(objectClass=posixGroup)</value></variable>
<variable type='string' name='ninegate_openldapsubbranchgroup' description="Rechercher les groupes dans la sous-branche" mandatory='False' />
<variable type='string' name='ninegate_openldapsubbranchuser' description="Rechercher les utilisateurs dans la sous-branche" mandatory='False' />
<variable type='string' name='ninegate_niveau01label' description="Label singulier du niveau 01 d'organisation" mandatory='True'><value>Ecole</value></variable>
<variable type='string' name='ninegate_niveau01labels' description="Label pluriel du niveau 01 d'organisation" mandatory='True'><value>Ecoles</value></variable>
<variable type='string' name='ninegate_niveau01icon' description="Icon du niveau 01 d'organisation" mandatory='True'><value>fa-building</value></variable>
<variable type='string' name='ninegate_ldaptype' description="Annuaire Cadoles LDAP ou AD " mandatory='True'><value>LDAP</value></variable>
<variable type='string' name='ninegate_addomainehome' description="Nom de votre domaine AD Home" mandatory='True'><value></value></variable>
<variable type='string' name='ninegate_addomaineprofil' description="Nom de votre domaine AD Profil" mandatory='True'><value></value></variable>
<variable type='string' name='ninegate_pwdadmin' description="Mot de passe du compte admin durant l'instance (idem valeur Cadoles ldap)" mandatory='True'><value></value></variable>
<variable type='string' name='ninegate_organization' description="Nom de l'organisation principale (idem valeur Cadoles ldap)" mandatory='True'><value></value></variable>
<variable type='string' name='ninegate_niveau01branche' description="Nom de la branche de Niveau 01 (idem valeur Cadoles ldap)" mandatory='True'><value>niveau01</value></variable>
<variable type='string' name='ninegate_niveau02branche' description="Nom de la branche de Niveau 02 (idem valeur Cadoles ldap)" mandatory='True'><value>niveau02</value></variable>
<variable type='string' name='ninegate_niveau01name' description="Nom de la première orgranisation de Niveau 01 (idem valeur Cadoles ldap)" mandatory='True'><value></value></variable>
<variable type='string' name='ninegate_niveau01siren' description="SIREN de la première orgranisation de Niveau 01 (idem valeur Cadoles ldap)"><value></value></variable>
<variable type='string' name='ninegate_niveau01label' description="Label singulier du niveau 01 d'organisation" mandatory='True'><value>Ecole</value></variable>
<variable type='string' name='ninegate_niveau01labels' description="Label pluriel du niveau 01 d'organisation" mandatory='True'><value>Ecoles</value></variable>
<variable type='string' name='ninegate_niveau01icon' description="Icon du niveau 01 d'organisation" mandatory='True'><value>fa-building</value></variable>
<variable type='oui/non' name='ninegate_niveau02view' description="Gérer un niveau 02 d'organisation"><value>non</value></variable>
<variable type='string' name='ninegate_niveau02label' description="Label pluriel du niveau 02 d'organisation" mandatory='True'><value>Service</value></variable>
<variable type='string' name='ninegate_niveau02labels' description="Label pluriel du niveau 02 d'organisation" mandatory='True'><value>Services</value></variable>
<variable type='string' name='ninegate_niveau02icon' description="Icon du niveau 02 d'organisation" mandatory='True'><value>fa-sitemap</value></variable>
<variable type='string' name='ninegate_niveau02label' description="Label pluriel du niveau 02 d'organisation" mandatory='True'><value>Service</value></variable>
<variable type='string' name='ninegate_niveau02labels' description="Label pluriel du niveau 02 d'organisation" mandatory='True'><value>Services</value></variable>
<variable type='string' name='ninegate_niveau02icon' description="Icon du niveau 02 d'organisation" mandatory='True'><value>fa-sitemap</value></variable>
<variable type='string' name='ninegate_colormain' description="Couleur principale" mandatory='True'><value>2c3e50</value></variable>
<variable type='string' name='ninegate_fontcolorhover' description="Couleur des polices sur fond de couleur principale" mandatory='True'><value>FFFFFF</value></variable>
<variable type='string' name='ninegate_colormain' description="Couleur principale" mandatory='True'><value>2c3e50</value></variable>
<variable type='string' name='ninegate_fontcolorhover' description="Couleur des polices sur fond de couleur principale" mandatory='True'><value>FFFFFF</value></variable>
<variable type='string' name='ninegate_moderegistration' description="Mode de registration : none / byuser / byadmin" mandatory='True'><value>none</value></variable>
<variable type='string' name='ninegate_keyterm' description="Taille minimun du password" mandatory='True'><value>8</value></variable>
<variable type='string' name='ninegate_moderegistration' description="Mode de registration : none / byuser / byadmin" mandatory='True'><value>none</value></variable>
<variable type='string' name='ninegate_keyterm' description="Durée de validité du jeton d'inscription" mandatory='True'><value>8</value></variable>
<variable type='string' name='ninegate_minpassword' description="Taille minimun du password" mandatory='True'><value>8</value></variable>
<variable type='oui/non' name='ninegate_forcetheme' description="Forcer l'utilisation d'un thème"><value>non</value></variable>
<variable type='string' name='ninegate_forcethemename' description="Nom du thème"><value></value></variable>
<!-- MODULE PORTAL -->
@ -151,178 +187,219 @@
<variable type="oui/non" name='ninegate_activate_widadminer' description='Activer Adminer' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widadminer_url' description='URL complète de votre Adminer' mandatory='True' />
<variable type='string' name='ninegate_widadminer_url' description='URL complète de votre Adminer' mandatory='True' />
<!-- BALADO -->
<variable type="oui/non" name='ninegate_activate_widbalado' description='Activer Balado' mandatory='True'>
<value>non</value>
</variable>
<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_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' />
<!-- 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 -->
<variable type="oui/non" name='ninegate_activate_widdokuwiki' description='Activer Dokuwiki' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widdokuwiki_url' description='URL complète de votre Dokuwiki' mandatory='True' />
<variable type='string' name='ninegate_widdokuwiki_url' description='URL complète de votre Dokuwiki' mandatory='True' />
<!-- ECONNECT -->
<variable type="oui/non" name='ninegate_activate_wideconnect' description='Activer eConnect' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_wideconnect_url' description='URL complète de votre eConnect' mandatory='True' />
<variable type='string' name='ninegate_wideconnect_url' description='URL complète de votre eConnect' mandatory='True' />
<!-- EAD -->
<variable type="oui/non" name='ninegate_activate_widead' description='Activer EAD' mandatory='True'>
<value>non</value>
</variable>
<!-- EOE -->
<variable type="oui/non" name='ninegate_activate_wideoe' description='Activer EOE' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_wideoe_url' description='URL complète de votre EOE' mandatory='True' />
<!-- EOP -->
<variable type="oui/non" name='ninegate_activate_wideop' description='Activer EOP' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_wideop_url' description='URL complète de votre EOP' mandatory='True' />
<!-- ETHERHOME -->
<variable type="oui/non" name='ninegate_activate_widetherhome' description='Activer Etherhome' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widetherhome_url' description='URL complète de votre Etherhome' mandatory='True' />
<variable type='string' name='ninegate_widetherhome_url' description='URL complète de votre Etherhome' mandatory='True' />
<!-- FLUXBB -->
<variable type="oui/non" name='ninegate_activate_widfluxbb' description='Activer Fluxbb' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widfluxbb_url' description='URL complète de votre Fluxbb' mandatory='True' />
<variable type='string' name='ninegate_widfluxbb_url' description='URL complète de votre Fluxbb' mandatory='True' />
<!-- GENCONFIG -->
<variable type="oui/non" name='ninegate_activate_widgenconfig' description='Activer Genconfig' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widgenconfig_url' description='URL complète de votre Genconfig' mandatory='True' />
<!-- GEPI -->
<variable type="oui/non" name='ninegate_activate_widgepi' description='Activer GEPI' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widgepi_url' description='URL complète de votre GEPI' mandatory='True' />
<variable type='string' name='ninegate_widgepi_syncenvole' description='URL Posh-Profil pour synchronisation GEPI' mandatory='True' />
<variable type='string' name='ninegate_widgepi_url' description='URL complète de votre GEPI' mandatory='True' />
<variable type='string' name='ninegate_widgepi_syncenvole' description='URL Posh-Profil pour synchronisation GEPI' mandatory='True' />
<!-- GLPI -->
<variable type="oui/non" name='ninegate_activate_widglpi' description='Activer GLPI' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widglpi_url' description='URL complète de votre GLPI' mandatory='True' />
<variable type='string' name='ninegate_widglpi_url' description='URL complète de votre GLPI' mandatory='True' />
<!-- GRR -->
<variable type="oui/non" name='ninegate_activate_widgrr' description='Activer Grr' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widgrr_url' description='URL complète de votre Grr' mandatory='True' />
<variable type='string' name='ninegate_widgrr_url' description='URL complète de votre Grr' mandatory='True' />
<!-- KANBOARD -->
<variable type="oui/non" name='ninegate_activate_widkanboard' description='Activer Kanboard' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widkanboard_url' description='URL complète de votre Kanboard' mandatory='True' />
<variable type='string' name='ninegate_widkanboard_url' description='URL complète de votre Kanboard' mandatory='True' />
<!-- LIMESURVEY -->
<variable type="oui/non" name='ninegate_activate_widlimesurvey' description='Activer Limesurvey' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widlimesurvey_url' description='URL complète de votre Limesurvey' mandatory='True' />
<variable type='string' name='ninegate_widlimesurvey_apiuser' description='API User de votre Limesurvey' mandatory='True' />
<variable type='string' name='ninegate_widlimesurvey_apikey' description='API Key de votre Limesurvey' mandatory='True' />
<variable type='string' name='ninegate_widlimesurvey_syncenvole' description='URL Posh-Profil pour synchronisation Limesurvey' mandatory='True' />
<variable type='string' name='ninegate_widlimesurvey_url' description='URL complète de votre Limesurvey' mandatory='True' />
<variable type='string' name='ninegate_widlimesurvey_apiuser' description='API User de votre Limesurvey' mandatory='True' />
<variable type='string' name='ninegate_widlimesurvey_apikey' description='API Key de votre Limesurvey' mandatory='True' />
<variable type='string' name='ninegate_widlimesurvey_syncenvole' description='URL Posh-Profil pour synchronisation Limesurvey' mandatory='True' />
<!-- MINDMAPS -->
<variable type="oui/non" name='ninegate_activate_widmindmaps' description='Activer Mindmaps' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widmindmaps_url' description='URL complète de votre Mindmaps' mandatory='True' />
<variable type='string' name='ninegate_widmindmaps_url' description='URL complète de votre Mindmaps' mandatory='True' />
<!-- MOODLE -->
<variable type="oui/non" name='ninegate_activate_widmoodle' description='Activer Moodle' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widmoodle_url' description='URL complète de votre Moodle' mandatory='True' />
<variable type='string' name='ninegate_widmoodle_apikey' description='API Key de votre Moodle' mandatory='True' />
<variable type='string' name='ninegate_widmoodle_syncenvole' description='URL Posh-Profil pour synchronisation Moodle' mandatory='True' />
<variable type='string' name='ninegate_widmoodle_url' description='URL complète de votre Moodle' mandatory='True' />
<variable type='string' name='ninegate_widmoodle_apikey' description='API Key de votre Moodle' mandatory='True' />
<variable type='string' name='ninegate_widmoodle_syncenvole' description='URL Posh-Profil pour synchronisation Moodle' mandatory='True' />
<!-- NEXTCLOUD -->
<variable type="oui/non" name='ninegate_activate_widnextcloud' description='Activer Nextcloud' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widnextcloud_url' description='URL complète de votre Nextcloud' mandatory='True' />
<variable type='string' name='ninegate_widnextcloud_syncenvole' description='URL Posh-Profil pour synchronisation Nextcloud' mandatory='True' />
<variable type='string' name='ninegate_widnextcloud_url' description='URL complète de votre Nextcloud' mandatory='True' />
<variable type='string' name='ninegate_widnextcloud_syncenvole' description='URL Posh-Profil pour synchronisation Nextcloud' mandatory='True' />
<!-- NINEBOARD -->
<variable type="oui/non" name='ninegate_activate_widnineboard' description='Activer Nineboard' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widnineboard_url' description='URL complète de votre Nineboard' mandatory='True' />
<!-- NINESCHOOL -->
<variable type="oui/non" name='ninegate_activate_widnineschool' description='Activer Nineschool' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widnineschool_url' description='URL complète de votre Nineschool' mandatory='True' />
<!-- NINESURVEY -->
<variable type="oui/non" name='ninegate_activate_widninesurvey' description='Activer Ninesurvey' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widninesurvey_url' description='URL complète de votre Ninesurvey' mandatory='True' />
<!-- ONLY OFFICE -->
<variable type="oui/non" name='ninegate_activate_widonlyoffice' description='Activer OnlyOffice' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widonlyoffice_url' description='URL complète de votre Onlyoffice' mandatory='True' />
<variable type='string' name='ninegate_widonlyoffice_url' description='URL complète de votre Onlyoffice' mandatory='True' />
<variable type="oui/non" name='ninegate_widonlyoffice_sync' description='Activer la Synchronisation Onlyoffice' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widonlyoffice_user' description='Login admin de votre Onlyoffice' mandatory='True' />
<variable type='string' name='ninegate_widonlyoffice_password' description='Password admin de votre Onlyoffice' mandatory='True' />
<variable type='string' name='ninegate_widonlyoffice_user' description='Login admin de votre Onlyoffice' mandatory='True' />
<variable type='string' name='ninegate_widonlyoffice_password' description='Password admin de votre Onlyoffice' mandatory='True' />
<!-- OPENSONDAGE -->
<variable type="oui/non" name='ninegate_activate_widopensondage' description='Activer Opensondage' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widopensondage_url' description='URL complète de votre Opensondage' mandatory='True' />
<variable type='string' name='ninegate_widopensondage_url' description='URL complète de votre Opensondage' mandatory='True' />
<!-- PHPLDAPADMIN -->
<variable type="oui/non" name='ninegate_activate_widphpldapadmin' description='Activer phpLdapAdmin' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widphpldapadmin_url' description='URL complète de votre phpLdapAdmin' mandatory='True' />
<variable type='string' name='ninegate_widphpldapadmin_url' description='URL complète de votre phpLdapAdmin' mandatory='True' />
<!-- PIWIGO -->
<variable type="oui/non" name='ninegate_activate_widpiwigo' description='Activer Piwigo' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widpiwigo_url' description='URL complète de votre Piwigo' mandatory='True' />
<!-- PIWIK -->
<variable type="oui/non" name='ninegate_activate_widpiwik' description='Activer Piwik' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widpiwik_url' description='URL complète de votre Piwik' mandatory='True' />
<variable type='string' name='ninegate_widpiwik_syncenvole' description='URL Posh-Profil pour synchronisation Piwik' mandatory='True' />
<variable type='string' name='ninegate_widpiwik_url' description='URL complète de votre Piwik' mandatory='True' />
<variable type='string' name='ninegate_widpiwik_syncenvole' description='URL Posh-Profil pour synchronisation Piwik' mandatory='True' />
<!-- ROUNDCUBE -->
<variable type="oui/non" name='ninegate_activate_widroundcube' description='Activer Roundcube' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widroundcube_url' description='URL complète de votre Roundcube' mandatory='True' />
<variable type='string' name='ninegate_widroundcube_url' description='URL complète de votre Roundcube' mandatory='True' />
<!-- SACOCHE -->
<variable type="oui/non" name='ninegate_activate_widsacoche' description='Activer Sacoche' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widsacoche_url' description='URL complète de votre Sacoche' mandatory='True' />
<variable type='string' name='ninegate_widsacoche_syncenvole' description='URL Posh-Profil pour synchronisation Sacoche' mandatory='True' />
<variable type='string' name='ninegate_widsacoche_url' description='URL complète de votre Sacoche' mandatory='True' />
<variable type='string' name='ninegate_widsacoche_syncenvole' description='URL Posh-Profil pour synchronisation Sacoche' mandatory='True' />
<!-- WORDPRESS -->
<variable type="oui/non" name='ninegate_activate_widwordpress' description='Activer Wordpress' mandatory='True'>
<value>non</value>
</variable>
<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' />
<!-- 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>
<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' />
<!-- 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'>
<value>oui</value>
</variable>
<variable type='string' name='ninegate_smtphost' description='Host du serveur SMTP' />
<variable type='string' name='ninegate_smtpport' description='Port du serveur SMTP' />
<variable type='string' name='ninegate_smtpuser' description='Compte du serveur 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_smtpauthmode' description='Mode Authentification du serveur SMTP' />
<variable type='string' name='ninegate_smtphost' description='Host du serveur SMTP' />
<variable type='string' name='ninegate_smtpport' description='Port du serveur SMTP' />
<variable type='string' name='ninegate_smtpuser' description='Compte du serveur 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_smtpauthmode' description='Mode Authentification du serveur SMTP' />
</family>
<family name='EoleDB' icon='database' mode='expert'>
<!-- EOLEDB -->
<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='number' name='ninegate_dbport' description="Port d'écoute du serveur de base de données" mode='expert'/>
<variable type='string' name='ninegate_allow_hosts' description="Hôtes autorisés à utiliser la base de données" multi='True' mode='expert'/>
<variable type='string' name='ninegate_dbuser' description='Utilisateur du serveur de base de données' mode='expert'/>
<variable type='string' name='ninegate_dbpass' description='Fichier de mot de passe du serveur' 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='number' name='ninegate_dbport' description="Port d'écoute du serveur de base de données" mode='expert'/>
<variable type='string' name='ninegate_allow_hosts' description="Hôtes autorisés à utiliser la base de données" multi='True' mode='expert'/>
<variable type='string' name='ninegate_dbuser' description='Utilisateur du serveur de base de données' mode='expert'/>
<variable type='string' name='ninegate_dbpass' description='Fichier de mot de passe du serveur' mode='expert'/>
</family>
<separators>
@ -331,10 +408,15 @@
<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_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_wideconnect">Paramètres associés à eConnect</separator>
<separator name="ninegate_activate_widead">Paramètres associés à EAD</separator>
<separator name="ninegate_activate_wideoe">Paramètres associés à EOE</separator>
<separator name="ninegate_activate_wideop">Paramètres associés à EOP</separator>
<separator name="ninegate_activate_widetherhome">Paramètres associés à Etherhome</separator>
<separator name="ninegate_activate_widfluxbb">Paramètres associés à Fluxbb</separator>
<separator name="ninegate_activate_widgenconfig">Paramètres associés à GENCONFIG</separator>
<separator name="ninegate_activate_widgepi">Paramètres associés à GEPI</separator>
<separator name="ninegate_activate_widglpi">Paramètres associés à GLPI</separator>
<separator name="ninegate_activate_widgrr">Paramètres associés à Grr</separator>
@ -343,16 +425,20 @@
<separator name="ninegate_activate_widmindmaps">Paramètres associés à Mindmaps</separator>
<separator name="ninegate_activate_widmoodle">Paramètres associés à Moodle</separator>
<separator name="ninegate_activate_widnextcloud">Paramètres associés à Nextcloud</separator>
<separator name="ninegate_activate_widnineboard">Paramètres associés à Nineboard</separator>
<separator name="ninegate_activate_widnineschool">Paramètres associés à Nineschool</separator>
<separator name="ninegate_activate_widninesurvey">Paramètres associés à Ninesurvey</separator>
<separator name="ninegate_activate_widonlyoffice">Paramètres associés à Only Office</separator>
<separator name="ninegate_activate_widopensondage">Paramètres associés à Opensondage</separator>
<separator name="ninegate_activate_widphpldapadmin">Paramètres associés à phpLdapAdmin</separator>
<separator name="ninegate_activate_widpiwigo">Paramètres associés à Piwigo</separator>
<separator name="ninegate_activate_widpiwik">Paramètres associés à Piwik</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_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_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>
</variables>
@ -362,6 +448,11 @@
<target type='variable'>activer_ninegate</target>
</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'>
<param>non</param>
@ -369,10 +460,23 @@
<target type='variable'>ninegate_mode_auth</target>
<target type='variable'>ninegate_api_key</target>
<target type='variable'>ninegate_ssosynchrogroup</target>
<target type='variable'>ninegate_ssoreqgroup</target>
<target type='variable'>ninegate_ssosynchroitem</target>
<target type='variable'>ninegate_ssoreqitem</target>
<target type='variable'>ninegate_typesso</target>
<target type='variable'>ninegate_syncldap</target>
<target type='variable'>ninegate_ldaptemplate</target>
<target type='variable'>ninegate_scribegroup</target>
<target type='variable'>ninegate_scribemaster</target>
<target type='variable'>ninegate_openldapreqniveau01</target>
<target type='variable'>ninegate_openldapsynchrogroup</target>
<target type='variable'>ninegate_openldapreqgroup</target>
<target type='variable'>ninegate_openldapsubbranchgroup</target>
<target type='variable'>ninegate_openldapsubbranchuser</target>
<target type='variable'>ninegate_ldaptype</target>
<target type='variable'>ninegate_pwdadmin</target>
<target type='variable'>ninegate_organization</target>
<target type='variable'>ninegate_niveau01branche</target>
@ -391,6 +495,9 @@
<target type='variable'>ninegate_fontcolorhover</target>
<target type='variable'>ninegate_moderegistration</target>
<target type='variable'>ninegate_keyterm</target>
<target type='variable'>ninegate_minpassword</target>
<target type='variable'>ninegate_forcetheme</target>
<target type='variable'>ninegate_forcethemename</target>
<target type='variable'>ninegate_activate_portal</target>
<target type='variable'>ninegate_activate_page</target>
@ -422,9 +529,17 @@
<target type='variable'>ninegate_dbpass</target>
<target type='filelist'>ninegate</target>
<target type='filelist'>ninegate_nginx</target>
<target type='filelist'>ninegate-migration</target>
<target type='servicelist'>ninegate</target>
</condition>
<condition name='hidden_if_in' source='activer_envole_migration' fallback='True'>
<param>non</param>
<target type='filelist'>ninegate-migration</target>
</condition>
<condition name='hidden_if_in' source='ninegate_masteridentity'>
<param>LDAP</param>
<param>SSO</param>
@ -432,6 +547,7 @@
<target type='variable'>ninegate_syncldap</target>
<target type='variable'>ninegate_moderegistration</target>
<target type='variable'>ninegate_keyterm</target>
<target type='variable'>ninegate_minpassword</target>
</condition>
<condition name='hidden_if_in' source='ninegate_masteridentity'>
@ -442,14 +558,43 @@
<target type='variable'>ninegate_test_conf_cadolesldap</target>
</condition>
<condition name='hidden_if_in' source='ninegate_masteridentity'>
<param>SQL</param>
<param>LDAP</param>
<target type='variable'>ninegate_ssosynchrogroup</target>
<target type='variable'>ninegate_ssoreqgroup</target>
<target type='variable'>ninegate_ssosynchroitem</target>
<target type='variable'>ninegate_ssoreqitem</target>
</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'>
<param>non</param>
<target type='variable'>ninegate_ldaptype</target>
<target type='variable'>ninegate_pwdadmin</target>
<target type='variable'>ninegate_niveau01name</target>
<target type='variable'>ninegate_niveau01siren</target>
</condition>
<fill name='calc_multi_condition' target='activer_admin_passfile'>
<param>non</param>
<param type='eole' name='condition_1' hidden='False'>ninegate_syncldap</param>
<param name="operator">AND</param>
<param type='eole' name='condition_2' hidden='False'>activer_cadolesldap</param>
<param name='match'>non</param>
<param name='mismatch'>oui</param>
<param name='default_mismatch'>non</param>
</fill>
<auto name='calc_multi_condition' target='ninegate_test_conf_cadolesldap'>
<param>CadolesLDAP</param>
<param type='eole' name='condition_1' hidden='False'>ninegate_ldaptemplate</param>
@ -483,8 +628,96 @@
<target type='variable'>ninegate_niveau02icon</target>
</condition>
<auto name='calc_multi_condition' target='ninegate_test_ninegate'>
<param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_ninegate</param>
<param name='match'>oui</param>
<param name='mismatch'>non</param>
</auto>
<!-- AFFICHAGE EN FONCTION DE SSO SYNCHRO GROUPE -->
<condition name='hidden_if_in' source='ninegate_ssosynchrogroup'>
<param>non</param>
<target type='variable'>ninegate_ssoreqgroup</target>
</condition>
<!-- AFFICHAGE EN FONCTION DE SSO SYNCHRO ITEM -->
<condition name='hidden_if_in' source='ninegate_ssosynchroitem'>
<param>non</param>
<target type='variable'>ninegate_ssoreqitem</target>
</condition>
<!-- AFFICHAGE EN FONCTION DE CADOLESLDAP -->
<fill name='calc_val' target='ninegate_pwdadmin'>
<param type='eole' hidden='False'>cadolesldap_pwdadmin</param>
</fill>
<fill name='calc_val_first_value' target='ninegate_organization'>
<param type='eole' optional='True' hidden='False'>cadolesldap_organization</param>
<param type='eole'>libelle_etab</param>
</fill>
<fill name='calc_val_first_value' target='ninegate_niveau01branche'>
<param type='eole' hidden='False'>cadolesldap_niveau01branche</param>
<param>niveau01</param>
</fill>
<fill name='calc_val_first_value' target='ninegate_niveau02branche'>
<param type='eole' hidden='False'>cadolesldap_niveau02branche</param>
<param>niveau01</param>
</fill>
<fill name='calc_val_first_value' target='ninegate_niveau01name'>
<param type='eole' optional='True' hidden='False'>cadolesldap_niveau01name</param>
<param type='eole'>libelle_etab</param>
</fill>
<fill name='calc_val' target='ninegate_niveau01siren'>
<param type='eole' hidden='False'>cadolesldap_niveau01siren</param>
</fill>
<!-- AFFICHAGE EN FONCTION DU MODE SCRIBE -->
<condition name='hidden_if_not_in' source='ninegate_ldaptemplate'>
<param>scribe</param>
<target type='variable'>ninegate_scribegroup</target>
<target type='variable'>ninegate_scribemaster</target>
</condition>
<!-- AFFICHAGE EN FONCTION DU MODE OPEN -->
<condition name='hidden_if_not_in' source='ninegate_ldaptemplate'>
<param>open</param>
<target type='variable'>ninegate_openldapreqniveau01</target>
<target type='variable'>ninegate_openldapsynchrogroup</target>
<target type='variable'>ninegate_openldapreqgroup</target>
<target type='variable'>ninegate_openldapsubbranchgroup</target>
<target type='variable'>ninegate_openldapsubbranchuser</target>
</condition>
<!-- AFFICHAGE EN FONCTION DU LDAP SYNCHRO GROUP -->
<condition name='hidden_if_in' source='ninegate_openldapsynchrogroup'>
<param>non</param>
<target type='variable'>ninegate_openldapreqgroup</target>
</condition>
<!-- AFFICHAGE EN FONCTION DU MODE SCRIBE -->
<condition name='hidden_if_not_in' source='ninegate_ldaptype'>
<param>AD</param>
<target type='variable'>ninegate_addomainehome</target>
<target type='variable'>ninegate_addomaineprofil</target>
</condition>
<!-- AFFICHAGE EN FONCTION DU FORCE THEME -->
<condition name='hidden_if_in' source='ninegate_forcetheme'>
<param>non</param>
<target type='variable'>ninegate_forcethemename</target>
</condition>
<!-- AFFICHAGE EN FONCTION DU MODULE PORTAL -->
<condition name='hidden_if_in' source='ninegate_activate_portal'>
@ -492,10 +725,15 @@
<target type='variable'>ninegate_activate_widadminer</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_wideconnect</target>
<target type='variable'>ninegate_activate_widead</target>
<target type='variable'>ninegate_activate_wideoe</target>
<target type='variable'>ninegate_activate_wideop</target>
<target type='variable'>ninegate_activate_widetherhome</target>
<target type='variable'>ninegate_activate_widfluxbb</target>
<target type='variable'>ninegate_activate_widgenconfig</target>
<target type='variable'>ninegate_activate_widgepi</target>
<target type='variable'>ninegate_activate_widglpi</target>
<target type='variable'>ninegate_activate_widgrr</target>
@ -504,9 +742,13 @@
<target type='variable'>ninegate_activate_widmindmaps</target>
<target type='variable'>ninegate_activate_widmoodle</target>
<target type='variable'>ninegate_activate_widnextcloud</target>
<target type='variable'>ninegate_activate_widnineboard</target>
<target type='variable'>ninegate_activate_widnineschool</target>
<target type='variable'>ninegate_activate_widninesurvey</target>
<target type='variable'>ninegate_activate_widonlyoffice</target>
<target type='variable'>ninegate_activate_widopensondage</target>
<target type='variable'>ninegate_activate_widphpldapadmin</target>
<target type='variable'>ninegate_activate_widpiwigo</target>
<target type='variable'>ninegate_activate_widpiwik</target>
<target type='variable'>ninegate_activate_widroundcube</target>
<target type='variable'>ninegate_activate_widsacoche</target>
@ -533,6 +775,7 @@
<param>non</param>
<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_widlimesurvey_syncenvole</target>
<target type='variable'>ninegate_widmoodle_syncenvole</target>
@ -551,30 +794,12 @@
<condition name='hidden_if_in' source='poshprofil_typesynchro'>
<param>Annuaire</param>
<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_widnextcloud_syncenvole</target>
<target type='variable'>ninegate_widsacoche_syncenvole</target>
</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 -->
<fill name='calc_multi_condition' target='ninegate_activate_widadminer'>
<param>oui</param>
@ -599,7 +824,7 @@
<!-- AFFICHAGE EN FONCTION DU WIDGET BALADAO -->
<!-- AFFICHAGE EN FONCTION DU WIDGET BALADO -->
<fill name='calc_multi_condition' target='ninegate_activate_widbalado'>
<param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_balado</param>
@ -630,6 +855,39 @@
</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 -->
<fill name='calc_multi_condition' target='ninegate_activate_widdokuwiki'>
<param>oui</param>
@ -677,6 +935,62 @@
</fill>
<!-- AFFICHAGE EN FONCTION DU WIDGET EAD -->
<fill name='calc_multi_condition' target='ninegate_activate_widead'>
<param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_ead_web</param>
<param name='match'>oui</param>
<param name='mismatch'>non</param>
<param name='default_mismatch'>non</param>
</fill>
<!-- AFFICHAGE EN FONCTION DU WIDGET EOE -->
<fill name='calc_multi_condition' target='ninegate_activate_wideoe'>
<param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_eoe</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_wideoe'>
<param>non</param>
<target type='variable'>ninegate_wideoe_url</target>
</condition>
<fill name='calc_multi_condition' target='ninegate_wideoe_url'>
<param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_eoe</param>
<param name='match'>/eoleapps/eleves/passperso</param>
<param name='default_mismatch'>None</param>
</fill>
<!-- AFFICHAGE EN FONCTION DU WIDGET EOP -->
<fill name='calc_multi_condition' target='ninegate_activate_wideop'>
<param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_eop</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_wideop'>
<param>non</param>
<target type='variable'>ninegate_wideop_url</target>
</condition>
<fill name='calc_multi_condition' target='ninegate_wideop_url'>
<param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_eop</param>
<param name='match'>/eoleapps/eop</param>
<param name='default_mismatch'>None</param>
</fill>
<!-- AFFICHAGE EN FONCTION DU WIDGET ETHERHOME -->
<fill name='calc_multi_condition' target='ninegate_activate_widetherhome'>
@ -726,6 +1040,30 @@
<!-- AFFICHAGE EN FONCTION DU WIDGET GENCONFIG -->
<fill name='calc_multi_condition' target='ninegate_activate_widgenconfig'>
<param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_genconfig</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_widgenconfig'>
<param>non</param>
<target type='variable'>ninegate_widgenconfig_url</target>
</condition>
<fill name='calc_multi_condition' target='ninegate_widgenconfig_url'>
<param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_genconfig</param>
<param name='match'>/genconfig</param>
<param name='default_mismatch'>None</param>
</fill>
<!-- AFFICHAGE EN FONCTION DU WIDGET GEPI -->
<fill name='calc_multi_condition' target='ninegate_activate_widgepi'>
<param>oui</param>
@ -976,6 +1314,81 @@
<!-- AFFICHAGE EN FONCTION DU WIDGET NINEBOARD -->
<fill name='calc_multi_condition' target='ninegate_activate_widnineboard'>
<param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_nineboard</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_widnineboard'>
<param>non</param>
<target type='variable'>ninegate_widnineboard_url</target>
</condition>
<fill name='calc_multi_condition' target='ninegate_widnineboard_url'>
<param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_nineboard</param>
<param name='match'>/nineboard</param>
<param name='default_mismatch'>None</param>
</fill>
<!-- AFFICHAGE EN FONCTION DU WIDGET NINESCHOOL -->
<fill name='calc_multi_condition' target='ninegate_activate_widnineschool'>
<param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_nineschool</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_widnineschool'>
<param>non</param>
<target type='variable'>ninegate_widnineschool_url</target>
</condition>
<fill name='calc_multi_condition' target='ninegate_widnineschool_url'>
<param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_nineschool</param>
<param name='match'>/nineschool</param>
<param name='default_mismatch'>None</param>
</fill>
<!-- AFFICHAGE EN FONCTION DU WIDGET NINESURVEY -->
<fill name='calc_multi_condition' target='ninegate_activate_widninesurvey'>
<param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_ninesurvey</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_widninesurvey'>
<param>non</param>
<target type='variable'>ninegate_widninesurvey_url</target>
</condition>
<fill name='calc_multi_condition' target='ninegate_widninesurvey_url'>
<param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_ninesurvey</param>
<param name='match'>/ninesurvey</param>
<param name='default_mismatch'>None</param>
</fill>
<!-- AFFICHAGE EN FONCTION DU WIDGET OPENSONDAGE -->
<fill name='calc_multi_condition' target='ninegate_activate_widopensondage'>
<param>oui</param>
@ -1041,6 +1454,32 @@
<param name='match'>/phpldapadmin</param>
<param name='default_mismatch'>None</param>
</fill>
<!-- AFFICHAGE EN FONCTION DU WIDGET PIWIGO -->
<fill name='calc_multi_condition' target='ninegate_activate_widpiwigo'>
<param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_piwigo</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_widpiwigo'>
<param>non</param>
<target type='variable'>ninegate_widpiwigo_url</target>
</condition>
<fill name='calc_multi_condition' target='ninegate_widpiwigo_url'>
<param>oui</param>
<param type='eole' name='condition_1' hidden='False'>activer_piwigo</param>
<param name='match'>/piwigo</param>
<param name='default_mismatch'>None</param>
</fill>
@ -1225,6 +1664,10 @@
<param>['CAS', 'SAML', 'SQL', 'LDAP']</param>
</check>
<check name='valid_enum' target='ninegate_typesso'>
<param>['client', 'proxy']</param>
</check>
<check name='valid_enum' target='ninegate_moderegistration'>
<param>['none', 'byuser', 'byadmin']</param>
</check>
@ -1233,6 +1676,10 @@
<param>['scribe', 'open', 'CadolesLDAP']</param>
</check>
<check name='valid_enum' target='ninegate_ldaptype'>
<param>['LDAP', 'AD']</param>
</check>
<check name='valid_enum' target='ninegate_smtpencryption'>
<param>['tls', 'ssl', 'null']</param>
</check>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<creole>
<variables>
<family name='annuaire'>
<variable type='string' name='ldap_writer' description="Utilisateur d'écriture des comptes LDAP" exists='False'>
cn=admin,o=gouv,c=fr
</variable>
<variable name='ldap_member_group_attribute' type='string' description="Attribut des utilisateurs d'un groupe" mode='expert' exists='False'>
<value>memberUid</value>
</variable>
</family>
</variables>
<constraints>
<fill name='concat' target='ldap_writer'>
<param>cn=admin,</param>
<param type='eole'>ldap_base_dn</param>
</fill>
</constraints>
<help>
</help>
</creole>

View File

@ -1,6 +1,13 @@
/var/www/html/ninegate/var/logs/*.log {
rotate 5
daily
su www-data
su root www-data
daily
rotate 7
size 900
maxage 7
compress
dateext
dateformat -%Y%m%d
missingok
create 644 www-data www-data
}

View File

@ -1,2 +0,0 @@
#!/bin/bash
CreoleRun "/var/www/html/ninegate/scripts/ninegate-postservice-00.sh" web

7
postservice/91-ninegate Executable file
View File

@ -0,0 +1,7 @@
#!/bin/bash
activer_ninegate=$(CreoleGet activer_ninegate non)
if [ "$activer_ninegate" == "oui" ]
then
CreoleRun "/var/www/html/ninegate/scripts/ninegate-postservice-00.sh" web
fi

View File

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

View File

@ -16,7 +16,6 @@ class AppKernel extends Kernel
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new \Symfony\Bundle\MakerBundle\MakerBundle(),
new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle(),
new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle(),
new Symfony\Bundle\AsseticBundle\AsseticBundle(),
@ -39,6 +38,7 @@ class AppKernel extends Kernel
new Cadoles\CronBundle\CadolesCronBundle(),
new Cadoles\PortalBundle\CadolesPortalBundle(),
new Cadoles\WebsocketBundle\CadolesWebsocketBundle(),
new Cadoles\EdispatcherBundle\CadolesEdispatcherBundle(),
];
@ -46,6 +46,7 @@ class AppKernel extends Kernel
$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
$bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
$bundles[] = new Symfony\Bundle\MakerBundle\MakerBundle();
if ('dev' === $this->getEnvironment()) {
$bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();

View File

@ -13,14 +13,6 @@ imports:
parameters:
locale: fr
monolog:
handlers:
main:
type: rotating_file
path: '%kernel.logs_dir%/%kernel.environment%.log'
level: error
max_files: 10
framework:
#esi: ~
#translator: { fallbacks: ['%locale%'] }
@ -135,16 +127,16 @@ gos_web_socket:
firewall: main
shared_config: true
server:
port: %websocket_port% #The port the socket server will listen on
host: %websocket_host% #The host ip to bind to
port: 443 #The port the socket server will listen on
host: %weburl%/wssninegate #The host ip to bind to
router:
resources:
- "@CadolesWebsocketBundle/Resources/config/topic.yml"
pushers:
wamp:
host: %websocket_host%
port: %websocket_portinterne%
host: 0.0.0.0
port: 5556
# ckeditor configuration
ivory_ck_editor:
@ -155,7 +147,7 @@ ivory_ck_editor:
language: fr
toolbar: "my_toolbar_1"
uiColor: "#ffffff"
extraPlugins: ["html5video","pastebase64"]
extraPlugins: ["html5video"]
light_config:
language: fr
toolbar: "my_toolbar_2"

View File

@ -14,6 +14,10 @@ websocket:
resource: "@CadolesWebsocketBundle/Resources/config/routing.yml"
prefix: /
edispatcher:
resource: "@CadolesEdispatcherBundle/Resources/config/routing.yml"
prefix: /
lightsaml_sp:
resource: "@LightSamlSpBundle/Resources/config/routing.yml"
prefix: saml

View File

@ -1,127 +0,0 @@
# This file is auto-generated during the composer install
parameters:
# Determine qui est le maitre de l'identitité = SQL / LDAP / SSO
# Si SQL cela veut dire que c'est l'applicatif qui gère les utilisateurs
# Sinon la source est externe soit via un annuaire soit via des attributs venant d'un SSO
# Si la source est externe de fait pas de module d'inscription ni de reset de password
# Et pas de synchronisation vers un annuaire ou vers ePortail
masteridentity: LDAP
# Mode d'authentification soit SQL / LDAP / CAS / SAML
# Pour l'instant SQL - CAS - SAML Reste à faire LDAP
# Attention si le masteridentity est différent de SQL le mode d'authentification est forcement différent de SQL
# Car aucune synchronisation des password n'est possible
mode_auth: CAS
# Mode de registration : none / byuser / byadmin
# none = désactivation de l'inscription mais reset de password possible
# byuser = aucune validation par un administrateur, l'utilisateur valide son inscription par lui-même
# byadmin = validation de l'inscription par un administrateur, sauf si domaine de messagerie dans la liste blanche
moderegistration: none
# Activation module
cron_activate: true
portal_activate: true
# Information de base de l'annuaire
ldap_host: 172.27.7.61
ldap_port: 389
ldap_user: cn=admin,o=gouv,c=fr
ldap_password: eole
ldap_basedn: o=gouv,c=fr
# Mise en page
alias: ninegate
libelle_etab: ldapbundle
numero_etab: 0000000A
colormain: 2c3e50 # Couleur principale
fontcolorhover: FFFFFF # Couleur des polices sur fond de couleur principale
keyterm: 8 # Taille mini du password
labelniveau01: Ecole # Label singulier du niveau 01 d'organisation
labelsniveau01: Ecoles # Label pluriel du niveau 01 d'organisation
iconniveau01: fa-building # Icon du niveau 01 d'organisation
labelsirenniveau01: SIREN # Label SIREN
viewniveau02: false # Gérer un niveau 02 d'organisation
labelniveau02: niveau02 # Label singulier du niveau 02 d'organisation
labelsniveau02: niveaus02 # Label pluriel du niveau 02 d'organisation
iconniveau02: fa-sitemap # Icon du niveau 02 d'organisation
labelsiretniveau02: SIRET # Label SIRET
# Si masteridentity est à SQL = où sont synchronisées les datas dans l'annuaire
ldap_sync: false
ldap_baseuser:
ldap_baseniveau01:
ldap_baseniveau02:
ldap_basegroup:
# Si masteridentity est à LDAP = quel est le modele d'organisation
# Si open = rien de particulier
# Si scribe = on génére des groupes correspondant au profil / classe / niveau / option
ldap_template: scribe
# Si masteridentity est à LDAP = quel champs sont à récupérer
ldap_username: uid
ldap_firstname: givenname
ldap_lastname: sn
ldap_email: mail
ldap_usersadmin: [admin,prof.6a]
eportail_sync: false
eportail_url: # /eportail
eportail_login: # /eportail/login.php
eportail_database_host: # 172.27.7.64
eportail_database_port: # 3306
eportail_database_name: # eportail
eportail_database_user: # eportail
eportail_database_password: # "changme"
# Si mode_auth = CAS
cas_host: ldapbundle.ac-arno.fr
cas_path:
cas_port: 8443
# Si mode_aut = SAML
saml_entityid: 'http://dev.nuonet.cadoles'
saml_logout_url: 'http://172.27.7.67:8088/idp/profile/Logout'
saml_idps_list: ['http://172.27.7.67:8088/idp/shibboleth']
# Si mode_auth = CAS ou SAML les attributs permettant de matché avec les utilisateurs
user_attr_cas_username: username
user_attr_cas_mail: email
user_attr_cas_lastname: lastname
user_attr_cas_firstname: firstname
user_attr_saml_username: eduPersonPrincipalName
user_attr_saml_mail: mail
user_attr_saml_lastname: sn
user_attr_saml_firstname: givenName
mailer_port: '2525'
mailer_encryption: null
mailer_authmode: null
noreply: noreply@ldapbundle.ac-arno.fr
# Doctrine Configuration
doctrine:
dbal:
default_connection: default
connections:
default:
driver: pdo_mysql
host: '%database_host%'
port: '%database_port%'
dbname: '%database_name%'
user: '%database_user%'
password: '%database_password%'
charset: UTF8
orm:
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
CadolesCoreBundle: ~
CadolesCronBundle: ~
CadolesPortalBundle: ~

View File

@ -23,3 +23,7 @@ twig:
labelsniveau02: %labelsniveau02%
iconniveau02: %iconniveau02%
keyterm: %keyterm%
minpassword: %minpassword%
activate_widonlyoffice: %activate_widonlyoffice%
widonlyoffice_url: %widonlyoffice_url%

View File

@ -65,9 +65,6 @@
]
},
"config": {
"platform": {
"php": "7.0.30"
},
"sort-packages": true
},
"extra": {

View File

@ -4,30 +4,30 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"hash": "e008822a96a469e24963e22d66f34c98",
"content-hash": "589f314a10ca56596cf580254885bd7c",
"hash": "437ec86e9bacb04581e0e648a8d8abbb",
"content-hash": "67c93030cb80b522b452ffdeaf0983ab",
"packages": [
{
"name": "cboden/ratchet",
"version": "v0.4.1",
"version": "v0.4.3",
"source": {
"type": "git",
"url": "https://github.com/ratchetphp/Ratchet.git",
"reference": "0d31f3a8ad4795fd48397712709e55cd07f51360"
"reference": "466a0ecc83209c75b76645eb823401b5c52e5f21"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ratchetphp/Ratchet/zipball/0d31f3a8ad4795fd48397712709e55cd07f51360",
"reference": "0d31f3a8ad4795fd48397712709e55cd07f51360",
"url": "https://api.github.com/repos/ratchetphp/Ratchet/zipball/466a0ecc83209c75b76645eb823401b5c52e5f21",
"reference": "466a0ecc83209c75b76645eb823401b5c52e5f21",
"shasum": ""
},
"require": {
"guzzlehttp/psr7": "^1.0",
"php": ">=5.4.2",
"ratchet/rfc6455": "^0.2",
"ratchet/rfc6455": "^0.3",
"react/socket": "^1.0 || ^0.8 || ^0.7 || ^0.6 || ^0.5",
"symfony/http-foundation": "^2.6|^3.0|^4.0",
"symfony/routing": "^2.6|^3.0|^4.0"
"symfony/http-foundation": "^2.6|^3.0|^4.0|^5.0",
"symfony/routing": "^2.6|^3.0|^4.0|^5.0"
},
"require-dev": {
"phpunit/phpunit": "~4.8"
@ -47,6 +47,10 @@
"name": "Chris Boden",
"email": "cboden@gmail.com",
"role": "Developer"
},
{
"name": "Matt Bonneau",
"role": "Developer"
}
],
"description": "PHP WebSocket library",
@ -58,20 +62,20 @@
"sockets",
"websocket"
],
"time": "2017-12-12 00:49:31"
"time": "2020-07-07 15:50:14"
},
{
"name": "composer/ca-bundle",
"version": "1.2.4",
"version": "1.2.9",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
"reference": "10bb96592168a0f8e8f6dcde3532d9fa50b0b527"
"reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/10bb96592168a0f8e8f6dcde3532d9fa50b0b527",
"reference": "10bb96592168a0f8e8f6dcde3532d9fa50b0b527",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/78a0e288fdcebf92aa2318a8d3656168da6ac1a5",
"reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5",
"shasum": ""
},
"require": {
@ -80,14 +84,15 @@
"php": "^5.3.2 || ^7.0 || ^8.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8",
"phpstan/phpstan": "^0.12.55",
"psr/log": "^1.0",
"symfony/process": "^2.5 || ^3.0 || ^4.0"
"symfony/phpunit-bridge": "^4.2 || ^5",
"symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
"dev-main": "1.x-dev"
}
},
"autoload": {
@ -114,7 +119,7 @@
"ssl",
"tls"
],
"time": "2019-08-30 08:44:50"
"time": "2021-01-12 12:10:35"
},
{
"name": "debril/feed-io",
@ -1432,22 +1437,25 @@
},
{
"name": "fig/link-util",
"version": "1.0.0",
"version": "1.1.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/link-util.git",
"reference": "1a07821801a148be4add11ab0603e4af55a72fac"
"reference": "5d7b8d04ed3393b4b59968ca1e906fb7186d81e8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/link-util/zipball/1a07821801a148be4add11ab0603e4af55a72fac",
"reference": "1a07821801a148be4add11ab0603e4af55a72fac",
"url": "https://api.github.com/repos/php-fig/link-util/zipball/5d7b8d04ed3393b4b59968ca1e906fb7186d81e8",
"reference": "5d7b8d04ed3393b4b59968ca1e906fb7186d81e8",
"shasum": ""
},
"require": {
"php": ">=5.5.0",
"psr/link": "~1.0@dev"
},
"provide": {
"psr/link-implementation": "1.0"
},
"require-dev": {
"phpunit/phpunit": "^5.1",
"squizlabs/php_codesniffer": "^2.3.1"
@ -1470,7 +1478,7 @@
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common utility implementations for HTTP links",
@ -1482,7 +1490,7 @@
"psr-13",
"rest"
],
"time": "2016-10-17 18:31:11"
"time": "2021-02-03 23:36:04"
},
{
"name": "gos/pnctl-event-loop-emitter",
@ -1715,16 +1723,16 @@
},
{
"name": "gregwar/captcha",
"version": "v1.1.7",
"version": "v1.1.9",
"source": {
"type": "git",
"url": "https://github.com/Gregwar/Captcha.git",
"reference": "cf953dd79748406e0292cea8c565399681e4d345"
"reference": "4bb668e6b40e3205a020ca5ee4ca8cff8b8780c5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Gregwar/Captcha/zipball/cf953dd79748406e0292cea8c565399681e4d345",
"reference": "cf953dd79748406e0292cea8c565399681e4d345",
"url": "https://api.github.com/repos/Gregwar/Captcha/zipball/4bb668e6b40e3205a020ca5ee4ca8cff8b8780c5",
"reference": "4bb668e6b40e3205a020ca5ee4ca8cff8b8780c5",
"shasum": ""
},
"require": {
@ -1764,27 +1772,28 @@
"captcha",
"spam"
],
"time": "2018-08-17 22:57:28"
"time": "2020-03-24 14:39:05"
},
{
"name": "gregwar/captcha-bundle",
"version": "v2.0.6",
"version": "v2.0.7",
"source": {
"type": "git",
"url": "https://github.com/Gregwar/CaptchaBundle.git",
"reference": "c2d5468556890dd25e0b53bd345fc205562c86f7"
"reference": "3ccfdf1c9324acbdfbcccea2c454075115741b3a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Gregwar/CaptchaBundle/zipball/c2d5468556890dd25e0b53bd345fc205562c86f7",
"reference": "c2d5468556890dd25e0b53bd345fc205562c86f7",
"url": "https://api.github.com/repos/Gregwar/CaptchaBundle/zipball/3ccfdf1c9324acbdfbcccea2c454075115741b3a",
"reference": "3ccfdf1c9324acbdfbcccea2c454075115741b3a",
"shasum": ""
},
"require": {
"gregwar/captcha": "~1.1",
"php": ">=5.3.9",
"symfony/form": "~2.8|~3.0|~4.0",
"symfony/framework-bundle": "~2.8|~3.0|~4.0"
"symfony/framework-bundle": "~2.8|~3.0|~4.0",
"twig/twig": "^1.40|^2.9"
},
"type": "captcha-bundle",
"autoload": {
@ -1818,27 +1827,28 @@
"spam",
"visual"
],
"time": "2018-11-20 10:41:34"
"time": "2019-09-23 13:07:46"
},
{
"name": "guzzlehttp/guzzle",
"version": "6.4.1",
"version": "6.5.5",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
"reference": "0895c932405407fd3a7368b6910c09a24d26db11"
"reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/0895c932405407fd3a7368b6910c09a24d26db11",
"reference": "0895c932405407fd3a7368b6910c09a24d26db11",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e",
"reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e",
"shasum": ""
},
"require": {
"ext-json": "*",
"guzzlehttp/promises": "^1.0",
"guzzlehttp/psr7": "^1.6.1",
"php": ">=5.5"
"php": ">=5.5",
"symfony/polyfill-intl-idn": "^1.17.0"
},
"require-dev": {
"ext-curl": "*",
@ -1851,7 +1861,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "6.3-dev"
"dev-master": "6.5-dev"
}
},
"autoload": {
@ -1884,27 +1894,27 @@
"rest",
"web service"
],
"time": "2019-10-23 15:58:00"
"time": "2020-06-16 21:01:06"
},
{
"name": "guzzlehttp/promises",
"version": "v1.3.1",
"version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
"reference": "60d379c243457e073cff02bc323a2a86cb355631"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
"url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631",
"reference": "60d379c243457e073cff02bc323a2a86cb355631",
"shasum": ""
},
"require": {
"php": ">=5.5.0"
"php": ">=5.5"
},
"require-dev": {
"phpunit/phpunit": "^4.0"
"symfony/phpunit-bridge": "^4.4 || ^5.1"
},
"type": "library",
"extra": {
@ -1935,20 +1945,20 @@
"keywords": [
"promise"
],
"time": "2016-12-20 10:07:11"
"time": "2020-09-30 07:37:28"
},
{
"name": "guzzlehttp/psr7",
"version": "1.6.1",
"version": "1.7.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "239400de7a173fe9901b9ac7c06497751f00727a"
"reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
"reference": "239400de7a173fe9901b9ac7c06497751f00727a",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3",
"reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3",
"shasum": ""
},
"require": {
@ -1961,15 +1971,15 @@
},
"require-dev": {
"ext-zlib": "*",
"phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
"phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10"
},
"suggest": {
"zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.6-dev"
"dev-master": "1.7-dev"
}
},
"autoload": {
@ -2006,30 +2016,30 @@
"uri",
"url"
],
"time": "2019-07-01 23:21:34"
"time": "2020-09-30 07:37:11"
},
{
"name": "incenteev/composer-parameter-handler",
"version": "v2.1.3",
"version": "v2.1.4",
"source": {
"type": "git",
"url": "https://github.com/Incenteev/ParameterHandler.git",
"reference": "933c45a34814f27f2345c11c37d46b3ca7303550"
"reference": "084befb11ec21faeadcddefb88b66132775ff59b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/933c45a34814f27f2345c11c37d46b3ca7303550",
"reference": "933c45a34814f27f2345c11c37d46b3ca7303550",
"url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/084befb11ec21faeadcddefb88b66132775ff59b",
"reference": "084befb11ec21faeadcddefb88b66132775ff59b",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"symfony/yaml": "^2.3 || ^3.0 || ^4.0"
"symfony/yaml": "^2.3 || ^3.0 || ^4.0 || ^5.0"
},
"require-dev": {
"composer/composer": "^1.0@dev",
"symfony/filesystem": "^2.3 || ^3 || ^4",
"symfony/phpunit-bridge": "^4.0"
"symfony/filesystem": "^2.3 || ^3 || ^4 || ^5",
"symfony/phpunit-bridge": "^4.0 || ^5.0"
},
"type": "library",
"extra": {
@ -2057,28 +2067,30 @@
"keywords": [
"parameters management"
],
"time": "2018-02-13 18:05:56"
"time": "2020-03-17 21:10:00"
},
{
"name": "jasig/phpcas",
"version": "1.3.8",
"version": "1.3.9",
"source": {
"type": "git",
"url": "https://github.com/apereo/phpCAS.git",
"reference": "40c0769ce05a30c8172b36ceab11124375c8366e"
"reference": "7325865c4cfb5005ed4e4c5cf01823be1726a2a0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/apereo/phpCAS/zipball/40c0769ce05a30c8172b36ceab11124375c8366e",
"reference": "40c0769ce05a30c8172b36ceab11124375c8366e",
"url": "https://api.github.com/repos/apereo/phpCAS/zipball/7325865c4cfb5005ed4e4c5cf01823be1726a2a0",
"reference": "7325865c4cfb5005ed4e4c5cf01823be1726a2a0",
"shasum": ""
},
"require": {
"ext-curl": "*",
"php": ">=5.4.0"
"php": ">=5.4.0",
"psr/log": "^1.0.0"
},
"require-dev": {
"phpunit/phpunit": "~3.7.10"
"monolog/monolog": "^1.0.0",
"phpunit/phpunit": ">=4.8.35 <8"
},
"type": "library",
"extra": {
@ -2112,7 +2124,7 @@
"cas",
"jasig"
],
"time": "2019-08-18 20:01:55"
"time": "2021-01-31 21:13:59"
},
{
"name": "jdorn/sql-formatter",
@ -2455,16 +2467,16 @@
},
{
"name": "monolog/monolog",
"version": "1.25.2",
"version": "1.26.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
"reference": "d5e2fb341cb44f7e2ab639d12a1e5901091ec287"
"reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/d5e2fb341cb44f7e2ab639d12a1e5901091ec287",
"reference": "d5e2fb341cb44f7e2ab639d12a1e5901091ec287",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/2209ddd84e7ef1256b7af205d0717fb62cfc9c33",
"reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33",
"shasum": ""
},
"require": {
@ -2478,11 +2490,10 @@
"aws/aws-sdk-php": "^2.4.9 || ^3.0",
"doctrine/couchdb": "~1.0@dev",
"graylog2/gelf-php": "~1.0",
"jakub-onderka/php-parallel-lint": "0.9",
"php-amqplib/php-amqplib": "~2.4",
"php-console/php-console": "^3.1.3",
"phpstan/phpstan": "^0.12.59",
"phpunit/phpunit": "~4.5",
"phpunit/phpunit-mock-objects": "2.3.0",
"ruflin/elastica": ">=0.90 <3.0",
"sentry/sentry": "^0.13",
"swiftmailer/swiftmailer": "^5.3|^6.0"
@ -2501,11 +2512,6 @@
"sentry/sentry": "Allow sending log messages to a Sentry server"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Monolog\\": "src/Monolog"
@ -2529,7 +2535,7 @@
"logging",
"psr-3"
],
"time": "2019-11-13 10:00:05"
"time": "2020-12-14 12:56:38"
},
{
"name": "ocramius/proxy-manager",
@ -2596,17 +2602,17 @@
},
{
"name": "oneup/uploader-bundle",
"version": "1.9.2",
"version": "1.9.4",
"target-dir": "Oneup/UploaderBundle",
"source": {
"type": "git",
"url": "https://github.com/1up-lab/OneupUploaderBundle.git",
"reference": "a32bc98019abfd51531d08cc79be19f849d87b84"
"reference": "8a6dc57c35e12fbc341e52e401a1d286475ec445"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/1up-lab/OneupUploaderBundle/zipball/a32bc98019abfd51531d08cc79be19f849d87b84",
"reference": "a32bc98019abfd51531d08cc79be19f849d87b84",
"url": "https://api.github.com/repos/1up-lab/OneupUploaderBundle/zipball/8a6dc57c35e12fbc341e52e401a1d286475ec445",
"reference": "8a6dc57c35e12fbc341e52e401a1d286475ec445",
"shasum": ""
},
"require": {
@ -2667,20 +2673,20 @@
"plupload",
"upload"
],
"time": "2017-12-18 12:41:59"
"time": "2020-02-04 12:08:35"
},
{
"name": "paragonie/random_compat",
"version": "v2.0.18",
"version": "v2.0.19",
"source": {
"type": "git",
"url": "https://github.com/paragonie/random_compat.git",
"reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db"
"reference": "446fc9faa5c2a9ddf65eb7121c0af7e857295241"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/0a58ef6e3146256cc3dc7cc393927bcc7d1b72db",
"reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db",
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/446fc9faa5c2a9ddf65eb7121c0af7e857295241",
"reference": "446fc9faa5c2a9ddf65eb7121c0af7e857295241",
"shasum": ""
},
"require": {
@ -2716,7 +2722,7 @@
"pseudorandom",
"random"
],
"time": "2019-01-03 20:59:08"
"time": "2020-10-15 10:06:57"
},
{
"name": "psr/cache",
@ -2914,16 +2920,16 @@
},
{
"name": "psr/log",
"version": "1.1.2",
"version": "1.1.3",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
"reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
"url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
"reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
"shasum": ""
},
"require": {
@ -2957,7 +2963,7 @@
"psr",
"psr-3"
],
"time": "2019-11-01 11:05:21"
"time": "2020-03-23 09:12:05"
},
{
"name": "psr/simple-cache",
@ -3049,44 +3055,46 @@
},
{
"name": "ramsey/uuid",
"version": "3.8.0",
"version": "3.9.3",
"source": {
"type": "git",
"url": "https://github.com/ramsey/uuid.git",
"reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3"
"reference": "7e1633a6964b48589b142d60542f9ed31bd37a92"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3",
"reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3",
"url": "https://api.github.com/repos/ramsey/uuid/zipball/7e1633a6964b48589b142d60542f9ed31bd37a92",
"reference": "7e1633a6964b48589b142d60542f9ed31bd37a92",
"shasum": ""
},
"require": {
"paragonie/random_compat": "^1.0|^2.0|9.99.99",
"php": "^5.4 || ^7.0",
"ext-json": "*",
"paragonie/random_compat": "^1 | ^2 | 9.99.99",
"php": "^5.4 | ^7 | ^8",
"symfony/polyfill-ctype": "^1.8"
},
"replace": {
"rhumsaa/uuid": "self.version"
},
"require-dev": {
"codeception/aspect-mock": "^1.0 | ~2.0.0",
"doctrine/annotations": "~1.2.0",
"goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0",
"ircmaxell/random-lib": "^1.1",
"jakub-onderka/php-parallel-lint": "^0.9.0",
"mockery/mockery": "^0.9.9",
"codeception/aspect-mock": "^1 | ^2",
"doctrine/annotations": "^1.2",
"goaop/framework": "1.0.0-alpha.2 | ^1 | ^2.1",
"jakub-onderka/php-parallel-lint": "^1",
"mockery/mockery": "^0.9.11 | ^1",
"moontoast/math": "^1.1",
"php-mock/php-mock-phpunit": "^0.3|^1.1",
"phpunit/phpunit": "^4.7|^5.0|^6.5",
"squizlabs/php_codesniffer": "^2.3"
"paragonie/random-lib": "^2",
"php-mock/php-mock-phpunit": "^0.3 | ^1.1",
"phpunit/phpunit": "^4.8 | ^5.4 | ^6.5",
"squizlabs/php_codesniffer": "^3.5"
},
"suggest": {
"ext-ctype": "Provides support for PHP Ctype functions",
"ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator",
"ext-openssl": "Provides the OpenSSL extension for use with the OpenSslGenerator",
"ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator",
"ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
"moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).",
"paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
"ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid",
"ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
},
@ -3099,13 +3107,21 @@
"autoload": {
"psr-4": {
"Ramsey\\Uuid\\": "src/"
}
},
"files": [
"src/functions.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ben Ramsey",
"email": "ben@benramsey.com",
"homepage": "https://benramsey.com"
},
{
"name": "Marijn Huizendveld",
"email": "marijn.huizendveld@gmail.com"
@ -3113,11 +3129,6 @@
{
"name": "Thibaud Fabre",
"email": "thibaud@aztech.io"
},
{
"name": "Ben Ramsey",
"email": "ben@benramsey.com",
"homepage": "https://benramsey.com"
}
],
"description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).",
@ -3127,20 +3138,20 @@
"identifier",
"uuid"
],
"time": "2018-07-19 23:38:55"
"time": "2020-02-21 04:36:14"
},
{
"name": "ratchet/rfc6455",
"version": "v0.2.5",
"version": "v0.3",
"source": {
"type": "git",
"url": "https://github.com/ratchetphp/RFC6455.git",
"reference": "c62f7cd95ffbb6e94fd657be694fc7372ecd6e62"
"reference": "c8651c7938651c2d55f5d8c2422ac5e57a183341"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ratchetphp/RFC6455/zipball/c62f7cd95ffbb6e94fd657be694fc7372ecd6e62",
"reference": "c62f7cd95ffbb6e94fd657be694fc7372ecd6e62",
"url": "https://api.github.com/repos/ratchetphp/RFC6455/zipball/c8651c7938651c2d55f5d8c2422ac5e57a183341",
"reference": "c8651c7938651c2d55f5d8c2422ac5e57a183341",
"shasum": ""
},
"require": {
@ -3148,9 +3159,8 @@
"php": ">=5.4.2"
},
"require-dev": {
"phpunit/phpunit": "4.8.*",
"react/http": "^0.4.1",
"react/socket-client": "^0.4.3"
"phpunit/phpunit": "5.7.*",
"react/socket": "^1.3"
},
"type": "library",
"autoload": {
@ -3167,6 +3177,10 @@
"name": "Chris Boden",
"email": "cboden@gmail.com",
"role": "Developer"
},
{
"name": "Matt Bonneau",
"role": "Developer"
}
],
"description": "RFC6455 WebSocket protocol handler",
@ -3176,28 +3190,28 @@
"rfc6455",
"websocket"
],
"time": "2019-03-10 17:10:42"
"time": "2020-05-15 18:31:24"
},
{
"name": "react/cache",
"version": "v1.0.0",
"version": "v1.1.1",
"source": {
"type": "git",
"url": "https://github.com/reactphp/cache.git",
"reference": "aa10d63a1b40a36a486bdf527f28bac607ee6466"
"reference": "4bf736a2cccec7298bdf745db77585966fc2ca7e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/cache/zipball/aa10d63a1b40a36a486bdf527f28bac607ee6466",
"reference": "aa10d63a1b40a36a486bdf527f28bac607ee6466",
"url": "https://api.github.com/repos/reactphp/cache/zipball/4bf736a2cccec7298bdf745db77585966fc2ca7e",
"reference": "4bf736a2cccec7298bdf745db77585966fc2ca7e",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"react/promise": "~2.0|~1.1"
"react/promise": "^3.0 || ^2.0 || ^1.1"
},
"require-dev": {
"phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35"
"phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35"
},
"type": "library",
"autoload": {
@ -3209,6 +3223,28 @@
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@clue.engineering",
"homepage": "https://clue.engineering/"
},
{
"name": "Cees-Jan Kiewiet",
"email": "reactphp@ceesjankiewiet.nl",
"homepage": "https://wyrihaximus.net/"
},
{
"name": "Jan Sorgalla",
"email": "jsorgalla@gmail.com",
"homepage": "https://sorgalla.com/"
},
{
"name": "Chris Boden",
"email": "cboden@gmail.com",
"homepage": "https://cboden.dev/"
}
],
"description": "Async, Promise-based cache interface for ReactPHP",
"keywords": [
"cache",
@ -3216,32 +3252,32 @@
"promise",
"reactphp"
],
"time": "2019-07-11 13:45:28"
"time": "2021-02-02 06:47:52"
},
{
"name": "react/dns",
"version": "v1.2.0",
"version": "v1.4.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/dns.git",
"reference": "a214d90c2884dac18d0cac6176202f247b66d762"
"reference": "665260757171e2ab17485b44e7ffffa7acb6ca1f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/dns/zipball/a214d90c2884dac18d0cac6176202f247b66d762",
"reference": "a214d90c2884dac18d0cac6176202f247b66d762",
"url": "https://api.github.com/repos/reactphp/dns/zipball/665260757171e2ab17485b44e7ffffa7acb6ca1f",
"reference": "665260757171e2ab17485b44e7ffffa7acb6ca1f",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"react/cache": "^1.0 || ^0.6 || ^0.5",
"react/event-loop": "^1.0 || ^0.5",
"react/promise": "^2.7 || ^1.2.1",
"react/promise": "^3.0 || ^2.7 || ^1.2.1",
"react/promise-timer": "^1.2"
},
"require-dev": {
"clue/block-react": "^1.2",
"phpunit/phpunit": "^7.0 || ^6.4 || ^5.7 || ^4.8.35"
"phpunit/phpunit": "^9.3 || ^4.8.35"
},
"type": "library",
"autoload": {
@ -3253,6 +3289,28 @@
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@clue.engineering",
"homepage": "https://clue.engineering/"
},
{
"name": "Cees-Jan Kiewiet",
"email": "reactphp@ceesjankiewiet.nl",
"homepage": "https://wyrihaximus.net/"
},
{
"name": "Jan Sorgalla",
"email": "jsorgalla@gmail.com",
"homepage": "https://sorgalla.com/"
},
{
"name": "Chris Boden",
"email": "cboden@gmail.com",
"homepage": "https://cboden.dev/"
}
],
"description": "Async DNS resolver for ReactPHP",
"keywords": [
"async",
@ -3260,7 +3318,7 @@
"dns-resolver",
"reactphp"
],
"time": "2019-08-15 09:06:31"
"time": "2020-09-18 12:12:55"
},
{
"name": "react/event-loop",
@ -3305,23 +3363,23 @@
},
{
"name": "react/promise",
"version": "v2.7.1",
"version": "v2.8.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/promise.git",
"reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d"
"reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/promise/zipball/31ffa96f8d2ed0341a57848cbb84d88b89dd664d",
"reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d",
"url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4",
"reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4",
"shasum": ""
},
"require": {
"php": ">=5.4.0"
},
"require-dev": {
"phpunit/phpunit": "~4.8"
"phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36"
},
"type": "library",
"autoload": {
@ -3347,29 +3405,29 @@
"promise",
"promises"
],
"time": "2019-01-07 21:25:54"
"time": "2020-05-12 15:16:56"
},
{
"name": "react/promise-timer",
"version": "v1.5.1",
"version": "v1.6.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/promise-timer.git",
"reference": "35fb910604fd86b00023fc5cda477c8074ad0abc"
"reference": "daee9baf6ef30c43ea4c86399f828bb5f558f6e6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/promise-timer/zipball/35fb910604fd86b00023fc5cda477c8074ad0abc",
"reference": "35fb910604fd86b00023fc5cda477c8074ad0abc",
"url": "https://api.github.com/repos/reactphp/promise-timer/zipball/daee9baf6ef30c43ea4c86399f828bb5f558f6e6",
"reference": "daee9baf6ef30c43ea4c86399f828bb5f558f6e6",
"shasum": ""
},
"require": {
"php": ">=5.3",
"react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5",
"react/promise": "^2.7.0 || ^1.2.1"
"react/promise": "^3.0 || ^2.7.0 || ^1.2.1"
},
"require-dev": {
"phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35"
"phpunit/phpunit": "^9.0 || ^5.7 || ^4.8.35"
},
"type": "library",
"autoload": {
@ -3400,34 +3458,35 @@
"timeout",
"timer"
],
"time": "2019-03-27 18:10:32"
"time": "2020-07-10 12:18:06"
},
{
"name": "react/socket",
"version": "v1.3.0",
"version": "v1.6.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/socket.git",
"reference": "10f0629ec83ea0fa22597f348623f554227e3ca0"
"reference": "e2b96b23a13ca9b41ab343268dbce3f8ef4d524a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/socket/zipball/10f0629ec83ea0fa22597f348623f554227e3ca0",
"reference": "10f0629ec83ea0fa22597f348623f554227e3ca0",
"url": "https://api.github.com/repos/reactphp/socket/zipball/e2b96b23a13ca9b41ab343268dbce3f8ef4d524a",
"reference": "e2b96b23a13ca9b41ab343268dbce3f8ef4d524a",
"shasum": ""
},
"require": {
"evenement/evenement": "^3.0 || ^2.0 || ^1.0",
"php": ">=5.3.0",
"react/dns": "^1.0 || ^0.4.13",
"react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5",
"react/dns": "^1.1",
"react/event-loop": "^1.0 || ^0.5",
"react/promise": "^2.6.0 || ^1.2.1",
"react/promise-timer": "^1.4.0",
"react/stream": "^1.1"
},
"require-dev": {
"clue/block-react": "^1.2",
"phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35"
"phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35",
"react/promise-stream": "^1.2"
},
"type": "library",
"autoload": {
@ -3439,6 +3498,28 @@
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@clue.engineering",
"homepage": "https://clue.engineering/"
},
{
"name": "Cees-Jan Kiewiet",
"email": "reactphp@ceesjankiewiet.nl",
"homepage": "https://wyrihaximus.net/"
},
{
"name": "Jan Sorgalla",
"email": "jsorgalla@gmail.com",
"homepage": "https://sorgalla.com/"
},
{
"name": "Chris Boden",
"email": "cboden@gmail.com",
"homepage": "https://cboden.dev/"
}
],
"description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP",
"keywords": [
"Connection",
@ -3447,20 +3528,20 @@
"reactphp",
"stream"
],
"time": "2019-07-10 10:11:14"
"time": "2020-08-28 12:49:05"
},
{
"name": "react/stream",
"version": "v1.1.0",
"version": "v1.1.1",
"source": {
"type": "git",
"url": "https://github.com/reactphp/stream.git",
"reference": "50426855f7a77ddf43b9266c22320df5bf6c6ce6"
"reference": "7c02b510ee3f582c810aeccd3a197b9c2f52ff1a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/stream/zipball/50426855f7a77ddf43b9266c22320df5bf6c6ce6",
"reference": "50426855f7a77ddf43b9266c22320df5bf6c6ce6",
"url": "https://api.github.com/repos/reactphp/stream/zipball/7c02b510ee3f582c810aeccd3a197b9c2f52ff1a",
"reference": "7c02b510ee3f582c810aeccd3a197b9c2f52ff1a",
"shasum": ""
},
"require": {
@ -3470,7 +3551,7 @@
},
"require-dev": {
"clue/stream-filter": "~1.2",
"phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35"
"phpunit/phpunit": "^7.0 || ^6.4 || ^5.7 || ^4.8.35"
},
"type": "library",
"autoload": {
@ -3493,20 +3574,20 @@
"stream",
"writable"
],
"time": "2019-01-01 16:15:09"
"time": "2020-05-04 10:17:57"
},
{
"name": "robrichards/xmlseclibs",
"version": "3.0.4",
"version": "3.1.1",
"source": {
"type": "git",
"url": "https://github.com/robrichards/xmlseclibs.git",
"reference": "0a53d3c3aa87564910cae4ed01416441d3ae0db5"
"reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/0a53d3c3aa87564910cae4ed01416441d3ae0db5",
"reference": "0a53d3c3aa87564910cae4ed01416441d3ae0db5",
"url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/f8f19e58f26cdb42c54b214ff8a820760292f8df",
"reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df",
"shasum": ""
},
"require": {
@ -3531,7 +3612,7 @@
"xml",
"xmldsig"
],
"time": "2019-11-05 11:44:22"
"time": "2020-09-05 13:00:25"
},
{
"name": "sensio/distribution-bundle",
@ -3828,16 +3909,16 @@
},
{
"name": "symfony/monolog-bundle",
"version": "v3.5.0",
"version": "v3.6.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/monolog-bundle.git",
"reference": "dd80460fcfe1fa2050a7103ad818e9d0686ce6fd"
"reference": "e495f5c7e4e672ffef4357d4a4d85f010802f940"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/dd80460fcfe1fa2050a7103ad818e9d0686ce6fd",
"reference": "dd80460fcfe1fa2050a7103ad818e9d0686ce6fd",
"url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/e495f5c7e4e672ffef4357d4a4d85f010802f940",
"reference": "e495f5c7e4e672ffef4357d4a4d85f010802f940",
"shasum": ""
},
"require": {
@ -3850,7 +3931,7 @@
},
"require-dev": {
"symfony/console": "~3.4 || ~4.0 || ^5.0",
"symfony/phpunit-bridge": "^3.4.19 || ^4.0 || ^5.0",
"symfony/phpunit-bridge": "^4.4 || ^5.0",
"symfony/yaml": "~3.4 || ~4.0 || ^5.0"
},
"type": "symfony-bundle",
@ -3887,27 +3968,26 @@
"log",
"logging"
],
"time": "2019-11-13 13:11:14"
"time": "2020-10-06 15:12:11"
},
{
"name": "symfony/orm-pack",
"version": "v1.0.7",
"version": "v1.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/orm-pack.git",
"reference": "c57f5e05232ca40626eb9fa52a32bc8565e9231c"
"reference": "c9bcc08102061f406dc908192c0f33524a675666"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/orm-pack/zipball/c57f5e05232ca40626eb9fa52a32bc8565e9231c",
"reference": "c57f5e05232ca40626eb9fa52a32bc8565e9231c",
"url": "https://api.github.com/repos/symfony/orm-pack/zipball/c9bcc08102061f406dc908192c0f33524a675666",
"reference": "c9bcc08102061f406dc908192c0f33524a675666",
"shasum": ""
},
"require": {
"doctrine/doctrine-bundle": "^1.6.10|^2.0",
"doctrine/doctrine-migrations-bundle": "^1.3|^2.0",
"doctrine/orm": "^2.5.11",
"php": "^7.0"
"doctrine/doctrine-bundle": "*",
"doctrine/doctrine-migrations-bundle": "*",
"doctrine/orm": "*"
},
"type": "symfony-pack",
"notification-url": "https://packagist.org/downloads/",
@ -3915,20 +3995,20 @@
"MIT"
],
"description": "A pack for the Doctrine ORM",
"time": "2019-10-18 05:41:09"
"time": "2020-02-10 18:03:48"
},
{
"name": "symfony/polyfill-apcu",
"version": "v1.12.0",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-apcu.git",
"reference": "71ce80635d5dcd67772b4dda00b86068595f64d5"
"reference": "b44b51e7814c23bfbd793a16ead5d7ce43ed23c5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/71ce80635d5dcd67772b4dda00b86068595f64d5",
"reference": "71ce80635d5dcd67772b4dda00b86068595f64d5",
"url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/b44b51e7814c23bfbd793a16ead5d7ce43ed23c5",
"reference": "b44b51e7814c23bfbd793a16ead5d7ce43ed23c5",
"shasum": ""
},
"require": {
@ -3937,7 +4017,11 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -3971,20 +4055,20 @@
"portable",
"shim"
],
"time": "2019-08-06 08:03:45"
"time": "2020-10-21 09:57:48"
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.12.0",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "550ebaac289296ce228a706d0867afc34687e3f4"
"reference": "aed596913b70fae57be53d86faa2e9ef85a2297b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4",
"reference": "550ebaac289296ce228a706d0867afc34687e3f4",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/aed596913b70fae57be53d86faa2e9ef85a2297b",
"reference": "aed596913b70fae57be53d86faa2e9ef85a2297b",
"shasum": ""
},
"require": {
@ -3996,7 +4080,11 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -4029,20 +4117,20 @@
"polyfill",
"portable"
],
"time": "2019-08-06 08:03:45"
"time": "2020-10-23 09:01:57"
},
{
"name": "symfony/polyfill-intl-icu",
"version": "v1.12.0",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-icu.git",
"reference": "66810b9d6eb4af54d543867909d65ab9af654d7e"
"reference": "f740dd60a5b5f1511229e107f7e59f404b102084"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/66810b9d6eb4af54d543867909d65ab9af654d7e",
"reference": "66810b9d6eb4af54d543867909d65ab9af654d7e",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/f740dd60a5b5f1511229e107f7e59f404b102084",
"reference": "f740dd60a5b5f1511229e107f7e59f404b102084",
"shasum": ""
},
"require": {
@ -4055,7 +4143,11 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -4087,20 +4179,158 @@
"portable",
"shim"
],
"time": "2019-08-06 08:03:45"
"time": "2020-10-23 09:01:57"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.12.0",
"name": "symfony/polyfill-intl-idn",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17"
"url": "https://github.com/symfony/polyfill-intl-idn.git",
"reference": "4ad5115c0f5d5172a9fe8147675ec6de266d8826"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b42a2f66e8f1b15ccf25652c3424265923eb4f17",
"reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17",
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/4ad5115c0f5d5172a9fe8147675ec6de266d8826",
"reference": "4ad5115c0f5d5172a9fe8147675ec6de266d8826",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"symfony/polyfill-intl-normalizer": "^1.10",
"symfony/polyfill-php70": "^1.10",
"symfony/polyfill-php72": "^1.10"
},
"suggest": {
"ext-intl": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Intl\\Idn\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Laurent Bassin",
"email": "laurent@bassin.info"
},
{
"name": "Trevor Rowbotham",
"email": "trevor.rowbotham@pm.me"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"idn",
"intl",
"polyfill",
"portable",
"shim"
],
"time": "2020-10-21 09:57:48"
},
{
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
"reference": "8db0ae7936b42feb370840cf24de1a144fb0ef27"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8db0ae7936b42feb370840cf24de1a144fb0ef27",
"reference": "8db0ae7936b42feb370840cf24de1a144fb0ef27",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"suggest": {
"ext-intl": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Intl\\Normalizer\\": ""
},
"files": [
"bootstrap.php"
],
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for intl's Normalizer class and related functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"intl",
"normalizer",
"polyfill",
"portable",
"shim"
],
"time": "2020-10-23 09:01:57"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "b5f7b932ee6fa802fc792eabd77c4c88084517ce"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b5f7b932ee6fa802fc792eabd77c4c88084517ce",
"reference": "b5f7b932ee6fa802fc792eabd77c4c88084517ce",
"shasum": ""
},
"require": {
@ -4112,7 +4342,11 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -4146,20 +4380,20 @@
"portable",
"shim"
],
"time": "2019-08-06 08:03:45"
"time": "2020-10-23 09:01:57"
},
{
"name": "symfony/polyfill-php56",
"version": "v1.12.0",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php56.git",
"reference": "0e3b212e96a51338639d8ce175c046d7729c3403"
"reference": "ea19621731cbd973a6702cfedef3419768bf3372"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/0e3b212e96a51338639d8ce175c046d7729c3403",
"reference": "0e3b212e96a51338639d8ce175c046d7729c3403",
"url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/ea19621731cbd973a6702cfedef3419768bf3372",
"reference": "ea19621731cbd973a6702cfedef3419768bf3372",
"shasum": ""
},
"require": {
@ -4169,7 +4403,11 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -4202,20 +4440,20 @@
"portable",
"shim"
],
"time": "2019-08-06 08:03:45"
"time": "2020-10-23 09:01:57"
},
{
"name": "symfony/polyfill-php70",
"version": "v1.12.0",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php70.git",
"reference": "54b4c428a0054e254223797d2713c31e08610831"
"reference": "3fe414077251a81a1b15b1c709faf5c2fbae3d4e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/54b4c428a0054e254223797d2713c31e08610831",
"reference": "54b4c428a0054e254223797d2713c31e08610831",
"url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/3fe414077251a81a1b15b1c709faf5c2fbae3d4e",
"reference": "3fe414077251a81a1b15b1c709faf5c2fbae3d4e",
"shasum": ""
},
"require": {
@ -4225,7 +4463,11 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -4261,20 +4503,20 @@
"portable",
"shim"
],
"time": "2019-08-06 08:03:45"
"time": "2020-10-23 09:01:57"
},
{
"name": "symfony/polyfill-util",
"version": "v1.12.0",
"name": "symfony/polyfill-php72",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-util.git",
"reference": "4317de1386717b4c22caed7725350a8887ab205c"
"url": "https://github.com/symfony/polyfill-php72.git",
"reference": "beecef6b463b06954638f02378f52496cb84bacc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-util/zipball/4317de1386717b4c22caed7725350a8887ab205c",
"reference": "4317de1386717b4c22caed7725350a8887ab205c",
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/beecef6b463b06954638f02378f52496cb84bacc",
"reference": "beecef6b463b06954638f02378f52496cb84bacc",
"shasum": ""
},
"require": {
@ -4283,7 +4525,70 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Php72\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"time": "2020-10-23 09:01:57"
},
{
"name": "symfony/polyfill-util",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-util.git",
"reference": "8df0c3e6a4b85df9a5c6f3f2f46fba5c5c47058a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-util/zipball/8df0c3e6a4b85df9a5c6f3f2f46fba5c5c47058a",
"reference": "8df0c3e6a4b85df9a5c6f3f2f46fba5c5c47058a",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -4313,7 +4618,7 @@
"polyfill",
"shim"
],
"time": "2019-08-06 08:03:45"
"time": "2020-10-21 09:57:48"
},
{
"name": "symfony/swiftmailer-bundle",
@ -4376,16 +4681,16 @@
},
{
"name": "symfony/symfony",
"version": "v3.4.35",
"version": "v3.4.47",
"source": {
"type": "git",
"url": "https://github.com/symfony/symfony.git",
"reference": "2adc85d49cbe14e346068fa7e9c2e1f08ab31de6"
"reference": "83093d5448a7b90fd4cbcce38580ae53898f506f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/symfony/zipball/2adc85d49cbe14e346068fa7e9c2e1f08ab31de6",
"reference": "2adc85d49cbe14e346068fa7e9c2e1f08ab31de6",
"url": "https://api.github.com/repos/symfony/symfony/zipball/83093d5448a7b90fd4cbcce38580ae53898f506f",
"reference": "83093d5448a7b90fd4cbcce38580ae53898f506f",
"shasum": ""
},
"require": {
@ -4407,6 +4712,7 @@
"twig/twig": "^1.41|^2.10"
},
"conflict": {
"monolog/monolog": ">=2",
"phpdocumentor/reflection-docblock": "<3.0||>=3.2.0,<3.2.2",
"phpdocumentor/type-resolver": "<0.3.0",
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0"
@ -4474,7 +4780,7 @@
"cache/integration-tests": "dev-master",
"doctrine/annotations": "~1.0",
"doctrine/cache": "~1.6",
"doctrine/data-fixtures": "1.0.*",
"doctrine/data-fixtures": "^1.1",
"doctrine/dbal": "~2.4",
"doctrine/doctrine-bundle": "~1.4",
"doctrine/orm": "~2.4,>=2.4.5",
@ -4483,14 +4789,12 @@
"ocramius/proxy-manager": "~0.4|~1.0|~2.0",
"phpdocumentor/reflection-docblock": "^3.0|^4.0",
"predis/predis": "~1.0",
"symfony/phpunit-bridge": "^3.4.31|^4.3.4|~5.0",
"symfony/phpunit-bridge": "^5.2",
"symfony/security-acl": "~2.8|~3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.4-dev"
}
"branch-version": "3.4"
},
"autoload": {
"psr-4": {
@ -4527,7 +4831,7 @@
"keywords": [
"framework"
],
"time": "2019-11-13 08:45:05"
"time": "2020-11-27 08:43:16"
},
{
"name": "tetranz/select2entity-bundle",
@ -4578,19 +4882,21 @@
},
{
"name": "thecsea/simple-caldav-client",
"version": "v0.1.10",
"version": "v0.1.14",
"source": {
"type": "git",
"url": "https://github.com/thecsea/simpleCalDAV.git",
"reference": "dae70da0dacd0c8a1e184fbc91ecbe6f7fa5dea9"
"reference": "542eda99c5a18c04b3701ebda9ce8d3eb0db7728"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thecsea/simpleCalDAV/zipball/dae70da0dacd0c8a1e184fbc91ecbe6f7fa5dea9",
"reference": "dae70da0dacd0c8a1e184fbc91ecbe6f7fa5dea9",
"url": "https://api.github.com/repos/thecsea/simpleCalDAV/zipball/542eda99c5a18c04b3701ebda9ce8d3eb0db7728",
"reference": "542eda99c5a18c04b3701ebda9ce8d3eb0db7728",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-xml": "*",
"php": ">=5.3.0"
},
"type": "library",
@ -4617,20 +4923,20 @@
"Simple",
"client"
],
"time": "2019-04-25 19:55:16"
"time": "2020-09-28 11:55:52"
},
{
"name": "twig/twig",
"version": "v2.12.2",
"version": "v2.12.5",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "d761fd1f1c6b867ae09a7d8119a6d95d06dc44ed"
"reference": "18772e0190734944277ee97a02a9a6c6555fcd94"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/d761fd1f1c6b867ae09a7d8119a6d95d06dc44ed",
"reference": "d761fd1f1c6b867ae09a7d8119a6d95d06dc44ed",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/18772e0190734944277ee97a02a9a6c6555fcd94",
"reference": "18772e0190734944277ee97a02a9a6c6555fcd94",
"shasum": ""
},
"require": {
@ -4640,8 +4946,7 @@
},
"require-dev": {
"psr/container": "^1.0",
"symfony/debug": "^3.4|^4.2",
"symfony/phpunit-bridge": "^4.4@dev|^5.0"
"symfony/phpunit-bridge": "^4.4|^5.0"
},
"type": "library",
"extra": {
@ -4670,7 +4975,6 @@
},
{
"name": "Twig Team",
"homepage": "https://twig.symfony.com/contributors",
"role": "Contributors"
},
{
@ -4684,7 +4988,7 @@
"keywords": [
"templating"
],
"time": "2019-11-11 16:52:09"
"time": "2020-02-11 15:31:23"
},
{
"name": "zendframework/zend-code",
@ -4796,16 +5100,16 @@
"packages-dev": [
{
"name": "nikic/php-parser",
"version": "v4.3.0",
"version": "v4.10.4",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
"reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc"
"reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/9a9981c347c5c49d6dfe5cf826bb882b824080dc",
"reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e",
"reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e",
"shasum": ""
},
"require": {
@ -4813,8 +5117,8 @@
"php": ">=7.0"
},
"require-dev": {
"ircmaxell/php-yacc": "0.0.5",
"phpunit/phpunit": "^6.5 || ^7.0 || ^8.0"
"ircmaxell/php-yacc": "^0.0.7",
"phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
},
"bin": [
"bin/php-parse"
@ -4822,7 +5126,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.3-dev"
"dev-master": "4.9-dev"
}
},
"autoload": {
@ -4844,7 +5148,7 @@
"parser",
"php"
],
"time": "2019-11-08 13:50:10"
"time": "2020-12-20 10:01:03"
},
{
"name": "sensio/generator-bundle",
@ -4902,16 +5206,16 @@
},
{
"name": "symfony/maker-bundle",
"version": "v1.14.3",
"version": "v1.16.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/maker-bundle.git",
"reference": "c864e7f9b8d1e1f5f60acc3beda11299f637aded"
"reference": "c8b36ce2aac3635603b4ffc58fbc26717e0a7317"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/maker-bundle/zipball/c864e7f9b8d1e1f5f60acc3beda11299f637aded",
"reference": "c864e7f9b8d1e1f5f60acc3beda11299f637aded",
"url": "https://api.github.com/repos/symfony/maker-bundle/zipball/c8b36ce2aac3635603b4ffc58fbc26717e0a7317",
"reference": "c8b36ce2aac3635603b4ffc58fbc26717e0a7317",
"shasum": ""
},
"require": {
@ -4966,27 +5270,27 @@
"scaffold",
"scaffolding"
],
"time": "2019-11-07 00:56:03"
"time": "2020-05-05 14:21:24"
},
{
"name": "symfony/phpunit-bridge",
"version": "v3.4.35",
"version": "v3.4.47",
"source": {
"type": "git",
"url": "https://github.com/symfony/phpunit-bridge.git",
"reference": "cbea8818e9f34e4e9d780bd22bdda21b57d4d5c7"
"reference": "120273ad5d03a8deee08ca9260e2598f288f2bac"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/cbea8818e9f34e4e9d780bd22bdda21b57d4d5c7",
"reference": "cbea8818e9f34e4e9d780bd22bdda21b57d4d5c7",
"url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/120273ad5d03a8deee08ca9260e2598f288f2bac",
"reference": "120273ad5d03a8deee08ca9260e2598f288f2bac",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"conflict": {
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0"
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0|<6.4,>=6.0|9.1.2"
},
"suggest": {
"symfony/debug": "For tracking deprecated interfaces usages at runtime with DebugClassLoader"
@ -4996,9 +5300,6 @@
],
"type": "symfony-bridge",
"extra": {
"branch-alias": {
"dev-master": "3.4-dev"
},
"thanks": {
"name": "phpunit/phpunit",
"url": "https://github.com/sebastianbergmann/phpunit"
@ -5031,7 +5332,7 @@
],
"description": "Symfony PHPUnit Bridge",
"homepage": "https://symfony.com",
"time": "2019-09-30 20:33:19"
"time": "2020-11-13 16:28:59"
}
],
"aliases": [],
@ -5042,8 +5343,5 @@
"platform": {
"php": ">=7"
},
"platform-dev": [],
"platform-overrides": {
"php": "7.0.30"
}
"platform-dev": []
}

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

@ -8,7 +8,7 @@ INSERT IGNORE INTO `niveau01` (`id`, `label`, `siren`) VALUES
(-100, 'Interne', 'SIREN');
INSERT IGNORE INTO `user` (`id`, `niveau01_id`, `username`, `firstname`, `lastname`, `password`, `email`, `avatar`, `role`,`siren`,`authlevel`) VALUES
(-100, -100, 'admin', 'Administrateur', 'draaf', '{SSHA}lfWLOzsWTTGkrbaPndkzPSiFKH078TmD
(-100, -100, 'admin', 'Administrateur', 'draaf', '{SSHA}yiDxhDNog19bkfbdXAX1PH2iZWUu5eGy
', 'admin@ldapbundle.ac-arno.fr', 'admin.jpg', 'ROLE_ADMIN', '130007107', 'simple');

View File

@ -0,0 +1,57 @@
#!/bin/bash
echo "INSTALLATION NINEGATE HORS EOLE"
cd /var/www/html/ninegate
www_dir="/var/www/html"
yes | cp scripts/apache/ninegate.conf /etc/apache2/sites-available/
a2ensite ninegate
service apache2 restart
# Récuper les composer associés à la version de php installé
version72=`php -r 'echo version_compare(phpversion(), "7.2.0", ">=");'`
if [[ "$version72" == "1" ]]
then
cp -rf /var/www/html/ninegate/scripts/php72/composer.json /var/www/html/ninegate/composer.json
cp -rf /var/www/html/ninegate/scripts/php72/composer.lock /var/www/html/ninegate/composer.lock
else
version70=`php -r 'echo version_compare(phpversion(), "7.0.0", ">=");'`
if [[ "$version70" == "1" ]]
then
cp -rf /var/www/html/ninegate/scripts/php70/composer.json /var/www/html/ninegate/composer.json
cp -rf /var/www/html/ninegate/scripts/php70/composer.lock /var/www/html/ninegate/composer.lock
fi
fi
# Installation des dépendances composer
composer install
rm -f /var/www/html/ninegate/var/logs/dev.log
# Permissions
./perm.sh www-data
# Nettoyage du cache
rm /var/www/html/ninegate/var/cache -rf
php bin/console cache:clear --env=prod --no-debug
# Migration si nécessaire du schéma de la base
php bin/console doctrine:schema:update --force --env=prod --no-debug
# Insertion data de base
php bin/console Core:InitData --env=prod
php bin/console Cron:InitData --env=prod
php bin/console Portal:InitData --env=prod
# Passage des scripts
php bin/console Core:Script --env=prod
# Generation des assets
bin/console assetic:dump --env=prod
# Copie des polices du projet dans le rep web
cp -rf src/Cadoles/CoreBundle/Resources/public/fonts web/
bin/console Core:SetPassword admin admin
# Permissions
./perm.sh www-data

View File

@ -0,0 +1,11 @@
Alias /ninegate /var/www/html/ninegate/web
<Directory "/var/www/html/ninegate/web" >
AllowOverride All
Order Allow,Deny
Allow from All
Options Indexes FollowSymLinks MultiViews
php_admin_flag allow_url_fopen On
</Directory>

View File

@ -0,0 +1,139 @@
# This file is auto-generated during the composer install
parameters:
# Determine qui est le maitre de l'identitité = SQL / LDAP / SSO
# Si SQL cela veut dire que c'est l'applicatif qui gère les utilisateurs
# Sinon la source est externe soit via un annuaire soit via des attributs venant d'un SSO
# Si la source est externe de fait pas de module d'inscription ni de reset de password
# Et pas de synchronisation vers un annuaire ou vers ePortail
masteridentity: SQL
# Mode d'authentification soit SQL / LDAP / CAS / SAML
# Pour l'instant SQL - CAS - SAML Reste à faire LDAP
# Attention si le masteridentity est différent de SQL le mode d'authentification est forcement différent de SQL
# Car aucune synchronisation des password n'est possible
mode_auth: SQL
# Mode de registration : none / byuser / byadmin
# none = désactivation de l'inscription mais reset de password possible
# byuser = aucune validation par un administrateur, l'utilisateur valide son inscription par lui-même
# byadmin = validation de l'inscription par un administrateur, sauf si domaine de messagerie dans la liste blanche
moderegistration: byadmin
# Activation module
cron_activate: true
portal_activate: true
module_activate: false
page_activate: false
item_activate: false
alert_activate: false
calendar_activate: false
blog_activate: false
project_activate: false
flux_activate: false
notice_activate: false
# Mise en page
weburl: localhost
alias: ninegate
libelle_etab: ninegate
numero_etab: ~
colormain: 2c3e50 # Couleur principale
fontcolorhover: FFFFFF # Couleur des polices sur fond de couleur principale
keyterm: 8 # Taille mini du password
labelniveau01: Département # Label singulier du niveau 01 d'organisation
labelsniveau01: Départements # Label pluriel du niveau 01 d'organisation
iconniveau01: fa-building # Icon du niveau 01 d'organisation
labelsirenniveau01: SIREN # Label SIREN
viewniveau02: true # Gérer un niveau 02 d'organisation
labelniveau02: Service # Label singulier du niveau 02 d'organisation
labelsniveau02: Services # Label pluriel du niveau 02 d'organisation
iconniveau02: fa-sitemap # Icon du niveau 02 d'organisation
labelsiretniveau02: SIRET # Label SIRET
mailer_port: '2525'
mailer_encryption: null
mailer_authmode: null
noreply: noreply@ninegate.fr
websocket_activate: false
websocket_host: localhost
websocket_port: 5555
websocket_portinterne: 5556
activate_widadminer: false
activate_widbalado: false
activate_widdokuwiki: false
activate_wideconnect: false
activate_widetherhome: false
activate_widfluxbb: false
activate_widgepi: false
activate_widglpi: false
activate_widgrr: false
activate_widkanboard: false
activate_widlimesurvey: false
activate_widmindmaps: false
activate_widmoodle: false
activate_widnextcloud: false
activate_widonlyoffice: false
activate_widopensondage: false
activate_widphpldapadmin: false
activate_widpiwik: false
activate_widroundcube: false
activate_widsacoche: false
activate_widwordpress: false
syncenvole_activate: false
widbalado_activate_syncenvole: false
widgepi_activate_syncenvole: false
widnextcloud_activate_syncenvole: false
widonlyoffice_sync: false
widpiwik_activate_syncenvole: false
widsacoche_activate_syncenvole: false
activate_widsonde: false
widsonde_url:
saml_entityid: 'http://discovery'
saml_logout_url: 'http://localhost:8088/idp/profile/Logout'
saml_idps_list: ['http://localhost:8088/idp/shibboleth']
ldap_sync: false
ldap_template: open
ldap_host: 127.0.0.1
ldap_port: 389
ldap_user: cn=admin,o=gouv,c=fr
ldap_password: ~
ldap_basedn: o=gouv,c=fr
ldap_baseuser:
ldap_baseniveau01:
ldap_baseniveau02:
ldap_basegroup:
# Doctrine Configuration
doctrine:
dbal:
default_connection: default
connections:
default:
driver: pdo_mysql
host: '%database_host%'
port: '%database_port%'
dbname: '%database_name%'
user: '%database_user%'
password: '%database_password%'
charset: UTF8
orm:
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
CadolesCoreBundle: ~
CadolesCronBundle: ~
CadolesPortalBundle: ~
CadolesWebsocketBundle: ~

View File

@ -4,7 +4,7 @@ cd /var/www/html/ninegate
ninegate_activer_localmail=$(CreoleGet ninegate_activer_localmail non)
if [[ "$ninegate_activer_localmail" = 'oui' ]]
then
php bin/console swiftmailer:spool:send --message-limit=100 --env=prod --transport swiftmailer.mailer.sendmail.transport
php bin/console swiftmailer:spool:send --message-limit=200 --env=prod --transport swiftmailer.mailer.sendmail.transport
else
php bin/console swiftmailer:spool:send --message-limit=100 --env=prod
php bin/console swiftmailer:spool:send --message-limit=200 --env=prod
fi

View File

@ -1,6 +1,5 @@
#!/bin/bash
ninegate_synceportail=$(CreoleGet ninegate_synceportail non)
moderegistration=$(CreoleGet ninegate_moderegistration none)
labelsniveau01=$(CreoleGet ninegate_niveau01labels non)
iconniveau01=$(CreoleGet ninegate_niveau01icon non)
@ -13,36 +12,56 @@ websocket_url=$(CreoleGet adresse_ip_eth0 non)
websocket_portinterne=$(CreoleGet ninegate_websocket_portinterne non)
www_dir="$container_path_web/var/www/html"
eportail_dir="$www_dir/eportail"
# Récuper les composer associés à la version de php installé
version72=`php -r 'echo version_compare(phpversion(), "7.2.0", ">=");'`
if [[ "$version72" == "1" ]]
version74=`php -r 'echo version_compare(phpversion(), "7.4.0", ">=");'`
if [[ "$version74" == "1" ]]
then
cp -rf /var/www/html/ninegate/scripts/php72/composer.json /var/www/html/ninegate/composer.json
cp -rf /var/www/html/ninegate/scripts/php72/composer.lock /var/www/html/ninegate/composer.lock
cp -rf /var/www/html/ninegate/scripts/php74/composer.json /var/www/html/ninegate/composer.json
cp -rf /var/www/html/ninegate/scripts/php74/composer.lock /var/www/html/ninegate/composer.lock
else
version70=`php -r 'echo version_compare(phpversion(), "7.0.0", ">=");'`
if [[ "$version70" == "1" ]]
version72=`php -r 'echo version_compare(phpversion(), "7.2.0", ">=");'`
if [[ "$version72" == "1" ]]
then
cp -rf /var/www/html/ninegate/scripts/php70/composer.json /var/www/html/ninegate/composer.json
cp -rf /var/www/html/ninegate/scripts/php70/composer.lock /var/www/html/ninegate/composer.lock
cp -rf /var/www/html/ninegate/scripts/php72/composer.json /var/www/html/ninegate/composer.json
cp -rf /var/www/html/ninegate/scripts/php72/composer.lock /var/www/html/ninegate/composer.lock
else
version70=`php -r 'echo version_compare(phpversion(), "7.0.0", ">=");'`
if [[ "$version70" == "1" ]]
then
cp -rf /var/www/html/ninegate/scripts/php70/composer.json /var/www/html/ninegate/composer.json
cp -rf /var/www/html/ninegate/scripts/php70/composer.lock /var/www/html/ninegate/composer.lock
fi
fi
fi
# Suppression des logs trop ancien
find var/logs -mindepth 1 -mtime +7 -delete
# Installation des dépendances composer
composer install
echo COMPOSER = Install
composer install --quiet
rm -f /var/www/html/ninegate/var/logs/dev.log
# Permissions
./perm.sh www-data
# Copie des polices du projet dans le rep 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
rm /var/www/html/ninegate/var/cache -rf
php bin/console cache:clear --env=prod --no-debug
echo
echo CACHE = Refresh
rm /var/www/html/ninegate/var/cache -rf > /dev/null
php bin/console cache:clear --env=prod --no-debug --quiet
# Migration si nécessaire du schéma de la base
php bin/console doctrine:schema:update --force --env=prod --no-debug
php bin/console doctrine:schema:update --force --env=prod --no-debug --quiet
# Insertion data de base
php bin/console Core:InitData --env=prod
@ -52,22 +71,12 @@ php bin/console Portal:InitData --env=prod
# Passage des scripts
php bin/console Core:Script --env=prod
# Passage des scripts locaux
php bin/console Core:Local --env=prod
# Generation des assets
bin/console assetic:dump --env=prod
# Copie des polices du projet dans le rep web
cp -rf src/Cadoles/CoreBundle/Resources/public/fonts web/
# Pointer le repertoire des avatar d'eportail sur celui de draaf
# Paramétrage eportail
if [[ "$ninegate_synceportail" = 'oui' ]]
then
if [[ ! -L /var/www/html/eportail/local/images/avatar ]]
then
rm -rf /var/www/html/eportail/local/images/avatar
ln -s /var/www/html/ninegate/web/uploads/avatar /var/www/html/eportail/local/images/avatar
fi
fi
echo ASSET = Dump
bin/console assetic:dump --env=prod --quiet
# Permissions
./perm.sh www-data
@ -75,5 +84,8 @@ fi
# Server Websocket
if [[ "$ninegate_websocket" = 'oui' ]]
then
echo
/var/www/html/ninegate/scripts/ninegate-websocket.sh
fi
fi
echo

View File

@ -1,11 +1,9 @@
#!/bin/bash
websocket_url=$(CreoleGet adresse_ip_eth0 non)
websocket_portinterne=$(CreoleGet ninegate_websocket_portinterne non)
# Server Websocket
if [[ "$1" != "restartifdown" ]]; then
echo WEBSOCKET = STOP
pid="$(pgrep -a -f gos:websocket | grep $websocket_portinterne)"
pid="$(pgrep -a -f gos:websocket | grep 5556)"
if [ -n "${pid}" ]; then
IFS=' ' read -r -a array <<< "$pid"
kill -9 ${array[0]};
@ -13,14 +11,14 @@ if [[ "$1" != "restartifdown" ]]; then
fi
# Port LISTEN ?
pid="$(pgrep -a -f gos:websocket | grep $websocket_portinterne)"
pid="$(pgrep -a -f gos:websocket | grep 5556)"
restart="yes"
if [ "$1" == "restartifdown" ] && [ -n "${pid}" ] ; then
restart="no"
fi
if [[ "$restart" == "yes" ]]; then
if [ "$restart" == "yes" ] && [ "$1" != "stop" ] ; then
echo WEBSOCKET = START
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

View File

@ -65,9 +65,6 @@
]
},
"config": {
"platform": {
"php": "7.0.30"
},
"sort-packages": true
},
"extra": {

View File

@ -4,30 +4,30 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"hash": "e008822a96a469e24963e22d66f34c98",
"content-hash": "589f314a10ca56596cf580254885bd7c",
"hash": "437ec86e9bacb04581e0e648a8d8abbb",
"content-hash": "67c93030cb80b522b452ffdeaf0983ab",
"packages": [
{
"name": "cboden/ratchet",
"version": "v0.4.1",
"version": "v0.4.3",
"source": {
"type": "git",
"url": "https://github.com/ratchetphp/Ratchet.git",
"reference": "0d31f3a8ad4795fd48397712709e55cd07f51360"
"reference": "466a0ecc83209c75b76645eb823401b5c52e5f21"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ratchetphp/Ratchet/zipball/0d31f3a8ad4795fd48397712709e55cd07f51360",
"reference": "0d31f3a8ad4795fd48397712709e55cd07f51360",
"url": "https://api.github.com/repos/ratchetphp/Ratchet/zipball/466a0ecc83209c75b76645eb823401b5c52e5f21",
"reference": "466a0ecc83209c75b76645eb823401b5c52e5f21",
"shasum": ""
},
"require": {
"guzzlehttp/psr7": "^1.0",
"php": ">=5.4.2",
"ratchet/rfc6455": "^0.2",
"ratchet/rfc6455": "^0.3",
"react/socket": "^1.0 || ^0.8 || ^0.7 || ^0.6 || ^0.5",
"symfony/http-foundation": "^2.6|^3.0|^4.0",
"symfony/routing": "^2.6|^3.0|^4.0"
"symfony/http-foundation": "^2.6|^3.0|^4.0|^5.0",
"symfony/routing": "^2.6|^3.0|^4.0|^5.0"
},
"require-dev": {
"phpunit/phpunit": "~4.8"
@ -47,6 +47,10 @@
"name": "Chris Boden",
"email": "cboden@gmail.com",
"role": "Developer"
},
{
"name": "Matt Bonneau",
"role": "Developer"
}
],
"description": "PHP WebSocket library",
@ -58,20 +62,20 @@
"sockets",
"websocket"
],
"time": "2017-12-12 00:49:31"
"time": "2020-07-07 15:50:14"
},
{
"name": "composer/ca-bundle",
"version": "1.2.4",
"version": "1.2.9",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
"reference": "10bb96592168a0f8e8f6dcde3532d9fa50b0b527"
"reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/10bb96592168a0f8e8f6dcde3532d9fa50b0b527",
"reference": "10bb96592168a0f8e8f6dcde3532d9fa50b0b527",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/78a0e288fdcebf92aa2318a8d3656168da6ac1a5",
"reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5",
"shasum": ""
},
"require": {
@ -80,14 +84,15 @@
"php": "^5.3.2 || ^7.0 || ^8.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8",
"phpstan/phpstan": "^0.12.55",
"psr/log": "^1.0",
"symfony/process": "^2.5 || ^3.0 || ^4.0"
"symfony/phpunit-bridge": "^4.2 || ^5",
"symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
"dev-main": "1.x-dev"
}
},
"autoload": {
@ -114,7 +119,7 @@
"ssl",
"tls"
],
"time": "2019-08-30 08:44:50"
"time": "2021-01-12 12:10:35"
},
{
"name": "debril/feed-io",
@ -1432,22 +1437,25 @@
},
{
"name": "fig/link-util",
"version": "1.0.0",
"version": "1.1.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/link-util.git",
"reference": "1a07821801a148be4add11ab0603e4af55a72fac"
"reference": "5d7b8d04ed3393b4b59968ca1e906fb7186d81e8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/link-util/zipball/1a07821801a148be4add11ab0603e4af55a72fac",
"reference": "1a07821801a148be4add11ab0603e4af55a72fac",
"url": "https://api.github.com/repos/php-fig/link-util/zipball/5d7b8d04ed3393b4b59968ca1e906fb7186d81e8",
"reference": "5d7b8d04ed3393b4b59968ca1e906fb7186d81e8",
"shasum": ""
},
"require": {
"php": ">=5.5.0",
"psr/link": "~1.0@dev"
},
"provide": {
"psr/link-implementation": "1.0"
},
"require-dev": {
"phpunit/phpunit": "^5.1",
"squizlabs/php_codesniffer": "^2.3.1"
@ -1470,7 +1478,7 @@
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common utility implementations for HTTP links",
@ -1482,7 +1490,7 @@
"psr-13",
"rest"
],
"time": "2016-10-17 18:31:11"
"time": "2021-02-03 23:36:04"
},
{
"name": "gos/pnctl-event-loop-emitter",
@ -1715,16 +1723,16 @@
},
{
"name": "gregwar/captcha",
"version": "v1.1.7",
"version": "v1.1.9",
"source": {
"type": "git",
"url": "https://github.com/Gregwar/Captcha.git",
"reference": "cf953dd79748406e0292cea8c565399681e4d345"
"reference": "4bb668e6b40e3205a020ca5ee4ca8cff8b8780c5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Gregwar/Captcha/zipball/cf953dd79748406e0292cea8c565399681e4d345",
"reference": "cf953dd79748406e0292cea8c565399681e4d345",
"url": "https://api.github.com/repos/Gregwar/Captcha/zipball/4bb668e6b40e3205a020ca5ee4ca8cff8b8780c5",
"reference": "4bb668e6b40e3205a020ca5ee4ca8cff8b8780c5",
"shasum": ""
},
"require": {
@ -1764,27 +1772,28 @@
"captcha",
"spam"
],
"time": "2018-08-17 22:57:28"
"time": "2020-03-24 14:39:05"
},
{
"name": "gregwar/captcha-bundle",
"version": "v2.0.6",
"version": "v2.0.7",
"source": {
"type": "git",
"url": "https://github.com/Gregwar/CaptchaBundle.git",
"reference": "c2d5468556890dd25e0b53bd345fc205562c86f7"
"reference": "3ccfdf1c9324acbdfbcccea2c454075115741b3a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Gregwar/CaptchaBundle/zipball/c2d5468556890dd25e0b53bd345fc205562c86f7",
"reference": "c2d5468556890dd25e0b53bd345fc205562c86f7",
"url": "https://api.github.com/repos/Gregwar/CaptchaBundle/zipball/3ccfdf1c9324acbdfbcccea2c454075115741b3a",
"reference": "3ccfdf1c9324acbdfbcccea2c454075115741b3a",
"shasum": ""
},
"require": {
"gregwar/captcha": "~1.1",
"php": ">=5.3.9",
"symfony/form": "~2.8|~3.0|~4.0",
"symfony/framework-bundle": "~2.8|~3.0|~4.0"
"symfony/framework-bundle": "~2.8|~3.0|~4.0",
"twig/twig": "^1.40|^2.9"
},
"type": "captcha-bundle",
"autoload": {
@ -1818,27 +1827,28 @@
"spam",
"visual"
],
"time": "2018-11-20 10:41:34"
"time": "2019-09-23 13:07:46"
},
{
"name": "guzzlehttp/guzzle",
"version": "6.4.1",
"version": "6.5.5",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
"reference": "0895c932405407fd3a7368b6910c09a24d26db11"
"reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/0895c932405407fd3a7368b6910c09a24d26db11",
"reference": "0895c932405407fd3a7368b6910c09a24d26db11",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e",
"reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e",
"shasum": ""
},
"require": {
"ext-json": "*",
"guzzlehttp/promises": "^1.0",
"guzzlehttp/psr7": "^1.6.1",
"php": ">=5.5"
"php": ">=5.5",
"symfony/polyfill-intl-idn": "^1.17.0"
},
"require-dev": {
"ext-curl": "*",
@ -1851,7 +1861,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "6.3-dev"
"dev-master": "6.5-dev"
}
},
"autoload": {
@ -1884,27 +1894,27 @@
"rest",
"web service"
],
"time": "2019-10-23 15:58:00"
"time": "2020-06-16 21:01:06"
},
{
"name": "guzzlehttp/promises",
"version": "v1.3.1",
"version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
"reference": "60d379c243457e073cff02bc323a2a86cb355631"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
"url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631",
"reference": "60d379c243457e073cff02bc323a2a86cb355631",
"shasum": ""
},
"require": {
"php": ">=5.5.0"
"php": ">=5.5"
},
"require-dev": {
"phpunit/phpunit": "^4.0"
"symfony/phpunit-bridge": "^4.4 || ^5.1"
},
"type": "library",
"extra": {
@ -1935,20 +1945,20 @@
"keywords": [
"promise"
],
"time": "2016-12-20 10:07:11"
"time": "2020-09-30 07:37:28"
},
{
"name": "guzzlehttp/psr7",
"version": "1.6.1",
"version": "1.7.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "239400de7a173fe9901b9ac7c06497751f00727a"
"reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
"reference": "239400de7a173fe9901b9ac7c06497751f00727a",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3",
"reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3",
"shasum": ""
},
"require": {
@ -1961,15 +1971,15 @@
},
"require-dev": {
"ext-zlib": "*",
"phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
"phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10"
},
"suggest": {
"zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.6-dev"
"dev-master": "1.7-dev"
}
},
"autoload": {
@ -2006,30 +2016,30 @@
"uri",
"url"
],
"time": "2019-07-01 23:21:34"
"time": "2020-09-30 07:37:11"
},
{
"name": "incenteev/composer-parameter-handler",
"version": "v2.1.3",
"version": "v2.1.4",
"source": {
"type": "git",
"url": "https://github.com/Incenteev/ParameterHandler.git",
"reference": "933c45a34814f27f2345c11c37d46b3ca7303550"
"reference": "084befb11ec21faeadcddefb88b66132775ff59b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/933c45a34814f27f2345c11c37d46b3ca7303550",
"reference": "933c45a34814f27f2345c11c37d46b3ca7303550",
"url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/084befb11ec21faeadcddefb88b66132775ff59b",
"reference": "084befb11ec21faeadcddefb88b66132775ff59b",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"symfony/yaml": "^2.3 || ^3.0 || ^4.0"
"symfony/yaml": "^2.3 || ^3.0 || ^4.0 || ^5.0"
},
"require-dev": {
"composer/composer": "^1.0@dev",
"symfony/filesystem": "^2.3 || ^3 || ^4",
"symfony/phpunit-bridge": "^4.0"
"symfony/filesystem": "^2.3 || ^3 || ^4 || ^5",
"symfony/phpunit-bridge": "^4.0 || ^5.0"
},
"type": "library",
"extra": {
@ -2057,28 +2067,30 @@
"keywords": [
"parameters management"
],
"time": "2018-02-13 18:05:56"
"time": "2020-03-17 21:10:00"
},
{
"name": "jasig/phpcas",
"version": "1.3.8",
"version": "1.3.9",
"source": {
"type": "git",
"url": "https://github.com/apereo/phpCAS.git",
"reference": "40c0769ce05a30c8172b36ceab11124375c8366e"
"reference": "7325865c4cfb5005ed4e4c5cf01823be1726a2a0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/apereo/phpCAS/zipball/40c0769ce05a30c8172b36ceab11124375c8366e",
"reference": "40c0769ce05a30c8172b36ceab11124375c8366e",
"url": "https://api.github.com/repos/apereo/phpCAS/zipball/7325865c4cfb5005ed4e4c5cf01823be1726a2a0",
"reference": "7325865c4cfb5005ed4e4c5cf01823be1726a2a0",
"shasum": ""
},
"require": {
"ext-curl": "*",
"php": ">=5.4.0"
"php": ">=5.4.0",
"psr/log": "^1.0.0"
},
"require-dev": {
"phpunit/phpunit": "~3.7.10"
"monolog/monolog": "^1.0.0",
"phpunit/phpunit": ">=4.8.35 <8"
},
"type": "library",
"extra": {
@ -2112,7 +2124,7 @@
"cas",
"jasig"
],
"time": "2019-08-18 20:01:55"
"time": "2021-01-31 21:13:59"
},
{
"name": "jdorn/sql-formatter",
@ -2455,16 +2467,16 @@
},
{
"name": "monolog/monolog",
"version": "1.25.2",
"version": "1.26.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
"reference": "d5e2fb341cb44f7e2ab639d12a1e5901091ec287"
"reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/d5e2fb341cb44f7e2ab639d12a1e5901091ec287",
"reference": "d5e2fb341cb44f7e2ab639d12a1e5901091ec287",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/2209ddd84e7ef1256b7af205d0717fb62cfc9c33",
"reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33",
"shasum": ""
},
"require": {
@ -2478,11 +2490,10 @@
"aws/aws-sdk-php": "^2.4.9 || ^3.0",
"doctrine/couchdb": "~1.0@dev",
"graylog2/gelf-php": "~1.0",
"jakub-onderka/php-parallel-lint": "0.9",
"php-amqplib/php-amqplib": "~2.4",
"php-console/php-console": "^3.1.3",
"phpstan/phpstan": "^0.12.59",
"phpunit/phpunit": "~4.5",
"phpunit/phpunit-mock-objects": "2.3.0",
"ruflin/elastica": ">=0.90 <3.0",
"sentry/sentry": "^0.13",
"swiftmailer/swiftmailer": "^5.3|^6.0"
@ -2501,11 +2512,6 @@
"sentry/sentry": "Allow sending log messages to a Sentry server"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Monolog\\": "src/Monolog"
@ -2529,7 +2535,7 @@
"logging",
"psr-3"
],
"time": "2019-11-13 10:00:05"
"time": "2020-12-14 12:56:38"
},
{
"name": "ocramius/proxy-manager",
@ -2596,17 +2602,17 @@
},
{
"name": "oneup/uploader-bundle",
"version": "1.9.2",
"version": "1.9.4",
"target-dir": "Oneup/UploaderBundle",
"source": {
"type": "git",
"url": "https://github.com/1up-lab/OneupUploaderBundle.git",
"reference": "a32bc98019abfd51531d08cc79be19f849d87b84"
"reference": "8a6dc57c35e12fbc341e52e401a1d286475ec445"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/1up-lab/OneupUploaderBundle/zipball/a32bc98019abfd51531d08cc79be19f849d87b84",
"reference": "a32bc98019abfd51531d08cc79be19f849d87b84",
"url": "https://api.github.com/repos/1up-lab/OneupUploaderBundle/zipball/8a6dc57c35e12fbc341e52e401a1d286475ec445",
"reference": "8a6dc57c35e12fbc341e52e401a1d286475ec445",
"shasum": ""
},
"require": {
@ -2667,20 +2673,20 @@
"plupload",
"upload"
],
"time": "2017-12-18 12:41:59"
"time": "2020-02-04 12:08:35"
},
{
"name": "paragonie/random_compat",
"version": "v2.0.18",
"version": "v2.0.19",
"source": {
"type": "git",
"url": "https://github.com/paragonie/random_compat.git",
"reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db"
"reference": "446fc9faa5c2a9ddf65eb7121c0af7e857295241"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/0a58ef6e3146256cc3dc7cc393927bcc7d1b72db",
"reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db",
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/446fc9faa5c2a9ddf65eb7121c0af7e857295241",
"reference": "446fc9faa5c2a9ddf65eb7121c0af7e857295241",
"shasum": ""
},
"require": {
@ -2716,7 +2722,7 @@
"pseudorandom",
"random"
],
"time": "2019-01-03 20:59:08"
"time": "2020-10-15 10:06:57"
},
{
"name": "psr/cache",
@ -2914,16 +2920,16 @@
},
{
"name": "psr/log",
"version": "1.1.2",
"version": "1.1.3",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
"reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
"url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
"reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
"shasum": ""
},
"require": {
@ -2957,7 +2963,7 @@
"psr",
"psr-3"
],
"time": "2019-11-01 11:05:21"
"time": "2020-03-23 09:12:05"
},
{
"name": "psr/simple-cache",
@ -3049,44 +3055,46 @@
},
{
"name": "ramsey/uuid",
"version": "3.8.0",
"version": "3.9.3",
"source": {
"type": "git",
"url": "https://github.com/ramsey/uuid.git",
"reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3"
"reference": "7e1633a6964b48589b142d60542f9ed31bd37a92"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3",
"reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3",
"url": "https://api.github.com/repos/ramsey/uuid/zipball/7e1633a6964b48589b142d60542f9ed31bd37a92",
"reference": "7e1633a6964b48589b142d60542f9ed31bd37a92",
"shasum": ""
},
"require": {
"paragonie/random_compat": "^1.0|^2.0|9.99.99",
"php": "^5.4 || ^7.0",
"ext-json": "*",
"paragonie/random_compat": "^1 | ^2 | 9.99.99",
"php": "^5.4 | ^7 | ^8",
"symfony/polyfill-ctype": "^1.8"
},
"replace": {
"rhumsaa/uuid": "self.version"
},
"require-dev": {
"codeception/aspect-mock": "^1.0 | ~2.0.0",
"doctrine/annotations": "~1.2.0",
"goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0",
"ircmaxell/random-lib": "^1.1",
"jakub-onderka/php-parallel-lint": "^0.9.0",
"mockery/mockery": "^0.9.9",
"codeception/aspect-mock": "^1 | ^2",
"doctrine/annotations": "^1.2",
"goaop/framework": "1.0.0-alpha.2 | ^1 | ^2.1",
"jakub-onderka/php-parallel-lint": "^1",
"mockery/mockery": "^0.9.11 | ^1",
"moontoast/math": "^1.1",
"php-mock/php-mock-phpunit": "^0.3|^1.1",
"phpunit/phpunit": "^4.7|^5.0|^6.5",
"squizlabs/php_codesniffer": "^2.3"
"paragonie/random-lib": "^2",
"php-mock/php-mock-phpunit": "^0.3 | ^1.1",
"phpunit/phpunit": "^4.8 | ^5.4 | ^6.5",
"squizlabs/php_codesniffer": "^3.5"
},
"suggest": {
"ext-ctype": "Provides support for PHP Ctype functions",
"ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator",
"ext-openssl": "Provides the OpenSSL extension for use with the OpenSslGenerator",
"ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator",
"ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
"moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).",
"paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
"ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid",
"ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
},
@ -3099,13 +3107,21 @@
"autoload": {
"psr-4": {
"Ramsey\\Uuid\\": "src/"
}
},
"files": [
"src/functions.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ben Ramsey",
"email": "ben@benramsey.com",
"homepage": "https://benramsey.com"
},
{
"name": "Marijn Huizendveld",
"email": "marijn.huizendveld@gmail.com"
@ -3113,11 +3129,6 @@
{
"name": "Thibaud Fabre",
"email": "thibaud@aztech.io"
},
{
"name": "Ben Ramsey",
"email": "ben@benramsey.com",
"homepage": "https://benramsey.com"
}
],
"description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).",
@ -3127,20 +3138,20 @@
"identifier",
"uuid"
],
"time": "2018-07-19 23:38:55"
"time": "2020-02-21 04:36:14"
},
{
"name": "ratchet/rfc6455",
"version": "v0.2.5",
"version": "v0.3",
"source": {
"type": "git",
"url": "https://github.com/ratchetphp/RFC6455.git",
"reference": "c62f7cd95ffbb6e94fd657be694fc7372ecd6e62"
"reference": "c8651c7938651c2d55f5d8c2422ac5e57a183341"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ratchetphp/RFC6455/zipball/c62f7cd95ffbb6e94fd657be694fc7372ecd6e62",
"reference": "c62f7cd95ffbb6e94fd657be694fc7372ecd6e62",
"url": "https://api.github.com/repos/ratchetphp/RFC6455/zipball/c8651c7938651c2d55f5d8c2422ac5e57a183341",
"reference": "c8651c7938651c2d55f5d8c2422ac5e57a183341",
"shasum": ""
},
"require": {
@ -3148,9 +3159,8 @@
"php": ">=5.4.2"
},
"require-dev": {
"phpunit/phpunit": "4.8.*",
"react/http": "^0.4.1",
"react/socket-client": "^0.4.3"
"phpunit/phpunit": "5.7.*",
"react/socket": "^1.3"
},
"type": "library",
"autoload": {
@ -3167,6 +3177,10 @@
"name": "Chris Boden",
"email": "cboden@gmail.com",
"role": "Developer"
},
{
"name": "Matt Bonneau",
"role": "Developer"
}
],
"description": "RFC6455 WebSocket protocol handler",
@ -3176,28 +3190,28 @@
"rfc6455",
"websocket"
],
"time": "2019-03-10 17:10:42"
"time": "2020-05-15 18:31:24"
},
{
"name": "react/cache",
"version": "v1.0.0",
"version": "v1.1.1",
"source": {
"type": "git",
"url": "https://github.com/reactphp/cache.git",
"reference": "aa10d63a1b40a36a486bdf527f28bac607ee6466"
"reference": "4bf736a2cccec7298bdf745db77585966fc2ca7e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/cache/zipball/aa10d63a1b40a36a486bdf527f28bac607ee6466",
"reference": "aa10d63a1b40a36a486bdf527f28bac607ee6466",
"url": "https://api.github.com/repos/reactphp/cache/zipball/4bf736a2cccec7298bdf745db77585966fc2ca7e",
"reference": "4bf736a2cccec7298bdf745db77585966fc2ca7e",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"react/promise": "~2.0|~1.1"
"react/promise": "^3.0 || ^2.0 || ^1.1"
},
"require-dev": {
"phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35"
"phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35"
},
"type": "library",
"autoload": {
@ -3209,6 +3223,28 @@
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@clue.engineering",
"homepage": "https://clue.engineering/"
},
{
"name": "Cees-Jan Kiewiet",
"email": "reactphp@ceesjankiewiet.nl",
"homepage": "https://wyrihaximus.net/"
},
{
"name": "Jan Sorgalla",
"email": "jsorgalla@gmail.com",
"homepage": "https://sorgalla.com/"
},
{
"name": "Chris Boden",
"email": "cboden@gmail.com",
"homepage": "https://cboden.dev/"
}
],
"description": "Async, Promise-based cache interface for ReactPHP",
"keywords": [
"cache",
@ -3216,32 +3252,32 @@
"promise",
"reactphp"
],
"time": "2019-07-11 13:45:28"
"time": "2021-02-02 06:47:52"
},
{
"name": "react/dns",
"version": "v1.2.0",
"version": "v1.4.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/dns.git",
"reference": "a214d90c2884dac18d0cac6176202f247b66d762"
"reference": "665260757171e2ab17485b44e7ffffa7acb6ca1f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/dns/zipball/a214d90c2884dac18d0cac6176202f247b66d762",
"reference": "a214d90c2884dac18d0cac6176202f247b66d762",
"url": "https://api.github.com/repos/reactphp/dns/zipball/665260757171e2ab17485b44e7ffffa7acb6ca1f",
"reference": "665260757171e2ab17485b44e7ffffa7acb6ca1f",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"react/cache": "^1.0 || ^0.6 || ^0.5",
"react/event-loop": "^1.0 || ^0.5",
"react/promise": "^2.7 || ^1.2.1",
"react/promise": "^3.0 || ^2.7 || ^1.2.1",
"react/promise-timer": "^1.2"
},
"require-dev": {
"clue/block-react": "^1.2",
"phpunit/phpunit": "^7.0 || ^6.4 || ^5.7 || ^4.8.35"
"phpunit/phpunit": "^9.3 || ^4.8.35"
},
"type": "library",
"autoload": {
@ -3253,6 +3289,28 @@
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@clue.engineering",
"homepage": "https://clue.engineering/"
},
{
"name": "Cees-Jan Kiewiet",
"email": "reactphp@ceesjankiewiet.nl",
"homepage": "https://wyrihaximus.net/"
},
{
"name": "Jan Sorgalla",
"email": "jsorgalla@gmail.com",
"homepage": "https://sorgalla.com/"
},
{
"name": "Chris Boden",
"email": "cboden@gmail.com",
"homepage": "https://cboden.dev/"
}
],
"description": "Async DNS resolver for ReactPHP",
"keywords": [
"async",
@ -3260,7 +3318,7 @@
"dns-resolver",
"reactphp"
],
"time": "2019-08-15 09:06:31"
"time": "2020-09-18 12:12:55"
},
{
"name": "react/event-loop",
@ -3305,23 +3363,23 @@
},
{
"name": "react/promise",
"version": "v2.7.1",
"version": "v2.8.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/promise.git",
"reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d"
"reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/promise/zipball/31ffa96f8d2ed0341a57848cbb84d88b89dd664d",
"reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d",
"url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4",
"reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4",
"shasum": ""
},
"require": {
"php": ">=5.4.0"
},
"require-dev": {
"phpunit/phpunit": "~4.8"
"phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36"
},
"type": "library",
"autoload": {
@ -3347,29 +3405,29 @@
"promise",
"promises"
],
"time": "2019-01-07 21:25:54"
"time": "2020-05-12 15:16:56"
},
{
"name": "react/promise-timer",
"version": "v1.5.1",
"version": "v1.6.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/promise-timer.git",
"reference": "35fb910604fd86b00023fc5cda477c8074ad0abc"
"reference": "daee9baf6ef30c43ea4c86399f828bb5f558f6e6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/promise-timer/zipball/35fb910604fd86b00023fc5cda477c8074ad0abc",
"reference": "35fb910604fd86b00023fc5cda477c8074ad0abc",
"url": "https://api.github.com/repos/reactphp/promise-timer/zipball/daee9baf6ef30c43ea4c86399f828bb5f558f6e6",
"reference": "daee9baf6ef30c43ea4c86399f828bb5f558f6e6",
"shasum": ""
},
"require": {
"php": ">=5.3",
"react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5",
"react/promise": "^2.7.0 || ^1.2.1"
"react/promise": "^3.0 || ^2.7.0 || ^1.2.1"
},
"require-dev": {
"phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35"
"phpunit/phpunit": "^9.0 || ^5.7 || ^4.8.35"
},
"type": "library",
"autoload": {
@ -3400,34 +3458,35 @@
"timeout",
"timer"
],
"time": "2019-03-27 18:10:32"
"time": "2020-07-10 12:18:06"
},
{
"name": "react/socket",
"version": "v1.3.0",
"version": "v1.6.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/socket.git",
"reference": "10f0629ec83ea0fa22597f348623f554227e3ca0"
"reference": "e2b96b23a13ca9b41ab343268dbce3f8ef4d524a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/socket/zipball/10f0629ec83ea0fa22597f348623f554227e3ca0",
"reference": "10f0629ec83ea0fa22597f348623f554227e3ca0",
"url": "https://api.github.com/repos/reactphp/socket/zipball/e2b96b23a13ca9b41ab343268dbce3f8ef4d524a",
"reference": "e2b96b23a13ca9b41ab343268dbce3f8ef4d524a",
"shasum": ""
},
"require": {
"evenement/evenement": "^3.0 || ^2.0 || ^1.0",
"php": ">=5.3.0",
"react/dns": "^1.0 || ^0.4.13",
"react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5",
"react/dns": "^1.1",
"react/event-loop": "^1.0 || ^0.5",
"react/promise": "^2.6.0 || ^1.2.1",
"react/promise-timer": "^1.4.0",
"react/stream": "^1.1"
},
"require-dev": {
"clue/block-react": "^1.2",
"phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35"
"phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35",
"react/promise-stream": "^1.2"
},
"type": "library",
"autoload": {
@ -3439,6 +3498,28 @@
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@clue.engineering",
"homepage": "https://clue.engineering/"
},
{
"name": "Cees-Jan Kiewiet",
"email": "reactphp@ceesjankiewiet.nl",
"homepage": "https://wyrihaximus.net/"
},
{
"name": "Jan Sorgalla",
"email": "jsorgalla@gmail.com",
"homepage": "https://sorgalla.com/"
},
{
"name": "Chris Boden",
"email": "cboden@gmail.com",
"homepage": "https://cboden.dev/"
}
],
"description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP",
"keywords": [
"Connection",
@ -3447,20 +3528,20 @@
"reactphp",
"stream"
],
"time": "2019-07-10 10:11:14"
"time": "2020-08-28 12:49:05"
},
{
"name": "react/stream",
"version": "v1.1.0",
"version": "v1.1.1",
"source": {
"type": "git",
"url": "https://github.com/reactphp/stream.git",
"reference": "50426855f7a77ddf43b9266c22320df5bf6c6ce6"
"reference": "7c02b510ee3f582c810aeccd3a197b9c2f52ff1a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/stream/zipball/50426855f7a77ddf43b9266c22320df5bf6c6ce6",
"reference": "50426855f7a77ddf43b9266c22320df5bf6c6ce6",
"url": "https://api.github.com/repos/reactphp/stream/zipball/7c02b510ee3f582c810aeccd3a197b9c2f52ff1a",
"reference": "7c02b510ee3f582c810aeccd3a197b9c2f52ff1a",
"shasum": ""
},
"require": {
@ -3470,7 +3551,7 @@
},
"require-dev": {
"clue/stream-filter": "~1.2",
"phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35"
"phpunit/phpunit": "^7.0 || ^6.4 || ^5.7 || ^4.8.35"
},
"type": "library",
"autoload": {
@ -3493,20 +3574,20 @@
"stream",
"writable"
],
"time": "2019-01-01 16:15:09"
"time": "2020-05-04 10:17:57"
},
{
"name": "robrichards/xmlseclibs",
"version": "3.0.4",
"version": "3.1.1",
"source": {
"type": "git",
"url": "https://github.com/robrichards/xmlseclibs.git",
"reference": "0a53d3c3aa87564910cae4ed01416441d3ae0db5"
"reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/0a53d3c3aa87564910cae4ed01416441d3ae0db5",
"reference": "0a53d3c3aa87564910cae4ed01416441d3ae0db5",
"url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/f8f19e58f26cdb42c54b214ff8a820760292f8df",
"reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df",
"shasum": ""
},
"require": {
@ -3531,7 +3612,7 @@
"xml",
"xmldsig"
],
"time": "2019-11-05 11:44:22"
"time": "2020-09-05 13:00:25"
},
{
"name": "sensio/distribution-bundle",
@ -3828,16 +3909,16 @@
},
{
"name": "symfony/monolog-bundle",
"version": "v3.5.0",
"version": "v3.6.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/monolog-bundle.git",
"reference": "dd80460fcfe1fa2050a7103ad818e9d0686ce6fd"
"reference": "e495f5c7e4e672ffef4357d4a4d85f010802f940"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/dd80460fcfe1fa2050a7103ad818e9d0686ce6fd",
"reference": "dd80460fcfe1fa2050a7103ad818e9d0686ce6fd",
"url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/e495f5c7e4e672ffef4357d4a4d85f010802f940",
"reference": "e495f5c7e4e672ffef4357d4a4d85f010802f940",
"shasum": ""
},
"require": {
@ -3850,7 +3931,7 @@
},
"require-dev": {
"symfony/console": "~3.4 || ~4.0 || ^5.0",
"symfony/phpunit-bridge": "^3.4.19 || ^4.0 || ^5.0",
"symfony/phpunit-bridge": "^4.4 || ^5.0",
"symfony/yaml": "~3.4 || ~4.0 || ^5.0"
},
"type": "symfony-bundle",
@ -3887,27 +3968,26 @@
"log",
"logging"
],
"time": "2019-11-13 13:11:14"
"time": "2020-10-06 15:12:11"
},
{
"name": "symfony/orm-pack",
"version": "v1.0.7",
"version": "v1.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/orm-pack.git",
"reference": "c57f5e05232ca40626eb9fa52a32bc8565e9231c"
"reference": "c9bcc08102061f406dc908192c0f33524a675666"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/orm-pack/zipball/c57f5e05232ca40626eb9fa52a32bc8565e9231c",
"reference": "c57f5e05232ca40626eb9fa52a32bc8565e9231c",
"url": "https://api.github.com/repos/symfony/orm-pack/zipball/c9bcc08102061f406dc908192c0f33524a675666",
"reference": "c9bcc08102061f406dc908192c0f33524a675666",
"shasum": ""
},
"require": {
"doctrine/doctrine-bundle": "^1.6.10|^2.0",
"doctrine/doctrine-migrations-bundle": "^1.3|^2.0",
"doctrine/orm": "^2.5.11",
"php": "^7.0"
"doctrine/doctrine-bundle": "*",
"doctrine/doctrine-migrations-bundle": "*",
"doctrine/orm": "*"
},
"type": "symfony-pack",
"notification-url": "https://packagist.org/downloads/",
@ -3915,20 +3995,20 @@
"MIT"
],
"description": "A pack for the Doctrine ORM",
"time": "2019-10-18 05:41:09"
"time": "2020-02-10 18:03:48"
},
{
"name": "symfony/polyfill-apcu",
"version": "v1.12.0",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-apcu.git",
"reference": "71ce80635d5dcd67772b4dda00b86068595f64d5"
"reference": "b44b51e7814c23bfbd793a16ead5d7ce43ed23c5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/71ce80635d5dcd67772b4dda00b86068595f64d5",
"reference": "71ce80635d5dcd67772b4dda00b86068595f64d5",
"url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/b44b51e7814c23bfbd793a16ead5d7ce43ed23c5",
"reference": "b44b51e7814c23bfbd793a16ead5d7ce43ed23c5",
"shasum": ""
},
"require": {
@ -3937,7 +4017,11 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -3971,20 +4055,20 @@
"portable",
"shim"
],
"time": "2019-08-06 08:03:45"
"time": "2020-10-21 09:57:48"
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.12.0",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "550ebaac289296ce228a706d0867afc34687e3f4"
"reference": "aed596913b70fae57be53d86faa2e9ef85a2297b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4",
"reference": "550ebaac289296ce228a706d0867afc34687e3f4",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/aed596913b70fae57be53d86faa2e9ef85a2297b",
"reference": "aed596913b70fae57be53d86faa2e9ef85a2297b",
"shasum": ""
},
"require": {
@ -3996,7 +4080,11 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -4029,20 +4117,20 @@
"polyfill",
"portable"
],
"time": "2019-08-06 08:03:45"
"time": "2020-10-23 09:01:57"
},
{
"name": "symfony/polyfill-intl-icu",
"version": "v1.12.0",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-icu.git",
"reference": "66810b9d6eb4af54d543867909d65ab9af654d7e"
"reference": "f740dd60a5b5f1511229e107f7e59f404b102084"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/66810b9d6eb4af54d543867909d65ab9af654d7e",
"reference": "66810b9d6eb4af54d543867909d65ab9af654d7e",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/f740dd60a5b5f1511229e107f7e59f404b102084",
"reference": "f740dd60a5b5f1511229e107f7e59f404b102084",
"shasum": ""
},
"require": {
@ -4055,7 +4143,11 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -4087,20 +4179,158 @@
"portable",
"shim"
],
"time": "2019-08-06 08:03:45"
"time": "2020-10-23 09:01:57"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.12.0",
"name": "symfony/polyfill-intl-idn",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17"
"url": "https://github.com/symfony/polyfill-intl-idn.git",
"reference": "4ad5115c0f5d5172a9fe8147675ec6de266d8826"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b42a2f66e8f1b15ccf25652c3424265923eb4f17",
"reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17",
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/4ad5115c0f5d5172a9fe8147675ec6de266d8826",
"reference": "4ad5115c0f5d5172a9fe8147675ec6de266d8826",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"symfony/polyfill-intl-normalizer": "^1.10",
"symfony/polyfill-php70": "^1.10",
"symfony/polyfill-php72": "^1.10"
},
"suggest": {
"ext-intl": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Intl\\Idn\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Laurent Bassin",
"email": "laurent@bassin.info"
},
{
"name": "Trevor Rowbotham",
"email": "trevor.rowbotham@pm.me"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"idn",
"intl",
"polyfill",
"portable",
"shim"
],
"time": "2020-10-21 09:57:48"
},
{
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
"reference": "8db0ae7936b42feb370840cf24de1a144fb0ef27"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8db0ae7936b42feb370840cf24de1a144fb0ef27",
"reference": "8db0ae7936b42feb370840cf24de1a144fb0ef27",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"suggest": {
"ext-intl": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Intl\\Normalizer\\": ""
},
"files": [
"bootstrap.php"
],
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for intl's Normalizer class and related functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"intl",
"normalizer",
"polyfill",
"portable",
"shim"
],
"time": "2020-10-23 09:01:57"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "b5f7b932ee6fa802fc792eabd77c4c88084517ce"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b5f7b932ee6fa802fc792eabd77c4c88084517ce",
"reference": "b5f7b932ee6fa802fc792eabd77c4c88084517ce",
"shasum": ""
},
"require": {
@ -4112,7 +4342,11 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -4146,20 +4380,20 @@
"portable",
"shim"
],
"time": "2019-08-06 08:03:45"
"time": "2020-10-23 09:01:57"
},
{
"name": "symfony/polyfill-php56",
"version": "v1.12.0",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php56.git",
"reference": "0e3b212e96a51338639d8ce175c046d7729c3403"
"reference": "ea19621731cbd973a6702cfedef3419768bf3372"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/0e3b212e96a51338639d8ce175c046d7729c3403",
"reference": "0e3b212e96a51338639d8ce175c046d7729c3403",
"url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/ea19621731cbd973a6702cfedef3419768bf3372",
"reference": "ea19621731cbd973a6702cfedef3419768bf3372",
"shasum": ""
},
"require": {
@ -4169,7 +4403,11 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -4202,20 +4440,20 @@
"portable",
"shim"
],
"time": "2019-08-06 08:03:45"
"time": "2020-10-23 09:01:57"
},
{
"name": "symfony/polyfill-php70",
"version": "v1.12.0",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php70.git",
"reference": "54b4c428a0054e254223797d2713c31e08610831"
"reference": "3fe414077251a81a1b15b1c709faf5c2fbae3d4e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/54b4c428a0054e254223797d2713c31e08610831",
"reference": "54b4c428a0054e254223797d2713c31e08610831",
"url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/3fe414077251a81a1b15b1c709faf5c2fbae3d4e",
"reference": "3fe414077251a81a1b15b1c709faf5c2fbae3d4e",
"shasum": ""
},
"require": {
@ -4225,7 +4463,11 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -4261,20 +4503,20 @@
"portable",
"shim"
],
"time": "2019-08-06 08:03:45"
"time": "2020-10-23 09:01:57"
},
{
"name": "symfony/polyfill-util",
"version": "v1.12.0",
"name": "symfony/polyfill-php72",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-util.git",
"reference": "4317de1386717b4c22caed7725350a8887ab205c"
"url": "https://github.com/symfony/polyfill-php72.git",
"reference": "beecef6b463b06954638f02378f52496cb84bacc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-util/zipball/4317de1386717b4c22caed7725350a8887ab205c",
"reference": "4317de1386717b4c22caed7725350a8887ab205c",
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/beecef6b463b06954638f02378f52496cb84bacc",
"reference": "beecef6b463b06954638f02378f52496cb84bacc",
"shasum": ""
},
"require": {
@ -4283,7 +4525,70 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Php72\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"time": "2020-10-23 09:01:57"
},
{
"name": "symfony/polyfill-util",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-util.git",
"reference": "8df0c3e6a4b85df9a5c6f3f2f46fba5c5c47058a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-util/zipball/8df0c3e6a4b85df9a5c6f3f2f46fba5c5c47058a",
"reference": "8df0c3e6a4b85df9a5c6f3f2f46fba5c5c47058a",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -4313,7 +4618,7 @@
"polyfill",
"shim"
],
"time": "2019-08-06 08:03:45"
"time": "2020-10-21 09:57:48"
},
{
"name": "symfony/swiftmailer-bundle",
@ -4376,16 +4681,16 @@
},
{
"name": "symfony/symfony",
"version": "v3.4.35",
"version": "v3.4.47",
"source": {
"type": "git",
"url": "https://github.com/symfony/symfony.git",
"reference": "2adc85d49cbe14e346068fa7e9c2e1f08ab31de6"
"reference": "83093d5448a7b90fd4cbcce38580ae53898f506f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/symfony/zipball/2adc85d49cbe14e346068fa7e9c2e1f08ab31de6",
"reference": "2adc85d49cbe14e346068fa7e9c2e1f08ab31de6",
"url": "https://api.github.com/repos/symfony/symfony/zipball/83093d5448a7b90fd4cbcce38580ae53898f506f",
"reference": "83093d5448a7b90fd4cbcce38580ae53898f506f",
"shasum": ""
},
"require": {
@ -4407,6 +4712,7 @@
"twig/twig": "^1.41|^2.10"
},
"conflict": {
"monolog/monolog": ">=2",
"phpdocumentor/reflection-docblock": "<3.0||>=3.2.0,<3.2.2",
"phpdocumentor/type-resolver": "<0.3.0",
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0"
@ -4474,7 +4780,7 @@
"cache/integration-tests": "dev-master",
"doctrine/annotations": "~1.0",
"doctrine/cache": "~1.6",
"doctrine/data-fixtures": "1.0.*",
"doctrine/data-fixtures": "^1.1",
"doctrine/dbal": "~2.4",
"doctrine/doctrine-bundle": "~1.4",
"doctrine/orm": "~2.4,>=2.4.5",
@ -4483,14 +4789,12 @@
"ocramius/proxy-manager": "~0.4|~1.0|~2.0",
"phpdocumentor/reflection-docblock": "^3.0|^4.0",
"predis/predis": "~1.0",
"symfony/phpunit-bridge": "^3.4.31|^4.3.4|~5.0",
"symfony/phpunit-bridge": "^5.2",
"symfony/security-acl": "~2.8|~3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.4-dev"
}
"branch-version": "3.4"
},
"autoload": {
"psr-4": {
@ -4527,7 +4831,7 @@
"keywords": [
"framework"
],
"time": "2019-11-13 08:45:05"
"time": "2020-11-27 08:43:16"
},
{
"name": "tetranz/select2entity-bundle",
@ -4578,19 +4882,21 @@
},
{
"name": "thecsea/simple-caldav-client",
"version": "v0.1.10",
"version": "v0.1.14",
"source": {
"type": "git",
"url": "https://github.com/thecsea/simpleCalDAV.git",
"reference": "dae70da0dacd0c8a1e184fbc91ecbe6f7fa5dea9"
"reference": "542eda99c5a18c04b3701ebda9ce8d3eb0db7728"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thecsea/simpleCalDAV/zipball/dae70da0dacd0c8a1e184fbc91ecbe6f7fa5dea9",
"reference": "dae70da0dacd0c8a1e184fbc91ecbe6f7fa5dea9",
"url": "https://api.github.com/repos/thecsea/simpleCalDAV/zipball/542eda99c5a18c04b3701ebda9ce8d3eb0db7728",
"reference": "542eda99c5a18c04b3701ebda9ce8d3eb0db7728",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-xml": "*",
"php": ">=5.3.0"
},
"type": "library",
@ -4617,20 +4923,20 @@
"Simple",
"client"
],
"time": "2019-04-25 19:55:16"
"time": "2020-09-28 11:55:52"
},
{
"name": "twig/twig",
"version": "v2.12.2",
"version": "v2.12.5",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "d761fd1f1c6b867ae09a7d8119a6d95d06dc44ed"
"reference": "18772e0190734944277ee97a02a9a6c6555fcd94"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/d761fd1f1c6b867ae09a7d8119a6d95d06dc44ed",
"reference": "d761fd1f1c6b867ae09a7d8119a6d95d06dc44ed",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/18772e0190734944277ee97a02a9a6c6555fcd94",
"reference": "18772e0190734944277ee97a02a9a6c6555fcd94",
"shasum": ""
},
"require": {
@ -4640,8 +4946,7 @@
},
"require-dev": {
"psr/container": "^1.0",
"symfony/debug": "^3.4|^4.2",
"symfony/phpunit-bridge": "^4.4@dev|^5.0"
"symfony/phpunit-bridge": "^4.4|^5.0"
},
"type": "library",
"extra": {
@ -4670,7 +4975,6 @@
},
{
"name": "Twig Team",
"homepage": "https://twig.symfony.com/contributors",
"role": "Contributors"
},
{
@ -4684,7 +4988,7 @@
"keywords": [
"templating"
],
"time": "2019-11-11 16:52:09"
"time": "2020-02-11 15:31:23"
},
{
"name": "zendframework/zend-code",
@ -4796,16 +5100,16 @@
"packages-dev": [
{
"name": "nikic/php-parser",
"version": "v4.3.0",
"version": "v4.10.4",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
"reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc"
"reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/9a9981c347c5c49d6dfe5cf826bb882b824080dc",
"reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e",
"reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e",
"shasum": ""
},
"require": {
@ -4813,8 +5117,8 @@
"php": ">=7.0"
},
"require-dev": {
"ircmaxell/php-yacc": "0.0.5",
"phpunit/phpunit": "^6.5 || ^7.0 || ^8.0"
"ircmaxell/php-yacc": "^0.0.7",
"phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
},
"bin": [
"bin/php-parse"
@ -4822,7 +5126,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.3-dev"
"dev-master": "4.9-dev"
}
},
"autoload": {
@ -4844,7 +5148,7 @@
"parser",
"php"
],
"time": "2019-11-08 13:50:10"
"time": "2020-12-20 10:01:03"
},
{
"name": "sensio/generator-bundle",
@ -4902,16 +5206,16 @@
},
{
"name": "symfony/maker-bundle",
"version": "v1.14.3",
"version": "v1.16.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/maker-bundle.git",
"reference": "c864e7f9b8d1e1f5f60acc3beda11299f637aded"
"reference": "c8b36ce2aac3635603b4ffc58fbc26717e0a7317"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/maker-bundle/zipball/c864e7f9b8d1e1f5f60acc3beda11299f637aded",
"reference": "c864e7f9b8d1e1f5f60acc3beda11299f637aded",
"url": "https://api.github.com/repos/symfony/maker-bundle/zipball/c8b36ce2aac3635603b4ffc58fbc26717e0a7317",
"reference": "c8b36ce2aac3635603b4ffc58fbc26717e0a7317",
"shasum": ""
},
"require": {
@ -4966,27 +5270,27 @@
"scaffold",
"scaffolding"
],
"time": "2019-11-07 00:56:03"
"time": "2020-05-05 14:21:24"
},
{
"name": "symfony/phpunit-bridge",
"version": "v3.4.35",
"version": "v3.4.47",
"source": {
"type": "git",
"url": "https://github.com/symfony/phpunit-bridge.git",
"reference": "cbea8818e9f34e4e9d780bd22bdda21b57d4d5c7"
"reference": "120273ad5d03a8deee08ca9260e2598f288f2bac"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/cbea8818e9f34e4e9d780bd22bdda21b57d4d5c7",
"reference": "cbea8818e9f34e4e9d780bd22bdda21b57d4d5c7",
"url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/120273ad5d03a8deee08ca9260e2598f288f2bac",
"reference": "120273ad5d03a8deee08ca9260e2598f288f2bac",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"conflict": {
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0"
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0|<6.4,>=6.0|9.1.2"
},
"suggest": {
"symfony/debug": "For tracking deprecated interfaces usages at runtime with DebugClassLoader"
@ -4996,9 +5300,6 @@
],
"type": "symfony-bridge",
"extra": {
"branch-alias": {
"dev-master": "3.4-dev"
},
"thanks": {
"name": "phpunit/phpunit",
"url": "https://github.com/sebastianbergmann/phpunit"
@ -5031,7 +5332,7 @@
],
"description": "Symfony PHPUnit Bridge",
"homepage": "https://symfony.com",
"time": "2019-09-30 20:33:19"
"time": "2020-11-13 16:28:59"
}
],
"aliases": [],
@ -5042,8 +5343,5 @@
"platform": {
"php": ">=7"
},
"platform-dev": [],
"platform-overrides": {
"php": "7.0.30"
}
"platform-dev": []
}

View File

@ -65,9 +65,6 @@
]
},
"config": {
"platform": {
"php": "7.2"
},
"sort-packages": true
},
"extra": {

View File

@ -4,29 +4,29 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"content-hash": "83a9e2bee30ea6c8c4a1e3622b0f12dc",
"content-hash": "126af2a560491e610bf6530facf116c5",
"packages": [
{
"name": "cboden/ratchet",
"version": "v0.4.1",
"version": "v0.4.3",
"source": {
"type": "git",
"url": "https://github.com/ratchetphp/Ratchet.git",
"reference": "0d31f3a8ad4795fd48397712709e55cd07f51360"
"reference": "466a0ecc83209c75b76645eb823401b5c52e5f21"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ratchetphp/Ratchet/zipball/0d31f3a8ad4795fd48397712709e55cd07f51360",
"reference": "0d31f3a8ad4795fd48397712709e55cd07f51360",
"url": "https://api.github.com/repos/ratchetphp/Ratchet/zipball/466a0ecc83209c75b76645eb823401b5c52e5f21",
"reference": "466a0ecc83209c75b76645eb823401b5c52e5f21",
"shasum": ""
},
"require": {
"guzzlehttp/psr7": "^1.0",
"php": ">=5.4.2",
"ratchet/rfc6455": "^0.2",
"ratchet/rfc6455": "^0.3",
"react/socket": "^1.0 || ^0.8 || ^0.7 || ^0.6 || ^0.5",
"symfony/http-foundation": "^2.6|^3.0|^4.0",
"symfony/routing": "^2.6|^3.0|^4.0"
"symfony/http-foundation": "^2.6|^3.0|^4.0|^5.0",
"symfony/routing": "^2.6|^3.0|^4.0|^5.0"
},
"require-dev": {
"phpunit/phpunit": "~4.8"
@ -46,6 +46,10 @@
"name": "Chris Boden",
"email": "cboden@gmail.com",
"role": "Developer"
},
{
"name": "Matt Bonneau",
"role": "Developer"
}
],
"description": "PHP WebSocket library",
@ -57,32 +61,90 @@
"sockets",
"websocket"
],
"time": "2017-12-12T00:49:31+00:00"
"time": "2020-07-07T15:50:14+00:00"
},
{
"name": "debril/feed-io",
"version": "v4.4.1",
"name": "composer/package-versions-deprecated",
"version": "1.11.99.1",
"source": {
"type": "git",
"url": "https://github.com/alexdebril/feed-io.git",
"reference": "bba403f15f65f274713c61e765dd8bad79c96a0a"
"url": "https://github.com/composer/package-versions-deprecated.git",
"reference": "7413f0b55a051e89485c5cb9f765fe24bb02a7b6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/alexdebril/feed-io/zipball/bba403f15f65f274713c61e765dd8bad79c96a0a",
"reference": "bba403f15f65f274713c61e765dd8bad79c96a0a",
"url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/7413f0b55a051e89485c5cb9f765fe24bb02a7b6",
"reference": "7413f0b55a051e89485c5cb9f765fe24bb02a7b6",
"shasum": ""
},
"require": {
"guzzlehttp/guzzle": "~6.2",
"composer-plugin-api": "^1.1.0 || ^2.0",
"php": "^7 || ^8"
},
"replace": {
"ocramius/package-versions": "1.11.99"
},
"require-dev": {
"composer/composer": "^1.9.3 || ^2.0@dev",
"ext-zip": "^1.13",
"phpunit/phpunit": "^6.5 || ^7"
},
"type": "composer-plugin",
"extra": {
"class": "PackageVersions\\Installer",
"branch-alias": {
"dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"PackageVersions\\": "src/PackageVersions"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com"
},
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be"
}
],
"description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
"time": "2020-11-11T10:22:58+00:00"
},
{
"name": "debril/feed-io",
"version": "v4.8.0",
"source": {
"type": "git",
"url": "https://github.com/alexdebril/feed-io.git",
"reference": "5239890978c8136668a052fbf3f1302512cd6a9a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/alexdebril/feed-io/zipball/5239890978c8136668a052fbf3f1302512cd6a9a",
"reference": "5239890978c8136668a052fbf3f1302512cd6a9a",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-json": "*",
"ext-libxml": "*",
"guzzlehttp/guzzle": "~6.2|~7.0",
"php": ">=7.1",
"psr/log": "~1.0",
"symfony/console": "~3.4|~4.0"
"symfony/console": "~3.4|~4.0|~5.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.4",
"monolog/monolog": "1.*",
"phpunit/phpunit": "~7.5.0"
"phpunit/phpunit": "~9.3.0"
},
"suggest": {
"monolog/monolog": "Allows to handle logs"
@ -117,7 +179,7 @@
"news",
"rss"
],
"time": "2019-11-13T10:31:19+00:00"
"time": "2021-01-29T16:42:17+00:00"
},
{
"name": "debril/rss-atom-bundle",
@ -177,30 +239,33 @@
},
{
"name": "doctrine/annotations",
"version": "v1.8.0",
"version": "1.11.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/annotations.git",
"reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc"
"reference": "ce77a7ba1770462cd705a91a151b6c3746f9c6ad"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/annotations/zipball/904dca4eb10715b92569fbcd79e201d5c349b6bc",
"reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc",
"url": "https://api.github.com/repos/doctrine/annotations/zipball/ce77a7ba1770462cd705a91a151b6c3746f9c6ad",
"reference": "ce77a7ba1770462cd705a91a151b6c3746f9c6ad",
"shasum": ""
},
"require": {
"doctrine/lexer": "1.*",
"php": "^7.1"
"ext-tokenizer": "*",
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/cache": "1.*",
"phpunit/phpunit": "^7.5"
"doctrine/coding-standard": "^6.0 || ^8.1",
"phpstan/phpstan": "^0.12.20",
"phpunit/phpunit": "^7.5 || ^9.1.5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.7.x-dev"
"dev-master": "1.11.x-dev"
}
},
"autoload": {
@ -235,30 +300,30 @@
}
],
"description": "Docblock Annotations Parser",
"homepage": "http://www.doctrine-project.org",
"homepage": "https://www.doctrine-project.org/projects/annotations.html",
"keywords": [
"annotations",
"docblock",
"parser"
],
"time": "2019-10-01T18:55:10+00:00"
"time": "2020-10-26T10:28:16+00:00"
},
{
"name": "doctrine/cache",
"version": "1.9.1",
"version": "1.10.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/cache.git",
"reference": "89a5c76c39c292f7798f964ab3c836c3f8192a55"
"reference": "13e3381b25847283a91948d04640543941309727"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/cache/zipball/89a5c76c39c292f7798f964ab3c836c3f8192a55",
"reference": "89a5c76c39c292f7798f964ab3c836c3f8192a55",
"url": "https://api.github.com/repos/doctrine/cache/zipball/13e3381b25847283a91948d04640543941309727",
"reference": "13e3381b25847283a91948d04640543941309727",
"shasum": ""
},
"require": {
"php": "~7.1"
"php": "~7.1 || ^8.0"
},
"conflict": {
"doctrine/common": ">2.2,<2.4"
@ -321,40 +386,34 @@
"memcached",
"php",
"redis",
"riak",
"xcache"
],
"time": "2019-11-15T14:31:57+00:00"
"time": "2020-07-07T18:54:01+00:00"
},
{
"name": "doctrine/collections",
"version": "1.6.4",
"version": "1.6.7",
"source": {
"type": "git",
"url": "https://github.com/doctrine/collections.git",
"reference": "6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7"
"reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/collections/zipball/6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7",
"reference": "6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7",
"url": "https://api.github.com/repos/doctrine/collections/zipball/55f8b799269a1a472457bd1a41b4f379d4cfba4a",
"reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a",
"shasum": ""
},
"require": {
"php": "^7.1.3"
"php": "^7.1.3 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^6.0",
"phpstan/phpstan-shim": "^0.9.2",
"phpunit/phpunit": "^7.0",
"vimeo/psalm": "^3.2.2"
"vimeo/psalm": "^3.8.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.6.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections"
@ -394,20 +453,20 @@
"iterators",
"php"
],
"time": "2019-11-13T13:07:11+00:00"
"time": "2020-07-27T17:53:49+00:00"
},
{
"name": "doctrine/common",
"version": "v2.11.0",
"version": "2.13.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/common.git",
"reference": "b8ca1dcf6b0dc8a2af7a09baac8d0c48345df4ff"
"reference": "f3812c026e557892c34ef37f6ab808a6b567da7f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/common/zipball/b8ca1dcf6b0dc8a2af7a09baac8d0c48345df4ff",
"reference": "b8ca1dcf6b0dc8a2af7a09baac8d0c48345df4ff",
"url": "https://api.github.com/repos/doctrine/common/zipball/f3812c026e557892c34ef37f6ab808a6b567da7f",
"reference": "f3812c026e557892c34ef37f6ab808a6b567da7f",
"shasum": ""
},
"require": {
@ -417,9 +476,9 @@
"doctrine/event-manager": "^1.0",
"doctrine/inflector": "^1.0",
"doctrine/lexer": "^1.0",
"doctrine/persistence": "^1.1",
"doctrine/persistence": "^1.3.3",
"doctrine/reflection": "^1.0",
"php": "^7.1"
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^1.0",
@ -477,49 +536,45 @@
"doctrine",
"php"
],
"time": "2019-09-10T10:10:14+00:00"
"time": "2020-06-05T16:46:05+00:00"
},
{
"name": "doctrine/data-fixtures",
"version": "1.4.0",
"version": "1.5.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/data-fixtures.git",
"reference": "608a35a3b5bcc4214d116603095f8b0c51091592"
"reference": "51d3d4880d28951fff42a635a2389f8c63baddc5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/608a35a3b5bcc4214d116603095f8b0c51091592",
"reference": "608a35a3b5bcc4214d116603095f8b0c51091592",
"url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/51d3d4880d28951fff42a635a2389f8c63baddc5",
"reference": "51d3d4880d28951fff42a635a2389f8c63baddc5",
"shasum": ""
},
"require": {
"doctrine/common": "^2.11",
"php": "^7.2"
"doctrine/common": "^2.13|^3.0",
"doctrine/persistence": "^1.3.3|^2.0",
"php": "^7.2 || ^8.0"
},
"conflict": {
"doctrine/phpcr-odm": "<1.3.0"
},
"require-dev": {
"alcaeus/mongo-php-adapter": "^1.1",
"doctrine/coding-standard": "^6.0",
"doctrine/coding-standard": "^8.2",
"doctrine/dbal": "^2.5.4",
"doctrine/mongodb-odm": "^1.3.0",
"doctrine/orm": "^2.5.4",
"phpunit/phpunit": "^7.0"
"doctrine/mongodb-odm": "^1.3.0 || ^2.0.0",
"doctrine/orm": "^2.7.0",
"ext-sqlite3": "*",
"phpunit/phpunit": "^8.0"
},
"suggest": {
"alcaeus/mongo-php-adapter": "For using MongoDB ODM with PHP 7",
"alcaeus/mongo-php-adapter": "For using MongoDB ODM 1.3 with PHP 7 (deprecated)",
"doctrine/mongodb-odm": "For loading MongoDB ODM fixtures",
"doctrine/orm": "For loading ORM fixtures",
"doctrine/phpcr-odm": "For loading PHPCR ODM fixtures"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\DataFixtures\\": "lib/Doctrine/Common/DataFixtures"
@ -540,20 +595,20 @@
"keywords": [
"database"
],
"time": "2019-10-30T20:03:18+00:00"
"time": "2021-01-23T10:20:43+00:00"
},
{
"name": "doctrine/dbal",
"version": "v2.10.0",
"version": "2.10.4",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
"reference": "0c9a646775ef549eb0a213a4f9bd4381d9b4d934"
"reference": "47433196b6390d14409a33885ee42b6208160643"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/0c9a646775ef549eb0a213a4f9bd4381d9b4d934",
"reference": "0c9a646775ef549eb0a213a4f9bd4381d9b4d934",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/47433196b6390d14409a33885ee42b6208160643",
"reference": "47433196b6390d14409a33885ee42b6208160643",
"shasum": ""
},
"require": {
@ -563,11 +618,14 @@
"php": "^7.2"
},
"require-dev": {
"doctrine/coding-standard": "^6.0",
"doctrine/coding-standard": "^8.1",
"jetbrains/phpstorm-stubs": "^2019.1",
"phpstan/phpstan": "^0.11.3",
"phpunit/phpunit": "^8.4.1",
"symfony/console": "^2.0.5|^3.0|^4.0|^5.0"
"nikic/php-parser": "^4.4",
"phpstan/phpstan": "^0.12.40",
"phpunit/phpunit": "^8.5.5",
"psalm/plugin-phpunit": "^0.10.0",
"symfony/console": "^2.0.5|^3.0|^4.0|^5.0",
"vimeo/psalm": "^3.14.2"
},
"suggest": {
"symfony/console": "For helpful console commands such as SQL execution and import of files."
@ -632,32 +690,35 @@
"sqlserver",
"sqlsrv"
],
"time": "2019-11-03T16:50:43+00:00"
"time": "2020-09-12T21:20:41+00:00"
},
{
"name": "doctrine/doctrine-bundle",
"version": "1.12.0",
"version": "1.12.13",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineBundle.git",
"reference": "a374f3bc54fe7c23ddb722ef6b9ddd2d9dcb9115"
"reference": "85460b85edd8f61a16ad311e7ffc5d255d3c937c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/a374f3bc54fe7c23ddb722ef6b9ddd2d9dcb9115",
"reference": "a374f3bc54fe7c23ddb722ef6b9ddd2d9dcb9115",
"url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/85460b85edd8f61a16ad311e7ffc5d255d3c937c",
"reference": "85460b85edd8f61a16ad311e7ffc5d255d3c937c",
"shasum": ""
},
"require": {
"doctrine/dbal": "^2.5.12",
"doctrine/dbal": "^2.5.12|^3.0",
"doctrine/doctrine-cache-bundle": "~1.2",
"doctrine/persistence": "^1.3.3",
"jdorn/sql-formatter": "^1.2.16",
"php": "^7.1",
"php": "^7.1 || ^8.0",
"symfony/cache": "^3.4.30|^4.3.3",
"symfony/config": "^3.4.30|^4.3.3",
"symfony/console": "^3.4.30|^4.3.3",
"symfony/dependency-injection": "^3.4.30|^4.3.3",
"symfony/doctrine-bridge": "^3.4.30|^4.3.3",
"symfony/framework-bundle": "^3.4.30|^4.3.3"
"symfony/framework-bundle": "^3.4.30|^4.3.3",
"symfony/service-contracts": "^1.1.1|^2.0"
},
"conflict": {
"doctrine/orm": "<2.6",
@ -666,11 +727,12 @@
"require-dev": {
"doctrine/coding-standard": "^6.0",
"doctrine/orm": "^2.6",
"ocramius/proxy-manager": "^2.1",
"php-coveralls/php-coveralls": "^2.1",
"phpunit/phpunit": "^7.5",
"symfony/cache": "^3.4.30|^4.3.3",
"symfony/phpunit-bridge": "^4.2",
"symfony/property-info": "^3.4.30|^4.3.3",
"symfony/proxy-manager-bridge": "^3.4|^4|^5",
"symfony/twig-bridge": "^3.4|^4.1",
"symfony/validator": "^3.4.30|^4.3.3",
"symfony/web-profiler-bundle": "^3.4.30|^4.3.3",
@ -684,7 +746,7 @@
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "1.12.x-dev"
"dev-master": "2.3.x-dev"
}
},
"autoload": {
@ -722,43 +784,43 @@
"orm",
"persistence"
],
"time": "2019-11-19T11:42:20+00:00"
"time": "2020-11-14T13:38:44+00:00"
},
{
"name": "doctrine/doctrine-cache-bundle",
"version": "1.3.5",
"version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineCacheBundle.git",
"reference": "5514c90d9fb595e1095e6d66ebb98ce9ef049927"
"reference": "6bee2f9b339847e8a984427353670bad4e7bdccb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/5514c90d9fb595e1095e6d66ebb98ce9ef049927",
"reference": "5514c90d9fb595e1095e6d66ebb98ce9ef049927",
"url": "https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/6bee2f9b339847e8a984427353670bad4e7bdccb",
"reference": "6bee2f9b339847e8a984427353670bad4e7bdccb",
"shasum": ""
},
"require": {
"doctrine/cache": "^1.4.2",
"doctrine/inflector": "~1.0",
"php": ">=5.3.2",
"symfony/doctrine-bridge": "~2.7|~3.3|~4.0"
"doctrine/inflector": "^1.0",
"php": "^7.1",
"symfony/doctrine-bridge": "^3.4|^4.0"
},
"require-dev": {
"instaclick/coding-standard": "~1.1",
"instaclick/object-calisthenics-sniffs": "dev-master",
"instaclick/symfony2-coding-standard": "dev-remaster",
"phpunit/phpunit": "~4.8.36|~5.6|~6.5|~7.0",
"phpunit/phpunit": "^7.0",
"predis/predis": "~0.8",
"satooshi/php-coveralls": "^1.0",
"squizlabs/php_codesniffer": "~1.5",
"symfony/console": "~2.7|~3.3|~4.0",
"symfony/finder": "~2.7|~3.3|~4.0",
"symfony/framework-bundle": "~2.7|~3.3|~4.0",
"symfony/phpunit-bridge": "~2.7|~3.3|~4.0",
"symfony/security-acl": "~2.7|~3.3",
"symfony/validator": "~2.7|~3.3|~4.0",
"symfony/yaml": "~2.7|~3.3|~4.0"
"symfony/console": "^3.4|^4.0",
"symfony/finder": "^3.4|^4.0",
"symfony/framework-bundle": "^3.4|^4.0",
"symfony/phpunit-bridge": "^3.4|^4.0",
"symfony/security-acl": "^2.8",
"symfony/validator": "^3.4|^4.0",
"symfony/yaml": "^3.4|^4.0"
},
"suggest": {
"symfony/security-acl": "For using this bundle to cache ACLs"
@ -766,7 +828,7 @@
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "1.3.x-dev"
"dev-master": "1.4.x-dev"
}
},
"autoload": {
@ -783,8 +845,8 @@
],
"authors": [
{
"name": "Symfony Community",
"homepage": "http://symfony.com/contributors"
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Benjamin Eberlei",
@ -799,12 +861,12 @@
"email": "guilhermeblanco@hotmail.com"
},
{
"name": "Doctrine Project",
"homepage": "http://www.doctrine-project.org/"
"name": "Symfony Community",
"homepage": "http://symfony.com/contributors"
},
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
"name": "Doctrine Project",
"homepage": "http://www.doctrine-project.org/"
}
],
"description": "Symfony Bundle for Doctrine Cache",
@ -813,7 +875,8 @@
"cache",
"caching"
],
"time": "2018-11-09T06:25:35+00:00"
"abandoned": true,
"time": "2019-11-29T11:22:01+00:00"
},
{
"name": "doctrine/doctrine-fixtures-bundle",
@ -935,20 +998,20 @@
},
{
"name": "doctrine/event-manager",
"version": "1.1.0",
"version": "1.1.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/event-manager.git",
"reference": "629572819973f13486371cb611386eb17851e85c"
"reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/event-manager/zipball/629572819973f13486371cb611386eb17851e85c",
"reference": "629572819973f13486371cb611386eb17851e85c",
"url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f",
"reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f",
"shasum": ""
},
"require": {
"php": "^7.1"
"php": "^7.1 || ^8.0"
},
"conflict": {
"doctrine/common": "<2.9@dev"
@ -1007,37 +1070,42 @@
"event system",
"events"
],
"time": "2019-11-10T09:48:07+00:00"
"time": "2020-05-29T18:28:51+00:00"
},
{
"name": "doctrine/inflector",
"version": "1.3.1",
"version": "1.4.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
"reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1"
"reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/ec3a55242203ffa6a4b27c58176da97ff0a7aec1",
"reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/4650c8b30c753a76bf44fb2ed00117d6f367490c",
"reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c",
"shasum": ""
},
"require": {
"php": "^7.1"
"php": "^7.2 || ^8.0"
},
"require-dev": {
"phpunit/phpunit": "^6.2"
"doctrine/coding-standard": "^7.0",
"phpstan/phpstan": "^0.11",
"phpstan/phpstan-phpunit": "^0.11",
"phpstan/phpstan-strict-rules": "^0.11",
"phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.3.x-dev"
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector"
"Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector",
"Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
}
},
"notification-url": "https://packagist.org/downloads/",
@ -1066,48 +1134,49 @@
"email": "schmittjoh@gmail.com"
}
],
"description": "Common String Manipulations with regard to casing and singular/plural rules.",
"homepage": "http://www.doctrine-project.org",
"description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.",
"homepage": "https://www.doctrine-project.org/projects/inflector.html",
"keywords": [
"inflection",
"pluralize",
"singularize",
"string"
"inflector",
"lowercase",
"manipulation",
"php",
"plural",
"singular",
"strings",
"uppercase",
"words"
],
"time": "2019-10-30T19:59:35+00:00"
"time": "2020-05-29T07:19:59+00:00"
},
{
"name": "doctrine/instantiator",
"version": "1.3.0",
"version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/instantiator.git",
"reference": "ae466f726242e637cebdd526a7d991b9433bacf1"
"reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1",
"reference": "ae466f726242e637cebdd526a7d991b9433bacf1",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
"reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
"shasum": ""
},
"require": {
"php": "^7.1"
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^6.0",
"doctrine/coding-standard": "^8.0",
"ext-pdo": "*",
"ext-phar": "*",
"phpbench/phpbench": "^0.13",
"phpstan/phpstan-phpunit": "^0.11",
"phpstan/phpstan-shim": "^0.11",
"phpunit/phpunit": "^7.0"
"phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
"phpstan/phpstan": "^0.12",
"phpstan/phpstan-phpunit": "^0.12",
"phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.2.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
@ -1121,7 +1190,7 @@
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com",
"homepage": "http://ocramius.github.com/"
"homepage": "https://ocramius.github.io/"
}
],
"description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
@ -1130,24 +1199,24 @@
"constructor",
"instantiate"
],
"time": "2019-10-21T16:45:58+00:00"
"time": "2020-11-10T18:47:58+00:00"
},
{
"name": "doctrine/lexer",
"version": "1.2.0",
"version": "1.2.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
"reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6"
"reference": "e864bbf5904cb8f5bb334f99209b48018522f042"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6",
"reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042",
"reference": "e864bbf5904cb8f5bb334f99209b48018522f042",
"shasum": ""
},
"require": {
"php": "^7.2"
"php": "^7.2 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^6.0",
@ -1192,7 +1261,7 @@
"parser",
"php"
],
"time": "2019-10-30T14:39:59+00:00"
"time": "2020-05-25T17:44:05+00:00"
},
{
"name": "doctrine/migrations",
@ -1270,35 +1339,40 @@
},
{
"name": "doctrine/orm",
"version": "v2.7.0",
"version": "2.7.5",
"source": {
"type": "git",
"url": "https://github.com/doctrine/orm.git",
"reference": "4d763ca4c925f647b248b9fa01b5f47aa3685d62"
"reference": "01187c9260cd085529ddd1273665217cae659640"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/orm/zipball/4d763ca4c925f647b248b9fa01b5f47aa3685d62",
"reference": "4d763ca4c925f647b248b9fa01b5f47aa3685d62",
"url": "https://api.github.com/repos/doctrine/orm/zipball/01187c9260cd085529ddd1273665217cae659640",
"reference": "01187c9260cd085529ddd1273665217cae659640",
"shasum": ""
},
"require": {
"doctrine/annotations": "^1.8",
"composer/package-versions-deprecated": "^1.8",
"doctrine/annotations": "^1.11.1",
"doctrine/cache": "^1.9.1",
"doctrine/collections": "^1.5",
"doctrine/common": "^2.11",
"doctrine/common": "^2.11 || ^3.0",
"doctrine/dbal": "^2.9.3",
"doctrine/event-manager": "^1.1",
"doctrine/inflector": "^1.0",
"doctrine/instantiator": "^1.3",
"doctrine/persistence": "^1.2",
"doctrine/lexer": "^1.0",
"doctrine/persistence": "^1.3.3 || ^2.0",
"ext-pdo": "*",
"php": "^7.1",
"symfony/console": "^3.0|^4.0|^5.0"
},
"require-dev": {
"doctrine/coding-standard": "^5.0",
"phpunit/phpunit": "^7.5",
"symfony/yaml": "^3.4|^4.0|^5.0"
"doctrine/coding-standard": "^6.0",
"phpstan/phpstan": "^0.12.18",
"phpunit/phpunit": "^8.0",
"symfony/yaml": "^3.4|^4.0|^5.0",
"vimeo/psalm": "^3.11"
},
"suggest": {
"symfony/yaml": "If you want to use YAML Metadata Mapping Driver"
@ -1349,20 +1423,20 @@
"database",
"orm"
],
"time": "2019-11-19T08:38:05+00:00"
"time": "2020-12-03T08:52:14+00:00"
},
{
"name": "doctrine/persistence",
"version": "1.2.0",
"version": "1.3.8",
"source": {
"type": "git",
"url": "https://github.com/doctrine/persistence.git",
"reference": "43526ae63312942e5316100bb3ed589ba1aba491"
"reference": "7a6eac9fb6f61bba91328f15aa7547f4806ca288"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/persistence/zipball/43526ae63312942e5316100bb3ed589ba1aba491",
"reference": "43526ae63312942e5316100bb3ed589ba1aba491",
"url": "https://api.github.com/repos/doctrine/persistence/zipball/7a6eac9fb6f61bba91328f15aa7547f4806ca288",
"reference": "7a6eac9fb6f61bba91328f15aa7547f4806ca288",
"shasum": ""
},
"require": {
@ -1370,16 +1444,99 @@
"doctrine/cache": "^1.0",
"doctrine/collections": "^1.0",
"doctrine/event-manager": "^1.0",
"doctrine/reflection": "^1.0",
"php": "^7.1"
"doctrine/reflection": "^1.2",
"php": "^7.1 || ^8.0"
},
"conflict": {
"doctrine/common": "<2.10@dev"
},
"require-dev": {
"doctrine/coding-standard": "^5.0",
"phpstan/phpstan": "^0.8",
"phpunit/phpunit": "^7.0"
"doctrine/coding-standard": "^6.0",
"phpstan/phpstan": "^0.11",
"phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
"vimeo/psalm": "^3.11"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.3.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\": "lib/Doctrine/Common",
"Doctrine\\Persistence\\": "lib/Doctrine/Persistence"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
},
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com"
}
],
"description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.",
"homepage": "https://doctrine-project.org/projects/persistence.html",
"keywords": [
"mapper",
"object",
"odm",
"orm",
"persistence"
],
"time": "2020-06-20T12:56:16+00:00"
},
{
"name": "doctrine/reflection",
"version": "1.2.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/reflection.git",
"reference": "fa587178be682efe90d005e3a322590d6ebb59a5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/reflection/zipball/fa587178be682efe90d005e3a322590d6ebb59a5",
"reference": "fa587178be682efe90d005e3a322590d6ebb59a5",
"shasum": ""
},
"require": {
"doctrine/annotations": "^1.0",
"ext-tokenizer": "*",
"php": "^7.1 || ^8.0"
},
"conflict": {
"doctrine/common": "<2.9"
},
"require-dev": {
"doctrine/coding-standard": "^6.0 || ^8.2.0",
"doctrine/common": "^2.10",
"phpstan/phpstan": "^0.11.0 || ^0.12.20",
"phpstan/phpstan-phpunit": "^0.11.0 || ^0.12.16",
"phpunit/phpunit": "^7.5 || ^9.1.5"
},
"type": "library",
"extra": {
@ -1422,91 +1579,14 @@
"email": "ocramius@gmail.com"
}
],
"description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.",
"homepage": "https://doctrine-project.org/projects/persistence.html",
"keywords": [
"mapper",
"object",
"odm",
"orm",
"persistence"
],
"time": "2019-04-23T12:39:21+00:00"
},
{
"name": "doctrine/reflection",
"version": "v1.0.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/reflection.git",
"reference": "02538d3f95e88eb397a5f86274deb2c6175c2ab6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/reflection/zipball/02538d3f95e88eb397a5f86274deb2c6175c2ab6",
"reference": "02538d3f95e88eb397a5f86274deb2c6175c2ab6",
"shasum": ""
},
"require": {
"doctrine/annotations": "^1.0",
"ext-tokenizer": "*",
"php": "^7.1"
},
"require-dev": {
"doctrine/coding-standard": "^4.0",
"doctrine/common": "^2.8",
"phpstan/phpstan": "^0.9.2",
"phpstan/phpstan-phpunit": "^0.9.4",
"phpunit/phpunit": "^7.0",
"squizlabs/php_codesniffer": "^3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\": "lib/Doctrine/Common"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
},
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com"
}
],
"description": "Doctrine Reflection component",
"description": "The Doctrine Reflection project is a simple library used by the various Doctrine projects which adds some additional functionality on top of the reflection functionality that comes with PHP. It allows you to get the reflection information about classes, methods and properties statically.",
"homepage": "https://www.doctrine-project.org/projects/reflection.html",
"keywords": [
"reflection"
"reflection",
"static"
],
"time": "2018-06-14T14:45:07+00:00"
"abandoned": "roave/better-reflection",
"time": "2020-10-27T21:46:55+00:00"
},
{
"name": "egeloen/ckeditor-bundle",
@ -1675,22 +1755,25 @@
},
{
"name": "fig/link-util",
"version": "1.0.0",
"version": "1.1.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/link-util.git",
"reference": "1a07821801a148be4add11ab0603e4af55a72fac"
"reference": "5d7b8d04ed3393b4b59968ca1e906fb7186d81e8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/link-util/zipball/1a07821801a148be4add11ab0603e4af55a72fac",
"reference": "1a07821801a148be4add11ab0603e4af55a72fac",
"url": "https://api.github.com/repos/php-fig/link-util/zipball/5d7b8d04ed3393b4b59968ca1e906fb7186d81e8",
"reference": "5d7b8d04ed3393b4b59968ca1e906fb7186d81e8",
"shasum": ""
},
"require": {
"php": ">=5.5.0",
"psr/link": "~1.0@dev"
},
"provide": {
"psr/link-implementation": "1.0"
},
"require-dev": {
"phpunit/phpunit": "^5.1",
"squizlabs/php_codesniffer": "^2.3.1"
@ -1713,7 +1796,7 @@
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common utility implementations for HTTP links",
@ -1725,7 +1808,7 @@
"psr-13",
"rest"
],
"time": "2016-10-17T18:31:11+00:00"
"time": "2021-02-03T23:36:04+00:00"
},
{
"name": "gos/pubsub-router-bundle",
@ -1785,16 +1868,16 @@
},
{
"name": "gos/web-socket-bundle",
"version": "v1.10.1",
"version": "v1.10.4",
"source": {
"type": "git",
"url": "https://github.com/GeniusesOfSymfony/WebSocketBundle.git",
"reference": "5515324c608d48ff51892602e4535157a5082cb0"
"reference": "2d8dfd9dd49ee9328524f43d3afafbb50e0386b9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/GeniusesOfSymfony/WebSocketBundle/zipball/5515324c608d48ff51892602e4535157a5082cb0",
"reference": "5515324c608d48ff51892602e4535157a5082cb0",
"url": "https://api.github.com/repos/GeniusesOfSymfony/WebSocketBundle/zipball/2d8dfd9dd49ee9328524f43d3afafbb50e0386b9",
"reference": "2d8dfd9dd49ee9328524f43d3afafbb50e0386b9",
"shasum": ""
},
"require": {
@ -1808,6 +1891,7 @@
"symfony/config": "^2.3|^3.0|^4.0",
"symfony/console": "^2.3|^3.0|^4.0",
"symfony/dependency-injection": "^2.3|^3.0|^4.0",
"symfony/deprecation-contracts": "^2.1",
"symfony/event-dispatcher": "^2.3|^3.0|^4.0",
"symfony/http-foundation": "^2.3|^3.0|^4.0",
"symfony/http-kernel": "^2.3|^3.0|^4.0",
@ -1816,9 +1900,6 @@
"conflict": {
"twig/twig": "<1.34|>=2.0,<2.4"
},
"require-dev": {
"phpunit/phpunit": "^8.1"
},
"suggest": {
"doctrine/cache": "^1.0 to use doctrine/cache as a client driver",
"ext-amqp": "* to use the amqp pusher",
@ -1866,7 +1947,7 @@
"io",
"websocket"
],
"time": "2019-11-22T15:55:38+00:00"
"time": "2020-07-06T14:08:35+00:00"
},
{
"name": "gos/websocket-client",
@ -1920,16 +2001,16 @@
},
{
"name": "gregwar/captcha",
"version": "v1.1.7",
"version": "v1.1.9",
"source": {
"type": "git",
"url": "https://github.com/Gregwar/Captcha.git",
"reference": "cf953dd79748406e0292cea8c565399681e4d345"
"reference": "4bb668e6b40e3205a020ca5ee4ca8cff8b8780c5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Gregwar/Captcha/zipball/cf953dd79748406e0292cea8c565399681e4d345",
"reference": "cf953dd79748406e0292cea8c565399681e4d345",
"url": "https://api.github.com/repos/Gregwar/Captcha/zipball/4bb668e6b40e3205a020ca5ee4ca8cff8b8780c5",
"reference": "4bb668e6b40e3205a020ca5ee4ca8cff8b8780c5",
"shasum": ""
},
"require": {
@ -1969,27 +2050,28 @@
"captcha",
"spam"
],
"time": "2018-08-17T22:57:28+00:00"
"time": "2020-03-24T14:39:05+00:00"
},
{
"name": "gregwar/captcha-bundle",
"version": "v2.0.6",
"version": "v2.0.7",
"source": {
"type": "git",
"url": "https://github.com/Gregwar/CaptchaBundle.git",
"reference": "c2d5468556890dd25e0b53bd345fc205562c86f7"
"reference": "3ccfdf1c9324acbdfbcccea2c454075115741b3a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Gregwar/CaptchaBundle/zipball/c2d5468556890dd25e0b53bd345fc205562c86f7",
"reference": "c2d5468556890dd25e0b53bd345fc205562c86f7",
"url": "https://api.github.com/repos/Gregwar/CaptchaBundle/zipball/3ccfdf1c9324acbdfbcccea2c454075115741b3a",
"reference": "3ccfdf1c9324acbdfbcccea2c454075115741b3a",
"shasum": ""
},
"require": {
"gregwar/captcha": "~1.1",
"php": ">=5.3.9",
"symfony/form": "~2.8|~3.0|~4.0",
"symfony/framework-bundle": "~2.8|~3.0|~4.0"
"symfony/framework-bundle": "~2.8|~3.0|~4.0",
"twig/twig": "^1.40|^2.9"
},
"type": "captcha-bundle",
"autoload": {
@ -2023,40 +2105,47 @@
"spam",
"visual"
],
"time": "2018-11-20T10:41:34+00:00"
"time": "2019-09-23T13:07:46+00:00"
},
{
"name": "guzzlehttp/guzzle",
"version": "6.4.1",
"version": "7.2.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
"reference": "0895c932405407fd3a7368b6910c09a24d26db11"
"reference": "0aa74dfb41ae110835923ef10a9d803a22d50e79"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/0895c932405407fd3a7368b6910c09a24d26db11",
"reference": "0895c932405407fd3a7368b6910c09a24d26db11",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/0aa74dfb41ae110835923ef10a9d803a22d50e79",
"reference": "0aa74dfb41ae110835923ef10a9d803a22d50e79",
"shasum": ""
},
"require": {
"ext-json": "*",
"guzzlehttp/promises": "^1.0",
"guzzlehttp/psr7": "^1.6.1",
"php": ">=5.5"
"guzzlehttp/promises": "^1.4",
"guzzlehttp/psr7": "^1.7",
"php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0"
},
"provide": {
"psr/http-client-implementation": "1.0"
},
"require-dev": {
"ext-curl": "*",
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
"php-http/client-integration-tests": "^3.0",
"phpunit/phpunit": "^8.5.5 || ^9.3.5",
"psr/log": "^1.1"
},
"suggest": {
"ext-curl": "Required for CURL handler support",
"ext-intl": "Required for Internationalized Domain Name (IDN) support",
"psr/log": "Required for using the Log middleware"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "6.3-dev"
"dev-master": "7.1-dev"
}
},
"autoload": {
@ -2076,6 +2165,11 @@
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com",
"homepage": "https://sagikazarmark.hu"
}
],
"description": "Guzzle is a PHP HTTP client library",
@ -2086,30 +2180,32 @@
"framework",
"http",
"http client",
"psr-18",
"psr-7",
"rest",
"web service"
],
"time": "2019-10-23T15:58:00+00:00"
"time": "2020-10-10T11:47:56+00:00"
},
{
"name": "guzzlehttp/promises",
"version": "v1.3.1",
"version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
"reference": "60d379c243457e073cff02bc323a2a86cb355631"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
"url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631",
"reference": "60d379c243457e073cff02bc323a2a86cb355631",
"shasum": ""
},
"require": {
"php": ">=5.5.0"
"php": ">=5.5"
},
"require-dev": {
"phpunit/phpunit": "^4.0"
"symfony/phpunit-bridge": "^4.4 || ^5.1"
},
"type": "library",
"extra": {
@ -2140,20 +2236,20 @@
"keywords": [
"promise"
],
"time": "2016-12-20T10:07:11+00:00"
"time": "2020-09-30T07:37:28+00:00"
},
{
"name": "guzzlehttp/psr7",
"version": "1.6.1",
"version": "1.7.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "239400de7a173fe9901b9ac7c06497751f00727a"
"reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
"reference": "239400de7a173fe9901b9ac7c06497751f00727a",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3",
"reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3",
"shasum": ""
},
"require": {
@ -2166,15 +2262,15 @@
},
"require-dev": {
"ext-zlib": "*",
"phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
"phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10"
},
"suggest": {
"zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.6-dev"
"dev-master": "1.7-dev"
}
},
"autoload": {
@ -2211,30 +2307,30 @@
"uri",
"url"
],
"time": "2019-07-01T23:21:34+00:00"
"time": "2020-09-30T07:37:11+00:00"
},
{
"name": "incenteev/composer-parameter-handler",
"version": "v2.1.3",
"version": "v2.1.4",
"source": {
"type": "git",
"url": "https://github.com/Incenteev/ParameterHandler.git",
"reference": "933c45a34814f27f2345c11c37d46b3ca7303550"
"reference": "084befb11ec21faeadcddefb88b66132775ff59b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/933c45a34814f27f2345c11c37d46b3ca7303550",
"reference": "933c45a34814f27f2345c11c37d46b3ca7303550",
"url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/084befb11ec21faeadcddefb88b66132775ff59b",
"reference": "084befb11ec21faeadcddefb88b66132775ff59b",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"symfony/yaml": "^2.3 || ^3.0 || ^4.0"
"symfony/yaml": "^2.3 || ^3.0 || ^4.0 || ^5.0"
},
"require-dev": {
"composer/composer": "^1.0@dev",
"symfony/filesystem": "^2.3 || ^3 || ^4",
"symfony/phpunit-bridge": "^4.0"
"symfony/filesystem": "^2.3 || ^3 || ^4 || ^5",
"symfony/phpunit-bridge": "^4.0 || ^5.0"
},
"type": "library",
"extra": {
@ -2262,28 +2358,30 @@
"keywords": [
"parameters management"
],
"time": "2018-02-13T18:05:56+00:00"
"time": "2020-03-17T21:10:00+00:00"
},
{
"name": "jasig/phpcas",
"version": "1.3.8",
"version": "1.3.9",
"source": {
"type": "git",
"url": "https://github.com/apereo/phpCAS.git",
"reference": "40c0769ce05a30c8172b36ceab11124375c8366e"
"reference": "7325865c4cfb5005ed4e4c5cf01823be1726a2a0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/apereo/phpCAS/zipball/40c0769ce05a30c8172b36ceab11124375c8366e",
"reference": "40c0769ce05a30c8172b36ceab11124375c8366e",
"url": "https://api.github.com/repos/apereo/phpCAS/zipball/7325865c4cfb5005ed4e4c5cf01823be1726a2a0",
"reference": "7325865c4cfb5005ed4e4c5cf01823be1726a2a0",
"shasum": ""
},
"require": {
"ext-curl": "*",
"php": ">=5.4.0"
"php": ">=5.4.0",
"psr/log": "^1.0.0"
},
"require-dev": {
"phpunit/phpunit": "~3.7.10"
"monolog/monolog": "^1.0.0",
"phpunit/phpunit": ">=4.8.35 <8"
},
"type": "library",
"extra": {
@ -2317,7 +2415,7 @@
"cas",
"jasig"
],
"time": "2019-08-18T20:01:55+00:00"
"time": "2021-01-31T21:13:59+00:00"
},
{
"name": "jdorn/sql-formatter",
@ -2660,16 +2758,16 @@
},
{
"name": "monolog/monolog",
"version": "1.25.2",
"version": "1.26.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
"reference": "d5e2fb341cb44f7e2ab639d12a1e5901091ec287"
"reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/d5e2fb341cb44f7e2ab639d12a1e5901091ec287",
"reference": "d5e2fb341cb44f7e2ab639d12a1e5901091ec287",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/2209ddd84e7ef1256b7af205d0717fb62cfc9c33",
"reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33",
"shasum": ""
},
"require": {
@ -2683,11 +2781,10 @@
"aws/aws-sdk-php": "^2.4.9 || ^3.0",
"doctrine/couchdb": "~1.0@dev",
"graylog2/gelf-php": "~1.0",
"jakub-onderka/php-parallel-lint": "0.9",
"php-amqplib/php-amqplib": "~2.4",
"php-console/php-console": "^3.1.3",
"phpstan/phpstan": "^0.12.59",
"phpunit/phpunit": "~4.5",
"phpunit/phpunit-mock-objects": "2.3.0",
"ruflin/elastica": ">=0.90 <3.0",
"sentry/sentry": "^0.13",
"swiftmailer/swiftmailer": "^5.3|^6.0"
@ -2706,11 +2803,6 @@
"sentry/sentry": "Allow sending log messages to a Sentry server"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Monolog\\": "src/Monolog"
@ -2734,57 +2826,7 @@
"logging",
"psr-3"
],
"time": "2019-11-13T10:00:05+00:00"
},
{
"name": "ocramius/package-versions",
"version": "1.4.2",
"source": {
"type": "git",
"url": "https://github.com/Ocramius/PackageVersions.git",
"reference": "44af6f3a2e2e04f2af46bcb302ad9600cba41c7d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/44af6f3a2e2e04f2af46bcb302ad9600cba41c7d",
"reference": "44af6f3a2e2e04f2af46bcb302ad9600cba41c7d",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.0.0",
"php": "^7.1.0"
},
"require-dev": {
"composer/composer": "^1.6.3",
"doctrine/coding-standard": "^5.0.1",
"ext-zip": "*",
"infection/infection": "^0.7.1",
"phpunit/phpunit": "^7.5.17"
},
"type": "composer-plugin",
"extra": {
"class": "PackageVersions\\Installer",
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
"PackageVersions\\": "src/PackageVersions"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com"
}
],
"description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
"time": "2019-11-15T16:17:10+00:00"
"time": "2020-12-14T12:56:38+00:00"
},
{
"name": "ocramius/proxy-manager",
@ -2858,17 +2900,17 @@
},
{
"name": "oneup/uploader-bundle",
"version": "1.9.2",
"version": "1.9.4",
"target-dir": "Oneup/UploaderBundle",
"source": {
"type": "git",
"url": "https://github.com/1up-lab/OneupUploaderBundle.git",
"reference": "a32bc98019abfd51531d08cc79be19f849d87b84"
"reference": "8a6dc57c35e12fbc341e52e401a1d286475ec445"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/1up-lab/OneupUploaderBundle/zipball/a32bc98019abfd51531d08cc79be19f849d87b84",
"reference": "a32bc98019abfd51531d08cc79be19f849d87b84",
"url": "https://api.github.com/repos/1up-lab/OneupUploaderBundle/zipball/8a6dc57c35e12fbc341e52e401a1d286475ec445",
"reference": "8a6dc57c35e12fbc341e52e401a1d286475ec445",
"shasum": ""
},
"require": {
@ -2929,20 +2971,20 @@
"plupload",
"upload"
],
"time": "2017-12-18T12:41:59+00:00"
"time": "2020-02-04T12:08:35+00:00"
},
{
"name": "paragonie/random_compat",
"version": "v2.0.18",
"version": "v2.0.19",
"source": {
"type": "git",
"url": "https://github.com/paragonie/random_compat.git",
"reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db"
"reference": "446fc9faa5c2a9ddf65eb7121c0af7e857295241"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/0a58ef6e3146256cc3dc7cc393927bcc7d1b72db",
"reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db",
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/446fc9faa5c2a9ddf65eb7121c0af7e857295241",
"reference": "446fc9faa5c2a9ddf65eb7121c0af7e857295241",
"shasum": ""
},
"require": {
@ -2978,7 +3020,7 @@
"pseudorandom",
"random"
],
"time": "2019-01-03T20:59:08+00:00"
"time": "2020-10-15T10:06:57+00:00"
},
{
"name": "psr/cache",
@ -3075,6 +3117,55 @@
],
"time": "2017-02-14T16:28:37+00:00"
},
{
"name": "psr/http-client",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-client.git",
"reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
"reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
"shasum": ""
},
"require": {
"php": "^7.0 || ^8.0",
"psr/http-message": "^1.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Http\\Client\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interface for HTTP clients",
"homepage": "https://github.com/php-fig/http-client",
"keywords": [
"http",
"http-client",
"psr",
"psr-18"
],
"time": "2020-06-29T06:28:15+00:00"
},
{
"name": "psr/http-message",
"version": "1.0.1",
@ -3176,16 +3267,16 @@
},
{
"name": "psr/log",
"version": "1.1.2",
"version": "1.1.3",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
"reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
"url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
"reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
"shasum": ""
},
"require": {
@ -3219,7 +3310,7 @@
"psr",
"psr-3"
],
"time": "2019-11-01T11:05:21+00:00"
"time": "2020-03-23T09:12:05+00:00"
},
{
"name": "psr/simple-cache",
@ -3311,44 +3402,46 @@
},
{
"name": "ramsey/uuid",
"version": "3.8.0",
"version": "3.9.3",
"source": {
"type": "git",
"url": "https://github.com/ramsey/uuid.git",
"reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3"
"reference": "7e1633a6964b48589b142d60542f9ed31bd37a92"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3",
"reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3",
"url": "https://api.github.com/repos/ramsey/uuid/zipball/7e1633a6964b48589b142d60542f9ed31bd37a92",
"reference": "7e1633a6964b48589b142d60542f9ed31bd37a92",
"shasum": ""
},
"require": {
"paragonie/random_compat": "^1.0|^2.0|9.99.99",
"php": "^5.4 || ^7.0",
"ext-json": "*",
"paragonie/random_compat": "^1 | ^2 | 9.99.99",
"php": "^5.4 | ^7 | ^8",
"symfony/polyfill-ctype": "^1.8"
},
"replace": {
"rhumsaa/uuid": "self.version"
},
"require-dev": {
"codeception/aspect-mock": "^1.0 | ~2.0.0",
"doctrine/annotations": "~1.2.0",
"goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0",
"ircmaxell/random-lib": "^1.1",
"jakub-onderka/php-parallel-lint": "^0.9.0",
"mockery/mockery": "^0.9.9",
"codeception/aspect-mock": "^1 | ^2",
"doctrine/annotations": "^1.2",
"goaop/framework": "1.0.0-alpha.2 | ^1 | ^2.1",
"jakub-onderka/php-parallel-lint": "^1",
"mockery/mockery": "^0.9.11 | ^1",
"moontoast/math": "^1.1",
"php-mock/php-mock-phpunit": "^0.3|^1.1",
"phpunit/phpunit": "^4.7|^5.0|^6.5",
"squizlabs/php_codesniffer": "^2.3"
"paragonie/random-lib": "^2",
"php-mock/php-mock-phpunit": "^0.3 | ^1.1",
"phpunit/phpunit": "^4.8 | ^5.4 | ^6.5",
"squizlabs/php_codesniffer": "^3.5"
},
"suggest": {
"ext-ctype": "Provides support for PHP Ctype functions",
"ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator",
"ext-openssl": "Provides the OpenSSL extension for use with the OpenSslGenerator",
"ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator",
"ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
"moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).",
"paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
"ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid",
"ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
},
@ -3361,13 +3454,21 @@
"autoload": {
"psr-4": {
"Ramsey\\Uuid\\": "src/"
}
},
"files": [
"src/functions.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ben Ramsey",
"email": "ben@benramsey.com",
"homepage": "https://benramsey.com"
},
{
"name": "Marijn Huizendveld",
"email": "marijn.huizendveld@gmail.com"
@ -3375,11 +3476,6 @@
{
"name": "Thibaud Fabre",
"email": "thibaud@aztech.io"
},
{
"name": "Ben Ramsey",
"email": "ben@benramsey.com",
"homepage": "https://benramsey.com"
}
],
"description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).",
@ -3389,20 +3485,20 @@
"identifier",
"uuid"
],
"time": "2018-07-19T23:38:55+00:00"
"time": "2020-02-21T04:36:14+00:00"
},
{
"name": "ratchet/rfc6455",
"version": "v0.2.5",
"version": "v0.3",
"source": {
"type": "git",
"url": "https://github.com/ratchetphp/RFC6455.git",
"reference": "c62f7cd95ffbb6e94fd657be694fc7372ecd6e62"
"reference": "c8651c7938651c2d55f5d8c2422ac5e57a183341"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ratchetphp/RFC6455/zipball/c62f7cd95ffbb6e94fd657be694fc7372ecd6e62",
"reference": "c62f7cd95ffbb6e94fd657be694fc7372ecd6e62",
"url": "https://api.github.com/repos/ratchetphp/RFC6455/zipball/c8651c7938651c2d55f5d8c2422ac5e57a183341",
"reference": "c8651c7938651c2d55f5d8c2422ac5e57a183341",
"shasum": ""
},
"require": {
@ -3410,9 +3506,8 @@
"php": ">=5.4.2"
},
"require-dev": {
"phpunit/phpunit": "4.8.*",
"react/http": "^0.4.1",
"react/socket-client": "^0.4.3"
"phpunit/phpunit": "5.7.*",
"react/socket": "^1.3"
},
"type": "library",
"autoload": {
@ -3429,6 +3524,10 @@
"name": "Chris Boden",
"email": "cboden@gmail.com",
"role": "Developer"
},
{
"name": "Matt Bonneau",
"role": "Developer"
}
],
"description": "RFC6455 WebSocket protocol handler",
@ -3438,28 +3537,28 @@
"rfc6455",
"websocket"
],
"time": "2019-03-10T17:10:42+00:00"
"time": "2020-05-15T18:31:24+00:00"
},
{
"name": "react/cache",
"version": "v1.0.0",
"version": "v1.1.1",
"source": {
"type": "git",
"url": "https://github.com/reactphp/cache.git",
"reference": "aa10d63a1b40a36a486bdf527f28bac607ee6466"
"reference": "4bf736a2cccec7298bdf745db77585966fc2ca7e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/cache/zipball/aa10d63a1b40a36a486bdf527f28bac607ee6466",
"reference": "aa10d63a1b40a36a486bdf527f28bac607ee6466",
"url": "https://api.github.com/repos/reactphp/cache/zipball/4bf736a2cccec7298bdf745db77585966fc2ca7e",
"reference": "4bf736a2cccec7298bdf745db77585966fc2ca7e",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"react/promise": "~2.0|~1.1"
"react/promise": "^3.0 || ^2.0 || ^1.1"
},
"require-dev": {
"phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35"
"phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35"
},
"type": "library",
"autoload": {
@ -3471,6 +3570,28 @@
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@clue.engineering",
"homepage": "https://clue.engineering/"
},
{
"name": "Cees-Jan Kiewiet",
"email": "reactphp@ceesjankiewiet.nl",
"homepage": "https://wyrihaximus.net/"
},
{
"name": "Jan Sorgalla",
"email": "jsorgalla@gmail.com",
"homepage": "https://sorgalla.com/"
},
{
"name": "Chris Boden",
"email": "cboden@gmail.com",
"homepage": "https://cboden.dev/"
}
],
"description": "Async, Promise-based cache interface for ReactPHP",
"keywords": [
"cache",
@ -3478,32 +3599,32 @@
"promise",
"reactphp"
],
"time": "2019-07-11T13:45:28+00:00"
"time": "2021-02-02T06:47:52+00:00"
},
{
"name": "react/dns",
"version": "v1.2.0",
"version": "v1.4.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/dns.git",
"reference": "a214d90c2884dac18d0cac6176202f247b66d762"
"reference": "665260757171e2ab17485b44e7ffffa7acb6ca1f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/dns/zipball/a214d90c2884dac18d0cac6176202f247b66d762",
"reference": "a214d90c2884dac18d0cac6176202f247b66d762",
"url": "https://api.github.com/repos/reactphp/dns/zipball/665260757171e2ab17485b44e7ffffa7acb6ca1f",
"reference": "665260757171e2ab17485b44e7ffffa7acb6ca1f",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"react/cache": "^1.0 || ^0.6 || ^0.5",
"react/event-loop": "^1.0 || ^0.5",
"react/promise": "^2.7 || ^1.2.1",
"react/promise": "^3.0 || ^2.7 || ^1.2.1",
"react/promise-timer": "^1.2"
},
"require-dev": {
"clue/block-react": "^1.2",
"phpunit/phpunit": "^7.0 || ^6.4 || ^5.7 || ^4.8.35"
"phpunit/phpunit": "^9.3 || ^4.8.35"
},
"type": "library",
"autoload": {
@ -3515,6 +3636,28 @@
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@clue.engineering",
"homepage": "https://clue.engineering/"
},
{
"name": "Cees-Jan Kiewiet",
"email": "reactphp@ceesjankiewiet.nl",
"homepage": "https://wyrihaximus.net/"
},
{
"name": "Jan Sorgalla",
"email": "jsorgalla@gmail.com",
"homepage": "https://sorgalla.com/"
},
{
"name": "Chris Boden",
"email": "cboden@gmail.com",
"homepage": "https://cboden.dev/"
}
],
"description": "Async DNS resolver for ReactPHP",
"keywords": [
"async",
@ -3522,20 +3665,20 @@
"dns-resolver",
"reactphp"
],
"time": "2019-08-15T09:06:31+00:00"
"time": "2020-09-18T12:12:55+00:00"
},
{
"name": "react/event-loop",
"version": "v1.1.0",
"version": "v1.1.1",
"source": {
"type": "git",
"url": "https://github.com/reactphp/event-loop.git",
"reference": "a0ecac955c67b57c40fe4a1b88a7cca1b58c982d"
"reference": "6d24de090cd59cfc830263cfba965be77b563c13"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/event-loop/zipball/a0ecac955c67b57c40fe4a1b88a7cca1b58c982d",
"reference": "a0ecac955c67b57c40fe4a1b88a7cca1b58c982d",
"url": "https://api.github.com/repos/reactphp/event-loop/zipball/6d24de090cd59cfc830263cfba965be77b563c13",
"reference": "6d24de090cd59cfc830263cfba965be77b563c13",
"shasum": ""
},
"require": {
@ -3564,27 +3707,27 @@
"asynchronous",
"event-loop"
],
"time": "2019-02-07T16:19:49+00:00"
"time": "2020-01-01T18:39:52+00:00"
},
{
"name": "react/promise",
"version": "v2.7.1",
"version": "v2.8.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/promise.git",
"reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d"
"reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/promise/zipball/31ffa96f8d2ed0341a57848cbb84d88b89dd664d",
"reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d",
"url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4",
"reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4",
"shasum": ""
},
"require": {
"php": ">=5.4.0"
},
"require-dev": {
"phpunit/phpunit": "~4.8"
"phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36"
},
"type": "library",
"autoload": {
@ -3610,29 +3753,29 @@
"promise",
"promises"
],
"time": "2019-01-07T21:25:54+00:00"
"time": "2020-05-12T15:16:56+00:00"
},
{
"name": "react/promise-timer",
"version": "v1.5.1",
"version": "v1.6.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/promise-timer.git",
"reference": "35fb910604fd86b00023fc5cda477c8074ad0abc"
"reference": "daee9baf6ef30c43ea4c86399f828bb5f558f6e6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/promise-timer/zipball/35fb910604fd86b00023fc5cda477c8074ad0abc",
"reference": "35fb910604fd86b00023fc5cda477c8074ad0abc",
"url": "https://api.github.com/repos/reactphp/promise-timer/zipball/daee9baf6ef30c43ea4c86399f828bb5f558f6e6",
"reference": "daee9baf6ef30c43ea4c86399f828bb5f558f6e6",
"shasum": ""
},
"require": {
"php": ">=5.3",
"react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5",
"react/promise": "^2.7.0 || ^1.2.1"
"react/promise": "^3.0 || ^2.7.0 || ^1.2.1"
},
"require-dev": {
"phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35"
"phpunit/phpunit": "^9.0 || ^5.7 || ^4.8.35"
},
"type": "library",
"autoload": {
@ -3663,34 +3806,35 @@
"timeout",
"timer"
],
"time": "2019-03-27T18:10:32+00:00"
"time": "2020-07-10T12:18:06+00:00"
},
{
"name": "react/socket",
"version": "v1.3.0",
"version": "v1.6.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/socket.git",
"reference": "10f0629ec83ea0fa22597f348623f554227e3ca0"
"reference": "e2b96b23a13ca9b41ab343268dbce3f8ef4d524a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/socket/zipball/10f0629ec83ea0fa22597f348623f554227e3ca0",
"reference": "10f0629ec83ea0fa22597f348623f554227e3ca0",
"url": "https://api.github.com/repos/reactphp/socket/zipball/e2b96b23a13ca9b41ab343268dbce3f8ef4d524a",
"reference": "e2b96b23a13ca9b41ab343268dbce3f8ef4d524a",
"shasum": ""
},
"require": {
"evenement/evenement": "^3.0 || ^2.0 || ^1.0",
"php": ">=5.3.0",
"react/dns": "^1.0 || ^0.4.13",
"react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5",
"react/dns": "^1.1",
"react/event-loop": "^1.0 || ^0.5",
"react/promise": "^2.6.0 || ^1.2.1",
"react/promise-timer": "^1.4.0",
"react/stream": "^1.1"
},
"require-dev": {
"clue/block-react": "^1.2",
"phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35"
"phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35",
"react/promise-stream": "^1.2"
},
"type": "library",
"autoload": {
@ -3702,6 +3846,28 @@
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@clue.engineering",
"homepage": "https://clue.engineering/"
},
{
"name": "Cees-Jan Kiewiet",
"email": "reactphp@ceesjankiewiet.nl",
"homepage": "https://wyrihaximus.net/"
},
{
"name": "Jan Sorgalla",
"email": "jsorgalla@gmail.com",
"homepage": "https://sorgalla.com/"
},
{
"name": "Chris Boden",
"email": "cboden@gmail.com",
"homepage": "https://cboden.dev/"
}
],
"description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP",
"keywords": [
"Connection",
@ -3710,20 +3876,20 @@
"reactphp",
"stream"
],
"time": "2019-07-10T10:11:14+00:00"
"time": "2020-08-28T12:49:05+00:00"
},
{
"name": "react/stream",
"version": "v1.1.0",
"version": "v1.1.1",
"source": {
"type": "git",
"url": "https://github.com/reactphp/stream.git",
"reference": "50426855f7a77ddf43b9266c22320df5bf6c6ce6"
"reference": "7c02b510ee3f582c810aeccd3a197b9c2f52ff1a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/stream/zipball/50426855f7a77ddf43b9266c22320df5bf6c6ce6",
"reference": "50426855f7a77ddf43b9266c22320df5bf6c6ce6",
"url": "https://api.github.com/repos/reactphp/stream/zipball/7c02b510ee3f582c810aeccd3a197b9c2f52ff1a",
"reference": "7c02b510ee3f582c810aeccd3a197b9c2f52ff1a",
"shasum": ""
},
"require": {
@ -3733,7 +3899,7 @@
},
"require-dev": {
"clue/stream-filter": "~1.2",
"phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35"
"phpunit/phpunit": "^7.0 || ^6.4 || ^5.7 || ^4.8.35"
},
"type": "library",
"autoload": {
@ -3756,20 +3922,20 @@
"stream",
"writable"
],
"time": "2019-01-01T16:15:09+00:00"
"time": "2020-05-04T10:17:57+00:00"
},
{
"name": "robrichards/xmlseclibs",
"version": "3.0.4",
"version": "3.1.1",
"source": {
"type": "git",
"url": "https://github.com/robrichards/xmlseclibs.git",
"reference": "0a53d3c3aa87564910cae4ed01416441d3ae0db5"
"reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/0a53d3c3aa87564910cae4ed01416441d3ae0db5",
"reference": "0a53d3c3aa87564910cae4ed01416441d3ae0db5",
"url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/f8f19e58f26cdb42c54b214ff8a820760292f8df",
"reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df",
"shasum": ""
},
"require": {
@ -3794,7 +3960,7 @@
"xml",
"xmldsig"
],
"time": "2019-11-05T11:44:22+00:00"
"time": "2020-09-05T13:00:25+00:00"
},
{
"name": "sensio/distribution-bundle",
@ -3846,6 +4012,7 @@
"configuration",
"distribution"
],
"abandoned": true,
"time": "2019-06-18T15:43:58+00:00"
},
{
@ -3967,6 +4134,7 @@
}
],
"description": "A security checker for your composer.lock",
"abandoned": "https://github.com/fabpot/local-php-security-checker",
"time": "2019-11-01T13:20:14+00:00"
},
{
@ -4095,41 +4263,98 @@
"time": "2017-07-14T07:26:46+00:00"
},
{
"name": "symfony/http-client",
"version": "v4.3.8",
"name": "symfony/deprecation-contracts",
"version": "v2.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
"reference": "ae3a9cd491f1aadb5583f34a6bda5cca34081ce8"
"url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/ae3a9cd491f1aadb5583f34a6bda5cca34081ce8",
"reference": "ae3a9cd491f1aadb5583f34a6bda5cca34081ce8",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665",
"reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665",
"shasum": ""
},
"require": {
"php": "^7.1.3",
"psr/log": "^1.0",
"symfony/http-client-contracts": "^1.1.7",
"symfony/polyfill-php73": "^1.11"
},
"provide": {
"psr/http-client-implementation": "1.0",
"symfony/http-client-implementation": "1.1"
},
"require-dev": {
"nyholm/psr7": "^1.0",
"psr/http-client": "^1.0",
"symfony/http-kernel": "^4.3",
"symfony/process": "^4.2"
"php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.3-dev"
"dev-master": "2.2-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"files": [
"function.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"time": "2020-09-07T11:33:47+00:00"
},
{
"name": "symfony/http-client",
"version": "v5.2.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
"reference": "22cb1a7844fff206cc5186409776e78865405ea5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/22cb1a7844fff206cc5186409776e78865405ea5",
"reference": "22cb1a7844fff206cc5186409776e78865405ea5",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"psr/log": "^1.0",
"symfony/http-client-contracts": "^2.2",
"symfony/polyfill-php73": "^1.11",
"symfony/polyfill-php80": "^1.15",
"symfony/service-contracts": "^1.0|^2"
},
"provide": {
"php-http/async-client-implementation": "*",
"php-http/client-implementation": "*",
"psr/http-client-implementation": "1.0",
"symfony/http-client-implementation": "1.1"
},
"require-dev": {
"amphp/amp": "^2.5",
"amphp/http-client": "^4.2.1",
"amphp/http-tunnel": "^1.0",
"amphp/socket": "^1.1",
"guzzlehttp/promises": "^1.4",
"nyholm/psr7": "^1.0",
"php-http/httplug": "^1.0|^2.0",
"psr/http-client": "^1.0",
"symfony/dependency-injection": "^4.4|^5.0",
"symfony/http-kernel": "^4.4.13|^5.1.5",
"symfony/process": "^4.4|^5.0",
"symfony/stopwatch": "^4.4|^5.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\HttpClient\\": ""
@ -4152,34 +4377,39 @@
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony HttpClient component",
"description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously",
"homepage": "https://symfony.com",
"time": "2019-11-08T08:23:45+00:00"
"time": "2021-01-27T10:15:41+00:00"
},
{
"name": "symfony/http-client-contracts",
"version": "v1.1.8",
"version": "v2.3.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client-contracts.git",
"reference": "088bae75cfa2ec5eb6d33dce17dbd8613150ce6e"
"reference": "41db680a15018f9c1d4b23516059633ce280ca33"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/088bae75cfa2ec5eb6d33dce17dbd8613150ce6e",
"reference": "088bae75cfa2ec5eb6d33dce17dbd8613150ce6e",
"url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/41db680a15018f9c1d4b23516059633ce280ca33",
"reference": "41db680a15018f9c1d4b23516059633ce280ca33",
"shasum": ""
},
"require": {
"php": "^7.1.3"
"php": ">=7.2.5"
},
"suggest": {
"symfony/http-client-implementation": ""
},
"type": "library",
"extra": {
"branch-version": "2.3",
"branch-alias": {
"dev-master": "1.1-dev"
"dev-main": "2.3-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
@ -4211,40 +4441,43 @@
"interoperability",
"standards"
],
"time": "2019-11-07T12:44:51+00:00"
"time": "2020-10-14T17:08:19+00:00"
},
{
"name": "symfony/mime",
"version": "v4.4.0",
"version": "v5.2.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
"reference": "89da7b68b7149aab065c09b97f938753ab52831f"
"reference": "7dee6a43493f39b51ff6c5bb2bd576fe40a76c86"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/mime/zipball/89da7b68b7149aab065c09b97f938753ab52831f",
"reference": "89da7b68b7149aab065c09b97f938753ab52831f",
"url": "https://api.github.com/repos/symfony/mime/zipball/7dee6a43493f39b51ff6c5bb2bd576fe40a76c86",
"reference": "7dee6a43493f39b51ff6c5bb2bd576fe40a76c86",
"shasum": ""
},
"require": {
"php": "^7.1.3",
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1",
"symfony/polyfill-intl-idn": "^1.10",
"symfony/polyfill-mbstring": "^1.0"
"symfony/polyfill-mbstring": "^1.0",
"symfony/polyfill-php80": "^1.15"
},
"conflict": {
"phpdocumentor/reflection-docblock": "<3.2.2",
"phpdocumentor/type-resolver": "<1.4.0",
"symfony/mailer": "<4.4"
},
"require-dev": {
"egulias/email-validator": "^2.1.10",
"symfony/dependency-injection": "^3.4|^4.1|^5.0"
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
"symfony/dependency-injection": "^4.4|^5.0",
"symfony/property-access": "^4.4|^5.1",
"symfony/property-info": "^4.4|^5.1",
"symfony/serializer": "^5.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Mime\\": ""
@ -4267,13 +4500,13 @@
"homepage": "https://symfony.com/contributors"
}
],
"description": "A library to manipulate MIME messages",
"description": "Allows manipulating MIME messages",
"homepage": "https://symfony.com",
"keywords": [
"mime",
"mime-type"
],
"time": "2019-11-13T07:39:40+00:00"
"time": "2021-02-02T06:10:15+00:00"
},
{
"name": "symfony/monolog-bundle",
@ -4340,23 +4573,22 @@
},
{
"name": "symfony/orm-pack",
"version": "v1.0.7",
"version": "v1.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/orm-pack.git",
"reference": "c57f5e05232ca40626eb9fa52a32bc8565e9231c"
"reference": "c9bcc08102061f406dc908192c0f33524a675666"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/orm-pack/zipball/c57f5e05232ca40626eb9fa52a32bc8565e9231c",
"reference": "c57f5e05232ca40626eb9fa52a32bc8565e9231c",
"url": "https://api.github.com/repos/symfony/orm-pack/zipball/c9bcc08102061f406dc908192c0f33524a675666",
"reference": "c9bcc08102061f406dc908192c0f33524a675666",
"shasum": ""
},
"require": {
"doctrine/doctrine-bundle": "^1.6.10|^2.0",
"doctrine/doctrine-migrations-bundle": "^1.3|^2.0",
"doctrine/orm": "^2.5.11",
"php": "^7.0"
"doctrine/doctrine-bundle": "*",
"doctrine/doctrine-migrations-bundle": "*",
"doctrine/orm": "*"
},
"type": "symfony-pack",
"notification-url": "https://packagist.org/downloads/",
@ -4364,29 +4596,33 @@
"MIT"
],
"description": "A pack for the Doctrine ORM",
"time": "2019-10-18T05:41:09+00:00"
"time": "2020-02-10T18:03:48+00:00"
},
{
"name": "symfony/polyfill-apcu",
"version": "v1.12.0",
"version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-apcu.git",
"reference": "71ce80635d5dcd67772b4dda00b86068595f64d5"
"reference": "3b3944f40987b9d3f9b9147f86c32df87d9f3505"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/71ce80635d5dcd67772b4dda00b86068595f64d5",
"reference": "71ce80635d5dcd67772b4dda00b86068595f64d5",
"url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/3b3944f40987b9d3f9b9147f86c32df87d9f3505",
"reference": "3b3944f40987b9d3f9b9147f86c32df87d9f3505",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
"php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -4420,24 +4656,24 @@
"portable",
"shim"
],
"time": "2019-08-06T08:03:45+00:00"
"time": "2021-01-07T16:49:33+00:00"
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.12.0",
"version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "550ebaac289296ce228a706d0867afc34687e3f4"
"reference": "c6c942b1ac76c82448322025e084cadc56048b4e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4",
"reference": "550ebaac289296ce228a706d0867afc34687e3f4",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e",
"reference": "c6c942b1ac76c82448322025e084cadc56048b4e",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
"php": ">=7.1"
},
"suggest": {
"ext-ctype": "For best performance"
@ -4445,7 +4681,11 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -4478,38 +4718,50 @@
"polyfill",
"portable"
],
"time": "2019-08-06T08:03:45+00:00"
"time": "2021-01-07T16:49:33+00:00"
},
{
"name": "symfony/polyfill-intl-icu",
"version": "v1.12.0",
"version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-icu.git",
"reference": "66810b9d6eb4af54d543867909d65ab9af654d7e"
"reference": "b2b1e732a6c039f1a3ea3414b3379a2433e183d6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/66810b9d6eb4af54d543867909d65ab9af654d7e",
"reference": "66810b9d6eb4af54d543867909d65ab9af654d7e",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/b2b1e732a6c039f1a3ea3414b3379a2433e183d6",
"reference": "b2b1e732a6c039f1a3ea3414b3379a2433e183d6",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"symfony/intl": "~2.3|~3.0|~4.0|~5.0"
"php": ">=7.1"
},
"suggest": {
"ext-intl": "For best performance"
"ext-intl": "For best performance and support of other locales than \"en\""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Intl\\Icu\\": ""
},
"classmap": [
"Resources/stubs"
],
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
@ -4536,26 +4788,26 @@
"portable",
"shim"
],
"time": "2019-08-06T08:03:45+00:00"
"time": "2021-01-07T16:49:33+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
"version": "v1.12.0",
"version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
"reference": "6af626ae6fa37d396dc90a399c0ff08e5cfc45b2"
"reference": "0eb8293dbbcd6ef6bf81404c9ce7d95bcdf34f44"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/6af626ae6fa37d396dc90a399c0ff08e5cfc45b2",
"reference": "6af626ae6fa37d396dc90a399c0ff08e5cfc45b2",
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/0eb8293dbbcd6ef6bf81404c9ce7d95bcdf34f44",
"reference": "0eb8293dbbcd6ef6bf81404c9ce7d95bcdf34f44",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"symfony/polyfill-mbstring": "^1.3",
"symfony/polyfill-php72": "^1.9"
"php": ">=7.1",
"symfony/polyfill-intl-normalizer": "^1.10",
"symfony/polyfill-php72": "^1.10"
},
"suggest": {
"ext-intl": "For best performance"
@ -4563,7 +4815,11 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -4583,6 +4839,10 @@
"name": "Laurent Bassin",
"email": "laurent@bassin.info"
},
{
"name": "Trevor Rowbotham",
"email": "trevor.rowbotham@pm.me"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
@ -4598,24 +4858,91 @@
"portable",
"shim"
],
"time": "2019-08-06T08:03:45+00:00"
"time": "2021-01-07T16:49:33+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.12.0",
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17"
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
"reference": "6e971c891537eb617a00bb07a43d182a6915faba"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b42a2f66e8f1b15ccf25652c3424265923eb4f17",
"reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/6e971c891537eb617a00bb07a43d182a6915faba",
"reference": "6e971c891537eb617a00bb07a43d182a6915faba",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
"php": ">=7.1"
},
"suggest": {
"ext-intl": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Intl\\Normalizer\\": ""
},
"files": [
"bootstrap.php"
],
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for intl's Normalizer class and related functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"intl",
"normalizer",
"polyfill",
"portable",
"shim"
],
"time": "2021-01-07T17:09:11+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/f377a3dd1fde44d37b9831d68dc8dea3ffd28e13",
"reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"suggest": {
"ext-mbstring": "For best performance"
@ -4623,7 +4950,11 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -4657,39 +4988,34 @@
"portable",
"shim"
],
"time": "2019-08-06T08:03:45+00:00"
"time": "2021-01-07T16:49:33+00:00"
},
{
"name": "symfony/polyfill-php56",
"version": "v1.12.0",
"version": "v1.20.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php56.git",
"reference": "0e3b212e96a51338639d8ce175c046d7729c3403"
"reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/0e3b212e96a51338639d8ce175c046d7729c3403",
"reference": "0e3b212e96a51338639d8ce175c046d7729c3403",
"url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675",
"reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"symfony/polyfill-util": "~1.0"
"php": ">=7.1"
},
"type": "library",
"type": "metapackage",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Php56\\": ""
"dev-main": "1.20-dev"
},
"files": [
"bootstrap.php"
]
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@ -4713,42 +5039,34 @@
"portable",
"shim"
],
"time": "2019-08-06T08:03:45+00:00"
"time": "2020-10-23T14:02:19+00:00"
},
{
"name": "symfony/polyfill-php70",
"version": "v1.12.0",
"version": "v1.20.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php70.git",
"reference": "54b4c428a0054e254223797d2713c31e08610831"
"reference": "5f03a781d984aae42cebd18e7912fa80f02ee644"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/54b4c428a0054e254223797d2713c31e08610831",
"reference": "54b4c428a0054e254223797d2713c31e08610831",
"url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644",
"reference": "5f03a781d984aae42cebd18e7912fa80f02ee644",
"shasum": ""
},
"require": {
"paragonie/random_compat": "~1.0|~2.0|~9.99",
"php": ">=5.3.3"
"php": ">=7.1"
},
"type": "library",
"type": "metapackage",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Php70\\": ""
"dev-main": "1.20-dev"
},
"files": [
"bootstrap.php"
],
"classmap": [
"Resources/stubs"
]
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@ -4772,29 +5090,33 @@
"portable",
"shim"
],
"time": "2019-08-06T08:03:45+00:00"
"time": "2020-10-23T14:02:19+00:00"
},
{
"name": "symfony/polyfill-php72",
"version": "v1.12.0",
"version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php72.git",
"reference": "04ce3335667451138df4307d6a9b61565560199e"
"reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/04ce3335667451138df4307d6a9b61565560199e",
"reference": "04ce3335667451138df4307d6a9b61565560199e",
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9",
"reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
"php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -4827,29 +5149,33 @@
"portable",
"shim"
],
"time": "2019-08-06T08:03:45+00:00"
"time": "2021-01-07T16:49:33+00:00"
},
{
"name": "symfony/polyfill-php73",
"version": "v1.12.0",
"version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php73.git",
"reference": "2ceb49eaccb9352bff54d22570276bb75ba4a188"
"reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/2ceb49eaccb9352bff54d22570276bb75ba4a188",
"reference": "2ceb49eaccb9352bff54d22570276bb75ba4a188",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
"reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
"php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -4885,34 +5211,108 @@
"portable",
"shim"
],
"time": "2019-08-06T08:03:45+00:00"
"time": "2021-01-07T16:49:33+00:00"
},
{
"name": "symfony/polyfill-util",
"version": "v1.12.0",
"name": "symfony/polyfill-php80",
"version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-util.git",
"reference": "4317de1386717b4c22caed7725350a8887ab205c"
"url": "https://github.com/symfony/polyfill-php80.git",
"reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-util/zipball/4317de1386717b4c22caed7725350a8887ab205c",
"reference": "4317de1386717b4c22caed7725350a8887ab205c",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91",
"reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
"php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12-dev"
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Util\\": ""
"Symfony\\Polyfill\\Php80\\": ""
},
"files": [
"bootstrap.php"
],
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ion Bazan",
"email": "ion.bazan@gmail.com"
},
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"time": "2021-01-07T16:49:33+00:00"
},
{
"name": "symfony/service-contracts",
"version": "v2.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
"reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1",
"reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"psr/container": "^1.0"
},
"suggest": {
"symfony/service-implementation": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"psr-4": {
"Symfony\\Contracts\\Service\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
@ -4929,15 +5329,17 @@
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony utilities for portability of PHP codes",
"description": "Generic abstractions related to writing services",
"homepage": "https://symfony.com",
"keywords": [
"compat",
"compatibility",
"polyfill",
"shim"
"abstractions",
"contracts",
"decoupling",
"interfaces",
"interoperability",
"standards"
],
"time": "2019-08-06T08:03:45+00:00"
"time": "2020-09-07T11:33:47+00:00"
},
{
"name": "symfony/swiftmailer-bundle",
@ -5000,16 +5402,16 @@
},
{
"name": "symfony/symfony",
"version": "v3.4.35",
"version": "v3.4.47",
"source": {
"type": "git",
"url": "https://github.com/symfony/symfony.git",
"reference": "2adc85d49cbe14e346068fa7e9c2e1f08ab31de6"
"reference": "83093d5448a7b90fd4cbcce38580ae53898f506f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/symfony/zipball/2adc85d49cbe14e346068fa7e9c2e1f08ab31de6",
"reference": "2adc85d49cbe14e346068fa7e9c2e1f08ab31de6",
"url": "https://api.github.com/repos/symfony/symfony/zipball/83093d5448a7b90fd4cbcce38580ae53898f506f",
"reference": "83093d5448a7b90fd4cbcce38580ae53898f506f",
"shasum": ""
},
"require": {
@ -5031,6 +5433,7 @@
"twig/twig": "^1.41|^2.10"
},
"conflict": {
"monolog/monolog": ">=2",
"phpdocumentor/reflection-docblock": "<3.0||>=3.2.0,<3.2.2",
"phpdocumentor/type-resolver": "<0.3.0",
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0"
@ -5098,7 +5501,7 @@
"cache/integration-tests": "dev-master",
"doctrine/annotations": "~1.0",
"doctrine/cache": "~1.6",
"doctrine/data-fixtures": "1.0.*",
"doctrine/data-fixtures": "^1.1",
"doctrine/dbal": "~2.4",
"doctrine/doctrine-bundle": "~1.4",
"doctrine/orm": "~2.4,>=2.4.5",
@ -5107,14 +5510,12 @@
"ocramius/proxy-manager": "~0.4|~1.0|~2.0",
"phpdocumentor/reflection-docblock": "^3.0|^4.0",
"predis/predis": "~1.0",
"symfony/phpunit-bridge": "^3.4.31|^4.3.4|~5.0",
"symfony/phpunit-bridge": "^5.2",
"symfony/security-acl": "~2.8|~3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.4-dev"
}
"branch-version": "3.4"
},
"autoload": {
"psr-4": {
@ -5151,7 +5552,7 @@
"keywords": [
"framework"
],
"time": "2019-11-13T08:45:05+00:00"
"time": "2020-11-27T08:43:16+00:00"
},
{
"name": "tetranz/select2entity-bundle",
@ -5202,19 +5603,21 @@
},
{
"name": "thecsea/simple-caldav-client",
"version": "v0.1.10",
"version": "v0.1.14",
"source": {
"type": "git",
"url": "https://github.com/thecsea/simpleCalDAV.git",
"reference": "dae70da0dacd0c8a1e184fbc91ecbe6f7fa5dea9"
"reference": "542eda99c5a18c04b3701ebda9ce8d3eb0db7728"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thecsea/simpleCalDAV/zipball/dae70da0dacd0c8a1e184fbc91ecbe6f7fa5dea9",
"reference": "dae70da0dacd0c8a1e184fbc91ecbe6f7fa5dea9",
"url": "https://api.github.com/repos/thecsea/simpleCalDAV/zipball/542eda99c5a18c04b3701ebda9ce8d3eb0db7728",
"reference": "542eda99c5a18c04b3701ebda9ce8d3eb0db7728",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-xml": "*",
"php": ">=5.3.0"
},
"type": "library",
@ -5241,36 +5644,35 @@
"Simple",
"client"
],
"time": "2019-04-25T19:55:16+00:00"
"time": "2020-09-28T11:55:52+00:00"
},
{
"name": "twig/twig",
"version": "v2.12.2",
"version": "v2.14.3",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "d761fd1f1c6b867ae09a7d8119a6d95d06dc44ed"
"reference": "8bc568d460d88b25c00c046256ec14a787ea60d9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/d761fd1f1c6b867ae09a7d8119a6d95d06dc44ed",
"reference": "d761fd1f1c6b867ae09a7d8119a6d95d06dc44ed",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/8bc568d460d88b25c00c046256ec14a787ea60d9",
"reference": "8bc568d460d88b25c00c046256ec14a787ea60d9",
"shasum": ""
},
"require": {
"php": "^7.0",
"php": ">=7.2.5",
"symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-mbstring": "^1.3"
},
"require-dev": {
"psr/container": "^1.0",
"symfony/debug": "^3.4|^4.2",
"symfony/phpunit-bridge": "^4.4@dev|^5.0"
"symfony/phpunit-bridge": "^4.4.9|^5.0.9"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.12-dev"
"dev-master": "2.14-dev"
}
},
"autoload": {
@ -5294,7 +5696,6 @@
},
{
"name": "Twig Team",
"homepage": "https://twig.symfony.com/contributors",
"role": "Contributors"
},
{
@ -5308,28 +5709,31 @@
"keywords": [
"templating"
],
"time": "2019-11-11T16:52:09+00:00"
"time": "2021-01-05T15:34:33+00:00"
},
{
"name": "zendframework/zend-code",
"version": "3.4.0",
"version": "3.4.1",
"source": {
"type": "git",
"url": "https://github.com/zendframework/zend-code.git",
"reference": "46feaeecea14161734b56c1ace74f28cb329f194"
"reference": "268040548f92c2bfcba164421c1add2ba43abaaa"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/zendframework/zend-code/zipball/46feaeecea14161734b56c1ace74f28cb329f194",
"reference": "46feaeecea14161734b56c1ace74f28cb329f194",
"url": "https://api.github.com/repos/zendframework/zend-code/zipball/268040548f92c2bfcba164421c1add2ba43abaaa",
"reference": "268040548f92c2bfcba164421c1add2ba43abaaa",
"shasum": ""
},
"require": {
"php": "^7.1",
"zendframework/zend-eventmanager": "^2.6 || ^3.0"
},
"conflict": {
"phpspec/prophecy": "<1.9.0"
},
"require-dev": {
"doctrine/annotations": "^1.0",
"doctrine/annotations": "^1.7",
"ext-phar": "*",
"phpunit/phpunit": "^7.5.16 || ^8.4",
"zendframework/zend-coding-standard": "^1.0",
@ -5343,7 +5747,8 @@
"extra": {
"branch-alias": {
"dev-master": "3.4.x-dev",
"dev-develop": "3.5.x-dev"
"dev-develop": "3.5.x-dev",
"dev-dev-4.0": "4.0.x-dev"
}
},
"autoload": {
@ -5361,7 +5766,8 @@
"code",
"zf"
],
"time": "2019-10-05T23:18:22+00:00"
"abandoned": "laminas/laminas-code",
"time": "2019-12-10T19:21:15+00:00"
},
{
"name": "zendframework/zend-eventmanager",
@ -5415,22 +5821,23 @@
"events",
"zf2"
],
"abandoned": "laminas/laminas-eventmanager",
"time": "2018-04-25T15:33:34+00:00"
}
],
"packages-dev": [
{
"name": "nikic/php-parser",
"version": "v4.3.0",
"version": "v4.10.4",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
"reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc"
"reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/9a9981c347c5c49d6dfe5cf826bb882b824080dc",
"reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e",
"reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e",
"shasum": ""
},
"require": {
@ -5438,8 +5845,8 @@
"php": ">=7.0"
},
"require-dev": {
"ircmaxell/php-yacc": "0.0.5",
"phpunit/phpunit": "^6.5 || ^7.0 || ^8.0"
"ircmaxell/php-yacc": "^0.0.7",
"phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
},
"bin": [
"bin/php-parse"
@ -5447,7 +5854,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.3-dev"
"dev-master": "4.9-dev"
}
},
"autoload": {
@ -5469,7 +5876,7 @@
"parser",
"php"
],
"time": "2019-11-08T13:50:10+00:00"
"time": "2020-12-20T10:01:03+00:00"
},
{
"name": "sensio/generator-bundle",
@ -5527,31 +5934,33 @@
},
{
"name": "symfony/maker-bundle",
"version": "v1.14.3",
"version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/maker-bundle.git",
"reference": "c864e7f9b8d1e1f5f60acc3beda11299f637aded"
"reference": "9a9e3f4253ca0d923ad49b327db6f89a8f74fe4c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/maker-bundle/zipball/c864e7f9b8d1e1f5f60acc3beda11299f637aded",
"reference": "c864e7f9b8d1e1f5f60acc3beda11299f637aded",
"url": "https://api.github.com/repos/symfony/maker-bundle/zipball/9a9e3f4253ca0d923ad49b327db6f89a8f74fe4c",
"reference": "9a9e3f4253ca0d923ad49b327db6f89a8f74fe4c",
"shasum": ""
},
"require": {
"doctrine/inflector": "^1.2",
"doctrine/inflector": "^1.2|^2.0",
"nikic/php-parser": "^4.0",
"php": "^7.0.8",
"php": ">=7.1.3",
"symfony/config": "^3.4|^4.0|^5.0",
"symfony/console": "^3.4|^4.0|^5.0",
"symfony/dependency-injection": "^3.4|^4.0|^5.0",
"symfony/deprecation-contracts": "^2.2",
"symfony/filesystem": "^3.4|^4.0|^5.0",
"symfony/finder": "^3.4|^4.0|^5.0",
"symfony/framework-bundle": "^3.4|^4.0|^5.0",
"symfony/http-kernel": "^3.4|^4.0|^5.0"
},
"require-dev": {
"composer/semver": "^3.0@dev",
"doctrine/doctrine-bundle": "^1.8|^2.0",
"doctrine/orm": "^2.3",
"friendsofphp/php-cs-fixer": "^2.8",
@ -5565,7 +5974,7 @@
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "1.0-dev"
"dev-main": "1.0-dev"
}
},
"autoload": {
@ -5591,27 +6000,27 @@
"scaffold",
"scaffolding"
],
"time": "2019-11-07T00:56:03+00:00"
"time": "2021-02-07T01:02:28+00:00"
},
{
"name": "symfony/phpunit-bridge",
"version": "v3.4.35",
"version": "v3.4.47",
"source": {
"type": "git",
"url": "https://github.com/symfony/phpunit-bridge.git",
"reference": "cbea8818e9f34e4e9d780bd22bdda21b57d4d5c7"
"reference": "120273ad5d03a8deee08ca9260e2598f288f2bac"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/cbea8818e9f34e4e9d780bd22bdda21b57d4d5c7",
"reference": "cbea8818e9f34e4e9d780bd22bdda21b57d4d5c7",
"url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/120273ad5d03a8deee08ca9260e2598f288f2bac",
"reference": "120273ad5d03a8deee08ca9260e2598f288f2bac",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"conflict": {
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0"
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0|<6.4,>=6.0|9.1.2"
},
"suggest": {
"symfony/debug": "For tracking deprecated interfaces usages at runtime with DebugClassLoader"
@ -5621,9 +6030,6 @@
],
"type": "symfony-bridge",
"extra": {
"branch-alias": {
"dev-master": "3.4-dev"
},
"thanks": {
"name": "phpunit/phpunit",
"url": "https://github.com/sebastianbergmann/phpunit"
@ -5656,7 +6062,7 @@
],
"description": "Symfony PHPUnit Bridge",
"homepage": "https://symfony.com",
"time": "2019-09-30T20:33:19+00:00"
"time": "2020-11-13T16:28:59+00:00"
}
],
"aliases": [],
@ -5667,8 +6073,5 @@
"platform": {
"php": ">=7"
},
"platform-dev": [],
"platform-overrides": {
"php": "7.2"
}
"platform-dev": []
}

View File

@ -0,0 +1,84 @@
{
"name": "symfony/framework-standard-edition",
"license": "MIT",
"type": "project",
"description": "The \"Symfony Standard Edition\" distribution",
"autoload": {
"psr-4": {
"": "src/"
},
"classmap": [ "app/AppKernel.php", "app/AppCache.php" ]
},
"autoload-dev": {
"psr-4": { "Tests\\": "tests/" },
"files": [ "vendor/symfony/symfony/src/Symfony/Component/VarDumper/Resources/functions/dump.php" ]
},
"require": {
"php": ">=7",
"debril/rss-atom-bundle": "^4.0",
"doctrine/doctrine-bundle": "^1.6",
"doctrine/doctrine-cache-bundle": "^1.2",
"doctrine/doctrine-fixtures-bundle": "^2.3",
"doctrine/doctrine-migrations-bundle": "^1.2",
"doctrine/orm": "^2.5",
"egeloen/ckeditor-bundle": "^6.0",
"gos/web-socket-bundle": "1.*",
"gregwar/captcha-bundle": "^2.0",
"incenteev/composer-parameter-handler": "^2.0",
"jasig/phpcas": "~1.3",
"lightsaml/sp-bundle": "^1.2",
"oneup/uploader-bundle": "^1.7",
"ramsey/uuid": "^3.7",
"sensio/distribution-bundle": "^5.0.19",
"sensio/framework-extra-bundle": "^5.0.0",
"symfony/assetic-bundle": "^2.8",
"symfony/ldap": "^3.4",
"symfony/monolog-bundle": "3.4.*",
"symfony/orm-pack": "^1.0",
"symfony/polyfill-apcu": "^1.0",
"symfony/swiftmailer-bundle": "^2.6.4",
"symfony/symfony": "3.4.*",
"tetranz/select2entity-bundle": "2.*",
"thecsea/simple-caldav-client": "^0.1.10",
"mashape/unirest-php": "3.*",
"twig/twig": "^1.0||^2.0"
},
"require-dev": {
"sensio/generator-bundle": "^3.0",
"symfony/maker-bundle": "^1.5",
"symfony/phpunit-bridge": "^3.0"
},
"scripts": {
"symfony-scripts": [
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
],
"post-install-cmd": [
"@symfony-scripts"
],
"post-update-cmd": [
"@symfony-scripts"
]
},
"config": {
"sort-packages": true
},
"extra": {
"symfony-app-dir": "app",
"symfony-bin-dir": "bin",
"symfony-var-dir": "var",
"symfony-web-dir": "web",
"symfony-tests-dir": "tests",
"symfony-assets-install": "relative",
"incenteev-parameters": {
"file": "app/config/parameters.yml"
},
"branch-alias": {
"dev-master": "3.4-dev"
}
}
}

View File

@ -0,0 +1,6239 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "126af2a560491e610bf6530facf116c5",
"packages": [
{
"name": "cboden/ratchet",
"version": "v0.4.3",
"source": {
"type": "git",
"url": "https://github.com/ratchetphp/Ratchet.git",
"reference": "466a0ecc83209c75b76645eb823401b5c52e5f21"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ratchetphp/Ratchet/zipball/466a0ecc83209c75b76645eb823401b5c52e5f21",
"reference": "466a0ecc83209c75b76645eb823401b5c52e5f21",
"shasum": ""
},
"require": {
"guzzlehttp/psr7": "^1.0",
"php": ">=5.4.2",
"ratchet/rfc6455": "^0.3",
"react/socket": "^1.0 || ^0.8 || ^0.7 || ^0.6 || ^0.5",
"symfony/http-foundation": "^2.6|^3.0|^4.0|^5.0",
"symfony/routing": "^2.6|^3.0|^4.0|^5.0"
},
"require-dev": {
"phpunit/phpunit": "~4.8"
},
"type": "library",
"autoload": {
"psr-4": {
"Ratchet\\": "src/Ratchet"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Chris Boden",
"email": "cboden@gmail.com",
"role": "Developer"
},
{
"name": "Matt Bonneau",
"role": "Developer"
}
],
"description": "PHP WebSocket library",
"homepage": "http://socketo.me",
"keywords": [
"Ratchet",
"WebSockets",
"server",
"sockets",
"websocket"
],
"time": "2020-07-07T15:50:14+00:00"
},
{
"name": "composer/package-versions-deprecated",
"version": "1.8.2",
"source": {
"type": "git",
"url": "https://github.com/composer/package-versions-deprecated.git",
"reference": "7a8001fe2c9befad9d001bf54ef0b4a17d950d0f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/7a8001fe2c9befad9d001bf54ef0b4a17d950d0f",
"reference": "7a8001fe2c9befad9d001bf54ef0b4a17d950d0f",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.1.0 || ^2.0",
"php": "^7"
},
"replace": {
"ocramius/package-versions": "1.8.99"
},
"require-dev": {
"composer/composer": "^1.9.3 || ^2.0@dev",
"ext-zip": "^1.13",
"phpunit/phpunit": "^6.5 || ^7"
},
"type": "composer-plugin",
"extra": {
"class": "PackageVersions\\Installer",
"branch-alias": {
"dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"PackageVersions\\": "src/PackageVersions"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com"
},
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be"
}
],
"description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
"funding": [
{
"url": "https://packagist.com",
"type": "custom"
},
{
"url": "https://github.com/composer",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
"type": "tidelift"
}
],
"time": "2020-07-10T14:10:26+00:00"
},
{
"name": "debril/feed-io",
"version": "v4.8.0",
"source": {
"type": "git",
"url": "https://github.com/alexdebril/feed-io.git",
"reference": "5239890978c8136668a052fbf3f1302512cd6a9a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/alexdebril/feed-io/zipball/5239890978c8136668a052fbf3f1302512cd6a9a",
"reference": "5239890978c8136668a052fbf3f1302512cd6a9a",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-json": "*",
"ext-libxml": "*",
"guzzlehttp/guzzle": "~6.2|~7.0",
"php": ">=7.1",
"psr/log": "~1.0",
"symfony/console": "~3.4|~4.0|~5.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.4",
"monolog/monolog": "1.*",
"phpunit/phpunit": "~9.3.0"
},
"suggest": {
"monolog/monolog": "Allows to handle logs"
},
"bin": [
"bin/feedio"
],
"type": "library",
"autoload": {
"psr-4": {
"FeedIo\\": "src/FeedIo"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Alexandre Debril",
"email": "alex.debril@gmail.com"
}
],
"description": "PHP library built to consume and serve JSONFeed / RSS / Atom feeds",
"homepage": "https://feed-io.net",
"keywords": [
"atom",
"cli",
"client",
"feed",
"jsonfeed",
"news",
"rss"
],
"time": "2021-01-29T16:42:17+00:00"
},
{
"name": "debril/rss-atom-bundle",
"version": "v4.3.0",
"target-dir": "Debril/RssAtomBundle",
"source": {
"type": "git",
"url": "https://github.com/alexdebril/rss-atom-bundle.git",
"reference": "5c0ef9b1f6a9ca058904c2adadb94cd306df9278"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/alexdebril/rss-atom-bundle/zipball/5c0ef9b1f6a9ca058904c2adadb94cd306df9278",
"reference": "5c0ef9b1f6a9ca058904c2adadb94cd306df9278",
"shasum": ""
},
"require": {
"debril/feed-io": "~3.0|~4.0",
"php": ">=7.1",
"symfony/config": "~3.4|~4.0",
"symfony/dependency-injection": "~3.4|~4.0",
"symfony/http-foundation": "~3.4|~4.0",
"symfony/http-kernel": "~3.4|~4.0"
},
"require-dev": {
"doctrine/common": "~2.3",
"doctrine/doctrine-bundle": "~1.2",
"phpunit/phpunit": "~7.0",
"symfony/browser-kit": ">3.0",
"symfony/finder": ">3.0",
"symfony/validator": ">3.0",
"symfony/yaml": "^4.0"
},
"suggest": {
"doctrine/doctrine-bundle": "allow to provide feeds' content from database"
},
"type": "symfony-bundle",
"autoload": {
"psr-0": {
"Debril\\RssAtomBundle": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "RSS / Atom and JSONFeed support for Symfony",
"homepage": "http://debril.org/category/rss-atom-bundle/",
"keywords": [
"Syndication",
"atom",
"feed",
"jsonfeed",
"rss"
],
"time": "2019-08-09T13:22:15+00:00"
},
{
"name": "doctrine/annotations",
"version": "1.11.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/annotations.git",
"reference": "ce77a7ba1770462cd705a91a151b6c3746f9c6ad"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/annotations/zipball/ce77a7ba1770462cd705a91a151b6c3746f9c6ad",
"reference": "ce77a7ba1770462cd705a91a151b6c3746f9c6ad",
"shasum": ""
},
"require": {
"doctrine/lexer": "1.*",
"ext-tokenizer": "*",
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/cache": "1.*",
"doctrine/coding-standard": "^6.0 || ^8.1",
"phpstan/phpstan": "^0.12.20",
"phpunit/phpunit": "^7.5 || ^9.1.5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.11.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
}
],
"description": "Docblock Annotations Parser",
"homepage": "https://www.doctrine-project.org/projects/annotations.html",
"keywords": [
"annotations",
"docblock",
"parser"
],
"time": "2020-10-26T10:28:16+00:00"
},
{
"name": "doctrine/cache",
"version": "1.10.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/cache.git",
"reference": "13e3381b25847283a91948d04640543941309727"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/cache/zipball/13e3381b25847283a91948d04640543941309727",
"reference": "13e3381b25847283a91948d04640543941309727",
"shasum": ""
},
"require": {
"php": "~7.1 || ^8.0"
},
"conflict": {
"doctrine/common": ">2.2,<2.4"
},
"require-dev": {
"alcaeus/mongo-php-adapter": "^1.1",
"doctrine/coding-standard": "^6.0",
"mongodb/mongodb": "^1.1",
"phpunit/phpunit": "^7.0",
"predis/predis": "~1.0"
},
"suggest": {
"alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.9.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
}
],
"description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.",
"homepage": "https://www.doctrine-project.org/projects/cache.html",
"keywords": [
"abstraction",
"apcu",
"cache",
"caching",
"couchdb",
"memcached",
"php",
"redis",
"xcache"
],
"time": "2020-07-07T18:54:01+00:00"
},
{
"name": "doctrine/collections",
"version": "1.6.7",
"source": {
"type": "git",
"url": "https://github.com/doctrine/collections.git",
"reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/collections/zipball/55f8b799269a1a472457bd1a41b4f379d4cfba4a",
"reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a",
"shasum": ""
},
"require": {
"php": "^7.1.3 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^6.0",
"phpstan/phpstan-shim": "^0.9.2",
"phpunit/phpunit": "^7.0",
"vimeo/psalm": "^3.8.1"
},
"type": "library",
"autoload": {
"psr-4": {
"Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
}
],
"description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.",
"homepage": "https://www.doctrine-project.org/projects/collections.html",
"keywords": [
"array",
"collections",
"iterators",
"php"
],
"time": "2020-07-27T17:53:49+00:00"
},
{
"name": "doctrine/common",
"version": "2.13.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/common.git",
"reference": "f3812c026e557892c34ef37f6ab808a6b567da7f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/common/zipball/f3812c026e557892c34ef37f6ab808a6b567da7f",
"reference": "f3812c026e557892c34ef37f6ab808a6b567da7f",
"shasum": ""
},
"require": {
"doctrine/annotations": "^1.0",
"doctrine/cache": "^1.0",
"doctrine/collections": "^1.0",
"doctrine/event-manager": "^1.0",
"doctrine/inflector": "^1.0",
"doctrine/lexer": "^1.0",
"doctrine/persistence": "^1.3.3",
"doctrine/reflection": "^1.0",
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^1.0",
"phpstan/phpstan": "^0.11",
"phpstan/phpstan-phpunit": "^0.11",
"phpunit/phpunit": "^7.0",
"squizlabs/php_codesniffer": "^3.0",
"symfony/phpunit-bridge": "^4.0.5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.11.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\": "lib/Doctrine/Common"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
},
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com"
}
],
"description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, persistence interfaces, proxies, event system and much more.",
"homepage": "https://www.doctrine-project.org/projects/common.html",
"keywords": [
"common",
"doctrine",
"php"
],
"time": "2020-06-05T16:46:05+00:00"
},
{
"name": "doctrine/data-fixtures",
"version": "1.5.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/data-fixtures.git",
"reference": "51d3d4880d28951fff42a635a2389f8c63baddc5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/51d3d4880d28951fff42a635a2389f8c63baddc5",
"reference": "51d3d4880d28951fff42a635a2389f8c63baddc5",
"shasum": ""
},
"require": {
"doctrine/common": "^2.13|^3.0",
"doctrine/persistence": "^1.3.3|^2.0",
"php": "^7.2 || ^8.0"
},
"conflict": {
"doctrine/phpcr-odm": "<1.3.0"
},
"require-dev": {
"doctrine/coding-standard": "^8.2",
"doctrine/dbal": "^2.5.4",
"doctrine/mongodb-odm": "^1.3.0 || ^2.0.0",
"doctrine/orm": "^2.7.0",
"ext-sqlite3": "*",
"phpunit/phpunit": "^8.0"
},
"suggest": {
"alcaeus/mongo-php-adapter": "For using MongoDB ODM 1.3 with PHP 7 (deprecated)",
"doctrine/mongodb-odm": "For loading MongoDB ODM fixtures",
"doctrine/orm": "For loading ORM fixtures",
"doctrine/phpcr-odm": "For loading PHPCR ODM fixtures"
},
"type": "library",
"autoload": {
"psr-4": {
"Doctrine\\Common\\DataFixtures\\": "lib/Doctrine/Common/DataFixtures"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
}
],
"description": "Data Fixtures for all Doctrine Object Managers",
"homepage": "http://www.doctrine-project.org",
"keywords": [
"database"
],
"time": "2021-01-23T10:20:43+00:00"
},
{
"name": "doctrine/dbal",
"version": "2.12.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
"reference": "adce7a954a1c2f14f85e94aed90c8489af204086"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/adce7a954a1c2f14f85e94aed90c8489af204086",
"reference": "adce7a954a1c2f14f85e94aed90c8489af204086",
"shasum": ""
},
"require": {
"doctrine/cache": "^1.0",
"doctrine/event-manager": "^1.0",
"ext-pdo": "*",
"php": "^7.3 || ^8"
},
"require-dev": {
"doctrine/coding-standard": "^8.1",
"jetbrains/phpstorm-stubs": "^2019.1",
"phpstan/phpstan": "^0.12.40",
"phpunit/phpunit": "^9.4",
"psalm/plugin-phpunit": "^0.10.0",
"symfony/console": "^2.0.5|^3.0|^4.0|^5.0",
"vimeo/psalm": "^3.17.2"
},
"suggest": {
"symfony/console": "For helpful console commands such as SQL execution and import of files."
},
"bin": [
"bin/doctrine-dbal"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\DBAL\\": "lib/Doctrine/DBAL"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
}
],
"description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.",
"homepage": "https://www.doctrine-project.org/projects/dbal.html",
"keywords": [
"abstraction",
"database",
"db2",
"dbal",
"mariadb",
"mssql",
"mysql",
"oci8",
"oracle",
"pdo",
"pgsql",
"postgresql",
"queryobject",
"sasql",
"sql",
"sqlanywhere",
"sqlite",
"sqlserver",
"sqlsrv"
],
"funding": [
{
"url": "https://www.doctrine-project.org/sponsorship.html",
"type": "custom"
},
{
"url": "https://www.patreon.com/phpdoctrine",
"type": "patreon"
},
{
"url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal",
"type": "tidelift"
}
],
"time": "2020-11-14T20:26:58+00:00"
},
{
"name": "doctrine/doctrine-bundle",
"version": "1.12.13",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineBundle.git",
"reference": "85460b85edd8f61a16ad311e7ffc5d255d3c937c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/85460b85edd8f61a16ad311e7ffc5d255d3c937c",
"reference": "85460b85edd8f61a16ad311e7ffc5d255d3c937c",
"shasum": ""
},
"require": {
"doctrine/dbal": "^2.5.12|^3.0",
"doctrine/doctrine-cache-bundle": "~1.2",
"doctrine/persistence": "^1.3.3",
"jdorn/sql-formatter": "^1.2.16",
"php": "^7.1 || ^8.0",
"symfony/cache": "^3.4.30|^4.3.3",
"symfony/config": "^3.4.30|^4.3.3",
"symfony/console": "^3.4.30|^4.3.3",
"symfony/dependency-injection": "^3.4.30|^4.3.3",
"symfony/doctrine-bridge": "^3.4.30|^4.3.3",
"symfony/framework-bundle": "^3.4.30|^4.3.3",
"symfony/service-contracts": "^1.1.1|^2.0"
},
"conflict": {
"doctrine/orm": "<2.6",
"twig/twig": "<1.34|>=2.0,<2.4"
},
"require-dev": {
"doctrine/coding-standard": "^6.0",
"doctrine/orm": "^2.6",
"ocramius/proxy-manager": "^2.1",
"php-coveralls/php-coveralls": "^2.1",
"phpunit/phpunit": "^7.5",
"symfony/phpunit-bridge": "^4.2",
"symfony/property-info": "^3.4.30|^4.3.3",
"symfony/proxy-manager-bridge": "^3.4|^4|^5",
"symfony/twig-bridge": "^3.4|^4.1",
"symfony/validator": "^3.4.30|^4.3.3",
"symfony/web-profiler-bundle": "^3.4.30|^4.3.3",
"symfony/yaml": "^3.4.30|^4.3.3",
"twig/twig": "^1.34|^2.12"
},
"suggest": {
"doctrine/orm": "The Doctrine ORM integration is optional in the bundle.",
"symfony/web-profiler-bundle": "To use the data collector."
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "2.3.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Bundle\\DoctrineBundle\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Symfony Community",
"homepage": "http://symfony.com/contributors"
},
{
"name": "Doctrine Project",
"homepage": "http://www.doctrine-project.org/"
}
],
"description": "Symfony DoctrineBundle",
"homepage": "http://www.doctrine-project.org",
"keywords": [
"database",
"dbal",
"orm",
"persistence"
],
"time": "2020-11-14T13:38:44+00:00"
},
{
"name": "doctrine/doctrine-cache-bundle",
"version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineCacheBundle.git",
"reference": "6bee2f9b339847e8a984427353670bad4e7bdccb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/6bee2f9b339847e8a984427353670bad4e7bdccb",
"reference": "6bee2f9b339847e8a984427353670bad4e7bdccb",
"shasum": ""
},
"require": {
"doctrine/cache": "^1.4.2",
"doctrine/inflector": "^1.0",
"php": "^7.1",
"symfony/doctrine-bridge": "^3.4|^4.0"
},
"require-dev": {
"instaclick/coding-standard": "~1.1",
"instaclick/object-calisthenics-sniffs": "dev-master",
"instaclick/symfony2-coding-standard": "dev-remaster",
"phpunit/phpunit": "^7.0",
"predis/predis": "~0.8",
"satooshi/php-coveralls": "^1.0",
"squizlabs/php_codesniffer": "~1.5",
"symfony/console": "^3.4|^4.0",
"symfony/finder": "^3.4|^4.0",
"symfony/framework-bundle": "^3.4|^4.0",
"symfony/phpunit-bridge": "^3.4|^4.0",
"symfony/security-acl": "^2.8",
"symfony/validator": "^3.4|^4.0",
"symfony/yaml": "^3.4|^4.0"
},
"suggest": {
"symfony/security-acl": "For using this bundle to cache ACLs"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "1.4.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Bundle\\DoctrineCacheBundle\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Fabio B. Silva",
"email": "fabio.bat.silva@gmail.com"
},
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@hotmail.com"
},
{
"name": "Symfony Community",
"homepage": "http://symfony.com/contributors"
},
{
"name": "Doctrine Project",
"homepage": "http://www.doctrine-project.org/"
}
],
"description": "Symfony Bundle for Doctrine Cache",
"homepage": "https://www.doctrine-project.org",
"keywords": [
"cache",
"caching"
],
"abandoned": true,
"time": "2019-11-29T11:22:01+00:00"
},
{
"name": "doctrine/doctrine-fixtures-bundle",
"version": "v2.4.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineFixturesBundle.git",
"reference": "74b8cc70a4a25b774628ee59f4cdf3623a146273"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/74b8cc70a4a25b774628ee59f4cdf3623a146273",
"reference": "74b8cc70a4a25b774628ee59f4cdf3623a146273",
"shasum": ""
},
"require": {
"doctrine/data-fixtures": "~1.0",
"doctrine/doctrine-bundle": "~1.0",
"php": ">=5.3.2",
"symfony/doctrine-bridge": "~2.7|~3.0|~4.0"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "2.4.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Bundle\\FixturesBundle\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Symfony Community",
"homepage": "http://symfony.com/contributors"
},
{
"name": "Doctrine Project",
"homepage": "http://www.doctrine-project.org"
},
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
}
],
"description": "Symfony DoctrineFixturesBundle",
"homepage": "http://www.doctrine-project.org",
"keywords": [
"Fixture",
"persistence"
],
"time": "2017-10-30T19:26:42+00:00"
},
{
"name": "doctrine/doctrine-migrations-bundle",
"version": "v1.3.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineMigrationsBundle.git",
"reference": "49fa399181db4bf4f9f725126bd1cb65c4398dce"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/49fa399181db4bf4f9f725126bd1cb65c4398dce",
"reference": "49fa399181db4bf4f9f725126bd1cb65c4398dce",
"shasum": ""
},
"require": {
"doctrine/doctrine-bundle": "~1.0",
"doctrine/migrations": "^1.1",
"php": ">=5.4.0",
"symfony/framework-bundle": "~2.7|~3.3|~4.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^7.4"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "1.3-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Bundle\\MigrationsBundle\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Symfony Community",
"homepage": "http://symfony.com/contributors"
},
{
"name": "Doctrine Project",
"homepage": "http://www.doctrine-project.org"
},
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
}
],
"description": "Symfony DoctrineMigrationsBundle",
"homepage": "http://www.doctrine-project.org",
"keywords": [
"dbal",
"migrations",
"schema"
],
"time": "2018-12-03T11:55:33+00:00"
},
{
"name": "doctrine/event-manager",
"version": "1.1.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/event-manager.git",
"reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f",
"reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"conflict": {
"doctrine/common": "<2.9@dev"
},
"require-dev": {
"doctrine/coding-standard": "^6.0",
"phpunit/phpunit": "^7.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\": "lib/Doctrine/Common"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
},
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com"
}
],
"description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.",
"homepage": "https://www.doctrine-project.org/projects/event-manager.html",
"keywords": [
"event",
"event dispatcher",
"event manager",
"event system",
"events"
],
"time": "2020-05-29T18:28:51+00:00"
},
{
"name": "doctrine/inflector",
"version": "1.4.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
"reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/4650c8b30c753a76bf44fb2ed00117d6f367490c",
"reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^7.0",
"phpstan/phpstan": "^0.11",
"phpstan/phpstan-phpunit": "^0.11",
"phpstan/phpstan-strict-rules": "^0.11",
"phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector",
"Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
}
],
"description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.",
"homepage": "https://www.doctrine-project.org/projects/inflector.html",
"keywords": [
"inflection",
"inflector",
"lowercase",
"manipulation",
"php",
"plural",
"singular",
"strings",
"uppercase",
"words"
],
"time": "2020-05-29T07:19:59+00:00"
},
{
"name": "doctrine/instantiator",
"version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/instantiator.git",
"reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
"reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^8.0",
"ext-pdo": "*",
"ext-phar": "*",
"phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
"phpstan/phpstan": "^0.12",
"phpstan/phpstan-phpunit": "^0.12",
"phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com",
"homepage": "https://ocramius.github.io/"
}
],
"description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
"homepage": "https://www.doctrine-project.org/projects/instantiator.html",
"keywords": [
"constructor",
"instantiate"
],
"time": "2020-11-10T18:47:58+00:00"
},
{
"name": "doctrine/lexer",
"version": "1.2.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
"reference": "e864bbf5904cb8f5bb334f99209b48018522f042"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042",
"reference": "e864bbf5904cb8f5bb334f99209b48018522f042",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^6.0",
"phpstan/phpstan": "^0.11.8",
"phpunit/phpunit": "^8.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.2.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
}
],
"description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
"homepage": "https://www.doctrine-project.org/projects/lexer.html",
"keywords": [
"annotations",
"docblock",
"lexer",
"parser",
"php"
],
"time": "2020-05-25T17:44:05+00:00"
},
{
"name": "doctrine/migrations",
"version": "v1.8.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/migrations.git",
"reference": "215438c0eef3e5f9b7da7d09c6b90756071b43e6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/migrations/zipball/215438c0eef3e5f9b7da7d09c6b90756071b43e6",
"reference": "215438c0eef3e5f9b7da7d09c6b90756071b43e6",
"shasum": ""
},
"require": {
"doctrine/dbal": "~2.6",
"ocramius/proxy-manager": "^1.0|^2.0",
"php": "^7.1",
"symfony/console": "~3.3|^4.0"
},
"require-dev": {
"doctrine/coding-standard": "^1.0",
"doctrine/orm": "~2.5",
"jdorn/sql-formatter": "~1.1",
"mikey179/vfsstream": "^1.6",
"phpunit/phpunit": "~7.0",
"squizlabs/php_codesniffer": "^3.0",
"symfony/yaml": "~3.3|^4.0"
},
"suggest": {
"jdorn/sql-formatter": "Allows to generate formatted SQL with the diff command.",
"symfony/yaml": "Allows the use of yaml for migration configuration files."
},
"bin": [
"bin/doctrine-migrations"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "v1.8.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\DBAL\\Migrations\\": "lib/Doctrine/DBAL/Migrations",
"Doctrine\\Migrations\\": "lib/Doctrine/Migrations"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Michael Simonson",
"email": "contact@mikesimonson.com"
}
],
"description": "Database Schema migrations using Doctrine DBAL",
"homepage": "https://www.doctrine-project.org/projects/migrations.html",
"keywords": [
"database",
"migrations"
],
"time": "2018-06-06T21:00:30+00:00"
},
{
"name": "doctrine/orm",
"version": "2.7.5",
"source": {
"type": "git",
"url": "https://github.com/doctrine/orm.git",
"reference": "01187c9260cd085529ddd1273665217cae659640"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/orm/zipball/01187c9260cd085529ddd1273665217cae659640",
"reference": "01187c9260cd085529ddd1273665217cae659640",
"shasum": ""
},
"require": {
"composer/package-versions-deprecated": "^1.8",
"doctrine/annotations": "^1.11.1",
"doctrine/cache": "^1.9.1",
"doctrine/collections": "^1.5",
"doctrine/common": "^2.11 || ^3.0",
"doctrine/dbal": "^2.9.3",
"doctrine/event-manager": "^1.1",
"doctrine/inflector": "^1.0",
"doctrine/instantiator": "^1.3",
"doctrine/lexer": "^1.0",
"doctrine/persistence": "^1.3.3 || ^2.0",
"ext-pdo": "*",
"php": "^7.1",
"symfony/console": "^3.0|^4.0|^5.0"
},
"require-dev": {
"doctrine/coding-standard": "^6.0",
"phpstan/phpstan": "^0.12.18",
"phpunit/phpunit": "^8.0",
"symfony/yaml": "^3.4|^4.0|^5.0",
"vimeo/psalm": "^3.11"
},
"suggest": {
"symfony/yaml": "If you want to use YAML Metadata Mapping Driver"
},
"bin": [
"bin/doctrine"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.7.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\ORM\\": "lib/Doctrine/ORM"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com"
}
],
"description": "Object-Relational-Mapper for PHP",
"homepage": "https://www.doctrine-project.org/projects/orm.html",
"keywords": [
"database",
"orm"
],
"time": "2020-12-03T08:52:14+00:00"
},
{
"name": "doctrine/persistence",
"version": "1.3.8",
"source": {
"type": "git",
"url": "https://github.com/doctrine/persistence.git",
"reference": "7a6eac9fb6f61bba91328f15aa7547f4806ca288"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/persistence/zipball/7a6eac9fb6f61bba91328f15aa7547f4806ca288",
"reference": "7a6eac9fb6f61bba91328f15aa7547f4806ca288",
"shasum": ""
},
"require": {
"doctrine/annotations": "^1.0",
"doctrine/cache": "^1.0",
"doctrine/collections": "^1.0",
"doctrine/event-manager": "^1.0",
"doctrine/reflection": "^1.2",
"php": "^7.1 || ^8.0"
},
"conflict": {
"doctrine/common": "<2.10@dev"
},
"require-dev": {
"doctrine/coding-standard": "^6.0",
"phpstan/phpstan": "^0.11",
"phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
"vimeo/psalm": "^3.11"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.3.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\": "lib/Doctrine/Common",
"Doctrine\\Persistence\\": "lib/Doctrine/Persistence"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
},
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com"
}
],
"description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.",
"homepage": "https://doctrine-project.org/projects/persistence.html",
"keywords": [
"mapper",
"object",
"odm",
"orm",
"persistence"
],
"time": "2020-06-20T12:56:16+00:00"
},
{
"name": "doctrine/reflection",
"version": "1.2.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/reflection.git",
"reference": "fa587178be682efe90d005e3a322590d6ebb59a5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/reflection/zipball/fa587178be682efe90d005e3a322590d6ebb59a5",
"reference": "fa587178be682efe90d005e3a322590d6ebb59a5",
"shasum": ""
},
"require": {
"doctrine/annotations": "^1.0",
"ext-tokenizer": "*",
"php": "^7.1 || ^8.0"
},
"conflict": {
"doctrine/common": "<2.9"
},
"require-dev": {
"doctrine/coding-standard": "^6.0 || ^8.2.0",
"doctrine/common": "^2.10",
"phpstan/phpstan": "^0.11.0 || ^0.12.20",
"phpstan/phpstan-phpunit": "^0.11.0 || ^0.12.16",
"phpunit/phpunit": "^7.5 || ^9.1.5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.2.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\": "lib/Doctrine/Common"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
},
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com"
}
],
"description": "The Doctrine Reflection project is a simple library used by the various Doctrine projects which adds some additional functionality on top of the reflection functionality that comes with PHP. It allows you to get the reflection information about classes, methods and properties statically.",
"homepage": "https://www.doctrine-project.org/projects/reflection.html",
"keywords": [
"reflection",
"static"
],
"abandoned": "roave/better-reflection",
"time": "2020-10-27T21:46:55+00:00"
},
{
"name": "egeloen/ckeditor-bundle",
"version": "6.0.1",
"source": {
"type": "git",
"url": "https://github.com/egeloen/IvoryCKEditorBundle.git",
"reference": "9c9926918d3ae4b4d89ca2db578766ab9829ee7a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/egeloen/IvoryCKEditorBundle/zipball/9c9926918d3ae4b4d89ca2db578766ab9829ee7a",
"reference": "9c9926918d3ae4b4d89ca2db578766ab9829ee7a",
"shasum": ""
},
"require": {
"egeloen/json-builder": "^2.0|^3.0",
"php": "^5.6|^7.0",
"symfony/dependency-injection": "^2.7|^3.0",
"symfony/form": "^2.7|^3.0",
"symfony/framework-bundle": "^2.7|^3.0"
},
"require-dev": {
"composer/composer": "^1.0",
"friendsofphp/php-cs-fixer": "^2.0",
"phpunit/phpunit": "^5.0|^6.0",
"sensio/distribution-bundle": "^3.0.12|^4.0|^5.0",
"symfony/asset": "^2.7|^3.0",
"symfony/console": "^2.7|^3.0",
"symfony/phpunit-bridge": "^2.7|^3.0",
"symfony/templating": "^2.7|^3.0",
"symfony/twig-bridge": "^2.7|^3.0",
"symfony/yaml": "^2.7|^3.0",
"twig/twig": "^1.12"
},
"suggest": {
"egeloen/form-extra-bundle": "Allows to load CKEditor asynchronously",
"sensio/distribution-bundle": "Allows to install CKEditor via a script handler",
"symfony/asset": "Allows to rewrite/version assets",
"symfony/templating": "Allows to use PHP templates",
"symfony/twig-bridge": "Allows to use Twig templates",
"twig/twig": "Allows to use Twig templates"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "6.0-dev"
}
},
"autoload": {
"psr-4": {
"Ivory\\CKEditorBundle\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Eric GELOEN",
"email": "geloen.eric@gmail.com"
}
],
"description": "Provides a CKEditor integration for your Symfony2 Project.",
"keywords": [
"CKEditor"
],
"time": "2017-08-18T08:19:45+00:00"
},
{
"name": "egeloen/json-builder",
"version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/egeloen/ivory-json-builder.git",
"reference": "3e70bc681891d8aca88dd72164caea659739f284"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/egeloen/ivory-json-builder/zipball/3e70bc681891d8aca88dd72164caea659739f284",
"reference": "3e70bc681891d8aca88dd72164caea659739f284",
"shasum": ""
},
"require": {
"ext-json": "*",
"php": "^5.6|^7.0",
"symfony/property-access": "^2.7|^3.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.0",
"phpunit/phpunit": "^5.0",
"symfony/phpunit-bridge": "^2.7|^3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
}
},
"autoload": {
"psr-4": {
"Ivory\\JsonBuilder\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Eric GELOEN",
"email": "geloen.eric@gmail.com"
}
],
"description": "JSON builder with escaping control for PHP 5.6+",
"keywords": [
"Escape",
"builder",
"json"
],
"time": "2017-02-27T20:18:54+00:00"
},
{
"name": "evenement/evenement",
"version": "v3.0.1",
"source": {
"type": "git",
"url": "https://github.com/igorw/evenement.git",
"reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/igorw/evenement/zipball/531bfb9d15f8aa57454f5f0285b18bec903b8fb7",
"reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7",
"shasum": ""
},
"require": {
"php": ">=7.0"
},
"require-dev": {
"phpunit/phpunit": "^6.0"
},
"type": "library",
"autoload": {
"psr-0": {
"Evenement": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Igor Wiedler",
"email": "igor@wiedler.ch"
}
],
"description": "Événement is a very simple event dispatching library for PHP",
"keywords": [
"event-dispatcher",
"event-emitter"
],
"time": "2017-07-23T21:35:13+00:00"
},
{
"name": "fig/link-util",
"version": "1.1.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/link-util.git",
"reference": "5d7b8d04ed3393b4b59968ca1e906fb7186d81e8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/link-util/zipball/5d7b8d04ed3393b4b59968ca1e906fb7186d81e8",
"reference": "5d7b8d04ed3393b4b59968ca1e906fb7186d81e8",
"shasum": ""
},
"require": {
"php": ">=5.5.0",
"psr/link": "~1.0@dev"
},
"provide": {
"psr/link-implementation": "1.0"
},
"require-dev": {
"phpunit/phpunit": "^5.1",
"squizlabs/php_codesniffer": "^2.3.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Fig\\Link\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common utility implementations for HTTP links",
"keywords": [
"http",
"http-link",
"link",
"psr",
"psr-13",
"rest"
],
"time": "2021-02-03T23:36:04+00:00"
},
{
"name": "gos/pubsub-router-bundle",
"version": "v0.3.5",
"source": {
"type": "git",
"url": "https://github.com/GeniusesOfSymfony/PubSubRouterBundle.git",
"reference": "a3f9666455dc42f38a7ce31ca2fc55bd27421ea0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/GeniusesOfSymfony/PubSubRouterBundle/zipball/a3f9666455dc42f38a7ce31ca2fc55bd27421ea0",
"reference": "a3f9666455dc42f38a7ce31ca2fc55bd27421ea0",
"shasum": ""
},
"require": {
"doctrine/cache": "~1.4",
"php": ">=5.5",
"symfony/console": "~3.4|~4.0",
"symfony/framework-bundle": "~3.4|~4.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "0.3.x-dev"
}
},
"autoload": {
"psr-4": {
"Gos\\Bundle\\PubSubRouterBundle\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Johann Saunier",
"email": "johann_27@hotmail.fr"
}
],
"description": "Symfony PubSub Router Bundle",
"homepage": "https://github.com/GeniusesOfSymfony/PubSubRouterBundle",
"keywords": [
"PubSub Bundle",
"WAMP",
"bundle",
"pubsub",
"redis",
"zmq"
],
"time": "2018-10-04T17:09:23+00:00"
},
{
"name": "gos/web-socket-bundle",
"version": "v1.10.4",
"source": {
"type": "git",
"url": "https://github.com/GeniusesOfSymfony/WebSocketBundle.git",
"reference": "2d8dfd9dd49ee9328524f43d3afafbb50e0386b9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/GeniusesOfSymfony/WebSocketBundle/zipball/2d8dfd9dd49ee9328524f43d3afafbb50e0386b9",
"reference": "2d8dfd9dd49ee9328524f43d3afafbb50e0386b9",
"shasum": ""
},
"require": {
"cboden/ratchet": "^0.4.1",
"gos/pubsub-router-bundle": "^0.3",
"gos/websocket-client": "^0.1",
"ocramius/proxy-manager": "^1.0|^2.1",
"php": ">=7.2",
"psr/log": "^1.0",
"react/event-loop": "^1.0",
"symfony/config": "^2.3|^3.0|^4.0",
"symfony/console": "^2.3|^3.0|^4.0",
"symfony/dependency-injection": "^2.3|^3.0|^4.0",
"symfony/deprecation-contracts": "^2.1",
"symfony/event-dispatcher": "^2.3|^3.0|^4.0",
"symfony/http-foundation": "^2.3|^3.0|^4.0",
"symfony/http-kernel": "^2.3|^3.0|^4.0",
"symfony/security-core": "^2.3|^3.0|^4.0"
},
"conflict": {
"twig/twig": "<1.34|>=2.0,<2.4"
},
"suggest": {
"doctrine/cache": "^1.0 to use doctrine/cache as a client driver",
"ext-amqp": "* to use the amqp pusher",
"ext-zmq": "* to use the zmq pusher",
"gos/react-amqp": "^0.2 to use the amqp server push handler",
"predis/predis": "^1.0 to use Predis as a client driver",
"react/zmq": "^0.4 to use zmq server push handler",
"symfony/cache": "^3.1|^4.0 to use symfony/cache as a client driver",
"symfony/options-resolver": "^2.3|^3.0|^4.0 to use the pushers",
"symfony/serializer": "^2.3|^3.0|^4.0 to use the pushers",
"symfony/stopwatch": "^2.3|^3.0|^4.0 to use the data collectors",
"twig/twig": "^1.34|^2.4|^3.0 to use the Twig extension"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-1.x": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"Gos\\Bundle\\WebSocketBundle\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jeremy Dare",
"email": "jeremy.d.dare@gmail.com"
},
{
"name": "Johann Saunier",
"email": "johann_27@hotmail.fr"
}
],
"description": "Symfony Web Socket Bundle",
"homepage": "https://github.com/GeniusesOfSymfony/WebSocketBundle",
"keywords": [
"Ratchet",
"WAMP",
"Web Socket Bundle",
"io",
"websocket"
],
"time": "2020-07-06T14:08:35+00:00"
},
{
"name": "gos/websocket-client",
"version": "v0.1.2",
"source": {
"type": "git",
"url": "https://github.com/GeniusesOfSymfony/WebSocketPhpClient.git",
"reference": "13bb38cb01acee648fea1a6ca4ad3dc6148da7fe"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/GeniusesOfSymfony/WebSocketPhpClient/zipball/13bb38cb01acee648fea1a6ca4ad3dc6148da7fe",
"reference": "13bb38cb01acee648fea1a6ca4ad3dc6148da7fe",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "0.1.x-dev"
}
},
"autoload": {
"psr-4": {
"Gos\\Component\\WebSocketClient\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Johann Saunier",
"email": "johann_27@hotmail.fr"
},
{
"name": "Martin Bažík",
"email": "martin@bazo.sk"
}
],
"description": "WAMP client in PHP",
"keywords": [
"Ratchet",
"WAMP",
"websocket"
],
"time": "2015-08-04T11:43:11+00:00"
},
{
"name": "gregwar/captcha",
"version": "v1.1.9",
"source": {
"type": "git",
"url": "https://github.com/Gregwar/Captcha.git",
"reference": "4bb668e6b40e3205a020ca5ee4ca8cff8b8780c5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Gregwar/Captcha/zipball/4bb668e6b40e3205a020ca5ee4ca8cff8b8780c5",
"reference": "4bb668e6b40e3205a020ca5ee4ca8cff8b8780c5",
"shasum": ""
},
"require": {
"ext-gd": "*",
"ext-mbstring": "*",
"php": ">=5.3.0",
"symfony/finder": "*"
},
"require-dev": {
"phpunit/phpunit": "^6.4"
},
"type": "captcha",
"autoload": {
"psr-4": {
"Gregwar\\": "src/Gregwar"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Grégoire Passault",
"email": "g.passault@gmail.com",
"homepage": "http://www.gregwar.com/"
},
{
"name": "Jeremy Livingston",
"email": "jeremy.j.livingston@gmail.com"
}
],
"description": "Captcha generator",
"homepage": "https://github.com/Gregwar/Captcha",
"keywords": [
"bot",
"captcha",
"spam"
],
"time": "2020-03-24T14:39:05+00:00"
},
{
"name": "gregwar/captcha-bundle",
"version": "v2.0.7",
"source": {
"type": "git",
"url": "https://github.com/Gregwar/CaptchaBundle.git",
"reference": "3ccfdf1c9324acbdfbcccea2c454075115741b3a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Gregwar/CaptchaBundle/zipball/3ccfdf1c9324acbdfbcccea2c454075115741b3a",
"reference": "3ccfdf1c9324acbdfbcccea2c454075115741b3a",
"shasum": ""
},
"require": {
"gregwar/captcha": "~1.1",
"php": ">=5.3.9",
"symfony/form": "~2.8|~3.0|~4.0",
"symfony/framework-bundle": "~2.8|~3.0|~4.0",
"twig/twig": "^1.40|^2.9"
},
"type": "captcha-bundle",
"autoload": {
"psr-4": {
"Gregwar\\CaptchaBundle\\": "/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Grégoire Passault",
"email": "g.passault@gmail.com",
"homepage": "http://www.gregwar.com/"
},
{
"name": "Jeremy Livingston",
"email": "jeremy.j.livingston@gmail.com"
}
],
"description": "Captcha bundle",
"homepage": "https://github.com/Gregwar/CaptchaBundle",
"keywords": [
"Symfony2",
"bot",
"captcha",
"code",
"security",
"spam",
"visual"
],
"time": "2019-09-23T13:07:46+00:00"
},
{
"name": "guzzlehttp/guzzle",
"version": "7.2.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
"reference": "0aa74dfb41ae110835923ef10a9d803a22d50e79"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/0aa74dfb41ae110835923ef10a9d803a22d50e79",
"reference": "0aa74dfb41ae110835923ef10a9d803a22d50e79",
"shasum": ""
},
"require": {
"ext-json": "*",
"guzzlehttp/promises": "^1.4",
"guzzlehttp/psr7": "^1.7",
"php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0"
},
"provide": {
"psr/http-client-implementation": "1.0"
},
"require-dev": {
"ext-curl": "*",
"php-http/client-integration-tests": "^3.0",
"phpunit/phpunit": "^8.5.5 || ^9.3.5",
"psr/log": "^1.1"
},
"suggest": {
"ext-curl": "Required for CURL handler support",
"ext-intl": "Required for Internationalized Domain Name (IDN) support",
"psr/log": "Required for using the Log middleware"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "7.1-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com",
"homepage": "https://sagikazarmark.hu"
}
],
"description": "Guzzle is a PHP HTTP client library",
"homepage": "http://guzzlephp.org/",
"keywords": [
"client",
"curl",
"framework",
"http",
"http client",
"psr-18",
"psr-7",
"rest",
"web service"
],
"time": "2020-10-10T11:47:56+00:00"
},
{
"name": "guzzlehttp/promises",
"version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
"reference": "60d379c243457e073cff02bc323a2a86cb355631"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631",
"reference": "60d379c243457e073cff02bc323a2a86cb355631",
"shasum": ""
},
"require": {
"php": ">=5.5"
},
"require-dev": {
"symfony/phpunit-bridge": "^4.4 || ^5.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Promise\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
}
],
"description": "Guzzle promises library",
"keywords": [
"promise"
],
"time": "2020-09-30T07:37:28+00:00"
},
{
"name": "guzzlehttp/psr7",
"version": "1.7.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3",
"reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3",
"shasum": ""
},
"require": {
"php": ">=5.4.0",
"psr/http-message": "~1.0",
"ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
},
"provide": {
"psr/http-message-implementation": "1.0"
},
"require-dev": {
"ext-zlib": "*",
"phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10"
},
"suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.7-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Psr7\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "Tobias Schultze",
"homepage": "https://github.com/Tobion"
}
],
"description": "PSR-7 message implementation that also provides common utility methods",
"keywords": [
"http",
"message",
"psr-7",
"request",
"response",
"stream",
"uri",
"url"
],
"time": "2020-09-30T07:37:11+00:00"
},
{
"name": "incenteev/composer-parameter-handler",
"version": "v2.1.4",
"source": {
"type": "git",
"url": "https://github.com/Incenteev/ParameterHandler.git",
"reference": "084befb11ec21faeadcddefb88b66132775ff59b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/084befb11ec21faeadcddefb88b66132775ff59b",
"reference": "084befb11ec21faeadcddefb88b66132775ff59b",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"symfony/yaml": "^2.3 || ^3.0 || ^4.0 || ^5.0"
},
"require-dev": {
"composer/composer": "^1.0@dev",
"symfony/filesystem": "^2.3 || ^3 || ^4 || ^5",
"symfony/phpunit-bridge": "^4.0 || ^5.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.1.x-dev"
}
},
"autoload": {
"psr-4": {
"Incenteev\\ParameterHandler\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Christophe Coevoet",
"email": "stof@notk.org"
}
],
"description": "Composer script handling your ignored parameter file",
"homepage": "https://github.com/Incenteev/ParameterHandler",
"keywords": [
"parameters management"
],
"time": "2020-03-17T21:10:00+00:00"
},
{
"name": "jasig/phpcas",
"version": "1.3.9",
"source": {
"type": "git",
"url": "https://github.com/apereo/phpCAS.git",
"reference": "7325865c4cfb5005ed4e4c5cf01823be1726a2a0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/apereo/phpCAS/zipball/7325865c4cfb5005ed4e4c5cf01823be1726a2a0",
"reference": "7325865c4cfb5005ed4e4c5cf01823be1726a2a0",
"shasum": ""
},
"require": {
"ext-curl": "*",
"php": ">=5.4.0",
"psr/log": "^1.0.0"
},
"require-dev": {
"monolog/monolog": "^1.0.0",
"phpunit/phpunit": ">=4.8.35 <8"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.3.x-dev"
}
},
"autoload": {
"classmap": [
"source/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "Joachim Fritschi",
"homepage": "https://wiki.jasig.org/display/~fritschi"
},
{
"name": "Adam Franco",
"homepage": "https://wiki.jasig.org/display/~adamfranco"
}
],
"description": "Provides a simple API for authenticating users against a CAS server",
"homepage": "https://wiki.jasig.org/display/CASC/phpCAS",
"keywords": [
"apereo",
"cas",
"jasig"
],
"time": "2021-01-31T21:13:59+00:00"
},
{
"name": "jdorn/sql-formatter",
"version": "v1.2.17",
"source": {
"type": "git",
"url": "https://github.com/jdorn/sql-formatter.git",
"reference": "64990d96e0959dff8e059dfcdc1af130728d92bc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc",
"reference": "64990d96e0959dff8e059dfcdc1af130728d92bc",
"shasum": ""
},
"require": {
"php": ">=5.2.4"
},
"require-dev": {
"phpunit/phpunit": "3.7.*"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.3.x-dev"
}
},
"autoload": {
"classmap": [
"lib"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jeremy Dorn",
"email": "jeremy@jeremydorn.com",
"homepage": "http://jeremydorn.com/"
}
],
"description": "a PHP SQL highlighting library",
"homepage": "https://github.com/jdorn/sql-formatter/",
"keywords": [
"highlight",
"sql"
],
"time": "2014-01-12T16:20:24+00:00"
},
{
"name": "kriswallsmith/assetic",
"version": "v1.4.0",
"source": {
"type": "git",
"url": "https://github.com/kriswallsmith/assetic.git",
"reference": "e911c437dbdf006a8f62c2f59b15b2d69a5e0aa1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/kriswallsmith/assetic/zipball/e911c437dbdf006a8f62c2f59b15b2d69a5e0aa1",
"reference": "e911c437dbdf006a8f62c2f59b15b2d69a5e0aa1",
"shasum": ""
},
"require": {
"php": ">=5.3.1",
"symfony/process": "~2.1|~3.0"
},
"conflict": {
"twig/twig": "<1.27"
},
"require-dev": {
"leafo/lessphp": "^0.3.7",
"leafo/scssphp": "~0.1",
"meenie/javascript-packer": "^1.1",
"mrclay/minify": "<2.3",
"natxet/cssmin": "3.0.4",
"patchwork/jsqueeze": "~1.0|~2.0",
"phpunit/phpunit": "~4.8 || ^5.6",
"psr/log": "~1.0",
"ptachoire/cssembed": "~1.0",
"symfony/phpunit-bridge": "~2.7|~3.0",
"twig/twig": "~1.23|~2.0",
"yfix/packager": "dev-master"
},
"suggest": {
"leafo/lessphp": "Assetic provides the integration with the lessphp LESS compiler",
"leafo/scssphp": "Assetic provides the integration with the scssphp SCSS compiler",
"leafo/scssphp-compass": "Assetic provides the integration with the SCSS compass plugin",
"patchwork/jsqueeze": "Assetic provides the integration with the JSqueeze JavaScript compressor",
"ptachoire/cssembed": "Assetic provides the integration with phpcssembed to embed data uris",
"twig/twig": "Assetic provides the integration with the Twig templating engine"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4-dev"
}
},
"autoload": {
"psr-0": {
"Assetic": "src/"
},
"files": [
"src/functions.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Kris Wallsmith",
"email": "kris.wallsmith@gmail.com",
"homepage": "http://kriswallsmith.net/"
}
],
"description": "Asset Management for PHP",
"homepage": "https://github.com/kriswallsmith/assetic",
"keywords": [
"assets",
"compression",
"minification"
],
"time": "2016-11-11T18:43:20+00:00"
},
{
"name": "laminas/laminas-code",
"version": "3.5.1",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-code.git",
"reference": "b549b70c0bb6e935d497f84f750c82653326ac77"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-code/zipball/b549b70c0bb6e935d497f84f750c82653326ac77",
"reference": "b549b70c0bb6e935d497f84f750c82653326ac77",
"shasum": ""
},
"require": {
"laminas/laminas-eventmanager": "^3.3",
"laminas/laminas-zendframework-bridge": "^1.1",
"php": "^7.3 || ~8.0.0"
},
"conflict": {
"phpspec/prophecy": "<1.9.0"
},
"replace": {
"zendframework/zend-code": "^3.4.1"
},
"require-dev": {
"doctrine/annotations": "^1.10.4",
"ext-phar": "*",
"laminas/laminas-coding-standard": "^1.0.0",
"laminas/laminas-stdlib": "^3.3.0",
"phpunit/phpunit": "^9.4.2"
},
"suggest": {
"doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features",
"laminas/laminas-stdlib": "Laminas\\Stdlib component"
},
"type": "library",
"autoload": {
"psr-4": {
"Laminas\\Code\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"description": "Extensions to the PHP Reflection API, static code scanning, and code generation",
"homepage": "https://laminas.dev",
"keywords": [
"code",
"laminas"
],
"funding": [
{
"url": "https://funding.communitybridge.org/projects/laminas-project",
"type": "community_bridge"
}
],
"time": "2020-11-30T20:16:31+00:00"
},
{
"name": "laminas/laminas-eventmanager",
"version": "3.3.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-eventmanager.git",
"reference": "1940ccf30e058b2fd66f5a9d696f1b5e0027b082"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/1940ccf30e058b2fd66f5a9d696f1b5e0027b082",
"reference": "1940ccf30e058b2fd66f5a9d696f1b5e0027b082",
"shasum": ""
},
"require": {
"laminas/laminas-zendframework-bridge": "^1.0",
"php": "^7.3 || ^8.0"
},
"replace": {
"zendframework/zend-eventmanager": "^3.2.1"
},
"require-dev": {
"container-interop/container-interop": "^1.1",
"laminas/laminas-coding-standard": "~1.0.0",
"laminas/laminas-stdlib": "^2.7.3 || ^3.0",
"phpbench/phpbench": "^0.17.1",
"phpunit/phpunit": "^8.5.8"
},
"suggest": {
"container-interop/container-interop": "^1.1, to use the lazy listeners feature",
"laminas/laminas-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.3.x-dev",
"dev-develop": "3.4.x-dev"
}
},
"autoload": {
"psr-4": {
"Laminas\\EventManager\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"description": "Trigger and listen to events within a PHP application",
"homepage": "https://laminas.dev",
"keywords": [
"event",
"eventmanager",
"events",
"laminas"
],
"funding": [
{
"url": "https://funding.communitybridge.org/projects/laminas-project",
"type": "community_bridge"
}
],
"time": "2020-08-25T11:10:44+00:00"
},
{
"name": "laminas/laminas-zendframework-bridge",
"version": "1.1.1",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-zendframework-bridge.git",
"reference": "6ede70583e101030bcace4dcddd648f760ddf642"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6ede70583e101030bcace4dcddd648f760ddf642",
"reference": "6ede70583e101030bcace4dcddd648f760ddf642",
"shasum": ""
},
"require": {
"php": "^5.6 || ^7.0 || ^8.0"
},
"require-dev": {
"phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3",
"squizlabs/php_codesniffer": "^3.5"
},
"type": "library",
"extra": {
"laminas": {
"module": "Laminas\\ZendFrameworkBridge"
}
},
"autoload": {
"files": [
"src/autoload.php"
],
"psr-4": {
"Laminas\\ZendFrameworkBridge\\": "src//"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"description": "Alias legacy ZF class names to Laminas Project equivalents.",
"keywords": [
"ZendFramework",
"autoloading",
"laminas",
"zf"
],
"funding": [
{
"url": "https://funding.communitybridge.org/projects/laminas-project",
"type": "community_bridge"
}
],
"time": "2020-09-14T14:23:00+00:00"
},
{
"name": "lightsaml/lightsaml",
"version": "1.4.1",
"source": {
"type": "git",
"url": "https://github.com/lightSAML/lightSAML.git",
"reference": "377f04d1fb25f2fb2e72dabeff10b336f1cbe4c5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/lightSAML/lightSAML/zipball/377f04d1fb25f2fb2e72dabeff10b336f1cbe4c5",
"reference": "377f04d1fb25f2fb2e72dabeff10b336f1cbe4c5",
"shasum": ""
},
"require": {
"php": ">=5.6",
"robrichards/xmlseclibs": "~2.0|~3.0|~4.0",
"symfony/event-dispatcher": "~2.3|~3.0|~4.0",
"symfony/http-foundation": "~2.3|~3.0|~4.0"
},
"require-dev": {
"monolog/monolog": "~1.3",
"phpunit/phpunit": ">=5.7",
"pimple/pimple": "~3.0",
"symfony/css-selector": "~2.3|~3.0|~4.0",
"symfony/dom-crawler": "~2.3|~3.0|~4.0"
},
"suggest": {
"lightsaml/sp-bundle": "Symfony 2 SP security bundle",
"lightsaml/symfony-bridge": "Symfony 2 build container bridge"
},
"type": "library",
"autoload": {
"psr-0": {
"LightSaml\\Tests\\": "tests/",
"LightSaml\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Milos Tomic",
"email": "tmilos@gmail.com",
"homepage": "https://github.com/tmilos/",
"role": "Developer"
}
],
"description": "Light SAML 2.0 PHP library",
"homepage": "https://www.lightsaml.com/",
"keywords": [
"SAML 2.0",
"Single Logout",
"Single SignOn",
"library",
"lightSAML",
"php"
],
"time": "2018-05-28T11:21:22+00:00"
},
{
"name": "lightsaml/sp-bundle",
"version": "1.2.1",
"source": {
"type": "git",
"url": "https://github.com/lightSAML/SpBundle.git",
"reference": "2150175dd2a5ad9cccfa7892e8c4af04503f5881"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/lightSAML/SpBundle/zipball/2150175dd2a5ad9cccfa7892e8c4af04503f5881",
"reference": "2150175dd2a5ad9cccfa7892e8c4af04503f5881",
"shasum": ""
},
"require": {
"lightsaml/symfony-bridge": "~1.3",
"php": ">=5.6",
"symfony/framework-bundle": "~2.7|~3.0|~4.0",
"symfony/security-bundle": "~2.7|~3.0|~4.0"
},
"require-dev": {
"phpunit/phpunit": "^5.7",
"sebastian/comparator": "^1.2.4|~2.0|~3.0",
"symfony/monolog-bundle": "~2.7|~3.0|~4.0",
"symfony/symfony": "~2.7|~3.0|~4.0"
},
"type": "symfony-bundle",
"autoload": {
"psr-0": {
"LightSaml\\SpBundle\\Tests\\": "tests/",
"LightSaml\\SpBundle\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Milos Tomic",
"email": "tmilos@gmail.com",
"homepage": "http://github.com/tmilos",
"role": "Developer"
}
],
"description": "Light SAML2 SP Symfony Bundle",
"homepage": "http://www.lightsaml.com/SP-Bundle/",
"time": "2019-11-13T19:05:47+00:00"
},
{
"name": "lightsaml/symfony-bridge",
"version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/lightSAML/SymfonyBridgeBundle.git",
"reference": "8d3120825032a7468e894d0ae68630f21cd6035b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/lightSAML/SymfonyBridgeBundle/zipball/8d3120825032a7468e894d0ae68630f21cd6035b",
"reference": "8d3120825032a7468e894d0ae68630f21cd6035b",
"shasum": ""
},
"require": {
"lightsaml/lightsaml": "~1.1",
"php": ">=5.5.1",
"symfony/dependency-injection": "~2.7|~3.0|~4.0",
"symfony/framework-bundle": "~2.7|~3.0|~4.0",
"symfony/yaml": "~2.7|~3.0|~4.0"
},
"require-dev": {
"php-coveralls/php-coveralls": "~2.0",
"phpunit/phpunit": "^5.7",
"symfony/browser-kit": "~2.7|~3.0|~4.0",
"symfony/filesystem": "~2.7|~3.0|~4.0",
"symfony/finder": "~2.7|~3.0|~4.0",
"symfony/routing": "~2.7|~3.0|~4.0"
},
"suggest": {
"lightsaml/lightsamp-idp": "If you will be using IDP LightSAML services"
},
"type": "symfony-bundle",
"autoload": {
"psr-0": {
"LightSaml\\SymfonyBridgeBundle\\Tests\\": "tests/",
"LightSaml\\SymfonyBridgeBundle\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Milos Tomic",
"email": "tmilos@gmail.com",
"homepage": "http://github.com/tmilos",
"role": "Developer"
}
],
"description": "Light SAML Symfony bridge bundle",
"homepage": "http://www.lightsaml.com",
"time": "2018-05-23T08:11:59+00:00"
},
{
"name": "mashape/unirest-php",
"version": "v3.0.4",
"source": {
"type": "git",
"url": "https://github.com/Mashape/unirest-php.git",
"reference": "842c0f242dfaaf85f16b72e217bf7f7c19ab12cb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Mashape/unirest-php/zipball/842c0f242dfaaf85f16b72e217bf7f7c19ab12cb",
"reference": "842c0f242dfaaf85f16b72e217bf7f7c19ab12cb",
"shasum": ""
},
"require": {
"ext-curl": "*",
"php": ">=5.4.0"
},
"require-dev": {
"codeclimate/php-test-reporter": "0.1.*",
"phpunit/phpunit": "~4.4"
},
"suggest": {
"ext-json": "Allows using JSON Bodies for sending and parsing requests"
},
"type": "library",
"autoload": {
"psr-0": {
"Unirest\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "Unirest PHP",
"homepage": "https://github.com/Mashape/unirest-php",
"keywords": [
"client",
"curl",
"http",
"https",
"rest"
],
"time": "2016-08-11T17:49:21+00:00"
},
{
"name": "monolog/monolog",
"version": "1.26.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
"reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/2209ddd84e7ef1256b7af205d0717fb62cfc9c33",
"reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"psr/log": "~1.0"
},
"provide": {
"psr/log-implementation": "1.0.0"
},
"require-dev": {
"aws/aws-sdk-php": "^2.4.9 || ^3.0",
"doctrine/couchdb": "~1.0@dev",
"graylog2/gelf-php": "~1.0",
"php-amqplib/php-amqplib": "~2.4",
"php-console/php-console": "^3.1.3",
"phpstan/phpstan": "^0.12.59",
"phpunit/phpunit": "~4.5",
"ruflin/elastica": ">=0.90 <3.0",
"sentry/sentry": "^0.13",
"swiftmailer/swiftmailer": "^5.3|^6.0"
},
"suggest": {
"aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
"doctrine/couchdb": "Allow sending log messages to a CouchDB server",
"ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
"ext-mongo": "Allow sending log messages to a MongoDB server",
"graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
"mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver",
"php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
"php-console/php-console": "Allow sending log messages to Google Chrome",
"rollbar/rollbar": "Allow sending log messages to Rollbar",
"ruflin/elastica": "Allow sending log messages to an Elastic Search server",
"sentry/sentry": "Allow sending log messages to a Sentry server"
},
"type": "library",
"autoload": {
"psr-4": {
"Monolog\\": "src/Monolog"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "http://seld.be"
}
],
"description": "Sends your logs to files, sockets, inboxes, databases and various web services",
"homepage": "http://github.com/Seldaek/monolog",
"keywords": [
"log",
"logging",
"psr-3"
],
"time": "2020-12-14T12:56:38+00:00"
},
{
"name": "ocramius/proxy-manager",
"version": "2.8.1",
"source": {
"type": "git",
"url": "https://github.com/Ocramius/ProxyManager.git",
"reference": "371c8f2d9d1e888ce1f8f2137d9187252b07ee94"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/371c8f2d9d1e888ce1f8f2137d9187252b07ee94",
"reference": "371c8f2d9d1e888ce1f8f2137d9187252b07ee94",
"shasum": ""
},
"require": {
"laminas/laminas-code": "^3.4.1",
"ocramius/package-versions": "^1.8.0,<1.10.0",
"php": "~7.4.1",
"webimpress/safe-writer": "^2.0.1"
},
"conflict": {
"doctrine/annotations": "<1.6.1",
"laminas/laminas-stdlib": "<3.2.1",
"zendframework/zend-stdlib": "<3.2.1"
},
"require-dev": {
"doctrine/coding-standard": "^6.0.0",
"ext-phar": "*",
"infection/infection": "^0.16.2",
"nikic/php-parser": "^4.4.0",
"phpbench/phpbench": "^0.17.0",
"phpunit/phpunit": "^9.1.1",
"slevomat/coding-standard": "^5.0.4",
"squizlabs/php_codesniffer": "^3.5.4",
"vimeo/psalm": "^3.11.1"
},
"suggest": {
"laminas/laminas-json": "To have the JsonRpc adapter (Remote Object feature)",
"laminas/laminas-soap": "To have the Soap adapter (Remote Object feature)",
"laminas/laminas-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)",
"ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0.x-dev"
}
},
"autoload": {
"psr-4": {
"ProxyManager\\": "src/ProxyManager"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com",
"homepage": "http://ocramius.github.io/"
}
],
"description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies",
"homepage": "https://github.com/Ocramius/ProxyManager",
"keywords": [
"aop",
"lazy loading",
"proxy",
"proxy pattern",
"service proxies"
],
"funding": [
{
"url": "https://github.com/Ocramius",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager",
"type": "tidelift"
}
],
"time": "2020-07-13T19:23:57+00:00"
},
{
"name": "oneup/uploader-bundle",
"version": "1.9.4",
"target-dir": "Oneup/UploaderBundle",
"source": {
"type": "git",
"url": "https://github.com/1up-lab/OneupUploaderBundle.git",
"reference": "8a6dc57c35e12fbc341e52e401a1d286475ec445"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/1up-lab/OneupUploaderBundle/zipball/8a6dc57c35e12fbc341e52e401a1d286475ec445",
"reference": "8a6dc57c35e12fbc341e52e401a1d286475ec445",
"shasum": ""
},
"require": {
"paragonie/random_compat": "^1.1|^2.0",
"php": ">=5.4",
"symfony/asset": "^2.4|^3.0",
"symfony/finder": "^2.4|^3.0",
"symfony/framework-bundle": "^2.4|^3.0",
"symfony/templating": "^2.4|^3.0",
"symfony/translation": "^2.4|^3.0"
},
"require-dev": {
"amazonwebservices/aws-sdk-for-php": "1.5.*",
"knplabs/gaufrette": "0.2.*@dev",
"oneup/flysystem-bundle": "^1.2",
"phpunit/phpunit": "^4.4",
"sensio/framework-extra-bundle": "2.*|^3.0",
"symfony/browser-kit": "2.*|^3.0",
"symfony/class-loader": "2.*|^3.0",
"symfony/security-bundle": "2.*|^3.0",
"twistor/flysystem-stream-wrapper": "^1.0"
},
"suggest": {
"knplabs/knp-gaufrette-bundle": "0.1.*",
"oneup/flysystem-bundle": "^1.2",
"twistor/flysystem-stream-wrapper": "^1.0 (Required when using Flysystem)"
},
"type": "symfony-bundle",
"autoload": {
"psr-0": {
"Oneup\\UploaderBundle": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jim Schmid",
"email": "js@1up.io",
"homepage": "http://1up.io",
"role": "Developer"
}
],
"description": "Handles multi file uploads in Symfony2. Features included: Chunked upload, Orphans management, Gaufrette support.",
"homepage": "http://1up.io",
"keywords": [
"FancyUpload",
"FineUploader",
"MooUpload",
"Uploadify",
"YUI3 Uploader",
"blueimp",
"dropzone",
"fileupload",
"jQuery File Uploader",
"plupload",
"upload"
],
"time": "2020-02-04T12:08:35+00:00"
},
{
"name": "paragonie/random_compat",
"version": "v2.0.19",
"source": {
"type": "git",
"url": "https://github.com/paragonie/random_compat.git",
"reference": "446fc9faa5c2a9ddf65eb7121c0af7e857295241"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/446fc9faa5c2a9ddf65eb7121c0af7e857295241",
"reference": "446fc9faa5c2a9ddf65eb7121c0af7e857295241",
"shasum": ""
},
"require": {
"php": ">=5.2.0"
},
"require-dev": {
"phpunit/phpunit": "4.*|5.*"
},
"suggest": {
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
},
"type": "library",
"autoload": {
"files": [
"lib/random.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Paragon Initiative Enterprises",
"email": "security@paragonie.com",
"homepage": "https://paragonie.com"
}
],
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
"keywords": [
"csprng",
"polyfill",
"pseudorandom",
"random"
],
"time": "2020-10-15T10:06:57+00:00"
},
{
"name": "psr/cache",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/cache.git",
"reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
"reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Cache\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interface for caching libraries",
"keywords": [
"cache",
"psr",
"psr-6"
],
"time": "2016-08-06T20:24:11+00:00"
},
{
"name": "psr/container",
"version": "1.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/container.git",
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Container\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common Container Interface (PHP FIG PSR-11)",
"homepage": "https://github.com/php-fig/container",
"keywords": [
"PSR-11",
"container",
"container-interface",
"container-interop",
"psr"
],
"time": "2017-02-14T16:28:37+00:00"
},
{
"name": "psr/http-client",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-client.git",
"reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
"reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
"shasum": ""
},
"require": {
"php": "^7.0 || ^8.0",
"psr/http-message": "^1.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Http\\Client\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interface for HTTP clients",
"homepage": "https://github.com/php-fig/http-client",
"keywords": [
"http",
"http-client",
"psr",
"psr-18"
],
"time": "2020-06-29T06:28:15+00:00"
},
{
"name": "psr/http-message",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-message.git",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Http\\Message\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interface for HTTP messages",
"homepage": "https://github.com/php-fig/http-message",
"keywords": [
"http",
"http-message",
"psr",
"psr-7",
"request",
"response"
],
"time": "2016-08-06T14:39:51+00:00"
},
{
"name": "psr/link",
"version": "1.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/link.git",
"reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562",
"reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Link\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interfaces for HTTP links",
"keywords": [
"http",
"http-link",
"link",
"psr",
"psr-13",
"rest"
],
"time": "2016-10-28T16:06:13+00:00"
},
{
"name": "psr/log",
"version": "1.1.3",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
"reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Log\\": "Psr/Log/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interface for logging libraries",
"homepage": "https://github.com/php-fig/log",
"keywords": [
"log",
"psr",
"psr-3"
],
"time": "2020-03-23T09:12:05+00:00"
},
{
"name": "psr/simple-cache",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/simple-cache.git",
"reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
"reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\SimpleCache\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interfaces for simple caching",
"keywords": [
"cache",
"caching",
"psr",
"psr-16",
"simple-cache"
],
"time": "2017-10-23T01:57:42+00:00"
},
{
"name": "ralouphie/getallheaders",
"version": "3.0.3",
"source": {
"type": "git",
"url": "https://github.com/ralouphie/getallheaders.git",
"reference": "120b605dfeb996808c31b6477290a714d356e822"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
"reference": "120b605dfeb996808c31b6477290a714d356e822",
"shasum": ""
},
"require": {
"php": ">=5.6"
},
"require-dev": {
"php-coveralls/php-coveralls": "^2.1",
"phpunit/phpunit": "^5 || ^6.5"
},
"type": "library",
"autoload": {
"files": [
"src/getallheaders.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ralph Khattar",
"email": "ralph.khattar@gmail.com"
}
],
"description": "A polyfill for getallheaders.",
"time": "2019-03-08T08:55:37+00:00"
},
{
"name": "ramsey/uuid",
"version": "3.9.3",
"source": {
"type": "git",
"url": "https://github.com/ramsey/uuid.git",
"reference": "7e1633a6964b48589b142d60542f9ed31bd37a92"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ramsey/uuid/zipball/7e1633a6964b48589b142d60542f9ed31bd37a92",
"reference": "7e1633a6964b48589b142d60542f9ed31bd37a92",
"shasum": ""
},
"require": {
"ext-json": "*",
"paragonie/random_compat": "^1 | ^2 | 9.99.99",
"php": "^5.4 | ^7 | ^8",
"symfony/polyfill-ctype": "^1.8"
},
"replace": {
"rhumsaa/uuid": "self.version"
},
"require-dev": {
"codeception/aspect-mock": "^1 | ^2",
"doctrine/annotations": "^1.2",
"goaop/framework": "1.0.0-alpha.2 | ^1 | ^2.1",
"jakub-onderka/php-parallel-lint": "^1",
"mockery/mockery": "^0.9.11 | ^1",
"moontoast/math": "^1.1",
"paragonie/random-lib": "^2",
"php-mock/php-mock-phpunit": "^0.3 | ^1.1",
"phpunit/phpunit": "^4.8 | ^5.4 | ^6.5",
"squizlabs/php_codesniffer": "^3.5"
},
"suggest": {
"ext-ctype": "Provides support for PHP Ctype functions",
"ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator",
"ext-openssl": "Provides the OpenSSL extension for use with the OpenSslGenerator",
"ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator",
"moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).",
"paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
"ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid",
"ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.x-dev"
}
},
"autoload": {
"psr-4": {
"Ramsey\\Uuid\\": "src/"
},
"files": [
"src/functions.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ben Ramsey",
"email": "ben@benramsey.com",
"homepage": "https://benramsey.com"
},
{
"name": "Marijn Huizendveld",
"email": "marijn.huizendveld@gmail.com"
},
{
"name": "Thibaud Fabre",
"email": "thibaud@aztech.io"
}
],
"description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).",
"homepage": "https://github.com/ramsey/uuid",
"keywords": [
"guid",
"identifier",
"uuid"
],
"time": "2020-02-21T04:36:14+00:00"
},
{
"name": "ratchet/rfc6455",
"version": "v0.3",
"source": {
"type": "git",
"url": "https://github.com/ratchetphp/RFC6455.git",
"reference": "c8651c7938651c2d55f5d8c2422ac5e57a183341"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ratchetphp/RFC6455/zipball/c8651c7938651c2d55f5d8c2422ac5e57a183341",
"reference": "c8651c7938651c2d55f5d8c2422ac5e57a183341",
"shasum": ""
},
"require": {
"guzzlehttp/psr7": "^1.0",
"php": ">=5.4.2"
},
"require-dev": {
"phpunit/phpunit": "5.7.*",
"react/socket": "^1.3"
},
"type": "library",
"autoload": {
"psr-4": {
"Ratchet\\RFC6455\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Chris Boden",
"email": "cboden@gmail.com",
"role": "Developer"
},
{
"name": "Matt Bonneau",
"role": "Developer"
}
],
"description": "RFC6455 WebSocket protocol handler",
"homepage": "http://socketo.me",
"keywords": [
"WebSockets",
"rfc6455",
"websocket"
],
"time": "2020-05-15T18:31:24+00:00"
},
{
"name": "react/cache",
"version": "v1.1.1",
"source": {
"type": "git",
"url": "https://github.com/reactphp/cache.git",
"reference": "4bf736a2cccec7298bdf745db77585966fc2ca7e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/cache/zipball/4bf736a2cccec7298bdf745db77585966fc2ca7e",
"reference": "4bf736a2cccec7298bdf745db77585966fc2ca7e",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"react/promise": "^3.0 || ^2.0 || ^1.1"
},
"require-dev": {
"phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35"
},
"type": "library",
"autoload": {
"psr-4": {
"React\\Cache\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@clue.engineering",
"homepage": "https://clue.engineering/"
},
{
"name": "Cees-Jan Kiewiet",
"email": "reactphp@ceesjankiewiet.nl",
"homepage": "https://wyrihaximus.net/"
},
{
"name": "Jan Sorgalla",
"email": "jsorgalla@gmail.com",
"homepage": "https://sorgalla.com/"
},
{
"name": "Chris Boden",
"email": "cboden@gmail.com",
"homepage": "https://cboden.dev/"
}
],
"description": "Async, Promise-based cache interface for ReactPHP",
"keywords": [
"cache",
"caching",
"promise",
"reactphp"
],
"time": "2021-02-02T06:47:52+00:00"
},
{
"name": "react/dns",
"version": "v1.4.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/dns.git",
"reference": "665260757171e2ab17485b44e7ffffa7acb6ca1f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/dns/zipball/665260757171e2ab17485b44e7ffffa7acb6ca1f",
"reference": "665260757171e2ab17485b44e7ffffa7acb6ca1f",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"react/cache": "^1.0 || ^0.6 || ^0.5",
"react/event-loop": "^1.0 || ^0.5",
"react/promise": "^3.0 || ^2.7 || ^1.2.1",
"react/promise-timer": "^1.2"
},
"require-dev": {
"clue/block-react": "^1.2",
"phpunit/phpunit": "^9.3 || ^4.8.35"
},
"type": "library",
"autoload": {
"psr-4": {
"React\\Dns\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@clue.engineering",
"homepage": "https://clue.engineering/"
},
{
"name": "Cees-Jan Kiewiet",
"email": "reactphp@ceesjankiewiet.nl",
"homepage": "https://wyrihaximus.net/"
},
{
"name": "Jan Sorgalla",
"email": "jsorgalla@gmail.com",
"homepage": "https://sorgalla.com/"
},
{
"name": "Chris Boden",
"email": "cboden@gmail.com",
"homepage": "https://cboden.dev/"
}
],
"description": "Async DNS resolver for ReactPHP",
"keywords": [
"async",
"dns",
"dns-resolver",
"reactphp"
],
"time": "2020-09-18T12:12:55+00:00"
},
{
"name": "react/event-loop",
"version": "v1.1.1",
"source": {
"type": "git",
"url": "https://github.com/reactphp/event-loop.git",
"reference": "6d24de090cd59cfc830263cfba965be77b563c13"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/event-loop/zipball/6d24de090cd59cfc830263cfba965be77b563c13",
"reference": "6d24de090cd59cfc830263cfba965be77b563c13",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"require-dev": {
"phpunit/phpunit": "^7.0 || ^6.4 || ^5.7 || ^4.8.35"
},
"suggest": {
"ext-event": "~1.0 for ExtEventLoop",
"ext-pcntl": "For signal handling support when using the StreamSelectLoop",
"ext-uv": "* for ExtUvLoop"
},
"type": "library",
"autoload": {
"psr-4": {
"React\\EventLoop\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.",
"keywords": [
"asynchronous",
"event-loop"
],
"time": "2020-01-01T18:39:52+00:00"
},
{
"name": "react/promise",
"version": "v2.8.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/promise.git",
"reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4",
"reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4",
"shasum": ""
},
"require": {
"php": ">=5.4.0"
},
"require-dev": {
"phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36"
},
"type": "library",
"autoload": {
"psr-4": {
"React\\Promise\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jan Sorgalla",
"email": "jsorgalla@gmail.com"
}
],
"description": "A lightweight implementation of CommonJS Promises/A for PHP",
"keywords": [
"promise",
"promises"
],
"time": "2020-05-12T15:16:56+00:00"
},
{
"name": "react/promise-timer",
"version": "v1.6.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/promise-timer.git",
"reference": "daee9baf6ef30c43ea4c86399f828bb5f558f6e6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/promise-timer/zipball/daee9baf6ef30c43ea4c86399f828bb5f558f6e6",
"reference": "daee9baf6ef30c43ea4c86399f828bb5f558f6e6",
"shasum": ""
},
"require": {
"php": ">=5.3",
"react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5",
"react/promise": "^3.0 || ^2.7.0 || ^1.2.1"
},
"require-dev": {
"phpunit/phpunit": "^9.0 || ^5.7 || ^4.8.35"
},
"type": "library",
"autoload": {
"psr-4": {
"React\\Promise\\Timer\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@lueck.tv"
}
],
"description": "A trivial implementation of timeouts for Promises, built on top of ReactPHP.",
"homepage": "https://github.com/reactphp/promise-timer",
"keywords": [
"async",
"event-loop",
"promise",
"reactphp",
"timeout",
"timer"
],
"time": "2020-07-10T12:18:06+00:00"
},
{
"name": "react/socket",
"version": "v1.6.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/socket.git",
"reference": "e2b96b23a13ca9b41ab343268dbce3f8ef4d524a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/socket/zipball/e2b96b23a13ca9b41ab343268dbce3f8ef4d524a",
"reference": "e2b96b23a13ca9b41ab343268dbce3f8ef4d524a",
"shasum": ""
},
"require": {
"evenement/evenement": "^3.0 || ^2.0 || ^1.0",
"php": ">=5.3.0",
"react/dns": "^1.1",
"react/event-loop": "^1.0 || ^0.5",
"react/promise": "^2.6.0 || ^1.2.1",
"react/promise-timer": "^1.4.0",
"react/stream": "^1.1"
},
"require-dev": {
"clue/block-react": "^1.2",
"phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35",
"react/promise-stream": "^1.2"
},
"type": "library",
"autoload": {
"psr-4": {
"React\\Socket\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@clue.engineering",
"homepage": "https://clue.engineering/"
},
{
"name": "Cees-Jan Kiewiet",
"email": "reactphp@ceesjankiewiet.nl",
"homepage": "https://wyrihaximus.net/"
},
{
"name": "Jan Sorgalla",
"email": "jsorgalla@gmail.com",
"homepage": "https://sorgalla.com/"
},
{
"name": "Chris Boden",
"email": "cboden@gmail.com",
"homepage": "https://cboden.dev/"
}
],
"description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP",
"keywords": [
"Connection",
"Socket",
"async",
"reactphp",
"stream"
],
"time": "2020-08-28T12:49:05+00:00"
},
{
"name": "react/stream",
"version": "v1.1.1",
"source": {
"type": "git",
"url": "https://github.com/reactphp/stream.git",
"reference": "7c02b510ee3f582c810aeccd3a197b9c2f52ff1a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/stream/zipball/7c02b510ee3f582c810aeccd3a197b9c2f52ff1a",
"reference": "7c02b510ee3f582c810aeccd3a197b9c2f52ff1a",
"shasum": ""
},
"require": {
"evenement/evenement": "^3.0 || ^2.0 || ^1.0",
"php": ">=5.3.8",
"react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5"
},
"require-dev": {
"clue/stream-filter": "~1.2",
"phpunit/phpunit": "^7.0 || ^6.4 || ^5.7 || ^4.8.35"
},
"type": "library",
"autoload": {
"psr-4": {
"React\\Stream\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP",
"keywords": [
"event-driven",
"io",
"non-blocking",
"pipe",
"reactphp",
"readable",
"stream",
"writable"
],
"time": "2020-05-04T10:17:57+00:00"
},
{
"name": "robrichards/xmlseclibs",
"version": "3.1.1",
"source": {
"type": "git",
"url": "https://github.com/robrichards/xmlseclibs.git",
"reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/f8f19e58f26cdb42c54b214ff8a820760292f8df",
"reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df",
"shasum": ""
},
"require": {
"ext-openssl": "*",
"php": ">= 5.4"
},
"type": "library",
"autoload": {
"psr-4": {
"RobRichards\\XMLSecLibs\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"description": "A PHP library for XML Security",
"homepage": "https://github.com/robrichards/xmlseclibs",
"keywords": [
"security",
"signature",
"xml",
"xmldsig"
],
"time": "2020-09-05T13:00:25+00:00"
},
{
"name": "sensio/distribution-bundle",
"version": "v5.0.25",
"source": {
"type": "git",
"url": "https://github.com/sensiolabs/SensioDistributionBundle.git",
"reference": "80a38234bde8321fb92aa0b8c27978a272bb4baf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/80a38234bde8321fb92aa0b8c27978a272bb4baf",
"reference": "80a38234bde8321fb92aa0b8c27978a272bb4baf",
"shasum": ""
},
"require": {
"php": ">=5.3.9",
"sensiolabs/security-checker": "~5.0|~6.0",
"symfony/class-loader": "~2.3|~3.0",
"symfony/config": "~2.3|~3.0",
"symfony/dependency-injection": "~2.3|~3.0",
"symfony/filesystem": "~2.3|~3.0",
"symfony/http-kernel": "~2.3|~3.0",
"symfony/process": "~2.3|~3.0"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "5.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Sensio\\Bundle\\DistributionBundle\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
}
],
"description": "Base bundle for Symfony Distributions",
"keywords": [
"configuration",
"distribution"
],
"abandoned": true,
"time": "2019-06-18T15:43:58+00:00"
},
{
"name": "sensio/framework-extra-bundle",
"version": "v5.4.1",
"source": {
"type": "git",
"url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git",
"reference": "585f4b3a1c54f24d1a8431c729fc8f5acca20c8a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/585f4b3a1c54f24d1a8431c729fc8f5acca20c8a",
"reference": "585f4b3a1c54f24d1a8431c729fc8f5acca20c8a",
"shasum": ""
},
"require": {
"doctrine/annotations": "^1.0",
"doctrine/persistence": "^1.0",
"php": ">=7.1.3",
"symfony/config": "^3.4|^4.3",
"symfony/dependency-injection": "^3.4|^4.3",
"symfony/framework-bundle": "^3.4|^4.3",
"symfony/http-kernel": "^3.4|^4.3"
},
"require-dev": {
"doctrine/doctrine-bundle": "^1.6",
"doctrine/orm": "^2.5",
"nyholm/psr7": "^1.1",
"symfony/browser-kit": "^3.4|^4.3",
"symfony/dom-crawler": "^3.4|^4.3",
"symfony/expression-language": "^3.4|^4.3",
"symfony/finder": "^3.4|^4.3",
"symfony/monolog-bridge": "^3.0|^4.0",
"symfony/monolog-bundle": "^3.2",
"symfony/phpunit-bridge": "^3.4.19|^4.1.8",
"symfony/psr-http-message-bridge": "^1.1",
"symfony/security-bundle": "^3.4|^4.3",
"symfony/twig-bundle": "^3.4|^4.3",
"symfony/yaml": "^3.4|^4.3",
"twig/twig": "~1.12|~2.0"
},
"suggest": {
"symfony/expression-language": "",
"symfony/psr-http-message-bridge": "To use the PSR-7 converters",
"symfony/security-bundle": ""
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "5.4.x-dev"
}
},
"autoload": {
"psr-4": {
"Sensio\\Bundle\\FrameworkExtraBundle\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
}
],
"description": "This bundle provides a way to configure your controllers with annotations",
"keywords": [
"annotations",
"controllers"
],
"time": "2019-07-08T08:31:25+00:00"
},
{
"name": "sensiolabs/security-checker",
"version": "v6.0.3",
"source": {
"type": "git",
"url": "https://github.com/sensiolabs/security-checker.git",
"reference": "a576c01520d9761901f269c4934ba55448be4a54"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/a576c01520d9761901f269c4934ba55448be4a54",
"reference": "a576c01520d9761901f269c4934ba55448be4a54",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/console": "^2.8|^3.4|^4.2|^5.0",
"symfony/http-client": "^4.3|^5.0",
"symfony/mime": "^4.3|^5.0",
"symfony/polyfill-ctype": "^1.11"
},
"bin": [
"security-checker"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "6.0-dev"
}
},
"autoload": {
"psr-4": {
"SensioLabs\\Security\\": "SensioLabs/Security"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien.potencier@gmail.com"
}
],
"description": "A security checker for your composer.lock",
"abandoned": "https://github.com/fabpot/local-php-security-checker",
"time": "2019-11-01T13:20:14+00:00"
},
{
"name": "swiftmailer/swiftmailer",
"version": "v5.4.12",
"source": {
"type": "git",
"url": "https://github.com/swiftmailer/swiftmailer.git",
"reference": "181b89f18a90f8925ef805f950d47a7190e9b950"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/181b89f18a90f8925ef805f950d47a7190e9b950",
"reference": "181b89f18a90f8925ef805f950d47a7190e9b950",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
"mockery/mockery": "~0.9.1",
"symfony/phpunit-bridge": "~3.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "5.4-dev"
}
},
"autoload": {
"files": [
"lib/swift_required.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Chris Corbyn"
},
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
}
],
"description": "Swiftmailer, free feature-rich PHP mailer",
"homepage": "https://swiftmailer.symfony.com",
"keywords": [
"email",
"mail",
"mailer"
],
"time": "2018-07-31T09:26:32+00:00"
},
{
"name": "symfony/assetic-bundle",
"version": "v2.8.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/assetic-bundle.git",
"reference": "2e0a23a4874838e26de6f025e02fc63328921a4c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/assetic-bundle/zipball/2e0a23a4874838e26de6f025e02fc63328921a4c",
"reference": "2e0a23a4874838e26de6f025e02fc63328921a4c",
"shasum": ""
},
"require": {
"kriswallsmith/assetic": "~1.4",
"php": ">=5.3.0",
"symfony/console": "~2.3|~3.0",
"symfony/dependency-injection": "~2.3|~3.0",
"symfony/framework-bundle": "~2.3|~3.0",
"symfony/yaml": "~2.3|~3.0"
},
"conflict": {
"kriswallsmith/spork": "<=0.2",
"twig/twig": "<1.27"
},
"require-dev": {
"kriswallsmith/spork": "~0.3",
"patchwork/jsqueeze": "~1.0",
"symfony/class-loader": "~2.3|~3.0",
"symfony/css-selector": "~2.3|~3.0",
"symfony/dom-crawler": "~2.3|~3.0",
"symfony/phpunit-bridge": "~2.7|~3.0",
"symfony/twig-bundle": "~2.3|~3.0"
},
"suggest": {
"kriswallsmith/spork": "to be able to dump assets in parallel",
"symfony/twig-bundle": "to use the Twig integration"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "2.8-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Bundle\\AsseticBundle\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Kris Wallsmith",
"email": "kris.wallsmith@gmail.com",
"homepage": "http://kriswallsmith.net/"
}
],
"description": "Integrates Assetic into Symfony2",
"homepage": "https://github.com/symfony/AsseticBundle",
"keywords": [
"assets",
"compression",
"minification"
],
"abandoned": "symfony/webpack-encore-pack",
"time": "2017-07-14T07:26:46+00:00"
},
{
"name": "symfony/deprecation-contracts",
"version": "v2.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665",
"reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"files": [
"function.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"time": "2020-09-07T11:33:47+00:00"
},
{
"name": "symfony/http-client",
"version": "v5.2.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
"reference": "22cb1a7844fff206cc5186409776e78865405ea5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/22cb1a7844fff206cc5186409776e78865405ea5",
"reference": "22cb1a7844fff206cc5186409776e78865405ea5",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"psr/log": "^1.0",
"symfony/http-client-contracts": "^2.2",
"symfony/polyfill-php73": "^1.11",
"symfony/polyfill-php80": "^1.15",
"symfony/service-contracts": "^1.0|^2"
},
"provide": {
"php-http/async-client-implementation": "*",
"php-http/client-implementation": "*",
"psr/http-client-implementation": "1.0",
"symfony/http-client-implementation": "1.1"
},
"require-dev": {
"amphp/amp": "^2.5",
"amphp/http-client": "^4.2.1",
"amphp/http-tunnel": "^1.0",
"amphp/socket": "^1.1",
"guzzlehttp/promises": "^1.4",
"nyholm/psr7": "^1.0",
"php-http/httplug": "^1.0|^2.0",
"psr/http-client": "^1.0",
"symfony/dependency-injection": "^4.4|^5.0",
"symfony/http-kernel": "^4.4.13|^5.1.5",
"symfony/process": "^4.4|^5.0",
"symfony/stopwatch": "^4.4|^5.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\HttpClient\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously",
"homepage": "https://symfony.com",
"time": "2021-01-27T10:15:41+00:00"
},
{
"name": "symfony/http-client-contracts",
"version": "v2.3.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client-contracts.git",
"reference": "41db680a15018f9c1d4b23516059633ce280ca33"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/41db680a15018f9c1d4b23516059633ce280ca33",
"reference": "41db680a15018f9c1d4b23516059633ce280ca33",
"shasum": ""
},
"require": {
"php": ">=7.2.5"
},
"suggest": {
"symfony/http-client-implementation": ""
},
"type": "library",
"extra": {
"branch-version": "2.3",
"branch-alias": {
"dev-main": "2.3-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"psr-4": {
"Symfony\\Contracts\\HttpClient\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Generic abstractions related to HTTP clients",
"homepage": "https://symfony.com",
"keywords": [
"abstractions",
"contracts",
"decoupling",
"interfaces",
"interoperability",
"standards"
],
"time": "2020-10-14T17:08:19+00:00"
},
{
"name": "symfony/mime",
"version": "v5.2.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
"reference": "7dee6a43493f39b51ff6c5bb2bd576fe40a76c86"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/mime/zipball/7dee6a43493f39b51ff6c5bb2bd576fe40a76c86",
"reference": "7dee6a43493f39b51ff6c5bb2bd576fe40a76c86",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1",
"symfony/polyfill-intl-idn": "^1.10",
"symfony/polyfill-mbstring": "^1.0",
"symfony/polyfill-php80": "^1.15"
},
"conflict": {
"phpdocumentor/reflection-docblock": "<3.2.2",
"phpdocumentor/type-resolver": "<1.4.0",
"symfony/mailer": "<4.4"
},
"require-dev": {
"egulias/email-validator": "^2.1.10",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
"symfony/dependency-injection": "^4.4|^5.0",
"symfony/property-access": "^4.4|^5.1",
"symfony/property-info": "^4.4|^5.1",
"symfony/serializer": "^5.2"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\Mime\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Allows manipulating MIME messages",
"homepage": "https://symfony.com",
"keywords": [
"mime",
"mime-type"
],
"time": "2021-02-02T06:10:15+00:00"
},
{
"name": "symfony/monolog-bundle",
"version": "v3.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/monolog-bundle.git",
"reference": "7fbecb371c1c614642c93c6b2cbcdf723ae8809d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/7fbecb371c1c614642c93c6b2cbcdf723ae8809d",
"reference": "7fbecb371c1c614642c93c6b2cbcdf723ae8809d",
"shasum": ""
},
"require": {
"monolog/monolog": "~1.22",
"php": ">=5.6",
"symfony/config": "~3.4|~4.0",
"symfony/dependency-injection": "~3.4.10|^4.0.10",
"symfony/http-kernel": "~3.4|~4.0",
"symfony/monolog-bridge": "~3.4|~4.0"
},
"require-dev": {
"symfony/console": "~3.4|~4.0",
"symfony/phpunit-bridge": "^3.4.19|^4.0",
"symfony/yaml": "~3.4|~4.0"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "3.x-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Bundle\\MonologBundle\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Symfony Community",
"homepage": "http://symfony.com/contributors"
},
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
}
],
"description": "Symfony MonologBundle",
"homepage": "http://symfony.com",
"keywords": [
"log",
"logging"
],
"time": "2019-06-20T12:18:19+00:00"
},
{
"name": "symfony/orm-pack",
"version": "v1.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/orm-pack.git",
"reference": "c9bcc08102061f406dc908192c0f33524a675666"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/orm-pack/zipball/c9bcc08102061f406dc908192c0f33524a675666",
"reference": "c9bcc08102061f406dc908192c0f33524a675666",
"shasum": ""
},
"require": {
"doctrine/doctrine-bundle": "*",
"doctrine/doctrine-migrations-bundle": "*",
"doctrine/orm": "*"
},
"type": "symfony-pack",
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "A pack for the Doctrine ORM",
"time": "2020-02-10T18:03:48+00:00"
},
{
"name": "symfony/polyfill-apcu",
"version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-apcu.git",
"reference": "3b3944f40987b9d3f9b9147f86c32df87d9f3505"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/3b3944f40987b9d3f9b9147f86c32df87d9f3505",
"reference": "3b3944f40987b9d3f9b9147f86c32df87d9f3505",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Apcu\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting apcu_* functions to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"apcu",
"compatibility",
"polyfill",
"portable",
"shim"
],
"time": "2021-01-07T16:49:33+00:00"
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "c6c942b1ac76c82448322025e084cadc56048b4e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e",
"reference": "c6c942b1ac76c82448322025e084cadc56048b4e",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"suggest": {
"ext-ctype": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Ctype\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Gert de Pagter",
"email": "BackEndTea@gmail.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for ctype functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"ctype",
"polyfill",
"portable"
],
"time": "2021-01-07T16:49:33+00:00"
},
{
"name": "symfony/polyfill-intl-icu",
"version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-icu.git",
"reference": "b2b1e732a6c039f1a3ea3414b3379a2433e183d6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/b2b1e732a6c039f1a3ea3414b3379a2433e183d6",
"reference": "b2b1e732a6c039f1a3ea3414b3379a2433e183d6",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"suggest": {
"ext-intl": "For best performance and support of other locales than \"en\""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Intl\\Icu\\": ""
},
"classmap": [
"Resources/stubs"
],
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for intl's ICU-related data and classes",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"icu",
"intl",
"polyfill",
"portable",
"shim"
],
"time": "2021-01-07T16:49:33+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
"version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
"reference": "0eb8293dbbcd6ef6bf81404c9ce7d95bcdf34f44"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/0eb8293dbbcd6ef6bf81404c9ce7d95bcdf34f44",
"reference": "0eb8293dbbcd6ef6bf81404c9ce7d95bcdf34f44",
"shasum": ""
},
"require": {
"php": ">=7.1",
"symfony/polyfill-intl-normalizer": "^1.10",
"symfony/polyfill-php72": "^1.10"
},
"suggest": {
"ext-intl": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Intl\\Idn\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Laurent Bassin",
"email": "laurent@bassin.info"
},
{
"name": "Trevor Rowbotham",
"email": "trevor.rowbotham@pm.me"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"idn",
"intl",
"polyfill",
"portable",
"shim"
],
"time": "2021-01-07T16:49:33+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
"reference": "6e971c891537eb617a00bb07a43d182a6915faba"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/6e971c891537eb617a00bb07a43d182a6915faba",
"reference": "6e971c891537eb617a00bb07a43d182a6915faba",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"suggest": {
"ext-intl": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Intl\\Normalizer\\": ""
},
"files": [
"bootstrap.php"
],
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for intl's Normalizer class and related functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"intl",
"normalizer",
"polyfill",
"portable",
"shim"
],
"time": "2021-01-07T17:09:11+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/f377a3dd1fde44d37b9831d68dc8dea3ffd28e13",
"reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"suggest": {
"ext-mbstring": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Mbstring\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for the Mbstring extension",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"mbstring",
"polyfill",
"portable",
"shim"
],
"time": "2021-01-07T16:49:33+00:00"
},
{
"name": "symfony/polyfill-php56",
"version": "v1.20.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php56.git",
"reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675",
"reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"type": "metapackage",
"extra": {
"branch-alias": {
"dev-main": "1.20-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"time": "2020-10-23T14:02:19+00:00"
},
{
"name": "symfony/polyfill-php70",
"version": "v1.20.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php70.git",
"reference": "5f03a781d984aae42cebd18e7912fa80f02ee644"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644",
"reference": "5f03a781d984aae42cebd18e7912fa80f02ee644",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"type": "metapackage",
"extra": {
"branch-alias": {
"dev-main": "1.20-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"time": "2020-10-23T14:02:19+00:00"
},
{
"name": "symfony/polyfill-php72",
"version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php72.git",
"reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9",
"reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Php72\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"time": "2021-01-07T16:49:33+00:00"
},
{
"name": "symfony/polyfill-php73",
"version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php73.git",
"reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
"reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Php73\\": ""
},
"files": [
"bootstrap.php"
],
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"time": "2021-01-07T16:49:33+00:00"
},
{
"name": "symfony/polyfill-php80",
"version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
"reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91",
"reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Php80\\": ""
},
"files": [
"bootstrap.php"
],
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ion Bazan",
"email": "ion.bazan@gmail.com"
},
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"time": "2021-01-07T16:49:33+00:00"
},
{
"name": "symfony/service-contracts",
"version": "v2.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
"reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1",
"reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"psr/container": "^1.0"
},
"suggest": {
"symfony/service-implementation": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"psr-4": {
"Symfony\\Contracts\\Service\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Generic abstractions related to writing services",
"homepage": "https://symfony.com",
"keywords": [
"abstractions",
"contracts",
"decoupling",
"interfaces",
"interoperability",
"standards"
],
"time": "2020-09-07T11:33:47+00:00"
},
{
"name": "symfony/swiftmailer-bundle",
"version": "v2.6.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/swiftmailer-bundle.git",
"reference": "c4808f5169efc05567be983909d00f00521c53ec"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/c4808f5169efc05567be983909d00f00521c53ec",
"reference": "c4808f5169efc05567be983909d00f00521c53ec",
"shasum": ""
},
"require": {
"php": ">=5.3.2",
"swiftmailer/swiftmailer": "~4.2|~5.0",
"symfony/config": "~2.7|~3.0",
"symfony/dependency-injection": "~2.7|~3.0",
"symfony/http-kernel": "~2.7|~3.0"
},
"require-dev": {
"symfony/console": "~2.7|~3.0",
"symfony/framework-bundle": "~2.7|~3.0",
"symfony/phpunit-bridge": "~3.3@dev",
"symfony/yaml": "~2.7|~3.0"
},
"suggest": {
"psr/log": "Allows logging"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "2.6-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Bundle\\SwiftmailerBundle\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Symfony Community",
"homepage": "http://symfony.com/contributors"
},
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
}
],
"description": "Symfony SwiftmailerBundle",
"homepage": "http://symfony.com",
"time": "2017-10-19T01:06:41+00:00"
},
{
"name": "symfony/symfony",
"version": "v3.4.47",
"source": {
"type": "git",
"url": "https://github.com/symfony/symfony.git",
"reference": "83093d5448a7b90fd4cbcce38580ae53898f506f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/symfony/zipball/83093d5448a7b90fd4cbcce38580ae53898f506f",
"reference": "83093d5448a7b90fd4cbcce38580ae53898f506f",
"shasum": ""
},
"require": {
"doctrine/common": "~2.4",
"ext-xml": "*",
"fig/link-util": "^1.0",
"php": "^5.5.9|>=7.0.8",
"psr/cache": "~1.0",
"psr/container": "^1.0",
"psr/link": "^1.0",
"psr/log": "~1.0",
"psr/simple-cache": "^1.0",
"symfony/polyfill-apcu": "~1.1",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-intl-icu": "~1.0",
"symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php56": "~1.0",
"symfony/polyfill-php70": "~1.6",
"twig/twig": "^1.41|^2.10"
},
"conflict": {
"monolog/monolog": ">=2",
"phpdocumentor/reflection-docblock": "<3.0||>=3.2.0,<3.2.2",
"phpdocumentor/type-resolver": "<0.3.0",
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0"
},
"provide": {
"psr/cache-implementation": "1.0",
"psr/container-implementation": "1.0",
"psr/log-implementation": "1.0",
"psr/simple-cache-implementation": "1.0"
},
"replace": {
"symfony/asset": "self.version",
"symfony/browser-kit": "self.version",
"symfony/cache": "self.version",
"symfony/class-loader": "self.version",
"symfony/config": "self.version",
"symfony/console": "self.version",
"symfony/css-selector": "self.version",
"symfony/debug": "self.version",
"symfony/debug-bundle": "self.version",
"symfony/dependency-injection": "self.version",
"symfony/doctrine-bridge": "self.version",
"symfony/dom-crawler": "self.version",
"symfony/dotenv": "self.version",
"symfony/event-dispatcher": "self.version",
"symfony/expression-language": "self.version",
"symfony/filesystem": "self.version",
"symfony/finder": "self.version",
"symfony/form": "self.version",
"symfony/framework-bundle": "self.version",
"symfony/http-foundation": "self.version",
"symfony/http-kernel": "self.version",
"symfony/inflector": "self.version",
"symfony/intl": "self.version",
"symfony/ldap": "self.version",
"symfony/lock": "self.version",
"symfony/monolog-bridge": "self.version",
"symfony/options-resolver": "self.version",
"symfony/process": "self.version",
"symfony/property-access": "self.version",
"symfony/property-info": "self.version",
"symfony/proxy-manager-bridge": "self.version",
"symfony/routing": "self.version",
"symfony/security": "self.version",
"symfony/security-bundle": "self.version",
"symfony/security-core": "self.version",
"symfony/security-csrf": "self.version",
"symfony/security-guard": "self.version",
"symfony/security-http": "self.version",
"symfony/serializer": "self.version",
"symfony/stopwatch": "self.version",
"symfony/templating": "self.version",
"symfony/translation": "self.version",
"symfony/twig-bridge": "self.version",
"symfony/twig-bundle": "self.version",
"symfony/validator": "self.version",
"symfony/var-dumper": "self.version",
"symfony/web-link": "self.version",
"symfony/web-profiler-bundle": "self.version",
"symfony/web-server-bundle": "self.version",
"symfony/workflow": "self.version",
"symfony/yaml": "self.version"
},
"require-dev": {
"cache/integration-tests": "dev-master",
"doctrine/annotations": "~1.0",
"doctrine/cache": "~1.6",
"doctrine/data-fixtures": "^1.1",
"doctrine/dbal": "~2.4",
"doctrine/doctrine-bundle": "~1.4",
"doctrine/orm": "~2.4,>=2.4.5",
"egulias/email-validator": "~1.2,>=1.2.8|~2.0",
"monolog/monolog": "~1.11",
"ocramius/proxy-manager": "~0.4|~1.0|~2.0",
"phpdocumentor/reflection-docblock": "^3.0|^4.0",
"predis/predis": "~1.0",
"symfony/phpunit-bridge": "^5.2",
"symfony/security-acl": "~2.8|~3.0"
},
"type": "library",
"extra": {
"branch-version": "3.4"
},
"autoload": {
"psr-4": {
"Symfony\\Bridge\\Doctrine\\": "src/Symfony/Bridge/Doctrine/",
"Symfony\\Bridge\\Monolog\\": "src/Symfony/Bridge/Monolog/",
"Symfony\\Bridge\\ProxyManager\\": "src/Symfony/Bridge/ProxyManager/",
"Symfony\\Bridge\\Twig\\": "src/Symfony/Bridge/Twig/",
"Symfony\\Bundle\\": "src/Symfony/Bundle/",
"Symfony\\Component\\": "src/Symfony/Component/"
},
"classmap": [
"src/Symfony/Component/Intl/Resources/stubs"
],
"exclude-from-classmap": [
"**/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "The Symfony PHP framework",
"homepage": "https://symfony.com",
"keywords": [
"framework"
],
"time": "2020-11-27T08:43:16+00:00"
},
{
"name": "tetranz/select2entity-bundle",
"version": "v2.10.1",
"source": {
"type": "git",
"url": "https://github.com/tetranz/select2entity-bundle.git",
"reference": "1d4b184e41bdb76a61d7462b748d9cf0ecade47a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/tetranz/select2entity-bundle/zipball/1d4b184e41bdb76a61d7462b748d9cf0ecade47a",
"reference": "1d4b184e41bdb76a61d7462b748d9cf0ecade47a",
"shasum": ""
},
"require": {
"doctrine/orm": ">=2.4",
"php": ">=5.4.0",
"twig/twig": ">=2.9"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": []
},
"autoload": {
"psr-4": {
"Tetranz\\Select2EntityBundle\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ross Keatinge",
"email": "tetranz@gmail.com"
}
],
"description": "A Symfony bundle that integrates Select2 as a drop-in replacement for a standard entity field on a Symfony form.",
"keywords": [
"autocomplete",
"select2",
"symfony",
"typeahead"
],
"time": "2019-07-14T02:30:34+00:00"
},
{
"name": "thecsea/simple-caldav-client",
"version": "v0.1.14",
"source": {
"type": "git",
"url": "https://github.com/thecsea/simpleCalDAV.git",
"reference": "542eda99c5a18c04b3701ebda9ce8d3eb0db7728"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thecsea/simpleCalDAV/zipball/542eda99c5a18c04b3701ebda9ce8d3eb0db7728",
"reference": "542eda99c5a18c04b3701ebda9ce8d3eb0db7728",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-xml": "*",
"php": ">=5.3.0"
},
"type": "library",
"autoload": {
"psr-4": {
"it\\thecsea\\simple_caldav_client\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"GPL-2.0"
],
"authors": [
{
"name": "claudio cardinale",
"email": "cardi@thecsea.it",
"homepage": "http://thecsea.it"
}
],
"description": "A simple and complete php caldav client",
"homepage": "http://www.thecsea.it",
"keywords": [
"CalDAV",
"Simple",
"client"
],
"time": "2020-09-28T11:55:52+00:00"
},
{
"name": "twig/twig",
"version": "v2.14.3",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "8bc568d460d88b25c00c046256ec14a787ea60d9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/8bc568d460d88b25c00c046256ec14a787ea60d9",
"reference": "8bc568d460d88b25c00c046256ec14a787ea60d9",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-mbstring": "^1.3"
},
"require-dev": {
"psr/container": "^1.0",
"symfony/phpunit-bridge": "^4.4.9|^5.0.9"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.14-dev"
}
},
"autoload": {
"psr-0": {
"Twig_": "lib/"
},
"psr-4": {
"Twig\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com",
"homepage": "http://fabien.potencier.org",
"role": "Lead Developer"
},
{
"name": "Twig Team",
"role": "Contributors"
},
{
"name": "Armin Ronacher",
"email": "armin.ronacher@active-4.com",
"role": "Project Founder"
}
],
"description": "Twig, the flexible, fast, and secure template language for PHP",
"homepage": "https://twig.symfony.com",
"keywords": [
"templating"
],
"time": "2021-01-05T15:34:33+00:00"
},
{
"name": "webimpress/safe-writer",
"version": "2.1.0",
"source": {
"type": "git",
"url": "https://github.com/webimpress/safe-writer.git",
"reference": "5cfafdec5873c389036f14bf832a5efc9390dcdd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/webimpress/safe-writer/zipball/5cfafdec5873c389036f14bf832a5efc9390dcdd",
"reference": "5cfafdec5873c389036f14bf832a5efc9390dcdd",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
"phpunit/phpunit": "^8.5.8 || ^9.3.7",
"vimeo/psalm": "^3.14.2",
"webimpress/coding-standard": "^1.1.5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.1.x-dev",
"dev-develop": "2.2.x-dev",
"dev-release-1.0": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Webimpress\\SafeWriter\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-2-Clause"
],
"description": "Tool to write files safely, to avoid race conditions",
"keywords": [
"concurrent write",
"file writer",
"race condition",
"safe writer",
"webimpress"
],
"funding": [
{
"url": "https://github.com/michalbundyra",
"type": "github"
}
],
"time": "2020-08-25T07:21:11+00:00"
}
],
"packages-dev": [
{
"name": "nikic/php-parser",
"version": "v4.10.4",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
"reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e",
"reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e",
"shasum": ""
},
"require": {
"ext-tokenizer": "*",
"php": ">=7.0"
},
"require-dev": {
"ircmaxell/php-yacc": "^0.0.7",
"phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
},
"bin": [
"bin/php-parse"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.9-dev"
}
},
"autoload": {
"psr-4": {
"PhpParser\\": "lib/PhpParser"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Nikita Popov"
}
],
"description": "A PHP parser written in PHP",
"keywords": [
"parser",
"php"
],
"time": "2020-12-20T10:01:03+00:00"
},
{
"name": "sensio/generator-bundle",
"version": "v3.1.7",
"source": {
"type": "git",
"url": "https://github.com/sensiolabs/SensioGeneratorBundle.git",
"reference": "28cbaa244bd0816fd8908b93f90380bcd7b67a65"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/28cbaa244bd0816fd8908b93f90380bcd7b67a65",
"reference": "28cbaa244bd0816fd8908b93f90380bcd7b67a65",
"shasum": ""
},
"require": {
"symfony/console": "~2.7|~3.0",
"symfony/framework-bundle": "~2.7|~3.0",
"symfony/process": "~2.7|~3.0",
"symfony/yaml": "~2.7|~3.0",
"twig/twig": "^1.28.2|^2.0"
},
"require-dev": {
"doctrine/orm": "~2.4",
"symfony/doctrine-bridge": "~2.7|~3.0",
"symfony/filesystem": "~2.7|~3.0",
"symfony/phpunit-bridge": "^3.3"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "3.1.x-dev"
}
},
"autoload": {
"psr-4": {
"Sensio\\Bundle\\GeneratorBundle\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
}
],
"description": "This bundle generates code for you",
"time": "2017-12-07T15:36:41+00:00"
},
{
"name": "symfony/maker-bundle",
"version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/maker-bundle.git",
"reference": "9a9e3f4253ca0d923ad49b327db6f89a8f74fe4c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/maker-bundle/zipball/9a9e3f4253ca0d923ad49b327db6f89a8f74fe4c",
"reference": "9a9e3f4253ca0d923ad49b327db6f89a8f74fe4c",
"shasum": ""
},
"require": {
"doctrine/inflector": "^1.2|^2.0",
"nikic/php-parser": "^4.0",
"php": ">=7.1.3",
"symfony/config": "^3.4|^4.0|^5.0",
"symfony/console": "^3.4|^4.0|^5.0",
"symfony/dependency-injection": "^3.4|^4.0|^5.0",
"symfony/deprecation-contracts": "^2.2",
"symfony/filesystem": "^3.4|^4.0|^5.0",
"symfony/finder": "^3.4|^4.0|^5.0",
"symfony/framework-bundle": "^3.4|^4.0|^5.0",
"symfony/http-kernel": "^3.4|^4.0|^5.0"
},
"require-dev": {
"composer/semver": "^3.0@dev",
"doctrine/doctrine-bundle": "^1.8|^2.0",
"doctrine/orm": "^2.3",
"friendsofphp/php-cs-fixer": "^2.8",
"friendsoftwig/twigcs": "^3.1.2",
"symfony/http-client": "^4.3|^5.0",
"symfony/phpunit-bridge": "^4.3|^5.0",
"symfony/process": "^3.4|^4.0|^5.0",
"symfony/security-core": "^3.4|^4.0|^5.0",
"symfony/yaml": "^3.4|^4.0|^5.0"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-main": "1.0-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Bundle\\MakerBundle\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Maker helps you create empty commands, controllers, form classes, tests and more so you can forget about writing boilerplate code.",
"homepage": "https://symfony.com/doc/current/bundles/SymfonyMakerBundle/index.html",
"keywords": [
"code generator",
"generator",
"scaffold",
"scaffolding"
],
"time": "2021-02-07T01:02:28+00:00"
},
{
"name": "symfony/phpunit-bridge",
"version": "v3.4.47",
"source": {
"type": "git",
"url": "https://github.com/symfony/phpunit-bridge.git",
"reference": "120273ad5d03a8deee08ca9260e2598f288f2bac"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/120273ad5d03a8deee08ca9260e2598f288f2bac",
"reference": "120273ad5d03a8deee08ca9260e2598f288f2bac",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"conflict": {
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0|<6.4,>=6.0|9.1.2"
},
"suggest": {
"symfony/debug": "For tracking deprecated interfaces usages at runtime with DebugClassLoader"
},
"bin": [
"bin/simple-phpunit"
],
"type": "symfony-bridge",
"extra": {
"thanks": {
"name": "phpunit/phpunit",
"url": "https://github.com/sebastianbergmann/phpunit"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Bridge\\PhpUnit\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony PHPUnit Bridge",
"homepage": "https://symfony.com",
"time": "2020-11-13T16:28:59+00:00"
}
],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"php": ">=7"
},
"platform-dev": [],
"plugin-api-version": "1.1.0"
}

View File

@ -11,6 +11,7 @@ use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Cadoles\CoreBundle\Entity\User;
use Cadoles\CoreBundle\Entity\Group;
class SecurityController extends Controller
{
@ -21,17 +22,20 @@ class SecurityController extends Controller
public function loginAction(Request $request)
{
// Récupération de la cible de navigation
// Récupération de la cible de navigation
$redirect = $request->get("redirect");
// Masteridentity
$masteridentity=$this->getParameter("masteridentity");
// Init Client CAS
\phpCAS::setDebug(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);
\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);
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();
// Authentification
\phpCAS::forceAuthentication();
@ -42,23 +46,22 @@ class SecurityController extends Controller
// Récupération Attribut
$attributes = \phpCAS::getAttributes();
// Suppression des Attributs en tableaux
foreach ($attributes as $key => $value) {
if(is_array($value))
unset($attributes[$key]);
}
// Init
$email = "";
$lastname = "";
$firstname = "";
// Rechercher l'utilisateur
$em = $this->getDoctrine()->getManager();
if(isset($attributes[$this->getParameter('user_attr_cas_username')]))
$username = $attributes[$this->getParameter('user_attr_cas_username')];
if(isset($attributes[$this->getParameter('user_attr_cas_mail')]))
$email = $attributes[$this->getParameter('user_attr_cas_mail')];
if(isset($attributes[$this->getParameter('user_attr_cas_lastname')]))
$lastname = $attributes[$this->getParameter('user_attr_cas_lastname')];
if(isset($attributes[$this->getParameter('user_attr_cas_firstname')]))
$firstname = $attributes[$this->getParameter('user_attr_cas_firstname')];
@ -75,17 +78,37 @@ class SecurityController extends Controller
if($masteridentity=="LDAP") {
// 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
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(empty($email)) $email = $username."@nomail.com";
// On s'assure qu'il n'y a pas déjà un utilisateur avec le même mail
$usermail = $em->getRepository('CadolesCoreBundle:User')->findOneBy(array("email"=>$email));
if($usermail) {
return $this->render('CadolesCoreBundle:Registration:info.html.twig', [
'useheader' => true,
'usemenu' => false,
'usesidebar' => false,
'infotitle' => "Première connexion",
'info' => "Votre compte ne peut être activé car votre adresse mel est déjà utilisée par un autre compte utilisateur.<br>Nous sommes désolés du désagrément et vous invitons à contacter un administrateur.",
'mode' => "error",
'redirectto' => "",
]);
}
// Là c'est normal que potentiellement il n'existe pas il faut donc l'autogénérer
$user = new User();
// On calcule le niveau01 de l'utilisateur
$niveau01=$em->getRepository('CadolesCoreBundle:Niveau01')->calculateNiveau01($attributes);
if(!$niveau01)
throw $this->createNotFoundException('Permission denied. No Organisation Niveau 01 match');
if(!$niveau01) {
$niveau01=$em->getRepository('CadolesCoreBundle:Niveau01')->findAll()[0];
//throw $this->createNotFoundException('Permission denied. No Organisation Niveau 01 match');
}
$user->setUsername($username);
$user->setEmail($email);
@ -94,7 +117,7 @@ class SecurityController extends Controller
$user->setPassword("CASPWD-".$username);
$user->setSalt("CASPWD-".$username);
$user->setNiveau01($niveau01);
$user->setSiren($niveau01->getSiren());
$user->setSiret("");
@ -102,13 +125,21 @@ class SecurityController extends Controller
$user->setAvatar("noavatar.png");
$user->setVisible(true);
$user->setAuthlevel("simple");
$user->setBelongingpopulation("agent");
$user->setRole("ROLE_USER");
if(in_array($username,$this->getParameter("ldap_usersadmin")))
$user->setRole("ROLE_ADMIN");
$em->persist($user);
$em->flush();
// Génération auto des groupes
$this->submitGroup($attributes);
// On calcule les groupes de l'utilisateur
$groups=$em->getRepository('CadolesCoreBundle:Group')->calculateGroup($user,$attributes);
$user=$em->getRepository('CadolesCoreBundle:Group')->calculateGroup($user,$attributes);
}
}
else {
@ -122,30 +153,44 @@ class SecurityController extends Controller
// On s'assure que le niveau 02 appartient bien au niveau 01 calculé
$sameniveau01=(!is_null($user->getNiveau02())&&$niveau01==$user->getNiveau02()->getNiveau01());
// On calcule les groupes de l'utilisateur
$user=$groups=$em->getRepository('CadolesCoreBundle:Group')->calculateGroup($user,$attributes);
$user->setLastname($lastname);
$user->setFirstname($firstname);
$user->setEmail($email);
if(!$sameniveau01) $user->setNiveau02(null);
if(!$sameniveau01) {
$user->setNiveau01($niveau01);
$user->setNiveau02(null);
}
if(in_array($username,$this->getParameter("ldap_usersadmin")))
$user->setRole("ROLE_ADMIN");
// Génération auto des groupes
$this->submitGroup($attributes);
// On calcule les groupes de l'utilisateur
$user=$em->getRepository('CadolesCoreBundle:Group')->calculateGroup($user,$attributes);
$em->persist($user);
$em->flush();
}
}
// Calcul Service
/*
$user = $em->getRepository('CadolesCoreBundle:User')->calculateServices($user, $attributes);
// Attributs calculés
$attributes = $em->getRepository('CadolesCoreBundle:User')->calculateAttributes($user, $attributes);
*/
// Sauvegarde des attributes en session
$this->get('session')->set('attributes', $attributes);
// Sauvegarde des ssoitems en session
$ssoitems=[];
if($this->getParameter('ssosynchroitem')) {
$user_attr_cas_item=$this->getParameter('user_attr_cas_item');
if(array_key_exists($user_attr_cas_item,$attributes)) {
if(!is_array($attributes[$user_attr_cas_item])) {
$attributes[$user_attr_cas_item]=[$attributes[$user_attr_cas_item]];
}
$ssoitems=$attributes[$user_attr_cas_item];
}
}
$this->get('session')->set('ssoitems', $ssoitems);
// Autoconnexion
// Récupérer le token de l'utilisateur
$token = new UsernamePasswordToken($user, null, "main", $user->getRoles());
@ -156,6 +201,12 @@ class SecurityController extends Controller
$dispatcher = new EventDispatcher();
$dispatcher->dispatch("security.interactive_login", $event);
// On enregistre sa visite
$user->setVisitedate(new \DateTime());
$user->setVisitecpt($user->getVisitecpt()+1);
$em->persist($user);
$em->flush();
if($redirect)
return $this->redirect($redirect);
else
@ -165,7 +216,10 @@ class SecurityController extends Controller
public function logoutAction() {
// Init Client CAS
\phpCAS::setDebug(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'), true);
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);
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();
@ -173,4 +227,124 @@ class SecurityController extends Controller
$url=$this->generateUrl('cadoles_core_home', array(), UrlGeneratorInterface::ABSOLUTE_URL);
\phpCAS::logout(array("service"=>$url));
}
public function testAction() {
$em = $this->getDoctrine()->getManager();
// Init Client CAS
\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);
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();
// Authentification
\phpCAS::forceAuthentication();
// Récupération UID
$username = \phpCAS::getUser();
// Récupération Attribut
$attributes = \phpCAS::getAttributes();
$user = $em->getRepository('CadolesCoreBundle:User')->findOneBy(array("username"=>$username));
// On calcule le niveau01 de l'utilisateur
$niveau01=$em->getRepository('CadolesCoreBundle:Niveau01')->calculateNiveau01($attributes);
// Génération auto des groupes
$groups=$this->submitGroup($attributes);
// On calcule les groupes de l'utilisateur
$user=$em->getRepository('CadolesCoreBundle:Group')->calculateGroup($user,$attributes);
return $this->render('CadolesCASBundle:Test:test.html.twig',[
'useheader' => true,
'usemenu' => false,
'usesidebar' => false,
'attributes' => $attributes,
'user' => $user,
'username' => $username,
'niveau01' => $niveau01,
]);
}
private function submitGroup($attributes) {
$em = $this->getDoctrine()->getManager();
if(!$this->getParameter('ssosynchrogroup'))
return null;
$user_attr_cas_group=$this->getParameter('user_attr_cas_group');
// Si l'utilisateur possège l'attribut groupe dans ses attributs
if(array_key_exists($user_attr_cas_group,$attributes)) {
if(!is_array($attributes[$user_attr_cas_group])) {
$attributes[$user_attr_cas_group]=[$attributes[$user_attr_cas_group]];
}
foreach($attributes[$user_attr_cas_group] as $ssogroup) {
$basedn=$this->getParameter('ldap_basedn');
$name=$ssogroup;
if($basedn!="") {
// Si présence du basedn dans le nom du groupe = nous sommes en présence d'un DN = on récupere donc comme nom que son cn
if(stripos($name,$basedn)!==false) {
$tbname=explode(",",$name);
$tbname=explode("=",$tbname[0]);
$name=$tbname[1];
}
}
// Recherche du groupe
$group=$em->getRepository("CadolesCoreBundle:Group")->findOneBy(["label"=>$name]);
if(!$group) {
$group=new Group();
$group->setLabel($name);
$group->setFgcancreatepage(false);
$group->setFgcancreateblog(false);
$group->setFgcancreatecalendar(false);
$group->setFgcancreateproject(false);
$group->setFgcanshare(false);
$group->setFgopen(false);
$group->setFgall(false);
}
$group->setAttributes('{"'.$user_attr_cas_group.'":"'.$ssogroup.'"}');
$group->setFgtemplate(false);
$em->persist($group);
$em->flush();
}
}
}
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

@ -6,3 +6,11 @@ cas_sp.logout:
path: /logout
defaults: { _controller: CadolesCASBundle:Security:logout }
cas_sp.test:
path: /test
defaults: { _controller: CadolesCASBundle:Security:test }
cas_sp.imapunread:
path: /imapunread
defaults: { _controller: CadolesCASBundle:Security:imapunread }

View File

@ -0,0 +1,35 @@
{% extends '@CadolesCore/base.html.twig' %}
{% block pagewrapper %}
<h1>TEST SSO</h1>
<h2>Atttribut SSO</h2>
{% for key, attribute in attributes %}
{% if attribute is iterable %}
{% for value in attribute %}
<strong>{{ key }}</strong> = {{ value }}<br>
{% endfor %}
{% else %}
<strong>{{ key }}</strong> = {{ attribute }}<br>
{% endif %}
{% endfor %}
<h2>Correspondance Utilisateur Ninegate</h2>
<strong>username</strong> = {{ user.username }}<br>
<strong>firstname</strong> = {{ user.firstname }}<br>
<strong>lastname</strong> = {{ user.lastname }}<br>
<strong>email</strong> = {{ user.email }}<br>
<h2>Appartient au Niveau 01</h2>
<strong>{{ niveau01.label }}</strong> = {{ niveau01.attributes }}
<h2>Appartient aux Groupes</h2>
{% for usergroup in user.groups %}
{% if not usergroup.group.attributes is empty %}
<strong>{{usergroup.group.label}}</strong> = {{usergroup.group.attributes}}<br>
{% endif %}
{% endfor %}
<br><br><br><br><br><br><br>
{% endblock %}

View File

@ -5,14 +5,14 @@ use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Finder\Finder;
use Symfony\Component\HttpKernel\KernelInterface;
use Doctrine\DBAL\Connection as DBALConnection;
use Doctrine\ORM\EntityManager;
use Ramsey\Uuid\Uuid;
use Ramsey\Uuid\Exception\UnsatisfiedDependencyException;
use Doctrine\ORM\Mapping\ClassMetadata;
use Doctrine\ORM\Id\AssignedGenerator;
use Cadoles\CoreBundle\Entity\Group;
use Cadoles\CoreBundle\Entity\UserGroup;
use Cadoles\CoreBundle\Entity\PermModoProfil;
use Cadoles\CoreBundle\Entity\PermModo;
class InitDataCommand extends ContainerAwareCommand
{
@ -50,7 +50,7 @@ class InitDataCommand extends ContainerAwareCommand
$content = $file->getContents();
$stmt = $em->getConnection()->prepare($content);
$stmt->execute();
$stmt->execute();
}
// Init 02 = ce qui est toujours le cas
@ -86,6 +86,16 @@ class InitDataCommand extends ContainerAwareCommand
}
$stmt->closeCursor();
// On s'assure que l'admin à un password et sinon on l'init à la valeur du genconfig
$user=$em->getRepository('CadolesCoreBundle:User')->findOneBy(['username'=>'admin']);
if($user&&empty($user->getPassword())) {
$initpwdadmin=$this->getContainer()->getParameter('initpwdadmin');
$output->writeln(' > Initialisation passsword admin / '.$initpwdadmin.' : pensez à modfier votre password après connexion');
$user->setPassword($initpwdadmin);
$em->persist($user);
$em->flush();
}
// On s'assure que le groupe 'Tout le Monde' existe
$group=$em->getRepository('CadolesCoreBundle:Group')->findOneBy(array('fgall'=>true));
if (!$group) {
@ -128,6 +138,7 @@ class InitDataCommand extends ContainerAwareCommand
$usergroup->setUser($user);
$usergroup->setGroup($group);
$usergroup->setKeyvalue($key);
$usergroup->setRolegroup(0);
$em->persist($usergroup);
$em->flush();
$em->clear();
@ -144,13 +155,118 @@ class InitDataCommand extends ContainerAwareCommand
if($ldap_template=="scribe")
$niveau01->setLdapfilter("(&(uid=*)(objectclass=inetOrgPerson)(!(description=Computer)))");
else
$niveau01->setLdapfilter("(uid=*)");
$niveau01->setLdapfilter($this->getContainer()->getParameter('openldapreqniveau01'));
$em->persist($niveau01);
$em->flush();
}
}
// On s'assure si masteridentity est à SSO qu'au minimum un niveau01 possède un attribut
if($masteridentity=="SSO") {
$niveau01=$em->createQueryBuilder()->select('n')->from('CadolesCoreBundle:Niveau01','n')->where('n.attributes IS NOT NULL')->getQuery()->getResult();
if(!$niveau01) {
// Si ce n'est pas le cas on positionne un attribut ultra large sur le niveau01 de base
$niveau01=$group=$em->getRepository('CadolesCoreBundle:Niveau01')->find(-100);
$niveau01->setAttributes('{"username":"*"}');
$em->persist($niveau01);
$em->flush();
}
}
// Génération du profils de permissions modérateurs
$metadata = $em->getClassMetaData('CadolesCoreBundle:PermModoProfil');
$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);
$metadata->setIdGenerator(new AssignedGenerator());
$entityprofil = $em->getRepository('CadolesCoreBundle:PermModoProfil')->find(-100);
if(!$entityprofil) {
$entityprofil = new PermModoProfil();
$entityprofil->setId(-100);
$entityprofil->setName("Global");
$em->persist($entityprofil);
$em->flush();
}
// Affecter les permissions modérateurs sans profils sur le profils par défaut
$entitys = $em->getRepository('CadolesCoreBundle:PermModo')->findBy(["permmodoprofil"=>null]);
foreach($entitys as $entity) {
$entity->setPermmodoprofil($entityprofil);
$em->persist($entity);
$em->flush();
}
// Affecter le profil modérateur par défaut aux modérateurs qui n'en ont pas
$users = $em->getRepository('CadolesCoreBundle:User')->findBy(["role"=>"ROLE_MODO","permmodoprofil"=>null]);
foreach($users as $user) {
$user->setPermmodoprofil($entityprofil);
$em->persist($user);
$em->flush();
}
// Initialiser l'ensemble des profils modérateurs
$entityprofils = $em->getRepository('CadolesCoreBundle:PermModoProfil')->findAll();
foreach($entityprofils as $profil) {
$this->addModeration($profil,'cadoles_core_config_commun',0);
$this->addModeration($profil,'cadoles_core_config_theme',0);
$this->addModeration($profil,'cadoles_core_config_datauser',0);
$this->addModeration($profil,'cadoles_core_config_datausers',0);
$this->addModeration($profil,'cadoles_core_config_whitelist',0);
$this->addModeration($profil,'cadoles_core_config_niveau01',1);
$this->addModeration($profil,'cadoles_core_config_niveau02',1);
$this->addModeration($profil,'cadoles_core_config_group',1);
$this->addModeration($profil,'cadoles_core_config_registration',1);
$this->addModeration($profil,'cadoles_core_config_user',1);
$this->addModeration($profil,'cadoles_portal_config_pagetemplate',1);
$this->addModeration($profil,'cadoles_portal_config_page',1);
$this->addModeration($profil,'cadoles_portal_config_item',1);
$this->addModeration($profil,'cadoles_portal_config_alert',1);
$this->addModeration($profil,'cadoles_portal_config_calendar',1);
$this->addModeration($profil,'cadoles_portal_config_blog',1);
$this->addModeration($profil,'cadoles_portal_config_project',1);
$this->addModeration($profil,'cadoles_portal_config_flux',1);
$this->addModeration($profil,'cadoles_portal_config_notice',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_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_core_config_statistic',1);
$this->addModeration($profil,'cadoles_core_config_mailing',1);
$this->addModeration($profil,'cadoles_core_config_importuser',0);
$this->addModeration($profil,'cadoles_cron_config',0);
$this->addModeration($profil,'cadoles_cron_config_log',0);
}
// Forcer le theme
$force_theme=$this->getContainer()->getParameter('force_theme');
if($force_theme) {
// On force la configuration du theme
$force_themename=$this->getContainer()->getParameter('force_themename');
$config = $em->getRepository('CadolesCoreBundle:Config')->find("theme");
if($config) {
$config->setValue($force_themename);
$em->persist($config);
$em->flush();
}
// On enlève l'accès de la sidebar
$sidebar = $em->getRepository('CadolesCoreBundle:Sidebar')->findOneBy(["path"=>"cadoles_core_config_theme"]);
if($sidebar) {
$em->remove($sidebar);
$em->flush();
}
}
$output->writeln('');
}
@ -159,4 +275,17 @@ class InitDataCommand extends ContainerAwareCommand
$rootdir = rtrim(getcwd(), '/');
return $rootdir . '/' . trim($extra['symfony-app-dir'], '/');
}
protected function addModeration($profil,$route,$visible) {
$em = $this->getContainer()->get('doctrine')->getEntityManager();
$entity=$em->getRepository('CadolesCoreBundle:PermModo')->findOneBy(["route"=>$route,"permmodoprofil"=>$profil]);
if(!$entity) {
$entity=new PermModo();
$entity->setRoute($route);
$entity->setVisible($visible);
$entity->setPermmodoprofil($profil);
$em->persist($entity);
$em->flush();
}
}
}

View File

@ -287,7 +287,7 @@ class OnlyCommand extends Command
$this->em->flush();
// 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
$this->ctrlFgcanshare($group,$user,$pagetemplate);
@ -318,7 +318,7 @@ class OnlyCommand extends Command
// On s'assure qu'il n'es pas déjà rattaché
$usergroup=$this->em->getRepository("CadolesCoreBundle:UserGroup")->findOneBy(["user"=>$user,"group"=>$group]);
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();
$usergroup=new Usergroup;
$usergroup=new UserGroup();
$usergroup->setUser($user);
$usergroup->setGroup($group);
$usergroup->setFgmanager($fgmanager);
$usergroup->setRolegroup($role);
$usergroup->setKeyvalue($key);
$this->em->persist($usergroup);
$this->em->flush();

View File

@ -22,6 +22,7 @@ class PurgeFileCommand extends Command
private $output;
private $filesystem;
private $rootlog;
private $byexec;
protected function configure()
{
@ -30,7 +31,8 @@ class PurgeFileCommand extends Command
->setDescription('Purge Files')
->setHelp('This command Purge the obsolete Files')
->addArgument('cronid', InputArgument::OPTIONAL, 'ID Cron Job')
->addArgument('lastchance', InputArgument::OPTIONAL, 'Lastchance to run the cron')
->addArgument('lastchance', InputArgument::OPTIONAL, 'Lastchance to run the cron')
->addArgument('byexec', InputArgument::OPTIONAL, 'By Cron:Exec')
;
}
@ -43,6 +45,10 @@ class PurgeFileCommand extends Command
$this->rootlog = $this->container->get('kernel')->getRootDir()."/../var/logs/";
$alias = $this->container->getParameter('alias');
// Le script est-il executé via Cron:Exec
$this->byexec = $input->getArgument('byexec');
if($this->byexec=="") $this->byexec=false;
$this->writelnred('');
$this->writelnred('== Core:PurgeFile');
$this->writelnred('==========================================================================================================');
@ -59,7 +65,7 @@ class PurgeFileCommand extends Command
if($fs->exists($directory)) {
$finder = new Finder();
$finder->in($directory)->directories()->exclude("thumb")->exclude("thumbmini");
$finder->depth('== 0')->in($directory)->directories();
foreach (iterator_to_array($finder) as $file) {
$name = $file->getRelativePathname();
@ -77,6 +83,28 @@ class PurgeFileCommand extends Command
}
}
break;
case "projecttask":
$entity=$this->em->getRepository("CadolesPortalBundle:Projecttask")->find($id);
if(!$entity) {
$this->writeln($name);
$url=$directory."/".$name;
if($fs->exists($url)) {
$fs->remove($url);
}
}
break;
case "calendarevent":
$entity=$this->em->getRepository("CadolesPortalBundle:Calendarevent")->find($id);
if(!$entity) {
$this->writeln($name);
$url=$directory."/".$name;
if($fs->exists($url)) {
$fs->remove($url);
}
}
break;
}
}
}
@ -188,8 +216,9 @@ class PurgeFileCommand extends Command
foreach (iterator_to_array($finder) as $file) {
$name = $file->getRelativePathname();
if($name!="logo.png") {
$entity=$this->em->getRepository("CadolesCoreBundle:Niveau01")->findBy(["logo"=>"uploads/niveau01/".$name]);
if(!$entity) {
$logo=$this->em->getRepository("CadolesCoreBundle:Niveau01")->findBy(["logo"=>"uploads/niveau01/".$name]);
$header=$this->em->getRepository("CadolesCoreBundle:Niveau01")->findBy(["header"=>"uploads/niveau01/".$name]);
if(!$logo&&!$header) {
$this->writeln($name);
$url=$directory."/".$name;
if($fs->exists($url)) {
@ -252,6 +281,16 @@ class PurgeFileCommand extends Command
}
}
$directory=$this->container->get('kernel')->getRootDir()."/../web";
$icons=$this->em->getRepository("CadolesPortalBundle:Icon")->findAll();
foreach($icons as $icon) {
if(!$fs->exists($directory."/".$icon->getLabel())) {
$this->writeln($directory."/".$icon->getLabel());
$this->em->remove($icon);
$this->em->flush();
}
}
// /web/uploads/blogarticle
$this->writelnred('');
$this->writelnred('== Directory = Blog Article');
@ -341,6 +380,46 @@ class PurgeFileCommand extends Command
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
if(!$find) {
$this->writeln($name);
@ -368,9 +447,11 @@ class PurgeFileCommand extends Command
private function writelnred($string) {
$this->output->writeln('<fg=red>'.$string.'</>');
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
if($this->byexec) $this->filesystem->appendToFile($this->rootlog.'exec.log', $string."\n");
}
private function writeln($string) {
$this->output->writeln($string);
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
if($this->byexec) $this->filesystem->appendToFile($this->rootlog.'exec.log', $string."\n");
}
}

View File

@ -0,0 +1,343 @@
<?php
namespace Cadoles\CoreBundle\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Question\ConfirmationQuestion;
use Symfony\Component\Console\Input\ArrayInput;
use Cadoles\CoreBundle\Entity\User;
use Cadoles\CoreBundle\Entity\Group;
use Cadoles\CoreBundle\Entity\UserGroup;
class ScribeToNinegateCommand extends Command
{
private $container;
private $em;
private $output;
private $connection;
private $host;
private $port;
private $pwd;
private $user;
protected function configure()
{
$this
->setName('Core:ScribeToNinegate')
->setDescription('Récupére un annuaire Scribe et le transforme en donnée Ninegate')
->setHelp('Récupére un annuaire Scribe et le transforme en donnée Ninegate')
->addArgument('host', InputArgument::REQUIRED, 'host du ldap scribe')
->addArgument('pwd', InputArgument::REQUIRED, 'pwd du compte cn=admin,o=gouv,c=fr')
;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->container = $this->getApplication()->getKernel()->getContainer();
$this->em = $this->container->get('doctrine')->getEntityManager();
$this->output = $output;
// Récupérer les parametres
$this->host = $input->getArgument('host');
$this->port = 389;
$this->pwd = $input->getArgument('pwd');
$this->user = "cn=reader,o=gouv,c=fr";
$ldap_basedn = $this->container->getParameter('ldap_basedn');
$ldap_username = $this->container->getParameter('ldap_username');
$ldap_firstname = $this->container->getParameter('ldap_firstname');
$ldap_lastname = $this->container->getParameter('ldap_lastname');
$ldap_email = $this->container->getParameter('ldap_email');
$ldap_usersadmin = $this->container->getParameter('ldap_usersadmin');
$fieldstoread = array($ldap_username,$ldap_firstname,$ldap_lastname,$ldap_email,"userPassword");
if(!$this->connect()) {
$this->writelnred("IMPOSSIBLE DE SE CONNECTER A L'ANNUAIRE SCRIBE");
return 0;
}
// On arrive à se connecter à l'annuaire du scribe
$this->writeln("CONNEXION A L'ANNUAIRE SCRIBE");
// Attention confirmation
$this->writeln('');
$this->writelnred('ATTENTION');
$this->writelnred('En confirmant vous allez totalement réinitialiser votre Ninegate');
$helper = $this->getHelper('question');
$question = new ConfirmationQuestion('Souhaitez-vous poursuivre (yes/no)?', false);
if (!$helper->ask($input, $output, $question)) {
return 0;
}
$this->writelnred('');
$this->writelnred('== PURGE');
$this->writelnred('PURGE DES CONFIG');
$this->purge('CadolesCoreBundle:Config');
$this->purge('CadolesCoreBundle:Script');
$this->purge('CadolesCoreBundle:Statistic');
$this->purge('CadolesCoreBundle:Whitelist');
$this->writelnred('PURGE DES ITEMS');
$this->purge('CadolesPortalBundle:Item');
$this->purge('CadolesPortalBundle:Itemcategory');
$this->writelnred('PURGE DES BOOKMARKS');
$this->purge('CadolesPortalBundle:Bookmark');
$this->writelnred('PURGE DES ALERTES');
$this->purge('CadolesPortalBundle:Alert');
$this->purge('CadolesPortalBundle:Alertcategory');
$this->writelnred('PURGE DES NOTICE');
$this->purge('CadolesPortalBundle:Notice');
$this->writelnred('PURGE DES CALENDAR');
$this->purge('CadolesPortalBundle:Calendar');
$this->writelnred('PURGE DES FLUX');
$this->purge('CadolesPortalBundle:Flux');
$this->writelnred('PURGE DES BLOG');
$this->purge('CadolesPortalBundle:Blog');
$this->writelnred('PURGE DES PROJECT');
$this->purge('CadolesPortalBundle:Project');
$this->writelnred('PURGE DES UTILISATEURS');
$this->purge('CadolesCoreBundle:User');
$this->writelnred('PURGE DES INSCRIPTIONS');
$this->purge('CadolesCoreBundle:Registration');
$this->writelnred('PURGE DES GROUPES');
$this->purge('CadolesCoreBundle:Group');
$this->writelnred('PURGE DES NIVEAU 02');
$this->purge('CadolesCoreBundle:Niveau02');
$this->writelnred('PURGE DES NIVEAU 01');
$this->purge('CadolesCoreBundle:Niveau01');
$this->writelnred('PURGE DES PAGES');
$this->purge('CadolesPortalBundle:Page');
$this->writelnred('PURGE DES ICONES');
$this->purge('CadolesPortalBundle:Icon');
$this->writeln('');
$this->writelnred('');
$this->writelnred('== INIT DATA');
$command = $this->getApplication()->find("Core:InitData");
$parameter = new ArrayInput([]);
$command->run($parameter, $output);
$command = $this->getApplication()->find("Cron:InitData");
$parameter = new ArrayInput([]);
$command->run($parameter, $output);
$command = $this->getApplication()->find("Portal:InitData");
$parameter = new ArrayInput([]);
$command->run($parameter, $output);
$command = $this->getApplication()->find("Core:Script");
$parameter = new ArrayInput([]);
$command->run($parameter, $output);
$this->writelnred('');
$this->writelnred('== USERS SCRIBE TO USERS NINEGATE');
$niveau01=$this->em->getRepository('CadolesCoreBundle:Niveau01')->find(-100);
$niveau01->setSiren("");
$this->em->persist($niveau01);
$this->em->flush();
$scribeusers = $this->search("(&(uid=*)(mail=*)(objectClass=person)(!(description=Computer)))", $fieldstoread, $ldap_basedn);
foreach($scribeusers as $scribeuser) {
if($scribeuser[$ldap_email]=="") {
$this->writelnred("Compte sans mail = ".$scribeuser[$ldap_username]." ".$scribeuser[$ldap_email]);
continue;
}
$user=$this->em->getRepository('CadolesCoreBundle:User')->findOneBy(array('email' => $scribeuser[$ldap_email]));
if($user&&$user->getUsername()!=$scribeuser[$ldap_username]) {
$this->writelnred("EMAIL en double = ".$scribeuser[$ldap_username]." ".$scribeuser[$ldap_email]);
continue;
}
$this->writeln($scribeuser[$ldap_username]." ".$scribeuser[$ldap_email]);
$user=$this->em->getRepository('CadolesCoreBundle:User')->findOneBy(array('username' => $scribeuser[$ldap_username]));
if(!$user) {
$user = new User();
$user->setUsername($scribeuser[$ldap_username]);
}
$user->setLastname($scribeuser[$ldap_lastname]);
$user->setFirstname($scribeuser[$ldap_firstname]);
$user->setEmail($scribeuser[$ldap_email]);
$user->setNiveau01($niveau01);
$user->setSiren($niveau01->getSiren());
$user->setPasswordDirect($scribeuser["userpassword"]);
$user->setSalt(uniqid(mt_rand(), true));
$user->setVisible(true);
$user->setAuthlevel("simple");
$user->setBelongingpopulation("agent");
if(in_array($scribeuser[$ldap_username],$ldap_usersadmin))
$user->setRole("ROLE_ADMIN");
else
$user->setRole("ROLE_USER");
$this->em->persist($user);
$this->em->flush();
}
$this->writelnred('');
$this->writelnred('== USERS SCRIBE TO USERS NINEGATE');
$scribegroups = $this->search("(objectClass=posixGroup)", ["cn","memberuid"], $ldap_basedn);
$exludgroupe=["DomainAdmins","DomainUsers","DomainComputers","PrintOperators","eleves","professeurs"];
foreach($scribegroups as $scribegroup) {
if(in_array($scribegroup["cn"],$exludgroupe)) continue;
$this->writeln($scribegroup["cn"]);
$group=$this->em->getRepository('CadolesCoreBundle:Group')->findOneBy(array('label' => $scribegroup["cn"]));
if(!$group) {
$group = new Group();
$group->setLabel($scribegroup["cn"]);
}
$group->setFgcanshare(false);
$group->setFgcancreatepage(false);
$group->setFgcancreateblog(false);
$group->setFgcancreatecalendar(false);
$group->setFgcancreateproject(false);
$group->setFgopen(false);
$group->setFgall(false);
$group->setFgtemplate(false);
$this->em->persist($group);
$this->em->flush();
if(array_key_exists("memberuid",$scribegroup))
{
if(!is_array($scribegroup["memberuid"]))
$scribegroup["memberuid"] = [ $scribegroup["memberuid"] ];
}
else
$scribegroup["memberuid"] = [];
foreach($scribegroup["memberuid"] as $scribemember) {
$user=$this->em->getRepository('CadolesCoreBundle:User')->findOneBy(array('username' => $scribemember));
if($user) {
$member=$this->em->getRepository('CadolesCoreBundle:UserGroup')->findOneBy(array('group' => $group, 'user' => $user));
if(!$member) {
$member= new UserGroup();
$member->setGroup($group);
$member->setUser($user);
$member->setRolegroup(0);
$this->em->persist($member);
$this->em->flush();
}
}
}
}
return 1;
}
private function purge($entityname) {
// Si on purge les pages il faut d'abord purger les pages qui ne sont pas pagetemplate
if($entityname=="CadolesPortalBundle:Page") {
$qb=$this->em->createQueryBuilder();
$entitys = $qb->select('t')
->from($entityname,'t')
->where($qb->expr()->isNotNull('t.page'))
->getQuery()
->getResult();
foreach ($entitys as $entity) {
$this->em->remove($entity);
}
$this->em->flush();
}
$entitys=$this->em->getRepository($entityname)->findAll();
foreach ($entitys as $entity) {
$this->em->remove($entity);
}
$this->em->flush();
}
private function connect() {
if($this->connection){
return $this->connection;
} else {
$ldapConn = ldap_connect($this->host, $this->port);
if($ldapConn){
ldap_set_option($ldapConn, LDAP_OPT_PROTOCOL_VERSION, 3);
if(ldap_bind( $ldapConn, $this->user, $this->pwd)){
$this->connection = $ldapConn;
return $this->connection;
}
}
}
}
public function search($filter, $attributes = array(), $subBranch = '') {
$connection = $this->connect();
$branch = ($subBranch ? $subBranch : $this->baseDN);
$result = ldap_search($connection, $branch, $filter, $attributes,0,0,0);
if(!$result) {
$this->ldapError();
}
return $this->resultToArray($result);
}
private function resultToArray($result){
$connection = $this->connect();
$resultArray = array();
if($result){
$entry = ldap_first_entry($connection, $result);
while ($entry){
$row = array();
$attr = ldap_first_attribute($connection, $entry);
while ($attr){
$val = ldap_get_values_len($connection, $entry, $attr);
if(array_key_exists('count', $val) AND $val['count'] == 1){
$row[strtolower($attr)] = $val[0];
} else {
$row[strtolower($attr)] = $val;
}
$attr = ldap_next_attribute($connection, $entry);
}
$resultArray[] = $row;
$entry = ldap_next_entry($connection, $entry);
}
}
return $resultArray;
}
public function ldapError(){
$connection = $this->connect();
throw new \Exception(
'Error: ('. ldap_errno($connection) .') '. ldap_error($connection)
);
}
private function writelnred($string) {
$this->output->writeln('<fg=red>'.$string.'</>');
}
private function writeln($string) {
$this->output->writeln($string);
}
}

View File

@ -46,9 +46,10 @@ class ScriptCommand extends Command
$this->filesystem = new Filesystem();
$this->rootlog = $this->container->get('kernel')->getRootDir()."/../var/logs/";
$script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"visibletrue"]);
if(!$script) {
$this->writelnred("== SCRIPT = visibletrue");
$this->writeln("== SCRIPT = visibletrue");
$this->visibletrue();
$script=new Script();
@ -60,7 +61,7 @@ class ScriptCommand extends Command
$script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"setusersniveau"]);
if(!$script) {
$this->writelnred("== SCRIPT = setusersniveau");
$this->writeln("== SCRIPT = setusersniveau");
$this->setusersniveau();
$script=new Script();
@ -72,7 +73,7 @@ class ScriptCommand extends Command
$script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"setfgcancreateproject"]);
if(!$script) {
$this->writelnred("== SCRIPT = setfgcancreateproject");
$this->writeln("== SCRIPT = setfgcancreateproject");
$this->setfgcancreateproject();
$script=new Script();
@ -84,7 +85,7 @@ class ScriptCommand extends Command
$script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"createproject"]);
if(!$script) {
$this->writelnred("== SCRIPT = createproject");
$this->writeln("== SCRIPT = createproject");
$this->createproject();
$script=new Script();
@ -96,7 +97,7 @@ class ScriptCommand extends Command
$script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"createthumbmini"]);
if(!$script) {
$this->writelnred("== SCRIPT = createthumbmini");
$this->writeln("== SCRIPT = createthumbmini");
$this->createthumbmini();
$script=new Script();
@ -108,7 +109,7 @@ class ScriptCommand extends Command
$script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"createwidgetproject"]);
if(!$script) {
$this->writelnred("== SCRIPT = createwidgetproject");
$this->writeln("== SCRIPT = createwidgetproject");
$this->createwidgetproject();
$script=new Script();
@ -118,6 +119,81 @@ class ScriptCommand extends Command
$this->writeln("");
}
$script=$this->em->getRepository("CadolesCoreBundle:Script")->findOneBy(["name"=>"renamegroup"]);
if(!$script) {
$this->writeln("== SCRIPT = renamegroup");
$this->renamegroup();
$script=new Script();
$script->setName("renamegroup");
$this->em->persist($script);
$this->em->flush();
$this->writeln("");
}
$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;
}
@ -227,12 +303,164 @@ class ScriptCommand extends Command
}
private function renamegroup(){
$groups = $this->em->getRepository('CadolesCoreBundle:Group')->findAll();
foreach($groups as $group) {
// Si présence d'un = dans le label
if(stripos($group->getLabel(),"=")!==false) {
$newname=str_replace("=","-",$group->getLabel());
$this->writeln("Renommer groupe = ".$group->getLabel());
// Renommer les pages
$pages = $this->em->getRepository('CadolesPortalBundle:Page')->findBy(["name"=>$group->getLabel()]);
foreach($pages as $page) {
$page->setName($newname);
$this->em->persist($page);
$this->em->flush();
}
// Renommer calendrier
$calendars = $this->em->getRepository('CadolesPortalBundle:Calendar')->findBy(["name"=>$group->getLabel()]);
foreach($calendars as $calendar) {
$calendar->setName($newname);
$this->em->persist($calendar);
$this->em->flush();
}
// Renommer blog
$blogs = $this->em->getRepository('CadolesPortalBundle:Blog')->findBy(["name"=>$group->getLabel()]);
foreach($blogs as $blog) {
$blog->setName($newname);
$this->em->persist($blog);
$this->em->flush();
}
// Renommer projet
$projects = $this->em->getRepository('CadolesPortalBundle:Project')->findBy(["name"=>$group->getLabel()]);
foreach($projects as $project) {
$project->setName($newname);
$this->em->persist($project);
$this->em->flush();
}
$group->setLabel($newname);
$this->em->persist($group);
$this->em->flush();
}
}
}
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

@ -0,0 +1,281 @@
<?php
namespace Cadoles\CoreBundle\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Finder\Finder;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\HttpKernel\KernelInterface;
use Doctrine\DBAL\Connection as DBALConnection;
use Doctrine\ORM\EntityManager;
use Symfony\Component\Validator\Constraints\DateTime;
use Cadoles\CoreBundle\Entity\Statistic;
use function GuzzleHttp\json_encode;
class StatisticCommand extends Command
{
private $container;
private $em;
private $output;
private $filesystem;
private $rootlog;
private $byexec;
protected function configure()
{
$this
->setName('Core:Statistic')
->setDescription('Calculate Statistic')
->setHelp('This command Calculate Statistic')
->addArgument('cronid', InputArgument::OPTIONAL, 'ID Cron Job')
->addArgument('lastchance', InputArgument::OPTIONAL, 'Lastchance to run the cron')
->addArgument('byexec', InputArgument::OPTIONAL, 'By Cron:Exec')
;
}
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/";
$alias = $this->container->getParameter('alias');
// Le script est-il executé via Cron:Exec
$this->byexec = $input->getArgument('byexec');
if($this->byexec=="") $this->byexec=false;
$this->writelnred('');
$this->writelnred('== Core:Statistic');
$this->writelnred('==========================================================================================================');
$now=new \DateTime('now');
$yesterday=clone $now;
$yesterday->sub(new \DateInterval('P1D'));
$groups=$this->em->getRepository("CadolesCoreBundle:Group")->findBy(["fgcanshare"=>true]);
// totcptvisite
$this->writelnred('');
$this->writelnred('== totcptvisite');
$stat=$this->em->getRepository("CadolesCoreBundle:Statistic")->findOneBy(["keyvalue"=>"totcptvisite"]);
if(!$stat) {
$stat=new Statistic();
$stat->setKeyvalue("totcptvisite");
$stat->setValue([]);
}
$value=$stat->getValue();
$cpt= $this->em->createQueryBuilder()
->select('SUM(user.visitecpt) as cpt')
->from('CadolesCoreBundle:User','user')
->getQuery()->getOneOrNullResult();
$value[$now->format("Y-m-d")]=($cpt["cpt"]?$cpt["cpt"]:0);
$stat->setValue($value);
$this->em->persist($stat);
$this->em->flush();
// totcptvisitegroup
$this->writelnred('');
$this->writelnred('== totcptvisitegroup');
$stat=$this->em->getRepository("CadolesCoreBundle:Statistic")->findOneBy(["keyvalue"=>"totcptvisitegroup"]);
if(!$stat) {
$stat=new Statistic();
$stat->setKeyvalue("totcptvisitegroup");
$stat->setValue([]);
}
$value=$stat->getValue();
$cpt= $this->em->createQueryBuilder()
->select('SUM(usergroup.visitecpt) as cpt')
->from('CadolesCoreBundle:UserGroup','usergroup')
->getQuery()->getOneOrNullResult();
$value[$now->format("Y-m-d")]=($cpt["cpt"]?$cpt["cpt"]:0);
$stat->setValue($value);
$this->em->persist($stat);
$this->em->flush();
// totcptmessage
$this->writelnred('');
$this->writelnred('== totcptmessage');
$stat=$this->em->getRepository("CadolesCoreBundle:Statistic")->findOneBy(["keyvalue"=>"totcptmessage"]);
if(!$stat) {
$stat=new Statistic();
$stat->setKeyvalue("totcptmessage");
$stat->setValue([]);
}
$value=$stat->getValue();
$cpt= $this->em->createQueryBuilder()
->select('COUNT(message.id) as cpt')
->from('CadolesWebsocketBundle:Message','message')
->getQuery()->getOneOrNullResult();
$value[$now->format("Y-m-d")]=($cpt["cpt"]?$cpt["cpt"]:0);
$stat->setValue($value);
$this->em->persist($stat);
$this->em->flush();
// totcptblogarticle
$this->writelnred('');
$this->writelnred('== totcptblogarticle');
$stat=$this->em->getRepository("CadolesCoreBundle:Statistic")->findOneBy(["keyvalue"=>"totcptblogarticle"]);
if(!$stat) {
$stat=new Statistic();
$stat->setKeyvalue("totcptblogarticle");
$stat->setValue([]);
}
$value=$stat->getValue();
$cpt= $this->em->createQueryBuilder()
->select('COUNT(blogarticle.id) as cpt')
->from('CadolesPortalBundle:Blogarticle','blogarticle')
->getQuery()->getOneOrNullResult();
$value[$now->format("Y-m-d")]=($cpt["cpt"]?$cpt["cpt"]:0);
$stat->setValue($value);
$this->em->persist($stat);
$this->em->flush();
// totcptprojecttask
$this->writelnred('');
$this->writelnred('== totcptprojecttask');
$stat=$this->em->getRepository("CadolesCoreBundle:Statistic")->findOneBy(["keyvalue"=>"totcptprojecttask"]);
if(!$stat) {
$stat=new Statistic();
$stat->setKeyvalue("totcptprojecttask");
$stat->setValue([]);
}
$value=$stat->getValue();
$cpt= $this->em->createQueryBuilder()
->select('COUNT(projecttask.id) as cpt')
->from('CadolesPortalBundle:Projecttask','projecttask')
->getQuery()->getOneOrNullResult();
$value[$now->format("Y-m-d")]=($cpt["cpt"]?$cpt["cpt"]:0);
$stat->setValue($value);
$this->em->persist($stat);
$this->em->flush();
// groupcptvisite
$this->writelnred('');
$this->writelnred('== groupcptvisite');
foreach($groups as $group) {
$stat=$this->em->getRepository("CadolesCoreBundle:Statistic")->findOneBy(["keyvalue"=>"groupcptvisite","group"=>$group]);
if(!$stat) {
$stat=new Statistic();
$stat->setKeyvalue("groupcptvisite");
$stat->setValue([]);
$stat->setGroup($group);
}
$value=$stat->getValue();
$cpt= $this->em->createQueryBuilder()
->select(['SUM(usergroup.visitecpt) as cpt'])
->from('CadolesCoreBundle:UserGroup','usergroup')
->Where('usergroup.group=:group')
->setParameter('group', $group)
->getQuery()->getOneOrNullResult();
$value[$now->format("Y-m-d")]=($cpt["cpt"]?$cpt["cpt"]:0);
$stat->setValue($value);
$this->em->persist($stat);
$this->em->flush();
}
// groupcptmessage
$this->writelnred('');
$this->writelnred('== groupcptmessage');
foreach($groups as $group) {
$stat=$this->em->getRepository("CadolesCoreBundle:Statistic")->findOneBy(["keyvalue"=>"groupcptmessage","group"=>$group]);
if(!$stat) {
$stat=new Statistic();
$stat->setKeyvalue("groupcptmessage");
$stat->setValue([]);
$stat->setGroup($group);
}
$value=$stat->getValue();
$cpt= $this->em->createQueryBuilder()
->select('COUNT(message.id) as cpt')
->from('CadolesWebsocketBundle:Message','message')
->Where('message.group=:group')
->setParameter('group', $group)
->getQuery()->getOneOrNullResult();
$value[$now->format("Y-m-d")]=($cpt["cpt"]?$cpt["cpt"]:0);
$stat->setValue($value);
$this->em->persist($stat);
$this->em->flush();
}
// groupcptblogarticle
$this->writelnred('');
$this->writelnred('== groupcptblogarticle');
foreach($groups as $group) {
$stat=$this->em->getRepository("CadolesCoreBundle:Statistic")->findOneBy(["keyvalue"=>"groupcptblogarticle","group"=>$group]);
if(!$stat) {
$stat=new Statistic();
$stat->setKeyvalue("groupcptblogarticle");
$stat->setValue([]);
$stat->setGroup($group);
}
$value=$stat->getValue();
$cpt= $this->em->createQueryBuilder()
->select('COUNT(blogarticle.id) as cpt')
->from('CadolesPortalBundle:Blogarticle','blogarticle')
->from('CadolesPortalBundle:Blog','blog')
->Where('blogarticle.blog=blog')
->andwhere(":group MEMBER OF blog.groups")
->setParameter('group', $group)
->getQuery()->getOneOrNullResult();
$value[$now->format("Y-m-d")]=($cpt["cpt"]?$cpt["cpt"]:0);
$stat->setValue($value);
$this->em->persist($stat);
$this->em->flush();
}
// groupcptprojecttask
$this->writelnred('');
$this->writelnred('== groupcptprojecttask');
foreach($groups as $group) {
$stat=$this->em->getRepository("CadolesCoreBundle:Statistic")->findOneBy(["keyvalue"=>"groupcptprojecttask","group"=>$group]);
if(!$stat) {
$stat=new Statistic();
$stat->setKeyvalue("groupcptprojecttask");
$stat->setValue([]);
$stat->setGroup($group);
}
$value=$stat->getValue();
$cpt= $this->em->createQueryBuilder()
->select('COUNT(projecttask.id) as cpt')
->from('CadolesPortalBundle:Projecttask','projecttask')
->from('CadolesPortalBundle:Project','project')
->Where('projecttask.project=project')
->andwhere(":group MEMBER OF project.groups")
->setParameter('group', $group)
->getQuery()->getOneOrNullResult();
$value[$now->format("Y-m-d")]=($cpt["cpt"]?$cpt["cpt"]:0);
$stat->setValue($value);
$this->em->persist($stat);
$this->em->flush();
}
$this->writeln('');
return 1;
}
private function writelnred($string) {
$this->output->writeln('<fg=red>'.$string.'</>');
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
if($this->byexec) $this->filesystem->appendToFile($this->rootlog.'exec.log', $string."\n");
}
private function writeln($string) {
$this->output->writeln($string);
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
if($this->byexec) $this->filesystem->appendToFile($this->rootlog.'exec.log', $string."\n");
}
}

View File

@ -36,6 +36,8 @@ class SynchroCommand extends Command
private $rootlog;
private $ldap;
private $ldap_basedn;
private $ldap_baseuser;
private $ldap_basegroup;
protected function configure()
{
@ -66,6 +68,25 @@ class SynchroCommand extends Command
$labelniveau02 = mb_strtoupper($this->container->getParameter('labelniveau02'));
$masteridentity = $this->container->getParameter('masteridentity');
$this->ldap_basedn = $this->container->getParameter('ldap_basedn');
$this->ldap_baseuser = $this->container->getParameter('ldap_baseuser');
$this->ldap_basegroup = $this->container->getParameter('ldap_basegroup');
$ldap_username = strtolower($this->container->getParameter('ldap_username'));
$ldap_firstname = strtolower($this->container->getParameter('ldap_firstname'));
$ldap_lastname = strtolower($this->container->getParameter('ldap_lastname'));
$ldap_email = strtolower($this->container->getParameter('ldap_email'));
$ldap_member = strtolower($this->container->getParameter('ldap_member'));
$scribe_group = strtolower($this->container->getParameter('scribe_group'));
$ldap_type = $this->container->getParameter('ldap_type');
$ldap_template = $this->container->getParameter('ldap_template');
$ldap_usersadmin = $this->container->getParameter('ldap_usersadmin');
$scribe_master = strtolower($this->container->getParameter('scribe_master'));
$fieldstoread = array($ldap_username,$ldap_firstname,$ldap_lastname,$ldap_email);
$ldapusers = array();
$ldapmails = array();
$simulate = $input->getArgument('simulate');
if($simulate=="") $simulate="true";
@ -93,45 +114,46 @@ class SynchroCommand extends Command
$this->writeln('== SYNCHONISATION LDAP TO BUNDLE ====================');
$this->writeln('=====================================================');
$this->ldap_basedn = $this->container->getParameter('ldap_basedn');
$ldap_template = $this->container->getParameter('ldap_template');
$ldap_username = $this->container->getParameter('ldap_username');
$ldap_firstname = $this->container->getParameter('ldap_firstname');
$ldap_lastname = $this->container->getParameter('ldap_lastname');
$ldap_email = $this->container->getParameter('ldap_email');
$ldap_usersadmin = $this->container->getParameter('ldap_usersadmin');
$fieldstoread = array($ldap_username,$ldap_firstname,$ldap_lastname,$ldap_email);
$ldapusers = array();
$ldapmails = array();
if($ldap_template=="scribe") {
$this->writeln('');
$this->writeln('== PROFILS ==========================================');
// Eleves
$ldapfilter="(&(uid=*)(ENTPersonProfils=eleve))";
$label="PROFIL = Elèves";
$label="PROFIL - Elèves";
$this->writeln(" - $label");
if(!$simulate) $this->addmodGroup($label,$ldapfilter,false);
// Enseignants
$ldapfilter="(|(&(uid=*)(ENTPersonProfils=enseignant))(&(uid=*)(typeadmin=0))(&(uid=*)(typeadmin=2)))";
$label="PROFIL = Enseignants";
$label="PROFIL - Enseignants";
$this->writeln(" - $label");
if(!$simulate) $this->addmodGroup($label,$ldapfilter,true);
if(!$simulate) $this->addmodGroup($label,$ldapfilter,false);
// Responsables
$ldapfilter="(&(uid=*)(ENTPersonProfils=responsable))";
$label="PROFIL = Responsables";
$label="PROFIL - Responsables";
$this->writeln(" - $label");
if(!$simulate) $this->addmodGroup($label,$ldapfilter,false);
// Administratifs
$ldapfilter="(&(uid=*)(ENTPersonProfils=administratif))";
$label="PROFIL = Administratifs";
$label="PROFIL - Administratifs";
$this->writeln(" - $label");
if(!$simulate) $this->addmodGroup($label,$ldapfilter,true);
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
$this->writeln('');
@ -141,9 +163,35 @@ class SynchroCommand extends Command
$cn=$result["cn"];
$ldapfilter="(|(&(type=Classe)(cn=$cn))(&(type=Equipe)(cn=profs-$cn))(&(ENTPersonProfils=Administratif)(divcod=$cn)))";
$label="CLASSE = ".$result["cn"];
$label="CLASSE - ".$result["cn"];
$this->writeln(" - $label");
if(!$simulate) $this->addmodGroup($label,$ldapfilter,true);
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
@ -154,9 +202,9 @@ class SynchroCommand extends Command
$cn=$result["cn"];
$ldapfilter="(|(&(type=Option)(cn=$cn))(&(type=Equipe)(cn=profs-$cn))(&(ENTPersonProfils=Administratif)(divcod=$cn)))";
$label="OPTION = ".$result["cn"];
$label="OPTION - ".$result["cn"];
$this->writeln(" - $label");
if(!$simulate) $this->addmodGroup($label,$ldapfilter,true);
if(!$simulate) $this->addmodGroup($label,$ldapfilter,$scribe_group);
}
// Groupes
@ -167,9 +215,25 @@ class SynchroCommand extends Command
$cn=$result["cn"];
$ldapfilter="(&(type=Groupe)(cn=$cn))";
$label="GROUPE = ".$result["cn"];
$label="GROUPE - ".$result["cn"];
$this->writeln(" - $label");
if(!$simulate) $this->addmodGroup($label,$ldapfilter,true);
if(!$simulate) $this->addmodGroup($label,$ldapfilter,$scribe_group);
}
}
elseif($ldap_template=="open") {
if($this->container->getParameter('openldapsynchrogroup')) {
$this->writeln('');
$this->writeln('== GROUPES ==========================================');
$results = $this->ldap->search($this->container->getParameter('openldapreqgroup'), ['cn','description','gidNumber'], $this->ldap_basegroup);
foreach($results as $result) {
$cn=$result["cn"];
$ldapfilter="(&".$this->container->getParameter('openldapreqgroup')."(cn=$cn))";
$label=$result["cn"];
$this->writeln(" - $label");
if(!$simulate) $this->addmodGroup($label,$ldapfilter,false);
}
}
}
@ -191,7 +255,7 @@ class SynchroCommand extends Command
// On execute le filtre d'appartenance à ce niveau
$this->writeln("== Récupération des utilisateurs de l'annuaire");
$niveau01=$this->em->getRepository('CadolesCoreBundle:Niveau01')->find($data["id"]);
$results = $this->ldap->search($niveau01->getLdapfilter(), $fieldstoread, $this->ldap_basedn);
$results = $this->ldap->search($niveau01->getLdapfilter(), $fieldstoread, $this->ldap_baseuser);
$nbuserstotal=count($results);
// Pour chaque utilisateur ldap
@ -211,6 +275,10 @@ class SynchroCommand extends Command
$result[$ldap_username]=utf8_encode($result[$ldap_username]);
if(!isset($result[$ldap_lastname])) $result[$ldap_lastname] = "";
if(!isset($result[$ldap_firstname])) $result[$ldap_firstname] = "";
if(!array_key_exists($ldap_email,$result)||empty($result[$ldap_email])) {
$result[$ldap_email]=$result[$ldap_username]."@nomail.fr";
}
$result[$ldap_email]=strtolower($result[$ldap_email]);
$result[$ldap_email]=utf8_encode($result[$ldap_email]);
@ -243,7 +311,8 @@ class SynchroCommand extends Command
if($user->getLastname()!=$result[$ldap_lastname]||$user->getFirstname()!=$result[$ldap_firstname]||$user->getEmail()!=$result[$ldap_email]||$toadmin) {
$usermail=$this->em->getRepository('CadolesCoreBundle:User')->findOneBy(array('email' => $result[$ldap_email]));
if($usermail!=$user) {
if($usermail&&$usermail!=$user) {
array_push($tberrors," - Modification dans Bundle impossible >> ".$result[$ldap_username]." un autre utilisateur a déjà ce mail = ".$result[$ldap_email]);
}
else {
@ -283,18 +352,29 @@ class SynchroCommand extends Command
$this->writeln('== '.$group->getLabel());
if(!is_null($ldapfilter)) {
$results = $this->ldap->search($ldapfilter,[$ldap_username,"memberuid"] , $this->ldap_basedn);
$results = $this->ldap->search($ldapfilter,[$ldap_username,$ldap_member] , $this->ldap_basedn);
foreach($results as $result) {
if(isset($result["memberuid"])) {
if(isset($result[$ldap_member])) {
// Si memberid est un tableau il y a plusieur user dedans
if(is_array($result["memberuid"])) {
foreach($result["memberuid"] as $key => $value) {
if(is_array($result[$ldap_member])) {
foreach($result[$ldap_member] as $key => $value) {
if(is_int($key)) {
$user=$this->em->getRepository('CadolesCoreBundle:User')->findOneBy(array('username' => $value));
$username=$value;
// si le username forme un DN, il faut récupérer juste la première entrée
$tmp=explode(",",$username);
if(is_array($tmp)&&count($tmp)>1) {
$tmp=explode("=",$tmp[0]);
$username=$tmp[1];
}
$user=$this->em->getRepository('CadolesCoreBundle:User')->findOneBy(array('username' => $username));
if($user) {
array_push($ldapusersgroup,$value);
$this->writeln(" - Rattacher >> ".$value);
array_push($ldapusersgroup,$username);
$this->writeln(" - Rattacher >> ".$username);
if(!$simulate) $this->addtoGroup($user,$group);
}
}
@ -302,10 +382,19 @@ class SynchroCommand extends Command
}
// sinon m'a qu'un seul uid
else {
$user=$this->em->getRepository('CadolesCoreBundle:User')->findOneBy(array('username' => $result["memberuid"]));
$username=$result[$ldap_member];
// si le username forme un DN, il faut récupérer juste la première entrée
$tmp=explode(",",$username);
if(is_array($tmp)&&count($tmp)>1) {
$tmp=explode("=",$tmp[0]);
$username=$tmp[1];
}
$user=$this->em->getRepository('CadolesCoreBundle:User')->findOneBy(array('username' => $username));
if($user) {
array_push($ldapusersgroup,$result["memberuid"]);
$this->writeln(" - Rattacher >> ".$result["memberuid"]);
array_push($ldapusersgroup,$username);
$this->writeln(" - Rattacher >> ".$username);
if(!$simulate) $this->addtoGroup($user,$group);
}
}
@ -376,6 +465,62 @@ class SynchroCommand extends Command
$this->em->clear();
if($nbusers%1000==0) $this->writelnred(" == Nombre d'utilisateurs traités = $nbusers==");
}
$this->writeln('');
$this->writeln('== GROUPS ============================================');
// Pour chaque groupe annuaire on s'assure que le groupe existe bien dans l'annuaire
$groups=$this->em->getRepository('CadolesCoreBundle:Group')->findBy(["fgtemplate"=>true]);
foreach($groups as $group) {
if(stripos($group->getLabel(),"PROFIL - ")===false) {
$results = $this->ldap->search($group->getLdapfilter(), [], $this->ldap_basedn);
if(count($results)==0) {
$this->writeln(" - Suppression dans Bundle >> ".$group->getLabel());
if(!$simulate) {
if($group->getFgcanshare()) {
// Sur l'ensemble des pages liés
$pages=$group->getPages();
foreach($pages as $page) {
$getgroups=$page->getGroups();
// si la page est lié qu'à un seul group on peut la supprimer
if($getgroups->count()==1)
$this->em->remove($page);
}
// Sur l'ensemble des calendar liés
$calendars=$group->getCalendars();
foreach($calendars as $calendar) {
$getgroups=$calendar->getGroups();
// si la page est lié qu'à un seul group on peut la supprimer
if($getgroups->count()==1)
$this->em->remove($calendar);
}
// Sur l'ensemble des blog liés
$blogs=$group->getBlogs();
foreach($blogs as $blog) {
$getgroups=$blog->getGroups();
// si la page est lié qu'à un seul group on peut la supprimer
if($getgroups->count()==1)
$this->em->remove($blog);
}
// Sur l'ensemble des project liés
$projects=$group->getProjects();
foreach($projects as $project) {
$getgroups=$project->getGroups();
// si la page est lié qu'à un seul group on peut la supprimer
if($getgroups->count()==1)
$this->em->remove($project);
}
}
$this->em->remove($group);
$this->em->flush();
}
}
}
}
}
}
else {
@ -402,7 +547,7 @@ class SynchroCommand extends Command
// Mise à jour si elle existe
if(count($results) > 0) {
$this->writeln(' - Modification dans annuaire >> '.$data->getLabel());
if(!$simulate) $this->ldap->modifyNiveau01($data,$data->getLabel());
if(!$simulate) $this->ldap->modifyNiveau01($data,$data->getLabel(),$results[0]["cn"]);
}
// Sinon création de la fiche
else {
@ -429,7 +574,7 @@ class SynchroCommand extends Command
// Mise à jour si elle existe
if(count($results) > 0) {
$this->writeln(' - Modification dans annuaire >> '.$data->getLabel());
if(!$simulate) $this->ldap->modifyNiveau02($data,$data->getLabel());
if(!$simulate) $this->ldap->modifyNiveau02($data,$data->getLabel(),$results[0]["cn"]);
}
// Sinon création de la fiche
else {
@ -456,7 +601,7 @@ class SynchroCommand extends Command
// Mise à jour si elle existe
if(count($results) > 0) {
$this->writeln(' - Modification dans annuaire >> '.$data->getLabel());
if(!$simulate) $this->ldap->modifyGroup($data,$data->getLabel());
if(!$simulate) $this->ldap->modifyGroup($data,$data->getLabel(),$results[0]["cn"]);
}
// Sinon création de la fiche
else {
@ -476,9 +621,9 @@ class SynchroCommand extends Command
->getQuery()
->getResult();
foreach($datas as $data) {
$criteria = '(uid='.$data->getUsername().')';
$criteria = '('.$ldap_username.'='.$data->getUsername().')';
$subbranch=$baseUser;
$results = $this->ldap->search($criteria, array('uid'), $subbranch);
$results = $this->ldap->search($criteria, array($ldap_username), $subbranch);
// S'assurer que SIREN correspond au Niveau01
if($data->getNiveau01()->getSiren()!=$data->getSiren()) {
@ -528,10 +673,13 @@ class SynchroCommand extends Command
$dn=$this->ldap->getNiveau01DN($data->getLabel());
$attrs["memberuid"]=array();
$attrs["cadolesMember"]=array();
if($ldap_type=="AD") $attrs["member"]=array();
foreach($data->getUsers() as $userniveau01) {
array_push($attrs["memberuid"],$userniveau01->getUsername());
array_push($attrs["cadolesMember"],$this->ldap->getUserDN($userniveau01));
if($ldap_type=="AD") array_push($attrs["member"],$this->ldap->getUserDN($userniveau01));
$this->writeln(' > '.$userniveau01->getUsername());
}
if(!$simulate) $this->ldap->ldapModify($dn, $attrs);
@ -559,10 +707,13 @@ class SynchroCommand extends Command
$dn=$this->ldap->getNiveau02DN($data->getLabel());
$attrs["memberuid"]=array();
$attrs["cadolesMember"]=array();
if($ldap_type=="AD") $attrs["member"]=array();
foreach($data->getUsers() as $userniveau01) {
array_push($attrs["memberuid"],$userniveau01->getUsername());
array_push($attrs["cadolesMember"],$this->ldap->getUserDN($userniveau01));
if($ldap_type=="AD") array_push($attrs["member"],$this->ldap->getUserDN($userniveau01));
$this->writeln(' > '.$userniveau01->getUsername());
}
if(!$simulate) $this->ldap->ldapModify($dn, $attrs);
@ -591,11 +742,19 @@ class SynchroCommand extends Command
$dn=$this->ldap->getGroupDN($data->getLabel());
$attrs["memberuid"]=array();
$attrs["cadolesMember"]=array();
if($ldap_type=="AD") $attrs['member']=array();
foreach($data->getUsers() as $usergroupe) {
array_push($attrs["memberuid"],$usergroupe->getUser()->getUsername());
array_push($attrs["cadolesMember"],$this->ldap->getUserDN($usergroupe->getUser()));
$this->writeln(' > '.$usergroupe->getUser()->getUsername());
if(!in_array($usergroupe->getUser()->getUsername(), $attrs["memberuid"])) {
array_push($attrs["memberuid"],$usergroupe->getUser()->getUsername());
array_push($attrs["cadolesMember"],$this->ldap->getUserDN($usergroupe->getUser()));
if($ldap_type=="AD") array_push($attrs["member"],$this->ldap->getUserDN($usergroupe->getUser()));
$this->writeln(' > '.$usergroupe->getUser()->getUsername());
}
else {
$this->writelnred(' > EXIST'.$usergroupe->getUser()->getUsername());
}
}
if(!$simulate) $this->ldap->ldapModify($dn, $attrs);
}
@ -663,15 +822,15 @@ class SynchroCommand extends Command
$this->writeln('== USER =============================================');
$baseUser = $this->container->getParameter('ldap_baseuser');
$criteria = '(uid=*)';
$criteria = '('.$ldap_username.'=*)';
$subbranch=$baseUser;
$results = $this->ldap->search($criteria, array('uid'), $subbranch);
$results = $this->ldap->search($criteria, array($ldap_username), $subbranch);
foreach($results as $result) {
$data = $this->em->getRepository('CadolesCoreBundle:User')->findBy(array('username' => $result["uid"]));
if($data) $this->writeln(' - Existe dans bundle >> '.$result["uid"]);
$data = $this->em->getRepository('CadolesCoreBundle:User')->findBy(array('username' => $result[$ldap_username]));
if($data) $this->writeln(' - Existe dans bundle >> '.$result[$ldap_username]);
else {
$this->writeln(' - A supprimer dans annuaire >> '.$result["uid"]);
$dn='uid='.$result["uid"].','.$baseUser;
$this->writeln(' - A supprimer dans annuaire >> '.$result[$ldap_username]);
$dn=$ldap_username.'='.$result[$ldap_username].','.$baseUser;
if(!$simulate) $this->ldap->deleteByDN($dn);
}
}
@ -692,16 +851,22 @@ class SynchroCommand extends Command
protected function addmodGroup($label,$ldapfilter,$fgcanshare) {
$portal_activate = $this->container->getParameter('portal_activate');
$group=$this->em->getRepository('CadolesCoreBundle:Group')->findOneBy(array('fgtemplate' => false, 'label' => $label));
if($group) {
$this->writelnred(" - ".$label." existe déjà comme groupe interne à Ninegate");
return 0;
}
$group=$this->em->getRepository('CadolesCoreBundle:Group')->findOneBy(array('fgtemplate' => true, 'label' => $label));
if(!$group) {
$group=new Group();
$group->setFgcanshare($fgcanshare);
$group->setFgcancreatepage(false);
$group->setFgcancreateblog(false);
$group->setFgcancreatecalendar(false);
$group->setFgcancreateproject(false);
}
$group->setFgcanshare($fgcanshare);
$group->setLabel($label);
$group->setFgopen(false);
$group->setFgall(false);
@ -773,14 +938,16 @@ class SynchroCommand extends Command
$member= new UserGroup();
$member->setGroup($group);
$member->setUser($user);
$member->setRolegroup(0);
}
// Si modèle scribe
$ldap_template = $this->container->getParameter('ldap_template');
if($ldap_template=="scribe") {
$scribe_master = $this->container->getParameter('scribe_master');
if($ldap_template=="scribe"&&$scribe_master) {
$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);
if($results) $member->setFgmanager(true);
if($results) $member->setRolegroup(50);
}
$this->em->persist($member);

View File

@ -0,0 +1,123 @@
<?php
namespace Cadoles\CoreBundle\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Finder\Finder;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\HttpKernel\KernelInterface;
use Doctrine\DBAL\Connection as DBALConnection;
use Doctrine\ORM\EntityManager;
use Symfony\Component\Validator\Constraints\DateTime;
use Cadoles\CoreBundle\Entity\Registration;
class TestRestCommand extends Command
{
private $container;
private $em;
private $output;
private $filesystem;
private $rootlog;
private $byexec;
protected function configure()
{
$this
->setName('Core:TestRest')
->setDescription('Test REST API Ninegate')
->setHelp('Test REST API Ninegate')
->addArgument('login', InputArgument::OPTIONAL, 'uid du user à tester')
;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->container = $this->getApplication()->getKernel()->getContainer();
$this->em = $this->container->get('doctrine')->getEntityManager();
$this->output = $output;
// Récupérer le login à interroger
$login = $input->getArgument('login');
if($login=="") $login="admin";
// Récuper la clé d'API
$masterapikey = $this->container->getParameter('apikeyninegate');
// Recherche des élèments de masterIdentify
$headers = ['Accept' => 'application/json'];
// Localisation du ninegate
$url = "https://".$this->container->getParameter("weburl")."/".$this->container->getParameter("alias");
// rest/user/{login}
// Récupération des informations utilisateurs issus du masteridentity
// key = parametre obligatoire
// key = clé d'accès du l'api
// only = paramétre optionnel
// only = liste des informations désirés = user, items, bookmarks, groups, alerts, calendars
$apiurl = $url."/rest/user/".$login;
$this->writeln($apiurl);
$response = \Unirest\Request::post($apiurl,$headers,["key"=>$masterapikey,"only"=>"user,items,bookmarks"]);
dump($response->body);
$this->writeln('');
return 1;
// rest/alert/hide
// Cache une alert à un utilisateur
// key = parametre obligatoire
// key = clé d'accès de l'api
// login = parametre obligatoire
// login = uid de l'utilisateur sur lequel on souhaite ajouter un bookmark
// idalert = parametre obligatoire
// idalert = id de l'alert à chacher
$apiurl = $url."/rest/alert/hide";
$this->writeln($apiurl);
$response = \Unirest\Request::post($apiurl,$headers,["key"=>$masterapikey,"login"=>"admin","idalert"=>2]);
$idbookmark=$response->body;
dump($response->body);
// rest/bookmark/add
// Ajout d'un item ninegate existant comme bookmark d'un utilisateur
// key = parametre obligatoire
// key = clé d'accès du l'api
// login = parametre obligatoire
// login = uid de l'utilisateur sur lequel on souhaite ajouter un bookmark
// iditem = parametre obligatoire
// iditem = id de l'item ninegate qui doit etre ajouté en tant que bookmark
$apiurl = $url."/rest/bookmark/add";
$this->writeln($apiurl);
$response = \Unirest\Request::post($apiurl,$headers,["key"=>$masterapikey,"login"=>"admin","iditem"=>3]);
$idbookmark=$response->body;
dump($response->body);
// rest/bookmark/del
// Ajout d'un item ninegate existant comme bookmark d'un utilisateur
// key = parametre obligatoire
// key = clé d'accès du l'api
// idbookmark = parametre obligatoire
// idbookmark = id du bookmark à supprimer
$apiurl = $url."/rest/bookmark/del";
$this->writeln($apiurl);
$response = \Unirest\Request::post($apiurl,$headers,["key"=>$masterapikey,"idbookmark"=>$idbookmark]);
$idbookmark=$response->body;
dump($response->body);
$this->writeln('');
return 1;
}
private function writelnred($string) {
$this->output->writeln('<fg=red>'.$string.'</>');
}
private function writeln($string) {
$this->output->writeln($string);
}
}

View File

@ -209,5 +209,34 @@ class AjaxController extends Controller
$response->headers->set('Content-Type', 'application/json');
return $response;
}
}
public function itemlistAction(Request $request)
{
// S'assurer que c'est un appel ajax
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('message' => 'Interdit'), 400);
}
$output=array();
$em = $this->getDoctrine()->getManager();
$page_limit=$request->query->get('page_limit');
$q=$request->query->get('q');
$qb = $em->createQueryBuilder();
$qb->select('table')->from("CadolesPortalBundle:Item",'table')
->where('table.title LIKE :value')
->setParameter("value", "%".$q."%")
->orderBy('table.title');
$datas=$qb->setFirstResult(0)->setMaxResults($page_limit)->getQuery()->getResult();
foreach($datas as $data) {
array_push($output,array("id"=>$data->getId(),"text"=>$data->getTitle()));
}
$response = new Response(json_encode($output));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
}

View File

@ -141,51 +141,6 @@ class ConfigController extends Controller
return $config;
}
public function permmodoAction()
{
$em = $this->getDoctrine()->getManager();
$sidebars=$this->get('session')->get('sidebar');
$perms=[];
foreach($sidebars as $sidebar) {
foreach($sidebar["childs"] as $child) {
$permmod=$em->getRepository("CadolesCoreBundle:PermModo")->findOneBy(["route"=>$child["path"]]);
if($permmod) {
array_push($perms,['id' => $permmod->getId(), 'label'=>$sidebar['label'].' >> '.$child['label'],'visible'=>$permmod->getVisible()]);
}
}
}
return $this->render('CadolesCoreBundle:Config:permmodo.html.twig', [
'useheader' => true,
'usemenu' => false,
'usesidebar' => true,
'permmodos' => $perms
]);
}
public function permmodoupdateAction(Request $request)
{
// S'assurer que c'est un appel ajax
if (!$request->isXmlHttpRequest()) return new JsonResponse(array('message' => 'Interdit'), 400);
$output=array();
$id = $request->request->get('id');
$em = $this->getDoctrine()->getManager();
$permmodo = $this->getDoctrine()->getRepository("CadolesCoreBundle:PermModo")->find($id);
if (!$permmodo) throw $this->createNotFoundException('Unable to find entity.');
$permmodo->setVisible(!$permmodo->getVisible());
$em->persist($permmodo);
$em->flush();
$response = new Response(json_encode($output));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
public function datauserdefaultAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
@ -203,66 +158,94 @@ class ConfigController extends Controller
$session=$this->get('session');
$config=$em->getRepository('CadolesCoreBundle:Config')->find("datauser");
$fields=$config->getValue();
$fields=json_decode($fields,true);
if(!is_array($fields)) $fields=[];
if($fields=="") {
// Valeur par défaut 0=caché / 1=falcultatif / 2=obligatoire
// Valeur par défaut 0=caché / 1=falcultatif / 2=obligatoire
if(!array_key_exists("firstname",$fields)) {
$fields["firstname"]["perm"]=1;
$fields["firstname"]["label"]="Prénom";
}
if(!array_key_exists("visible",$fields)) {
$fields["visible"]["perm"]=2;
$fields["visible"]["label"]="Visible";
}
if(!array_key_exists("authlevel",$fields)) {
$fields["authlevel"]["perm"]=2;
$fields["authlevel"]["label"]="Niveau d'authentification";
}
if(!array_key_exists("belongingpopulation",$fields)) {
$fields["belongingpopulation"]["perm"]=2;
$fields["belongingpopulation"]["label"]="Population d'appartenance";
}
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("niveau02",$fields)) {
$fields["niveau02"]["perm"]=1;
$fields["niveau02"]["label"]="Niveau 02";
$fields["niveau02"]["label"]=$session->get('labelniveau02');
}
if(!array_key_exists("usualname",$fields)) {
$fields["usualname"]["perm"]=1;
$fields["usualname"]["label"]="Nom d'Usage";
}
if(!array_key_exists("gender",$fields)) {
$fields["gender"]["perm"]=1;
$fields["gender"]["label"]="Sexe";
}
if(!array_key_exists("givensname",$fields)) {
$fields["givensname"]["perm"]=1;
$fields["givensname"]["label"]="Autre Prénom";
}
if(!array_key_exists("telephonenumber",$fields)) {
$fields["telephonenumber"]["perm"]=1;
$fields["telephonenumber"]["label"]="Téléphone";
}
if(!array_key_exists("postaladress",$fields)) {
$fields["postaladress"]["perm"]=1;
$fields["postaladress"]["label"]="Adresse";
}
if(!array_key_exists("birthdate",$fields)) {
$fields["birthdate"]["perm"]=1;
$fields["birthdate"]["label"]="Date de Naissance";
}
if(!array_key_exists("birthcountry",$fields)) {
$fields["birthcountry"]["perm"]=1;
$fields["birthcountry"]["label"]="Pays de Naissance";
}
if(!array_key_exists("birthplace",$fields)) {
$fields["birthplace"]["perm"]=1;
$fields["birthplace"]["label"]="Ville de Naissance";
}
else {
$fields=json_decode($fields, true);
}
}
if(!array_key_exists("visite",$fields)) {
$fields["visite"]["perm"]=1;
$fields["visite"]["label"]="Visite";
}
if($session->get('viewniveau02')&&!array_key_exists("niveau02",$fields))
$fields["niveau02"]["perm"]=1;
elseif(!$session->get('viewniveau02'))
if(!$session->get('viewniveau02'))
unset($fields["niveau02"]);
if(array_key_exists("niveau02",$fields))
$fields["niveau02"]["label"]=$session->get('labelniveau02');
$form = $this->createForm(DatauserType::class,$config,array("mode"=>"datauser","fields" => $fields));
@ -311,59 +294,63 @@ class ConfigController extends Controller
$config=$em->getRepository('CadolesCoreBundle:Config')->find("datausers");
$fields=$config->getValue();
if($fields=="") {
// Valeur par défaut 0=caché / 3=visible
$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"]="Niveau 01";
$fields["niveau01"]["label"]=$session->get('labelniveau01');
}
if(!array_key_exists("niveau02",$fields)) {
$fields["niveau02"]["perm"]=1;
$fields["niveau02"]["label"]="Niveau 02";
$fields["group"]["perm"]=1;
$fields["group"]["label"]="Groupes";
$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";
}
else {
$fields=json_decode($fields, true);
}
if(!array_key_exists("visitedate",$fields)) $fields["visitedate"]["perm"]=1;
$fields["visitedate"]["label"]="Visite (caché uniquement pour les rôles Animateur et Utilisateur) ";
$fields["niveau01"]["label"]=$session->get('labelniveau01');
if($session->get('viewniveau02')&&!array_key_exists("niveau02",$fields))
$fields["niveau02"]["perm"]=1;
elseif(!$session->get('viewniveau02'))
if(!$session->get('viewniveau02'))
unset($fields["niveau02"]);
if(array_key_exists("niveau02",$fields))
$fields["niveau02"]["label"]=$session->get('labelniveau02');
$form = $this->createForm(DatauserType::class,$config,array("mode"=>"datausers","fields" => $fields));
// Récupération des data du formulaire

View File

@ -26,7 +26,7 @@ class CoreController extends Controller
$itemcategorys=null;
if($item_activate) {
$em->getRepository("CadolesPortalBundle:Item")->getUserItems($user,$bookmarks,$items,$itemcategorys);
$em->getRepository("CadolesPortalBundle:Item")->getUserItems($user,$bookmarks,$items,$itemcategorys,null,$this->get('session')->get('ssoitems'));
return $this->render('CadolesPortalBundle:Page:noportal.html.twig',[
'useheader' => true,
'usemenu' => false,
@ -59,17 +59,18 @@ class CoreController extends Controller
// Chargement des chartes à signer
if($user) {
$notices=$em->getRepository("CadolesPortalBundle:Notice")->getNoticeToRead($user);
if(! $notices->isEmpty()) {
$notices=$em->getRepository("CadolesPortalBundle:Notice")->getNoticeUser($user,false);
return $this->render('CadolesPortalBundle:Notice:mustread.html.twig',[
'useheader' => true,
'usemenu' => false,
'usesidebar' => false,
'maxwidth' => true,
'mustread' => true,
'notices' => $notices
'notices' => $notices,
'id' => $id,
]);
}
@ -85,8 +86,8 @@ class CoreController extends Controller
switch($key) {
case "firstname": if($user->getFirstname()=="") $toprofil=true; break;
case "visible": if($user->getVisible()=="") $toprofil=true; break;
case "authlevel": if($user->getAuthlevel()=="") $toprofil=true; break;
case "belongingpopulation": if($user->getBelongingpopulation()=="") $toprofil=true; break;
//case "authlevel": if($user->getAuthlevel()=="") $toprofil=true; break;
//case "belongingpopulation": if($user->getBelongingpopulation()=="") $toprofil=true; break;
case "job": if($user->getJob()=="") $toprofil=true; break;
case "position": if($user->getPosition()=="") $toprofil=true; break;
case "niveau02": if($user->geNiveau02()=="") $toprofil=true; break;
@ -103,8 +104,18 @@ class CoreController extends Controller
}
}
// Si niveau01 commence par autre = alors niveau01other obligatoire
$message="";
$niveau01=strtolower($user->getNiveau01()->getLabel());
if(stripos($niveau01,"autre")===0) {
if(!$user->getNiveau01other()) {
$toprofil=true;
$message="<br>Merci d'indiquer votre ".$this->getParameter("labelniveau01");
}
}
if($toprofil) {
return $this->redirect($this->generateUrl('cadoles_core_user',array("info"=>"Merci de compléter votre profil")));
return $this->redirect($this->generateUrl('cadoles_core_user',array("info"=>"Merci de compléter votre profil".$message)));
}
}

View File

@ -14,10 +14,206 @@ use Symfony\Component\Finder\Finder;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
class FileController extends Controller
{
public function uploadAction($id,$type,$access="config")
public function listAction($directory,Request $request,$access="config") {
$canupdate= $this->getPermission($access,$directory);
$subdirectory=$request->get("subdirectory");
$clear=$request->get("clear");
$view=$request->get("view");
$sort=$request->get("sort");
$order=$request->get("order");
$defaultview=$request->get("defaultview");
// Récupérer les préférences utilisateur
$toupdate=false;
$preference=$this->getUser()->getPreference();
if(is_null($preference)) $preference=[];
// Préférence subdirectory
if(!array_key_exists("widgetsubdirectory",$preference)) {
$toupdate=true;
$preference["widgetsubdirectory"]=[];
}
if((!array_key_exists($directory,$preference["widgetsubdirectory"]))) {
$toupdate=true;
$preference["widgetsubdirectory"][$directory]=null;
}
if($clear&&!is_null($preference["widgetsubdirectory"][$directory])) {
$toupdate=true;
$preference["widgetsubdirectory"][$directory]=null;
}
else {
if(!$subdirectory) $subdirectory = $preference["widgetsubdirectory"][$directory];
elseif($subdirectory!=$preference["widgetsubdirectory"][$directory]) {
$toupdate=true;
$preference["widgetsubdirectory"][$directory] = $subdirectory;
}
}
// Préférence mode de visualisation
if(!array_key_exists("widgetviewdirectory",$preference)) {
$toupdate=true;
$preference["widgetviewdirectory"]=[];
}
if((!array_key_exists($directory,$preference["widgetviewdirectory"]))) {
$toupdate=true;
$preference["widgetviewdirectory"][$directory]=$defaultview;
}
if($view&&$preference["widgetviewdirectory"][$directory]!=$view) {
$toupdate=true;
$preference["widgetviewdirectory"][$directory]=$view;
}
// Préférence trie
if(!array_key_exists("widgetsortdirectory",$preference)) {
$toupdate=true;
$preference["widgetsortdirectory"]=[];
}
if((!array_key_exists($directory,$preference["widgetsortdirectory"]))) {
$toupdate=true;
$preference["widgetsortdirectory"][$directory]="name";
}
if($sort&&$preference["widgetsortdirectory"][$directory]!=$sort) {
$toupdate=true;
$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
if($toupdate) {
$em = $this->getDoctrine()->getManager();
$this->getUser()->setPreference($preference);
$em->persist($this->getUser());
$em->flush();
}
// Construire le chemin réel
$iddirectory=explode("-",$directory)[1];
$fulldirectory=$this->get('kernel')->getRootDir()."/../uploads/file/".$directory."/".$subdirectory;
$parents=null;
$dirname="Home";
if($subdirectory) {
$parents=explode("/",$subdirectory);
$dirname=end($parents);
array_pop($parents);
}
// Générer le tableau de fichiers
$files=[];
$dirs=[];
$fs = new Filesystem();
if($fs->exists($fulldirectory)) {
$finder = new Finder();
$finder->depth('== 0')->sortByName()->in($fulldirectory)->exclude('thumb')->exclude('thumbmini')->exclude('__trash');
foreach ($finder as $file) {
if(is_dir($file)) {
$tmp=[];
$tmp["name"]=$file->getRelativePathname();
$tmp["namesort"]=strtolower($tmp["name"]);
$tmp["date"]=date ("d/m/Y H:i", filemtime($file));
$tmp["datesort"] = date ("YmdHi", filemtime($file));
array_push($dirs,$tmp);
}
else {
$tmp=[];
$tmp["name"]=$file->getRelativePathname();
$tmp["namesort"]=strtolower($tmp["name"]);
$tmp["extension"]=strtolower($file->getExtension());
$fileinfo = new file($file->getPathname());
$tmp["minetype"]=$fileinfo->getMimeType();
$tmp["minefamily"]=explode("/",$tmp["minetype"])[0];
$tmp["date"] = date ("d/m/Y H:i", filemtime($file));
$tmp["datesort"] = date ("YmdHi", filemtime($file));
$tmp["thumb"]="";
if($tmp["extension"]=="pdf") {
$tmp["thumb"]="/".$this->getParameter('alias')."/bundles/cadolescore/images/files/".$tmp["extension"].".png";
}
elseif($fs->exists($fulldirectory."/thumbmini/".$tmp["name"])) {
$data = file_get_contents($fulldirectory."/thumbmini/".$tmp["name"]);
$tmp["thumb"]="data:image/" . $tmp["extension"] . ";base64," . base64_encode($data);
}
elseif($fs->exists($fulldirectory."/thumb/".$tmp["name"])) {
$data = file_get_contents($fulldirectory."/thumb/".$tmp["name"]);
$tmp["thumb"]="data:image/" . $tmp["extension"] . ";base64," . base64_encode($data);
}
elseif($fs->exists($this->get('kernel')->getRootDir()."/../web/bundles/cadolescore/images/files/".$tmp["extension"].".png")) {
$tmp["thumb"]="/".$this->getParameter('alias')."/bundles/cadolescore/images/files/".$tmp["extension"].".png";
}
array_push($files,$tmp);
}
}
}
// Flag poubelle
$fgtrash=false;
if(stripos($subdirectory,"_trash")==1) $fgtrash=true;
// 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);
else
array_multisort($sort, SORT_DESC, $dirs);
return $this->render('CadolesCoreBundle:File:list.html.twig',[
'useheader' => false,
'usemenu' => false,
'usesidebar' => false,
'access' => $access,
'iddirectory' => $iddirectory,
'directory' => $directory,
'parents' => $parents,
'subdirectory' => $subdirectory,
'dirname' => $dirname,
'dirs' => $dirs,
'files' => $files,
'canupdate' => $canupdate,
'canadd' => $canupdate,
'view' => $preference["widgetviewdirectory"][$directory],
'sort' => $preference["widgetsortdirectory"][$directory],
'order' => $preference["widgetorderdirectory"][$directory],
'fgtrash' => $fgtrash,
]);
}
public function uploadAction($id,$type,Request $request,$access="config")
{
$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"));
return $this->render('CadolesCoreBundle:File:upload.html.twig',[
'useheader' => false,
'usemenu' => false,
@ -25,9 +221,275 @@ class FileController extends Controller
'access' => $access,
'id' => $id,
'type' => $type,
'subdirectory' => $subdirectory,
'forcereload' => $forcereload,
]);
}
public function subdirectoryAction($id,$type,Request $request,$access="config")
{
$canupdate =$this->getPermission($access,$id);
if(!$canupdate) throw $this->createNotFoundException('Permission denied');
$subdirectory=$request->get("subdirectory");
$defaultData = [];
$form = $this->createFormBuilder()
->add('subdirectory', TextType::class,["label"=>"Répertoire"])
->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 de répertoire réservé, merci de choisir un autre nom de répertoire'));
$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');
}
else {
$filesystem = new Filesystem();
$fulldirectory=$this->get('kernel')->getRootDir()."/../uploads/file/".$id;
if($subdirectory) $fulldirectory.="/".$subdirectory."/".$data["subdirectory"];
else $fulldirectory.="/".$data["subdirectory"];
$filesystem->mkdir($fulldirectory);
$toclose=true;
}
}
return $this->render('CadolesCoreBundle:File:subdirectory.html.twig',[
'useheader' => false,
'usemenu' => false,
'usesidebar' => false,
'access' => $access,
'id' => $id,
'type' => $type,
'subdirectory' => $subdirectory,
'form' => $form->createView(),
'toclose' => $toclose,
]);
}
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")
{
// S'assurer que c'est un appel ajax
@ -37,9 +499,13 @@ class FileController extends Controller
$output=array();
$directory=$request->request->get('directory');
$subdirectory=$request->request->get('subdirectory');
$filename=$request->request->get('filename');
if($subdirectory) $directory.="/".$subdirectory;
$canupdate =$this->getPermission($access,$directory);
if(!$canupdate) throw $this->createNotFoundException('Permission denied');
$this->getPermission($access,$directory);
$fs = new Filesystem();
$url=$this->get('kernel')->getRootDir()."/../uploads/file/".$directory."/".$filename;
if($fs->exists($url)) {
@ -51,16 +517,101 @@ class FileController extends Controller
return $response;
}
public function moveAction(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('dirsource');
$namesource = $request->request->get('namesource');
$dirdestination = $request->request->get('dirdestination');
$namedestination = $request->request->get('namedestination');
$canupdate =$this->getPermission($access,$directory);
if(!$canupdate) throw $this->createNotFoundException('Permission denied');
$fs = new Filesystem();
// Déplacer le fichier
$urlsource=str_replace("//","/",$racine."/".$dirsource."/".$namesource);
$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(is_dir($urlsource)) {
$fs->mirror($urlsource,$urldestination);
$fs->remove($urlsource);
}
else
$fs->rename($urlsource,$urldestination, true);
}
// Déplacer le thumb
$fs->mkdir($racine."/".$dirdestination."/thumb");
$urlsource=$racine."/".$dirsource."/thumb/".$namesource;
$urldestination=$racine."/".$dirdestination."/thumb/".$namedestination;
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."/".$dirdestination."/thumbmini");
$urlsource=$racine."/".$dirsource."/thumbmini/".$namesource;
$urldestination=$racine."/".$dirdestination."/thumbmini/".$namedestination;
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 viewAction($directory,$filename,Request $request,$access="config")
{
$this->getPermission($access,$directory);
$subdirectory=$request->query->get('subdirectory');
$navigation = $request->query->get('navigation');
$tbprev=[];
$tbnext=[];
$url=$this->get('kernel')->getRootDir()."/../uploads/file/".$directory."/".$filename;
$url=$this->get('kernel')->getRootDir()."/../uploads/file/".$directory;
if($subdirectory) $url.="/".$subdirectory;
$url.="/".$filename;
$file = new file($url);
$minetype=$file->getMimeType();
@ -121,6 +672,7 @@ class FileController extends Controller
'usesidebar' => false,
'access' => $access,
'directory' => $directory,
'subdirectory' => $subdirectory,
'minefamily' => $minefamily,
'minetype' => $minetype,
'filename' => $filename,
@ -138,11 +690,14 @@ class FileController extends Controller
}
}
public function showAction($directory,$filename,$access="config")
public function showAction($directory,$filename,Request $request,$access="config")
{
$this->getPermission($access,$directory);
$subdirectory=$request->query->get('subdirectory');
$file=$this->get('kernel')->getRootDir()."/../uploads/file/".$directory."/".$filename;
$file=$this->get('kernel')->getRootDir()."/../uploads/file/".$directory;
if($subdirectory) $file.="/".$subdirectory;
$file.="/".$filename;
$response = new BinaryFileResponse($file);
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_INLINE);
@ -150,11 +705,14 @@ class FileController extends Controller
return $response;
}
public function downloadAction($directory,$filename,$access="config")
public function downloadAction($directory,$filename,Request $request,$access="config")
{
$this->getPermission($access,$directory);
$subdirectory=$request->query->get('subdirectory');
$file=$this->get('kernel')->getRootDir()."/../uploads/file/".$directory."/".$filename;
$file=$this->get('kernel')->getRootDir()."/../uploads/file/".$directory;
if($subdirectory) $file.="/".$subdirectory;
$file.="/".$filename;
$response = new BinaryFileResponse($file);
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT);
@ -177,8 +735,9 @@ class FileController extends Controller
// On s'assure que l'utilisateur à la permission de voir
$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');
return $canadd;
break;
case "projecttask":
@ -191,8 +750,23 @@ class FileController extends Controller
$user=$this->getUser();
$em->getRepository("CadolesPortalBundle:Project")->getPermission($user,$project,$cansee,$canupdate,$canadd);
if(!$cansee) throw $this->createNotFoundException('Permission denied');
return $canupdate;
break;
case "calendarevent":
// Récupération de l'event'
$calendarevent=$em->getRepository("CadolesPortalBundle:Calendarevent")->find($id);
if (!$calendarevent) throw $this->createNotFoundException('Unable to find entity.');
// On s'assure que l'utilisateur à la permission de voir
$calendar=$calendarevent->getCalendar();
$user=$this->getUser();
$em->getRepository("CadolesPortalBundle:Calendar")->getPermission($user,$calendar,$cansee,$canupdate,$canadd);
if(!$cansee) throw $this->createNotFoundException('Permission denied');
return $canadd;
break;
}
}
else $canupdate=true;
}
}

View File

@ -31,6 +31,7 @@ class GroupController extends Controller
private $labelentity = 'CadolesCoreBundle:Group';
private $labeldata = 'group';
private $labeldatas = 'groups';
private $idpage;
public function listAction($access)
{
@ -81,7 +82,9 @@ class GroupController extends Controller
$qb=$em->createQueryBuilder();
$qb->select('COUNT(table)')
->from($this->labelentity,'table')
->leftJoin('CadolesCoreBundle:User', 'u', 'WITH', 'table.owner = u.id')
->where('table.label LIKE :value')
->orWhere('u.username LIKE :value')
->setParameter("value", "%".$search["value"]."%");
if($access=="user") {
$qb->from("CadolesCoreBundle:UserGroup","ug")
@ -106,44 +109,46 @@ class GroupController extends Controller
// Parcours des Enregistrement
$qb = $em->createQueryBuilder();
$qb->select('table')->from($this->labelentity,'table');
$qb ->select('table')
->from($this->labelentity,'table')
->leftJoin('CadolesCoreBundle:User', 'u', 'WITH', 'table.owner = u.id');
if($access=="user") {
$qb->from("CadolesCoreBundle:UserGroup","ug")
->andWhere(("table.fgcanshare=:flag"))
->andWhere("table.id=ug.group")
->andWhere(":user=ug.user")
->leftJoin('CadolesCoreBundle:User', 'u', 'WITH', 'table.owner = u.id')
->setParameter("flag", true)
->setParameter("user", $this->getUser());
}
if($search["value"]!="") {
$qb ->andwhere('table.label LIKE :value')
->orWhere('u.username LIKE :value')
->setParameter("value", "%".$search["value"]."%");
}
switch($order[0]["column"]) {
case 1 :
case 2 :
$qb->orderBy('table.label',$order[0]["dir"]);
break;
case 2 :
case 3 :
$qb->orderBy('table.fgopen',$order[0]["dir"]);
break;
case 4 :
case 5 :
$qb->orderBy('table.fgcanshare',$order[0]["dir"]);
break;
case 5 :
case 6 :
$qb->orderBy('table.owner',$order[0]["dir"]);
break;
case 6 :
case 8 :
$qb->orderBy('table.fgcancreatepage',$order[0]["dir"]);
break;
case 7 :
case 9 :
$qb->orderBy('table.fgcancreatecalendar',$order[0]["dir"]);
break;
case 8 :
case 10 :
$qb->orderBy('table.fgcancreateblog',$order[0]["dir"]);
break;
case 9 :
case 11 :
$qb->orderBy('table.fgcancreateproject',$order[0]["dir"]);
break;
}
@ -168,26 +173,37 @@ class GroupController extends Controller
if($data->getId()>0&&!$data->getFgall()&&!$data->getFgTemplate()&&$this->isGranted('ROLE_ADMIN')) $action.="<a href='".$this->generateUrl('cadoles_core_config_group_delete', array('id'=>$data->getId()))."'><i class='fa fa-trash fa-fw fa-2x'></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())
$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 {
$fgproprio=($user==$data->getOwner());
$fgmanager=$this->getDoctrine()->getRepository("CadolesCoreBundle:UserGroup")->findOneBy(["user"=>$this->getUser(),"group"=>$data])->getFgmanager();
$fgcanupdate=($user==$data->getOwner());
$fgcanmanage=false;
$usergroup=$this->getDoctrine()->getRepository("CadolesCoreBundle:UserGroup")->findOneBy(["user"=>$this->getUser(),"group"=>$data]);
if($usergroup) $fgcanmanage=($usergroup->getRolegroup()>=90);
// 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_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
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>";
}
else {
$action.="<a href='".$this->generateUrl('cadoles_core_'.$access.'_group_out', array('id'=>$data->getId()))."' data-method='out'><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())
$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>";
}
@ -195,19 +211,34 @@ class GroupController extends Controller
if($this->GetParameter("masteridentity")=="LDAP") $filtre=$data->getLdapfilter();
if($this->GetParameter("masteridentity")=="SSO") $filtre=$data->getAttributes();
if ($data->getIcon())
$groupinfo = "<img src='/".$this->container->getParameter('alias')."/".$data->getIcon()->getLabel()."' class='avatar' style='background-color:transparent'/>";
else
$groupinfo = "<img src='/".$this->container->getParameter('alias')."/uploads/icon/icon_pin.png' class='avatar' style='background-color:transparent'/>";
$userinfo="";
if($data->getOwner()) {
$userinfo.="<img style='cursor:pointer' onClick='seeUser(".$data->getOwner()->getId().")' src='/".$this->container->getParameter('alias')."/uploads/avatar/".$data->getOwner()->getAvatar()."' class='avatar' style='margin:0px 5px 0px 0px;display:inline-block;'>";
$userinfo.=$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(
$action,
$groupinfo,
$data->getLabel(),
($data->getFgopen()?"oui":"non"),
$filtre,
($data->getFgcanshare()?"oui":"non"),
$userinfo,
($visitelast?$visitelast->format("d/m/Y H:i")."<br>":"")."nb = ".$visitecpt,
($data->getFgcancreatepage()?"oui":"non"),
($data->getFgcancreatecalendar()?"oui":"non"),
($data->getFgcancreateblog()?"oui":"non"),
@ -339,12 +370,10 @@ class GroupController extends Controller
if($group->getLdapfilter()==""&&$group->getAttributes()=="")
$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="<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
@ -454,16 +483,24 @@ class GroupController extends Controller
$qb->setParameter("groupid",$id);
switch($order[0]["column"]) {
case 2 :
$qb->orderBy('user.username',$order[0]["dir"]);
$qb->orderBy('user.username',$order[0]["dir"]);
break;
case 3 :
$qb->orderBy('user.email',$order[0]["dir"]);
$qb->orderBy('user.email',$order[0]["dir"]);
break;
}
$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) {
// Propriétaire
$usergroup=$em->getRepository("CadolesCoreBundle:UserGroup")->findOneBy(["user"=>$data->getId(),"group"=>$id]);
@ -478,17 +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'>";
// Flag manager
$fgmanager="";
$rolegroup="";
if($fgcanshare) {
$checked=($usergroup->getFgmanager()?"checked":"");
$fgmanager="<input type='checkbox' class='switch' onChange='switchManager(".$data->getId().");' $checked>";
if($fgproprio) $fgmanager="Propriétaire du groupe";
}
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'":"");
array_push($output["data"],array("DT_RowId"=>"user".$data->getId(),$action,$avatar,$data->getUsername(),$data->getEmail(),$fgmanager));
$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>';
}
}
// Visite
if($fgviewvisite) {
$visite="";
if($usergroup->getVisitedate()) {
$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"],$tmp);
}
// Retour
@ -521,11 +573,12 @@ class GroupController extends Controller
}
$key = Uuid::uuid4();
$usergroup=new Usergroup;
$usergroup=new UserGroup();
$user=$em->getRepository("CadolesCoreBundle:User")->find($userid);
$usergroup->setUser($user);
$usergroup->setGroup($group);
$usergroup->setKeyvalue($key);
$usergroup->setRolegroup(0);
$em->persist($usergroup);
$em->flush();
@ -535,9 +588,9 @@ class GroupController extends Controller
$websocket = $this->container->get('cadoles.websocket.pushmessage')->send($key->toString(),$userid,$groupid,$message);
// Notification mail auprès de la personne inscrite
if($group->getFgcanshare()) {
if($group->getFgcanshare()&&$this->get('session')->get('fgnotifgroup')) {
$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>";
$text="Vous venez d'être inscrit dans le groupe de travail : ".$group->getLabel()."<br>Suivez le lien suivant pour y accéder = $url";
@ -548,7 +601,7 @@ class GroupController extends Controller
"body_text"=>$text
);
$to = $user->getEmail();
$from = $this->getParameter('noreply');;
$from = $this->getParameter('noreply');
$fromName = $this->get('session')->get('appname');
$message = $this->container->get('cadoles.core.service.mail');
$message->sendEmail($template, $mail_params, $to, $from, $fromName);
@ -589,7 +642,7 @@ class GroupController extends Controller
$em->flush();
// 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();
$template="template";
$mail_params=array(
@ -597,10 +650,11 @@ class GroupController extends Controller
"body_html"=>nl2br($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();
foreach($managers as $manager) {
array_push($to,$manager->getUser()->getEmail());
foreach($usergroups as $usergroup) {
if($usergroup->getRolegroup()>=90)
array_push($to,$usergroup->getUser()->getEmail());
}
$from = $this->getParameter('noreply');;
@ -634,7 +688,7 @@ class GroupController extends Controller
$em->flush();
// 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();
$template="template";
$mail_params=array(
@ -642,10 +696,11 @@ class GroupController extends Controller
"body_html"=>nl2br($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();
foreach($managers as $manager) {
array_push($to,$manager->getUser()->getEmail());
foreach($usergroups as $usergroup) {
if($usergroup->getRolegroup()>=90)
array_push($to,$usergroup->getUser()->getEmail());
}
$from = $this->getParameter('noreply');;
@ -659,7 +714,7 @@ class GroupController extends Controller
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
if (!$request->isXmlHttpRequest()) {
@ -671,12 +726,13 @@ class GroupController extends Controller
$output=array();
$userid=$request->request->get('user');
$groupid=$request->request->get('group');
$role=$request->request->get('role');
$group=$em->getRepository("CadolesCoreBundle:Group")->find($groupid);
$this->canManager($group,$access);
$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->flush();
@ -691,10 +747,11 @@ class GroupController extends Controller
$em = $this->getDoctrine()->getManager();
// Permission
$permgroup=$this->get('session')->get('permgroup');
if($access=="user") {
$permgroup=$this->get('session')->get('permgroup');
if($permgroup=="NO_BODY") throw $this->createNotFoundException('Permission denied');
if($permgroup=="ROLE_ANIM" && $this->isGranted('ROLE_USER')) throw $this->createNotFoundException('Permission denied');
if($permgroup=="ROLE_MODO" && ($this->isGranted('ROLE_ANIM') || $this->isGranted('ROLE_USER'))) throw $this->createNotFoundException('Permission denied');
}
// Initialisation de l'enregistrement
@ -728,7 +785,7 @@ class GroupController extends Controller
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm(null,$form,$request,$data,"submit");
$this->getErrorForm(null,$form,$request,$data,"submit",$access);
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
@ -756,7 +813,7 @@ class GroupController extends Controller
$this->ctrlFgcanshare($data,$access);
// Retour à la liste
return $this->redirectToRoute("cadoles_core_".$access."_group_users",["id"=>$data->getId()]);
return $this->redirectToRoute("cadoles_core_".$access."_group_users",["id"=>$data->getId(),"idreturn"=>$this->idpage]);
}
// Affichage du formulaire
@ -782,6 +839,8 @@ class GroupController extends Controller
// Récupération de l'enregistrement courant
$em = $this->getDoctrine()->getManager();
$data=$this->getData($id);
$oldowner=$data->getOwner();
$this->canOwner($data,$access);
// Création du formulaire
@ -800,7 +859,7 @@ class GroupController extends Controller
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm($id,$form,$request,$data,"update");
$this->getErrorForm($id,$form,$request,$data,"update",$access);
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
@ -828,6 +887,23 @@ class GroupController extends Controller
// Sinon on les génère
$this->ctrlFgcanshare($data,$access);
// Si le propriétaire change de main on prévient le nouveau propriétaire
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
$text="On vient de vous tranférer la propriété du groupe ".$data->getLabel();
$template="template";
$mail_params=array(
"subject" => $this->get('session')->get('appname')." : Transfert de groupe",
"body_html"=>nl2br($text),
"body_text"=>$text
);
$to = $data->getOwner()->getEmail();
$from = $this->getParameter('noreply');
$fromName = $this->get('session')->get('appname');
$message = $this->container->get('cadoles.core.service.mail');
$message->sendEmail($template, $mail_params, $to, $from, $fromName);
}
// Retour à la liste
return $this->redirectToRoute("cadoles_core_".$access."_group");
}
@ -879,7 +955,7 @@ class GroupController extends Controller
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm($id,$form,$request,$data,"delete");
$this->getErrorForm($id,$form,$request,$data,"delete",$access);
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
@ -915,7 +991,7 @@ class GroupController extends Controller
// Sur l'ensemble des project liés
$projects=$data->getProjects();
foreach($projects as $project) {
$groups=$blog->getGroups();
$groups=$project->getGroups();
// si la page est lié qu'à un seul group on peut la supprimer
if($groups->count()==1)
$em->remove($project);
@ -955,6 +1031,14 @@ class GroupController extends Controller
// 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
return $this->render($this->labelentity.':users.html.twig', [
'useheader' => true,
@ -963,14 +1047,70 @@ class GroupController extends Controller
'access' => $access,
$this->labeldata => $data,
'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")
{
// Récupération de l'enregistrement courant
$data=$this->getData($id);
$this->canManager($data,$access);
$group=$this->getData($id);
$this->canManager($group,$access);
$em = $this->getDoctrine()->getManager();
$dir = $this->get('kernel')->getRootDir() . '/../uploads/export/';
@ -984,7 +1124,7 @@ class GroupController extends Controller
$e = '"'; // this is the default but i like to be explicit
// 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","Nb Visites"];
fputcsv($csvh, $data, $d, $e);
// Liste des utilisateurs en fonction du role de l'utilisateur en cours
@ -1035,9 +1175,18 @@ class GroupController extends Controller
"birthdate"=>($user->getBirthdate()?$user->getBirthdate()->format("d/m/Y"):""),
"birthcountry"=>($user->getBirthcountry()?$user->getBirthcountry()->getLabel():""),
"birthplace"=>($user->getBirthplace()?$user->getBirthplace()->getLabel():""),
"visitedate"=>"",
"visitecpt"=>"",
];
$usergroup=$em->getRepository("CadolesCoreBundle:UserGroup")->findOneBy(["user"=>$user,"group"=>$group]);
if($usergroup) {
if($usergroup->getVisitedate()) {
$data["visitedate"]=$usergroup->getVisitedate()->format("d/m/Y H:i");
$data["visitecpt"]=$usergroup->getVisitecpt();
}
}
fputcsv($csvh, $data, $d, $e);
}
fclose($csvh);
@ -1048,11 +1197,81 @@ class GroupController extends Controller
return $response;
}
public function statisticAction($id,$access) {
$group=$this->getData($id);
$em = $this->getDoctrine()->getManager();
if(!$group) throw $this->createNotFoundException('Permission denied');
if($access!="config") {
$usergroup=$em->getRepository("CadolesCoreBundle:UserGroup")->findOneBy(["user"=>$this->getUser(),"group"=>$group]);
if(!$usergroup) throw $this->createNotFoundException('Permission denied');
}
$groupcptvisite=$em->getRepository("CadolesCoreBundle:Statistic")->findOneBy(["keyvalue"=>"groupcptvisite","group"=>$group]);
$groupcptmessage=$em->getRepository("CadolesCoreBundle:Statistic")->findOneBy(["keyvalue"=>"groupcptmessage","group"=>$group]);
$groupcptblogarticle=$em->getRepository("CadolesCoreBundle:Statistic")->findOneBy(["keyvalue"=>"groupcptblogarticle","group"=>$group]);
$groupcptprojecttask=$em->getRepository("CadolesCoreBundle:Statistic")->findOneBy(["keyvalue"=>"groupcptprojecttask","group"=>$group]);
return $this->render('CadolesCoreBundle:Group:statistic.html.twig',[
'useheader' => true,
'usemenu' => false,
'usesidebar' => ($access=="config"),
'access' => $access,
'group' => $group,
'groupcptvisite' => $groupcptvisite,
'groupcptmessage' => $groupcptmessage,
'groupcptblogarticle' => $groupcptblogarticle,
'groupcptprojecttask' => $groupcptprojecttask,
]);
}
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) {
if($access!="config") {
$em = $this->getDoctrine()->getManager();
$ismanager=$em->getRepository("CadolesCoreBundle:Usergroup")->findOneBy(["group"=>$group,"user"=>$this->getUser(),"fgmanager"=>true]);
if(!$ismanager)
$user=$em->getRepository("CadolesCoreBundle:Usergroup")->findOneBy(["group"=>$group,"user"=>$this->getUser()]);
if(!$user||$user->getRolegroup()<90)
throw $this->createNotFoundException('Permission denied');
}
}
@ -1068,19 +1287,27 @@ class GroupController extends Controller
protected function ctrlOwner($group) {
$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()) {
$usergroup=$em->getRepository("CadolesCoreBundle:Usergroup")->findOneBy(["group"=>$group,"user"=>$group->getOwner()]);
if(!$usergroup) {
$key = Uuid::uuid4();
$usergroup=new Usergroup;
$usergroup=new UserGroup();
$usergroup->setUser($group->getOwner());
$usergroup->setGroup($group);
$usergroup->setKeyvalue($key);
}
$usergroup->setFgmanager(true);
$usergroup->setRolegroup(100);
$em->persist($usergroup);
$em->flush();
}
}
@ -1097,7 +1324,20 @@ class GroupController extends Controller
$em->persist($page);
$em->persist($group);
$em->flush();
$em->flush();
}
$pages=$group->getPages();
$this->idpage=$pages[0]->getId();
if($pages[0]->getName()!=$group->getLabel()) {
$pages[0]->setName($group->getLabel());
$em->persist($pages[0]);
$em->flush();
}
foreach($pages as $page) {
$page->setUser($group->getOwner());
$em->persist($page);
$em->flush();
}
// On regarde s'il a au moins un calendrier
@ -1115,6 +1355,19 @@ class GroupController extends Controller
$em->persist($calendar);
$em->flush();
}
else {
$calendars=$group->getCalendars();
if($calendars[0]->getName()!=$group->getLabel()) {
$calendars[0]->setName($group->getLabel());
$em->persist($calendars[0]);
$em->flush();
}
foreach($calendars as $calendar) {
$calendar->setUser($group->getOwner());
$em->persist($calendar);
$em->flush();
}
}
// On regarde s'il a au moins un blog
if($group->getBlogs()->isEmpty()) {
@ -1126,7 +1379,20 @@ class GroupController extends Controller
$em->persist($blog);
$em->flush();
}
}
else {
$blogs=$group->getBlogs();
if($blogs[0]->getName()!=$group->getLabel()) {
$blogs[0]->setName($group->getLabel());
$em->persist($blogs[0]);
$em->flush();
}
foreach($blogs as $blog) {
$blog->setUser($group->getOwner());
$em->persist($blog);
$em->flush();
}
}
// On regarde s'il a au moins un project
if($group->getProjects()->isEmpty()) {
@ -1138,7 +1404,20 @@ class GroupController extends Controller
$em->persist($project);
$em->flush();
}
}
else {
$projects=$group->getProjects();
if($projects[0]->getName()!=$group->getLabel()) {
$projects[0]->setName($group->getLabel());
$em->persist($projects[0]);
$em->flush();
}
foreach($projects as $project) {
$project->setUser($group->getOwner());
$em->persist($project);
$em->flush();
}
}
}
}
@ -1175,7 +1454,7 @@ class GroupController extends Controller
else return true;
}
protected function getErrorForm($id,$form,$request,$data,$mode) {
protected function getErrorForm($id,$form,$request,$data,$mode,$access) {
if ($form->get('submit')->isClicked()&&$mode=="delete") {
}
@ -1198,6 +1477,10 @@ class GroupController extends Controller
$form->addError(new FormError("Un groupe de travail doit avoir un modèle de page d'accueil"));
}
if ($form->get('submit')->isClicked() && $mode=="update" && $access=="user") {
if(!$data->getOwner()) $form->addError(new FormError('Le propriétaire du groupe est obligatoire'));
}
if ($form->get('submit')->isClicked() && !$form->isValid()) {
$this->get('session')->getFlashBag()->clear();
$validator = $this->get('validator');

View File

@ -23,6 +23,10 @@ class MailController extends Controller
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
$form = $this->createForm(MailType::class);
@ -34,7 +38,7 @@ class MailController extends Controller
// Sujet
$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.= "<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>";
@ -64,8 +68,15 @@ class MailController extends Controller
if($usergroup) array_push($usersin,$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();
$subject=$form->get("subject")->getData();
$template="template";
@ -78,6 +89,17 @@ class MailController extends Controller
$fromName = $this->getUser()->getFirstname()." ".$this->getUser()->getLastname();
$message = $this->container->get('cadoles.core.service.mail');
$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))) {

View File

@ -43,20 +43,35 @@ class Niveau01Controller extends Controller
$draw= $request->query->get('draw');
$order= $request->query->get('order');
// Modo ?
$ismodo=false;
if($this->getUser()->getRole()=="ROLE_MODO") {
$ismodo=true;
}
// Nombre total d'enregistrement
$total = $em->createQueryBuilder()->select('COUNT(table)')->from($this->labelentity,'table')->getQuery()->getSingleScalarResult();
if($ismodo)
$total = $em->createQueryBuilder()->select('COUNT(table)')->from("CadolesCoreBundle:UserModo",'table')->where("table.user = :user")->setParameter("user", $this->getUser())->getQuery()->getSingleScalarResult();
else
$total = $em->createQueryBuilder()->select('COUNT(table)')->from($this->labelentity,'table')->getQuery()->getSingleScalarResult();
// Nombre d'enregistrement filtré
if($search["value"]=="")
$totalf = $total;
else {
$totalf= $em->createQueryBuilder()
$qb = $em->createQueryBuilder()
->select('COUNT(table)')
->from($this->labelentity,'table')
->where('table.label LIKE :value')
->setParameter("value", "%".$search["value"]."%")
->getQuery()
->getSingleScalarResult();
->setParameter("value", "%".$search["value"]."%");
if($ismodo)
$qb ->from("CadolesCoreBundle:UserModo","usermodo")
->andwhere("usermodo.user = :user")
->andWhere("usermodo.niveau01=table")
->setParameter("user", $this->getUser());
$totalf = $qb->getQuery()->getSingleScalarResult();
}
// Construction du tableau de retour
@ -70,8 +85,15 @@ class Niveau01Controller extends Controller
// Parcours des Enregistrement
$qb = $em->createQueryBuilder();
$qb->select('table')->from($this->labelentity,'table');
if($ismodo) {
$qb->from("CadolesCoreBundle:UserModo","usermodo")
->where("usermodo.user = :user")
->andWhere("usermodo.niveau01=table")
->setParameter("user", $this->getUser());
}
if($search["value"]!="") {
$qb ->where('table.label LIKE :value')
$qb ->andwhere('table.label LIKE :value')
->setParameter("value", "%".$search["value"]."%");
}
switch($order[0]["column"]) {
@ -84,7 +106,7 @@ class Niveau01Controller extends Controller
foreach($datas as $data) {
$action ="<a href='".$this->generateUrl('cadoles_core_config_niveau01_update', array('id'=>$data->getId()))."'><i class='fa fa-file fa-fw'></i></a>";
if($data->getId()>0) $action.="<a href='".$this->generateUrl('cadoles_core_config_niveau01_delete', array('id'=>$data->getId()))."'><i class='fa fa-trash fa-fw'></i></a>";
if($data->getId()>0&&!$ismodo) $action.="<a href='".$this->generateUrl('cadoles_core_config_niveau01_delete', array('id'=>$data->getId()))."'><i class='fa fa-trash fa-fw'></i></a>";
array_push($output["data"],array($action,$data->getLabel()));
}
@ -97,6 +119,10 @@ class Niveau01Controller extends Controller
// Initialisation de l'enregistrement
$data = new Niveau01();
// Interdit pour les modos
if($this->getUser()->getRole()=="ROLE_MODO")
throw $this->createNotFoundException('Permission denied');
// Création du formulaire
$form = $this->createForm(Niveau01Type::class,$data,array(
"mode" => "submit",
@ -136,10 +162,16 @@ class Niveau01Controller extends Controller
public function updateAction($id,Request $request)
{
$em = $this->getDoctrine()->getManager();
// Récupération de l'enregistrement courant
$data=$this->getData($id);
// Vérifier que cet enregistrement est modifiable
// Modification modo que si niveau modéré
if($this->getUser()->getRole()=="ROLE_MODO") {
$usermodo=$em->getRepository("CadolesCoreBundle:UserModo")->findOneBy(["user"=>$this->getUser(),"niveau01"=>$data]);
if(!$usermodo) throw $this->createNotFoundException('Permission denied');
}
// Création du formulaire
$form = $this->createForm(Niveau01Type::class,$data,array(
@ -156,7 +188,6 @@ class Niveau01Controller extends Controller
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$data = $form->getData();
// Sauvegarde
@ -184,7 +215,9 @@ class Niveau01Controller extends Controller
// Récupération de l'enregistrement courant
$data=$this->getData($id);
// Vérifier que cet enregistrement est supprimable
// Interdit pour les modos
if($this->getUser()->getRole()=="ROLE_MODO")
throw $this->createNotFoundException('Permission denied');
// Création du formulaire
$form = $this->createForm(Niveau01Type::class,$data,array(
@ -228,6 +261,15 @@ class Niveau01Controller extends Controller
]);
}
public function headerAction()
{
return $this->render('CadolesCoreBundle:Niveau01:header.html.twig',[
'useheader' => false,
'usemenu' => false,
'usesidebar' => false,
]);
}
protected function getDatas()
{
$em = $this->getDoctrine()->getManager();

View File

@ -43,22 +43,45 @@ class Niveau02Controller extends Controller
$draw= $request->query->get('draw');
$order= $request->query->get('order');
// Modo ?
$ismodo=false;
if($this->getUser()->getRole()=="ROLE_MODO") {
$ismodo=true;
}
// Nombre total d'enregistrement
$total = $em->createQueryBuilder()->select('COUNT(table)')->from($this->labelentity,'table')->getQuery()->getSingleScalarResult();
if($ismodo) {
$total = $em->createQueryBuilder()->select('COUNT(table)')
->from($this->labelentity,'table')
->from("CadolesCoreBundle:UserModo","usermodo")
->Where("table.niveau01=usermodo.niveau01")
->andWhere("usermodo.user=:user")
->setParameter("user",$this->getUser())
->getQuery()->getSingleScalarResult();
}
else
$total = $em->createQueryBuilder()->select('COUNT(table)')->from($this->labelentity,'table')->getQuery()->getSingleScalarResult();
// Nombre d'enregistrement filtré
if($search["value"]=="")
$totalf = $total;
else {
$totalf= $em->createQueryBuilder()
$qb = $em ->createQueryBuilder()
->select('COUNT(table)')
->from($this->labelentity,'table')
->from("CadolesCoreBundle:Niveau01",'nv1')
->where('table.niveau01=nv1.id')
->andwhere('table.label LIKE :value or nv1.label LIKE :value')
->setParameter("value", "%".$search["value"]."%")
->getQuery()
->getSingleScalarResult();
->setParameter("value", "%".$search["value"]."%");
if($ismodo) {
$qb ->from("CadolesCoreBundle:UserModo","usermodo")
->andwhere("table.niveau01=usermodo.niveau01")
->andWhere("usermodo.user=:user")
->setParameter("user",$this->getUser());
}
$totalf = $qb->getQuery()->getSingleScalarResult();
}
// Construction du tableau de retour
@ -79,6 +102,13 @@ class Niveau02Controller extends Controller
$qb ->andwhere('table.label LIKE :value or nv1.label LIKE :value')
->setParameter("value", "%".$search["value"]."%");
}
if($ismodo) {
$qb->from("CadolesCoreBundle:UserModo","usermodo")
->andWhere("table.niveau01=usermodo.niveau01")
->andWhere("usermodo.user=:user")
->setParameter("user",$this->getUser());
}
switch($order[0]["column"]) {
case 1 :
$qb->orderBy('nv1.label',$order[0]["dir"]);
@ -107,7 +137,7 @@ class Niveau02Controller extends Controller
$data = new Niveau02();
// Création du formulaire
$form = $this->createForm(Niveau02Type::class,$data,array("mode"=>"submit"));
$form = $this->createForm(Niveau02Type::class,$data,array("mode"=>"submit","user"=>$this->getUser()));
// Récupération des data du formulaire
$form->handleRequest($request);
@ -141,13 +171,19 @@ class Niveau02Controller extends Controller
public function updateAction($id,Request $request)
{
$em = $this->getDoctrine()->getManager();
// Récupération de l'enregistrement courant
$data=$this->getData($id);
// Vérifier que cet enregistrement est modifiable
// Suppression modo que si niveau modéré
if($this->getUser()->getRole()=="ROLE_MODO") {
$usermodo=$em->getRepository("CadolesCoreBundle:UserModo")->findOneBy(["user"=>$this->getUser(),"niveau01"=>$data->getNiveau01()]);
if(!$usermodo) throw $this->createNotFoundException('Permission denied');
}
// Création du formulaire
$form = $this->createForm(Niveau02Type::class,$data,array("mode"=>"update"));
$form = $this->createForm(Niveau02Type::class,$data,array("mode"=>"update","user"=>$this->getUser()));
// Récupération des data du formulaire
$form->handleRequest($request);
@ -157,7 +193,6 @@ class Niveau02Controller extends Controller
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$data = $form->getData();
// Sauvegarde
@ -182,13 +217,19 @@ class Niveau02Controller extends Controller
public function deleteAction($id,Request $request)
{
$em = $this->getDoctrine()->getManager();
// Récupération de l'enregistrement courant
$data=$this->getData($id);
// Vérifier que cet enregistrement est supprimable
// Suppression modo que si niveau modéré
if($this->getUser()->getRole()=="ROLE_MODO") {
$usermodo=$em->getRepository("CadolesCoreBundle:UserModo")->findOneBy(["user"=>$this->getUser(),"niveau01"=>$data->getNiveau01()]);
if(!$usermodo) throw $this->createNotFoundException('Permission denied');
}
// Création du formulaire
$form = $this->createForm(Niveau02Type::class,$data,array("mode"=>"delete"));
$form = $this->createForm(Niveau02Type::class,$data,array("mode"=>"delete","user"=>$this->getUser()));
// Récupération des data du formulaire
$form->handleRequest($request);
@ -198,7 +239,6 @@ class Niveau02Controller extends Controller
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->remove($data);
$em->flush();

View File

@ -0,0 +1,364 @@
<?php
namespace Cadoles\CoreBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Form\FormError;
use Cadoles\CoreBundle\Entity\PermModoProfil;
use Cadoles\CoreBundle\Entity\PermModo;
use Cadoles\CoreBundle\Form\PermmodoprofilType;
class PermmodoprofilController extends Controller
{
private $labelroute = 'cadoles_core_config_permmodoprofil';
private $labelentity = 'CadolesCoreBundle:PermModoProfil';
private $labeldata = 'permmodoprofil';
private $labeldatas = 'permmodoprofils';
public function listAction()
{
return $this->render('CadolesCoreBundle:Permmodoprofil:list.html.twig',[
'useheader' => true,
'usemenu' => false,
'usesidebar' => true,
]);
}
public function ajaxlistAction(Request $request)
{
// S'assurer que c'est un appel ajax
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('message' => 'Interdit'), 400);
}
$em = $this->getDoctrine()->getManager();
$start=$request->query->get('start');
$length= $request->query->get('length');
$search= $request->query->get('search');
$draw= $request->query->get('draw');
$order= $request->query->get('order');
// Nombre total d'enregistrement
$total = $em->createQueryBuilder()->select('COUNT(table)')->from($this->labelentity,'table')->getQuery()->getSingleScalarResult();
// Nombre d'enregistrement filtré
if($search["value"]=="")
$totalf = $total;
else {
$qb = $em->createQueryBuilder()
->select('COUNT(table)')
->from($this->labelentity,'table')
->where('table.name LIKE :value')
->setParameter("value", "%".$search["value"]."%");
$totalf = $qb->getQuery()->getSingleScalarResult();
}
// Construction du tableau de retour
$output = array(
'draw' => $draw,
'recordsFiltered' => $totalf,
'recordsTotal' => $total,
'data' => array(),
);
// Parcours des Enregistrement
$qb = $em->createQueryBuilder();
$qb->select('table')->from($this->labelentity,'table');
if($search["value"]!="") {
$qb ->andwhere('table.name LIKE :value')
->setParameter("value", "%".$search["value"]."%");
}
switch($order[0]["column"]) {
case 1 :
$qb->orderBy('table.name',$order[0]["dir"]);
break;
}
$datas=$qb->setFirstResult($start)->setMaxResults($length)->getQuery()->getResult();
foreach($datas as $data) {
$action ="<a href='".$this->generateUrl('cadoles_core_config_permmodoprofil_update', array('id'=>$data->getId()))."'><i class='fa fa-file fa-fw'></i></a>";
if($data->getId()>0) $action.="<a href='".$this->generateUrl('cadoles_core_config_permmodoprofil_delete', array('id'=>$data->getId()))."'><i class='fa fa-trash fa-fw'></i></a>";
$action.="<a href='".$this->generateUrl('cadoles_core_config_permmodoprofil_permmodo', array('id'=>$data->getId()))."'><i class='fas fa-check-square fa-fw'></i></a>";
array_push($output["data"],array($action,$data->getName()));
}
// Retour
return new Response(json_encode($output), 200);
}
public function submitAction(Request $request)
{
// Initialisation de l'enregistrement
$data = new PermModoProfil();
// Création du formulaire
$form = $this->createForm(PermmodoprofilType::class,$data,array(
"mode" => "submit",
));
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm(null,$form,$request,$data,"submit");
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData();
$em = $this->getDoctrine()->getManager();
// Sauvegarde
$em->persist($data);
$em->flush();
// Init permission
$this->initPermModo($data);
// Retour à la liste
return $this->redirectToRoute($this->labelroute);
}
// Affichage du formulaire
return $this->render('CadolesCoreBundle:Permmodoprofil:edit.html.twig', [
'useheader' => true,
'usemenu' => false,
'usesidebar' => true,
$this->labeldata => $data,
'mode' => 'submit',
'form' => $form->createView()
]);
}
public function updateAction($id,Request $request)
{
$em = $this->getDoctrine()->getManager();
// Récupération de l'enregistrement courant
$data=$this->getData($id);
// Création du formulaire
$form = $this->createForm(PermmodoprofilType::class,$data,array(
"mode" => "update"
));
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm($id,$form,$request,$data,"update");
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData();
// Sauvegarde
$em->persist($data);
$em->flush();
// Init permission
$this->initPermModo($data);
// Retour à la liste
return $this->redirectToRoute($this->labelroute);
}
// Affichage du formulaire
return $this->render('CadolesCoreBundle:Permmodoprofil:edit.html.twig', [
'useheader' => true,
'usemenu' => false,
'usesidebar' => true,
$this->labeldata => $data,
'mode' => 'update',
'form' => $form->createView()
]);
}
public function deleteAction($id,Request $request)
{
// Récupération de l'enregistrement courant
$data=$this->getData($id);
// Création du formulaire
$form = $this->createForm(PermmodoprofilType::class,$data,array(
"mode" =>"delete",
));
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm($id,$form,$request,$data,"delete");
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->remove($data);
$em->flush();
return $this->redirectToRoute($this->labelroute);
}
// Affichage du formulaire
return $this->render('CadolesCoreBundle:Permmodoprofil:edit.html.twig', [
'useheader' => true,
'usemenu' => false,
'usesidebar' => true,
$this->labeldata => $data,
'mode' => 'delete',
'form' => $form->createView()
]);
}
public function permmodoAction($id)
{
$em = $this->getDoctrine()->getManager();
$sidebars=$this->get('session')->get('sidebar');
$perms=[];
foreach($sidebars as $sidebar) {
foreach($sidebar["childs"] as $child) {
$permmod=$em->getRepository("CadolesCoreBundle:PermModo")->findOneBy(["route"=>$child["path"],"permmodoprofil"=>$id]);
if($permmod) {
array_push($perms,['id' => $permmod->getId(), 'label'=>$sidebar['label'].' >> '.$child['label'],'visible'=>$permmod->getVisible()]);
}
}
}
return $this->render('CadolesCoreBundle:Permmodoprofil:permmodo.html.twig', [
'useheader' => true,
'usemenu' => false,
'usesidebar' => true,
'profil' => $this->getData($id),
'permmodos' => $perms
]);
}
public function permmodoupdateAction(Request $request)
{
// S'assurer que c'est un appel ajax
if (!$request->isXmlHttpRequest()) return new JsonResponse(array('message' => 'Interdit'), 400);
$output=array();
$id = $request->request->get('id');
$em = $this->getDoctrine()->getManager();
$permmodo = $this->getDoctrine()->getRepository("CadolesCoreBundle:PermModo")->find($id);
if (!$permmodo) throw $this->createNotFoundException('Unable to find entity.');
$permmodo->setVisible(!$permmodo->getVisible());
$em->persist($permmodo);
$em->flush();
$response = new Response(json_encode($output));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
protected function getDatas()
{
$em = $this->getDoctrine()->getManager();
$datas = $em->getRepository($this->labelentity)->findAll();
return $datas;
}
protected function getData($id)
{
$em = $this->getDoctrine()->getManager();
$data = $em->getRepository($this->labelentity)->find($id);
if (!$data) {
throw $this->createNotFoundException('Unable to find '.$this->labeldata);
}
return $data;
}
protected function getErrorForm($id,$form,$request,$data,$mode) {
if ($form->get('submit')->isClicked()&&$mode=="delete") {
// On s'assure que le profil n'est pas rattaché à des utilisateurs
if($data->getUsers()->count() > 0) {
$form->addError(new FormError('Un utilisateur utilise ce profil de modération : suppression impossible'));
}
}
if ($form->get('submit')->isClicked() && ($mode=="submit" || $mode=="update")) {
}
if ($form->get('submit')->isClicked() && !$form->isValid()) {
$this->get('session')->getFlashBag()->clear();
$validator = $this->get('validator');
$errors = $validator->validate($data);
foreach( $errors as $error ) {
$request->getSession()->getFlashBag()->add("error", $error->getMessage());
}
$errors = $form->getErrors();
foreach( $errors as $error ) {
$request->getSession()->getFlashBag()->add("error", $error->getMessage());
}
}
}
private function initPermModo($profil) {
$this->addModeration($profil,'cadoles_core_config_commun',0);
$this->addModeration($profil,'cadoles_core_config_theme',0);
$this->addModeration($profil,'cadoles_core_config_datauser',0);
$this->addModeration($profil,'cadoles_core_config_datausers',0);
$this->addModeration($profil,'cadoles_core_config_whitelist',0);
$this->addModeration($profil,'cadoles_core_config_niveau01',1);
$this->addModeration($profil,'cadoles_core_config_niveau02',1);
$this->addModeration($profil,'cadoles_core_config_group',1);
$this->addModeration($profil,'cadoles_core_config_registration',1);
$this->addModeration($profil,'cadoles_core_config_user',1);
$this->addModeration($profil,'cadoles_portal_config_pagetemplate',1);
$this->addModeration($profil,'cadoles_portal_config_page',1);
$this->addModeration($profil,'cadoles_portal_config_item',1);
$this->addModeration($profil,'cadoles_portal_config_alert',1);
$this->addModeration($profil,'cadoles_portal_config_calendar',1);
$this->addModeration($profil,'cadoles_portal_config_blog',1);
$this->addModeration($profil,'cadoles_portal_config_project',1);
$this->addModeration($profil,'cadoles_portal_config_flux',1);
$this->addModeration($profil,'cadoles_portal_config_notice',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_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_core_config_statistic',1);
$this->addModeration($profil,'cadoles_core_config_mailing',1);
$this->addModeration($profil,'cadoles_core_config_importuser',0);
$this->addModeration($profil,'cadoles_cron_config',0);
$this->addModeration($profil,'cadoles_cron_config_log',0);
}
private function addModeration($profil,$route,$visible) {
$em = $this->getDoctrine()->getManager();
$entity=$em->getRepository('CadolesCoreBundle:PermModo')->findOneBy(["route"=>$route,"permmodoprofil"=>$profil]);
if(!$entity) {
$entity=new PermModo();
$entity->setRoute($route);
$entity->setVisible($visible);
$entity->setPermmodoprofil($profil);
$em->persist($entity);
$em->flush();
}
}
}

View File

@ -159,7 +159,7 @@ class RegistrationController extends Controller
$action,
$data->getUsername(),
$data->getEmail(),
$data->getNiveau01()->getLabel(),
$data->getNiveau01()->getLabel()."<br>".$data->getNiveau01other(),
$data->getStatut()->getLabel(),
(is_null($data->getKeyexpire())?"":$data->getKeyexpire()->format('d/m/Y H:i:s'))
));
@ -195,10 +195,24 @@ class RegistrationController extends Controller
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm(null,$form,$request,$data,"submit");
// si mode de registration byuser
if($moderegistration=="byuser") {
$idstatut=2;
}
else {
// On recherche le domaine du mail dans la liste blanche
$email=explode("@",$data->getEmail());
$domaine=end($email);
$whitelist = $em->getRepository("CadolesCoreBundle:Whitelist")->findBy(["label"=>$domaine]);
$idstatut=(!$whitelist?1:2);
}
$statut = $em->getRepository("CadolesCoreBundle:Statut")->find($idstatut);
$data->setStatut($statut);
// Sur validation(z)
// Sur erreur
$this->getErrorForm(null,$form,$request,$data,"submit",$idstatut);
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData();
@ -219,22 +233,7 @@ class RegistrationController extends Controller
$password = $encoder->encodePassword($data->getPassword(),$data->getSalt());
$data->setPassword($password);
*/
// si mode de registration byuser
if($moderegistration=="byuser") {
$idstatut=2;
}
else {
// On recherche le domaine du mail dans la liste blanche
$email=explode("@",$data->getEmail());
$domaine=end($email);
$whitelist = $em->getRepository("CadolesCoreBundle:Whitelist")->findBy(["label"=>$domaine]);
$idstatut=(!$whitelist?1:2);
}
$statut = $em->getRepository("CadolesCoreBundle:Statut")->find($idstatut);
$data->setStatut($statut);
// si non : validation par administrateur
if($idstatut==1) {
// Email à destination de l'inscript pour le prévenir qu'un administrateur doit valider
@ -287,10 +286,17 @@ class RegistrationController extends Controller
}
$url = $this->generateUrl('cadoles_core_config_registration', [], UrlGeneratorInterface::ABSOLUTE_URL);
$motivation = "Login = ".$data->getUsername()."\n";
$motivation.= "Nom = ".$data->getLastname()."\n";
$motivation.= "Prénom = ".$data->getFirstname()."\n";
$motivation.= "Mail = ".$data->getEmail()."\n";
$motivation.= $this->getParameter("labelniveau01")." = ".$data->getNiveau01()->getLabel()." ".$data->getNiveau01other()."\n\n";
$motivation.= $data->getMotivation();
$mail_params=array(
"subject" => $appname." : Inscription à valider",
"body_html"=>"Un utilisateur dont le mail nest pas en liste blanche souhaite sinscrire au ".$appname.".\nMerci dapprouver son inscription pour finaliser celle-ci.<br><br>Veuillez vérifier cette inscription à cette adresse:<br><a href='$url'>$url</a>",
"body_text"=>"Un utilisateur dont le mail nest pas en liste blanche souhaite sinscrire au ".$appname.".\nMerci dapprouver son inscription pour finaliser celle-ci.\n\nVeuillez vérifier cette inscription à cette adresse:\n$url"
"body_html"=>"Un utilisateur dont le mail nest pas en liste blanche souhaite sinscrire au ".$appname.".\nMerci dapprouver son inscription pour finaliser celle-ci.<br><br>Veuillez vérifier cette inscription à cette adresse:<br><a href='$url'>$url</a><br><br>".nl2br($motivation),
"body_text"=>"Un utilisateur dont le mail nest pas en liste blanche souhaite sinscrire au ".$appname.".\nMerci dapprouver son inscription pour finaliser celle-ci.\n\nVeuillez vérifier cette inscription à cette adresse:\n$url\n\n".$motivation
);
$message = $this->container->get('cadoles.core.service.mail');
@ -336,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
$this->get('session')->set('registrationinfo', $info);
$this->get('session')->set('registrationmode', "info");
$this->get('session')->set('registrationredirectto', null);
return $this->redirectToRoute('cadoles_core_registration_info');
}
else {
@ -354,12 +362,16 @@ class RegistrationController extends Controller
{
$info = $this->get('session')->get('registrationinfo');
$mode = $this->get('session')->get('registrationmode');
$redirectto = $this->get('session')->get('registrationredirectto');
return $this->render($this->labelentity.':info.html.twig', [
'useheader' => true,
'usemenu' => false,
'usesidebar' => false,
'info' => $info,
'mode' => $mode
'mode' => $mode,
'redirectto' => $redirectto,
]);
}
@ -386,7 +398,7 @@ class RegistrationController extends Controller
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm($id,$form,$request,$data,"send");
$this->getErrorForm($id,$form,$request,$data,"send",null);
// Sur validation
if ($form->get('save')->isClicked() && $form->isValid()) {
@ -461,6 +473,7 @@ class RegistrationController extends Controller
{
$moderegistration = $this->getParameter('moderegistration');
$masteridentity = $this->getParameter('masteridentity');
if($moderegistration=="none"||$masteridentity!="SQL")
throw $this->createNotFoundException('Permission denied');
@ -482,7 +495,8 @@ class RegistrationController extends Controller
$mode="danger";
$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 {
$url=$this->getUrlLogin();
@ -502,9 +516,12 @@ class RegistrationController extends Controller
$user->setSalt($data[0]->getSalt());
$user->setPasswordDirect($data[0]->getPassword());
$user->setVisible($data[0]->getVisible());
$user->setMotivation($data[0]->getMotivation());
$user->setNote($data[0]->getNote());
$user->setNiveau01($data[0]->getNiveau01());
$user->setSiren($data[0]->getNiveau01()->getSiren());
$user->setNiveau01other($data[0]->getNiveau01other());
$user->setNiveau02($data[0]->getNiveau02());
if($data[0]->getNiveau02()!==null) $user->setSiret($data[0]->getNiveau02()->getSiret());
@ -530,21 +547,29 @@ class RegistrationController extends Controller
// Si invitation à un groupe : on le rattache directement à ce groupe
$groupid=$data[0]->getGroupid();
$userid=$user->getId();
if($groupid) {
$group=$em->getRepository("CadolesCoreBundle:Group")->find($groupid);
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();
$usergroup=new Usergroup;
$usergroup=new UserGroup();
$user=$em->getRepository("CadolesCoreBundle:User")->find($userid);
$usergroup->setUser($user);
$usergroup->setGroup($group);
$usergroup->setKeyvalue($key);
$usergroup->setRolegroup(0);
$em->persist($usergroup);
$em->flush();
// Notification message
$message="Inscription de l'utilisateur<br>".$user->getLastname()." ".$user->getFirstname()."<br>Inscription via inviation";
$message="Inscription de l'utilisateur<br>".$user->getLastname()." ".$user->getFirstname()."<br>Inscription via invitation";
$websocket = $this->container->get('cadoles.websocket.pushmessage')->send($key->toString(),$userid,$groupid,$message);
}
}
@ -581,7 +606,7 @@ class RegistrationController extends Controller
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm($id,$form,$request,$data,"delete");
$this->getErrorForm($id,$form,$request,$data,"delete",null);
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
@ -606,7 +631,7 @@ class RegistrationController extends Controller
{
$moderegistration = $this->getParameter('moderegistration');
$masteridentity = $this->getParameter('masteridentity');
if($moderegistration=="none"||$masteridentity!="SQL")
if($masteridentity!="SQL")
throw $this->createNotFoundException('Permission denied');
// Création du formulaire
@ -678,6 +703,7 @@ class RegistrationController extends Controller
$mode="info";
$this->get('session')->set('registrationinfo', $info);
$this->get('session')->set('registrationmode', $mode);
$this->get('session')->set('registrationredirectto', null);
return $this->redirectToRoute('cadoles_core_registration_info');
}
@ -692,9 +718,8 @@ class RegistrationController extends Controller
public function resetpwd02Action($key,Request $request)
{
$moderegistration = $this->getParameter('moderegistration');
$masteridentity = $this->getParameter('masteridentity');
if($moderegistration=="none"||$masteridentity!="SQL")
if($masteridentity!="SQL")
throw $this->createNotFoundException('Permission denied');
$now=new \DateTime();
@ -715,6 +740,7 @@ class RegistrationController extends Controller
$mode="danger";
$this->get('session')->set('registrationinfo', $info);
$this->get('session')->set('registrationmode', $mode);
$this->get('session')->set('registrationredirectto', null);
return $this->redirectToRoute('cadoles_core_registration_info');
}
else {
@ -729,17 +755,17 @@ class RegistrationController extends Controller
$password=$data["password"];
$message="";
if(!empty($password)) {
if (strlen($password) < $this->getParameter("keyterm")) {
$message = "Votre mot de passe doit contenir au minimum 8 caractères, constitué de chiffres, de lettres et caractères spéciaux";
if (strlen($password) < $this->getParameter("minpassword")) {
$message = "Votre mot de passe doit contenir au minimum ".$this->getParameter("minpassword")." caractères, constitué de chiffres, de lettres et caractères spéciaux";
}
elseif(!preg_match("#[0-9]+#",$password)) {
$message = "Votre mot de passe doit contenir au minimum 8 caractères, constitué de chiffres, de lettres et caractères spéciaux";
$message = "Votre mot de passe doit contenir au minimum ".$this->getParameter("minpassword")." caractères, constitué de chiffres, de lettres et caractères spéciaux";
}
elseif(!preg_match("#[a-zA-Z]+#",$password)) {
$message = "Votre mot de passe doit contenir au minimum 8 caractères, constitué de chiffres, de lettres et caractères spéciaux";
$message = "Votre mot de passe doit contenir au minimum ".$this->getParameter("minpassword")." caractères, constitué de chiffres, de lettres et caractères spéciaux";
}
elseif(!preg_match("/[|!@#$%&*\/=?,;.:\-_+~^\\\]/",$password)) {
$message = "Votre mot de passe doit contenir au minimum 8 caractères, constitué de chiffres, de lettres et caractères spéciaux";
$message = "Votre mot de passe doit contenir au minimum ".$this->getParameter("minpassword")." caractères, constitué de chiffres, de lettres et caractères spéciaux";
}
}
@ -774,6 +800,7 @@ class RegistrationController extends Controller
$mode="success";
$this->get('session')->set('registrationinfo', $info);
$this->get('session')->set('registrationmode', $mode);
$this->get('session')->set('registrationredirectto', null);
return $this->redirectToRoute('cadoles_core_registration_info');
}
@ -838,7 +865,7 @@ class RegistrationController extends Controller
}
protected function getErrorForm($id,$form,$request,$data,$mode) {
protected function getErrorForm($id,$form,$request,$data,$mode,$idstatut) {
if ($form->get('submit')->isClicked()&&$mode=="delete") {
}
@ -859,6 +886,25 @@ class RegistrationController extends Controller
if($this->getUserBy("username",$data->getUsername())||$this->getUserBy("email",$data->getEmail())) {
$form->addError(new FormError('Un utilisateur utilise déjà ce login ou cet email'));
}
// Si niveau01 commence par autre = niveau01other obligatoire
$niveau01=strtolower($data->getNiveau01()->getLabel());
if(stripos($niveau01,"autre")===0) {
if(!$data->getNiveau01other()) {
$form->addError(new FormError("Merci de compléter le champ 'Autre ".$this->getParameter("labelniveau01")."'"));
}
}
// Si validation par administrateur demander une motivation
$moderegistration = $this->getParameter('moderegistration');
if(is_null($data->getMotivation())&&$moderegistration=="byadmin") {
// On recherche le domaine du mail dans la liste blanche
$email=explode("@",$data->getEmail());
$domaine=end($email);
$whitelist = $this->getDoctrine()->getManager()->getRepository("CadolesCoreBundle:Whitelist")->findBy(["label"=>$domaine]);
if(!$whitelist)
$form->addError(new FormError("Attention, le suffixe de votre adresse mail nest pas dans la liste des administrations autorisées, merci de bien vouloir privilégier votre adresse professionnelle si vous en avez une.<br>Si ce nest pas le cas, il faut que vous renseigniez la case motivation de votre demande"));
}
}
if ($form->get('submit')->isClicked() && !$form->isValid()) {

View File

@ -3,35 +3,47 @@
namespace Cadoles\CoreBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Form\FormError;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\BufferedOutput;
use Symfony\Component\Console\Output\OutputInterface;
use Ramsey\Uuid\Uuid;
use Ramsey\Uuid\Exception\UnsatisfiedDependencyException;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Cadoles\CoreBundle\Entity\User;
use Cadoles\CoreBundle\Entity\UserGroup;
use Cadoles\CoreBundle\Entity\UserModo;
use Cadoles\CoreBundle\Entity\Niveau01;
use Cadoles\CoreBundle\Entity\Niveau02;
use Cadoles\WebsocketBundle\Entity\Message;
use Cadoles\CoreBundle\Form\UserType;
use Cadoles\PortalBundle\Entity\Bookmark;
class RestController extends Controller
{
public function userAction($key, $login, Request $request)
// rest/login
// Permet de tester l'accès à ninegate
// key = parametre obligatoire
// key = clé d'accès de l'api
public function loginAction(Request $request)
{
$key=$request->get('key');
$output=[];
// Vérification de la clé
$realkey = $this->getParameter("apikeyninegate");
if($key!=$realkey) {
$output["error"]="error key";
return new Response(json_encode($output), 400);
}
return new Response(json_encode($output), 200);
}
// rest/user/{login}
// Récupération des informations utilisateurs issus du masteridentity
// key = parametre obligatoire
// key = clé d'accès de l'api
// only = paramétre optionnel
// only = liste des informations désirés = user, items, bookmarks, groups, alerts, calendars
// ssoitems = paramétre optionnel
// ssoitems = liste des items issu du ssoitems
public function userAction($login, Request $request)
{
$key=$request->get('key');
$only=($request->get('only')?explode(",",$request->get('only')):"");
$ssoitems=($request->get('ssoitems')?explode(",",$request->get('ssoitems')):[]);
// Vérification de la clé
$realkey = $this->getParameter("apikeyninegate");
if($key!=$realkey) {
@ -50,87 +62,386 @@ class RestController extends Controller
}
// Format de sortie
$output["user"] = [];
$output["bookmarks"] = [];
$output["items"] = [];
$output["itemcategorys"] = [];
$output["groups"] = [];
if($only==""||in_array("user",$only)) $output["user"] = [];
if($only==""||in_array("bookmarks",$only)) $output["bookmarks"] = [];
if($only==""||in_array("items",$only)) $output["items"] = [];
if($only==""||in_array("items",$only)) $output["itemcategorys"] = [];
if($only==""||in_array("groups",$only)) $output["groups"] = [];
if($only==""||in_array("alerts",$only)) $output["alerts"] = [];
if($only==""||in_array("alerts",$only)) $output["alertcategorys"] = [];
if($only==""||in_array("calendars",$only)) $output["calendars"] = [];
if($only==""||in_array("calendars",$only)) $output["calendarevents"] = [];
$bookmarks=null;
$items=null;
$itemcategorys=null;
$weburl="https://".$this->getParameter("weburl")."/".$this->getParameter("alias")."/";
$em->getRepository("CadolesPortalBundle:Item")->getUserItems($user,$bookmarks,$items,$itemcategorys,null,3);
$this->getDoctrine()->getRepository("CadolesPortalBundle:Page")->getPagesUser($user,null,$entity,$pagesuser,$pagesadmin,$groupsshared);
$em->getRepository("CadolesPortalBundle:Item")->getUserItems($user,$bookmarks,$items,$itemcategorys,null,$ssoitems,4);
//$this->getDoctrine()->getRepository("CadolesPortalBundle:Page")->getPagesUser($user,null,$entity,$pagesuser,$pagesadmin,$groupsshared);
// Construction de la réponse
$output["user"]["firstname"] = $user->getFirstname();
$output["user"]["lasttname"] = $user->getLastname();
$output["user"]["email"] = $user->getEmail();
$output["user"]["avatar"] = $weburl."uploads/avatar/".$user->getAvatar();
$output["user"]["niveau01"] = $user->getNiveau01()->getLabel();
$output["user"]["niveau02"] = ($user->getNiveau02()?$user->getNiveau02()->getLabel():null);
$output["user"]["role"] = $user->getRole();
if($only==""||in_array("user",$only)) {
$output["user"]["firstname"] = $user->getFirstname();
$output["user"]["lastname"] = $user->getLastname();
$output["user"]["email"] = $user->getEmail();
$output["user"]["avatar"] = $weburl."uploads/avatar/".$user->getAvatar();
$output["user"]["niveau01"] = $user->getNiveau01()->getLabel();
$output["user"]["niveau02"] = ($user->getNiveau02()?$user->getNiveau02()->getLabel():null);
$output["user"]["role"] = $user->getRole();
}
if($bookmarks) {
foreach($bookmarks as $bookmark) {
$tmp=[];
$tmp["id"] = $bookmark->getId();
$tmp["title"] = $bookmark->getTitle();
$tmp["url"] = $bookmark->getUrl();
$tmp["target"] = $bookmark->getTarget();
$tmp["order"] = 0;
$tmp["color"] = ($bookmark->getColor()?$bookmark->getColor():$this->get('session')->get('color')["main"]);
$tmp["icon"] = $weburl.($bookmark->getIcon()?$bookmark->getIcon()->getLabel():"uploads/icon/icon_pin.png");
if($only==""||in_array("bookmarks",$only)) {
if($bookmarks) {
foreach($bookmarks as $bookmark) {
$tmp=[];
$tmp["id"] = $bookmark->getId();
$tmp["title"] = $bookmark->getTitle();
$tmp["url"] = $bookmark->getUrl();
$tmp["target"] = $bookmark->getTarget();
$tmp["item"] = ($bookmark->getItem()?$bookmark->getItem()->getId():null);
$tmp["order"] = 0;
$tmp["color"] = "#".($bookmark->getColor()?$bookmark->getColor():$this->get('session')->get('color')["main"]);
$tmp["icon"] = $weburl.($bookmark->getIcon()?$bookmark->getIcon()->getLabel():"uploads/icon/icon_pin.png");
array_push($output["bookmarks"],$tmp);
array_push($output["bookmarks"],$tmp);
}
}
}
if($items) {
foreach($items as $item) {
$tmp=[];
$tmp["id"] = $item->getId();
$tmp["title"] = $item->getTitle();
$tmp["url"] = $item->getUrl();
$tmp["target"] = $item->getTarget();
$tmp["order"] = $item->getRoworder();
$tmp["color"] = ($item->getColor()?$item->getColor():$this->get('session')->get('color')["main"]);
$tmp["icon"] = $weburl.($item->getIcon()?$item->getIcon()->getLabel():"uploads/icon/icon_pin.png");
$tmp["essential"] = $item->getEssential();
$tmp["category"] = $item->getItemcategory()->getId();
if($only==""||in_array("items",$only)) {
if($items) {
foreach($items as $item) {
$tmp=[];
$tmp["id"] = $item->getId();
$tmp["title"] = $item->getTitle();
$tmp["url"] = $item->getUrl();
$tmp["target"] = $item->getTarget();
$tmp["order"] = $item->getRoworder();
$tmp["color"] = "#".($item->getColor()?$item->getColor():$this->get('session')->get('color')["main"]);
$tmp["icon"] = $weburl.($item->getIcon()?$item->getIcon()->getLabel():"uploads/icon/icon_pin.png");
$tmp["essential"] = $item->getEssential();
$tmp["category"] = $item->getItemcategory()->getId();
array_push($output["items"],$tmp);
array_push($output["items"],$tmp);
}
}
if($itemcategorys) {
foreach($itemcategorys as $itemcategory) {
$tmp=[];
$tmp["id"] = $itemcategory->getId();
$tmp["title"] = $itemcategory->getLabel();
$tmp["order"] = $itemcategory->getRoworder();
$tmp["color"] = "#".($itemcategory->getColor()?$itemcategory->getColor():$this->get('session')->get('color')["main"]);
array_push($output["itemcategorys"],$tmp);
}
}
}
if($itemcategorys) {
foreach($itemcategorys as $itemcategory) {
if($only==""||in_array("groups",$only)) {
foreach($user->getGroups() as $usergroup) {
$tmp=[];
$tmp["id"] = $itemcategory->getId();
$tmp["title"] = $itemcategory->getLabel();
$tmp["order"] = $itemcategory->getRoworder();
$tmp["color"] = ($itemcategory->getColor()?$itemcategory->getColor():$this->get('session')->get('color')["main"]);
$tmp["id"] = $usergroup->getGroup()->getId();
$tmp["title"] = $usergroup->getGroup()->getLabel();
array_push($output["itemcategorys"],$tmp);
}
}
if($groupsshared) {
foreach($groupsshared as $groupshared) {
$tmp=[];
$tmp["id"] = $groupshared->getId();
$tmp["title"] = $groupshared->getLabel();
array_push($output["groups"],$tmp);
}
}
if($only==""||in_array("alerts",$only)) {
$alerts=$em->getRepository("CadolesPortalBundle:Alert")->getUserAlerts($user,null,null,$ssoitems);
foreach($alerts as $alert) {
$tmp=[];
$tmp["id"] = $alert->getId();
$tmp["title"] = $alert->getTitle();
$tmp["order"] = $alert->getRoworder();
$tmp["category"] = $alert->getAlertcategory()->getId();
$tmp["description"] = $alert->getContent();
$tmp["fghideable"] = $alert->getFghideable();
array_push($output["alerts"],$tmp);
}
$alertcategorys=$em->getRepository("CadolesPortalBundle:Alertcategory")->findAll();
foreach($alertcategorys as $alertcategory) {
$tmp=[];
$tmp["id"] = $alertcategory->getId();
$tmp["title"] = $alertcategory->getLabel();
$tmp["color"] = "#".($alertcategory->getColor()?$alertcategory->getColor():$this->get('session')->get('color')["main"]);
$tmp["icon"] = $weburl.($alertcategory->getIcon()?$alertcategory->getIcon()->getLabel():"uploads/icon/icon_pin.png");
array_push($output["alertcategorys"],$tmp);
}
}
if($only==""||in_array("calendars",$only)) {
$events=$em->getRepository("CadolesPortalBundle:Calendarevent")->getUserCalendarevents($user,$this->get('session')->get('color')["main"],null,null,$firstcalendar);
foreach($events as $event) {
$tmp=[];
$tmp["id"] = $event["id"];
$tmp["title"] = $event["title"];
$tmp["description"] = $event["description"];
$tmp['start'] = $event["start"];
$tmp['end'] = $event["end"];
$tmp['allday'] = $event["allDay"];
$tmp['calendar'] = $event["calendar"];
array_push($output["calendarevents"],$tmp);
$tmp=[];
$tmp["id"] = $event["calendar"];
$tmp["title"] = $event["name"];
$tmp["color"] = $event["color"];
if(!in_array($tmp,$output["calendars"]))
array_push($output["calendars"],$tmp);
}
}
// Retour
return new Response(json_encode($output), 200);
}
// rest/users
// Liste l'ensemble des utilisateurs de ninegate et retourne ses attributs
// key = parametre obligatoire
// key = clé d'accès de l'api
public function usersAction(Request $request)
{
$key=$request->get('key');
// Vérification de la clé
$realkey = $this->getParameter("apikeyninegate");
if($key!=$realkey) {
$output["error"]="error key";
return new Response(json_encode($output), 400);
}
$weburl="https://".$this->getParameter("weburl")."/".$this->getParameter("alias")."/";
$em = $this->getDoctrine()->getManager();
$output = [];
$users=$em->getRepository('CadolesCoreBundle:User')->findAll();
foreach($users as $user) {
// Construction de la réponse
$output[$user->getId()]["id"] = $user->getId();
$output[$user->getId()]["username"] = $user->getUsername();
$output[$user->getId()]["firstname"] = $user->getFirstname();
$output[$user->getId()]["lastname"] = $user->getLastname();
$output[$user->getId()]["email"] = $user->getEmail();
$output[$user->getId()]["avatar"] = $weburl."uploads/avatar/".$user->getAvatar();
$output[$user->getId()]["role"] = $user->getRole();
}
// Retour
return new Response(json_encode($output), 200);
}
// rest/groups
// Liste l'ensemble des groupes de ninegate et retourne ses attributs ainsi que les membres des groupes en question
// key = parametre obligatoire
// key = clé d'accès de l'api
public function groupsAction(Request $request)
{
$key=$request->get('key');
// Vérification de la clé
$realkey = $this->getParameter("apikeyninegate");
if($key!=$realkey) {
$output["error"]="error key";
return new Response(json_encode($output), 400);
}
$em = $this->getDoctrine()->getManager();
$output = [];
$groups=$em->getRepository('CadolesCoreBundle:Group')->findAll();
foreach($groups as $group) {
// Construction de la réponse
$output[$group->getId()]["id"] = $group->getId();
$output[$group->getId()]["name"] = $group->getLabel();
$output[$group->getId()]["users"] = [];
$usergroups=$group->getUsers();
foreach($usergroups as $usergroup) {
$user=$usergroup->getUser();
$output[$group->getId()]["users"][$user->getId()]["id"]=$user->getId();
$output[$group->getId()]["users"][$user->getId()]["username"]=$user->getUsername();
}
}
// Retour
return new Response(json_encode($output), 200);
}
// rest/bookmark/add
// Ajout d'un item ninegate existant comme bookmark d'un utilisateur
// key = parametre obligatoire
// key = clé d'accès de l'api
// login = parametre obligatoire
// login = uid de l'utilisateur sur lequel on souhaite ajouter un bookmark
// iditem = parametre obligatoire
// iditem = id de l'item ninegate qui doit etre ajouté en tant que bookmark
public function bookmarkaddAction(Request $request) {
$em = $this->getDoctrine()->getManager();
$key=$request->get('key');
$login=$request->get('login');
$iditem=$request->get('iditem');
// Vérification de la clé
$realkey = $this->getParameter("apikeyninegate");
if($key!=$realkey) {
$output["error"]="error key";
return new Response(json_encode($output), 400);
}
// Tester présence des parametres
if(is_null($login)||is_null($iditem)) {
$output["error"]="missing parameter : login - iditem";
return new Response(json_encode($output), 400);
}
// Tester l'existance du login
$user=$em->getRepository('CadolesCoreBundle:User')->findOneBy(["username"=>$login]);
if(!$user) {
$output["error"]="user not exist";
return new Response(json_encode($output), 400);
}
// Tester l'existance de l'item
$item=$em->getRepository('CadolesPortalBundle:Item')->find($iditem);
if(!$item) {
$output["error"]="item not exist";
return new Response(json_encode($output), 400);
}
$bookmark = $em->getRepository('CadolesPortalBundle:Bookmark')->findOneBy(["user"=>$user,"item"=>$item]);
if(!$bookmark) {
$bookmark = new Bookmark();
$bookmark->setTitle($item->getTitle());
$bookmark->setSubtitle($item->getSubtitle());
$bookmark->setUrl($item->getUrl());
$bookmark->setIcon($item->getIcon());
$bookmark->setColor($item->getColor());
$bookmark->setTarget($item->getTarget());
$bookmark->setItem($item);
$bookmark->setUser($user);
$em->persist($bookmark);
$em->flush();
}
$output=$bookmark->getId();
return new Response(json_encode($output), 200);
}
// rest/bookmark/del
// Suppression d'un bookmark
// key = parametre obligatoire
// key = clé d'accès de l'api
// idbookmark = parametre obligatoire
// idbookmark = id du bookmark à supprimer
public function bookmarkdelAction(Request $request) {
$em = $this->getDoctrine()->getManager();
$key=$request->get('key');
$idbookmark=$request->get('idbookmark');
// Vérification de la clé
$realkey = $this->getParameter("apikeyninegate");
if($key!=$realkey) {
$output["error"]="error key";
return new Response(json_encode($output), 400);
}
// Tester présence des parametres
if(is_null($idbookmark)) {
$output["error"]="missing parameter : idbookmark";
return new Response(json_encode($output), 400);
}
// Tester l'existance du bookmark
$bookmark=$em->getRepository('CadolesPortalBundle:Bookmark')->find($idbookmark);
if(!$bookmark) {
$output["error"]="bookmark not exist";
return new Response(json_encode($output), 400);
}
$em->remove($bookmark);
$em->flush();
$output=[];
return new Response(json_encode($output), 200);
}
// rest/alert/hide
// Cache une alert à un utilisateur
// key = parametre obligatoire
// key = clé d'accès de l'api
// login = parametre obligatoire
// login = uid de l'utilisateur sur lequel on souhaite ajouter un bookmark
// idalert = parametre obligatoire
// idalert = id de l'alert à chacher
public function alerthideAction(Request $request) {
$em = $this->getDoctrine()->getManager();
$key=$request->get('key');
$login=$request->get('login');
$idalert=$request->get('idalert');
// Vérification de la clé
$realkey = $this->getParameter("apikeyninegate");
if($key!=$realkey) {
$output["error"]="error key";
return new Response(json_encode($output), 400);
}
// Tester présence des parametres
if(is_null($login)||is_null($idalert)) {
$output["error"]="missing parameter : login - idalert";
return new Response(json_encode($output), 400);
}
// Tester l'existance du login
$user=$em->getRepository('CadolesCoreBundle:User')->findOneBy(["username"=>$login]);
if(!$user) {
$output["error"]="user not exist";
return new Response(json_encode($output), 400);
}
// Tester l'existance de l'alert
$alert=$em->getRepository('CadolesPortalBundle:Alert')->find($idalert);
if(!$alert) {
$output["error"]="alert not exist";
return new Response(json_encode($output), 400);
}
// Tester que l'alert est masquable
if(!$alert->getFghideable()) {
$output["error"]="alert not hideable";
return new Response(json_encode($output), 400);
}
// Masquer l'alert
if(!$alert->getReaders()->contains($user)) {
$alert->addReader($user);
$em->persist($alert);
$em->flush();
}
$output=[];
return new Response(json_encode($output), 200);
}
}

View File

@ -170,7 +170,7 @@ class SecurityController extends Controller
case "CAS":
// Init Client CAS
\phpCAS::setDebug(false);
\phpCAS::client(CAS_VERSION_2_0, $this->container->getParameter('cas_host'), $this->container->getParameter('cas_port'), is_null($this->container->getParameter('cas_path')) ? '' : $this->container->getParameter('cas_path'), false);
@\phpCAS::client(CAS_VERSION_2_0, $this->container->getParameter('cas_host'), $this->container->getParameter('cas_port'), is_null($this->container->getParameter('cas_path')) ? '' : $this->container->getParameter('cas_path'), false);
\phpCAS::setNoCasServerValidation();
if(\phpCAS::checkAuthentication()) {

View File

@ -0,0 +1,75 @@
<?php
namespace Cadoles\CoreBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\HttpFoundation\Session\Session;
class SondeController extends Controller
{
public function sondeAction()
{
// Debug sonde
$fgdebug = true;
// Calcul du login
$user=$this->getUser();
if($user) $loginsonde=crypt($user->getUsername(),"dkywqZPYNHtWDnSxACjXVcIsFuaiQT");
else $loginsonde="";
// Calcul du profil
$profilsonde="visiteur";
if($user) {
$profilsonde="utilisateur";
$attributes=$this->get('session')->get('attributes');
if(isset($attributes["ENTPersonProfils"])) $profilsonde=$attributes["ENTPersonProfils"];
}
// Calcul de la provenance
$e = explode('.', $_SERVER["REMOTE_ADDR"]);
$s = sizeof($e);
if(($e[0]=="172"&&$e[1]=="30")||($e[0]=="172"&&$e[1]=="16")||($e[0]=="10"&&($e[1]=="77"||$e[1]=="93"||$e[1]=="94")))
$provenancesonde='interne';
else
$provenancesonde='externe';
// Calcul du service associé à la page
$request = $this->get('request_stack')->getMasterRequest();
$usage=$request->query->get('usage');
$route = $request->attributes->get('_route');
if($route=="cadoles_core_user_file_list"||$route=="cadoles_core_home")
$usagesonde="nosonde";
elseif($route=="cadoles_portal_user_page_view") {
if($usage=="group") $usagesonde="collaboratif";
elseif($usage=="user") $usagesonde="collaboratif";
elseif($usage=="accueil") $usagesonde="accueil";
else $usagesonde="portail";
}
elseif(stripos($route,"cadoles_portal_user_calendar")!==false)
$usagesonde="calendrier";
elseif(stripos($route,"cadoles_portal_user_project")!==false)
$usagesonde="calendrier";
elseif(stripos($route,"cadoles_portal_user_blog")!==false)
$usagesonde="collaboratif";
elseif(stripos($route,"cadoles_core_user_file")!==false)
$usagesonde="fichier";
else
$usagesonde="portail";
$urlsonde="";
if($usagesonde!="nosonde") {
$url=$this->getParameter("widsonde_url");
$app=$this->getParameter("alias");
$urlsonde = $url."?appli=$app&profil=$profilsonde&login=$loginsonde&provenance=$provenancesonde&usage=$usagesonde&route=$route&fgdebug=$fgdebug";
}
return $this->render('CadolesCoreBundle:Sonde:sonde.html.twig',['urlsonde' => $urlsonde]);
}
}

View File

@ -0,0 +1,109 @@
<?php
namespace Cadoles\CoreBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Response;
use Cadoles\PortalBundle\Entity\Page;
class StatisticController extends Controller
{
public function listAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$totcptvisite=$em->getRepository("CadolesCoreBundle:Statistic")->findOneBy(["keyvalue"=>"totcptvisite"]);
$totcptvisitegroup=$em->getRepository("CadolesCoreBundle:Statistic")->findOneBy(["keyvalue"=>"totcptvisitegroup"]);
$totcptmessage=$em->getRepository("CadolesCoreBundle:Statistic")->findOneBy(["keyvalue"=>"totcptmessage"]);
$totcptblogarticle=$em->getRepository("CadolesCoreBundle:Statistic")->findOneBy(["keyvalue"=>"totcptblogarticle"]);
$totcptprojecttask=$em->getRepository("CadolesCoreBundle:Statistic")->findOneBy(["keyvalue"=>"totcptprojecttask"]);
//groupcptvisite
$statistics=$em->getRepository("CadolesCoreBundle:Statistic")->findBy(["keyvalue"=>"groupcptvisite"]);
$groupcptvisite=[];
foreach($statistics as $statistic) {
$value=$statistic->getValue();
$tmp=[
"id" => $statistic->getGroup()->getId(),
"name" => $statistic->getGroup()->getLabel(),
"value" => end($value),
];
array_push($groupcptvisite,$tmp);
}
usort($groupcptvisite, function($a, $b) {
return $a['value'] <=> $b['value'];
});
$topgroupcptvisite = array_slice($groupcptvisite, -20);
//groupcptmessage
$statistics=$em->getRepository("CadolesCoreBundle:Statistic")->findBy(["keyvalue"=>"groupcptmessage"]);
$groupcptmessage=[];
foreach($statistics as $statistic) {
$value=$statistic->getValue();
$tmp=[
"id" => $statistic->getGroup()->getId(),
"name" => $statistic->getGroup()->getLabel(),
"value" => end($value),
];
array_push($groupcptmessage,$tmp);
}
usort($groupcptmessage, function($a, $b) {
return $a['value'] <=> $b['value'];
});
$topgroupcptmessage = array_slice($groupcptmessage, -20);
//groupcptblogarticle
$statistics=$em->getRepository("CadolesCoreBundle:Statistic")->findBy(["keyvalue"=>"groupcptblogarticle"]);
$groupcptblogarticle=[];
foreach($statistics as $statistic) {
$value=$statistic->getValue();
$tmp=[
"id" => $statistic->getGroup()->getId(),
"name" => $statistic->getGroup()->getLabel(),
"value" => end($value),
];
array_push($groupcptblogarticle,$tmp);
}
usort($groupcptblogarticle, function($a, $b) {
return $a['value'] <=> $b['value'];
});
$topgroupcptblogarticle = array_slice($groupcptblogarticle, -20);
//groupcptprojecttask
$statistics=$em->getRepository("CadolesCoreBundle:Statistic")->findBy(["keyvalue"=>"groupcptprojecttask"]);
$groupcptprojecttask=[];
foreach($statistics as $statistic) {
$value=$statistic->getValue();
$tmp=[
"id" => $statistic->getGroup()->getId(),
"name" => $statistic->getGroup()->getLabel(),
"value" => end($value),
];
array_push($groupcptprojecttask,$tmp);
}
usort($groupcptprojecttask, function($a, $b) {
return $a['value'] <=> $b['value'];
});
$topgroupcptprojecttask = array_slice($groupcptprojecttask, -20);
return $this->render('CadolesCoreBundle:Statistic:list.html.twig',[
'useheader' => true,
'usemenu' => false,
'usesidebar' => true,
'totcptvisite' => $totcptvisite,
'totcptvisitegroup' => $totcptvisitegroup,
'totcptmessage' => $totcptmessage,
'totcptblogarticle' => $totcptblogarticle,
'totcptprojecttask' => $totcptprojecttask,
'groupcptvisite' => $topgroupcptvisite,
'groupcptmessage' => $topgroupcptmessage,
'groupcptblogarticle' => $topgroupcptblogarticle,
'groupcptprojecttask' => $topgroupcptprojecttask,
]);
}
}

View File

@ -67,10 +67,7 @@ class ThemeController extends Controller
$logo=$request->query->get('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');
if(!empty($header)) $session->set('header',"bundles/cadolescore/themes/$themename/".$header);

View File

@ -28,6 +28,7 @@ use Cadoles\CoreBundle\Entity\Niveau02;
use Cadoles\WebsocketBundle\Entity\Message;
use Cadoles\CoreBundle\Form\UserType;
use Cadoles\CoreBundle\Form\MailingType;
class UserController extends Controller
@ -39,6 +40,14 @@ class UserController extends Controller
public function listAction($access)
{
// Permission
if($access=="user") {
$permannu=$this->get('session')->get('permannu');
if($permannu=="NO_BODY") throw $this->createNotFoundException('Permission denied');
if($permannu=="ROLE_ANIM" && $this->isGranted('ROLE_USER')) throw $this->createNotFoundException('Permission denied');
if($permannu=="ROLE_MODO" && ($this->isGranted('ROLE_ANIM') || $this->isGranted('ROLE_USER'))) throw $this->createNotFoundException('Permission denied');
}
$em = $this->getDoctrine()->getManager();
$config=$em->getRepository('CadolesCoreBundle:Config')->find("datausers");
$fields=$config->getValue();
@ -225,6 +234,10 @@ class UserController extends Controller
break;
case 12 :
$qb->orderBy('user.visitedate',$order[0]["dir"]);
break;
case 13 :
$qb->orderBy('user.role',$order[0]["dir"]);
break;
}
@ -264,6 +277,10 @@ class UserController extends Controller
break;
case 10 :
$qb->orderBy('user.visitedate',$order[0]["dir"]);
break;
case 11 :
$qb->orderBy('user.role',$order[0]["dir"]);
break;
}
@ -295,11 +312,12 @@ class UserController extends Controller
array_push($tmp,$data->getFirstname());
array_push($tmp,"<a href='mailto:".$data->getEmail()."'>".$data->getEmail()."</a>");
array_push($tmp,$data->getTelephonenumber());
array_push($tmp,$data->getNiveau01()->getLabel());
array_push($tmp,$data->getNiveau01()->getLabel()."<br>".$data->getNiveau01other());
if($viewniveau02) array_push($tmp,($data->getNiveau02()!==null?$data->getNiveau02()->getLabel():""));
array_push($tmp,$groups);
array_push($tmp,$data->getJob());
array_push($tmp,$data->getPosition());
array_push($tmp,($data->getVisitedate()?$data->getVisitedate()->format("d/m/Y H:i")."<br>nb = ".$data->getVisitecpt():""));
array_push($tmp,$data->getRole());
array_push($output["data"],$tmp);
@ -348,8 +366,8 @@ class UserController extends Controller
// Initialisation de l'enregistrement
$data = new User();
$data->setVisible(true);
$data->setBelongingpopulation("authlevel");
$data->setAuthlevel("simple");
$data->setBelongingpopulation("agent");
$fields=$this->getDefaultDatauser();
// Création du formulaire
@ -379,6 +397,9 @@ class UserController extends Controller
$lstgroups=array_filter(explode(",",$form->get("linkgroups")->getData()));
$lstmodos=array_filter(explode(",",$form->get("linkmodos")->getData()));
// Si non modérateur vider le profil de modération
if($data->getRole()!="ROLE_MODO") $data->setPermmodoprofil(null);
// Sauvegarde
$em->persist($data);
$em->flush();
@ -390,27 +411,34 @@ class UserController extends Controller
foreach($lstgroups as $idgroup) {
$group=$em->getRepository("CadolesCoreBundle:Group")->find($idgroup);
$key = Uuid::uuid4();
$usergroup= new UserGroup();
$usergroup->setUser($data);
$datagroup = $group;
$usergroup->setGroup($datagroup);
$usergroup->setKeyvalue($key);
$em->persist($usergroup);
$em->flush();
$usergroup=$em->getRepository('CadolesCoreBundle:UserGroup')->findBy(["user"=>$data,"group"=>$group]);
if(!$usergroup) {
$key = Uuid::uuid4();
$usergroup= new UserGroup();
$usergroup->setUser($data);
$datagroup = $group;
$usergroup->setGroup($datagroup);
$usergroup->setKeyvalue($key);
$usergroup->setRolegroup(0);
$em->persist($usergroup);
$em->flush();
}
// Notification message
$message="Inscription de l'utilisateur<br>".$data->getLastname()." ".$data->getFirstname()."<br>Par ".$this->getUser()->getLastname()." ".$this->getUser()->getFirstname();
$websocket = $this->container->get('cadoles.websocket.pushmessage')->send($key->toString(),$iduser,$idgroup,$message);
// Notification mail auprès de la personne inscrite
if($group->getFgcanshare()) {
$text="Vous venez d'être inscrit dans le groupe de travail : ".$group->getLabel();
if($group->getFgcanshare()&&$this->get('session')->get('fgnotifgroup')) {
$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";
$mail_params=array(
"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
);
$to = $data->getEmail();
@ -461,6 +489,7 @@ class UserController extends Controller
$oldpassword=$data->getPassword();
$fields=$this->getDefaultDatauser();
// 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") {
$niveau01=$data->getNiveau01();
@ -515,6 +544,9 @@ class UserController extends Controller
$data->setPassword($data->getPassword());
}
// Si non modérateur vider le profil de modération
if($data->getRole()!="ROLE_MODO") $data->setPermmodoprofil(null);
// Sauvegarde
$em->persist($data);
$em->flush();
@ -530,27 +562,35 @@ class UserController extends Controller
foreach($addgroups as $idgroup) {
$group=$em->getRepository("CadolesCoreBundle:Group")->find($idgroup);
$key = Uuid::uuid4();
$usergroup= new UserGroup();
$usergroup->setUser($data);
$datagroup = $group;
$usergroup->setGroup($datagroup);
$usergroup->setKeyvalue($key);
$em->persist($usergroup);
$em->flush();
$usergroup=$em->getRepository('CadolesCoreBundle:UserGroup')->findBy(["user"=>$data,"group"=>$group]);
if(!$usergroup) {
$key = Uuid::uuid4();
$usergroup= new UserGroup();
$usergroup->setUser($data);
$datagroup = $group;
$usergroup->setGroup($datagroup);
$usergroup->setKeyvalue($key);
$usergroup->setRolegroup(0);
$em->persist($usergroup);
$em->flush();
}
// notification message
$message="Inscription de l'utilisateur<br>".$data->getLastname()." ".$data->getFirstname()."<br>Par ".$this->getUser()->getLastname()." ".$this->getUser()->getFirstname();
$websocket = $this->container->get('cadoles.websocket.pushmessage')->send($key->toString(),$id,$idgroup,$message);
// Notification mail auprès de la personne inscrite
if($group->getFgcanshare()) {
$text="Vous venez d'être inscrit dans le groupe de travail : ".$group->getLabel();
if($group->getFgcanshare()&&$this->get('session')->get('fgnotifgroup')) {
$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";
$mail_params=array(
"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
);
$to = $data->getEmail();
@ -584,7 +624,7 @@ class UserController extends Controller
$em->flush();
// 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();
$template="template";
$mail_params=array(
@ -592,12 +632,14 @@ class UserController extends Controller
"body_html"=>nl2br($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();
foreach($managers as $manager) {
array_push($to,$manager->getUser()->getEmail());
foreach($usergroups as $usergroup) {
if($usergroup->getRolegroup()>=90)
array_push($to,$usergroup->getUser()->getEmail());
}
$from = $this->getParameter('noreply');;
$fromName = $this->get('session')->get('appname');
$message = $this->container->get('cadoles.core.service.mail');
@ -687,7 +729,17 @@ class UserController extends Controller
// Vérifier que cet enregistrement est supprimable
if($this->GetParameter("masteridentity")=="LDAP")
throw $this->createNotFoundException('Permission denied');
throw $this->createNotFoundException('Permission denied');
// Alerte si utilisateur propriétaire de groupe
if(!$data->getOwnergroups()->isEmpty()) {
$message ="ATTENTION CET UTILSATEUR EST PROPRIETAIRE DES GROUPES DE TRAVAIL SUIVANT<br>";
foreach($data->getOwnergroups() as $group) {
$message.=" - <a href='".$this->generateUrl('cadoles_core_config_group_update', array('id'=>$group->getId()))."' target='_blank'>".$group->getLabel()."</a><br>";
}
$message.="<br>En le supprimant les groupes en question n'auront plus de propriétaire";
$request->getSession()->getFlashBag()->add("notice", $message);
}
// Création du formulaire
$form = $this->createForm(UserType::class,$data,array(
@ -707,6 +759,37 @@ class UserController extends Controller
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
// Avant de supprimer l'utilisateur on passe à vide l'ensemble des groupes propriétaire à vide
foreach($data->getOwnergroups() as $group) {
$pages=$group->getPages();
foreach($pages as $page) {
$page->setUser(null);
$em->persist($page);
$em->flush();
}
$blogs=$group->getBlogs();
foreach($blogs as $blog) {
$blog->setUser(null);
$em->persist($blog);
$em->flush();
}
$calendars=$group->getCalendars();
foreach($calendars as $calendar) {
$calendar->setUser(null);
$em->persist($calendar);
$em->flush();
}
$projects=$group->getProjects();
foreach($projects as $project) {
$project->setUser(null);
$em->persist($project);
$em->flush();
}
}
$em->remove($data);
$em->flush();
@ -759,20 +842,91 @@ class UserController extends Controller
public function viewAction($id, Request $request)
{
$user=$this->getData($id);
$fields=$this->getDefaultDatausers();
return $this->render('CadolesCoreBundle:User:view.html.twig', [
'useheader' => false,
'usemenu' => false,
'usesidebar' => false,
"user" => $user
'user' => $user,
'fields' => $fields,
]);
}
public function mailingAction(Request $request) {
$form = $this->createForm(MailingType::class,$this->getUser(),array(
"perm"=>$this->isGranted('ROLE_ADMIN'),
"userid"=>$this->get('security.token_storage')->getToken()->getUser()->getId(),
));
// Récupération des data du formulaire
$form->handleRequest($request);
// Error si pas de message
if ($form->get('submit')->isClicked()) {
if(!$form->get('message')->getData()) {
$form->addError(new FormError("Merci de renseigner un message à votre mail"));
$errors = $form->getErrors();
foreach( $errors as $error ) {
$request->getSession()->getFlashBag()->add("error", $error->getMessage());
}
}
}
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$users=[];
if($this->isGranted('ROLE_ADMIN')) {
$groups=$form->get('groups')->getData();
foreach($groups as $group) {
foreach($group->getUsers() as $usergroup) {
if(!in_array($usergroup->getUser()->getEmail(),$users)) {
array_push($users,$usergroup->getUser()->getEmail());
}
}
}
}
$niveau01s=$form->get('niveau01')->getData();
foreach($niveau01s as $niveau01) {
foreach($niveau01->getUsers() as $user) {
if(!in_array($user->getEmail(),$users)) {
array_push($users,$user->getEmail());
}
}
}
$text=$form->get("message")->getData();
$subject=$form->get("subject")->getData();
$template="template";
$mail_params=array(
"subject" => $subject,
"body_html"=>nl2br($text),
"body_text"=>$text
);
$from = $this->getParameter('noreply');
$fromName = $this->getUser()->getFirstname()." ".$this->getUser()->getLastname();
$message = $this->container->get('cadoles.core.service.mail');
foreach($users as $to) {
$message->sendEmail($template, $mail_params, $to, $from, $fromName);
}
return $this->redirectToRoute("cadoles_core_config");
}
return $this->render('CadolesCoreBundle:Mail:mailing.html.twig', [
'useheader' => true,
'usemenu' => false,
'usesidebar' => true,
'form' => $form->createView()
]);
}
public function exportuserAction(Request $request) {
$em = $this->getDoctrine()->getManager();
$dir = $this->get('kernel')->getRootDir() . '/../uploads/export/';
$file = "export.csv";
$file = "exportuser.csv";
$fs = new Filesystem();
$fs->mkdir($dir);
@ -782,7 +936,7 @@ class UserController extends Controller
$e = '"'; // this is the default but i like to be explicit
// 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);
// Liste des utilisateurs en fonction du role de l'utilisateur en cours
@ -804,6 +958,17 @@ class UserController extends Controller
}
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 = [
"id"=>$user->getId(),
"username"=>$user->getUsername(),
@ -822,6 +987,9 @@ class UserController extends Controller
"birthdate"=>($user->getBirthdate()?$user->getBirthdate()->format("d/m/Y"):""),
"birthcountry"=>($user->getBirthcountry()?$user->getBirthcountry()->getLabel():""),
"birthplace"=>($user->getBirthplace()?$user->getBirthplace()->getLabel():""),
"visite"=>$visite,
"cptvisite"=>$cptvisite,
"groups"=>$groups,
];
@ -1082,6 +1250,66 @@ class UserController extends Controller
return new Response();
}
public function preferenceAction(Request $request) {
// S'assurer que c'est un appel ajax
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('message' => 'Interdit'), 400);
}
$key=$request->request->get('key');
$id=$request->request->get('id');
$value=$request->request->get('value');
// Récupérer les préférences de l'utilisateur
$preference=$this->getUser()->getPreference();
// Cas particulier de page bookmark, on vide la préférence si on reset la meme valeur
if($key=="pagebookmark") {
if(is_array($preference)&&array_key_exists("pagebookmark",$preference)) {
$oldid=$preference["pagebookmark"][0];
if($oldid==$value) {
unset($preference["pagebookmark"]);
$em = $this->getDoctrine()->getManager();
$this->getUser()->setPreference($preference);
$this->get('session')->set("pagebookmark", "");
$em->persist($this->getUser());
$em->flush();
return new Response();
}
}
}
// Mise à jour de la préférence
$toupdate=false;
if(!is_array($preference)) {
$toupdate=true;
$preference=[];
}
if(!array_key_exists($key,$preference)) {
$toupdate=true;
$preference[$key]=[];
}
if((!array_key_exists($id,$preference[$key]))) {
$toupdate=true;
$preference[$key][$id]=$value;
}
if($preference[$key][$id]!=$value) {
$toupdate=true;
$preference[$key][$id]=$value;
}
// Mise à jour des préferences
if($toupdate) {
$em = $this->getDoctrine()->getManager();
$this->getUser()->setPreference($preference);
$em->persist($this->getUser());
$em->flush();
}
return new Response();
}
protected function getDatas()
{
$em = $this->getDoctrine()->getManager();
@ -1147,55 +1375,157 @@ class UserController extends Controller
$config=$em->getRepository('CadolesCoreBundle:Config')->find("datauser");
$fields=$config->getValue();
$fields=json_decode($fields,true);
if(!is_array($fields)) $fields=[];
if($fields=="") {
// Valeur par défaut 0=caché / 1=falcultatif / 2=obligatoire
// Valeur par défaut 0=caché / 1=falcultatif / 2=obligatoire
if(!array_key_exists("firstname",$fields)) {
$fields["firstname"]["perm"]=1;
$fields["firstname"]["label"]="Prénom";
}
if(!array_key_exists("visible",$fields)) {
$fields["visible"]["perm"]=2;
$fields["visible"]["label"]="Visible";
}
if(!array_key_exists("authlevel",$fields)) {
$fields["authlevel"]["perm"]=2;
$fields["authlevel"]["label"]="Niveau d'authentification";
}
if(!array_key_exists("belongingpopulation",$fields)) {
$fields["belongingpopulation"]["perm"]=2;
$fields["belongingpopulation"]["label"]="Population d'appartenance";
}
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("niveau02",$fields)) {
$fields["niveau02"]["perm"]=1;
$fields["niveau02"]["label"]="Niveau 02";
}
if(!array_key_exists("usualname",$fields)) {
$fields["usualname"]["perm"]=1;
$fields["usualname"]["label"]="Nom d'Usage";
}
if(!array_key_exists("gender",$fields)) {
$fields["gender"]["perm"]=1;
$fields["gender"]["label"]="Sexe";
}
if(!array_key_exists("givensname",$fields)) {
$fields["givensname"]["perm"]=1;
$fields["givensname"]["label"]="Autre Prénom";
}
if(!array_key_exists("telephonenumber",$fields)) {
$fields["telephonenumber"]["perm"]=1;
$fields["telephonenumber"]["label"]="Téléphone";
}
if(!array_key_exists("postaladress",$fields)) {
$fields["postaladress"]["perm"]=1;
$fields["postaladress"]["label"]="Adresse";
}
if(!array_key_exists("birthdate",$fields)) {
$fields["birthdate"]["perm"]=1;
$fields["birthdate"]["label"]="Date de Naissance";
}
if(!array_key_exists("birthcountry",$fields)) {
$fields["birthcountry"]["perm"]=1;
$fields["birthcountry"]["label"]="Pays de Naissance";
}
if(!array_key_exists("birthplace",$fields)) {
$fields["birthplace"]["perm"]=1;
$fields["birthplace"]["label"]="Ville de Naissance";
}
if(!array_key_exists("visite",$fields)) {
$fields["visite"]["perm"]=1;
$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;
}
@ -1220,6 +1550,19 @@ class UserController extends Controller
if($this->getRegistrationBy("username",$data->getUsername())||$this->getRegistrationBy("email",$data->getEmail())) {
$form->addError(new FormError('Une inscription utilise déjà ce login ou cet email'));
}
// On s'assure que les modérateurs aient un profil de modération
if($data->getRole()=="ROLE_MODO"&&!$data->getPermmodoprofil()) {
$form->addError(new FormError('Vous devez préciser un profil de modération'));
}
// Si niveau01 commence par autre = niveau01other obligatoire
$niveau01=strtolower($data->getNiveau01()->getLabel());
if(stripos($niveau01,"autre")===0) {
if(!$data->getNiveau01other()) {
$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()
{
$em = $this->getDoctrine()->getManager();

View File

@ -43,6 +43,11 @@ class Group
*/
private $color;
/**
* @ORM\Column(type="string", length=250, nullable=true)
*/
private $email;
/**
* @ORM\Column(type="boolean", options={"default" : false})
*/
@ -98,6 +103,11 @@ class Group
*/
private $idonlyoffice;
/**
* @ORM\Column(name="invitations", type="array", nullable=true)
*/
private $invitations;
/**
* @ORM\ManyToOne(targetEntity="Cadoles\PortalBundle\Entity\Icon", inversedBy="groups")
* @ORM\JoinColumn(nullable=true, onDelete="SET NULL")
@ -176,6 +186,10 @@ class Group
*/
protected $messages;
/**
* @ORM\OneToMany(targetEntity="Statistic", mappedBy="group", cascade={"persist"}, orphanRemoval=true)
*/
private $statistics;
// Champs temporaire
protected $nosynconly;
@ -1018,4 +1032,86 @@ class Group
{
return $this->fgcancreateproject;
}
/**
* Add statistic
*
* @param \Cadoles\CoreBundle\Entity\Statistic $statistic
*
* @return Group
*/
public function addStatistic(\Cadoles\CoreBundle\Entity\Statistic $statistic)
{
$this->statistics[] = $statistic;
return $this;
}
/**
* Remove statistic
*
* @param \Cadoles\CoreBundle\Entity\Statistic $statistic
*/
public function removeStatistic(\Cadoles\CoreBundle\Entity\Statistic $statistic)
{
$this->statistics->removeElement($statistic);
}
/**
* Get statistics
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getStatistics()
{
return $this->statistics;
}
/**
* Set email.
*
* @param string|null $email
*
* @return Group
*/
public function setEmail($email = null)
{
$this->email = $email;
return $this;
}
/**
* Get email.
*
* @return string|null
*/
public function getEmail()
{
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

@ -44,6 +44,36 @@ class Niveau01
*/
private $logo;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $header;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $colormain;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $fontcolorhover;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $colorbody;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $fontfacetitle;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $fontfacebody;
/**
* @ORM\Column(type="text", nullable=true)
*/
@ -465,4 +495,148 @@ class Niveau01
{
return $this->alerts;
}
/**
* Set header
*
* @param string $header
*
* @return Niveau01
*/
public function setHeader($header)
{
$this->header = $header;
return $this;
}
/**
* Get header
*
* @return string
*/
public function getHeader()
{
return $this->header;
}
/**
* Set colormain
*
* @param string $colormain
*
* @return Niveau01
*/
public function setColormain($colormain)
{
$this->colormain = $colormain;
return $this;
}
/**
* Get colormain
*
* @return string
*/
public function getColormain()
{
return $this->colormain;
}
/**
* Set fontcolorhover
*
* @param string $fontcolorhover
*
* @return Niveau01
*/
public function setFontcolorhover($fontcolorhover)
{
$this->fontcolorhover = $fontcolorhover;
return $this;
}
/**
* Get fontcolorhover
*
* @return string
*/
public function getFontcolorhover()
{
return $this->fontcolorhover;
}
/**
* Set colorbody
*
* @param string $colorbody
*
* @return Niveau01
*/
public function setColorbody($colorbody)
{
$this->colorbody = $colorbody;
return $this;
}
/**
* Get colorbody
*
* @return string
*/
public function getColorbody()
{
return $this->colorbody;
}
/**
* Set fontfacetitle
*
* @param string $fontfacetitle
*
* @return Niveau01
*/
public function setFontfacetitle($fontfacetitle)
{
$this->fontfacetitle = $fontfacetitle;
return $this;
}
/**
* Get fontfacetitle
*
* @return string
*/
public function getFontfacetitle()
{
return $this->fontfacetitle;
}
/**
* Set fontfacebody
*
* @param string $fontfacebody
*
* @return Niveau01
*/
public function setFontfacebody($fontfacebody)
{
$this->fontfacebody = $fontfacebody;
return $this;
}
/**
* Get fontfacebody
*
* @return string
*/
public function getFontfacebody()
{
return $this->fontfacebody;
}
}

View File

@ -23,7 +23,7 @@ class PermModo
private $id;
/**
* @ORM\Column(type="string", length=50, unique=true)
* @ORM\Column(type="string", length=50)
*/
private $route;
@ -32,6 +32,11 @@ class PermModo
*/
private $visible;
/**
* @ORM\ManyToOne(targetEntity="PermModoProfil", inversedBy="permmodos")
* @ORM\JoinColumn(nullable=true)
*/
private $permmodoprofil;
/**
* Get id
@ -90,4 +95,29 @@ class PermModo
{
return $this->visible;
}
/**
* Set permmodoprofil
*
* @param \Cadoles\CoreBundle\Entity\PermModoProfil $permmodoprofil
*
* @return PermModo
*/
public function setPermmodoprofil(\Cadoles\CoreBundle\Entity\PermModoProfil $permmodoprofil = null)
{
$this->permmodoprofil = $permmodoprofil;
return $this;
}
/**
* Get permmodoprofil
*
* @return \Cadoles\CoreBundle\Entity\PermModoProfil
*/
public function getPermmodoprofil()
{
return $this->permmodoprofil;
}
}

View File

@ -0,0 +1,164 @@
<?php
namespace Cadoles\CoreBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity
* @ORM\Table(name="permmodoprofil")
*
*/
class PermModoProfil
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="string", length=50, unique=true)
*/
private $name;
/**
* @ORM\OneToMany(targetEntity="PermModo", mappedBy="permmodoprofil", cascade={"persist"}, orphanRemoval=true)
*/
private $permmodos;
/**
* @ORM\OneToMany(targetEntity="User", mappedBy="permmodoprofil")
*/
private $users;
/**
* Constructor
*/
public function __construct()
{
$this->permmodos = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Get id.
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set id.
*
* @param string $id
*
* @return PermModoProfil
*/
public function setId($id)
{
$this->id = $id;
return $this;
}
/**
* Set name.
*
* @param string $name
*
* @return PermModoProfil
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name.
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Add permmodo.
*
* @param \Cadoles\CoreBundle\Entity\PermModo $permmodo
*
* @return PermModoProfil
*/
public function addPermmodo(\Cadoles\CoreBundle\Entity\PermModo $permmodo)
{
$this->permmodos[] = $permmodo;
return $this;
}
/**
* Remove permmodo.
*
* @param \Cadoles\CoreBundle\Entity\PermModo $permmodo
*
* @return boolean TRUE if this collection contained the specified element, FALSE otherwise.
*/
public function removePermmodo(\Cadoles\CoreBundle\Entity\PermModo $permmodo)
{
return $this->permmodos->removeElement($permmodo);
}
/**
* Get permmodos.
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getPermmodos()
{
return $this->permmodos;
}
/**
* Add user
*
* @param \Cadoles\CoreBundle\Entity\User $user
*
* @return PermModoProfil
*/
public function addUser(\Cadoles\CoreBundle\Entity\User $user)
{
$this->users[] = $user;
return $this;
}
/**
* Remove user
*
* @param \Cadoles\CoreBundle\Entity\User $user
*/
public function removeUser(\Cadoles\CoreBundle\Entity\User $user)
{
$this->users->removeElement($user);
}
/**
* Get users
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getUsers()
{
return $this->users;
}
}

View File

@ -6,8 +6,8 @@ use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Cadoles\CoreBundle\Validator as CadolesCoreAssert;
use Symfony\Component\Validator\Constraints as Assert;
use Cadoles\CoreBundle\Validator\Password;
/**
* @ORM\Entity
@ -27,10 +27,10 @@ class Registration implements UserInterface, \Serializable
private $id;
/**
* @ORM\Column(type="string", length=25, unique=true)
* @ORM\Column(type="string", length=128, unique=true)
* @Assert\Length(
* min = "5",
* max = "25",
* max = "128",
* minMessage = "Votre nom doit faire au moins {{ limit }} caractères",
* maxMessage = "Votre nom ne peut pas être plus long que {{ limit }} caractères"
* )
@ -51,6 +51,11 @@ class Registration implements UserInterface, \Serializable
* @ORM\Column(type="string", length=250)
*/
private $password;
/**
* @CadolesCoreAssert\Password()
*/
private $passwordplain;
/**
* @ORM\Column(type="string", length=250)
@ -58,7 +63,12 @@ class Registration implements UserInterface, \Serializable
private $salt;
/**
* @ORM\Column(type="string", length=60, unique=true)
* @ORM\Column(type="string", length=250, nullable=true)
*/
private $passwordad;
/**
* @ORM\Column(type="string", length=128, unique=true)
*/
private $email;
@ -123,6 +133,21 @@ class Registration implements UserInterface, \Serializable
*/
private $position;
/**
* @ORM\Column(type="string", length=150, nullable=true)
*/
private $niveau01other;
/**
* @ORM\Column(name="motivation", type="text", nullable=true)
*/
private $motivation;
/**
* @ORM\Column(name="note", type="text", nullable=true)
*/
private $note;
/**
* @ORM\Column(type="integer", length=60, nullable=true)
*/
@ -169,14 +194,24 @@ class Registration implements UserInterface, \Serializable
public function setPassword($password)
{
if($password!=$this->password&&$password!=""){
$this->tempopassword=$password;
if($password!=$this->password&&$password!=""){
// Placer le password non encodé dans une variable tempo sur laquel on va appliquer la contraite
$this->passwordplain = $password;
// Password encrypté format openldap
mt_srand((double)microtime()*1000000);
$this->salt = pack("CCCC", mt_rand(), mt_rand(), mt_rand(), mt_rand());
$hash = "{SSHA}" . base64_encode(pack("H*", sha1($password . $this->salt)) . $this->salt);
$this->password = $hash;
// Password encrypté AD
$newPassword = "\"" . $password . "\"";
$len = strlen($newPassword);
$newPassw = "";
for($i=0;$i<$len;$i++) {
$newPassw .= "{$newPassword{$i}}\000";
}
$this->passwordad = $newPassw;
}
return $this;
@ -738,4 +773,100 @@ class Registration implements UserInterface, \Serializable
{
return $this->groupid;
}
/**
* Set niveau01other
*
* @param string $niveau01other
*
* @return Registration
*/
public function setNiveau01other($niveau01other)
{
$this->niveau01other = $niveau01other;
return $this;
}
/**
* Get niveau01other
*
* @return string
*/
public function getNiveau01other()
{
return $this->niveau01other;
}
/**
* Set motivation
*
* @param string $motivation
*
* @return Registration
*/
public function setMotivation($motivation)
{
$this->motivation = $motivation;
return $this;
}
/**
* Get motivation
*
* @return string
*/
public function getMotivation()
{
return $this->motivation;
}
/**
* Set passwordad.
*
* @param string|null $passwordad
*
* @return Registration
*/
public function setPasswordad($passwordad = null)
{
$this->passwordad = $passwordad;
return $this;
}
/**
* Get passwordad.
*
* @return string|null
*/
public function getPasswordad()
{
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

@ -0,0 +1,118 @@
<?php
namespace Cadoles\CoreBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="statistic")
*/
class Statistic
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $keyvalue;
/**
* @var string
*
* @ORM\Column(type="array", nullable=true)
*/
private $value;
/**
* @ORM\ManyToOne(targetEntity="Group", inversedBy="statistics")
* @ORM\JoinColumn(name="group_id", referencedColumnName="id", nullable=true)
*/
private $group;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set keyvalue
*
* @param string $keyvalue
*
* @return Statistic
*/
public function setKeyvalue($keyvalue)
{
$this->keyvalue = $keyvalue;
return $this;
}
/**
* Get keyvalue
*
* @return string
*/
public function getKeyvalue()
{
return $this->keyvalue;
}
/**
* Set value
*
* @param array $value
*
* @return Statistic
*/
public function setValue($value)
{
$this->value = $value;
return $this;
}
/**
* Get value
*
* @return array
*/
public function getValue()
{
return $this->value;
}
/**
* Set group
*
* @param \Cadoles\CoreBundle\Entity\Group $group
*
* @return Statistic
*/
public function setGroup(\Cadoles\CoreBundle\Entity\Group $group = null)
{
$this->group = $group;
return $this;
}
/**
* Get group
*
* @return \Cadoles\CoreBundle\Entity\Group
*/
public function getGroup()
{
return $this->group;
}
}

View File

@ -6,8 +6,10 @@ use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Cadoles\CoreBundle\Validator as CadolesCoreAssert;
use Symfony\Component\Validator\Constraints as Assert;
use Cadoles\CoreBundle\Validator\Password;
/**
@ -28,7 +30,13 @@ class User implements UserInterface, \Serializable
private $id;
/**
* @ORM\Column(type="string", length=50, unique=true)
* @ORM\Column(type="string", length=128, unique=true)
* @Assert\Length(
* min = "5",
* max = "128",
* minMessage = "Votre nom doit faire au moins {{ limit }} caractères",
* maxMessage = "Votre nom ne peut pas être plus long que {{ limit }} caractères"
* )
*/
private $username;
@ -46,6 +54,11 @@ class User implements UserInterface, \Serializable
* @ORM\Column(type="string", length=250)
*/
private $password;
/**
* @CadolesCoreAssert\Password()
*/
private $passwordplain;
/**
* @ORM\Column(type="string", length=250)
@ -53,12 +66,12 @@ class User implements UserInterface, \Serializable
private $salt;
/**
* @Password()
* @ORM\Column(type="string", length=250, nullable=true)
*/
private $tempopassword;
private $passwordad;
/**
* @ORM\Column(type="string", length=60, unique=true)
* @ORM\Column(type="string", length=128, unique=true)
*/
private $email;
@ -163,6 +176,42 @@ class User implements UserInterface, \Serializable
*/
private $viewcalendar;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $visitedate;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $visitecpt;
/**
* @ORM\Column(type="string", length=150, nullable=true)
*/
private $niveau01other;
/**
* @ORM\Column(name="motivation", type="text", nullable=true)
*/
private $motivation;
/**
* @ORM\Column(name="note", type="text", nullable=true)
*/
private $note;
/**
* @ORM\Column(name="preference", type="array", nullable=true)
*/
private $preference;
/**
* @ORM\ManyToOne(targetEntity="PermModoProfil", inversedBy="users")
* @ORM\JoinColumn(nullable=true)
*/
private $permmodoprofil;
/**
* @ORM\ManyToOne(targetEntity="Country", inversedBy="users")
* @ORM\JoinColumn(nullable=true)
@ -332,6 +381,12 @@ class User implements UserInterface, \Serializable
*/
protected $messagesees;
/**
* @ORM\ManyToMany(targetEntity="Cadoles\PortalBundle\Entity\Alert", mappedBy="readers")
*/
protected $alertreaders;
//== CODE A NE PAS REGENERER
/**
* @ORM\PostLoad
@ -355,12 +410,23 @@ class User implements UserInterface, \Serializable
public function setPassword($password)
{
if($password!=$this->password&&$password!=""){
$this->tempopassword=$password;
$this->salt = uniqid(mt_rand(), true);
$hash = "{SSHA}" . base64_encode(pack("H*", sha1($password . $this->salt)) . $this->salt);
// Placer le password non encodé dans une variable tempo sur laquel on va appliquer la contraite
$this->passwordplain = $password;
// Password encrypté format openldap
mt_srand((double)microtime()*1000000);
$this->salt = pack("CCCC", mt_rand(), mt_rand(), mt_rand(), mt_rand());
$hash = "{SSHA}" . base64_encode(pack("H*", sha1($password . $this->salt)) . $this->salt);
$this->password = $hash;
// Password encrypté AD
$newPassword = "\"" . $password . "\"";
$len = strlen($newPassword);
$newPassw = "";
for($i=0;$i<$len;$i++) {
$newPassw .= "{$newPassword{$i}}\000";
}
$this->passwordad = $newPassw;
}
return $this;
@ -368,8 +434,8 @@ class User implements UserInterface, \Serializable
public function setPasswordDirect($password)
{
// Permet de setter le password généré lors de l'inscription
$this->password = $password;
return $this;
}
@ -1796,4 +1862,230 @@ class User implements UserInterface, \Serializable
{
return $this->projectcomments;
}
/**
* Set visitedate
*
* @param \DateTime $visitedate
*
* @return User
*/
public function setVisitedate($visitedate)
{
$this->visitedate = $visitedate;
return $this;
}
/**
* Get visitedate
*
* @return \DateTime
*/
public function getVisitedate()
{
return $this->visitedate;
}
/**
* Set visitecpt
*
* @param integer $visitecpt
*
* @return User
*/
public function setVisitecpt($visitecpt)
{
$this->visitecpt = $visitecpt;
return $this;
}
/**
* Get visitecpt
*
* @return integer
*/
public function getVisitecpt()
{
return $this->visitecpt;
}
/**
* Set niveau01other
*
* @param string $niveau01other
*
* @return User
*/
public function setNiveau01other($niveau01other)
{
$this->niveau01other = $niveau01other;
return $this;
}
/**
* Get niveau01other
*
* @return string
*/
public function getNiveau01other()
{
return $this->niveau01other;
}
/**
* Add alertreader
*
* @param \Cadoles\PortalBundle\Entity\Alert $alertreader
*
* @return User
*/
public function addAlertreader(\Cadoles\PortalBundle\Entity\Alert $alertreader)
{
$this->alertreaders[] = $alertreader;
return $this;
}
/**
* Remove alertreader
*
* @param \Cadoles\PortalBundle\Entity\Alert $alertreader
*/
public function removeAlertreader(\Cadoles\PortalBundle\Entity\Alert $alertreader)
{
$this->alertreaders->removeElement($alertreader);
}
/**
* Get alertreaders
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getAlertreaders()
{
return $this->alertreaders;
}
/**
* Set motivation
*
* @param string $motivation
*
* @return User
*/
public function setMotivation($motivation)
{
$this->motivation = $motivation;
return $this;
}
/**
* Get motivation
*
* @return string
*/
public function getMotivation()
{
return $this->motivation;
}
/**
* Set preference
*
* @param array $preference
*
* @return User
*/
public function setPreference($preference)
{
$this->preference = $preference;
return $this;
}
/**
* Get preference
*
* @return array
*/
public function getPreference()
{
return $this->preference;
}
/**
* Set permmodoprofil
*
* @param \Cadoles\CoreBundle\Entity\PermModoProfil $permmodoprofil
*
* @return User
*/
public function setPermmodoprofil(\Cadoles\CoreBundle\Entity\PermModoProfil $permmodoprofil = null)
{
$this->permmodoprofil = $permmodoprofil;
return $this;
}
/**
* Get permmodoprofil
*
* @return \Cadoles\CoreBundle\Entity\PermModoProfil
*/
public function getPermmodoprofil()
{
return $this->permmodoprofil;
}
/**
* Set passwordad.
*
* @param string|null $passwordad
*
* @return User
*/
public function setPasswordad($passwordad = null)
{
$this->passwordad = $passwordad;
return $this;
}
/**
* Get passwordad.
*
* @return string|null
*/
public function getPasswordad()
{
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

@ -9,7 +9,7 @@ use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity
* @ORM\Table(name="usergroupe")
* @ORM\Table(name="usergroupe",uniqueConstraints={@ORM\UniqueConstraint(columns={"user_id", "group_id"})})
* @ORM\HasLifecycleCallbacks()
*
* @UniqueEntity(fields={"user", "group"}, message="Cette liaison existe déjà !")
@ -37,14 +37,30 @@ class UserGroup
/**
* @ORM\Column(type="boolean", options={"default" : false})
* CE CHAMP N'EST PLUS UTILSE
*/
private $fgmanager = false;
/**
* @ORM\Column(type="integer", length=60, nullable=true)
*/
private $rolegroup;
/**
* @ORM\Column(type="string", length=60, nullable=true)
*/
private $keyvalue;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $visitedate;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $visitecpt;
/**
* Get id
*
@ -150,4 +166,76 @@ class UserGroup
{
return $this->keyvalue;
}
/**
* Set visitedate
*
* @param \DateTime $visitedate
*
* @return UserGroup
*/
public function setVisitedate($visitedate)
{
$this->visitedate = $visitedate;
return $this;
}
/**
* Get visitedate
*
* @return \DateTime
*/
public function getVisitedate()
{
return $this->visitedate;
}
/**
* Set visitecpt
*
* @param integer $visitecpt
*
* @return UserGroup
*/
public function setVisitecpt($visitecpt)
{
$this->visitecpt = $visitecpt;
return $this;
}
/**
* Get visitecpt
*
* @return integer
*/
public function getVisitecpt()
{
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,15 +13,18 @@
class sessionListener {
protected $container;
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->em = $em;
$this->token_storage = $token_storage;
$this->session = $session;
}
public function haveRole($roles,$tohave,$route) {
public function haveRole($curentuser,$roles,$tohave,$route) {
$haverole=false;
if($roles=="") {
if(empty($tohave)) $haverole=true;
@ -35,7 +38,7 @@
if($route!=null) {
if($haverole&&in_array("ROLE_MODO",$roles)) {
$permmodo=$this->em->getRepository("CadolesCoreBundle:PermModo")->findOneBy(["route"=>$route,"visible"=>true]);
$permmodo=$this->em->getRepository("CadolesCoreBundle:PermModo")->findOneBy(["route"=>$route,"visible"=>true,"permmodoprofil"=>$curentuser->getPermmodoprofil()]);
if(!$permmodo) $haverole=false;
}
}
@ -44,9 +47,7 @@
}
public function onDomainParse(Event $event) {
$session = new Session();
$session = $this->session;
$configs = $this->em->getRepository("CadolesCoreBundle:Config")->findAll();
foreach($configs as $config) {
@ -54,11 +55,6 @@
$session->set($config->getId(), strval($config->getValue()));
}
// Calcul des couleurs
$color = $this->container->get('cadoles.core.service.color');
$color->setColor();
// Utilisateur en cours
$curentuserid=0;
$token = $this->token_storage->getToken();
@ -98,23 +94,26 @@
$app["activate_widwordpress"] =$this->container->getParameter('activate_widwordpress');
$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["widnextcloud_activate_syncenvole"] =$this->container->getParameter('widnextcloud_activate_syncenvole');
$app["widpiwik_activate_syncenvole"] =$this->container->getParameter('widpiwik_activate_syncenvole');
$app["widsacoche_activate_syncenvole"] =$this->container->getParameter('widsacoche_activate_syncenvole');
// Chargement de la sidebar
$iconniveau01 =$this->container->getParameter('iconniveau01');
$labelsniveau01 =$this->container->getParameter('labelsniveau01');
$labelniveau01 =$this->container->getParameter('labelsniveau01');
$iconniveau01 = "fa ".$this->container->getParameter('iconniveau01');
$labelsniveau01 = $this->container->getParameter('labelsniveau01');
$labelniveau01 = $this->container->getParameter('labelniveau01');
$session->set('labelniveau01',$labelniveau01);
$session->set('labelsniveau01',$labelsniveau01);
$viewniveau02 =$this->container->getParameter('viewniveau02');
$iconniveau02 =$this->container->getParameter('iconniveau02');
$labelsniveau02 =$this->container->getParameter('labelsniveau02');
$labelniveau02 =$this->container->getParameter('labelniveau02');
$viewniveau02 = $this->container->getParameter('viewniveau02');
$iconniveau02 = "fa ".$this->container->getParameter('iconniveau02');
$labelsniveau02 = $this->container->getParameter('labelsniveau02');
$labelniveau02 = $this->container->getParameter('labelniveau02');
$session->set('viewniveau02',$viewniveau02);
$session->set('labelniveau02',$labelniveau02);
$session->set('labelsniveau02',$labelsniveau02);
$moderegistration =$this->container->getParameter('moderegistration');
if($masteridentity!="SQL") $moderegistration="none";
@ -123,7 +122,9 @@
if(in_array("ROLE_MODO",$roles)) {
$request = $event->getRequest();
$route = $request->attributes->get('_route');
if($route!="cadoles_core_config"&&stripos($route,"_config")!==false) {
if($route!="cadoles_core_config"&&stripos($route,"_config")!==false&&stripos($route,"cadoles_core_config_file")===false) {
$permmodoprofil=$curentuser->getPermmodoprofil();
if(stripos($route,"cadoles_core_config_logo")!==false) $route="cadoles_portal_config_page";
if(stripos($route,"cadoles_core_config_header")!==false) $route="cadoles_portal_config_page";
@ -136,6 +137,9 @@
if(stripos($route,"cadoles_portal_config_itemcategory")!==false) $route="cadoles_portal_config_item";
if(stripos($route,"cadoles_portal_config_alertcategory")!==false) $route="cadoles_portal_config_alert";
if(stripos($route,"cadoles_portal_config_calendarevent")!==false) $route="cadoles_portal_config_calendar";
if(stripos($route,"cadoles_portal_config_blogarticle")!==false) $route="cadoles_portal_config_blog";
if(stripos($route,"cadoles_portal_config_blogcomment")!==false) $route="cadoles_portal_config_blog";
if(stripos($route,"cadoles_portal_config_projecttask")!==false) $route="cadoles_portal_config_project";
if(stripos($route,"cadoles_cron_config")!==false) $route="cadoles_cron_config";
$tbroute=explode("_",$route);
@ -143,8 +147,8 @@
$route.=(isset($tbroute[1])?"_".$tbroute[1]:"");
$route.=(isset($tbroute[2])?"_".$tbroute[2]:"");
$route.=(isset($tbroute[3])?"_".$tbroute[3]:"");
$permmodo = $this->em->getRepository("CadolesCoreBundle:PermModo")->findOneBy(['route'=> $route, "visible"=>true]);
$permmodo = $this->em->getRepository("CadolesCoreBundle:PermModo")->findOneBy(['permmodoprofil'=>$permmodoprofil,'route'=> $route, "visible"=>true]);
if(!$permmodo) die('Permission denied');
}
}
@ -152,7 +156,7 @@
$sidebar=array();
$nvs1 = $this->em->getRepository("CadolesCoreBundle:Sidebar")->findBy(array('parent'=> NULL), array('roworder' => 'ASC'));
foreach($nvs1 as $nv1) {
if($this->haveRole($roles,$nv1->getPermission(),$nv1->getPath())) {
if($this->haveRole($curentuser,$roles,$nv1->getPermission(),$nv1->getPath())) {
$sidebar[$nv1->getRoworder()] = array(
"fonticon" => $nv1->getFonticon(),
"label" => $nv1->getLabel(),
@ -183,7 +187,7 @@
foreach($nv1->getChilds() as $nv2) {
if($this->haveRole($roles,$nv2->getPermission(),$nv2->getPath())) {
if($this->haveRole($curentuser,$roles,$nv2->getPermission(),$nv2->getPath())) {
$sidebar[$nv1->getRoworder()]["childs"][$nv2->getRoworder()] = array (
"fonticon" => $nv2->getFonticon(),
"label" => $nv2->getLabel(),
@ -218,7 +222,7 @@
}
foreach($nv2->getChilds() as $nv3) {
if($this->haveRole($roles,$nv3->getPermission(),$nv3->getPath())) {
if($this->haveRole($curentuser,$roles,$nv3->getPermission(),$nv3->getPath())) {
$sidebar[$nv1->getRoworder()]["childs"][$nv2->getRoworder()]["childs"][$nv3->getRoworder()] = array (
"fonticon" => $nv3->getFonticon(),
"label" => $nv3->getLabel(),
@ -281,7 +285,67 @@
if(!is_null($niveau01->getLogo()))
$session->set("sublogo", $niveau01->getLogo());
if(!is_null($niveau01->getHeader()))
$session->set("header", $niveau01->getHeader());
if(!is_null($niveau01->getColormain()))
$session->set("colormain", $niveau01->getColormain());
if(!is_null($niveau01->getFontcolorhover()))
$session->set("fontcolorhover", $niveau01->getFontcolorhover());
if(!is_null($niveau01->getColorbody()))
$session->set("colorbody", $niveau01->getColorbody());
if(!is_null($niveau01->getFontfacebody()))
$session->set("fontfacebody", $niveau01->getFontfacebody());
if(!is_null($niveau01->getFontfacetitle()))
$session->set("fontfacetitle", $niveau01->getFontfacetitle());
}
}
// Calcul des couleurs
$color = $this->container->get('cadoles.core.service.color');
$color->setColor();
if($curentuser!="anon.") {
// Préférence
$preference=$curentuser->getPreference();
if(is_array($preference)) {
// Préférence header
if(array_key_exists("fgheader",$preference)) {
$fgheader=($preference["fgheader"][0]=="true");
$session->set("fgheader", $fgheader);
}
// Préférence header
if(array_key_exists("pagebookmark",$preference)) {
$pagebookmark=$preference["pagebookmark"][0];
$session->set("pagebookmark", $pagebookmark);
}
}
// Visite
$now=new \DateTime();
if(!$curentuser->getVisitedate()) {
$curentuser->setVisitedate($now);
$curentuser->setVisitecpt($curentuser->getVisitecpt()+1);
$this->em->persist($curentuser);
$this->em->flush();
}
else {
$visitedate=clone $curentuser->getVisitedate();
$visitedate->add(new \DateInterval("PT1H"));
if($visitedate<$now) {
$curentuser->setVisitedate($now);
$curentuser->setVisitecpt($curentuser->getVisitecpt()+1);
$this->em->persist($curentuser);
$this->em->flush();
}
}
}
}
}

View File

@ -42,6 +42,7 @@ class syncGroup implements EventSubscriber
$this->shouldSync = $args->hasChangedField('label') ||
$args->hasChangedField('description') ||
$args->hasChangedField('owner') ||
$args->hasChangedField('email') ||
$args->hasChangedField('fgcanshare');
if($args->hasChangedField('label')) $this->oldid=$args->getOldValue('label');

View File

@ -60,19 +60,17 @@ class syncNiveau01 implements EventSubscriber
if ($entity instanceof Niveau01 && ($this->changeSiren||$this->changeLabel)) {
// On change le SIRET de l'ensemble des utlisateurs associés à cet établissement
$qb = $this->em->createQueryBuilder();
$datas= $qb ->select('table')->from('CadolesCoreBundle:User','table')
->where('table.niveau01 = :id')
->setParameter("id", $entity->getId())
->getQuery()
->getResult();
foreach($datas as $data) {
$data->setSiren($entity->getSiren());
$data->setLabelniveau01($entity->getLabel());
$this->em->persist($data);
$this->em->flush();
}
// On change le SIRET de l'ensemble des utlisateurs associés à ce Niveau01
// Pas de déclencheur bdd car trop long
// La synchronisation journalière mettra à jour l'annuaire de l'utilisateur
$qb = $this->em->createQueryBuilder();
$q = $qb->update('CadolesCoreBundle:User','user')
->set('user.labelniveau01', $qb->expr()->literal($entity->getLabel()))
->set('user.siren', $qb->expr()->literal($entity->getSiren()))
->where('user.niveau01 = :niveau01')
->setParameter("niveau01", $entity->getId())
->getQuery();
$q->execute();
}
}

View File

@ -59,19 +59,17 @@ class syncNiveau02 implements EventSubscriber
}
if ($entity instanceof Niveau02 && ($this->changeSiret||$this->changeLabel)) {
// On change le SIRET de l'ensemble des utlisateurs associés à cet établissement
$qb = $this->em->createQueryBuilder();
$datas= $qb ->select('table')->from('CadolesCoreBundle:User','table')
->where('table.niveau02 = :id')
->setParameter("id", $entity->getId())
->getQuery()
->getResult();
foreach($datas as $data) {
$data->setSiret($entity->getSiret());
$data->setLabelniveau02($entity->getLabel());
$this->em->persist($data);
$this->em->flush();
}
// On change le SIREN de l'ensemble des utlisateurs associés à ce Niveau02
// Pas de déclencheur bdd car trop long
// La synchronisation journalière mettra à jour l'annuaire de l'utilisateur
$qb = $this->em->createQueryBuilder();
$q = $qb->update('CadolesCoreBundle:User','user')
->set('user.labelniveau02', $qb->expr()->literal($entity->getSiret()))
->set('user.siret', $qb->expr()->literal($entity->getSiren()))
->where('user.niveau02 = :niveau02')
->setParameter("niveau02", $entity->getId())
->getQuery();
$q->execute();
}
}

View File

@ -17,12 +17,16 @@ class syncUser implements EventSubscriber
{
protected $container;
protected $shouldSync;
protected $shouldSyncpwd;
protected $baseUser;
protected $ldap_username;
public function __construct($container, EntityManager $em) {
public function __construct($container, EntityManager $em, $ldap_username) {
$this->container = $container;
$this->em = $em;
$this->shouldSync = true;
$this->shouldSyncpwd = true;
$this->ldap_username = $ldap_username;
}
public function getSubscribedEvents()
@ -47,7 +51,6 @@ class syncUser implements EventSubscriber
$args->hasChangedField('lastname') ||
$args->hasChangedField('email') ||
$args->hasChangedField('role') ||
$args->hasChangedField('password') ||
$args->hasChangedField('avatar') ||
$args->hasChangedField('niveau01') ||
$args->hasChangedField('niveau02') ||
@ -69,6 +72,8 @@ class syncUser implements EventSubscriber
$args->hasChangedField('birthplace')
;
$this->shouldSyncpwd = $args->hasChangedField('password');
$entity->setSiren($entity->getNiveau01()->getSiren());
$entity->setLabelniveau01($entity->getNiveau01()->getLabel());
if($entity->getNiveau02()!==null) {
@ -90,6 +95,11 @@ class syncUser implements EventSubscriber
if ($entity instanceof User && $this->shouldSync) {
$this->upsertUser($entity);
}
// On met à jour/créé le password de l'utilisateur dans l'annuaire
if ($entity instanceof User && $this->shouldSyncpwd) {
$this->upsertUserpwd($entity);
}
}
public function postPersist(LifecycleEventArgs $args)
@ -99,6 +109,7 @@ class syncUser implements EventSubscriber
// On créait une fiche pour l'usager dans l'annuaire
if ($entity instanceof User) {
$this->upsertUser($entity);
$this->upsertUserpwd($entity);
}
}
@ -116,9 +127,9 @@ class syncUser implements EventSubscriber
$ldap = $this->container->get('cadoles.core.service.ldap');
if($ldap->isEnabled()) {
// On recherche l'utilisateur dans l'annuaire
$criteria = '(uid='.$user->getUsername().')';
$criteria = '('.$this->ldap_username.'='.$user->getUsername().')';
$subbranch=$this->baseUser;
$results = $ldap->search($criteria, array('uid'), $subbranch);
$results = $ldap->search($criteria, array($this->ldap_username), $subbranch);
if(count($results)) {
$ldap->deleteUser($user);
@ -138,9 +149,9 @@ class syncUser implements EventSubscriber
$ldap = $this->container->get('cadoles.core.service.ldap');
if($ldap->isEnabled()) {
// On recherche l'utilisateur dans l'annuaire
$criteria = '(uid='.$user->getUsername().')';
$criteria = '('.$this->ldap_username.'='.$user->getUsername().')';
$subbranch=$this->baseUser;
$results = $ldap->search($criteria, array('uid'), $subbranch);
$results = $ldap->search($criteria, array($this->ldap_username), $subbranch);
// Mise à jour si elle existe
if(count($results) > 0) {
@ -170,12 +181,30 @@ class syncUser implements EventSubscriber
$data->setUser($user);
$data->setGroup($fgall[0]);
$data->setKeyvalue($key);
$data->setRolegroup(0);
$this->em->persist($data);
$this->em->flush();
}
}
}
public function upsertUserpwd($user, $force = false)
{
// Synchonisation LDAP
$ldap = $this->container->get('cadoles.core.service.ldap');
if($ldap->isEnabled()) {
// On recherche l'utilisateur dans l'annuaire
$criteria = '('.$this->ldap_username.'='.$user->getUsername().')';
$subbranch=$this->baseUser;
$results = $ldap->search($criteria, array($this->ldap_username), $subbranch);
// Mise à jour si elle existe
if(count($results) > 0) {
$ldap->modifyUserpwd($user);
}
}
}
public function getBaseUser() {
return $this->baseUser;
}

View File

@ -100,6 +100,9 @@ class uploadListener
// Déplacer le fichier dans la cible
$request = $event->getRequest();
$directory = $request->get('directory');
$subdirectory = $request->get('subdirectory');
if($subdirectory) $directory.="/".$subdirectory;
$fs = new Filesystem();
$fgexit=$fs->exists($pathname."/".$directory."/".$filename);
$file->move($pathname."/".$directory, $filename);

View File

@ -76,32 +76,37 @@ class ConfigType extends AbstractType
case "font":
$choices=array(
"Helvetica" => "Helvetica",
"Peacesans" => "Peacesans",
"Acme-Regular" => "Acme-Regular",
"Redressed" => "Redressed",
"Roboto-Regular" => "Roboto-Regular",
"Justanotherhand-Regular" => "Justanotherhand-Regular",
"Lato-Regular" => "Lato-Regular",
"ABeeZee-Regular" => "ABeeZee-Regular",
"Acme-Regular" => "Acme-Regular",
"AlfaSlabOne-Regular" => "AlfaSlabOne-Regular",
"Anton-Regular" => "Anton-Regular",
"FredokaOne-Regular" => "FredokaOne-Regular",
"Overpass-Black" => "Overpass-Black",
"Righteous-Regular" => "Righteous-Regular",
"Signika-Regular" => "Signika-Regular",
"Teko-Bold" => "Teko-Bold",
"LuckiestGuy-Regular" => "LuckiestGuy-Regular",
"Baloo-Regular" => "Baloo-Regular",
"CarterOne-Regular" => "CarterOne-Regular",
"Chewy-Regular" => "Chewy-Regular",
"Courgette-Regular" => "Courgette-Regular",
"FredokaOne-Regular" => "FredokaOne-Regular",
"Gothic-Bold" => "Gothic-Bold",
"Gothic-Regular" => "Gothic-Regular",
"Grandstander" => "Grandstander",
"Helvetica" => "Helvetica",
"Justanotherhand-Regular" => "Justanotherhand-Regular",
"Lato-Regular" => "Lato-Regular",
"LexendDeca-Regular" => "LexendDeca-Regular",
"LuckiestGuy-Regular" => "LuckiestGuy-Regular",
"Marianne-Bold" => "Marianne-Bold",
"Marianne-Regular" => "Marianne-Regular",
"Overpass-Black" => "Overpass-Black",
"PassionOne" => "PassionOne",
"Peacesans" => "Peacesans",
"Redressed" => "Redressed",
"Righteous-Regular" => "Righteous-Regular",
"Roboto-Regular" => "Roboto-Regular",
"RubikMonoOne-Regular" => "RubikMonoOne-Regular",
"SigmarOne-Regular" => "SigmarOne-Regular",
"Signika-Regular" => "Signika-Regular",
"Teko-Bold" => "Teko-Bold",
"Viga-Regular" => "Viga-Regular",
);
$builder->add("value", ChoiceType::class,
@ -151,6 +156,7 @@ class ConfigType extends AbstractType
"NO_BODY" => "NO_BODY",
"ROLE_USER" => "ROLE_USER",
"ROLE_ANIM" => "ROLE_ANIM",
"ROLE_MODO" => "ROLE_MODO",
);
$builder->add("value", ChoiceType::class,

View File

@ -54,18 +54,18 @@ class GroupType extends AbstractType
"query_builder"=> function (EntityRepository $er) {
return $er->createQueryBuilder('page')->where('page.parentfor=:parentfor')->setParameter('parentfor', 'group');
},
"disabled" => ($options["mode"]=="delete"||$options["masteridentity"]!="SQL"?true:false),
"disabled" => ($options["mode"]=="delete"?true:false),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px","readonly" => ($options["mode"]=="delete"?true:false))
]);
if($options["access"]=="config") {
if($options["access"]=="config" || $options["mode"] == "update") {
$builder->add('owner',
Select2EntityType::class, array(
'label' => "Propriétaire",
'disabled' => ($options["mode"]=="delete"?true:false),
"required" => false,
'multiple' => false,
'remote_route' => 'cadoles_core_config_user_ajax_selectlist',
'remote_route' => 'cadoles_core_'.$options["access"].'_user_ajax_selectlist',
'class' => 'Cadoles\coreBundle\Entity\User',
'primary_key' => 'id',
'text_property' => 'username',
@ -83,6 +83,15 @@ class GroupType extends AbstractType
}
if($options["access"]=="config") {
$builder->add('email',
EmailType::class, array(
"label" =>"Mail",
"disabled" => ($options["mode"]=="delete"?true:false),
"required" => false,
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px")
)
);
$builder->add("fgcancreatepage",
ChoiceType::class,array(
"label" =>"Permission de créer des Pages",
@ -294,7 +303,7 @@ class GroupType extends AbstractType
);
// Si masteridentity = LDAP alors on demande le filtre des utilisateurs qui appartiennent à ce groupe
if($options["masteridentity"]=="LDAP")
if($options["masteridentity"]=="LDAP"&&$options["access"]=="config")
{
$choices=array("oui" => "1","non" => "0");
$builder->add("fgassoc",

View File

@ -24,7 +24,7 @@ class MailType extends AbstractType
{
$builder->add('submit',
SubmitType::class, array(
"label" => "Envoyer l'inviation",
"label" => "Envoyer l'invitation",
"attr" => array("class" => "btn btn-success")
)
);
@ -52,7 +52,7 @@ class MailType extends AbstractType
'mapped'=> false,
'required' => false,
'attr' => array("class" => "form-control", "style" => "margin-bottom:15px"),
'config' => ["height" => "150px",'filebrowserUploadRoute' => 'cadoles_portal_user_pagewidget_upload']
'config' => ["height" => "150px"]
]);
}

View File

@ -0,0 +1,116 @@
<?php
namespace Cadoles\CoreBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Tetranz\Select2EntityBundle\Form\Type\Select2EntityType;
use Ivory\CKEditorBundle\Form\Type\CKEditorType;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query\Expr\Join;
class MailingType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$session = new Session();
$builder->add('submit',
SubmitType::class, array(
"label" => "Envoyer",
"attr" => array("class" => "btn btn-success")
)
);
$perm=$options["perm"];
$userid=$options["userid"];
$builder
->add('niveau01',EntityType::class,[
"mapped" => false,
"required" => false,
"class" => "CadolesCoreBundle:Niveau01",
'multiple' => true,
"label" => $session->get('labelsniveau01'),
'placeholder' => '== Choisir '.$session->get('labelsniveau01').' ==',
"choice_label" => "label",
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px"),
"query_builder"=> function (EntityRepository $er) use($perm,$userid) {
if($perm)
return $er->createQueryBuilder('niveau01');
else {
$result=$er->createQueryBuilder("table")->innerJoin("CadolesCoreBundle:UserModo", "usermodo", Join::WITH, "table.id = usermodo.niveau01");
$result->andWhere("usermodo.user = :userid");
$result->setParameter('userid', $userid);
return $result;
}
}
]);
if($perm) {
$builder
->add('groups', Select2EntityType::class, [
'mapped' => false,
'label' => 'Groupes',
'class' => 'CadolesCoreBundle:Group',
'text_property' => 'label',
'multiple' => true,
'remote_route' => 'cadoles_core_ajax_group_list',
'primary_key' => 'id',
'text_property' => 'label',
'minimum_input_length' => 0,
'page_limit' => 100,
'allow_clear' => true,
'delay' => 250,
'cache' => false,
'cache_timeout' => 60000,
'language' => 'fr',
'placeholder' => 'Selectionner des groupes',
]);
}
$builder
->add('subject', TextType::class, [
"label" =>"Sujet",
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px"),
"mapped" => false
]);
$builder
->add("message",CKEditorType::class,[
'config_name' => 'small_config',
'label' => "Message",
'mapped'=> false,
'required' => true,
'attr' => array("class" => "form-control", "style" => "margin-bottom:15px"),
'config' => ["height" => "400px"]
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Cadoles\CoreBundle\Entity\User',
'perm' => "boolean",
'userid' => "integer",
));
}
}

View File

@ -57,7 +57,68 @@ class Niveau01Type extends AbstractType
)
);
$choices=array(
"Helvetica" => "Helvetica",
"Peacesans" => "Peacesans",
"Acme-Regular" => "Acme-Regular",
"Redressed" => "Redressed",
"Roboto-Regular" => "Roboto-Regular",
"Justanotherhand-Regular" => "Justanotherhand-Regular",
"Lato-Regular" => "Lato-Regular",
"ABeeZee-Regular" => "ABeeZee-Regular",
"AlfaSlabOne-Regular" => "AlfaSlabOne-Regular",
"Anton-Regular" => "Anton-Regular",
"FredokaOne-Regular" => "FredokaOne-Regular",
"Overpass-Black" => "Overpass-Black",
"Righteous-Regular" => "Righteous-Regular",
"Signika-Regular" => "Signika-Regular",
"Teko-Bold" => "Teko-Bold",
"LuckiestGuy-Regular" => "LuckiestGuy-Regular",
"Baloo-Regular" => "Baloo-Regular",
"CarterOne-Regular" => "CarterOne-Regular",
"Chewy-Regular" => "Chewy-Regular",
"Courgette-Regular" => "Courgette-Regular",
"LexendDeca-Regular" => "LexendDeca-Regular",
"RubikMonoOne-Regular" => "RubikMonoOne-Regular",
"SigmarOne-Regular" => "SigmarOne-Regular",
"Viga-Regular" => "Viga-Regular",
);
$builder->add('colormain',
TextType::class,
array("label" => "Couleur principale",
"attr" => array("class" => "pick-a-color form-control"),
'required' => false));
$builder->add('fontcolorhover',
TextType::class,
array("label" => "Couleur de texte sur couleur Principale",
"attr" => array("class" => "pick-a-color form-control"),
'required' => false));
$builder->add('colorbody',
TextType::class,
array("label" => "Couleur de fond des pages",
"attr" => array("class" => "pick-a-color form-control"),
'required' => false));
$builder->add("fontfacebody", ChoiceType::class,
array("label" =>"Police principale",
"attr" => array("class" => "form-control"),
'required' => false,
"choices" => $choices));
$builder->add("fontfacetitle", ChoiceType::class,
array("label" =>"Police pour les titres",
"attr" => array("class" => "form-control"),
'required' => false,
"choices" => $choices));
$builder->add('logo',HiddenType::class);
$builder->add('header',HiddenType::class);
// Si masteridentity = LDAP alors on demande obligatoirement le filtre des utilisateurs qui appartiennent à ce niveau01
if($options["masteridentity"]=="LDAP")

View File

@ -18,6 +18,7 @@ use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Query\Expr\Join;
class Niveau02Type extends AbstractType
{
@ -31,16 +32,37 @@ class Niveau02Type extends AbstractType
)
);
$builder->add('niveau01',
EntityType::class,
array(
"class" => "CadolesCoreBundle:Niveau01",
"label" => $session->get('labelniveau01'),
"choice_label" => "label",
"disabled" => ($options["mode"]!="submit"?true:false),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px","readonly" => ($options["mode"]!="submit"?true:false))
)
);
if($options["user"]->getRole()=="ROLE_MODO") {
$userid=$options["user"]->getId();
$builder->add('niveau01',
EntityType::class,
array(
"class" => "CadolesCoreBundle:Niveau01",
"label" => $session->get('labelniveau01'),
"choice_label" => "label",
"disabled" => ($options["mode"]!="submit"?true:false),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px","readonly" => ($options["mode"]!="submit"?true:false)),
"query_builder"=> function (EntityRepository $er) use($userid) {
$result=$er->createQueryBuilder("table")->innerJoin("CadolesCoreBundle:UserModo", "usermodo", Join::WITH, "table.id = usermodo.niveau01");
$result->andWhere("usermodo.user = :userid");
$result->setParameter('userid', $userid);
return $result;
},
)
);
}
else {
$builder->add('niveau01',
EntityType::class,
array(
"class" => "CadolesCoreBundle:Niveau01",
"label" => $session->get('labelniveau01'),
"choice_label" => "label",
"disabled" => ($options["mode"]!="submit"?true:false),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px","readonly" => ($options["mode"]!="submit"?true:false))
)
);
}
$builder->add('label',
TextType::class, array(
@ -73,7 +95,8 @@ class Niveau02Type extends AbstractType
{
$resolver->setDefaults(array(
'data_class' => 'Cadoles\CoreBundle\Entity\Niveau02',
'mode' => "string"
'mode' => "string",
'user' => 'Cadoles\CoreBundle\Entity\User',
));
}
}

View File

@ -0,0 +1,52 @@
<?php
namespace Cadoles\CoreBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\EntityManager;
class PermmodoprofilType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('submit',
SubmitType::class, array(
"label" => ($options["mode"]=="delete"?"Confirmer la Suppression":"Valider"),
"attr" => ($options["mode"]=="delete"?array("class" => "btn btn-danger"):array("class" => "btn btn-success"))
)
);
$builder->add('name',
TextType::class, array(
"label" =>"Label",
"disabled" => ($options["mode"]=="delete"?true:false),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px")
)
);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Cadoles\CoreBundle\Entity\PermModoProfil',
'mode' => "string",
'labelsiren' => "string",
'masteridentity' => "string"
));
}
}

View File

@ -33,7 +33,7 @@ class RegistrationType extends AbstractType
$builder->add('submit',
SubmitType::class, array(
"label" => ($options["mode"]=="delete"?"Confirmer la Suppression":($options["mode"]=="submit"?"Confirmer":"Sauvegarder et envoyer le mail")),
"label" => ($options["mode"]=="delete"?"Confirmer la Suppression":($options["mode"]=="submit"?"Confirmer":"Enregistrer et envoyer le mail")),
"attr" => ($options["mode"]=="delete"?array("class" => "btn btn-danger"):array("class" => "btn btn-success"))
)
);
@ -41,10 +41,19 @@ class RegistrationType extends AbstractType
if($options["mode"]=="send") {
$builder->add('save',
SubmitType::class, array(
"label" => "Sauvegarder sans envoyer le mail",
"label" => "Enregistrer sans envoyer le mail",
"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
@ -52,7 +61,7 @@ class RegistrationType extends AbstractType
TextType::class, array(
"label" =>"Login",
"disabled" => ($options["mode"]=="submit"?false:true),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px")
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px", "autocomplete" => "new-password")
)
);
@ -76,18 +85,33 @@ class RegistrationType extends AbstractType
EntityType::class,
array("class" => "CadolesCoreBundle:Niveau01",
"label" => $session->get('labelniveau01'),
'placeholder' => '== Choisir '.$session->get('labelniveau01').' ==',
"choice_label" => "label",
"disabled" => ($options["mode"]=="delete"?true:false),
"query_builder"=> function (EntityRepository $er) {
return $er->createQueryBuilder('niveau01')->orderBy('niveau01.label','ASC');
},
"disabled" => ($options["mode"]=="delete"?true:false),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px","readonly" => ($options["mode"]=="delete"?true:false))));
$builder->add('niveau01other',
TextType::class, array(
"label" =>"Autre ".$session->get('labelniveau01'). " *",
"disabled" => ($options["mode"]=="delete"?true:false),
"required" => false,
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px")
)
);
# Password
if($options["mode"]!="delete"&&$options["mode"]!="send") {
$builder->add('password',
RepeatedType::class, array(
"type" => PasswordType::class,
"required" => ($options["mode"]=="submit"?true:false),
"first_options" => array("label" => "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"))
"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")),
"invalid_message" => "Mot de passe non valide"
)
);
@ -296,6 +320,14 @@ class RegistrationType extends AbstractType
}
}
$builder->add('motivation',
TextareaType::class, array(
"label" => "Motivation",
"required" => false,
"disabled" => ($options["mode"]=="delete"?true:false),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px; height: 90px")
)
);
}
public function configureOptions(OptionsResolver $resolver)

View File

@ -45,7 +45,8 @@ class ResetpwdType extends AbstractType
"required" => ($options["mode"]=="submit"?true:false),
"options" => array("always_empty" => true),
"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

@ -0,0 +1,95 @@
<?php
namespace Cadoles\CoreBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\OptionsResolver\OptionsResolver;
class IconChoiceType extends AbstractType
{
/**
* Cache for multiple icon fields or sub-requests.
*
* @var array
*/
private $choices;
private $fontawesomeIconsFile;
public function __construct($fontawesomeIconsFile)
{
// Liste des icones FontAwesome au format JSON
// Récupéré depuis le dépôt officiel via la commande "make fetch-fontawesome-icons"
// Voir service.yml
$this->fontawesomeIconsFile = $fontawesomeIconsFile;
}
public function buildView(FormView $view, FormInterface $form, array $options)
{
// Pass this flag is necessary to render the label as raw.
// See below the twig field template for more details.
$view->vars['raw_label'] = true;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'attr' => [
// It's the key of the solution and can be done in many ways.
// Now, the rendered <select> element will have a new font.
'style' => "font-family: 'FontAwesome';",
'class' => 'select2-icon',
],
'choices' => $this->getFontAwesomeIconChoices(),
]);
}
public function getParent()
{
return ChoiceType::class;
}
protected function getFontAwesomeIconChoices()
{
if (null !== $this->choices) {
return $this->choices;
}
$fileContent = file_get_contents($this->fontawesomeIconsFile);
if (!$fileContent) {
throw new \Error('Could not load fontawesome icons file');
}
$icons = json_decode($fileContent, true);
foreach ($icons as $iconName => $iconMetadata) {
foreach ($iconMetadata['free'] as $iconStyle) {
if ('brands' === $iconStyle) {
// On ne propose pas les icônes de marques déposées.
continue;
}
$iconClass = '';
switch ($iconStyle) {
case 'solid':
$iconClass .= ' fas';
break;
case 'regular':
$iconClass .= ' far';
break;
case 'brands':
default:
$iconClass .= ' fa';
break;
}
$iconClass .= ' fa-' . $iconName;
$this->choices[$iconMetadata['label'] . ' (' . $iconStyle . ')'] = trim($iconClass);
}
}
return $this->choices;
}
}

View File

@ -16,6 +16,8 @@ use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Tetranz\Select2EntityBundle\Form\Type\Select2EntityType;
@ -42,7 +44,7 @@ class UserType extends AbstractType
TextType::class, array(
"label" =>"Login",
"disabled" => ($options["mode"]=="submit"?false:true),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px")
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px", "autocomplete" => "new-password")
)
);
@ -73,6 +75,26 @@ class UserType extends AbstractType
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px;$readonly","onfocus" => $onfocus, "onchange" => $onchange),
"required" => true,
"choices" => $choices));
$builder->add('permmodoprofil',
EntityType::class,[
"class" => "CadolesCoreBundle:PermModoProfil",
"label" => "Profil de Modération",
"choice_label" => "name",
'disabled' => ($options["mode"]=="delete"?true:false),
"required" => false,
"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"];
@ -82,33 +104,45 @@ class UserType extends AbstractType
EntityType::class,
array("class" => "CadolesCoreBundle:Niveau01",
"label" => $session->get('labelniveau01'),
'placeholder' => '== Choisir '.$session->get('labelniveau01').' ==',
"choice_label" => "label",
"query_builder"=> function (EntityRepository $er) use($access,$perm,$userid) {
if($access=="config") {
if($perm)
return $er->createQueryBuilder('niveau01');
return $er->createQueryBuilder('niveau01')->orderBy('niveau01.label','ASC');
else {
$result=$er->createQueryBuilder("table")->innerJoin("CadolesCoreBundle:UserModo", "usermodo", Join::WITH, "table.id = usermodo.niveau01");
$result=$er->createQueryBuilder("table")->innerJoin("CadolesCoreBundle:UserModo", "usermodo", Join::WITH, "table.id = usermodo.niveau01")->orderBy('table.label','ASC');
$result->andWhere("usermodo.user = :userid");
$result->setParameter('userid', $userid);
return $result;
}
}
else {
return $er->createQueryBuilder('niveau01');
return $er->createQueryBuilder('niveau01')->orderBy('niveau01.label','ASC');
}
},
"disabled" => ($options["mode"]=="delete"||$options["masteridentity"]!="SQL"?true:false),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px","readonly" => ($options["mode"]=="delete"?true:false))));
$builder->add('niveau01other',
TextType::class, array(
"label" =>"Autre ".$session->get('labelniveau01'),
"disabled" => ($options["mode"]=="delete"?true:false),
"required" => false,
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px")
)
);
if($options["mode"]!="delete"&&$options["masteridentity"]=="SQL") {
$builder->add('password',
RepeatedType::class, array(
"type" => PasswordType::class,
"required" => ($options["mode"]=="submit"?true:false),
"options" => array("always_empty" => true),
"first_options" => array("label" => "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"))
"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")),
"invalid_message" => "Mot de passe non valide"
)
);
}
@ -360,6 +394,31 @@ class UserType extends AbstractType
}
}
if(!array_key_exists("visite",$fields)) $fields["visite"]["perm"]==2;
if($fields["visite"]["perm"]!=0) {
$builder->add('visitedate', DateTimeType::class, [
"label" => 'Date de dernière visite',
"disabled" => true,
"required" => ($fields["visite"]["perm"]==2),
"widget" => 'single_text',
]);
$builder->add('visitecpt', IntegerType::class, [
"label" => 'Nombre de visites',
"required" => ($fields["visite"]["perm"]==2),
"disabled" => true,
]);
}
$builder->add('motivation',
TextareaType::class, array(
"label" => "Motivation",
"required" => false,
"disabled" => ($options["mode"]=="delete"?true:false),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px; height: 90px")
)
);
# Avatar
$builder->add('avatar',HiddenType::class, array("empty_data" => "noavatar.png"));

View File

@ -21,15 +21,15 @@ class GroupRepository extends \Doctrine\ORM\EntityRepository
foreach($attgroup as $key => $value) {
if(array_key_exists($key,$attruser)) {
if(is_array($value)) {
foreach($value as $val) {
if($val=="*")
if(is_array($attruser[$key])) {
foreach($attruser[$key] as $val) {
if($value=="*")
$retgroups->add($group);
elseif($val==$attruser[$key])
elseif($val==$value)
$retgroups->add($group);
}
}
elseif(array_key_exists($key,$attruser)) {
else {
if($value=="*")
$retgroups->add($group);
elseif($value==$attruser[$key])
@ -63,6 +63,7 @@ class GroupRepository extends \Doctrine\ORM\EntityRepository
$usergroup->setUser($user);
$usergroup->setGroup($retgroup);
$usergroup->setKeyvalue($key);
$usergroup->setRolegroup(0);
$this->_em->persist($usergroup);
$this->_em->flush();

View File

@ -15,15 +15,15 @@ class Niveau01Repository extends \Doctrine\ORM\EntityRepository
foreach($attniveau as $key => $value) {
if(array_key_exists($key,$attruser)) {
if(is_array($value)) {
foreach($value as $val) {
if($val=="*")
if(is_array($attruser[$key])) {
foreach($attruser[$key] as $val) {
if($value=="*")
return $niveau01;
elseif($val==$attruser[$key])
elseif($val==$value)
return $niveau01;
}
}
else if(array_key_exists($key,$attruser)) {
else {
if($value=="*")
return $niveau01;
elseif($value==$attruser[$key])

View File

@ -45,6 +45,11 @@ cadoles_core_redirect:
path: /user/redirect/{route}/{id}
defaults: { _controller: CadolesCoreBundle:Security:redirect }
#== Sonde ================================================================================================================
cadoles_core_sonde:
path: /sonde
defaults: { _controller: CadolesCoreBundle:Sonde:sonde }
#== Crop Image ===========================================================================================================
cadoles_core_crop01:
path: /crop01
@ -57,14 +62,42 @@ cadoles_core_crop02:
#== File =================================================================================================================
#-- Access config
cadoles_core_config_file_list:
path: /config/file/list/{directory}
defaults: { _controller: CadolesCoreBundle:File:list, access: config }
cadoles_core_config_file_upload:
path: /config/file/upload/{id}/{type}
defaults: { _controller: CadolesCoreBundle:File:upload, access: config }
cadoles_core_config_file_subdirectory:
path: /config/file/subdirectory/{id}/{type}
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:
path: /config/file/delete/
defaults: { _controller: CadolesCoreBundle:File:delete, access: config }
cadoles_core_config_file_move:
path: /config/file/move/
defaults: { _controller: CadolesCoreBundle:File:move, access: config }
cadoles_core_config_file_view:
path: /config/file/view/{directory}/{filename}
defaults: { _controller: CadolesCoreBundle:File:view, access: config }
@ -78,27 +111,56 @@ cadoles_core_config_file_download:
defaults: { _controller: CadolesCoreBundle:File:download, access: config }
#-- Access user
cadoles_core_user_file_list:
path: /user/file/list/{directory}
defaults: { _controller: CadolesCoreBundle:File:list, access: user }
cadoles_core_user_file_upload:
path: /user/file/upload/{id}/{type}
defaults: { _controller: CadolesCoreBundle:File:upload, access: user }
cadoles_core_user_file_subdirectory:
path: /user/file/subdirectory/{id}/{type}
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:
path: /user/file/delete
defaults: { _controller: CadolesCoreBundle:File:delete, access: user }
cadoles_core_user_file_move:
path: /user/file/move/
defaults: { _controller: CadolesCoreBundle:File:move, access: user }
cadoles_core_user_file_view:
path: file/view/{directory}/{filename}
path: /user/file/view/{directory}/{filename}
defaults: { _controller: CadolesCoreBundle:File:view, access: user }
cadoles_core_user_file_download:
path: file/download/{directory}/{filename}
path: /user/file/download/{directory}/{filename}
defaults: { _controller: CadolesCoreBundle:File:download, access: user }
cadoles_core_user_file_show:
path: file/show/{directory}/{filename}
path: /user/file/show/{directory}/{filename}
defaults: { _controller: CadolesCoreBundle:File:show, access: user }
#== Ajax =================================================================================================================
cadoles_core_ajax_country_list:
path: /ajax/country/list
@ -127,7 +189,14 @@ cadoles_core_ajax_group_list:
cadoles_core_ajax_group_read:
path: /ajax/group/read
defaults: { _controller: CadolesCoreBundle:Ajax:groupread }
cadoles_core_ajax_item_list:
path: /ajax/item/list
defaults: { _controller: CadolesCoreBundle:Ajax:itemlist }
cadoles_core_ajax_iswhitelist:
path: /ajax/iswhitelist
defaults: { _controller: CadolesCoreBundle:Whitelist:ajaxiswhitelist }
#== Home Config ==========================================================================================================
cadoles_core_config:
@ -162,14 +231,6 @@ cadoles_core_config_header:
path: /config/commun/header
defaults: { _controller: CadolesCoreBundle:Config:header }
cadoles_core_config_permmodo:
path: /config/commun/permmodo
defaults: { _controller: CadolesCoreBundle:Config:permmodo }
cadoles_core_config_permmodo_update:
path: /config/commun/permmodo/update
defaults: { _controller: CadolesCoreBundle:Config:permmodoupdate }
cadoles_core_config_datauser:
path: /config/commun/datauser
defaults: { _controller: CadolesCoreBundle:Config:datauser }
@ -257,6 +318,10 @@ cadoles_core_config_user_ajax_selectlist:
path: /config/user/ajax/selectlist
defaults: { _controller: CadolesCoreBundle:User:selectlist, access: config }
cadoles_core_config_mailing:
path: /config/mailing
defaults: { _controller: CadolesCoreBundle:User:mailing }
cadoles_core_config_importuser:
path: /config/importuser
defaults: { _controller: CadolesCoreBundle:User:importuser }
@ -282,6 +347,10 @@ cadoles_core_user_user_ajax_list:
path: /user/user/ajax/list
defaults: { _controller: CadolesCoreBundle:User:ajaxlist, access: user }
cadoles_core_user_user_ajax_selectlist:
path: /user/user/ajax/selectlist
defaults: { _controller: CadolesCoreBundle:User:selectlist, access: user }
cadoles_core_user_users:
path: /user/users
defaults: { _controller: CadolesCoreBundle:User:list, access: user }
@ -294,6 +363,40 @@ cadoles_core_user_viewcalendar:
path: /user/viewcalendar
defaults: { _controller: CadolesCoreBundle:User:viewcalendar }
cadoles_core_user_preference:
path: /user/preference
defaults: { _controller: CadolesCoreBundle:User:preference }
#== Permmodoprofil ========================================================================================================
cadoles_core_config_permmodoprofil:
path: /config/permmodoprofil
defaults: { _controller: CadolesCoreBundle:Permmodoprofil:list }
cadoles_core_config_permmodoprofil_submit:
path: /config/permmodoprofil/submit
defaults: { _controller: CadolesCoreBundle:Permmodoprofil:submit }
cadoles_core_config_permmodoprofil_update:
path: /config/permmodoprofil/update/{id}
defaults: { _controller: CadolesCoreBundle:Permmodoprofil:update }
cadoles_core_config_permmodoprofil_delete:
path: /config/permmodoprofil/delete/{id}
defaults: { _controller: CadolesCoreBundle:Permmodoprofil:delete }
cadoles_core_config_permmodoprofil_ajax_list:
path: /config/permmodoprofil/ajax/list
defaults: { _controller: CadolesCoreBundle:Permmodoprofil:ajaxlist }
cadoles_core_config_permmodoprofil_permmodo:
path: /config/permmodoprofil/permmodo/{id}
defaults: { _controller: CadolesCoreBundle:Permmodoprofil:permmodo }
cadoles_core_config_permmodo_update:
path: /config/permmodo/update
defaults: { _controller: CadolesCoreBundle:Permmodoprofil:permmodoupdate }
#== Niveau01 =============================================================================================================
cadoles_core_config_niveau01:
path: /config/niveau01
@ -319,6 +422,9 @@ cadoles_core_config_niveau01_logo:
path: /config/niveau01/logo
defaults: { _controller: CadolesCoreBundle:Niveau01:logo }
cadoles_core_config_niveau01_header:
path: /config/niveau01/header
defaults: { _controller: CadolesCoreBundle:Niveau01:header }
#== Niveau02 =============================================================================================================
cadoles_core_config_niveau02:
@ -368,6 +474,10 @@ cadoles_core_config_group_users:
path: /config/group/users/{id}
defaults: { _controller: CadolesCoreBundle:Group:users, access: config }
cadoles_core_config_group_statistic:
path: /config/group/statistic/{id}
defaults: { _controller: CadolesCoreBundle:Group:statistic, access: config }
cadoles_core_config_group_ajax_usersnotin:
path: /config/group/ajax/usersnotin/{id}
defaults: { _controller: CadolesCoreBundle:Group:ajaxusersnotin, access: config }
@ -384,14 +494,22 @@ cadoles_core_config_group_ajax_usergroup_del:
path: /config/group/ajax/usergroupdel
defaults: { _controller: CadolesCoreBundle:Group:usergroupdel, access: config }
cadoles_core_config_group_ajax_switchmanager:
path: /config/group/ajax/switchmanager
defaults: { _controller: CadolesCoreBundle:Group:switchmanager, access: config }
cadoles_core_config_group_ajax_changerole:
path: /config/group/ajax/changerole
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:
path: /config/group/users/export/{id}
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
cadoles_core_user_group:
path: /user/group
@ -417,6 +535,10 @@ cadoles_core_user_group_users:
path: /user/group/users/{id}
defaults: { _controller: CadolesCoreBundle:Group:users, access: user }
cadoles_core_user_group_statistic:
path: /user/group/statistic/{id}
defaults: { _controller: CadolesCoreBundle:Group:statistic, access: user }
cadoles_core_user_group_out:
path: /user/group/out/{id}
defaults: { _controller: CadolesCoreBundle:Group:out, access: user }
@ -437,14 +559,18 @@ cadoles_core_user_group_ajax_usergroup_del:
path: /user/group/ajax/usergroupdel
defaults: { _controller: CadolesCoreBundle:Group:usergroupdel, access: user }
cadoles_core_user_group_ajax_switchmanager:
path: /user/group/ajax/switchmanager
defaults: { _controller: CadolesCoreBundle:Group:switchmanager, access: user }
cadoles_core_user_group_ajax_changerole:
path: /user/group/ajax/changerole
defaults: { _controller: CadolesCoreBundle:Group:changerole, access: user }
cadoles_core_user_group_usergroup_export:
path: /user/group/users/export/{id}
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 ============================================================================================================
cadoles_core_config_whitelist:
@ -467,10 +593,36 @@ cadoles_core_config_whitelist_ajax_list:
path: /config/whitelist/ajax/list
defaults: { _controller: CadolesCoreBundle:Whitelist:ajaxlist }
#== Statistic =============================================================================================================
cadoles_core_config_statistic:
path: /config/statistic
defaults: { _controller: CadolesCoreBundle:Statistic:list }
#== REST ==================================================================================================================
cadoles_core_rest_login:
path: /rest/login
defaults: { _controller: CadolesCoreBundle:Rest:login }
cadoles_core_rest_user:
path: /rest/user/{key}/{login}
defaults: { _controller: CadolesCoreBundle:Rest:user }
path: /rest/user/{login}
defaults: { _controller: CadolesCoreBundle:Rest:user }
cadoles_core_rest_users:
path: /rest/users
defaults: { _controller: CadolesCoreBundle:Rest:users }
cadoles_core_rest_groups:
path: /rest/groups
defaults: { _controller: CadolesCoreBundle:Rest:groups }
cadoles_core_rest_bookmark_add:
path: /rest/bookmark/add
defaults: { _controller: CadolesCoreBundle:Rest:bookmarkadd }
cadoles_core_rest_bookmark_del:
path: /rest/bookmark/del
defaults: { _controller: CadolesCoreBundle:Rest:bookmarkdel }
cadoles_core_rest_alert_hide:
path: /rest/alert/hide
defaults: { _controller: CadolesCoreBundle:Rest:alerthide }

View File

@ -26,7 +26,7 @@ services:
cadoles.core.session.listener:
public: true
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:
- { name: kernel.event_listener, event: kernel.request, method: onDomainParse }
@ -51,6 +51,7 @@ services:
arguments:
- "@service_container"
- "@doctrine.orm.entity_manager"
- %ldap_username%
tags:
- { name: doctrine.event_subscriber }
calls:
@ -106,6 +107,10 @@ services:
arguments:
- %ldap_host%
- %ldap_port%
- %ldap_tls%
- %ldap_type%
- %ldap_addomainehome%
- %ldap_addomaineprofil%
calls:
- [setUser, ["%ldap_user%"]]
- [setPassword, ["%ldap_password%"]]
@ -158,6 +163,16 @@ services:
public: true
class: Cadoles\CoreBundle\Service\samlAttributeMapperService
cadoles.form.icon_choice_type:
class: Cadoles\CoreBundle\Form\Type\IconChoiceType
arguments:
# Liste des icones FontAwesome au format JSON
# Récupéré depuis le dépôt officiel via la commande "make fetch-fontawesome-icons"
# Voir Makefile du MSE
- "%kernel.root_dir%/../web/fonts/fontawesome/fontawesome-icons.json"
tags:
- { name: form.type }

View File

@ -468,4 +468,3 @@
margin-left: -5px;
margin-right: -5px;
}
/*# sourceMappingURL=bootstrap-datepicker.css.map */

File diff suppressed because one or more lines are too long

View File

@ -1,13 +1,10 @@
@font-face {
font-family: 'Redressed';
src: url('../fonts/typo/Redressed-webfont.eot');
src: url('../fonts/typo/Redressed-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/typo/Redressed-webfont.woff') format('woff'),
url('../fonts/typo/Redressed-webfont.ttf') format('truetype'),
url('../fonts/typo/Redressed-webfont.svg#redressedregular') format('svg');
font-family: 'ABeeZee-Regular';
src: url('../fonts/typo/ABeeZee-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
}
@font-face {
font-family: 'Acme-Regular';
@ -20,108 +17,19 @@
font-style: normal;
}
@font-face {
font-family: 'Peacesans';
src: url('../fonts/typo/Peacesans-webfont.eot');
src: url('../fonts/typo/Peacesans-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/typo/Peacesans-webfont.woff') format('woff'),
url('../fonts/typo/Peacesans-webfont.ttf') format('truetype'),
url('../fonts/typo/Peacesans-webfont.svg#peacesans') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Roboto-Regular';
src: url('../fonts/typo/Roboto-Regular-webfont.eot');
src: url('../fonts/typo/Roboto-Regular-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/typo/Roboto-Regular-webfont.woff') format('woff'),
url('../fonts/typo/Roboto-Regular-webfont.ttf') format('truetype'),
url('../fonts/typo/Roboto-Regular-webfont.svg#peacesansregular') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Justanotherhand-Regular';
src: url('../fonts/typo/Justanotherhand-Regular-webfont.eot');
src: url('../fonts/typo/Justanotherhand-Regular-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/typo/Justanotherhand-Regular-webfont.woff') format('woff'),
url('../fonts/typo/Justanotherhand-Regular-webfont.ttf') format('truetype'),
url('../fonts/typo/Justanotherhand-Regular-webfont.svg#justanotherhandregular') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Lato-Regular';
src: url('../fonts/typo/Lato-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'ABeeZee-Regular';
src: url('../fonts/typo/ABeeZee-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'AlfaSlabOne-Regular';
src: url('../fonts/typo/AlfaSlabOne-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Anton-Regular';
src: url('../fonts/typo/Anton-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'FredokaOne-Regular';
src: url('../fonts/typo/FredokaOne-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Overpass-Black';
src: url('../fonts/typo/Overpass-Black.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Righteous-Regular';
src: url('../fonts/typo/Righteous-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Signika-Regular';
src: url('../fonts/typo/Signika-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Teko-Bold';
src: url('../fonts/typo/Teko-Bold.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'LuckiestGuy-Regular';
src: url('../fonts/typo/LuckiestGuy-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
}
@font-face {
font-family: 'Baloo-Regular';
@ -150,6 +58,52 @@
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'FredokaOne-Regular';
src: url('../fonts/typo/FredokaOne-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Gothic-Regular';
src: url('../fonts/typo/Gothic-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Gothic-Bold';
src: url('../fonts/typo/Gothic-Bold.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Grandstander';
src: url('../fonts/typo/Grandstander-Black.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Justanotherhand-Regular';
src: url('../fonts/typo/Justanotherhand-Regular-webfont.eot');
src: url('../fonts/typo/Justanotherhand-Regular-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/typo/Justanotherhand-Regular-webfont.woff') format('woff'),
url('../fonts/typo/Justanotherhand-Regular-webfont.ttf') format('truetype'),
url('../fonts/typo/Justanotherhand-Regular-webfont.svg#justanotherhandregular') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Lato-Regular';
src: url('../fonts/typo/Lato-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'LexendDeca-Regular';
@ -157,6 +111,85 @@
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Marianne-Bold';
src: url('../fonts/typo/Marianne-Bold.otf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Marianne-Regular';
src: url('../fonts/typo/Marianne-Regular.otf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Justanotherhand-Regular';
src: url('../fonts/typo/Justanotherhand-Regular-webfont.eot');
src: url('../fonts/typo/Justanotherhand-Regular-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/typo/Justanotherhand-Regular-webfont.woff') format('woff'),
url('../fonts/typo/Justanotherhand-Regular-webfont.ttf') format('truetype'),
url('../fonts/typo/Justanotherhand-Regular-webfont.svg#justanotherhandregular') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Overpass-Black';
src: url('../fonts/typo/Overpass-Black.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'PassionOne';
src: url('../fonts/typo/PassionOne-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Peacesans';
src: url('../fonts/typo/Peacesans-webfont.eot');
src: url('../fonts/typo/Peacesans-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/typo/Peacesans-webfont.woff') format('woff'),
url('../fonts/typo/Peacesans-webfont.ttf') format('truetype'),
url('../fonts/typo/Peacesans-webfont.svg#peacesans') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Redressed';
src: url('../fonts/typo/Redressed-webfont.eot');
src: url('../fonts/typo/Redressed-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/typo/Redressed-webfont.woff') format('woff'),
url('../fonts/typo/Redressed-webfont.ttf') format('truetype'),
url('../fonts/typo/Redressed-webfont.svg#redressedregular') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Righteous-Regular';
src: url('../fonts/typo/Righteous-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Roboto-Regular';
src: url('../fonts/typo/Roboto-Regular-webfont.eot');
src: url('../fonts/typo/Roboto-Regular-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/typo/Roboto-Regular-webfont.woff') format('woff'),
url('../fonts/typo/Roboto-Regular-webfont.ttf') format('truetype'),
url('../fonts/typo/Roboto-Regular-webfont.svg#peacesansregular') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'RubikMonoOne-Regular';
@ -172,10 +205,23 @@
font-style: normal;
}
@font-face {
font-family: 'Signika-Regular';
src: url('../fonts/typo/Signika-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Teko-Bold';
src: url('../fonts/typo/Teko-Bold.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Viga-Regular';
src: url('../fonts/typo/Viga-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}

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,8 +60,21 @@ body {
height: 20px;
}
@media (max-width: 991px) {
.header .title{
font-size: 30px;
}
.header small {
font-size:14px;
top: 25px;
}
}
@media (max-width: 767px) {
.header { display: none }
#menu-header { display: none }
#navbarsmalltitle { display: none }
}
@ -108,6 +121,25 @@ body {
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) {
.navbar-default .navbar-header #title {
display: none;
@ -175,6 +207,11 @@ body {
border-radius: 6px 0 6px 6px;
}
.list-group-item.active, .list-group-item.active:focus, .list-group-item.active:hover {
background-color: #cdcdcd;
border-color: #cdcdcd;
}
/*== SIDEBAR ============================================================================================================================================*/
@media (max-width: 767px) {
@ -286,7 +323,9 @@ span.item-drag {
position: relative;
display: block;
}
.grid-sizer {
display: none !important;
}
.grid-item .grid-item-content {
/*height: 100%;*/
}
@ -328,12 +367,12 @@ span.item-drag {
.grid-item .item-link img {
display: block;
max-width: 100%;
//max-height: 110px;
height: auto;
margin: 10px;
height: 105px;
}
.grid-item .grid-item-title {
display: inline-block;
vertical-align: top;
@ -372,6 +411,15 @@ a.item-update {
z-index: 1000;
}
a.item-restaure {
display: none;
position: absolute;
right: 25px;
top: 2px;
z-index: 1000;
}
a.item-delete {
display: none;
position: absolute;
@ -664,6 +712,13 @@ a.item-heart {
margin-top:30px;
}
.widget-mini {
display: inline-block;
height:50px;
width:50px;
margin-top:0px;
}
.widgetmenu {
right: 20px;
position: absolute;
@ -710,6 +765,11 @@ a.item-heart {
max-width: 100%;
}
.widget-ckeditor img {
height:auto !important;
}
.frameitem {
position: absolute;
right: 0px;
@ -729,9 +789,7 @@ a.item-heart {
.cat-list-feed {
display: inline-block;
padding: 8px;
margin-top: 10px;
margin-right: 5px;
margin-bottom: 10px;
margin-top: 5px;
cursor:pointer;
}

View File

@ -0,0 +1,34 @@
Font Awesome Free License
-------------------------
Font Awesome Free is free, open source, and GPL friendly. You can use it for
commercial projects, open source projects, or really almost whatever you want.
Full Font Awesome Free license: https://fontawesome.com/license/free.
# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
In the Font Awesome Free download, the CC BY 4.0 license applies to all icons
packaged as SVG and JS file types.
# Fonts: SIL OFL 1.1 License (https://scripts.sil.org/OFL)
In the Font Awesome Free download, the SIL OFL license applies to all icons
packaged as web and desktop font files.
# Code: MIT License (https://opensource.org/licenses/MIT)
In the Font Awesome Free download, the MIT license applies to all non-font and
non-icon files.
# Attribution
Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font
Awesome Free files already contain embedded comments with sufficient
attribution, so you shouldn't need to do anything additional when using these
files normally.
We've kept attribution comments terse, so we ask that you do not actively work
to remove them from files, especially code. They're a great way for folks to
learn about Font Awesome.
# Brand Icons
All brand icons are trademarks of their respective owners. The use of these
trademarks does not indicate endorsement of the trademark holder by Font
Awesome, nor vice versa. **Please do not use brand logos for any purpose except
to represent the company, product, or service to which they refer.**

View File

@ -0,0 +1,4586 @@
/*!
* Font Awesome Free 5.14.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
*/
.fa,
.fas,
.far,
.fal,
.fad,
.fab {
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
display: inline-block;
font-style: normal;
font-variant: normal;
text-rendering: auto;
line-height: 1; }
.fa-lg {
font-size: 1.33333em;
line-height: 0.75em;
vertical-align: -.0667em; }
.fa-xs {
font-size: .75em; }
.fa-sm {
font-size: .875em; }
.fa-1x {
font-size: 1em; }
.fa-2x {
font-size: 2em; }
.fa-3x {
font-size: 3em; }
.fa-4x {
font-size: 4em; }
.fa-5x {
font-size: 5em; }
.fa-6x {
font-size: 6em; }
.fa-7x {
font-size: 7em; }
.fa-8x {
font-size: 8em; }
.fa-9x {
font-size: 9em; }
.fa-10x {
font-size: 10em; }
.fa-fw {
text-align: center;
width: 1.25em; }
.fa-ul {
list-style-type: none;
margin-left: 2.5em;
padding-left: 0; }
.fa-ul > li {
position: relative; }
.fa-li {
left: -2em;
position: absolute;
text-align: center;
width: 2em;
line-height: inherit; }
.fa-border {
border: solid 0.08em #eee;
border-radius: .1em;
padding: .2em .25em .15em; }
.fa-pull-left {
float: left; }
.fa-pull-right {
float: right; }
.fa.fa-pull-left,
.fas.fa-pull-left,
.far.fa-pull-left,
.fal.fa-pull-left,
.fab.fa-pull-left {
margin-right: .3em; }
.fa.fa-pull-right,
.fas.fa-pull-right,
.far.fa-pull-right,
.fal.fa-pull-right,
.fab.fa-pull-right {
margin-left: .3em; }
.fa-spin {
-webkit-animation: fa-spin 2s infinite linear;
animation: fa-spin 2s infinite linear; }
.fa-pulse {
-webkit-animation: fa-spin 1s infinite steps(8);
animation: fa-spin 1s infinite steps(8); }
@-webkit-keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); }
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg); } }
@keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); }
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg); } }
.fa-rotate-90 {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
-webkit-transform: rotate(90deg);
transform: rotate(90deg); }
.fa-rotate-180 {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
-webkit-transform: rotate(180deg);
transform: rotate(180deg); }
.fa-rotate-270 {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
-webkit-transform: rotate(270deg);
transform: rotate(270deg); }
.fa-flip-horizontal {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
-webkit-transform: scale(-1, 1);
transform: scale(-1, 1); }
.fa-flip-vertical {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
-webkit-transform: scale(1, -1);
transform: scale(1, -1); }
.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
-webkit-transform: scale(-1, -1);
transform: scale(-1, -1); }
:root .fa-rotate-90,
:root .fa-rotate-180,
:root .fa-rotate-270,
:root .fa-flip-horizontal,
:root .fa-flip-vertical,
:root .fa-flip-both {
-webkit-filter: none;
filter: none; }
.fa-stack {
display: inline-block;
height: 2em;
line-height: 2em;
position: relative;
vertical-align: middle;
width: 2.5em; }
.fa-stack-1x,
.fa-stack-2x {
left: 0;
position: absolute;
text-align: center;
width: 100%; }
.fa-stack-1x {
line-height: inherit; }
.fa-stack-2x {
font-size: 2em; }
.fa-inverse {
color: #fff; }
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
readers do not read off random characters that represent icons */
.fa-500px:before {
content: "\f26e"; }
.fa-accessible-icon:before {
content: "\f368"; }
.fa-accusoft:before {
content: "\f369"; }
.fa-acquisitions-incorporated:before {
content: "\f6af"; }
.fa-ad:before {
content: "\f641"; }
.fa-address-book:before {
content: "\f2b9"; }
.fa-address-card:before {
content: "\f2bb"; }
.fa-adjust:before {
content: "\f042"; }
.fa-adn:before {
content: "\f170"; }
.fa-adobe:before {
content: "\f778"; }
.fa-adversal:before {
content: "\f36a"; }
.fa-affiliatetheme:before {
content: "\f36b"; }
.fa-air-freshener:before {
content: "\f5d0"; }
.fa-airbnb:before {
content: "\f834"; }
.fa-algolia:before {
content: "\f36c"; }
.fa-align-center:before {
content: "\f037"; }
.fa-align-justify:before {
content: "\f039"; }
.fa-align-left:before {
content: "\f036"; }
.fa-align-right:before {
content: "\f038"; }
.fa-alipay:before {
content: "\f642"; }
.fa-allergies:before {
content: "\f461"; }
.fa-amazon:before {
content: "\f270"; }
.fa-amazon-pay:before {
content: "\f42c"; }
.fa-ambulance:before {
content: "\f0f9"; }
.fa-american-sign-language-interpreting:before {
content: "\f2a3"; }
.fa-amilia:before {
content: "\f36d"; }
.fa-anchor:before {
content: "\f13d"; }
.fa-android:before {
content: "\f17b"; }
.fa-angellist:before {
content: "\f209"; }
.fa-angle-double-down:before {
content: "\f103"; }
.fa-angle-double-left:before {
content: "\f100"; }
.fa-angle-double-right:before {
content: "\f101"; }
.fa-angle-double-up:before {
content: "\f102"; }
.fa-angle-down:before {
content: "\f107"; }
.fa-angle-left:before {
content: "\f104"; }
.fa-angle-right:before {
content: "\f105"; }
.fa-angle-up:before {
content: "\f106"; }
.fa-angry:before {
content: "\f556"; }
.fa-angrycreative:before {
content: "\f36e"; }
.fa-angular:before {
content: "\f420"; }
.fa-ankh:before {
content: "\f644"; }
.fa-app-store:before {
content: "\f36f"; }
.fa-app-store-ios:before {
content: "\f370"; }
.fa-apper:before {
content: "\f371"; }
.fa-apple:before {
content: "\f179"; }
.fa-apple-alt:before {
content: "\f5d1"; }
.fa-apple-pay:before {
content: "\f415"; }
.fa-archive:before {
content: "\f187"; }
.fa-archway:before {
content: "\f557"; }
.fa-arrow-alt-circle-down:before {
content: "\f358"; }
.fa-arrow-alt-circle-left:before {
content: "\f359"; }
.fa-arrow-alt-circle-right:before {
content: "\f35a"; }
.fa-arrow-alt-circle-up:before {
content: "\f35b"; }
.fa-arrow-circle-down:before {
content: "\f0ab"; }
.fa-arrow-circle-left:before {
content: "\f0a8"; }
.fa-arrow-circle-right:before {
content: "\f0a9"; }
.fa-arrow-circle-up:before {
content: "\f0aa"; }
.fa-arrow-down:before {
content: "\f063"; }
.fa-arrow-left:before {
content: "\f060"; }
.fa-arrow-right:before {
content: "\f061"; }
.fa-arrow-up:before {
content: "\f062"; }
.fa-arrows-alt:before {
content: "\f0b2"; }
.fa-arrows-alt-h:before {
content: "\f337"; }
.fa-arrows-alt-v:before {
content: "\f338"; }
.fa-artstation:before {
content: "\f77a"; }
.fa-assistive-listening-systems:before {
content: "\f2a2"; }
.fa-asterisk:before {
content: "\f069"; }
.fa-asymmetrik:before {
content: "\f372"; }
.fa-at:before {
content: "\f1fa"; }
.fa-atlas:before {
content: "\f558"; }
.fa-atlassian:before {
content: "\f77b"; }
.fa-atom:before {
content: "\f5d2"; }
.fa-audible:before {
content: "\f373"; }
.fa-audio-description:before {
content: "\f29e"; }
.fa-autoprefixer:before {
content: "\f41c"; }
.fa-avianex:before {
content: "\f374"; }
.fa-aviato:before {
content: "\f421"; }
.fa-award:before {
content: "\f559"; }
.fa-aws:before {
content: "\f375"; }
.fa-baby:before {
content: "\f77c"; }
.fa-baby-carriage:before {
content: "\f77d"; }
.fa-backspace:before {
content: "\f55a"; }
.fa-backward:before {
content: "\f04a"; }
.fa-bacon:before {
content: "\f7e5"; }
.fa-bacteria:before {
content: "\e059"; }
.fa-bacterium:before {
content: "\e05a"; }
.fa-bahai:before {
content: "\f666"; }
.fa-balance-scale:before {
content: "\f24e"; }
.fa-balance-scale-left:before {
content: "\f515"; }
.fa-balance-scale-right:before {
content: "\f516"; }
.fa-ban:before {
content: "\f05e"; }
.fa-band-aid:before {
content: "\f462"; }
.fa-bandcamp:before {
content: "\f2d5"; }
.fa-barcode:before {
content: "\f02a"; }
.fa-bars:before {
content: "\f0c9"; }
.fa-baseball-ball:before {
content: "\f433"; }
.fa-basketball-ball:before {
content: "\f434"; }
.fa-bath:before {
content: "\f2cd"; }
.fa-battery-empty:before {
content: "\f244"; }
.fa-battery-full:before {
content: "\f240"; }
.fa-battery-half:before {
content: "\f242"; }
.fa-battery-quarter:before {
content: "\f243"; }
.fa-battery-three-quarters:before {
content: "\f241"; }
.fa-battle-net:before {
content: "\f835"; }
.fa-bed:before {
content: "\f236"; }
.fa-beer:before {
content: "\f0fc"; }
.fa-behance:before {
content: "\f1b4"; }
.fa-behance-square:before {
content: "\f1b5"; }
.fa-bell:before {
content: "\f0f3"; }
.fa-bell-slash:before {
content: "\f1f6"; }
.fa-bezier-curve:before {
content: "\f55b"; }
.fa-bible:before {
content: "\f647"; }
.fa-bicycle:before {
content: "\f206"; }
.fa-biking:before {
content: "\f84a"; }
.fa-bimobject:before {
content: "\f378"; }
.fa-binoculars:before {
content: "\f1e5"; }
.fa-biohazard:before {
content: "\f780"; }
.fa-birthday-cake:before {
content: "\f1fd"; }
.fa-bitbucket:before {
content: "\f171"; }
.fa-bitcoin:before {
content: "\f379"; }
.fa-bity:before {
content: "\f37a"; }
.fa-black-tie:before {
content: "\f27e"; }
.fa-blackberry:before {
content: "\f37b"; }
.fa-blender:before {
content: "\f517"; }
.fa-blender-phone:before {
content: "\f6b6"; }
.fa-blind:before {
content: "\f29d"; }
.fa-blog:before {
content: "\f781"; }
.fa-blogger:before {
content: "\f37c"; }
.fa-blogger-b:before {
content: "\f37d"; }
.fa-bluetooth:before {
content: "\f293"; }
.fa-bluetooth-b:before {
content: "\f294"; }
.fa-bold:before {
content: "\f032"; }
.fa-bolt:before {
content: "\f0e7"; }
.fa-bomb:before {
content: "\f1e2"; }
.fa-bone:before {
content: "\f5d7"; }
.fa-bong:before {
content: "\f55c"; }
.fa-book:before {
content: "\f02d"; }
.fa-book-dead:before {
content: "\f6b7"; }
.fa-book-medical:before {
content: "\f7e6"; }
.fa-book-open:before {
content: "\f518"; }
.fa-book-reader:before {
content: "\f5da"; }
.fa-bookmark:before {
content: "\f02e"; }
.fa-bootstrap:before {
content: "\f836"; }
.fa-border-all:before {
content: "\f84c"; }
.fa-border-none:before {
content: "\f850"; }
.fa-border-style:before {
content: "\f853"; }
.fa-bowling-ball:before {
content: "\f436"; }
.fa-box:before {
content: "\f466"; }
.fa-box-open:before {
content: "\f49e"; }
.fa-box-tissue:before {
content: "\e05b"; }
.fa-boxes:before {
content: "\f468"; }
.fa-braille:before {
content: "\f2a1"; }
.fa-brain:before {
content: "\f5dc"; }
.fa-bread-slice:before {
content: "\f7ec"; }
.fa-briefcase:before {
content: "\f0b1"; }
.fa-briefcase-medical:before {
content: "\f469"; }
.fa-broadcast-tower:before {
content: "\f519"; }
.fa-broom:before {
content: "\f51a"; }
.fa-brush:before {
content: "\f55d"; }
.fa-btc:before {
content: "\f15a"; }
.fa-buffer:before {
content: "\f837"; }
.fa-bug:before {
content: "\f188"; }
.fa-building:before {
content: "\f1ad"; }
.fa-bullhorn:before {
content: "\f0a1"; }
.fa-bullseye:before {
content: "\f140"; }
.fa-burn:before {
content: "\f46a"; }
.fa-buromobelexperte:before {
content: "\f37f"; }
.fa-bus:before {
content: "\f207"; }
.fa-bus-alt:before {
content: "\f55e"; }
.fa-business-time:before {
content: "\f64a"; }
.fa-buy-n-large:before {
content: "\f8a6"; }
.fa-buysellads:before {
content: "\f20d"; }
.fa-calculator:before {
content: "\f1ec"; }
.fa-calendar:before {
content: "\f133"; }
.fa-calendar-alt:before {
content: "\f073"; }
.fa-calendar-check:before {
content: "\f274"; }
.fa-calendar-day:before {
content: "\f783"; }
.fa-calendar-minus:before {
content: "\f272"; }
.fa-calendar-plus:before {
content: "\f271"; }
.fa-calendar-times:before {
content: "\f273"; }
.fa-calendar-week:before {
content: "\f784"; }
.fa-camera:before {
content: "\f030"; }
.fa-camera-retro:before {
content: "\f083"; }
.fa-campground:before {
content: "\f6bb"; }
.fa-canadian-maple-leaf:before {
content: "\f785"; }
.fa-candy-cane:before {
content: "\f786"; }
.fa-cannabis:before {
content: "\f55f"; }
.fa-capsules:before {
content: "\f46b"; }
.fa-car:before {
content: "\f1b9"; }
.fa-car-alt:before {
content: "\f5de"; }
.fa-car-battery:before {
content: "\f5df"; }
.fa-car-crash:before {
content: "\f5e1"; }
.fa-car-side:before {
content: "\f5e4"; }
.fa-caravan:before {
content: "\f8ff"; }
.fa-caret-down:before {
content: "\f0d7"; }
.fa-caret-left:before {
content: "\f0d9"; }
.fa-caret-right:before {
content: "\f0da"; }
.fa-caret-square-down:before {
content: "\f150"; }
.fa-caret-square-left:before {
content: "\f191"; }
.fa-caret-square-right:before {
content: "\f152"; }
.fa-caret-square-up:before {
content: "\f151"; }
.fa-caret-up:before {
content: "\f0d8"; }
.fa-carrot:before {
content: "\f787"; }
.fa-cart-arrow-down:before {
content: "\f218"; }
.fa-cart-plus:before {
content: "\f217"; }
.fa-cash-register:before {
content: "\f788"; }
.fa-cat:before {
content: "\f6be"; }
.fa-cc-amazon-pay:before {
content: "\f42d"; }
.fa-cc-amex:before {
content: "\f1f3"; }
.fa-cc-apple-pay:before {
content: "\f416"; }
.fa-cc-diners-club:before {
content: "\f24c"; }
.fa-cc-discover:before {
content: "\f1f2"; }
.fa-cc-jcb:before {
content: "\f24b"; }
.fa-cc-mastercard:before {
content: "\f1f1"; }
.fa-cc-paypal:before {
content: "\f1f4"; }
.fa-cc-stripe:before {
content: "\f1f5"; }
.fa-cc-visa:before {
content: "\f1f0"; }
.fa-centercode:before {
content: "\f380"; }
.fa-centos:before {
content: "\f789"; }
.fa-certificate:before {
content: "\f0a3"; }
.fa-chair:before {
content: "\f6c0"; }
.fa-chalkboard:before {
content: "\f51b"; }
.fa-chalkboard-teacher:before {
content: "\f51c"; }
.fa-charging-station:before {
content: "\f5e7"; }
.fa-chart-area:before {
content: "\f1fe"; }
.fa-chart-bar:before {
content: "\f080"; }
.fa-chart-line:before {
content: "\f201"; }
.fa-chart-pie:before {
content: "\f200"; }
.fa-check:before {
content: "\f00c"; }
.fa-check-circle:before {
content: "\f058"; }
.fa-check-double:before {
content: "\f560"; }
.fa-check-square:before {
content: "\f14a"; }
.fa-cheese:before {
content: "\f7ef"; }
.fa-chess:before {
content: "\f439"; }
.fa-chess-bishop:before {
content: "\f43a"; }
.fa-chess-board:before {
content: "\f43c"; }
.fa-chess-king:before {
content: "\f43f"; }
.fa-chess-knight:before {
content: "\f441"; }
.fa-chess-pawn:before {
content: "\f443"; }
.fa-chess-queen:before {
content: "\f445"; }
.fa-chess-rook:before {
content: "\f447"; }
.fa-chevron-circle-down:before {
content: "\f13a"; }
.fa-chevron-circle-left:before {
content: "\f137"; }
.fa-chevron-circle-right:before {
content: "\f138"; }
.fa-chevron-circle-up:before {
content: "\f139"; }
.fa-chevron-down:before {
content: "\f078"; }
.fa-chevron-left:before {
content: "\f053"; }
.fa-chevron-right:before {
content: "\f054"; }
.fa-chevron-up:before {
content: "\f077"; }
.fa-child:before {
content: "\f1ae"; }
.fa-chrome:before {
content: "\f268"; }
.fa-chromecast:before {
content: "\f838"; }
.fa-church:before {
content: "\f51d"; }
.fa-circle:before {
content: "\f111"; }
.fa-circle-notch:before {
content: "\f1ce"; }
.fa-city:before {
content: "\f64f"; }
.fa-clinic-medical:before {
content: "\f7f2"; }
.fa-clipboard:before {
content: "\f328"; }
.fa-clipboard-check:before {
content: "\f46c"; }
.fa-clipboard-list:before {
content: "\f46d"; }
.fa-clock:before {
content: "\f017"; }
.fa-clone:before {
content: "\f24d"; }
.fa-closed-captioning:before {
content: "\f20a"; }
.fa-cloud:before {
content: "\f0c2"; }
.fa-cloud-download-alt:before {
content: "\f381"; }
.fa-cloud-meatball:before {
content: "\f73b"; }
.fa-cloud-moon:before {
content: "\f6c3"; }
.fa-cloud-moon-rain:before {
content: "\f73c"; }
.fa-cloud-rain:before {
content: "\f73d"; }
.fa-cloud-showers-heavy:before {
content: "\f740"; }
.fa-cloud-sun:before {
content: "\f6c4"; }
.fa-cloud-sun-rain:before {
content: "\f743"; }
.fa-cloud-upload-alt:before {
content: "\f382"; }
.fa-cloudscale:before {
content: "\f383"; }
.fa-cloudsmith:before {
content: "\f384"; }
.fa-cloudversify:before {
content: "\f385"; }
.fa-cocktail:before {
content: "\f561"; }
.fa-code:before {
content: "\f121"; }
.fa-code-branch:before {
content: "\f126"; }
.fa-codepen:before {
content: "\f1cb"; }
.fa-codiepie:before {
content: "\f284"; }
.fa-coffee:before {
content: "\f0f4"; }
.fa-cog:before {
content: "\f013"; }
.fa-cogs:before {
content: "\f085"; }
.fa-coins:before {
content: "\f51e"; }
.fa-columns:before {
content: "\f0db"; }
.fa-comment:before {
content: "\f075"; }
.fa-comment-alt:before {
content: "\f27a"; }
.fa-comment-dollar:before {
content: "\f651"; }
.fa-comment-dots:before {
content: "\f4ad"; }
.fa-comment-medical:before {
content: "\f7f5"; }
.fa-comment-slash:before {
content: "\f4b3"; }
.fa-comments:before {
content: "\f086"; }
.fa-comments-dollar:before {
content: "\f653"; }
.fa-compact-disc:before {
content: "\f51f"; }
.fa-compass:before {
content: "\f14e"; }
.fa-compress:before {
content: "\f066"; }
.fa-compress-alt:before {
content: "\f422"; }
.fa-compress-arrows-alt:before {
content: "\f78c"; }
.fa-concierge-bell:before {
content: "\f562"; }
.fa-confluence:before {
content: "\f78d"; }
.fa-connectdevelop:before {
content: "\f20e"; }
.fa-contao:before {
content: "\f26d"; }
.fa-cookie:before {
content: "\f563"; }
.fa-cookie-bite:before {
content: "\f564"; }
.fa-copy:before {
content: "\f0c5"; }
.fa-copyright:before {
content: "\f1f9"; }
.fa-cotton-bureau:before {
content: "\f89e"; }
.fa-couch:before {
content: "\f4b8"; }
.fa-cpanel:before {
content: "\f388"; }
.fa-creative-commons:before {
content: "\f25e"; }
.fa-creative-commons-by:before {
content: "\f4e7"; }
.fa-creative-commons-nc:before {
content: "\f4e8"; }
.fa-creative-commons-nc-eu:before {
content: "\f4e9"; }
.fa-creative-commons-nc-jp:before {
content: "\f4ea"; }
.fa-creative-commons-nd:before {
content: "\f4eb"; }
.fa-creative-commons-pd:before {
content: "\f4ec"; }
.fa-creative-commons-pd-alt:before {
content: "\f4ed"; }
.fa-creative-commons-remix:before {
content: "\f4ee"; }
.fa-creative-commons-sa:before {
content: "\f4ef"; }
.fa-creative-commons-sampling:before {
content: "\f4f0"; }
.fa-creative-commons-sampling-plus:before {
content: "\f4f1"; }
.fa-creative-commons-share:before {
content: "\f4f2"; }
.fa-creative-commons-zero:before {
content: "\f4f3"; }
.fa-credit-card:before {
content: "\f09d"; }
.fa-critical-role:before {
content: "\f6c9"; }
.fa-crop:before {
content: "\f125"; }
.fa-crop-alt:before {
content: "\f565"; }
.fa-cross:before {
content: "\f654"; }
.fa-crosshairs:before {
content: "\f05b"; }
.fa-crow:before {
content: "\f520"; }
.fa-crown:before {
content: "\f521"; }
.fa-crutch:before {
content: "\f7f7"; }
.fa-css3:before {
content: "\f13c"; }
.fa-css3-alt:before {
content: "\f38b"; }
.fa-cube:before {
content: "\f1b2"; }
.fa-cubes:before {
content: "\f1b3"; }
.fa-cut:before {
content: "\f0c4"; }
.fa-cuttlefish:before {
content: "\f38c"; }
.fa-d-and-d:before {
content: "\f38d"; }
.fa-d-and-d-beyond:before {
content: "\f6ca"; }
.fa-dailymotion:before {
content: "\e052"; }
.fa-dashcube:before {
content: "\f210"; }
.fa-database:before {
content: "\f1c0"; }
.fa-deaf:before {
content: "\f2a4"; }
.fa-deezer:before {
content: "\e077"; }
.fa-delicious:before {
content: "\f1a5"; }
.fa-democrat:before {
content: "\f747"; }
.fa-deploydog:before {
content: "\f38e"; }
.fa-deskpro:before {
content: "\f38f"; }
.fa-desktop:before {
content: "\f108"; }
.fa-dev:before {
content: "\f6cc"; }
.fa-deviantart:before {
content: "\f1bd"; }
.fa-dharmachakra:before {
content: "\f655"; }
.fa-dhl:before {
content: "\f790"; }
.fa-diagnoses:before {
content: "\f470"; }
.fa-diaspora:before {
content: "\f791"; }
.fa-dice:before {
content: "\f522"; }
.fa-dice-d20:before {
content: "\f6cf"; }
.fa-dice-d6:before {
content: "\f6d1"; }
.fa-dice-five:before {
content: "\f523"; }
.fa-dice-four:before {
content: "\f524"; }
.fa-dice-one:before {
content: "\f525"; }
.fa-dice-six:before {
content: "\f526"; }
.fa-dice-three:before {
content: "\f527"; }
.fa-dice-two:before {
content: "\f528"; }
.fa-digg:before {
content: "\f1a6"; }
.fa-digital-ocean:before {
content: "\f391"; }
.fa-digital-tachograph:before {
content: "\f566"; }
.fa-directions:before {
content: "\f5eb"; }
.fa-discord:before {
content: "\f392"; }
.fa-discourse:before {
content: "\f393"; }
.fa-disease:before {
content: "\f7fa"; }
.fa-divide:before {
content: "\f529"; }
.fa-dizzy:before {
content: "\f567"; }
.fa-dna:before {
content: "\f471"; }
.fa-dochub:before {
content: "\f394"; }
.fa-docker:before {
content: "\f395"; }
.fa-dog:before {
content: "\f6d3"; }
.fa-dollar-sign:before {
content: "\f155"; }
.fa-dolly:before {
content: "\f472"; }
.fa-dolly-flatbed:before {
content: "\f474"; }
.fa-donate:before {
content: "\f4b9"; }
.fa-door-closed:before {
content: "\f52a"; }
.fa-door-open:before {
content: "\f52b"; }
.fa-dot-circle:before {
content: "\f192"; }
.fa-dove:before {
content: "\f4ba"; }
.fa-download:before {
content: "\f019"; }
.fa-draft2digital:before {
content: "\f396"; }
.fa-drafting-compass:before {
content: "\f568"; }
.fa-dragon:before {
content: "\f6d5"; }
.fa-draw-polygon:before {
content: "\f5ee"; }
.fa-dribbble:before {
content: "\f17d"; }
.fa-dribbble-square:before {
content: "\f397"; }
.fa-dropbox:before {
content: "\f16b"; }
.fa-drum:before {
content: "\f569"; }
.fa-drum-steelpan:before {
content: "\f56a"; }
.fa-drumstick-bite:before {
content: "\f6d7"; }
.fa-drupal:before {
content: "\f1a9"; }
.fa-dumbbell:before {
content: "\f44b"; }
.fa-dumpster:before {
content: "\f793"; }
.fa-dumpster-fire:before {
content: "\f794"; }
.fa-dungeon:before {
content: "\f6d9"; }
.fa-dyalog:before {
content: "\f399"; }
.fa-earlybirds:before {
content: "\f39a"; }
.fa-ebay:before {
content: "\f4f4"; }
.fa-edge:before {
content: "\f282"; }
.fa-edge-legacy:before {
content: "\e078"; }
.fa-edit:before {
content: "\f044"; }
.fa-egg:before {
content: "\f7fb"; }
.fa-eject:before {
content: "\f052"; }
.fa-elementor:before {
content: "\f430"; }
.fa-ellipsis-h:before {
content: "\f141"; }
.fa-ellipsis-v:before {
content: "\f142"; }
.fa-ello:before {
content: "\f5f1"; }
.fa-ember:before {
content: "\f423"; }
.fa-empire:before {
content: "\f1d1"; }
.fa-envelope:before {
content: "\f0e0"; }
.fa-envelope-open:before {
content: "\f2b6"; }
.fa-envelope-open-text:before {
content: "\f658"; }
.fa-envelope-square:before {
content: "\f199"; }
.fa-envira:before {
content: "\f299"; }
.fa-equals:before {
content: "\f52c"; }
.fa-eraser:before {
content: "\f12d"; }
.fa-erlang:before {
content: "\f39d"; }
.fa-ethereum:before {
content: "\f42e"; }
.fa-ethernet:before {
content: "\f796"; }
.fa-etsy:before {
content: "\f2d7"; }
.fa-euro-sign:before {
content: "\f153"; }
.fa-evernote:before {
content: "\f839"; }
.fa-exchange-alt:before {
content: "\f362"; }
.fa-exclamation:before {
content: "\f12a"; }
.fa-exclamation-circle:before {
content: "\f06a"; }
.fa-exclamation-triangle:before {
content: "\f071"; }
.fa-expand:before {
content: "\f065"; }
.fa-expand-alt:before {
content: "\f424"; }
.fa-expand-arrows-alt:before {
content: "\f31e"; }
.fa-expeditedssl:before {
content: "\f23e"; }
.fa-external-link-alt:before {
content: "\f35d"; }
.fa-external-link-square-alt:before {
content: "\f360"; }
.fa-eye:before {
content: "\f06e"; }
.fa-eye-dropper:before {
content: "\f1fb"; }
.fa-eye-slash:before {
content: "\f070"; }
.fa-facebook:before {
content: "\f09a"; }
.fa-facebook-f:before {
content: "\f39e"; }
.fa-facebook-messenger:before {
content: "\f39f"; }
.fa-facebook-square:before {
content: "\f082"; }
.fa-fan:before {
content: "\f863"; }
.fa-fantasy-flight-games:before {
content: "\f6dc"; }
.fa-fast-backward:before {
content: "\f049"; }
.fa-fast-forward:before {
content: "\f050"; }
.fa-faucet:before {
content: "\e005"; }
.fa-fax:before {
content: "\f1ac"; }
.fa-feather:before {
content: "\f52d"; }
.fa-feather-alt:before {
content: "\f56b"; }
.fa-fedex:before {
content: "\f797"; }
.fa-fedora:before {
content: "\f798"; }
.fa-female:before {
content: "\f182"; }
.fa-fighter-jet:before {
content: "\f0fb"; }
.fa-figma:before {
content: "\f799"; }
.fa-file:before {
content: "\f15b"; }
.fa-file-alt:before {
content: "\f15c"; }
.fa-file-archive:before {
content: "\f1c6"; }
.fa-file-audio:before {
content: "\f1c7"; }
.fa-file-code:before {
content: "\f1c9"; }
.fa-file-contract:before {
content: "\f56c"; }
.fa-file-csv:before {
content: "\f6dd"; }
.fa-file-download:before {
content: "\f56d"; }
.fa-file-excel:before {
content: "\f1c3"; }
.fa-file-export:before {
content: "\f56e"; }
.fa-file-image:before {
content: "\f1c5"; }
.fa-file-import:before {
content: "\f56f"; }
.fa-file-invoice:before {
content: "\f570"; }
.fa-file-invoice-dollar:before {
content: "\f571"; }
.fa-file-medical:before {
content: "\f477"; }
.fa-file-medical-alt:before {
content: "\f478"; }
.fa-file-pdf:before {
content: "\f1c1"; }
.fa-file-powerpoint:before {
content: "\f1c4"; }
.fa-file-prescription:before {
content: "\f572"; }
.fa-file-signature:before {
content: "\f573"; }
.fa-file-upload:before {
content: "\f574"; }
.fa-file-video:before {
content: "\f1c8"; }
.fa-file-word:before {
content: "\f1c2"; }
.fa-fill:before {
content: "\f575"; }
.fa-fill-drip:before {
content: "\f576"; }
.fa-film:before {
content: "\f008"; }
.fa-filter:before {
content: "\f0b0"; }
.fa-fingerprint:before {
content: "\f577"; }
.fa-fire:before {
content: "\f06d"; }
.fa-fire-alt:before {
content: "\f7e4"; }
.fa-fire-extinguisher:before {
content: "\f134"; }
.fa-firefox:before {
content: "\f269"; }
.fa-firefox-browser:before {
content: "\e007"; }
.fa-first-aid:before {
content: "\f479"; }
.fa-first-order:before {
content: "\f2b0"; }
.fa-first-order-alt:before {
content: "\f50a"; }
.fa-firstdraft:before {
content: "\f3a1"; }
.fa-fish:before {
content: "\f578"; }
.fa-fist-raised:before {
content: "\f6de"; }
.fa-flag:before {
content: "\f024"; }
.fa-flag-checkered:before {
content: "\f11e"; }
.fa-flag-usa:before {
content: "\f74d"; }
.fa-flask:before {
content: "\f0c3"; }
.fa-flickr:before {
content: "\f16e"; }
.fa-flipboard:before {
content: "\f44d"; }
.fa-flushed:before {
content: "\f579"; }
.fa-fly:before {
content: "\f417"; }
.fa-folder:before {
content: "\f07b"; }
.fa-folder-minus:before {
content: "\f65d"; }
.fa-folder-open:before {
content: "\f07c"; }
.fa-folder-plus:before {
content: "\f65e"; }
.fa-font:before {
content: "\f031"; }
.fa-font-awesome:before {
content: "\f2b4"; }
.fa-font-awesome-alt:before {
content: "\f35c"; }
.fa-font-awesome-flag:before {
content: "\f425"; }
.fa-font-awesome-logo-full:before {
content: "\f4e6"; }
.fa-fonticons:before {
content: "\f280"; }
.fa-fonticons-fi:before {
content: "\f3a2"; }
.fa-football-ball:before {
content: "\f44e"; }
.fa-fort-awesome:before {
content: "\f286"; }
.fa-fort-awesome-alt:before {
content: "\f3a3"; }
.fa-forumbee:before {
content: "\f211"; }
.fa-forward:before {
content: "\f04e"; }
.fa-foursquare:before {
content: "\f180"; }
.fa-free-code-camp:before {
content: "\f2c5"; }
.fa-freebsd:before {
content: "\f3a4"; }
.fa-frog:before {
content: "\f52e"; }
.fa-frown:before {
content: "\f119"; }
.fa-frown-open:before {
content: "\f57a"; }
.fa-fulcrum:before {
content: "\f50b"; }
.fa-funnel-dollar:before {
content: "\f662"; }
.fa-futbol:before {
content: "\f1e3"; }
.fa-galactic-republic:before {
content: "\f50c"; }
.fa-galactic-senate:before {
content: "\f50d"; }
.fa-gamepad:before {
content: "\f11b"; }
.fa-gas-pump:before {
content: "\f52f"; }
.fa-gavel:before {
content: "\f0e3"; }
.fa-gem:before {
content: "\f3a5"; }
.fa-genderless:before {
content: "\f22d"; }
.fa-get-pocket:before {
content: "\f265"; }
.fa-gg:before {
content: "\f260"; }
.fa-gg-circle:before {
content: "\f261"; }
.fa-ghost:before {
content: "\f6e2"; }
.fa-gift:before {
content: "\f06b"; }
.fa-gifts:before {
content: "\f79c"; }
.fa-git:before {
content: "\f1d3"; }
.fa-git-alt:before {
content: "\f841"; }
.fa-git-square:before {
content: "\f1d2"; }
.fa-github:before {
content: "\f09b"; }
.fa-github-alt:before {
content: "\f113"; }
.fa-github-square:before {
content: "\f092"; }
.fa-gitkraken:before {
content: "\f3a6"; }
.fa-gitlab:before {
content: "\f296"; }
.fa-gitter:before {
content: "\f426"; }
.fa-glass-cheers:before {
content: "\f79f"; }
.fa-glass-martini:before {
content: "\f000"; }
.fa-glass-martini-alt:before {
content: "\f57b"; }
.fa-glass-whiskey:before {
content: "\f7a0"; }
.fa-glasses:before {
content: "\f530"; }
.fa-glide:before {
content: "\f2a5"; }
.fa-glide-g:before {
content: "\f2a6"; }
.fa-globe:before {
content: "\f0ac"; }
.fa-globe-africa:before {
content: "\f57c"; }
.fa-globe-americas:before {
content: "\f57d"; }
.fa-globe-asia:before {
content: "\f57e"; }
.fa-globe-europe:before {
content: "\f7a2"; }
.fa-gofore:before {
content: "\f3a7"; }
.fa-golf-ball:before {
content: "\f450"; }
.fa-goodreads:before {
content: "\f3a8"; }
.fa-goodreads-g:before {
content: "\f3a9"; }
.fa-google:before {
content: "\f1a0"; }
.fa-google-drive:before {
content: "\f3aa"; }
.fa-google-pay:before {
content: "\e079"; }
.fa-google-play:before {
content: "\f3ab"; }
.fa-google-plus:before {
content: "\f2b3"; }
.fa-google-plus-g:before {
content: "\f0d5"; }
.fa-google-plus-square:before {
content: "\f0d4"; }
.fa-google-wallet:before {
content: "\f1ee"; }
.fa-gopuram:before {
content: "\f664"; }
.fa-graduation-cap:before {
content: "\f19d"; }
.fa-gratipay:before {
content: "\f184"; }
.fa-grav:before {
content: "\f2d6"; }
.fa-greater-than:before {
content: "\f531"; }
.fa-greater-than-equal:before {
content: "\f532"; }
.fa-grimace:before {
content: "\f57f"; }
.fa-grin:before {
content: "\f580"; }
.fa-grin-alt:before {
content: "\f581"; }
.fa-grin-beam:before {
content: "\f582"; }
.fa-grin-beam-sweat:before {
content: "\f583"; }
.fa-grin-hearts:before {
content: "\f584"; }
.fa-grin-squint:before {
content: "\f585"; }
.fa-grin-squint-tears:before {
content: "\f586"; }
.fa-grin-stars:before {
content: "\f587"; }
.fa-grin-tears:before {
content: "\f588"; }
.fa-grin-tongue:before {
content: "\f589"; }
.fa-grin-tongue-squint:before {
content: "\f58a"; }
.fa-grin-tongue-wink:before {
content: "\f58b"; }
.fa-grin-wink:before {
content: "\f58c"; }
.fa-grip-horizontal:before {
content: "\f58d"; }
.fa-grip-lines:before {
content: "\f7a4"; }
.fa-grip-lines-vertical:before {
content: "\f7a5"; }
.fa-grip-vertical:before {
content: "\f58e"; }
.fa-gripfire:before {
content: "\f3ac"; }
.fa-grunt:before {
content: "\f3ad"; }
.fa-guitar:before {
content: "\f7a6"; }
.fa-gulp:before {
content: "\f3ae"; }
.fa-h-square:before {
content: "\f0fd"; }
.fa-hacker-news:before {
content: "\f1d4"; }
.fa-hacker-news-square:before {
content: "\f3af"; }
.fa-hackerrank:before {
content: "\f5f7"; }
.fa-hamburger:before {
content: "\f805"; }
.fa-hammer:before {
content: "\f6e3"; }
.fa-hamsa:before {
content: "\f665"; }
.fa-hand-holding:before {
content: "\f4bd"; }
.fa-hand-holding-heart:before {
content: "\f4be"; }
.fa-hand-holding-medical:before {
content: "\e05c"; }
.fa-hand-holding-usd:before {
content: "\f4c0"; }
.fa-hand-holding-water:before {
content: "\f4c1"; }
.fa-hand-lizard:before {
content: "\f258"; }
.fa-hand-middle-finger:before {
content: "\f806"; }
.fa-hand-paper:before {
content: "\f256"; }
.fa-hand-peace:before {
content: "\f25b"; }
.fa-hand-point-down:before {
content: "\f0a7"; }
.fa-hand-point-left:before {
content: "\f0a5"; }
.fa-hand-point-right:before {
content: "\f0a4"; }
.fa-hand-point-up:before {
content: "\f0a6"; }
.fa-hand-pointer:before {
content: "\f25a"; }
.fa-hand-rock:before {
content: "\f255"; }
.fa-hand-scissors:before {
content: "\f257"; }
.fa-hand-sparkles:before {
content: "\e05d"; }
.fa-hand-spock:before {
content: "\f259"; }
.fa-hands:before {
content: "\f4c2"; }
.fa-hands-helping:before {
content: "\f4c4"; }
.fa-hands-wash:before {
content: "\e05e"; }
.fa-handshake:before {
content: "\f2b5"; }
.fa-handshake-alt-slash:before {
content: "\e05f"; }
.fa-handshake-slash:before {
content: "\e060"; }
.fa-hanukiah:before {
content: "\f6e6"; }
.fa-hard-hat:before {
content: "\f807"; }
.fa-hashtag:before {
content: "\f292"; }
.fa-hat-cowboy:before {
content: "\f8c0"; }
.fa-hat-cowboy-side:before {
content: "\f8c1"; }
.fa-hat-wizard:before {
content: "\f6e8"; }
.fa-hdd:before {
content: "\f0a0"; }
.fa-head-side-cough:before {
content: "\e061"; }
.fa-head-side-cough-slash:before {
content: "\e062"; }
.fa-head-side-mask:before {
content: "\e063"; }
.fa-head-side-virus:before {
content: "\e064"; }
.fa-heading:before {
content: "\f1dc"; }
.fa-headphones:before {
content: "\f025"; }
.fa-headphones-alt:before {
content: "\f58f"; }
.fa-headset:before {
content: "\f590"; }
.fa-heart:before {
content: "\f004"; }
.fa-heart-broken:before {
content: "\f7a9"; }
.fa-heartbeat:before {
content: "\f21e"; }
.fa-helicopter:before {
content: "\f533"; }
.fa-highlighter:before {
content: "\f591"; }
.fa-hiking:before {
content: "\f6ec"; }
.fa-hippo:before {
content: "\f6ed"; }
.fa-hips:before {
content: "\f452"; }
.fa-hire-a-helper:before {
content: "\f3b0"; }
.fa-history:before {
content: "\f1da"; }
.fa-hockey-puck:before {
content: "\f453"; }
.fa-holly-berry:before {
content: "\f7aa"; }
.fa-home:before {
content: "\f015"; }
.fa-hooli:before {
content: "\f427"; }
.fa-hornbill:before {
content: "\f592"; }
.fa-horse:before {
content: "\f6f0"; }
.fa-horse-head:before {
content: "\f7ab"; }
.fa-hospital:before {
content: "\f0f8"; }
.fa-hospital-alt:before {
content: "\f47d"; }
.fa-hospital-symbol:before {
content: "\f47e"; }
.fa-hospital-user:before {
content: "\f80d"; }
.fa-hot-tub:before {
content: "\f593"; }
.fa-hotdog:before {
content: "\f80f"; }
.fa-hotel:before {
content: "\f594"; }
.fa-hotjar:before {
content: "\f3b1"; }
.fa-hourglass:before {
content: "\f254"; }
.fa-hourglass-end:before {
content: "\f253"; }
.fa-hourglass-half:before {
content: "\f252"; }
.fa-hourglass-start:before {
content: "\f251"; }
.fa-house-damage:before {
content: "\f6f1"; }
.fa-house-user:before {
content: "\e065"; }
.fa-houzz:before {
content: "\f27c"; }
.fa-hryvnia:before {
content: "\f6f2"; }
.fa-html5:before {
content: "\f13b"; }
.fa-hubspot:before {
content: "\f3b2"; }
.fa-i-cursor:before {
content: "\f246"; }
.fa-ice-cream:before {
content: "\f810"; }
.fa-icicles:before {
content: "\f7ad"; }
.fa-icons:before {
content: "\f86d"; }
.fa-id-badge:before {
content: "\f2c1"; }
.fa-id-card:before {
content: "\f2c2"; }
.fa-id-card-alt:before {
content: "\f47f"; }
.fa-ideal:before {
content: "\e013"; }
.fa-igloo:before {
content: "\f7ae"; }
.fa-image:before {
content: "\f03e"; }
.fa-images:before {
content: "\f302"; }
.fa-imdb:before {
content: "\f2d8"; }
.fa-inbox:before {
content: "\f01c"; }
.fa-indent:before {
content: "\f03c"; }
.fa-industry:before {
content: "\f275"; }
.fa-infinity:before {
content: "\f534"; }
.fa-info:before {
content: "\f129"; }
.fa-info-circle:before {
content: "\f05a"; }
.fa-instagram:before {
content: "\f16d"; }
.fa-instagram-square:before {
content: "\e055"; }
.fa-intercom:before {
content: "\f7af"; }
.fa-internet-explorer:before {
content: "\f26b"; }
.fa-invision:before {
content: "\f7b0"; }
.fa-ioxhost:before {
content: "\f208"; }
.fa-italic:before {
content: "\f033"; }
.fa-itch-io:before {
content: "\f83a"; }
.fa-itunes:before {
content: "\f3b4"; }
.fa-itunes-note:before {
content: "\f3b5"; }
.fa-java:before {
content: "\f4e4"; }
.fa-jedi:before {
content: "\f669"; }
.fa-jedi-order:before {
content: "\f50e"; }
.fa-jenkins:before {
content: "\f3b6"; }
.fa-jira:before {
content: "\f7b1"; }
.fa-joget:before {
content: "\f3b7"; }
.fa-joint:before {
content: "\f595"; }
.fa-joomla:before {
content: "\f1aa"; }
.fa-journal-whills:before {
content: "\f66a"; }
.fa-js:before {
content: "\f3b8"; }
.fa-js-square:before {
content: "\f3b9"; }
.fa-jsfiddle:before {
content: "\f1cc"; }
.fa-kaaba:before {
content: "\f66b"; }
.fa-kaggle:before {
content: "\f5fa"; }
.fa-key:before {
content: "\f084"; }
.fa-keybase:before {
content: "\f4f5"; }
.fa-keyboard:before {
content: "\f11c"; }
.fa-keycdn:before {
content: "\f3ba"; }
.fa-khanda:before {
content: "\f66d"; }
.fa-kickstarter:before {
content: "\f3bb"; }
.fa-kickstarter-k:before {
content: "\f3bc"; }
.fa-kiss:before {
content: "\f596"; }
.fa-kiss-beam:before {
content: "\f597"; }
.fa-kiss-wink-heart:before {
content: "\f598"; }
.fa-kiwi-bird:before {
content: "\f535"; }
.fa-korvue:before {
content: "\f42f"; }
.fa-landmark:before {
content: "\f66f"; }
.fa-language:before {
content: "\f1ab"; }
.fa-laptop:before {
content: "\f109"; }
.fa-laptop-code:before {
content: "\f5fc"; }
.fa-laptop-house:before {
content: "\e066"; }
.fa-laptop-medical:before {
content: "\f812"; }
.fa-laravel:before {
content: "\f3bd"; }
.fa-lastfm:before {
content: "\f202"; }
.fa-lastfm-square:before {
content: "\f203"; }
.fa-laugh:before {
content: "\f599"; }
.fa-laugh-beam:before {
content: "\f59a"; }
.fa-laugh-squint:before {
content: "\f59b"; }
.fa-laugh-wink:before {
content: "\f59c"; }
.fa-layer-group:before {
content: "\f5fd"; }
.fa-leaf:before {
content: "\f06c"; }
.fa-leanpub:before {
content: "\f212"; }
.fa-lemon:before {
content: "\f094"; }
.fa-less:before {
content: "\f41d"; }
.fa-less-than:before {
content: "\f536"; }
.fa-less-than-equal:before {
content: "\f537"; }
.fa-level-down-alt:before {
content: "\f3be"; }
.fa-level-up-alt:before {
content: "\f3bf"; }
.fa-life-ring:before {
content: "\f1cd"; }
.fa-lightbulb:before {
content: "\f0eb"; }
.fa-line:before {
content: "\f3c0"; }
.fa-link:before {
content: "\f0c1"; }
.fa-linkedin:before {
content: "\f08c"; }
.fa-linkedin-in:before {
content: "\f0e1"; }
.fa-linode:before {
content: "\f2b8"; }
.fa-linux:before {
content: "\f17c"; }
.fa-lira-sign:before {
content: "\f195"; }
.fa-list:before {
content: "\f03a"; }
.fa-list-alt:before {
content: "\f022"; }
.fa-list-ol:before {
content: "\f0cb"; }
.fa-list-ul:before {
content: "\f0ca"; }
.fa-location-arrow:before {
content: "\f124"; }
.fa-lock:before {
content: "\f023"; }
.fa-lock-open:before {
content: "\f3c1"; }
.fa-long-arrow-alt-down:before {
content: "\f309"; }
.fa-long-arrow-alt-left:before {
content: "\f30a"; }
.fa-long-arrow-alt-right:before {
content: "\f30b"; }
.fa-long-arrow-alt-up:before {
content: "\f30c"; }
.fa-low-vision:before {
content: "\f2a8"; }
.fa-luggage-cart:before {
content: "\f59d"; }
.fa-lungs:before {
content: "\f604"; }
.fa-lungs-virus:before {
content: "\e067"; }
.fa-lyft:before {
content: "\f3c3"; }
.fa-magento:before {
content: "\f3c4"; }
.fa-magic:before {
content: "\f0d0"; }
.fa-magnet:before {
content: "\f076"; }
.fa-mail-bulk:before {
content: "\f674"; }
.fa-mailchimp:before {
content: "\f59e"; }
.fa-male:before {
content: "\f183"; }
.fa-mandalorian:before {
content: "\f50f"; }
.fa-map:before {
content: "\f279"; }
.fa-map-marked:before {
content: "\f59f"; }
.fa-map-marked-alt:before {
content: "\f5a0"; }
.fa-map-marker:before {
content: "\f041"; }
.fa-map-marker-alt:before {
content: "\f3c5"; }
.fa-map-pin:before {
content: "\f276"; }
.fa-map-signs:before {
content: "\f277"; }
.fa-markdown:before {
content: "\f60f"; }
.fa-marker:before {
content: "\f5a1"; }
.fa-mars:before {
content: "\f222"; }
.fa-mars-double:before {
content: "\f227"; }
.fa-mars-stroke:before {
content: "\f229"; }
.fa-mars-stroke-h:before {
content: "\f22b"; }
.fa-mars-stroke-v:before {
content: "\f22a"; }
.fa-mask:before {
content: "\f6fa"; }
.fa-mastodon:before {
content: "\f4f6"; }
.fa-maxcdn:before {
content: "\f136"; }
.fa-mdb:before {
content: "\f8ca"; }
.fa-medal:before {
content: "\f5a2"; }
.fa-medapps:before {
content: "\f3c6"; }
.fa-medium:before {
content: "\f23a"; }
.fa-medium-m:before {
content: "\f3c7"; }
.fa-medkit:before {
content: "\f0fa"; }
.fa-medrt:before {
content: "\f3c8"; }
.fa-meetup:before {
content: "\f2e0"; }
.fa-megaport:before {
content: "\f5a3"; }
.fa-meh:before {
content: "\f11a"; }
.fa-meh-blank:before {
content: "\f5a4"; }
.fa-meh-rolling-eyes:before {
content: "\f5a5"; }
.fa-memory:before {
content: "\f538"; }
.fa-mendeley:before {
content: "\f7b3"; }
.fa-menorah:before {
content: "\f676"; }
.fa-mercury:before {
content: "\f223"; }
.fa-meteor:before {
content: "\f753"; }
.fa-microblog:before {
content: "\e01a"; }
.fa-microchip:before {
content: "\f2db"; }
.fa-microphone:before {
content: "\f130"; }
.fa-microphone-alt:before {
content: "\f3c9"; }
.fa-microphone-alt-slash:before {
content: "\f539"; }
.fa-microphone-slash:before {
content: "\f131"; }
.fa-microscope:before {
content: "\f610"; }
.fa-microsoft:before {
content: "\f3ca"; }
.fa-minus:before {
content: "\f068"; }
.fa-minus-circle:before {
content: "\f056"; }
.fa-minus-square:before {
content: "\f146"; }
.fa-mitten:before {
content: "\f7b5"; }
.fa-mix:before {
content: "\f3cb"; }
.fa-mixcloud:before {
content: "\f289"; }
.fa-mixer:before {
content: "\e056"; }
.fa-mizuni:before {
content: "\f3cc"; }
.fa-mobile:before {
content: "\f10b"; }
.fa-mobile-alt:before {
content: "\f3cd"; }
.fa-modx:before {
content: "\f285"; }
.fa-monero:before {
content: "\f3d0"; }
.fa-money-bill:before {
content: "\f0d6"; }
.fa-money-bill-alt:before {
content: "\f3d1"; }
.fa-money-bill-wave:before {
content: "\f53a"; }
.fa-money-bill-wave-alt:before {
content: "\f53b"; }
.fa-money-check:before {
content: "\f53c"; }
.fa-money-check-alt:before {
content: "\f53d"; }
.fa-monument:before {
content: "\f5a6"; }
.fa-moon:before {
content: "\f186"; }
.fa-mortar-pestle:before {
content: "\f5a7"; }
.fa-mosque:before {
content: "\f678"; }
.fa-motorcycle:before {
content: "\f21c"; }
.fa-mountain:before {
content: "\f6fc"; }
.fa-mouse:before {
content: "\f8cc"; }
.fa-mouse-pointer:before {
content: "\f245"; }
.fa-mug-hot:before {
content: "\f7b6"; }
.fa-music:before {
content: "\f001"; }
.fa-napster:before {
content: "\f3d2"; }
.fa-neos:before {
content: "\f612"; }
.fa-network-wired:before {
content: "\f6ff"; }
.fa-neuter:before {
content: "\f22c"; }
.fa-newspaper:before {
content: "\f1ea"; }
.fa-nimblr:before {
content: "\f5a8"; }
.fa-node:before {
content: "\f419"; }
.fa-node-js:before {
content: "\f3d3"; }
.fa-not-equal:before {
content: "\f53e"; }
.fa-notes-medical:before {
content: "\f481"; }
.fa-npm:before {
content: "\f3d4"; }
.fa-ns8:before {
content: "\f3d5"; }
.fa-nutritionix:before {
content: "\f3d6"; }
.fa-object-group:before {
content: "\f247"; }
.fa-object-ungroup:before {
content: "\f248"; }
.fa-odnoklassniki:before {
content: "\f263"; }
.fa-odnoklassniki-square:before {
content: "\f264"; }
.fa-oil-can:before {
content: "\f613"; }
.fa-old-republic:before {
content: "\f510"; }
.fa-om:before {
content: "\f679"; }
.fa-opencart:before {
content: "\f23d"; }
.fa-openid:before {
content: "\f19b"; }
.fa-opera:before {
content: "\f26a"; }
.fa-optin-monster:before {
content: "\f23c"; }
.fa-orcid:before {
content: "\f8d2"; }
.fa-osi:before {
content: "\f41a"; }
.fa-otter:before {
content: "\f700"; }
.fa-outdent:before {
content: "\f03b"; }
.fa-page4:before {
content: "\f3d7"; }
.fa-pagelines:before {
content: "\f18c"; }
.fa-pager:before {
content: "\f815"; }
.fa-paint-brush:before {
content: "\f1fc"; }
.fa-paint-roller:before {
content: "\f5aa"; }
.fa-palette:before {
content: "\f53f"; }
.fa-palfed:before {
content: "\f3d8"; }
.fa-pallet:before {
content: "\f482"; }
.fa-paper-plane:before {
content: "\f1d8"; }
.fa-paperclip:before {
content: "\f0c6"; }
.fa-parachute-box:before {
content: "\f4cd"; }
.fa-paragraph:before {
content: "\f1dd"; }
.fa-parking:before {
content: "\f540"; }
.fa-passport:before {
content: "\f5ab"; }
.fa-pastafarianism:before {
content: "\f67b"; }
.fa-paste:before {
content: "\f0ea"; }
.fa-patreon:before {
content: "\f3d9"; }
.fa-pause:before {
content: "\f04c"; }
.fa-pause-circle:before {
content: "\f28b"; }
.fa-paw:before {
content: "\f1b0"; }
.fa-paypal:before {
content: "\f1ed"; }
.fa-peace:before {
content: "\f67c"; }
.fa-pen:before {
content: "\f304"; }
.fa-pen-alt:before {
content: "\f305"; }
.fa-pen-fancy:before {
content: "\f5ac"; }
.fa-pen-nib:before {
content: "\f5ad"; }
.fa-pen-square:before {
content: "\f14b"; }
.fa-pencil-alt:before {
content: "\f303"; }
.fa-pencil-ruler:before {
content: "\f5ae"; }
.fa-penny-arcade:before {
content: "\f704"; }
.fa-people-arrows:before {
content: "\e068"; }
.fa-people-carry:before {
content: "\f4ce"; }
.fa-pepper-hot:before {
content: "\f816"; }
.fa-percent:before {
content: "\f295"; }
.fa-percentage:before {
content: "\f541"; }
.fa-periscope:before {
content: "\f3da"; }
.fa-person-booth:before {
content: "\f756"; }
.fa-phabricator:before {
content: "\f3db"; }
.fa-phoenix-framework:before {
content: "\f3dc"; }
.fa-phoenix-squadron:before {
content: "\f511"; }
.fa-phone:before {
content: "\f095"; }
.fa-phone-alt:before {
content: "\f879"; }
.fa-phone-slash:before {
content: "\f3dd"; }
.fa-phone-square:before {
content: "\f098"; }
.fa-phone-square-alt:before {
content: "\f87b"; }
.fa-phone-volume:before {
content: "\f2a0"; }
.fa-photo-video:before {
content: "\f87c"; }
.fa-php:before {
content: "\f457"; }
.fa-pied-piper:before {
content: "\f2ae"; }
.fa-pied-piper-alt:before {
content: "\f1a8"; }
.fa-pied-piper-hat:before {
content: "\f4e5"; }
.fa-pied-piper-pp:before {
content: "\f1a7"; }
.fa-pied-piper-square:before {
content: "\e01e"; }
.fa-piggy-bank:before {
content: "\f4d3"; }
.fa-pills:before {
content: "\f484"; }
.fa-pinterest:before {
content: "\f0d2"; }
.fa-pinterest-p:before {
content: "\f231"; }
.fa-pinterest-square:before {
content: "\f0d3"; }
.fa-pizza-slice:before {
content: "\f818"; }
.fa-place-of-worship:before {
content: "\f67f"; }
.fa-plane:before {
content: "\f072"; }
.fa-plane-arrival:before {
content: "\f5af"; }
.fa-plane-departure:before {
content: "\f5b0"; }
.fa-plane-slash:before {
content: "\e069"; }
.fa-play:before {
content: "\f04b"; }
.fa-play-circle:before {
content: "\f144"; }
.fa-playstation:before {
content: "\f3df"; }
.fa-plug:before {
content: "\f1e6"; }
.fa-plus:before {
content: "\f067"; }
.fa-plus-circle:before {
content: "\f055"; }
.fa-plus-square:before {
content: "\f0fe"; }
.fa-podcast:before {
content: "\f2ce"; }
.fa-poll:before {
content: "\f681"; }
.fa-poll-h:before {
content: "\f682"; }
.fa-poo:before {
content: "\f2fe"; }
.fa-poo-storm:before {
content: "\f75a"; }
.fa-poop:before {
content: "\f619"; }
.fa-portrait:before {
content: "\f3e0"; }
.fa-pound-sign:before {
content: "\f154"; }
.fa-power-off:before {
content: "\f011"; }
.fa-pray:before {
content: "\f683"; }
.fa-praying-hands:before {
content: "\f684"; }
.fa-prescription:before {
content: "\f5b1"; }
.fa-prescription-bottle:before {
content: "\f485"; }
.fa-prescription-bottle-alt:before {
content: "\f486"; }
.fa-print:before {
content: "\f02f"; }
.fa-procedures:before {
content: "\f487"; }
.fa-product-hunt:before {
content: "\f288"; }
.fa-project-diagram:before {
content: "\f542"; }
.fa-pump-medical:before {
content: "\e06a"; }
.fa-pump-soap:before {
content: "\e06b"; }
.fa-pushed:before {
content: "\f3e1"; }
.fa-puzzle-piece:before {
content: "\f12e"; }
.fa-python:before {
content: "\f3e2"; }
.fa-qq:before {
content: "\f1d6"; }
.fa-qrcode:before {
content: "\f029"; }
.fa-question:before {
content: "\f128"; }
.fa-question-circle:before {
content: "\f059"; }
.fa-quidditch:before {
content: "\f458"; }
.fa-quinscape:before {
content: "\f459"; }
.fa-quora:before {
content: "\f2c4"; }
.fa-quote-left:before {
content: "\f10d"; }
.fa-quote-right:before {
content: "\f10e"; }
.fa-quran:before {
content: "\f687"; }
.fa-r-project:before {
content: "\f4f7"; }
.fa-radiation:before {
content: "\f7b9"; }
.fa-radiation-alt:before {
content: "\f7ba"; }
.fa-rainbow:before {
content: "\f75b"; }
.fa-random:before {
content: "\f074"; }
.fa-raspberry-pi:before {
content: "\f7bb"; }
.fa-ravelry:before {
content: "\f2d9"; }
.fa-react:before {
content: "\f41b"; }
.fa-reacteurope:before {
content: "\f75d"; }
.fa-readme:before {
content: "\f4d5"; }
.fa-rebel:before {
content: "\f1d0"; }
.fa-receipt:before {
content: "\f543"; }
.fa-record-vinyl:before {
content: "\f8d9"; }
.fa-recycle:before {
content: "\f1b8"; }
.fa-red-river:before {
content: "\f3e3"; }
.fa-reddit:before {
content: "\f1a1"; }
.fa-reddit-alien:before {
content: "\f281"; }
.fa-reddit-square:before {
content: "\f1a2"; }
.fa-redhat:before {
content: "\f7bc"; }
.fa-redo:before {
content: "\f01e"; }
.fa-redo-alt:before {
content: "\f2f9"; }
.fa-registered:before {
content: "\f25d"; }
.fa-remove-format:before {
content: "\f87d"; }
.fa-renren:before {
content: "\f18b"; }
.fa-reply:before {
content: "\f3e5"; }
.fa-reply-all:before {
content: "\f122"; }
.fa-replyd:before {
content: "\f3e6"; }
.fa-republican:before {
content: "\f75e"; }
.fa-researchgate:before {
content: "\f4f8"; }
.fa-resolving:before {
content: "\f3e7"; }
.fa-restroom:before {
content: "\f7bd"; }
.fa-retweet:before {
content: "\f079"; }
.fa-rev:before {
content: "\f5b2"; }
.fa-ribbon:before {
content: "\f4d6"; }
.fa-ring:before {
content: "\f70b"; }
.fa-road:before {
content: "\f018"; }
.fa-robot:before {
content: "\f544"; }
.fa-rocket:before {
content: "\f135"; }
.fa-rocketchat:before {
content: "\f3e8"; }
.fa-rockrms:before {
content: "\f3e9"; }
.fa-route:before {
content: "\f4d7"; }
.fa-rss:before {
content: "\f09e"; }
.fa-rss-square:before {
content: "\f143"; }
.fa-ruble-sign:before {
content: "\f158"; }
.fa-ruler:before {
content: "\f545"; }
.fa-ruler-combined:before {
content: "\f546"; }
.fa-ruler-horizontal:before {
content: "\f547"; }
.fa-ruler-vertical:before {
content: "\f548"; }
.fa-running:before {
content: "\f70c"; }
.fa-rupee-sign:before {
content: "\f156"; }
.fa-rust:before {
content: "\e07a"; }
.fa-sad-cry:before {
content: "\f5b3"; }
.fa-sad-tear:before {
content: "\f5b4"; }
.fa-safari:before {
content: "\f267"; }
.fa-salesforce:before {
content: "\f83b"; }
.fa-sass:before {
content: "\f41e"; }
.fa-satellite:before {
content: "\f7bf"; }
.fa-satellite-dish:before {
content: "\f7c0"; }
.fa-save:before {
content: "\f0c7"; }
.fa-schlix:before {
content: "\f3ea"; }
.fa-school:before {
content: "\f549"; }
.fa-screwdriver:before {
content: "\f54a"; }
.fa-scribd:before {
content: "\f28a"; }
.fa-scroll:before {
content: "\f70e"; }
.fa-sd-card:before {
content: "\f7c2"; }
.fa-search:before {
content: "\f002"; }
.fa-search-dollar:before {
content: "\f688"; }
.fa-search-location:before {
content: "\f689"; }
.fa-search-minus:before {
content: "\f010"; }
.fa-search-plus:before {
content: "\f00e"; }
.fa-searchengin:before {
content: "\f3eb"; }
.fa-seedling:before {
content: "\f4d8"; }
.fa-sellcast:before {
content: "\f2da"; }
.fa-sellsy:before {
content: "\f213"; }
.fa-server:before {
content: "\f233"; }
.fa-servicestack:before {
content: "\f3ec"; }
.fa-shapes:before {
content: "\f61f"; }
.fa-share:before {
content: "\f064"; }
.fa-share-alt:before {
content: "\f1e0"; }
.fa-share-alt-square:before {
content: "\f1e1"; }
.fa-share-square:before {
content: "\f14d"; }
.fa-shekel-sign:before {
content: "\f20b"; }
.fa-shield-alt:before {
content: "\f3ed"; }
.fa-shield-virus:before {
content: "\e06c"; }
.fa-ship:before {
content: "\f21a"; }
.fa-shipping-fast:before {
content: "\f48b"; }
.fa-shirtsinbulk:before {
content: "\f214"; }
.fa-shoe-prints:before {
content: "\f54b"; }
.fa-shopify:before {
content: "\e057"; }
.fa-shopping-bag:before {
content: "\f290"; }
.fa-shopping-basket:before {
content: "\f291"; }
.fa-shopping-cart:before {
content: "\f07a"; }
.fa-shopware:before {
content: "\f5b5"; }
.fa-shower:before {
content: "\f2cc"; }
.fa-shuttle-van:before {
content: "\f5b6"; }
.fa-sign:before {
content: "\f4d9"; }
.fa-sign-in-alt:before {
content: "\f2f6"; }
.fa-sign-language:before {
content: "\f2a7"; }
.fa-sign-out-alt:before {
content: "\f2f5"; }
.fa-signal:before {
content: "\f012"; }
.fa-signature:before {
content: "\f5b7"; }
.fa-sim-card:before {
content: "\f7c4"; }
.fa-simplybuilt:before {
content: "\f215"; }
.fa-sink:before {
content: "\e06d"; }
.fa-sistrix:before {
content: "\f3ee"; }
.fa-sitemap:before {
content: "\f0e8"; }
.fa-sith:before {
content: "\f512"; }
.fa-skating:before {
content: "\f7c5"; }
.fa-sketch:before {
content: "\f7c6"; }
.fa-skiing:before {
content: "\f7c9"; }
.fa-skiing-nordic:before {
content: "\f7ca"; }
.fa-skull:before {
content: "\f54c"; }
.fa-skull-crossbones:before {
content: "\f714"; }
.fa-skyatlas:before {
content: "\f216"; }
.fa-skype:before {
content: "\f17e"; }
.fa-slack:before {
content: "\f198"; }
.fa-slack-hash:before {
content: "\f3ef"; }
.fa-slash:before {
content: "\f715"; }
.fa-sleigh:before {
content: "\f7cc"; }
.fa-sliders-h:before {
content: "\f1de"; }
.fa-slideshare:before {
content: "\f1e7"; }
.fa-smile:before {
content: "\f118"; }
.fa-smile-beam:before {
content: "\f5b8"; }
.fa-smile-wink:before {
content: "\f4da"; }
.fa-smog:before {
content: "\f75f"; }
.fa-smoking:before {
content: "\f48d"; }
.fa-smoking-ban:before {
content: "\f54d"; }
.fa-sms:before {
content: "\f7cd"; }
.fa-snapchat:before {
content: "\f2ab"; }
.fa-snapchat-ghost:before {
content: "\f2ac"; }
.fa-snapchat-square:before {
content: "\f2ad"; }
.fa-snowboarding:before {
content: "\f7ce"; }
.fa-snowflake:before {
content: "\f2dc"; }
.fa-snowman:before {
content: "\f7d0"; }
.fa-snowplow:before {
content: "\f7d2"; }
.fa-soap:before {
content: "\e06e"; }
.fa-socks:before {
content: "\f696"; }
.fa-solar-panel:before {
content: "\f5ba"; }
.fa-sort:before {
content: "\f0dc"; }
.fa-sort-alpha-down:before {
content: "\f15d"; }
.fa-sort-alpha-down-alt:before {
content: "\f881"; }
.fa-sort-alpha-up:before {
content: "\f15e"; }
.fa-sort-alpha-up-alt:before {
content: "\f882"; }
.fa-sort-amount-down:before {
content: "\f160"; }
.fa-sort-amount-down-alt:before {
content: "\f884"; }
.fa-sort-amount-up:before {
content: "\f161"; }
.fa-sort-amount-up-alt:before {
content: "\f885"; }
.fa-sort-down:before {
content: "\f0dd"; }
.fa-sort-numeric-down:before {
content: "\f162"; }
.fa-sort-numeric-down-alt:before {
content: "\f886"; }
.fa-sort-numeric-up:before {
content: "\f163"; }
.fa-sort-numeric-up-alt:before {
content: "\f887"; }
.fa-sort-up:before {
content: "\f0de"; }
.fa-soundcloud:before {
content: "\f1be"; }
.fa-sourcetree:before {
content: "\f7d3"; }
.fa-spa:before {
content: "\f5bb"; }
.fa-space-shuttle:before {
content: "\f197"; }
.fa-speakap:before {
content: "\f3f3"; }
.fa-speaker-deck:before {
content: "\f83c"; }
.fa-spell-check:before {
content: "\f891"; }
.fa-spider:before {
content: "\f717"; }
.fa-spinner:before {
content: "\f110"; }
.fa-splotch:before {
content: "\f5bc"; }
.fa-spotify:before {
content: "\f1bc"; }
.fa-spray-can:before {
content: "\f5bd"; }
.fa-square:before {
content: "\f0c8"; }
.fa-square-full:before {
content: "\f45c"; }
.fa-square-root-alt:before {
content: "\f698"; }
.fa-squarespace:before {
content: "\f5be"; }
.fa-stack-exchange:before {
content: "\f18d"; }
.fa-stack-overflow:before {
content: "\f16c"; }
.fa-stackpath:before {
content: "\f842"; }
.fa-stamp:before {
content: "\f5bf"; }
.fa-star:before {
content: "\f005"; }
.fa-star-and-crescent:before {
content: "\f699"; }
.fa-star-half:before {
content: "\f089"; }
.fa-star-half-alt:before {
content: "\f5c0"; }
.fa-star-of-david:before {
content: "\f69a"; }
.fa-star-of-life:before {
content: "\f621"; }
.fa-staylinked:before {
content: "\f3f5"; }
.fa-steam:before {
content: "\f1b6"; }
.fa-steam-square:before {
content: "\f1b7"; }
.fa-steam-symbol:before {
content: "\f3f6"; }
.fa-step-backward:before {
content: "\f048"; }
.fa-step-forward:before {
content: "\f051"; }
.fa-stethoscope:before {
content: "\f0f1"; }
.fa-sticker-mule:before {
content: "\f3f7"; }
.fa-sticky-note:before {
content: "\f249"; }
.fa-stop:before {
content: "\f04d"; }
.fa-stop-circle:before {
content: "\f28d"; }
.fa-stopwatch:before {
content: "\f2f2"; }
.fa-stopwatch-20:before {
content: "\e06f"; }
.fa-store:before {
content: "\f54e"; }
.fa-store-alt:before {
content: "\f54f"; }
.fa-store-alt-slash:before {
content: "\e070"; }
.fa-store-slash:before {
content: "\e071"; }
.fa-strava:before {
content: "\f428"; }
.fa-stream:before {
content: "\f550"; }
.fa-street-view:before {
content: "\f21d"; }
.fa-strikethrough:before {
content: "\f0cc"; }
.fa-stripe:before {
content: "\f429"; }
.fa-stripe-s:before {
content: "\f42a"; }
.fa-stroopwafel:before {
content: "\f551"; }
.fa-studiovinari:before {
content: "\f3f8"; }
.fa-stumbleupon:before {
content: "\f1a4"; }
.fa-stumbleupon-circle:before {
content: "\f1a3"; }
.fa-subscript:before {
content: "\f12c"; }
.fa-subway:before {
content: "\f239"; }
.fa-suitcase:before {
content: "\f0f2"; }
.fa-suitcase-rolling:before {
content: "\f5c1"; }
.fa-sun:before {
content: "\f185"; }
.fa-superpowers:before {
content: "\f2dd"; }
.fa-superscript:before {
content: "\f12b"; }
.fa-supple:before {
content: "\f3f9"; }
.fa-surprise:before {
content: "\f5c2"; }
.fa-suse:before {
content: "\f7d6"; }
.fa-swatchbook:before {
content: "\f5c3"; }
.fa-swift:before {
content: "\f8e1"; }
.fa-swimmer:before {
content: "\f5c4"; }
.fa-swimming-pool:before {
content: "\f5c5"; }
.fa-symfony:before {
content: "\f83d"; }
.fa-synagogue:before {
content: "\f69b"; }
.fa-sync:before {
content: "\f021"; }
.fa-sync-alt:before {
content: "\f2f1"; }
.fa-syringe:before {
content: "\f48e"; }
.fa-table:before {
content: "\f0ce"; }
.fa-table-tennis:before {
content: "\f45d"; }
.fa-tablet:before {
content: "\f10a"; }
.fa-tablet-alt:before {
content: "\f3fa"; }
.fa-tablets:before {
content: "\f490"; }
.fa-tachometer-alt:before {
content: "\f3fd"; }
.fa-tag:before {
content: "\f02b"; }
.fa-tags:before {
content: "\f02c"; }
.fa-tape:before {
content: "\f4db"; }
.fa-tasks:before {
content: "\f0ae"; }
.fa-taxi:before {
content: "\f1ba"; }
.fa-teamspeak:before {
content: "\f4f9"; }
.fa-teeth:before {
content: "\f62e"; }
.fa-teeth-open:before {
content: "\f62f"; }
.fa-telegram:before {
content: "\f2c6"; }
.fa-telegram-plane:before {
content: "\f3fe"; }
.fa-temperature-high:before {
content: "\f769"; }
.fa-temperature-low:before {
content: "\f76b"; }
.fa-tencent-weibo:before {
content: "\f1d5"; }
.fa-tenge:before {
content: "\f7d7"; }
.fa-terminal:before {
content: "\f120"; }
.fa-text-height:before {
content: "\f034"; }
.fa-text-width:before {
content: "\f035"; }
.fa-th:before {
content: "\f00a"; }
.fa-th-large:before {
content: "\f009"; }
.fa-th-list:before {
content: "\f00b"; }
.fa-the-red-yeti:before {
content: "\f69d"; }
.fa-theater-masks:before {
content: "\f630"; }
.fa-themeco:before {
content: "\f5c6"; }
.fa-themeisle:before {
content: "\f2b2"; }
.fa-thermometer:before {
content: "\f491"; }
.fa-thermometer-empty:before {
content: "\f2cb"; }
.fa-thermometer-full:before {
content: "\f2c7"; }
.fa-thermometer-half:before {
content: "\f2c9"; }
.fa-thermometer-quarter:before {
content: "\f2ca"; }
.fa-thermometer-three-quarters:before {
content: "\f2c8"; }
.fa-think-peaks:before {
content: "\f731"; }
.fa-thumbs-down:before {
content: "\f165"; }
.fa-thumbs-up:before {
content: "\f164"; }
.fa-thumbtack:before {
content: "\f08d"; }
.fa-ticket-alt:before {
content: "\f3ff"; }
.fa-tiktok:before {
content: "\e07b"; }
.fa-times:before {
content: "\f00d"; }
.fa-times-circle:before {
content: "\f057"; }
.fa-tint:before {
content: "\f043"; }
.fa-tint-slash:before {
content: "\f5c7"; }
.fa-tired:before {
content: "\f5c8"; }
.fa-toggle-off:before {
content: "\f204"; }
.fa-toggle-on:before {
content: "\f205"; }
.fa-toilet:before {
content: "\f7d8"; }
.fa-toilet-paper:before {
content: "\f71e"; }
.fa-toilet-paper-slash:before {
content: "\e072"; }
.fa-toolbox:before {
content: "\f552"; }
.fa-tools:before {
content: "\f7d9"; }
.fa-tooth:before {
content: "\f5c9"; }
.fa-torah:before {
content: "\f6a0"; }
.fa-torii-gate:before {
content: "\f6a1"; }
.fa-tractor:before {
content: "\f722"; }
.fa-trade-federation:before {
content: "\f513"; }
.fa-trademark:before {
content: "\f25c"; }
.fa-traffic-light:before {
content: "\f637"; }
.fa-trailer:before {
content: "\e041"; }
.fa-train:before {
content: "\f238"; }
.fa-tram:before {
content: "\f7da"; }
.fa-transgender:before {
content: "\f224"; }
.fa-transgender-alt:before {
content: "\f225"; }
.fa-trash:before {
content: "\f1f8"; }
.fa-trash-alt:before {
content: "\f2ed"; }
.fa-trash-restore:before {
content: "\f829"; }
.fa-trash-restore-alt:before {
content: "\f82a"; }
.fa-tree:before {
content: "\f1bb"; }
.fa-trello:before {
content: "\f181"; }
.fa-tripadvisor:before {
content: "\f262"; }
.fa-trophy:before {
content: "\f091"; }
.fa-truck:before {
content: "\f0d1"; }
.fa-truck-loading:before {
content: "\f4de"; }
.fa-truck-monster:before {
content: "\f63b"; }
.fa-truck-moving:before {
content: "\f4df"; }
.fa-truck-pickup:before {
content: "\f63c"; }
.fa-tshirt:before {
content: "\f553"; }
.fa-tty:before {
content: "\f1e4"; }
.fa-tumblr:before {
content: "\f173"; }
.fa-tumblr-square:before {
content: "\f174"; }
.fa-tv:before {
content: "\f26c"; }
.fa-twitch:before {
content: "\f1e8"; }
.fa-twitter:before {
content: "\f099"; }
.fa-twitter-square:before {
content: "\f081"; }
.fa-typo3:before {
content: "\f42b"; }
.fa-uber:before {
content: "\f402"; }
.fa-ubuntu:before {
content: "\f7df"; }
.fa-uikit:before {
content: "\f403"; }
.fa-umbraco:before {
content: "\f8e8"; }
.fa-umbrella:before {
content: "\f0e9"; }
.fa-umbrella-beach:before {
content: "\f5ca"; }
.fa-underline:before {
content: "\f0cd"; }
.fa-undo:before {
content: "\f0e2"; }
.fa-undo-alt:before {
content: "\f2ea"; }
.fa-uniregistry:before {
content: "\f404"; }
.fa-unity:before {
content: "\e049"; }
.fa-universal-access:before {
content: "\f29a"; }
.fa-university:before {
content: "\f19c"; }
.fa-unlink:before {
content: "\f127"; }
.fa-unlock:before {
content: "\f09c"; }
.fa-unlock-alt:before {
content: "\f13e"; }
.fa-unsplash:before {
content: "\e07c"; }
.fa-untappd:before {
content: "\f405"; }
.fa-upload:before {
content: "\f093"; }
.fa-ups:before {
content: "\f7e0"; }
.fa-usb:before {
content: "\f287"; }
.fa-user:before {
content: "\f007"; }
.fa-user-alt:before {
content: "\f406"; }
.fa-user-alt-slash:before {
content: "\f4fa"; }
.fa-user-astronaut:before {
content: "\f4fb"; }
.fa-user-check:before {
content: "\f4fc"; }
.fa-user-circle:before {
content: "\f2bd"; }
.fa-user-clock:before {
content: "\f4fd"; }
.fa-user-cog:before {
content: "\f4fe"; }
.fa-user-edit:before {
content: "\f4ff"; }
.fa-user-friends:before {
content: "\f500"; }
.fa-user-graduate:before {
content: "\f501"; }
.fa-user-injured:before {
content: "\f728"; }
.fa-user-lock:before {
content: "\f502"; }
.fa-user-md:before {
content: "\f0f0"; }
.fa-user-minus:before {
content: "\f503"; }
.fa-user-ninja:before {
content: "\f504"; }
.fa-user-nurse:before {
content: "\f82f"; }
.fa-user-plus:before {
content: "\f234"; }
.fa-user-secret:before {
content: "\f21b"; }
.fa-user-shield:before {
content: "\f505"; }
.fa-user-slash:before {
content: "\f506"; }
.fa-user-tag:before {
content: "\f507"; }
.fa-user-tie:before {
content: "\f508"; }
.fa-user-times:before {
content: "\f235"; }
.fa-users:before {
content: "\f0c0"; }
.fa-users-cog:before {
content: "\f509"; }
.fa-users-slash:before {
content: "\e073"; }
.fa-usps:before {
content: "\f7e1"; }
.fa-ussunnah:before {
content: "\f407"; }
.fa-utensil-spoon:before {
content: "\f2e5"; }
.fa-utensils:before {
content: "\f2e7"; }
.fa-vaadin:before {
content: "\f408"; }
.fa-vector-square:before {
content: "\f5cb"; }
.fa-venus:before {
content: "\f221"; }
.fa-venus-double:before {
content: "\f226"; }
.fa-venus-mars:before {
content: "\f228"; }
.fa-viacoin:before {
content: "\f237"; }
.fa-viadeo:before {
content: "\f2a9"; }
.fa-viadeo-square:before {
content: "\f2aa"; }
.fa-vial:before {
content: "\f492"; }
.fa-vials:before {
content: "\f493"; }
.fa-viber:before {
content: "\f409"; }
.fa-video:before {
content: "\f03d"; }
.fa-video-slash:before {
content: "\f4e2"; }
.fa-vihara:before {
content: "\f6a7"; }
.fa-vimeo:before {
content: "\f40a"; }
.fa-vimeo-square:before {
content: "\f194"; }
.fa-vimeo-v:before {
content: "\f27d"; }
.fa-vine:before {
content: "\f1ca"; }
.fa-virus:before {
content: "\e074"; }
.fa-virus-slash:before {
content: "\e075"; }
.fa-viruses:before {
content: "\e076"; }
.fa-vk:before {
content: "\f189"; }
.fa-vnv:before {
content: "\f40b"; }
.fa-voicemail:before {
content: "\f897"; }
.fa-volleyball-ball:before {
content: "\f45f"; }
.fa-volume-down:before {
content: "\f027"; }
.fa-volume-mute:before {
content: "\f6a9"; }
.fa-volume-off:before {
content: "\f026"; }
.fa-volume-up:before {
content: "\f028"; }
.fa-vote-yea:before {
content: "\f772"; }
.fa-vr-cardboard:before {
content: "\f729"; }
.fa-vuejs:before {
content: "\f41f"; }
.fa-walking:before {
content: "\f554"; }
.fa-wallet:before {
content: "\f555"; }
.fa-warehouse:before {
content: "\f494"; }
.fa-water:before {
content: "\f773"; }
.fa-wave-square:before {
content: "\f83e"; }
.fa-waze:before {
content: "\f83f"; }
.fa-weebly:before {
content: "\f5cc"; }
.fa-weibo:before {
content: "\f18a"; }
.fa-weight:before {
content: "\f496"; }
.fa-weight-hanging:before {
content: "\f5cd"; }
.fa-weixin:before {
content: "\f1d7"; }
.fa-whatsapp:before {
content: "\f232"; }
.fa-whatsapp-square:before {
content: "\f40c"; }
.fa-wheelchair:before {
content: "\f193"; }
.fa-whmcs:before {
content: "\f40d"; }
.fa-wifi:before {
content: "\f1eb"; }
.fa-wikipedia-w:before {
content: "\f266"; }
.fa-wind:before {
content: "\f72e"; }
.fa-window-close:before {
content: "\f410"; }
.fa-window-maximize:before {
content: "\f2d0"; }
.fa-window-minimize:before {
content: "\f2d1"; }
.fa-window-restore:before {
content: "\f2d2"; }
.fa-windows:before {
content: "\f17a"; }
.fa-wine-bottle:before {
content: "\f72f"; }
.fa-wine-glass:before {
content: "\f4e3"; }
.fa-wine-glass-alt:before {
content: "\f5ce"; }
.fa-wix:before {
content: "\f5cf"; }
.fa-wizards-of-the-coast:before {
content: "\f730"; }
.fa-wolf-pack-battalion:before {
content: "\f514"; }
.fa-won-sign:before {
content: "\f159"; }
.fa-wordpress:before {
content: "\f19a"; }
.fa-wordpress-simple:before {
content: "\f411"; }
.fa-wpbeginner:before {
content: "\f297"; }
.fa-wpexplorer:before {
content: "\f2de"; }
.fa-wpforms:before {
content: "\f298"; }
.fa-wpressr:before {
content: "\f3e4"; }
.fa-wrench:before {
content: "\f0ad"; }
.fa-x-ray:before {
content: "\f497"; }
.fa-xbox:before {
content: "\f412"; }
.fa-xing:before {
content: "\f168"; }
.fa-xing-square:before {
content: "\f169"; }
.fa-y-combinator:before {
content: "\f23b"; }
.fa-yahoo:before {
content: "\f19e"; }
.fa-yammer:before {
content: "\f840"; }
.fa-yandex:before {
content: "\f413"; }
.fa-yandex-international:before {
content: "\f414"; }
.fa-yarn:before {
content: "\f7e3"; }
.fa-yelp:before {
content: "\f1e9"; }
.fa-yen-sign:before {
content: "\f157"; }
.fa-yin-yang:before {
content: "\f6ad"; }
.fa-yoast:before {
content: "\f2b1"; }
.fa-youtube:before {
content: "\f167"; }
.fa-youtube-square:before {
content: "\f431"; }
.fa-zhihu:before {
content: "\f63f"; }
.sr-only {
border: 0;
clip: rect(0, 0, 0, 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px; }
.sr-only-focusable:active, .sr-only-focusable:focus {
clip: auto;
height: auto;
margin: 0;
overflow: visible;
position: static;
width: auto; }
@font-face {
font-family: 'Font Awesome 5 Brands';
font-style: normal;
font-weight: 400;
font-display: block;
src: url("../fonts/fontawesome/webfonts/fa-brands-400.eot");
src: url("../fonts/fontawesome/webfonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../fonts/fontawesome/webfonts/fa-brands-400.woff2") format("woff2"), url("../fonts/fontawesome/webfonts/fa-brands-400.woff") format("woff"), url("../fonts/fontawesome/webfonts/fa-brands-400.ttf") format("truetype"), url("../fonts/fontawesome/webfonts/fa-brands-400.svg#fontawesome") format("svg"); }
.fab {
font-family: 'Font Awesome 5 Brands';
font-weight: 400; }
@font-face {
font-family: 'Font Awesome 5 Free';
font-style: normal;
font-weight: 400;
font-display: block;
src: url("../fonts/fontawesome/webfonts/fa-regular-400.eot");
src: url("../fonts/fontawesome/webfonts/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("../fonts/fontawesome/webfonts/fa-regular-400.woff2") format("woff2"), url("../fonts/fontawesome/webfonts/fa-regular-400.woff") format("woff"), url("../fonts/fontawesome/webfonts/fa-regular-400.ttf") format("truetype"), url("../fonts/fontawesome/webfonts/fa-regular-400.svg#fontawesome") format("svg"); }
.far {
font-family: 'Font Awesome 5 Free';
font-weight: 400; }
@font-face {
font-family: 'Font Awesome 5 Free';
font-style: normal;
font-weight: 900;
font-display: block;
src: url("../fonts/fontawesome/webfonts/fa-solid-900.eot");
src: url("../fonts/fontawesome/webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../fonts/fontawesome/webfonts/fa-solid-900.woff2") format("woff2"), url("../fonts/fontawesome/webfonts/fa-solid-900.woff") format("woff"), url("../fonts/fontawesome/webfonts/fa-solid-900.ttf") format("truetype"), url("../fonts/fontawesome/webfonts/fa-solid-900.svg#fontawesome") format("svg"); }
.fa,
.fas {
font-family: 'Font Awesome 5 Free';
font-weight: 900; }

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