This commit is contained in:
afornerot 2019-07-23 15:32:35 +02:00
parent c3a3fbfec8
commit 05a2fe97bc
51 changed files with 1225 additions and 988 deletions

View File

@ -112,13 +112,20 @@
<!-- MODULE CRON -->
<variable type="oui/non" name='ninegate_activate_cron' description='Activer le module CRON' mandatory='True'>
<value>oui</value>
</variable>
<!-- MODULE WEBSOCKET -->
<variable type="oui/non" name='ninegate_activate_websocket' description='Activer le module WEBSOCKET' mandatory='True'>
<value>oui</value>
</variable>
<!-- LIMESURVEY -->
<variable type="oui/non" name='ninegate_activate_widlimesurvey' description='Activer le widget Limesurvey' mandatory='True'>
@ -129,9 +136,6 @@
<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' />
<!-- MOODLE -->
<variable type="oui/non" name='ninegate_activate_widmoodle' description='Activer le widget Moodle' mandatory='True'>
<value>non</value>
@ -140,17 +144,12 @@
<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' />
<!-- OPENSONDAGE -->
<variable type="oui/non" name='ninegate_activate_widopensondage' description='Activer le widget Opensondage' mandatory='True'>
<value>non</value>
</variable>
<variable type='string' name='ninegate_widopensondage_url' description='URL complète de votre Opensondage' mandatory='True' />
<!-- PIWIK -->
<variable type="oui/non" name='ninegate_activate_widpiwik' description='Activer le widget Piwik' mandatory='True'>
<value>non</value>
@ -158,7 +157,6 @@
<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' />
<!-- WORDPRESS -->
<variable type="oui/non" name='ninegate_activate_widwordpress' description='Activer le widget Wordpress' mandatory='True'>
<value>non</value>
@ -168,6 +166,17 @@
<!-- WEBSOCKET -->
<variable type='string' name='ninegate_websocket_url' description='Host du serveur Websocket' mandatory='True' />
<variable type='string' name='ninegate_websocket_portexterne' description='Pot de commuinication externe du serveur Websocket' mandatory='True' >
<value>5555</value>
</variable>
<variable type='string' name='ninegate_websocket_portinterne' description='Pot de commuinication externe du serveur Websocket' mandatory='True'>
<value>5556</value>
</variable>
<!-- EMAIL -->
<variable type='string' name='ninegate_noreply' description='Adresse mail utilisé pour le noreply' mandatory='True' />
<variable type='string' name='ninegate_smtphost' description='Host du serveur SMTP' />
@ -193,6 +202,7 @@
<separator name="ninegate_niveau01label">Paramètres associés aux look de l'application</separator>
<separator name="ninegate_activate_portal">Paramètres associés aux modules à activer</separator>
<separator name="ninegate_activate_widlimesurvey">Paramètres associés au Portail</separator>
<separator name="ninegate_websocket_url">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>
</separators>
@ -249,6 +259,7 @@
<target type='variable'>ninegate_activate_notice</target>
<target type='variable'>ninegate_activate_syncenvole</target>
<target type='variable'>ninegate_activate_cron</target>
<target type='variable'>ninegate_activate_websocket</target>
<target type='variable'>ninegate_noreply</target>
<target type='variable'>ninegate_smtphost</target>
@ -365,6 +376,24 @@
<!-- 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>
</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 LIMESURVEY -->
<fill name='calc_multi_condition' target='ninegate_activate_widlimesurvey'>
<param>oui</param>

View File

@ -136,10 +136,14 @@ gos_web_socket:
shared_config: true
server:
port: %websocket_port% #The port the socket server will listen on
host: %weburl% #The host ip to bind to
host: %websocket_host% #The host ip to bind to
router:
resources:
- "@CadolesWebsocketBundle/Resources/config/topic.yml"
pushers:
wamp:
host: %websocket_host%
port: %websocket_portinterne%
# ckeditor configuration
ivory_ck_editor:

View File

@ -41,7 +41,10 @@ security:
check_path: /saml/acs
access_control:
- { path: ^/websocket, roles: [ROLE_ADMIN, ROLE_MODO, ROLE_USER] }
- { path: ^/user, roles: [ROLE_ADMIN, ROLE_MODO, ROLE_USER] }
- { path: ^/websocket, roles: [ROLE_ADMIN, ROLE_MODO, ROLE_ANIM, ROLE_USER] }
- { path: ^/user/group/submit, roles: [ROLE_ADMIN, ROLE_MODO, ROLE_ANIM] }
- { path: ^/user/group/update, roles: [ROLE_ADMIN, ROLE_MODO, ROLE_ANIM] }
- { path: ^/user/group/delete, roles: [ROLE_ADMIN, ROLE_MODO, ROLE_ANIM] }
- { path: ^/user, roles: [ROLE_ADMIN, ROLE_MODO, ROLE_ANIM, ROLE_USER] }
- { path: ^/config, roles: [ROLE_ADMIN, ROLE_MODO] }

View File

@ -9,6 +9,7 @@ twig:
cron_activate: %cron_activate%
portal_activate: %portal_activate%
item_activate: %item_activate%
websocket_activate: %websocket_activate%
activate_widsonde: %activate_widsonde%
widsonde_url: %widsonde_url%

View File

@ -22,6 +22,7 @@
"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",

View File

@ -4,9 +4,62 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"hash": "f60fc0c21429506c604cf52a1c57f8b1",
"content-hash": "ad29a4c36418b2be7c6f60297d160623",
"hash": "0430b523c39e2d254cfe1fb91666119b",
"content-hash": "36178f772c0f0ff6bd5ac90edd474c25",
"packages": [
{
"name": "cboden/ratchet",
"version": "v0.4.1",
"source": {
"type": "git",
"url": "https://github.com/ratchetphp/Ratchet.git",
"reference": "0d31f3a8ad4795fd48397712709e55cd07f51360"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ratchetphp/Ratchet/zipball/0d31f3a8ad4795fd48397712709e55cd07f51360",
"reference": "0d31f3a8ad4795fd48397712709e55cd07f51360",
"shasum": ""
},
"require": {
"guzzlehttp/psr7": "^1.0",
"php": ">=5.4.2",
"ratchet/rfc6455": "^0.2",
"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"
},
"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"
}
],
"description": "PHP WebSocket library",
"homepage": "http://socketo.me",
"keywords": [
"Ratchet",
"WebSockets",
"server",
"sockets",
"websocket"
],
"time": "2017-12-12 00:49:31"
},
{
"name": "composer/ca-bundle",
"version": "1.1.4",
@ -589,16 +642,16 @@
},
{
"name": "doctrine/doctrine-bundle",
"version": "1.10.2",
"version": "1.10.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineBundle.git",
"reference": "1f99e6645030542079c57d4680601a4a8778a1bd"
"reference": "907dafe1ba73c4c3b0f0ae8cfc1b9958c002e58c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/1f99e6645030542079c57d4680601a4a8778a1bd",
"reference": "1f99e6645030542079c57d4680601a4a8778a1bd",
"url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/907dafe1ba73c4c3b0f0ae8cfc1b9958c002e58c",
"reference": "907dafe1ba73c4c3b0f0ae8cfc1b9958c002e58c",
"shasum": ""
},
"require": {
@ -670,7 +723,7 @@
"orm",
"persistence"
],
"time": "2019-02-06 13:18:04"
"time": "2019-04-04 08:03:53"
},
{
"name": "doctrine/doctrine-cache-bundle",
@ -1004,21 +1057,24 @@
},
{
"name": "doctrine/lexer",
"version": "v1.0.1",
"version": "1.0.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
"reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
"reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
"reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8",
"reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8",
"shasum": ""
},
"require": {
"php": ">=5.3.2"
},
"require-dev": {
"phpunit/phpunit": "^4.5"
},
"type": "library",
"extra": {
"branch-alias": {
@ -1026,8 +1082,8 @@
}
},
"autoload": {
"psr-0": {
"Doctrine\\Common\\Lexer\\": "lib/"
"psr-4": {
"Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
}
},
"notification-url": "https://packagist.org/downloads/",
@ -1048,13 +1104,16 @@
"email": "schmittjoh@gmail.com"
}
],
"description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
"homepage": "http://www.doctrine-project.org",
"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"
"parser",
"php"
],
"time": "2014-09-09 13:34:57"
"time": "2019-06-08 11:03:04"
},
{
"name": "doctrine/migrations",
@ -1330,30 +1389,25 @@
},
{
"name": "evenement/evenement",
"version": "v2.1.0",
"version": "v3.0.1",
"source": {
"type": "git",
"url": "https://github.com/igorw/evenement.git",
"reference": "6ba9a777870ab49f417e703229d53931ed40fd7a"
"reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/igorw/evenement/zipball/6ba9a777870ab49f417e703229d53931ed40fd7a",
"reference": "6ba9a777870ab49f417e703229d53931ed40fd7a",
"url": "https://api.github.com/repos/igorw/evenement/zipball/531bfb9d15f8aa57454f5f0285b18bec903b8fb7",
"reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7",
"shasum": ""
},
"require": {
"php": ">=5.4.0"
"php": ">=7.0"
},
"require-dev": {
"phpunit/phpunit": "^6.0||^5.7||^4.8.35"
"phpunit/phpunit": "^6.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0-dev"
}
},
"autoload": {
"psr-0": {
"Evenement": "src"
@ -1374,7 +1428,7 @@
"event-dispatcher",
"event-emitter"
],
"time": "2017-07-17 17:39:19"
"time": "2017-07-23 21:35:13"
},
{
"name": "fig/link-util",
@ -1538,137 +1592,39 @@
],
"time": "2018-10-04 17:09:23"
},
{
"name": "gos/ratchet",
"version": "v0.3.6",
"source": {
"type": "git",
"url": "https://github.com/GeniusesOfSymfony/Ratchet.git",
"reference": "f72ee4f70f24da1fc232537088e6c368ae4211e0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/GeniusesOfSymfony/Ratchet/zipball/f72ee4f70f24da1fc232537088e6c368ae4211e0",
"reference": "f72ee4f70f24da1fc232537088e6c368ae4211e0",
"shasum": ""
},
"require": {
"guzzle/http": "^3.6",
"php": ">=5.3.9",
"react/socket": "^0.3 || ^0.4",
"symfony/http-foundation": "^2.2|^3.0|^4.0",
"symfony/routing": "^2.2|^3.0|^4.0"
},
"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"
}
],
"description": "PHP WebSocket library",
"homepage": "http://socketo.me",
"keywords": [
"Ratchet",
"WebSockets",
"server",
"sockets"
],
"time": "2017-12-12 16:15:11"
},
{
"name": "gos/ratchet-stack",
"version": "v0.2.0",
"source": {
"type": "git",
"url": "https://github.com/GeniusesOfSymfony/RatchetStack.git",
"reference": "a7dfc817bf8b786c575022e290ab0769dbf09814"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/GeniusesOfSymfony/RatchetStack/zipball/a7dfc817bf8b786c575022e290ab0769dbf09814",
"reference": "a7dfc817bf8b786c575022e290ab0769dbf09814",
"shasum": ""
},
"require": {
"cboden/ratchet": "^0.3|^0.4",
"php": ">=5.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Gos\\Component\\RatchetStack\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Johann Saunier",
"email": "johann_27@hotmail.fr"
}
],
"description": "Ratchet Stack",
"homepage": "https://github.com/GeniusesOfSymfony/RatchetStack",
"keywords": [
"Ratchet",
"application",
"stack"
],
"time": "2018-05-02 13:03:51"
},
{
"name": "gos/web-socket-bundle",
"version": "v1.8.11",
"version": "v1.8.13",
"source": {
"type": "git",
"url": "https://github.com/GeniusesOfSymfony/WebSocketBundle.git",
"reference": "a26b71e9014a73b95ddbb02a813157563a296a48"
"reference": "016f4b49a16731945fc3ee1e0781f53167e393cf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/GeniusesOfSymfony/WebSocketBundle/zipball/a26b71e9014a73b95ddbb02a813157563a296a48",
"reference": "a26b71e9014a73b95ddbb02a813157563a296a48",
"url": "https://api.github.com/repos/GeniusesOfSymfony/WebSocketBundle/zipball/016f4b49a16731945fc3ee1e0781f53167e393cf",
"reference": "016f4b49a16731945fc3ee1e0781f53167e393cf",
"shasum": ""
},
"require": {
"gos/pnctl-event-loop-emitter": "~0.1",
"gos/pubsub-router-bundle": "~0.2",
"gos/ratchet": "~0.3.5",
"gos/ratchet-stack": "~0.1",
"gos/websocket-client": "~0.1.0",
"cboden/ratchet": "^0.4.1",
"gos/pnctl-event-loop-emitter": "^0.1",
"gos/pubsub-router-bundle": "^0.3",
"gos/websocket-client": "^0.1",
"ocramius/proxy-manager": "^1.0|^2.1",
"php": ">=5.4",
"symfony/framework-bundle": "~2.3|~3.0"
},
"replace": {
"cboden/ratchet": "~0.3.0"
"symfony/framework-bundle": "^2.3|^3.0|^4.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8"
},
"suggest": {
"doctrine/cache": "* to use doctrine/cache as a client driver",
"ext-amqp": "*",
"ext-libev": "*",
"ext-libevent": ">=0.0.5",
"ext-zmq": "*",
"ocramius/proxy-manager": "~1.0",
"symfony/cache": ">=3.1 to use symfony/cache as a client driver",
"symfony/proxy-manager-bridge": "~2.3"
},
"type": "symfony-bundle",
@ -1705,7 +1661,7 @@
"io",
"websocket"
],
"time": "2017-09-29 16:00:43"
"time": "2018-07-29 14:31:46"
},
{
"name": "gos/websocket-client",
@ -1864,208 +1820,6 @@
],
"time": "2018-11-20 10:41:34"
},
{
"name": "guzzle/common",
"version": "v3.9.2",
"target-dir": "Guzzle/Common",
"source": {
"type": "git",
"url": "https://github.com/Guzzle3/common.git",
"reference": "2e36af7cf2ce3ea1f2d7c2831843b883a8e7b7dc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Guzzle3/common/zipball/2e36af7cf2ce3ea1f2d7c2831843b883a8e7b7dc",
"reference": "2e36af7cf2ce3ea1f2d7c2831843b883a8e7b7dc",
"shasum": ""
},
"require": {
"php": ">=5.3.2",
"symfony/event-dispatcher": ">=2.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.7-dev"
}
},
"autoload": {
"psr-0": {
"Guzzle\\Common": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "Common libraries used by Guzzle",
"homepage": "http://guzzlephp.org/",
"keywords": [
"collection",
"common",
"event",
"exception"
],
"abandoned": "guzzle/guzzle",
"time": "2014-08-11 04:32:36"
},
{
"name": "guzzle/http",
"version": "v3.9.2",
"target-dir": "Guzzle/Http",
"source": {
"type": "git",
"url": "https://github.com/Guzzle3/http.git",
"reference": "1e8dd1e2ba9dc42332396f39fbfab950b2301dc5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Guzzle3/http/zipball/1e8dd1e2ba9dc42332396f39fbfab950b2301dc5",
"reference": "1e8dd1e2ba9dc42332396f39fbfab950b2301dc5",
"shasum": ""
},
"require": {
"guzzle/common": "self.version",
"guzzle/parser": "self.version",
"guzzle/stream": "self.version",
"php": ">=5.3.2"
},
"suggest": {
"ext-curl": "*"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.7-dev"
}
},
"autoload": {
"psr-0": {
"Guzzle\\Http": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
}
],
"description": "HTTP libraries used by Guzzle",
"homepage": "http://guzzlephp.org/",
"keywords": [
"Guzzle",
"client",
"curl",
"http",
"http client"
],
"abandoned": "guzzle/guzzle",
"time": "2014-08-11 04:32:36"
},
{
"name": "guzzle/parser",
"version": "v3.9.2",
"target-dir": "Guzzle/Parser",
"source": {
"type": "git",
"url": "https://github.com/Guzzle3/parser.git",
"reference": "6874d171318a8e93eb6d224cf85e4678490b625c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Guzzle3/parser/zipball/6874d171318a8e93eb6d224cf85e4678490b625c",
"reference": "6874d171318a8e93eb6d224cf85e4678490b625c",
"shasum": ""
},
"require": {
"php": ">=5.3.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.7-dev"
}
},
"autoload": {
"psr-0": {
"Guzzle\\Parser": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "Interchangeable parsers used by Guzzle",
"homepage": "http://guzzlephp.org/",
"keywords": [
"URI Template",
"cookie",
"http",
"message",
"url"
],
"abandoned": "guzzle/guzzle",
"time": "2014-02-05 18:29:46"
},
{
"name": "guzzle/stream",
"version": "v3.9.2",
"target-dir": "Guzzle/Stream",
"source": {
"type": "git",
"url": "https://github.com/Guzzle3/stream.git",
"reference": "60c7fed02e98d2c518dae8f97874c8f4622100f0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Guzzle3/stream/zipball/60c7fed02e98d2c518dae8f97874c8f4622100f0",
"reference": "60c7fed02e98d2c518dae8f97874c8f4622100f0",
"shasum": ""
},
"require": {
"guzzle/common": "self.version",
"php": ">=5.3.2"
},
"suggest": {
"guzzle/http": "To convert Guzzle request objects to PHP streams"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.7-dev"
}
},
"autoload": {
"psr-0": {
"Guzzle\\Stream": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
}
],
"description": "Guzzle stream wrapper component",
"homepage": "http://guzzlephp.org/",
"keywords": [
"Guzzle",
"component",
"stream"
],
"abandoned": "guzzle/guzzle",
"time": "2014-05-01 21:36:02"
},
{
"name": "guzzlehttp/guzzle",
"version": "6.3.3",
@ -2184,33 +1938,37 @@
},
{
"name": "guzzlehttp/psr7",
"version": "1.5.2",
"version": "1.6.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "9f83dded91781a01c63574e387eaa769be769115"
"reference": "239400de7a173fe9901b9ac7c06497751f00727a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115",
"reference": "9f83dded91781a01c63574e387eaa769be769115",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
"reference": "239400de7a173fe9901b9ac7c06497751f00727a",
"shasum": ""
},
"require": {
"php": ">=5.4.0",
"psr/http-message": "~1.0",
"ralouphie/getallheaders": "^2.0.5"
"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.8"
},
"suggest": {
"zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.5-dev"
"dev-master": "1.6-dev"
}
},
"autoload": {
@ -2247,7 +2005,7 @@
"uri",
"url"
],
"time": "2018-12-04 20:46:45"
"time": "2019-07-01 23:21:34"
},
{
"name": "incenteev/composer-parameter-handler",
@ -2726,91 +2484,40 @@
],
"time": "2018-11-05 09:00:11"
},
{
"name": "ocramius/package-versions",
"version": "1.2.0",
"source": {
"type": "git",
"url": "https://github.com/Ocramius/PackageVersions.git",
"reference": "ad8a245decad4897cc6b432743913dad0d69753c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/ad8a245decad4897cc6b432743913dad0d69753c",
"reference": "ad8a245decad4897cc6b432743913dad0d69753c",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.0",
"php": "~7.0"
},
"require-dev": {
"composer/composer": "^1.3",
"ext-zip": "*",
"humbug/humbug": "dev-master",
"phpunit/phpunit": "^6.4"
},
"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": "2017-11-24 11:07:03"
},
{
"name": "ocramius/proxy-manager",
"version": "2.0.4",
"version": "1.0.2",
"source": {
"type": "git",
"url": "https://github.com/Ocramius/ProxyManager.git",
"reference": "a55d08229f4f614bf335759ed0cf63378feeb2e6"
"reference": "57e9272ec0e8deccf09421596e0e2252df440e11"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/a55d08229f4f614bf335759ed0cf63378feeb2e6",
"reference": "a55d08229f4f614bf335759ed0cf63378feeb2e6",
"url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/57e9272ec0e8deccf09421596e0e2252df440e11",
"reference": "57e9272ec0e8deccf09421596e0e2252df440e11",
"shasum": ""
},
"require": {
"ocramius/package-versions": "^1.0",
"php": "7.0.0 - 7.0.5 || ^7.0.7",
"zendframework/zend-code": "3.0.0 - 3.0.2 || ^3.0.4"
"php": ">=5.3.3",
"zendframework/zend-code": ">2.2.5,<3.0"
},
"require-dev": {
"couscous/couscous": "^1.4.0",
"ext-phar": "*",
"phpbench/phpbench": "^0.11.2",
"phpunit/phpunit": "^5.4.6",
"squizlabs/php_codesniffer": "^2.6.0"
"phpunit/phpunit": "~4.0",
"squizlabs/php_codesniffer": "1.5.*"
},
"suggest": {
"ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects",
"zendframework/zend-json": "To have the JsonRpc adapter (Remote Object feature)",
"zendframework/zend-soap": "To have the Soap adapter (Remote Object feature)",
"zendframework/zend-stdlib": "To use the hydrator proxy",
"zendframework/zend-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0.x-dev"
"dev-master": "2.0.x-dev"
}
},
"autoload": {
@ -2826,7 +2533,7 @@
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com",
"homepage": "http://ocramius.github.io/"
"homepage": "http://ocramius.github.com/"
}
],
"description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies",
@ -2838,7 +2545,7 @@
"proxy pattern",
"service proxies"
],
"time": "2016-11-04 15:53:15"
"time": "2015-08-09 04:28:19"
},
{
"name": "oneup/uploader-bundle",
@ -3255,24 +2962,24 @@
},
{
"name": "ralouphie/getallheaders",
"version": "2.0.5",
"version": "3.0.3",
"source": {
"type": "git",
"url": "https://github.com/ralouphie/getallheaders.git",
"reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa"
"reference": "120b605dfeb996808c31b6477290a714d356e822"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
"reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
"url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
"reference": "120b605dfeb996808c31b6477290a714d356e822",
"shasum": ""
},
"require": {
"php": ">=5.3"
"php": ">=5.6"
},
"require-dev": {
"phpunit/phpunit": "~3.7.0",
"satooshi/php-coveralls": ">=1.0"
"php-coveralls/php-coveralls": "^2.1",
"phpunit/phpunit": "^5 || ^6.5"
},
"type": "library",
"autoload": {
@ -3291,7 +2998,7 @@
}
],
"description": "A polyfill for getallheaders.",
"time": "2016-02-11 07:05:27"
"time": "2019-03-08 08:55:37"
},
{
"name": "ramsey/uuid",
@ -3376,29 +3083,161 @@
"time": "2018-07-19 23:38:55"
},
{
"name": "react/event-loop",
"version": "v0.4.3",
"name": "ratchet/rfc6455",
"version": "v0.2.5",
"source": {
"type": "git",
"url": "https://github.com/reactphp/event-loop.git",
"reference": "8bde03488ee897dc6bb3d91e4e17c353f9c5252f"
"url": "https://github.com/ratchetphp/RFC6455.git",
"reference": "c62f7cd95ffbb6e94fd657be694fc7372ecd6e62"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/event-loop/zipball/8bde03488ee897dc6bb3d91e4e17c353f9c5252f",
"reference": "8bde03488ee897dc6bb3d91e4e17c353f9c5252f",
"url": "https://api.github.com/repos/ratchetphp/RFC6455/zipball/c62f7cd95ffbb6e94fd657be694fc7372ecd6e62",
"reference": "c62f7cd95ffbb6e94fd657be694fc7372ecd6e62",
"shasum": ""
},
"require": {
"php": ">=5.4.0"
"guzzlehttp/psr7": "^1.0",
"php": ">=5.4.2"
},
"require-dev": {
"phpunit/phpunit": "~4.8"
"phpunit/phpunit": "4.8.*",
"react/http": "^0.4.1",
"react/socket-client": "^0.4.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"
}
],
"description": "RFC6455 WebSocket protocol handler",
"homepage": "http://socketo.me",
"keywords": [
"WebSockets",
"rfc6455",
"websocket"
],
"time": "2019-03-10 17:10:42"
},
{
"name": "react/cache",
"version": "v1.0.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/cache.git",
"reference": "aa10d63a1b40a36a486bdf527f28bac607ee6466"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/cache/zipball/aa10d63a1b40a36a486bdf527f28bac607ee6466",
"reference": "aa10d63a1b40a36a486bdf527f28bac607ee6466",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"react/promise": "~2.0|~1.1"
},
"require-dev": {
"phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35"
},
"type": "library",
"autoload": {
"psr-4": {
"React\\Cache\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "Async, Promise-based cache interface for ReactPHP",
"keywords": [
"cache",
"caching",
"promise",
"reactphp"
],
"time": "2019-07-11 13:45:28"
},
{
"name": "react/dns",
"version": "v1.1.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/dns.git",
"reference": "a04f6f23ee40afec2e5814ddfbdf71b9e88bbc1f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/dns/zipball/a04f6f23ee40afec2e5814ddfbdf71b9e88bbc1f",
"reference": "a04f6f23ee40afec2e5814ddfbdf71b9e88bbc1f",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"react/cache": "^1.0 || ^0.6 || ^0.5",
"react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5",
"react/promise": "^2.1 || ^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"
},
"type": "library",
"autoload": {
"psr-4": {
"React\\Dns\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "Async DNS resolver for ReactPHP",
"keywords": [
"async",
"dns",
"dns-resolver",
"reactphp"
],
"time": "2019-07-18 09:47:47"
},
{
"name": "react/event-loop",
"version": "v0.5.3",
"source": {
"type": "git",
"url": "https://github.com/reactphp/event-loop.git",
"reference": "228178a947de1f7cd9296d691878569628288c6f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/event-loop/zipball/228178a947de1f7cd9296d691878569628288c6f",
"reference": "228178a947de1f7cd9296d691878569628288c6f",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"require-dev": {
"phpunit/phpunit": "~4.8.35 || ^5.7 || ^6.4"
},
"suggest": {
"ext-event": "~1.0",
"ext-libev": "*",
"ext-libevent": ">=0.1.0"
"ext-event": "~1.0 for ExtEventLoop",
"ext-pcntl": "For signal handling support when using the StreamSelectLoop"
},
"type": "library",
"autoload": {
@ -3410,12 +3249,12 @@
"license": [
"MIT"
],
"description": "Event loop abstraction layer that libraries can use for evented I/O.",
"description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.",
"keywords": [
"asynchronous",
"event-loop"
],
"time": "2017-04-27 10:56:23"
"time": "2018-07-09 13:51:04"
},
{
"name": "react/promise",
@ -3464,30 +3303,84 @@
"time": "2019-01-07 21:25:54"
},
{
"name": "react/socket",
"version": "v0.4.6",
"name": "react/promise-timer",
"version": "v1.5.1",
"source": {
"type": "git",
"url": "https://github.com/reactphp/socket.git",
"reference": "cf074e53c974df52388ebd09710a9018894745d2"
"url": "https://github.com/reactphp/promise-timer.git",
"reference": "35fb910604fd86b00023fc5cda477c8074ad0abc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/socket/zipball/cf074e53c974df52388ebd09710a9018894745d2",
"reference": "cf074e53c974df52388ebd09710a9018894745d2",
"url": "https://api.github.com/repos/reactphp/promise-timer/zipball/35fb910604fd86b00023fc5cda477c8074ad0abc",
"reference": "35fb910604fd86b00023fc5cda477c8074ad0abc",
"shasum": ""
},
"require": {
"evenement/evenement": "~2.0|~1.0",
"php": ">=5.3.0",
"react/event-loop": "0.4.*|0.3.*",
"react/promise": "^2.0 || ^1.1",
"react/stream": "^0.4.5"
"php": ">=5.3",
"react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5",
"react/promise": "^2.7.0 || ^1.2.1"
},
"require-dev": {
"clue/block-react": "^1.1",
"phpunit/phpunit": "~4.8",
"react/socket-client": "^0.5.1"
"phpunit/phpunit": "^6.4 || ^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": "2019-03-27 18:10:32"
},
{
"name": "react/socket",
"version": "v1.3.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/socket.git",
"reference": "10f0629ec83ea0fa22597f348623f554227e3ca0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/socket/zipball/10f0629ec83ea0fa22597f348623f554227e3ca0",
"reference": "10f0629ec83ea0fa22597f348623f554227e3ca0",
"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/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"
},
"type": "library",
"autoload": {
@ -3499,38 +3392,38 @@
"license": [
"MIT"
],
"description": "Async, streaming plaintext TCP/IP and secure TLS socket server for React PHP",
"description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP",
"keywords": [
"Socket"
"Connection",
"Socket",
"async",
"reactphp",
"stream"
],
"time": "2017-01-26 09:23:38"
"time": "2019-07-10 10:11:14"
},
{
"name": "react/stream",
"version": "v0.4.6",
"version": "v1.1.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/stream.git",
"reference": "44dc7f51ea48624110136b535b9ba44fd7d0c1ee"
"reference": "50426855f7a77ddf43b9266c22320df5bf6c6ce6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/reactphp/stream/zipball/44dc7f51ea48624110136b535b9ba44fd7d0c1ee",
"reference": "44dc7f51ea48624110136b535b9ba44fd7d0c1ee",
"url": "https://api.github.com/repos/reactphp/stream/zipball/50426855f7a77ddf43b9266c22320df5bf6c6ce6",
"reference": "50426855f7a77ddf43b9266c22320df5bf6c6ce6",
"shasum": ""
},
"require": {
"evenement/evenement": "^2.0|^1.0",
"php": ">=5.3.8"
"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",
"react/event-loop": "^0.4|^0.3",
"react/promise": "^2.0|^1.0"
},
"suggest": {
"react/event-loop": "^0.4",
"react/promise": "^2.0"
"phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35"
},
"type": "library",
"autoload": {
@ -3542,12 +3435,18 @@
"license": [
"MIT"
],
"description": "Basic readable and writable stream interfaces that support piping.",
"description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP",
"keywords": [
"event-driven",
"io",
"non-blocking",
"pipe",
"stream"
"reactphp",
"readable",
"stream",
"writable"
],
"time": "2017-01-25 14:44:14"
"time": "2019-01-01 16:15:09"
},
{
"name": "robrichards/xmlseclibs",
@ -3589,21 +3488,21 @@
},
{
"name": "sensio/distribution-bundle",
"version": "v5.0.24",
"version": "v5.0.25",
"source": {
"type": "git",
"url": "https://github.com/sensiolabs/SensioDistributionBundle.git",
"reference": "59eac70f15f97ee945924948a6f5e2f6f86b7a4b"
"reference": "80a38234bde8321fb92aa0b8c27978a272bb4baf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/59eac70f15f97ee945924948a6f5e2f6f86b7a4b",
"reference": "59eac70f15f97ee945924948a6f5e2f6f86b7a4b",
"url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/80a38234bde8321fb92aa0b8c27978a272bb4baf",
"reference": "80a38234bde8321fb92aa0b8c27978a272bb4baf",
"shasum": ""
},
"require": {
"php": ">=5.3.9",
"sensiolabs/security-checker": "~5.0",
"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",
@ -3637,7 +3536,7 @@
"configuration",
"distribution"
],
"time": "2018-12-14 17:36:15"
"time": "2019-06-18 15:43:58"
},
{
"name": "sensio/framework-extra-bundle",
@ -3882,30 +3781,30 @@
},
{
"name": "symfony/monolog-bundle",
"version": "v3.3.1",
"version": "v3.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/monolog-bundle.git",
"reference": "572e143afc03419a75ab002c80a2fd99299195ff"
"reference": "7fbecb371c1c614642c93c6b2cbcdf723ae8809d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/572e143afc03419a75ab002c80a2fd99299195ff",
"reference": "572e143afc03419a75ab002c80a2fd99299195ff",
"url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/7fbecb371c1c614642c93c6b2cbcdf723ae8809d",
"reference": "7fbecb371c1c614642c93c6b2cbcdf723ae8809d",
"shasum": ""
},
"require": {
"monolog/monolog": "~1.22",
"php": ">=5.6",
"symfony/config": "~2.7|~3.3|~4.0",
"symfony/dependency-injection": "~2.7|~3.4.10|^4.0.10",
"symfony/http-kernel": "~2.7|~3.3|~4.0",
"symfony/monolog-bridge": "~2.7|~3.3|~4.0"
"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": "~2.7|~3.3|~4.0",
"symfony/phpunit-bridge": "^3.3|^4.0",
"symfony/yaml": "~2.7|~3.3|~4.0"
"symfony/console": "~3.4|~4.0",
"symfony/phpunit-bridge": "^3.4.19|^4.0",
"symfony/yaml": "~3.4|~4.0"
},
"type": "symfony-bundle",
"extra": {
@ -3941,7 +3840,7 @@
"log",
"logging"
],
"time": "2018-11-04 09:58:13"
"time": "2019-06-20 12:18:19"
},
{
"name": "symfony/orm-pack",
@ -4430,16 +4329,16 @@
},
{
"name": "symfony/symfony",
"version": "v3.4.26",
"version": "v3.4.29",
"source": {
"type": "git",
"url": "https://github.com/symfony/symfony.git",
"reference": "1b89e7baec9891c323bbf1ec81af77d901fc60c9"
"reference": "4c9b6d7d898457ae2189efdfaca58712269fc994"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/symfony/zipball/1b89e7baec9891c323bbf1ec81af77d901fc60c9",
"reference": "1b89e7baec9891c323bbf1ec81af77d901fc60c9",
"url": "https://api.github.com/repos/symfony/symfony/zipball/4c9b6d7d898457ae2189efdfaca58712269fc994",
"reference": "4c9b6d7d898457ae2189efdfaca58712269fc994",
"shasum": ""
},
"require": {
@ -4458,7 +4357,7 @@
"symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php56": "~1.0",
"symfony/polyfill-php70": "~1.6",
"twig/twig": "^1.35|^2.4.4"
"twig/twig": "^1.40|^2.9"
},
"conflict": {
"phpdocumentor/reflection-docblock": "<3.0||>=3.2.0,<3.2.2",
@ -4537,7 +4436,7 @@
"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|~4.0",
"symfony/phpunit-bridge": "~3.4|~4.0|~5.0",
"symfony/security-acl": "~2.8|~3.0"
},
"type": "library",
@ -4581,34 +4480,34 @@
"keywords": [
"framework"
],
"time": "2019-04-17 15:57:27"
"time": "2019-06-26 13:56:55"
},
{
"name": "tetranz/select2entity-bundle",
"version": "v2.9.5",
"target-dir": "Tetranz/Select2EntityBundle",
"version": "v2.10.0",
"source": {
"type": "git",
"url": "https://github.com/tetranz/select2entity-bundle.git",
"reference": "c57281f4af06ca0c7e74c27fcc4bf8c95a1beaad"
"reference": "67b61be1a23228bc4e77a2e59ba5fff8fd9fffab"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/tetranz/select2entity-bundle/zipball/c57281f4af06ca0c7e74c27fcc4bf8c95a1beaad",
"reference": "c57281f4af06ca0c7e74c27fcc4bf8c95a1beaad",
"url": "https://api.github.com/repos/tetranz/select2entity-bundle/zipball/67b61be1a23228bc4e77a2e59ba5fff8fd9fffab",
"reference": "67b61be1a23228bc4e77a2e59ba5fff8fd9fffab",
"shasum": ""
},
"require": {
"doctrine/orm": ">=2.4",
"php": ">=5.4.0"
"php": ">=5.4.0",
"twig/twig": ">=2.9"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": []
},
"autoload": {
"psr-0": {
"Tetranz\\Select2EntityBundle": ""
"psr-4": {
"Tetranz\\Select2EntityBundle\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
@ -4621,14 +4520,14 @@
"email": "tetranz@gmail.com"
}
],
"description": "A Symfony2 bundle that integrates Select2 as a drop-in replacement for a standard entity field on a Symfony form.",
"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": "2018-03-05 02:52:46"
"time": "2019-07-07 23:00:30"
},
{
"name": "thecsea/simple-caldav-client",
@ -4675,16 +4574,16 @@
},
{
"name": "twig/twig",
"version": "v2.8.1",
"version": "v2.11.3",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "91cc2594d3143761ce0399c1caffd0b500ffe5b9"
"reference": "699ed2342557c88789a15402de5eb834dedd6792"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/91cc2594d3143761ce0399c1caffd0b500ffe5b9",
"reference": "91cc2594d3143761ce0399c1caffd0b500ffe5b9",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/699ed2342557c88789a15402de5eb834dedd6792",
"reference": "699ed2342557c88789a15402de5eb834dedd6792",
"shasum": ""
},
"require": {
@ -4695,12 +4594,12 @@
"require-dev": {
"psr/container": "^1.0",
"symfony/debug": "^2.7",
"symfony/phpunit-bridge": "^3.4.19|^4.1.8"
"symfony/phpunit-bridge": "^3.4.19|^4.1.8|^5.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.8-dev"
"dev-master": "2.11-dev"
}
},
"autoload": {
@ -4738,31 +4637,30 @@
"keywords": [
"templating"
],
"time": "2019-04-16 17:14:24"
"time": "2019-06-18 15:37:11"
},
{
"name": "zendframework/zend-code",
"version": "3.1.0",
"version": "2.6.3",
"source": {
"type": "git",
"url": "https://github.com/zendframework/zend-code.git",
"reference": "2899c17f83a7207f2d7f53ec2f421204d3beea27"
"reference": "95033f061b083e16cdee60530ec260d7d628b887"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/zendframework/zend-code/zipball/2899c17f83a7207f2d7f53ec2f421204d3beea27",
"reference": "2899c17f83a7207f2d7f53ec2f421204d3beea27",
"url": "https://api.github.com/repos/zendframework/zend-code/zipball/95033f061b083e16cdee60530ec260d7d628b887",
"reference": "95033f061b083e16cdee60530ec260d7d628b887",
"shasum": ""
},
"require": {
"php": "^5.6 || 7.0.0 - 7.0.4 || ^7.0.6",
"php": "^5.5 || 7.0.0 - 7.0.4 || ^7.0.6",
"zendframework/zend-eventmanager": "^2.6 || ^3.0"
},
"require-dev": {
"doctrine/annotations": "~1.0",
"ext-phar": "*",
"fabpot/php-cs-fixer": "1.7.*",
"phpunit/phpunit": "^4.8.21",
"squizlabs/php_codesniffer": "^2.5",
"zendframework/zend-stdlib": "^2.7 || ^3.0"
},
"suggest": {
@ -4772,8 +4670,8 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.1-dev",
"dev-develop": "3.2-dev"
"dev-master": "2.6-dev",
"dev-develop": "2.7-dev"
}
},
"autoload": {
@ -4791,7 +4689,7 @@
"code",
"zf2"
],
"time": "2016-10-24 13:23:32"
"time": "2016-04-20 17:26:42"
},
{
"name": "zendframework/zend-eventmanager",
@ -4851,16 +4749,16 @@
"packages-dev": [
{
"name": "nikic/php-parser",
"version": "v4.2.1",
"version": "v4.2.2",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
"reference": "5221f49a608808c1e4d436df32884cbc1b821ac0"
"reference": "1bd73cc04c3843ad8d6b0bfc0956026a151fc420"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/5221f49a608808c1e4d436df32884cbc1b821ac0",
"reference": "5221f49a608808c1e4d436df32884cbc1b821ac0",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bd73cc04c3843ad8d6b0bfc0956026a151fc420",
"reference": "1bd73cc04c3843ad8d6b0bfc0956026a151fc420",
"shasum": ""
},
"require": {
@ -4898,7 +4796,7 @@
"parser",
"php"
],
"time": "2019-02-16 20:54:15"
"time": "2019-05-25 20:07:01"
},
{
"name": "sensio/generator-bundle",
@ -4956,16 +4854,16 @@
},
{
"name": "symfony/maker-bundle",
"version": "v1.11.6",
"version": "v1.12.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/maker-bundle.git",
"reference": "d262c2cace4d9bca99137a84f6fc6ba909a17e02"
"reference": "201d0e050dca336c44f93657ce1f34f3b3868432"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/maker-bundle/zipball/d262c2cace4d9bca99137a84f6fc6ba909a17e02",
"reference": "d262c2cace4d9bca99137a84f6fc6ba909a17e02",
"url": "https://api.github.com/repos/symfony/maker-bundle/zipball/201d0e050dca336c44f93657ce1f34f3b3868432",
"reference": "201d0e050dca336c44f93657ce1f34f3b3868432",
"shasum": ""
},
"require": {
@ -4981,12 +4879,14 @@
"symfony/http-kernel": "^3.4|^4.0"
},
"require-dev": {
"allocine/twigcs": "^3.0",
"doctrine/doctrine-bundle": "^1.8",
"doctrine/orm": "^2.3",
"friendsofphp/php-cs-fixer": "^2.8",
"symfony/phpunit-bridge": "^3.4|^4.0",
"friendsoftwig/twigcs": "^3.1.2",
"symfony/http-client": "^4.3",
"symfony/phpunit-bridge": "^3.4.19|^4.0",
"symfony/process": "^3.4|^4.0",
"symfony/security-core": "^3.4|^4.0",
"symfony/yaml": "^3.4|^4.0"
},
"type": "symfony-bundle",
@ -5018,20 +4918,20 @@
"scaffold",
"scaffolding"
],
"time": "2019-04-19 17:26:45"
"time": "2019-07-09 22:19:18"
},
{
"name": "symfony/phpunit-bridge",
"version": "v3.4.26",
"version": "v3.4.29",
"source": {
"type": "git",
"url": "https://github.com/symfony/phpunit-bridge.git",
"reference": "a43a2f6c465a2d99635fea0addbebddc3864ad97"
"reference": "521489968e58dcdb8df153436cc18349737e49e3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/a43a2f6c465a2d99635fea0addbebddc3864ad97",
"reference": "a43a2f6c465a2d99635fea0addbebddc3864ad97",
"url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/521489968e58dcdb8df153436cc18349737e49e3",
"reference": "521489968e58dcdb8df153436cc18349737e49e3",
"shasum": ""
},
"require": {
@ -5083,7 +4983,7 @@
],
"description": "Symfony PHPUnit Bridge",
"homepage": "https://symfony.com",
"time": "2019-04-16 09:03:16"
"time": "2019-06-26 10:03:25"
}
],
"aliases": [],

View File

@ -8,6 +8,9 @@ affniveau02=$(CreoleGet ninegate_niveau02view non)
labelsniveau02=$(CreoleGet ninegate_niveau02labels non)
iconniveau02=$(CreoleGet ninegate_niveau02icon non)
weburl=$(CreoleGet web_url non)
ninegate_websocket=$(CreoleGet ninegate_activate_websocket non)
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"
@ -50,12 +53,15 @@ fi
./perm.sh www-data
# Server Websocket
echo ""
echo WEBSOCKET = STOP
pid="$(pgrep -f gos:websocket)"
if [ -n "${pid}" ]; then
kill -9 ${pid};
fi
if [[ "$ninegate_websocket" = 'oui' ]]
then
echo ""
echo WEBSOCKET = STOP
pid="$(pgrep -f gos:websocket)"
if [ -n "${pid}" ]; then
kill -9 ${pid};
fi
echo WEBSOCKET = START
bin/console gos:websocket:server --port 5556 -a $web_url --no-debug -n -q --env=prod & disown
echo WEBSOCKET = START
bin/console gos:websocket:server --port $websocket_portinterne -a $websocket_url --no-debug -n -q --env=prod & disown
fi

View File

@ -0,0 +1,13 @@
#!/bin/bash
websocket_url=$(CreoleGet adresse_ip_eth0 non)
websocket_portinterne=$(CreoleGet ninegate_websocket_portinterne non)
# Server Websocket
echo WEBSOCKET = STOP
pid="$(pgrep -f gos:websocket)"
if [ -n "${pid}" ]; then
kill -9 ${pid};
fi
echo WEBSOCKET = START
bin/console gos:websocket:server --port $websocket_portinterne -a $websocket_url --no-debug -n -q --env=prod & disown

View File

@ -8,6 +8,8 @@ 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 Cadoles\CoreBundle\Entity\Group;
use Cadoles\CoreBundle\Entity\UserGroup;
@ -114,9 +116,11 @@ class InitDataCommand extends ContainerAwareCommand
$datas=$qb->getQuery()->getResult();
foreach($datas as $data) {
$output->writeln(" > Ratachement ".$data->getId()." ".$data->getUsername());
$key = Uuid::uuid4();
$usergroup=new UserGroup();
$usergroup->setUser($data);
$usergroup->setGroup($group);
$usergroup->setKeyvalue($key);
$em->persist($usergroup);
$em->flush();
}

View File

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

View File

@ -9,6 +9,7 @@ use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Form\FormError;
use Ramsey\Uuid\Uuid;
use Ramsey\Uuid\Exception\UnsatisfiedDependencyException;
use Cadoles\CoreBundle\Entity\Group;
use Cadoles\CoreBundle\Entity\Usergroup;
@ -16,6 +17,7 @@ use Cadoles\CoreBundle\Entity\Usermodo;
use Cadoles\CoreBundle\Form\GroupType;
use Cadoles\PortalBundle\Entity\Calendar;
use Cadoles\PortalBundle\Entity\Blog;
use Cadoles\WebsocketBundle\Entity\Message;
class GroupController extends Controller
{
@ -24,22 +26,24 @@ class GroupController extends Controller
private $labeldata = 'group';
private $labeldatas = 'groups';
public function listAction()
public function listAction($access)
{
return $this->render('CadolesCoreBundle:Group:list.html.twig',[
'useheader' => true,
'usemenu' => false,
'usesidebar' => true,
'usesidebar' => ($access=="config"),
'access' => $access
]);
}
public function ajaxlistAction(Request $request)
public function ajaxlistAction(Request $request,$access)
{
// S'assurer que c'est un appel ajax
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('message' => 'Interdit'), 400);
}
$user=$this->getUser();
$portal_activate=$this->getParameter("portal_activate");
$em = $this->getDoctrine()->getManager();
@ -51,19 +55,39 @@ class GroupController extends Controller
$order= $request->query->get('order');
// Nombre total d'enregistrement
$total = $em->createQueryBuilder()->select('COUNT(table)')->from($this->labelentity,'table')->getQuery()->getSingleScalarResult();
$qb=$em->createQueryBuilder();
$qb->select('COUNT(table)')->from($this->labelentity,'table');
if($access=="user") {
$qb->from("CadolesCoreBundle:UserGroup","ug")
->andWhere(("table.fgcanshare=:flag"))
->andWhere("table.id=ug.group")
->andWhere(":user=ug.user")
->setParameter("flag", true)
->setParameter("user", $user);
}
$total = $qb->getQuery()->getSingleScalarResult();
// Nombre d'enregistrement filtré
if($search["value"]=="")
$totalf = $total;
else {
$totalf= $em->createQueryBuilder()
->select('COUNT(table)')
->from($this->labelentity,'table')
->where('table.label LIKE :value')
->setParameter("value", "%".$search["value"]."%")
->getQuery()
->getSingleScalarResult();
$qb=$em->createQueryBuilder();
$qb->select('COUNT(table)')
->from($this->labelentity,'table')
->where('table.label LIKE :value')
->setParameter("value", "%".$search["value"]."%");
if($access=="user") {
$qb->from("CadolesCoreBundle:UserGroup","ug")
->andWhere(("table.fgcanshare=:flag"))
->andWhere("table.id=ug.group")
->andWhere(":user=ug.user")
->setParameter("flag", true)
->setParameter("user", $user);
}
$totalf= $qb->getQuery()->getSingleScalarResult();
}
// Construction du tableau de retour
@ -77,8 +101,17 @@ class GroupController extends Controller
// Parcours des Enregistrement
$qb = $em->createQueryBuilder();
$qb->select('table')->from($this->labelentity,'table');
if($access=="user") {
$qb->from("CadolesCoreBundle:UserGroup","ug")
->andWhere(("table.fgcanshare=:flag"))
->andWhere("table.id=ug.group")
->andWhere(":user=ug.user")
->setParameter("flag", true)
->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"]) {
@ -107,20 +140,40 @@ class GroupController extends Controller
foreach($datas as $data) {
$action = "";
// Modification possible si groupe non template et non tout le monde
if(!$data->getFgTemplate() && !$data->getFgall())
$action .="<a href='".$this->generateUrl('cadoles_core_config_group_update', array('id'=>$data->getId()))."'><i class='fa fa-file fa-2x fa-fw'></i></a>";
if($access=="config") {
// Modification possible si groupe non template et non tout le monde
if(!$data->getFgTemplate() && !$data->getFgall())
$action .="<a href='".$this->generateUrl('cadoles_core_config_group_update', array('id'=>$data->getId()))."'><i class='fa fa-file fa-2x fa-fw'></i></a>";
// Modification possible si groupe template mais avec module portail activé
elseif($data->getFgTemplate()&&$portal_activate)
$action .="<a href='".$this->generateUrl('cadoles_core_config_group_update', array('id'=>$data->getId()))."'><i class='fa fa-file fa-2x fa-fw'></i></a>";
// Modification possible si groupe tout le monde mais avec module portail activé
elseif($data->getFgall()&&$portal_activate)
$action .="<a href='".$this->generateUrl('cadoles_core_config_group_update', array('id'=>$data->getId()))."'><i class='fa fa-file fa-2x fa-fw'></i></a>";
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>";
}
else {
$fgproprio=($user==$data->getOwner());
$fgmanager=$this->getDoctrine()->getRepository("CadolesCoreBundle:UserGroup")->findOneBy(["user"=>$this->getUser(),"group"=>$data])->getFgmanager();
// Modification possible uniquement si l'utilisateur est propriétaire du groupe
if($fgproprio) {
$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) {
$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>";
}
}
// Modification possible si groupe template mais avec module portail activé
elseif($data->getFgTemplate()&&$portal_activate)
$action .="<a href='".$this->generateUrl('cadoles_core_config_group_update', array('id'=>$data->getId()))."'><i class='fa fa-file fa-2x fa-fw'></i></a>";
// Modification possible si groupe tout le monde mais avec module portail activé
elseif($data->getFgall()&&$portal_activate)
$action .="<a href='".$this->generateUrl('cadoles_core_config_group_update', array('id'=>$data->getId()))."'><i class='fa fa-file fa-2x fa-fw'></i></a>";
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>";
$filtre="";
if($this->GetParameter("masteridentity")=="LDAP") $filtre=$data->getLdapfilter();
@ -144,7 +197,7 @@ class GroupController extends Controller
}
public function ajaxusersnotinAction($id,Request $request)
public function ajaxusersnotinAction($id,Request $request,$access="config")
{
// S'assurer que c'est un appel ajax
if (!$request->isXmlHttpRequest()) {
@ -168,7 +221,7 @@ class GroupController extends Controller
// Nombre total d'enregistrement
$qb = $em->createQueryBuilder();
if($this->isGranted('ROLE_ADMIN'))
if($this->isGranted('ROLE_ADMIN')||$access=="user")
$qb->select('COUNT(user)')
->from('CadolesCoreBundle:User','user')
->where($qb->expr()->not($qb->expr()->exists($sub->getDQL())))
@ -190,7 +243,7 @@ class GroupController extends Controller
if($search["value"]=="")
$totalf = $total;
else {
if($this->isGranted('ROLE_ADMIN'))
if($this->isGranted('ROLE_ADMIN')||$access=="user")
$totalf= $em->createQueryBuilder()
->select('COUNT(user)')
->from('CadolesCoreBundle:User','user')
@ -229,7 +282,7 @@ class GroupController extends Controller
$qb = $em->createQueryBuilder();
$qb->select('user')->from("CadolesCoreBundle:User",'user');
if($this->isGranted('ROLE_ADMIN'))
if($this->isGranted('ROLE_ADMIN')||$access=="user")
$qb->where($qb->expr()->not($qb->expr()->exists($sub->getDQL())));
else
$qb->from('CadolesCoreBundle:UserModo','usermodo')
@ -273,7 +326,7 @@ class GroupController extends Controller
return new Response(json_encode($output), 200);
}
public function ajaxusersinAction($id,Request $request)
public function ajaxusersinAction($id,Request $request,$access="config")
{
// S'assurer que c'est un appel ajax
if (!$request->isXmlHttpRequest()) {
@ -298,7 +351,7 @@ class GroupController extends Controller
// Nombre total d'enregistrement
$qb = $em->createQueryBuilder();
if($this->isGranted('ROLE_ADMIN'))
if($this->isGranted('ROLE_ADMIN')||$access=="user")
$qb->select('COUNT(user)')
->from('CadolesCoreBundle:User','user')
->where($qb->expr()->exists($sub->getDQL()))
@ -320,7 +373,7 @@ class GroupController extends Controller
if($search["value"]=="")
$totalf = $total;
else {
if($this->isGranted('ROLE_ADMIN'))
if($this->isGranted('ROLE_ADMIN')||$access=="user")
$totalf= $em->createQueryBuilder()
->select('COUNT(user)')
->from('CadolesCoreBundle:User','user')
@ -359,7 +412,7 @@ class GroupController extends Controller
$qb = $em->createQueryBuilder();
$qb->select('user')->from("CadolesCoreBundle:User",'user');
if($this->isGranted('ROLE_ADMIN'))
if($this->isGranted('ROLE_ADMIN')||$access=="user")
$qb->where($qb->expr()->exists($sub->getDQL()));
else
$qb->from('CadolesCoreBundle:UserModo','usermodo')
@ -386,10 +439,13 @@ class GroupController extends Controller
$datas=$qb->setFirstResult($start)->setMaxResults($length)->getQuery()->getResult();
foreach($datas as $data) {
// Propriétaire
$usergroup=$em->getRepository("CadolesCoreBundle:UserGroup")->findOneBy(["user"=>$data->getId(),"group"=>$id]);
$fgproprio=($usergroup->getUser()==$group->getOwner());
// Action
$action = "";
if($group->getLdapfilter()==""&&$group->getAttributes()=="")
if($group->getLdapfilter()==""&&$group->getAttributes()==""&&!$fgproprio)
$action.="<a style='cursor:pointer' onClick='delUsers(".$data->getId().")'><i class='fa fa-minus fa-fw'></i></a>";
// Avatar
@ -398,9 +454,11 @@ class GroupController extends Controller
// Flag manager
$fgmanager="";
if($fgcanshare) {
$usergroup=$em->getRepository("CadolesCoreBundle:UserGroup")->findOneBy(["user"=>$data->getId(),"group"=>$id]);
$checked=($usergroup->getFgmanager()?"checked":"");
$fgmanager="<input type='checkbox' class='switch' onChange='switchManager(".$data->getId().");' $checked>";
if($fgproprio) $fgmanager="Propriétaire du groupe";
}
@ -411,7 +469,7 @@ class GroupController extends Controller
return new Response(json_encode($output), 200);
}
public function usergroupaddAction(Request $request)
public function usergroupaddAction(Request $request,$access="config")
{
// S'assurer que c'est un appel ajax
if (!$request->isXmlHttpRequest()) {
@ -428,18 +486,25 @@ class GroupController extends Controller
if($group->getFgAll()||$group->getFgtemplate())
throw $this->createNotFoundException('Permission denied');
$key = Uuid::uuid4();
$usergroup=new Usergroup;
$usergroup->setUser($em->getRepository("CadolesCoreBundle:User")->find($userid));
$user=$em->getRepository("CadolesCoreBundle:User")->find($userid);
$usergroup->setUser($user);
$usergroup->setGroup($group);
$usergroup->setKeyvalue($key);
$em->persist($usergroup);
$em->flush();
$user=$em->getRepository("CadolesCoreBundle:User")->find($userid);
$message="Inscription de l'utilisateur<br>".$user->getLastname()." ".$user->getFirstname()."<br>Par ".$this->getUser()->getLastname()." ".$this->getUser()->getFirstname();
$websocket = $this->container->get('cadoles.websocket.pushmessage')->send($key->toString(),$userid,$groupid,$message);
$response = new Response(json_encode($output));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
public function usergroupdelAction(Request $request)
public function usergroupdelAction(Request $request,$access="config")
{
// S'assurer que c'est un appel ajax
if (!$request->isXmlHttpRequest()) {
@ -457,15 +522,21 @@ class GroupController extends Controller
throw $this->createNotFoundException('Permission denied');
$data = $em->getRepository("CadolesCoreBundle:Usergroup")->findOneBy(array("user"=>$userid,"group"=>$groupid));
$user=$em->getRepository("CadolesCoreBundle:User")->find($userid);
$message="Désinscription de l'utilisateur<br>".$user->getLastname()." ".$user->getFirstname()."<br>Par ".$this->getUser()->getLastname()." ".$this->getUser()->getFirstname();;
$websocket = $this->container->get('cadoles.websocket.pushmessage')->send($data->getKeyvalue(),$userid,$groupid,$message);
$em->remove($data);
$em->flush();
$response = new Response(json_encode($output));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
public function switchmanagerAction(Request $request)
public function switchmanagerAction(Request $request,$access="config")
{
// S'assurer que c'est un appel ajax
if (!$request->isXmlHttpRequest()) {
@ -496,15 +567,18 @@ class GroupController extends Controller
// Initialisation de l'enregistrement
$data = new Group();
$data->setFgopen(false);
$data->setFgcanshare(false);
$data->setFgcanshare(($access=="user"));
$data->setFgcancreatepage(false);
$data->setFgcancreatecalendar(false);
$data->setFgcancreateblog(false);
if($access=="user") $data->setOwner($this->getUser());
// Création du formulaire
$form = $this->createForm(GroupType::class,$data,array(
"mode"=>"submit",
"fgall"=>false,
"updatelimite"=>false,
"access"=>$access,
"masteridentity"=> $this->GetParameter("masteridentity"),
"portal_activate"=>$this->getParameter("portal_activate")
)
@ -533,12 +607,24 @@ class GroupController extends Controller
$em->persist($data);
$em->flush();
// Si acces par user on ajoute forcement le owner comme membre du groupe en tant que manager
if($access=="user") {
$key = Uuid::uuid4();
$usergroup=new Usergroup;
$usergroup->setUser($this->getUser());
$usergroup->setGroup($data);
$usergroup->setFgmanager(true);
$usergroup->setKeyvalue($key);
$em->persist($usergroup);
$em->flush();
}
// On s'assure que le groupe de travail à bien page d'accueil / calendrier / blog associé
// Sinon on les génère
$this->ctrlFgcanshare($data);
$this->ctrlFgcanshare($data,$access);
// Retour à la liste
return $this->redirectToRoute("cadoles_core_config_group_users",["id"=>$data->getId()]);
return $this->redirectToRoute("cadoles_core_".$access."_group_users",["id"=>$data->getId()]);
}
// Affichage du formulaire
@ -549,10 +635,10 @@ class GroupController extends Controller
return $this->render($this->labelentity.':edit.html.twig', [
'useheader' => true,
'usemenu' => false,
'usesidebar' => true,
'usesidebar' => ($access=="config"),
$this->labeldata => $data,
'mode' => 'submit',
'access' => 'access',
'access' => $access,
'icons' => $icons,
'iconsuser' => $iconsuser,
'form' => $form->createView()
@ -568,6 +654,8 @@ class GroupController extends Controller
// Création du formulaire
$form = $this->createForm(GroupType::class,$data,array(
"mode" => "update",
"access" => $access,
"fgall" => $data->getFgAll(),
"updatelimite" => ($data->getFgAll()||$data->getFgTemplate()),
"masteridentity" => $this->GetParameter("masteridentity"),
"portal_activate" => $this->getParameter("portal_activate"),
@ -602,21 +690,21 @@ class GroupController extends Controller
// On s'assure que le groupe de travail à bien page d'accueil / calendrier / blog associé
// Sinon on les génère
$this->ctrlFgcanshare($data);
$this->ctrlFgcanshare($data,$access);
// Retour à la liste
return $this->redirectToRoute($this->labelroute);
return $this->redirectToRoute("cadoles_core_".$access."_group");
}
$icons=$em->getRepository("CadolesPortalBundle:Icon")->findBy(["user"=>null]);
$iconsuser=null;
if($access=="user") $iconsuser=$em()->getRepository("CadolesPortalBundle:Icon")->findBy(["user"=>$this->getUser()]);
if($access=="user") $iconsuser=$em->getRepository("CadolesPortalBundle:Icon")->findBy(["user"=>$this->getUser()]);
// Affichage du formulaire
return $this->render($this->labelentity.':edit.html.twig', [
'useheader' => true,
'usemenu' => false,
'usesidebar' => true,
'usesidebar' => ($access=="config"),
$this->labeldata => $data,
'mode' => 'update',
'access' => $access,
@ -626,10 +714,12 @@ class GroupController extends Controller
]);
}
public function deleteAction($id,Request $request)
public function deleteAction($id,Request $request, $access="config")
{
$em = $this->getDoctrine()->getManager();
// Seule role admin peut supprimer un groupe
if(!$this->isGranted('ROLE_ADMIN'))
if($access=="config"&&!$this->isGranted('ROLE_ADMIN'))
return $this->redirectToRoute($this->labelroute);
// Récupération de l'enregistrement courant
@ -656,25 +746,31 @@ class GroupController extends Controller
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->remove($data);
$em->flush();
return $this->redirectToRoute($this->labelroute);
return $this->redirectToRoute("cadoles_core_".$access."_group");
}
$icons=$em->getRepository("CadolesPortalBundle:Icon")->findBy(["user"=>null]);
$iconsuser=null;
if($access=="user") $iconsuser=$em->getRepository("CadolesPortalBundle:Icon")->findBy(["user"=>$this->getUser()]);
// Affichage du formulaire
return $this->render($this->labelentity.':edit.html.twig', [
'useheader' => true,
'usemenu' => false,
'usesidebar' => true,
'usesidebar' => ($access=="config"),
$this->labeldata => $data,
'mode' => 'delete',
'access' => $access,
'icons' => $icons,
'iconsuser' => $iconsuser,
'form' => $form->createView()
]);
}
public function usersAction($id,Request $request)
public function usersAction($id,Request $request, $access="config")
{
// Récupération de l'enregistrement courant
$data=$this->getData($id);
@ -683,12 +779,13 @@ class GroupController extends Controller
return $this->render($this->labelentity.':users.html.twig', [
'useheader' => true,
'usemenu' => false,
'usesidebar' => true,
'usesidebar' => ($access=="config"),
'access' => $access,
$this->labeldata => $data
]);
}
protected function ctrlFgcanshare($group) {
protected function ctrlFgcanshare($group,$access) {
$em = $this->getDoctrine()->getManager();
if($group->getFgcanshare()) {
@ -697,6 +794,7 @@ class GroupController extends Controller
$page=$this->getDoctrine()->getRepository("CadolesPortalBundle:Page")->clonePage(null,$group->getPagetemplate());
$group->addPage($page);
$page->setName("Groupe = ".$group->getLabel());
if($access=="user")$page->setUser($this->getUser());
$em->persist($page);
$em->persist($group);
@ -713,6 +811,7 @@ class GroupController extends Controller
$calendar->addGroup($group);
$calendar->setColor($group->getColor());
$calendar->setType(0);
if($access=="user")$calendar->setUser($this->getUser());
$em->persist($calendar);
$em->flush();
@ -724,6 +823,7 @@ class GroupController extends Controller
$blog->setName("Groupe = ".$group->getLabel());
$blog->addGroup($group);
if($access=="user")$blog->setUser($this->getUser());
$em->persist($blog);
$em->flush();

View File

@ -22,6 +22,7 @@ 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;
@ -66,7 +67,7 @@ class UserController extends Controller
$viewniveau02=$this->getParameter('viewniveau02');
// Nombre total d'enregistrement
if($this->isGranted('ROLE_ADMIN'))
if($this->isGranted('ROLE_ADMIN')||$access=="user")
$total = $em->createQueryBuilder()->select('COUNT(user)')->from($this->labelentity,'user')->getQuery()->getSingleScalarResult();
elseif($this->isGranted('ROLE_MODO')) {
$usermodo=$this->get('security.token_storage')->getToken()->getUser()->getId();
@ -79,7 +80,7 @@ class UserController extends Controller
->setParameter("userid", $usermodo)
->getQuery()->getSingleScalarResult();
}
elseif($this->isGranted('ROLE_USER')) {
elseif($this->isGranted('ROLE_ANIM')||$this->isGranted('ROLE_USER')) {
$niveau01=$this->get('security.token_storage')->getToken()->getUser()->getNiveau01();
$total = $em->createQueryBuilder()
->select('COUNT(user)')
@ -93,7 +94,7 @@ class UserController extends Controller
if($search["value"]=="")
$totalf = $total;
else {
if($this->isGranted('ROLE_ADMIN'))
if($this->isGranted('ROLE_ADMIN')||$access=="user")
$totalf= $em->createQueryBuilder()
->select('COUNT(user)')
->from('CadolesCoreBundle:User','user')
@ -117,7 +118,7 @@ class UserController extends Controller
->setParameter("value", "%".$search["value"]."%")
->getQuery()
->getSingleScalarResult();
elseif($this->isGranted('ROLE_USER'))
elseif($this->isGranted('ROLE_ANIM')||$this->isGranted('ROLE_USER'))
$totalf= $em->createQueryBuilder()
->select('COUNT(user)')
->from('CadolesCoreBundle:User','user')
@ -141,7 +142,7 @@ class UserController extends Controller
// Parcours des Enregistrement
$qb = $em->createQueryBuilder();
if($this->isGranted('ROLE_ADMIN')) {
if($this->isGranted('ROLE_ADMIN')||$access=="user") {
$qb->select('user')->from($this->labelentity,'user')->from('CadolesCoreBundle:Niveau01','niveau01');
$qb->where('user.niveau01=niveau01.id');
}
@ -152,7 +153,7 @@ class UserController extends Controller
->andWhere("usermodo.user = :userid")
->setParameter("userid", $usermodo);
}
elseif($this->isGranted('ROLE_USER')) {
elseif($this->isGranted('ROLE_ANIM')||$this->isGranted('ROLE_USER')) {
$qb->select('user')->from($this->labelentity,'user')->from('CadolesCoreBundle:Niveau01','niveau01');
$qb->where('user.niveau01=niveau01.id')
->andwhere("user.niveau01 = :niveau01")
@ -310,14 +311,20 @@ class UserController extends Controller
// Ajout des groupes
foreach($lstgroups as $idgroup) {
$group= new UserGroup();
$group=$em->getRepository("CadolesCoreBundle:Group")->find($idgroup);
$group->setUser($data);
$datagroup = $em->getRepository("CadolesCoreBundle:Group")->find($idgroup);
$group->setGroup($datagroup);
$key = Uuid::uuid4();
$em->persist($group);
$usergroup= new UserGroup();
$usergroup->setUser($data);
$datagroup = $group;
$usergroup->setGroup($datagroup);
$usergroup->setKeyvalue($key);
$em->persist($usergroup);
$em->flush();
$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);
}
// Ajout des modos
@ -420,25 +427,35 @@ class UserController extends Controller
$em->persist($data);
$em->flush();
// On récupère les groupes et on cacule ceux à ajouter ou à supprimer
$lstgroups=array_filter(explode(",",$form->get("linkgroups")->getData()));
$removegroups=array_diff($oldlstgroups,$lstgroups);
$addgroups=array_diff($lstgroups,$oldlstgroups);
// Ajout des nouveaux groupes
foreach($addgroups as $idgroup) {
$group= new UserGroup();
$group=$em->getRepository("CadolesCoreBundle:Group")->find($idgroup);
$key = Uuid::uuid4();
$group->setUser($data);
$datagroup = $em->getRepository("CadolesCoreBundle:Group")->find($idgroup);
$group->setGroup($datagroup);
$em->persist($group);
$usergroup= new UserGroup();
$usergroup->setUser($data);
$datagroup = $group;
$usergroup->setGroup($datagroup);
$usergroup->setKeyvalue($key);
$em->persist($usergroup);
$em->flush();
$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);
}
// Suppression des groupes obsolètes
foreach($removegroups as $idgroup) {
$group=$em->getRepository("CadolesCoreBundle:Group")->find($idgroup);
// Lien Group User
$usergroups = $em ->createQueryBuilder()
->select('table')
@ -449,6 +466,9 @@ class UserController extends Controller
->getQuery()
->getResult();
foreach($usergroups as $usergroup) {
$message="Désinscription de l'utilisateur<br>".$data->getLastname()." ".$data->getFirstname()."<br>Par ".$this->getUser()->getLastname()." ".$this->getUser()->getFirstname();
$websocket = $this->container->get('cadoles.websocket.pushmessage')->send($usergroup->getKeyvalue(),$id,$idgroup,$message);
$em->remove($usergroup);
$em->flush();
}

View File

@ -10,6 +10,8 @@ use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Event\PreUpdateEventArgs;
use Doctrine\ORM\EntityManager;
use Ramsey\Uuid\Uuid;
use Ramsey\Uuid\Exception\UnsatisfiedDependencyException;
class syncUser implements EventSubscriber
{
@ -143,9 +145,11 @@ class syncUser implements EventSubscriber
if($fgall) {
$data=$this->em->getRepository('CadolesCoreBundle:UserGroup')->findBy(array('user'=>$user,'group'=>$fgall[0]));
if(!$data) {
$key = Uuid::uuid4();
$data=new UserGroup();
$data->setUser($user);
$data->setGroup($fgall[0]);
$data->setKeyvalue($key);
$this->em->persist($data);
$this->em->flush();
}

View File

@ -33,174 +33,180 @@ class GroupType extends AbstractType
if($options["portal_activate"]) {
$choices=array("oui" => "1","non" => "0");
$builder->add("fgcanshare",
ChoiceType::class,array(
"label" =>"Groupe de Travail",
'disabled' => ($options["mode"]=="delete"?true:false),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px"),
"choices" => $choices
)
);
$builder->add('pagetemplate',
EntityType::class,[
"class" => "CadolesPortalBundle:Page",
"label" => "Modèle de Page pour l'accueil du groupe",
"required" => false,
"choice_label" => "name",
"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),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px","readonly" => ($options["mode"]=="delete"?true:false))
]);
$builder->add("fgcancreatepage",
ChoiceType::class,array(
"label" =>"Permission de créer des Pages",
'disabled' => ($options["mode"]=="delete"?true:false),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px"),
"choices" => $choices
)
);
$builder->add("fgcancreatecalendar",
ChoiceType::class,array(
"label" =>"Permission de créer des Calendriers",
'disabled' => ($options["mode"]=="delete"?true:false),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px"),
"choices" => $choices
)
);
$builder->add("fgcancreateblog",
ChoiceType::class,array(
"label" =>"Permission de créer des Blogs",
'disabled' => ($options["mode"]=="delete"?true:false),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px"),
"choices" => $choices
)
);
$builder->add('pages', Select2EntityType::class, [
'label' => 'Afficher les Pages',
'class' => 'CadolesPortalBundle:Page',
'multiple' => true,
'remote_route' => 'cadoles_portal_config_ajax_page_seleclist',
'primary_key' => 'id',
'text_property' => 'name',
'minimum_input_length' => 0,
'page_limit' => 100,
'allow_clear' => true,
'delay' => 250,
'cache' => false,
'cache_timeout' => 60000,
'language' => 'fr',
'placeholder' => 'Selectionner des pages',
]);
$builder->add('items', Select2EntityType::class, [
'label' => 'Afficher les Items',
'class' => 'CadolesPortalBundle:Item',
'multiple' => true,
'remote_route' => 'cadoles_portal_config_ajax_item_seleclist',
'primary_key' => 'id',
'text_property' => 'title',
'minimum_input_length' => 0,
'page_limit' => 100,
'allow_clear' => true,
'delay' => 250,
'cache' => false,
'cache_timeout' => 60000,
'language' => 'fr',
'placeholder' => 'Selectionner des items',
]);
$builder->add('alerts', Select2EntityType::class, [
'label' => 'Afficher les Annonces',
'class' => 'CadolesPortalBundle:Alert',
'multiple' => true,
'remote_route' => 'cadoles_portal_config_ajax_alert_seleclist',
'primary_key' => 'id',
'text_property' => 'title',
'minimum_input_length' => 0,
'page_limit' => 100,
'allow_clear' => true,
'delay' => 250,
'cache' => false,
'cache_timeout' => 60000,
'language' => 'fr',
'placeholder' => 'Selectionner des annonces',
]);
$builder->add('calendars', Select2EntityType::class, [
'label' => 'Afficher les Calendriers',
'class' => 'CadolesPortalBundle:Calendar',
'multiple' => true,
'remote_route' => 'cadoles_portal_config_ajax_calendar_seleclist',
'primary_key' => 'id',
'text_property' => 'name',
'minimum_input_length' => 0,
'page_limit' => 100,
'allow_clear' => true,
'delay' => 250,
'cache' => false,
'cache_timeout' => 60000,
'language' => 'fr',
'placeholder' => 'Selectionner des calendriers',
]);
$builder->add('blogs', Select2EntityType::class, [
'label' => 'Afficher les Blogs',
'class' => 'CadolesPortalBundle:Blog',
'multiple' => true,
'remote_route' => 'cadoles_portal_config_ajax_blog_seleclist',
'primary_key' => 'id',
'text_property' => 'name',
'minimum_input_length' => 0,
'page_limit' => 100,
'allow_clear' => true,
'delay' => 250,
'cache' => false,
'cache_timeout' => 60000,
'language' => 'fr',
'placeholder' => 'Selectionner des blogs',
]);
$builder->add('fluxs', Select2EntityType::class, [
'label' => 'Afficher les Flux',
'class' => 'CadolesPortalBundle:Flux',
'multiple' => true,
'remote_route' => 'cadoles_portal_config_ajax_flux_seleclist',
'primary_key' => 'id',
'text_property' => 'title',
'minimum_input_length' => 0,
'page_limit' => 100,
'allow_clear' => true,
'delay' => 250,
'cache' => false,
'cache_timeout' => 60000,
'language' => 'fr',
'placeholder' => 'Selectionner des flux',
]);
if(!$options["fgall"]) {
$builder->add("fgcanshare",
ChoiceType::class,array(
"label" =>"Groupe de Travail",
'disabled' => ($options["mode"]=="delete"||$options["access"]=="user"?true:false),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px"),
"choices" => $choices
)
);
$builder->add('notices', Select2EntityType::class, [
'label' => 'Afficher les Chartes',
'class' => 'CadolesPortalBundle:Notice',
'multiple' => true,
'remote_route' => 'cadoles_portal_config_ajax_notice_seleclist',
'primary_key' => 'id',
'text_property' => 'title',
'minimum_input_length' => 0,
'page_limit' => 100,
'allow_clear' => true,
'delay' => 250,
'cache' => false,
'cache_timeout' => 60000,
'language' => 'fr',
'placeholder' => 'Selectionner des chartes',
]);
$builder->add('pagetemplate',
EntityType::class,[
"class" => "CadolesPortalBundle:Page",
"label" => "Modèle de Page pour l'accueil du groupe",
"required" => false,
"choice_label" => "name",
"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),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px","readonly" => ($options["mode"]=="delete"?true:false))
]);
}
if($options["access"]=="config") {
$builder->add("fgcancreatepage",
ChoiceType::class,array(
"label" =>"Permission de créer des Pages",
'disabled' => ($options["mode"]=="delete"?true:false),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px"),
"choices" => $choices
)
);
$builder->add("fgcancreatecalendar",
ChoiceType::class,array(
"label" =>"Permission de créer des Calendriers",
'disabled' => ($options["mode"]=="delete"?true:false),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px"),
"choices" => $choices
)
);
$builder->add("fgcancreateblog",
ChoiceType::class,array(
"label" =>"Permission de créer des Blogs",
'disabled' => ($options["mode"]=="delete"?true:false),
"attr" => array("class" => "form-control", "style" => "margin-bottom:15px"),
"choices" => $choices
)
);
$builder->add('pages', Select2EntityType::class, [
'label' => 'Afficher les Pages',
'class' => 'CadolesPortalBundle:Page',
'multiple' => true,
'remote_route' => 'cadoles_portal_config_ajax_page_seleclist',
'primary_key' => 'id',
'text_property' => 'name',
'minimum_input_length' => 0,
'page_limit' => 100,
'allow_clear' => true,
'delay' => 250,
'cache' => false,
'cache_timeout' => 60000,
'language' => 'fr',
'placeholder' => 'Selectionner des pages',
]);
$builder->add('items', Select2EntityType::class, [
'label' => 'Afficher les Items',
'class' => 'CadolesPortalBundle:Item',
'multiple' => true,
'remote_route' => 'cadoles_portal_config_ajax_item_seleclist',
'primary_key' => 'id',
'text_property' => 'title',
'minimum_input_length' => 0,
'page_limit' => 100,
'allow_clear' => true,
'delay' => 250,
'cache' => false,
'cache_timeout' => 60000,
'language' => 'fr',
'placeholder' => 'Selectionner des items',
]);
$builder->add('alerts', Select2EntityType::class, [
'label' => 'Afficher les Annonces',
'class' => 'CadolesPortalBundle:Alert',
'multiple' => true,
'remote_route' => 'cadoles_portal_config_ajax_alert_seleclist',
'primary_key' => 'id',
'text_property' => 'title',
'minimum_input_length' => 0,
'page_limit' => 100,
'allow_clear' => true,
'delay' => 250,
'cache' => false,
'cache_timeout' => 60000,
'language' => 'fr',
'placeholder' => 'Selectionner des annonces',
]);
$builder->add('calendars', Select2EntityType::class, [
'label' => 'Afficher les Calendriers',
'class' => 'CadolesPortalBundle:Calendar',
'multiple' => true,
'remote_route' => 'cadoles_portal_config_ajax_calendar_seleclist',
'primary_key' => 'id',
'text_property' => 'name',
'minimum_input_length' => 0,
'page_limit' => 100,
'allow_clear' => true,
'delay' => 250,
'cache' => false,
'cache_timeout' => 60000,
'language' => 'fr',
'placeholder' => 'Selectionner des calendriers',
]);
$builder->add('blogs', Select2EntityType::class, [
'label' => 'Afficher les Blogs',
'class' => 'CadolesPortalBundle:Blog',
'multiple' => true,
'remote_route' => 'cadoles_portal_config_ajax_blog_seleclist',
'primary_key' => 'id',
'text_property' => 'name',
'minimum_input_length' => 0,
'page_limit' => 100,
'allow_clear' => true,
'delay' => 250,
'cache' => false,
'cache_timeout' => 60000,
'language' => 'fr',
'placeholder' => 'Selectionner des blogs',
]);
$builder->add('fluxs', Select2EntityType::class, [
'label' => 'Afficher les Flux',
'class' => 'CadolesPortalBundle:Flux',
'multiple' => true,
'remote_route' => 'cadoles_portal_config_ajax_flux_seleclist',
'primary_key' => 'id',
'text_property' => 'title',
'minimum_input_length' => 0,
'page_limit' => 100,
'allow_clear' => true,
'delay' => 250,
'cache' => false,
'cache_timeout' => 60000,
'language' => 'fr',
'placeholder' => 'Selectionner des flux',
]);
$builder->add('notices', Select2EntityType::class, [
'label' => 'Afficher les Chartes',
'class' => 'CadolesPortalBundle:Notice',
'multiple' => true,
'remote_route' => 'cadoles_portal_config_ajax_notice_seleclist',
'primary_key' => 'id',
'text_property' => 'title',
'minimum_input_length' => 0,
'page_limit' => 100,
'allow_clear' => true,
'delay' => 250,
'cache' => false,
'cache_timeout' => 60000,
'language' => 'fr',
'placeholder' => 'Selectionner des chartes',
]);
}
}
$builder->add('idicon', HiddenType::class,['mapped'=> false,'data' => $options["idicon"]]);
@ -293,9 +299,11 @@ class GroupType extends AbstractType
$resolver->setDefaults(array(
'data_class' => 'Cadoles\CoreBundle\Entity\Group',
'mode' => "string",
'access' => "string",
'masteridentity' => "string",
'portal_activate' => "boolean",
'updatelimite' => "boolean",
'fgall' => "boolean",
'idicon' => "string",
));
}

View File

@ -63,7 +63,7 @@ class UserType extends AbstractType
);
if($options["access"]=="config") {
$choices=array("Utilisateur" => "ROLE_USER","Modérateur" => "ROLE_MODO","Administrateur" => "ROLE_ADMIN");
$choices=array("Utilisateur" => "ROLE_USER","Animateur de Groupe" => "ROLE_ANIM","Modérateur" => "ROLE_MODO","Administrateur" => "ROLE_ADMIN");
$onfocus=($options["perm"]?"":"this.defaultIndex=this.selectedIndex;");
$onchange=($options["perm"]?"":"this.selectedIndex=this.defaultIndex;");
$readonly=($options["perm"]?"":" background-color: #eee;");

View File

@ -4,6 +4,8 @@ namespace Cadoles\CoreBundle\Repository;
use Doctrine\Common\Collections\ArrayCollection;
use Cadoles\CoreBundle\Entity\UserGroup;
use Ramsey\Uuid\Uuid;
use Ramsey\Uuid\Exception\UnsatisfiedDependencyException;
class GroupRepository extends \Doctrine\ORM\EntityRepository
{
@ -56,9 +58,11 @@ class GroupRepository extends \Doctrine\ORM\EntityRepository
foreach($retgroups as $retgroup) {
$usergroup=$this->_em->getRepository('CadolesCoreBundle:UserGroup')->findBy(["user"=>$user,"group"=>$retgroup]);
if(!$usergroup) {
$key = Uuid::uuid4();
$usergroup=new UserGroup();
$usergroup->setUser($user);
$usergroup->setGroup($retgroup);
$usergroup->setKeyvalue($key);
$this->_em->persist($usergroup);
$this->_em->flush();

View File

@ -249,15 +249,15 @@ cadoles_core_config_importuser_filectrl:
defaults: { _controller: CadolesCoreBundle:User:importuserfilectrl }
#-- Access user
cadoles_core_profil:
cadoles_core_user:
path: /user
defaults: { _controller: CadolesCoreBundle:User:profil }
cadoles_core_profil_user_ajax_list:
cadoles_core_user_user_ajax_list:
path: /user/user/ajax/list
defaults: { _controller: CadolesCoreBundle:User:ajaxlist, access: user }
cadoles_core_profil_users:
cadoles_core_user_users:
path: /user/users
defaults: { _controller: CadolesCoreBundle:User:list, access: user }
@ -311,50 +311,95 @@ cadoles_core_config_niveau02_ajax_list:
#== Group ================================================================================================================
#-- Access config
cadoles_core_config_group:
path: /config/group
defaults: { _controller: CadolesCoreBundle:Group:list }
defaults: { _controller: CadolesCoreBundle:Group:list, access: config }
cadoles_core_config_group_submit:
path: /config/group/submit
defaults: { _controller: CadolesCoreBundle:Group:submit }
defaults: { _controller: CadolesCoreBundle:Group:submit, access: config }
cadoles_core_config_group_update:
path: /config/group/update/{id}
defaults: { _controller: CadolesCoreBundle:Group:update }
defaults: { _controller: CadolesCoreBundle:Group:update, access: config }
cadoles_core_config_group_delete:
path: /config/group/delete/{id}
defaults: { _controller: CadolesCoreBundle:Group:delete }
defaults: { _controller: CadolesCoreBundle:Group:delete, access: config }
cadoles_core_config_group_ajax_list:
path: /config/group/ajax/list
defaults: { _controller: CadolesCoreBundle:Group:ajaxlist }
defaults: { _controller: CadolesCoreBundle:Group:ajaxlist, access: config }
cadoles_core_config_group_users:
path: /config/group/users/{id}
defaults: { _controller: CadolesCoreBundle:Group:users }
defaults: { _controller: CadolesCoreBundle:Group:users, access: config }
cadoles_core_config_group_ajax_usersnotin:
path: /config/group/ajax/usersnotin/{id}
defaults: { _controller: CadolesCoreBundle:Group:ajaxusersnotin }
defaults: { _controller: CadolesCoreBundle:Group:ajaxusersnotin, access: config }
cadoles_core_config_group_ajax_usersin:
path: /config/group/ajax/usersin/{id}
defaults: { _controller: CadolesCoreBundle:Group:ajaxusersin }
defaults: { _controller: CadolesCoreBundle:Group:ajaxusersin, access: config }
cadoles_core_config_group_ajax_usergroup_add:
path: /config/group/ajax/usergroupadd
defaults: { _controller: CadolesCoreBundle:Group:usergroupadd }
defaults: { _controller: CadolesCoreBundle:Group:usergroupadd, access: config }
cadoles_core_config_group_ajax_usergroup_del:
path: /config/group/ajax/usergroupdel
defaults: { _controller: CadolesCoreBundle:Group:usergroupdel }
defaults: { _controller: CadolesCoreBundle:Group:usergroupdel, access: config }
cadoles_core_config_group_ajax_switchmanager:
path: /config/group/ajax/switchmanager
defaults: { _controller: CadolesCoreBundle:Group:switchmanager }
defaults: { _controller: CadolesCoreBundle:Group:switchmanager, access: config }
#-- Access user
cadoles_core_user_group:
path: /user/group
defaults: { _controller: CadolesCoreBundle:Group:list, access: user }
cadoles_core_user_group_ajax_list:
path: /user/group/ajax/list
defaults: { _controller: CadolesCoreBundle:Group:ajaxlist, access: user }
cadoles_core_user_group_submit:
path: /user/group/submit
defaults: { _controller: CadolesCoreBundle:Group:submit, access: user }
cadoles_core_user_group_update:
path: /user/group/update/{id}
defaults: { _controller: CadolesCoreBundle:Group:update, access: user }
cadoles_core_user_group_delete:
path: /user/group/delete/{id}
defaults: { _controller: CadolesCoreBundle:Group:delete, access: user }
cadoles_core_user_group_users:
path: /user/group/users/{id}
defaults: { _controller: CadolesCoreBundle:Group:users, access: user }
cadoles_core_user_group_ajax_usersnotin:
path: /user/group/ajax/usersnotin/{id}
defaults: { _controller: CadolesCoreBundle:Group:ajaxusersnotin, access: user }
cadoles_core_user_group_ajax_usersin:
path: /user/group/ajax/usersin/{id}
defaults: { _controller: CadolesCoreBundle:Group:ajaxusersin, access: user }
cadoles_core_user_group_ajax_usergroup_add:
path: /user/group/ajax/usergroupadd
defaults: { _controller: CadolesCoreBundle:Group:usergroupadd, access: user }
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 }
#== Whitelist ============================================================================================================
cadoles_core_config_whitelist:

View File

@ -42,6 +42,9 @@
<img id="logo" src="/{{ alias }}/{{ app.session.get('logo') }}">
<h1>{{ app.session.get('appname') }}</h1>
<h2>Vous avez perdu votre connection</h2>
ou
<h2>Vous n'avez plus accès à cette page</h2>
<br><br>
Vous allez être redirigé vers la page d'accueil
<br>
</div>

View File

@ -12,7 +12,7 @@
{% endif %}
</h1>
{{ form_widget(form.submit) }} <a class="btn btn-default" href={{ path('cadoles_core_config_group') }}>Annuler</a>
{{ form_widget(form.submit) }} <a class="btn btn-default" href={{ path('cadoles_core_'~access~'_group') }}>Annuler</a>
<br><br>
@ -96,7 +96,7 @@
</div>
<div class="col-sm-6">
{% if form.fgcanshare is defined %}
{% if form.fgcancreatepage is defined %}
<div class="panel panel-primary">
<div class="panel-heading">
<i class="fa fa-pencil fa-fw"></i> Permissions Portail

View File

@ -1,13 +1,27 @@
{% extends '@CadolesCore/base.html.twig' %}
{% block pagewrapper %}
<h1 class="page-header">Gestion des Groupes</h1>
<h1 class="page-header">
{%if access=="config" %}
Gestion des Groupes
{%else%}
Mes Groupes de Travail
{%endif%}
</h1>
<p><a class="btn btn-success" href={{ path('cadoles_core_config_group_submit') }}>Ajouter</a></p>
{% if is_granted('ROLE_ADMIN') or is_granted('ROLE_MODO') or is_granted('ROLE_ANIM') %}
<p><a class="btn btn-success" href={{ path('cadoles_core_'~access~'_group_submit') }}>
{% if access=="config" %}
Ajouter
{% else %}
Créer un Groupe de Travail
{% endif %}
</a></p>
{% endif %}
<div class="panel panel-primary">
<div class="panel-heading">
<i class="fa fa-table fa-fw"></i> Liste des Groupes
<i class="fa fa-table fa-fw"></i>Liste des Groupes
</div>
<div class="panel-body">
@ -21,10 +35,12 @@
<th class="no-sort {% if masteridentity=="SQL" %} no-visible {% endif %}">Filtre</th>
{% if portal_activate %}
<th>Groupe de Travail</th>
{% if access=="config" %}
<th>Création Pages</th>
<th>Création Calendriers</th>
<th>Création Blogs</th>
{% endif %}
{% endif %}
</tr>
</thead>
</table>
@ -43,7 +59,7 @@
order: [[ 1, "asc" ]],
processing: true,
serverSide: true,
ajax: "{{ path('cadoles_core_config_group_ajax_list') }}",
ajax: "{{ path('cadoles_core_'~access~'_group_ajax_list') }}",
});
});
{% endblock %}

View File

@ -3,8 +3,7 @@
{% block pagewrapper %}
<h1 class="page-header">Gestion des Utilisateurs</h1>
<h2>Groupe = {{ group.label }}</h2>
<a class="btn btn-default" href={{ path('cadoles_core_config_group') }}>Fermer</a>
<a class="btn btn-default" href={{ path('cadoles_core_'~access~'_group') }}>Fermer</a>
<br><br>
<div class="col-sm-6">
@ -22,7 +21,9 @@
<th width="70px" class="no-sort">Avatar</th>
<th width="200px">Login</th>
<th>Email</th>
<th class="no-sort no-visible">Manager</th>
{% if group.fgcanshare %}
<th class="no-sort">Manager</th>
{% endif %}
</tr>
</thead>
</table>
@ -45,8 +46,10 @@
<th width="70px" class="no-sort">Action</th>
<th width="70px" class="no-sort">Avatar</th>
<th width="200px">Login</th>
<th>Email</th>
<th class="no-sort {% if not group.fgcanshare %}no-visible{% endif %}">Manager</th>
<th>Email</th>
{% if group.fgcanshare %}
<th class="no-sort">Manager</th>
{% endif %}
</tr>
</thead>
</table>
@ -60,13 +63,13 @@
{% block localjavascript %}
$(document).ready(function() {
$('#dataTablesnotin').DataTable({
columnDefs: [ { "targets": 'no-sort', "orderable": false } ],
columnDefs: [ { "targets": 'no-sort', "orderable": false },{ "targets": 'no-visible', "visible": false } ],
responsive: true,
iDisplayLength: 100,
order: [[ 2, "asc" ]],
processing: true,
serverSide: true,
ajax: "{{ path('cadoles_core_config_group_ajax_usersnotin',{'id':group.id}) }}",
ajax: "{{ path('cadoles_core_'~access~'_group_ajax_usersnotin',{'id':group.id}) }}",
});
$('#dataTablesin').DataTable({
@ -77,10 +80,10 @@
processing: true,
serverSide: true,
ajax: {
"url": "{{ path('cadoles_core_config_group_ajax_usersin',{'id':group.id}) }}",
"url": "{{ path('cadoles_core_'~access~'_group_ajax_usersin',{'id':group.id}) }}",
"data": function ( d ) {
return $.extend( {}, d, {
"fgcanshare": {{ group.fgcanshare }}
"fgcanshare": "{{ group.fgcanshare }}"
});
}
},
@ -96,7 +99,7 @@
$.ajax({
rowId: 2,
method: "POST",
url: "{{ path('cadoles_core_config_group_ajax_usergroup_add') }}",
url: "{{ path('cadoles_core_'~access~'_group_ajax_usergroup_add') }}",
data: "userid="+userid+"&groupid="+{{ group.id }},
success: function(data, dataType)
{
@ -118,7 +121,7 @@
$.ajax({
rowId: 2,
method: "POST",
url: "{{ path('cadoles_core_config_group_ajax_usergroup_del') }}",
url: "{{ path('cadoles_core_'~access~'_group_ajax_usergroup_del') }}",
data: "userid="+userid+"&groupid="+{{ group.id }},
success: function(data, dataType)
{
@ -139,7 +142,7 @@
function switchManager(id) {
$.ajax({
method: "POST",
url: "{{ path('cadoles_core_config_group_ajax_switchmanager') }}",
url: "{{ path('cadoles_core_'~access~'_group_ajax_switchmanager') }}",
data: {
"group": {{ group.id }},
"user": id,

View File

@ -2,9 +2,10 @@
{% if is_granted('ROLE_ADMIN') or is_granted('ROLE_MODO') %}
<li><a href="{{ path('cadoles_core_config') }}" title="Configuration"><i class="fa fa-gear fa-fw"></i></a>
{% endif %}
<li><a href="{{ path('cadoles_core_profil_users') }}" title="Annuaire"><i class="fa fa-users fa-fw"></i></a>
<li><a href="{{ path('cadoles_core_user_users') }}" title="Annuaire"><i class="fa fa-address-book fa-fw"></i></a>
<li><a href="{{ path('cadoles_core_user_group') }}" title="Groupes"><i class="fa fa-users fa-fw"></i></a>
<li><a href="{{ path('cadoles_portal_user_notice_view') }}" title="Charte"><i class="fa fa-info fa-fw"></i></a>
<li><a href="{{ path('cadoles_core_profil') }}" title="Profil"><img class='avatar' src="/{{ alias }}/uploads/avatar/{{ app.user.avatar }}"></a></li>
<li><a href="{{ path('cadoles_core_user') }}" title="Profil"><img class='avatar' src="/{{ alias }}/uploads/avatar/{{ app.user.avatar }}"></a></li>
<li>

View File

@ -54,7 +54,11 @@
<div class="row">
<div style="width:90px; margin:auto;">
<img id="user_avatar_img" src="/{{ alias }}/uploads/avatar/{{ user.avatar }}" class="avatar big" >
{% set avatar= "noavatar.png" %}
{% if user.avatar %}
{% set avatar= user.avatar %}
{% endif %}
<img id="user_avatar_img" src="/{{ alias }}/uploads/avatar/{{ avatar }}" class="avatar big" >
{{ form_widget(form.avatar) }}
<a class="btn btn-info" style="width:100%; margin-bottom:15px;" data-toggle="modal" data-target="#mymodal" onClick="ModalLoad('mymodal','Avatar','{{ path('cadoles_core_crop01') }}');" title='Ajouter un avatar'>Modifier</a>
</div>
@ -134,7 +138,7 @@
</div>
<div class="panel-body">
<a class="btn btn-success" data-toggle="modal" data-target="#groupmodal" title='Ajouter'>Ajouter</a>
<a class="btn btn-success" data-toggle="modal" data-target="#groupmodal" title='Ajouter'>Inscription à un Groupe</a>
<br><br>
@ -152,8 +156,8 @@
<tbody>
{% for group in user.groups %}
<tr id="linkgroup{{ group.group.id }}">
{% if (access=="config" or group.group.fgopen) and not group.group.fgall and group.group.ldapfilter=="" and group.group.attributes =="" %}
<td><a style="cursor:pointer"><i class="fa fa-trash fa-fw" onclick="removeLinkGroup({{ group.group.id }})"></i></a></td>
{% if (access=="config" or group.group.fgopen or group.group.fgcanshare) and group.group.owner!=app.user and not group.group.fgall and group.group.ldapfilter=="" and group.group.attributes =="" %}
<td><a style="cursor:pointer" title="Se Désinscrire"><i class="fa fa-sign-out fa-fw" onclick="removeLinkGroup({{ group.group.id }})"></i></a></td>
{% else %}
<td></td>
{% endif %}
@ -383,7 +387,8 @@
})
.error(function(){
var imgSrc = $(this).attr('src');
$(this).attr('src',imgSrc);
if(imgSrc!="/{{alias}}/uploads/avatar/")
$(this).attr('src',imgSrc);
});
$(document.body).on("change","#user_birthcountry",function(){
@ -445,14 +450,16 @@
});
function removeLinkGroup(id) {
// On supprime la ligne du tableau
$("#linkgroup"+id).remove();
if (confirm("Désirez vous vraiment vous désinscrire de ce groupe ?")) {
// On supprime la ligne du tableau
$("#linkgroup"+id).remove();
// On supprime l'id de la liste
$("#user_linkgroups").val($("#user_linkgroups").val().replace(id+",",""));
// On supprime l'id de la liste
$("#user_linkgroups").val($("#user_linkgroups").val().replace(id+",",""));
// On rend visible la ligne de liste complète
$("#listgroup"+id).show();
// On rend visible la ligne de liste complète
$("#listgroup"+id).show();
}
}
function addLinkGroup(id) {
@ -464,7 +471,7 @@
// On ajoute la ligne de liste des liens
html ="<tr id='linkgroup"+id+"'>";
html+="<td><a style='cursor:pointer'><i class='fa fa-trash fa-fw' onclick='removeLinkGroup("+id+")'></i></a></td>";
html+="<td><a style='cursor:pointer' title='Se Désinscrire'><i class='fa fa-sign-out fa-fw' onclick='removeLinkGroup("+id+")'></i></a></td>";
html+="<td>"+$("#listgrouplabel"+id).html()+"</td>";
html+="</tr>";

View File

@ -68,7 +68,7 @@
ajax: "{{ path('cadoles_core_config_user_ajax_list') }}",
{% else %}
order: [[ 1, "asc" ]],
ajax: "{{ path('cadoles_core_profil_user_ajax_list') }}",
ajax: "{{ path('cadoles_core_user_user_ajax_list') }}",
{% endif %}
});
});

View File

@ -43,6 +43,7 @@ class InitDataCommand extends ContainerAwareCommand
$activate_widopensondage = $this->getContainer()->getParameter('activate_widopensondage');
$activate_widpiwik = $this->getContainer()->getParameter('activate_widpiwik');
$activate_widwordpress = $this->getContainer()->getParameter('activate_widwordpress');
$activate_websocket = $this->getContainer()->getParameter('websocket_activate');
$output->writeln('PORTAL = Default Data');
@ -670,22 +671,27 @@ class InitDataCommand extends ContainerAwareCommand
// Widget Chat
$entityWidget = $em->getRepository('CadolesPortalBundle:Widget')->find(-1840);
if(!$entityWidget) $entityWidget = new Widget();
$entityicon = $em->getRepository('CadolesPortalBundle:Icon')->findoneby(["label"=>"uploads/icon/icon_chat.png"]);
$entityWidget->setId(-1840);
$entityWidget->setRoworder(2);
$entityWidget->setIcon($entityicon);
$entityWidget->setName('Chat');
$entityWidget->setDescription("Conversation instantanée");
$entityWidget->setRouteview("cadoles_portal_config_panelwidget_view_chat");
$entityWidget->setHeight("1000");
$entityWidget->setAutoajust(false);
$entityWidget->setBorder(true);
$entityWidget->setOpened(true);
$entityWidget->setAccess(["config","user","group"]);
$parameter = json_decode('{"fields": []}');
$entityWidget->setParameter($parameter);
$em->persist($entityWidget);
if($activate_websocket) {
if(!$entityWidget) $entityWidget = new Widget();
$entityicon = $em->getRepository('CadolesPortalBundle:Icon')->findoneby(["label"=>"uploads/icon/icon_chat.png"]);
$entityWidget->setId(-1840);
$entityWidget->setRoworder(2);
$entityWidget->setIcon($entityicon);
$entityWidget->setName('Chat');
$entityWidget->setDescription("Conversation instantanée");
$entityWidget->setRouteview("cadoles_portal_config_panelwidget_view_chat");
$entityWidget->setHeight("1000");
$entityWidget->setAutoajust(false);
$entityWidget->setBorder(true);
$entityWidget->setOpened(true);
$entityWidget->setAccess(["config","user","group"]);
$parameter = json_decode('{"fields": []}');
$entityWidget->setParameter($parameter);
$em->persist($entityWidget);
}
else {
$em->remove($entityWidget);
}

View File

@ -1816,7 +1816,7 @@ class PagewidgetController extends Controller
foreach($group->getUsers() as $usergroup) {
array_push($members,$usergroup->getUser());
array_push($members,$usergroup);
}
}
}

View File

@ -46,10 +46,11 @@ class AlertType extends AbstractType
->add('roles', ChoiceType::class, [
"label" => 'Visible pour les Rôles',
"choices" => [
"Visiteur" => 'ROLE_ANONYME',
"Utilisateur" => 'ROLE_USER',
"Modérateur" => 'ROLE_MODO',
"Administateur" => 'ROLE_ADMIN',
"Visiteur" => 'ROLE_ANONYME',
"Utilisateur" => 'ROLE_USER',
"Animateur de Groupe" => 'ROLE_ANIM',
"Modérateur" => 'ROLE_MODO',
"Administateur" => 'ROLE_ADMIN',
],
"multiple" => true,
"expanded" => true,

View File

@ -32,10 +32,11 @@ class BlogType extends AbstractType
->add('roles', ChoiceType::class, [
"label" => 'Visible pour les Rôles',
"choices" => [
"Visiteur" => 'ROLE_ANONYME',
"Utilisateur" => 'ROLE_USER',
"Modérateur" => 'ROLE_MODO',
"Administateur" => 'ROLE_ADMIN',
"Visiteur" => 'ROLE_ANONYME',
"Utilisateur" => 'ROLE_USER',
"Animateur de Groupe" => 'ROLE_ANIM',
"Modérateur" => 'ROLE_MODO',
"Administateur" => 'ROLE_ADMIN',
],
"multiple" => true,
"expanded" => true,

View File

@ -70,10 +70,11 @@ class CalendarType extends AbstractType
->add('roles', ChoiceType::class, [
"label" => 'Visible pour les Rôles',
"choices" => [
"Visiteur" => 'ROLE_ANONYME',
"Utilisateur" => 'ROLE_USER',
"Modérateur" => 'ROLE_MODO',
"Administateur" => 'ROLE_ADMIN',
"Visiteur" => 'ROLE_ANONYME',
"Utilisateur" => 'ROLE_USER',
"Animateur de Groupe" => 'ROLE_ANIM',
"Modérateur" => 'ROLE_MODO',
"Administateur" => 'ROLE_ADMIN',
],
"multiple" => true,
"expanded" => true,

View File

@ -45,10 +45,11 @@ class FluxType extends AbstractType
->add('roles', ChoiceType::class, [
"label" => 'Visible pour les Rôles',
"choices" => [
"Visiteur" => 'ROLE_ANONYME',
"Utilisateur" => 'ROLE_USER',
"Modérateur" => 'ROLE_MODO',
"Administateur" => 'ROLE_ADMIN',
"Visiteur" => 'ROLE_ANONYME',
"Utilisateur" => 'ROLE_USER',
"Animateur de Groupe" => 'ROLE_ANIM',
"Modérateur" => 'ROLE_MODO',
"Administateur" => 'ROLE_ADMIN',
],
"multiple" => true,
"expanded" => true,

View File

@ -58,10 +58,11 @@ class ItemType extends AbstractType
->add('roles', ChoiceType::class, [
"label" => 'Visible pour les Rôles',
"choices" => [
"Visiteur" => 'ROLE_ANONYME',
"Utilisateur" => 'ROLE_USER',
"Modérateur" => 'ROLE_MODO',
"Administateur" => 'ROLE_ADMIN',
"Visiteur" => 'ROLE_ANONYME',
"Utilisateur" => 'ROLE_USER',
"Animateur de Groupe" => 'ROLE_ANIM',
"Modérateur" => 'ROLE_MODO',
"Administateur" => 'ROLE_ADMIN',
],
"multiple" => true,
"expanded" => true,

View File

@ -53,10 +53,11 @@ class NoticeType extends AbstractType
->add('roles', ChoiceType::class, [
"label" => 'Visible pour les Rôles',
"choices" => [
"Visiteur" => 'ROLE_ANONYME',
"Utilisateur" => 'ROLE_USER',
"Modérateur" => 'ROLE_MODO',
"Administateur" => 'ROLE_ADMIN',
"Visiteur" => 'ROLE_ANONYME',
"Utilisateur" => 'ROLE_USER',
"Animateur de Groupe" => 'ROLE_ANIM',
"Modérateur" => 'ROLE_MODO',
"Administateur" => 'ROLE_ADMIN',
],
"multiple" => true,
"expanded" => true,

View File

@ -48,10 +48,11 @@ class PageUpdateEditorType extends AbstractType
->add('roles', ChoiceType::class, [
"label" => 'Visible pour les Rôles',
"choices" => [
"Visiteur" => 'ROLE_ANONYME',
"Utilisateur" => 'ROLE_USER',
"Modérateur" => 'ROLE_MODO',
"Administateur" => 'ROLE_ADMIN',
"Visiteur" => 'ROLE_ANONYME',
"Utilisateur" => 'ROLE_USER',
"Animateur de Groupe" => 'ROLE_ANIM',
"Modérateur" => 'ROLE_MODO',
"Administateur" => 'ROLE_ADMIN',
],
"multiple" => true,
"expanded" => true,

View File

@ -35,10 +35,11 @@ class PageUpdateToolType extends AbstractType
->add('roles', ChoiceType::class, [
"label" => 'Visible pour les Rôles',
"choices" => [
"Visiteur" => 'ROLE_ANONYME',
"Utilisateur" => 'ROLE_USER',
"Modérateur" => 'ROLE_MODO',
"Administateur" => 'ROLE_ADMIN',
"Visiteur" => 'ROLE_ANONYME',
"Utilisateur" => 'ROLE_USER',
"Animateur de Groupe" => 'ROLE_ANIM',
"Modérateur" => 'ROLE_MODO',
"Administateur" => 'ROLE_ADMIN',
],
"multiple" => true,
"expanded" => true,

View File

@ -44,10 +44,11 @@ class PageUpdateURLType extends AbstractType
->add('roles', ChoiceType::class, [
"label" => 'Visible pour les Rôles',
"choices" => [
"Visiteur" => 'ROLE_ANONYME',
"Utilisateur" => 'ROLE_USER',
"Modérateur" => 'ROLE_MODO',
"Administateur" => 'ROLE_ADMIN',
"Visiteur" => 'ROLE_ANONYME',
"Utilisateur" => 'ROLE_USER',
"Animateur de Groupe" => 'ROLE_ANIM',
"Modérateur" => 'ROLE_MODO',
"Administateur" => 'ROLE_ADMIN',
],
"multiple" => true,
"expanded" => true,

View File

@ -45,10 +45,11 @@ class PageUpdateWidgetType extends AbstractType
->add('roles', ChoiceType::class, [
"label" => 'Visible pour les Rôles',
"choices" => [
"Visiteur" => 'ROLE_ANONYME',
"Utilisateur" => 'ROLE_USER',
"Modérateur" => 'ROLE_MODO',
"Administateur" => 'ROLE_ADMIN',
"Visiteur" => 'ROLE_ANONYME',
"Utilisateur" => 'ROLE_USER',
"Animateur de Groupe" => 'ROLE_ANIM',
"Modérateur" => 'ROLE_MODO',
"Administateur" => 'ROLE_ADMIN',
],
"multiple" => true,
"expanded" => true,

View File

@ -68,6 +68,7 @@ class BlogRepository extends EntityRepository
// blogs partagées
$blogsshared=[];
/*
if($user) {
$blogsshared=$this->createQueryBuilder('blog')
->from('CadolesCoreBundle:Group','g')
@ -94,6 +95,7 @@ class BlogRepository extends EntityRepository
$blogshared->setCanadd($this->getInwriter($user,$blogshared));
}
}
*/
// Initialisation du calcul des blogs
$blogsadmin=new ArrayCollection();
@ -102,7 +104,8 @@ class BlogRepository extends EntityRepository
foreach($roles as $role) {
$qb = $this->createQueryBuilder("blog");
$qb ->where($qb->expr()->like('blog.roles', $qb->expr()->literal("%$role%")))
->andWhere("blog.user is null");
->andWhere("blog.user != :user or blog.user is null")
->setParameter('user',$user);
$blogsroles=$qb->getQuery()->getResult();
foreach($blogsroles as $blogrole) {
@ -114,7 +117,8 @@ class BlogRepository extends EntityRepository
foreach($groups as $group) {
$qb = $this->createQueryBuilder("blog");
$qb ->where(":group MEMBER OF blog.groups")
->andWhere("blog.user is null")
->andWhere("blog.user != :user or blog.user is null")
->setParameter('user',$user)
->setParameter("group",$group->getGroup());
$blogsgroups=$qb->getQuery()->getResult();
@ -184,8 +188,6 @@ class BlogRepository extends EntityRepository
foreach($groups as $group) {
$qb = $this->createQueryBuilder("blog");
$qb ->where(":group MEMBER OF blog.groups")
->andWhere("blog.id=:id")
->andWhere("blog.user is null")
->andWhere("blog.id=:id")
->setParameter("id",$blog->getId())
->setParameter("group",$group->getGroup());

View File

@ -58,24 +58,23 @@ class CalendarRepository extends EntityRepository
// Pages partagées
$calendarsshared=[];
/*
if($user) {
$calendarsshared=$this->createQueryBuilder('calendar')
->from('CadolesCoreBundle:Group','g')
->from('CadolesCoreBundle:UserGroup','ug')
->from('CadolesCoreBundle:UserGroup','proprio')
->where('g.fgcanshare=:fgcanshare')
->andWhere('g=ug.group')
->andWhere('ug.user=:user')
->andWhere('g MEMBER OF calendar.groups')
->andWhere('calendar.user != :user')
->andWhere('calendar.user is not null')
->andWhere('proprio.user=calendar.user')
->andWhere('proprio.group=g')
->setParameter('fgcanshare',true)
->setParameter('user',$user)
->addOrderBy('calendar.name', 'ASC')
->getQuery()->getResult();
}
*/
// Initialisation du calcul des calendars
@ -85,7 +84,8 @@ class CalendarRepository extends EntityRepository
foreach($roles as $role) {
$qb = $this->createQueryBuilder("calendar");
$qb ->where($qb->expr()->like('calendar.roles', $qb->expr()->literal("%$role%")))
->andWhere("calendar.user is null");
->andWhere("calendar.user != :user or calendar.user is null")
->setParameter('user',$user);
$calendarsroles=$qb->getQuery()->getResult();
foreach($calendarsroles as $calendarrole) {
@ -97,7 +97,8 @@ class CalendarRepository extends EntityRepository
foreach($groups as $group) {
$qb = $this->createQueryBuilder("calendar");
$qb ->where(":group MEMBER OF calendar.groups")
->andWhere("calendar.user is null")
->andWhere("calendar.user != :user or calendar.user is null")
->setParameter('user',$user)
->setParameter("group",$group->getGroup());
$calendarsgroups=$qb->getQuery()->getResult();
@ -142,8 +143,6 @@ class CalendarRepository extends EntityRepository
foreach($groups as $group) {
$qb = $this->createQueryBuilder("calendar");
$qb ->where(":group MEMBER OF calendar.groups")
->andWhere("calendar.id=:id")
->andWhere("calendar.user is null")
->andWhere("calendar.id=:id")
->setParameter("id",$calendar->getId())
->setParameter("group",$group->getGroup());
@ -173,7 +172,7 @@ class CalendarRepository extends EntityRepository
->from('CadolesCoreBundle:UserGroup','usergroup')
->andwhere('usergroup.group MEMBER OF calendar.groups')
->andwhere('usergroup.user=:user')
->andwhere('usergroup.user=user')
->andwhere('usergroup.fgmanager=:flag')
->from('CadolesCoreBundle:Group','groupe')
@ -186,7 +185,8 @@ class CalendarRepository extends EntityRepository
$inblogwriters=$qb->getQuery()->getResult();
if($inblogwriters) $canadd=true;
if($inblogwriters) $canadd=true;
}
return $canadd;

View File

@ -326,12 +326,12 @@ class PageRepository extends EntityRepository
$qb = $this->createQueryBuilder("page");
$qb ->where(":group MEMBER OF page.groups")
->andWhere("page.id=:id")
->andWhere("page.user is null")
->andWhere("page.id=:id")
->setParameter("id",$page->getId())
->setParameter("group",$group->getGroup());
$inpagegroup=$qb->getQuery()->getResult();
if($inpagegroup) {
$cansee=true;
// Est-il manager du groupe

View File

@ -113,6 +113,12 @@
<span class="badge"></span>
</a>
<a class="list-group-item" data-role="ROLE_ANIM" style="cursor:pointer">
<i class="fa fa-user"></i>
Animateur de Groupe
<span class="badge"></span>
</a>
<a class="list-group-item" data-role="ROLE_MODO" style="cursor:pointer">
<i class="fa fa-user"></i>
Modérateur
@ -191,6 +197,7 @@
$( function() {
$("a[data-role='ROLE_ANONYME']").children("span").html($('.role-ROLE_ANONYME').length);
$("a[data-role='ROLE_USER']").children("span").html($('.role-ROLE_USER').length);
$("a[data-role='ROLE_ANIM']").children("span").html($('.role-ROLE_ANIM').length);
$("a[data-role='ROLE_MODO']").children("span").html($('.role-ROLE_MODO').length);
$("a[data-role='ROLE_ADMIN']").children("span").html($('.role-ROLE_ADMIN').length);

View File

@ -67,6 +67,12 @@
<span class="badge"></span>
</a>
<a class="list-group-item" data-role="ROLE_ANIM" style="cursor:pointer">
<i class="fa fa-user"></i>
Animateur de Groupe
<span class="badge"></span>
</a>
<a class="list-group-item" data-role="ROLE_MODO" style="cursor:pointer">
<i class="fa fa-user"></i>
Modérateur
@ -115,6 +121,7 @@
$("a[data-role='ROLE_ANONYME']").children("span").html($('.role-ROLE_ANONYME').length);
$("a[data-role='ROLE_USER']").children("span").html($('.role-ROLE_USER').length);
$("a[data-role='ROLE_ANIM']").children("span").html($('.role-ROLE_ANIM').length);
$("a[data-role='ROLE_MODO']").children("span").html($('.role-ROLE_MODO').length);
$("a[data-role='ROLE_ADMIN']").children("span").html($('.role-ROLE_ADMIN').length);

View File

@ -85,6 +85,12 @@
<span class="badge"></span>
</a>
<a class="list-group-item" data-role="ROLE_ANIM" style="cursor:pointer">
<i class="fa fa-user"></i>
Animateur de Groupe
<span class="badge"></span>
</a>
<a class="list-group-item" data-role="ROLE_MODO" style="cursor:pointer">
<i class="fa fa-user"></i>
Modérateur
@ -138,6 +144,7 @@
$("a[data-role='ROLE_ANONYME']").children("span").html($('.group-ROLE_ANONYME').length);
$("a[data-role='ROLE_USER']").children("span").html($('.group-ROLE_USER').length);
$("a[data-role='ROLE_ANIM']").children("span").html($('.group-ROLE_ANIM').length);
$("a[data-role='ROLE_MODO']").children("span").html($('.group-ROLE_MODO').length);
$("a[data-role='ROLE_ADMIN']").children("span").html($('.group-ROLE_ADMIN').length);

View File

@ -67,6 +67,12 @@
<span class="badge"></span>
</a>
<a class="list-group-item" data-role="ROLE_ANIM" style="cursor:pointer">
<i class="fa fa-user"></i>
Animateur de Groupe
<span class="badge"></span>
</a>
<a class="list-group-item" data-role="ROLE_MODO" style="cursor:pointer">
<i class="fa fa-user"></i>
Modérateur
@ -115,6 +121,7 @@
$("a[data-role='ROLE_ANONYME']").children("span").html($('.role-ROLE_ANONYME').length);
$("a[data-role='ROLE_USER']").children("span").html($('.role-ROLE_USER').length);
$("a[data-role='ROLE_ANIM']").children("span").html($('.role-ROLE_ANIM').length);
$("a[data-role='ROLE_MODO']").children("span").html($('.role-ROLE_MODO').length);
$("a[data-role='ROLE_ADMIN']").children("span").html($('.role-ROLE_ADMIN').length);

View File

@ -270,52 +270,41 @@
});
// Init socket de counter
var _WS_URI = "wss://{{ gos_web_socket_server_host }}:{{ gos_web_socket_server_port }}";
var _WS_URI = "wss://{{ gos_web_socket_server_host }}:5555";
{% if websocket_activate %}
var _WS_URI = "wss://{{ gos_web_socket_server_host }}:{{ gos_web_socket_server_port }}";
var webSocket = WS.connect(_WS_URI);
var globalsession;
var webSocket = WS.connect(_WS_URI);
webSocket.on("socket/connect", function (session) {
globalsession=session;
session.call("websocket/rpc/update_connection_data", {"userid": "{{app.user.id}}" }).then(
function (result)
{
//console.log("RPC Valid!", result);
},
function (error, desc)
{
//console.log("RPC Error", error, desc);
}
);
// The callback function in "subscribe" is called everytime an event is published in that channel.
session.subscribe("websocket/counter", function (uri, payload) {
if(payload.log) {
console.log("Received message", payload.log);
}
if(payload.alert) {
alert(payload.alert);
}
if(payload.from!={{app.user.id}}) {
menu=$("a[data-group='"+payload.group+"']");
if(menu.length) {
if(payload.add) {
console.log("Ajout counter pour group "+payload.group+" by "+payload.from);
if(menu.children(".badge").length) {
menu.children(".badge").html(+(menu.children(".badge").html())+1);
webSocket.on("socket/connect", function (session) {
// The callback function in "subscribe" is called everytime an event is published in that channel.
session.subscribe("websocket/counter", function (uri, payload) {
if(payload.log) {
console.log("Received message", payload.log);
}
if(payload.alert) {
alert(payload.alert);
}
if(payload.from!={{app.user.id}}) {
menu=$("a[data-group='"+payload.group+"']");
if(menu.length) {
if(payload.add) {
console.log("Ajout counter pour group "+payload.group+" by "+payload.from);
if(menu.children(".badge").length) {
menu.children(".badge").html(+(menu.children(".badge").html())+1);
}
else menu.append("<span id='badge-"+payload.group+"' class='badge'>1</span");
}
else menu.append("<span id='badge-"+payload.group+"' class='badge'>1</span");
}
}
}
});
}
}
});
$(document).on('click', '#refreshcounter', function(){
event=$(this).data("event");
session.publish("websocket/counter", event);
});
});
$(document).on('click', '#refreshcounter', function(){
event=$(this).data("event");
event.userid={{app.user.id}}
session.publish("websocket/counter", event);
});
});
{% endif %}
});
$(window).resize(function() {

View File

@ -47,13 +47,18 @@
<div class="grid clearfix">
<div class="grid-sizer grid-small"></div>
<div class="grid-gutter-sizer"></div>
{% for user in members %}
{% for member in members %}
<div class="grid-item grid-small">
<div class="grid-item-content">
<img src="/{{ alias }}/uploads/avatar/{{ user.avatar}}" class="avatar">
</div>
<div class="grid-item-title">
{{ user.lastname }} {{ user.firstname }}
<div class="grid-item-content">
<img src="/{{ alias }}/uploads/avatar/{{ member.user.avatar}}" class="avatar">
<div class="grid-item-title">
{%if member.fgmanager%}<i style="color: #FFF" class="fa fa-star" title="Manager"></i>{%endif%}<br>
{{ member.user.lastname }} {{ member.user.firstname }}
</div>
</div>
</div>
{% endfor %}

View File

@ -1,4 +1,9 @@
services:
cadoles.websocket.pushmessage:
public: true
class: Cadoles\WebsocketBundle\Service\messageService
arguments: ['@service_container','@doctrine.orm.entity_manager','%websocket_activate%']
cadoles.websocket.topic:
class: Cadoles\WebsocketBundle\Topic\WebsocketTopic
arguments: ['@gos_web_socket.websocket.client_manipulator','@doctrine.orm.entity_manager','@service_container']

View File

@ -79,25 +79,12 @@
var dateoptions = {weekday: "long", year: "numeric", month: "long", day: "numeric", hour: "2-digit", minute: "2-digit" };
{% if app.user %}
{% if websocket_activate and app.user %}
var _WS_URI = "wss://{{ gos_web_socket_server_host }}:{{ gos_web_socket_server_port }}";
var _WS_URI = "wss://{{ gos_web_socket_server_host }}:5555";
var webSocket = WS.connect(_WS_URI);
webSocket.on("socket/connect", function (session) {
session.call("websocket/rpc/update_connection_data", {"userkey": "{{userkey}}" }).then(
function (result)
{
//console.log("RPC Valid!", result);
},
function (error, desc)
{
//console.log("RPC Error", error, desc);
}
);
webSocket.on("socket/connect", function (session) {
//the callback function in "subscribe" is called everytime an event is published in that channel.
session.subscribe("websocket/channel/{{groupid}}", function (uri, payload) {
if(payload.msg) {
@ -134,7 +121,7 @@
$( "#sendbtn" ).click(function() {
var data = CKEDITOR.instances["chat_message"].getData();
if(data) {
event={type: "add", message: data};
event={mykey: "{{userkey}}", type: "add", message: data};
session.publish("websocket/channel/{{groupid}}", event);
CKEDITOR.instances["chat_message"].setData('');
@ -145,7 +132,7 @@
$(document).on('click', '.delmessage', function(){
id=$(this).data("id");
event={type: "del", id: id};
event={mykey: "{{userkey}}", type: "del", id: id};
session.publish("websocket/channel/{{groupid}}", event);

View File

@ -0,0 +1,27 @@
<?php
namespace Cadoles\WebsocketBundle\Service;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Session\Session;
use Doctrine\ORM\EntityManager;
class messageService
{
protected $container;
protected $em;
protected $activate_websocket;
public function __construct($container, EntityManager $em, $activate_websocket)
{
$this->container = $container;
$this->em = $em;
$this->activate_websocket = $activate_websocket;
}
public function send($key,$userid,$groupid,$message) {
$pusher = $this->container->get('gos_web_socket.wamp.pusher');
$pusher->push(['mykey' => $key, 'type' => 'add', 'message' => $message], 'websocket_topic', ['group' => $groupid]);
$pusher->push(['userid' => $userid, 'type' => 'add', 'group' => $groupid], 'websocket_counter');
}
}

View File

@ -70,7 +70,8 @@ class WebsocketCounter implements TopicInterface
*/
public function onPublish(ConnectionInterface $connection, Topic $topic, WampRequest $request, $event, array $exclude, array $eligible)
{
$userid=$connection->userid;
if(!is_array($event)) $event=json_decode($event, true);
$userid=$event["userid"];
$user=$this->em->getRepository("CadolesCoreBundle:User")->find($userid);
if(!$user)
@ -80,13 +81,13 @@ class WebsocketCounter implements TopicInterface
if(!$group)
return;
/*
$usergroup=$this->em->getRepository("CadolesCoreBundle:UserGroup")->findOneBy(["user"=>$user,"group"=>$group]);
if(!$usergroup)
return;
*/
$topic->broadcast([$event["type"] => 1, "group" => $event["group"] , "from" =>$userid]);
}
/**

View File

@ -69,17 +69,18 @@ class WebsocketTopic implements TopicInterface
*/
public function onPublish(ConnectionInterface $connection, Topic $topic, WampRequest $request, $event, array $exclude, array $eligible)
{
$userkey=$connection->userkey;
$groupid=$request->getAttributes()->get('group');
if(!is_array($event)) $event=json_decode($event, true);
$group=$this->em->getRepository("CadolesCoreBundle:Group")->find($groupid);
if(!$group) {
$topic->broadcast(['log' => 'group NOT FIND']);
}
$usergroup=$this->em->getRepository("CadolesCoreBundle:UserGroup")->findOneBy(['keyvalue'=> $userkey]);
$usergroup=$this->em->getRepository("CadolesCoreBundle:UserGroup")->findOneBy(['keyvalue'=>$event["mykey"]]);
if(!$usergroup) {
$topic->broadcast(['log' => 'user NOT IN GROUP']);
$topic->broadcast(['log' => $event]);
$topic->broadcast(['log' => 'user '.$event["mykey"].' NOT IN GROUP '.$groupid]);
}
else {
$user=$usergroup->getUser();

View File

@ -38,10 +38,14 @@ parameters:
%end if
%if %%getVar("ninegate_activate_websocket", 'non') == "oui"
websocket_activate: true
websocket_port: 5555
websocket_host: %%ninegate_websocket_url
websocket_port: %%ninegate_websocket_portexterne
websocket_portinterne: %%ninegate_websocket_portinterne
%else
websocket_activate: false
websocket_port: 5555
websocket_host:
websocket_port:
websocket_portinterne:
%end if
%if %%getVar("ninegate_activate_portal", 'non') == "oui"
portal_activate: true