Compare commits

..

16 Commits

Author SHA1 Message Date
00a55a9e67 Merge branch 'master' into dist/eole/2.7.2/master 2021-03-08 10:26:07 +01:00
349f5c26e7 Merge branch 'master' into dist/eole/2.7.2/master 2021-03-05 14:29:21 +01:00
18d993f307 Merge branch 'master' into dist/eole/2.7.2/master 2021-03-05 10:24:51 +01:00
f8b4d0446d Merge branch 'master' into dist/eole/2.7.2/master 2021-03-03 16:16:59 +01:00
b14fc3d0e1 Merge branch 'master' into dist/eole/2.7.2/master 2021-03-03 14:55:03 +01:00
697c7a8f1c Merge branch 'dist/eole/2.7.2/master' of https://forge.cadoles.com/Cadoles/schedule into dist/eole/2.7.2/master 2021-02-04 16:17:23 +01:00
24ecd6c87e Merge branch 'master' into dist/eole/2.7.2/master 2021-02-04 16:17:18 +01:00
b17024cccd Merge branch 'master' into dist/eole/2.7.2/master 2021-01-28 12:15:43 +01:00
a0b87b907f Merge branch 'master' into dist/eole/2.7.2/master 2020-11-13 10:20:38 +01:00
dfa5a993ce Merge branch 'master' into dist/eole/2.7.2/master 2020-11-13 09:30:06 +01:00
937ec6f4ca Merge branch 'master' into dist/eole/2.7.2/master 2020-09-29 08:58:50 +02:00
7e988ff7a9 Merge branch 'master' into dist/eole/2.7.0/master 2020-09-23 09:15:06 +02:00
c66962097d Merge branch 'master' into dist/eole/2.7.0/master 2020-09-22 14:32:26 +02:00
db11d66ae0 Merge branch 'master' into dist/eole/2.7.0/master 2020-05-13 14:06:01 +02:00
2d42e3016d Merge branch 'master' into dist/eole/2.7.0/master 2020-05-12 11:35:36 +02:00
ba4acc1b89 ajout repertoire debian 2020-05-12 09:49:53 +02:00
3017 changed files with 166198 additions and 24157 deletions

View File

@@ -1,39 +0,0 @@
# Dépendances locales (elles seront réinstallées dans limage)
vendor/
node_modules/
# Fichiers de config locaux ou secrets
.env.local
.env.*.local
# Cache et logs Symfony
var
# Build front-end
public/build/
public/bundles/
# Tests
phpunit.xml
phpunit.xml.dist
tests/
# IDE & OS
*.log
*.md
*.swp
.idea/
.vscode/
.DS_Store
Thumbs.db
# Git
.git
.gitignore
# uploads
uploads/
public/uploads/
# Volume
volume/

42
.env
View File

@@ -1,42 +0,0 @@
# Basic
APP_ENV=PROD
APP_SECRET=changeme
APP_ALIAS=schedule
APP_AUTH=MYSQL
APP_NAME=Schedule
APP_CRON=true
# Office hours
OFFICE_HOUR_START=09:00
OFFICE_HOUR_END=17:30
# MAIL sendmail / smtp
MAILER_METHOD=sendmail
MAILER_URL=
MAILER_NOREPLY=noreply@noreply.fr
MAILER_DEFAULT_NOTIF=
MAILER_URL=null://localhost
# BDD
DATABASE_HOST=mariadb
DATABASE_NAME=schedule
DATABASE_USER=user
DATABASE_PASSWORD=changeme
# If APP_AUTH = CAS
CAS_HOST=
CAS_PORT=
CAS_PATH=
CAS_USERNAME=username
CAS_EMAIL=email
CAS_LASTNAME=lastname
CAS_FIRSTNAME=firstname
## Sentry DSN
SENTRY_DSN=
# Dolibar
DOLIBARR_ACTIVE=false
DOLIBARR_API_KEY=
DOLIBARR_URI=

28
.gitignore vendored
View File

@@ -1,27 +1 @@
*~
###> symfony/framework-bundle ###
/.env.local
/.env.local.php
/.env.*.local
/config/secrets/prod/prod.decrypt.private.php
/public/bundles/
/var/
/vendor/
###< symfony/framework-bundle ###
###> symfony/phpunit-bridge ###
.phpunit
.phpunit.result.cache
/phpunit.xml
###< symfony/phpunit-bridge ###
###> symfony/webpack-encore-bundle ###
/node_modules/
npm-debug.log
yarn-error.log
###< symfony/webpack-encore-bundle ###
###> uploads ###
/public/uploads
/uploads
###> uploads ###

View File

@@ -1,53 +0,0 @@
<?php
$finder = PhpCsFixer\Finder::create()
->in(__DIR__)
->exclude([
'vendor',
'var',
'web',
'app/DoctrineMigrations',
'bin',
'doc',
])
->name('*.php')
;
// TODO: Définir les règles de style communes
// spécifiques au projet
return (new PhpCsFixer\Config())
->setRules([
'@Symfony' => true,
'concat_space' => ['spacing' => 'none'],
'array_syntax' => ['syntax' => 'short'],
'combine_consecutive_issets' => true,
'explicit_indirect_variable' => true,
'no_useless_return' => true,
'ordered_imports' => true,
'no_unused_imports' => true,
'no_spaces_after_function_name' => true,
'no_spaces_inside_parenthesis' => true,
'ternary_operator_spaces' => true,
'class_definition' => ['single_line' => true],
'whitespace_after_comma_in_array' => true,
// phpdoc
'phpdoc_add_missing_param_annotation' => ['only_untyped' => true],
'phpdoc_order' => true,
'phpdoc_types_order' => [
'null_adjustment' => 'always_last',
'sort_algorithm' => 'alpha',
],
'phpdoc_no_empty_return' => false,
'phpdoc_summary' => false,
'general_phpdoc_annotation_remove' => [
'annotations' => [
'expectedExceptionMessageRegExp',
'expectedException',
'expectedExceptionMessage',
'author',
],
],
])
->setFinder($finder)
;

View File

@@ -1,3 +0,0 @@
{
"php.version": "7.4"
}

26
Makefile Normal file
View File

@@ -0,0 +1,26 @@
################################
# Makefile
################################
SOURCE=schedule
VERSION=2.0
EOLE_VERSION=2.7
EOLE_RELEASE=2.7.1
PKGAPPS=web
################################
# Début de zone à ne pas éditer
################################
include eole.mk
include apps.mk
################################
# Fin de zone à ne pas éditer
################################
# Makefile rules dedicated to application
# if exists
ifneq (, $(strip $(wildcard $(SOURCE).mk)))
include $(SOURCE).mk
endif

64
apps.mk Normal file
View File

@@ -0,0 +1,64 @@
#
# NE PAS EDITER CE FICHIER
#
# Voir Makefile
##########################
# Application web envole #
##########################
ifneq (, $(filter oui web, $(PKGAPPS)))
#
# Sanity check
#
ifeq (, $(filter-out X.X, $(strip $(VERSION))))
$(error $$(VERSION) variable has incorrect value '$(VERSION)')
endif
# Where to store web application files
WEB_PATH := $(DESTDIR)/var/www/html
# Envole
sharenvole_PROG_DIR := $(DESTDIR)/usr/share/envole/$(SOURCE)
src_$(SOURCE)-$(VERSION)_REC_DIR := $(WEB_PATH)/$(SOURCE)
src_plugins-$(VERSION)_REC_DIR := $(WEB_PATH)/$(SOURCE)/plugin
src_lang-$(VERSION)_REC_DIR := $(WEB_PATH)/$(SOURCE)/lang
endif
##########################
# Application EOLE flask #
##########################
ifneq (, $(filter flask, $(PKGAPPS)))
#
# Sanity check
#
ifeq (, $(filter-out XXX, $(strip $(FLASK_MODULE))))
$(error $$(FLASK_MODULE) variable has incorrect value '$(FLASK_MODULE)')
endif
ifeq (, $(strip $(wildcard src/$(FLASK_MODULE).conf)))
$(error missing eoleflask configuration file 'src/$(FLASK_MODULE).conf')
endif
# Everything is related to mount point
APPS_MOUNT_POINT := $(shell sed -ne 's|^"MOUNT_POINT"[[:space:]]*:[[:space:]]*"/\([^"]*\)",|\1|p' \
src/$(FLASK_MODULE).conf)
ifeq (, $(strip $(APPS_MOUNT_POINT)))
$(error no "MOUNT_POINT" in eoleflask configuration file 'src/$(FLASK_MODULE).conf')
endif
# eole-flask configuration
src_DATA_DIR := $(DESTDIR)/etc/eole/flask/available
# Where to store flask application files
FLASK_PATH := $(eole_DIR)/flask/$(APPS_MOUNT_POINT)
# static files
src_$(FLASK_MODULE)_static_REC_DIR := $(FLASK_PATH)/static
src_$(FLASK_MODULE)_templates_REC_DIR := $(FLASK_PATH)/templates
src_$(FLASK_MODULE)_instance_REC_DIR := $(FLASK_PATH)/resources
endif

View File

@@ -1,10 +0,0 @@
import Dropzone from 'dropzone';
import 'dropzone/dist/dropzone.css'
/*
document.addEventListener('DOMContentLoaded', function() {
var elt = document.getElementById('mydropzone');
var mydropzone = new Dropzone(elt, { url: "upload"});
global.mydropzone=mydropzone;
});
*/

View File

@@ -1,41 +0,0 @@
// Fullcalendar
require('@fullcalendar/core/main.css');
require('@fullcalendar/daygrid/main.css');
require('@fullcalendar/daygrid/main.css');
import { Calendar } from '@fullcalendar/core';
import frLocale from '@fullcalendar/core/locales/fr.js';
import interactionPlugin from '@fullcalendar/interaction';
import dayGridPlugin from '@fullcalendar/daygrid';
var calendar;
var e = document.getElementById("sideuser");
var iduser = e.value;
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('fullcalendar');
calendar = new Calendar(calendarEl, {
plugins: [ interactionPlugin, dayGridPlugin ],
locale: frLocale,
weekNumbers: true,
selectable: true,
eventSources: [{
'id': 1,
'url': 'event/load/'+iduser,
}],
eventLimit:8,
eventDrop: function(info) {
info.revert();
},
eventRender: function (info) {
eventRender(info);
},
select: function(selectionInfo) {
eventSelect(selectionInfo);
},
eventClick: function(info) {
eventClick(info);
}
});
global.calendar = calendar;
calendar.render();
});

View File

@@ -1,99 +0,0 @@
{
"type": "project",
"license": "proprietary",
"require": {
"php": "^7.1.3",
"ext-ctype": "*",
"ext-iconv": "*",
"doctrine/annotations": "^1.8",
"friendsofsymfony/ckeditor-bundle": "^2.2",
"friendsofsymfony/rest-bundle": "^2.7",
"jasig/phpcas": "^1.3",
"knplabs/knp-snappy-bundle": "^1.7",
"nategood/httpful": "^0.3.2",
"nelmio/api-doc-bundle": "^3.6",
"oneup/uploader-bundle": "^2.2",
"sensio/framework-extra-bundle": "^5.1",
"sentry/sentry-symfony": "^3.5",
"symfony/apache-pack": "^1.0",
"symfony/asset": "4.4.*",
"symfony/console": "4.4.*",
"symfony/dotenv": "4.4.*",
"symfony/expression-language": "4.4.*",
"symfony/flex": "^1.3.1",
"symfony/form": "4.4.*",
"symfony/framework-bundle": "4.4.*",
"symfony/http-client": "4.4.*",
"symfony/intl": "4.4.*",
"symfony/lock": "4.4.*",
"symfony/mailer": "4.4.*",
"symfony/maker-bundle": "^1.14",
"symfony/monolog-bundle": "^3.5",
"symfony/orm-pack": "^1.0",
"symfony/process": "4.4.*",
"symfony/profiler-pack": "^1.0",
"symfony/security-bundle": "4.4.*",
"symfony/serializer-pack": "*",
"symfony/swiftmailer-bundle": "^3.4",
"symfony/translation": "4.4.*",
"symfony/twig-pack": "*",
"symfony/validator": "4.4.*",
"symfony/web-link": "4.4.*",
"symfony/webpack-encore-bundle": "^1.7",
"symfony/yaml": "4.4.*",
"tetranz/select2entity-bundle": "^3.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "*",
"symfony/debug-pack": "*",
"symfony/test-pack": "*"
},
"config": {
"preferred-install": {
"*": "dist"
},
"sort-packages": true,
"allow-plugins": {
"symfony/flex": true
}
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"App\\Tests\\": "tests/"
}
},
"replace": {
"paragonie/random_compat": "2.*",
"symfony/polyfill-ctype": "*",
"symfony/polyfill-iconv": "*",
"symfony/polyfill-php71": "*",
"symfony/polyfill-php70": "*",
"symfony/polyfill-php56": "*"
},
"scripts": {
"auto-scripts": {
"cache:clear": "symfony-cmd",
"assets:install %PUBLIC_DIR%": "symfony-cmd"
},
"post-install-cmd": [
"@auto-scripts"
],
"post-update-cmd": [
"@auto-scripts"
]
},
"conflict": {
"symfony/symfony": "*"
},
"extra": {
"symfony": {
"allow-contrib": true,
"require": "4.4.*"
}
}
}

9388
composer.lock generated
View File

@@ -1,9388 +0,0 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "b88b4bb7a5b2d82324133b372e47e930",
"packages": [
{
"name": "clue/stream-filter",
"version": "v1.5.0",
"source": {
"type": "git",
"url": "https://github.com/clue/php-stream-filter.git",
"reference": "aeb7d8ea49c7963d3b581378955dbf5bc49aa320"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/clue/php-stream-filter/zipball/aeb7d8ea49c7963d3b581378955dbf5bc49aa320",
"reference": "aeb7d8ea49c7963d3b581378955dbf5bc49aa320",
"shasum": ""
},
"require": {
"php": ">=5.3"
},
"require-dev": {
"phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36"
},
"type": "library",
"autoload": {
"psr-4": {
"Clue\\StreamFilter\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@clue.engineering"
}
],
"description": "A simple and modern approach to stream filtering in PHP",
"homepage": "https://github.com/clue/php-stream-filter",
"keywords": [
"bucket brigade",
"callback",
"filter",
"php_user_filter",
"stream",
"stream_filter_append",
"stream_filter_register"
],
"time": "2020-10-02T12:38:20+00:00"
},
{
"name": "composer/package-versions-deprecated",
"version": "1.11.99",
"source": {
"type": "git",
"url": "https://github.com/composer/package-versions-deprecated.git",
"reference": "c8c9aa8a14cc3d3bec86d0a8c3fa52ea79936855"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/c8c9aa8a14cc3d3bec86d0a8c3fa52ea79936855",
"reference": "c8c9aa8a14cc3d3bec86d0a8c3fa52ea79936855",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.1.0 || ^2.0",
"php": "^7 || ^8"
},
"replace": {
"ocramius/package-versions": "1.11.99"
},
"require-dev": {
"composer/composer": "^1.9.3 || ^2.0@dev",
"ext-zip": "^1.13",
"phpunit/phpunit": "^6.5 || ^7"
},
"type": "composer-plugin",
"extra": {
"class": "PackageVersions\\Installer",
"branch-alias": {
"dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"PackageVersions\\": "src/PackageVersions"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com"
},
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be"
}
],
"description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
"time": "2020-08-25T05:50:16+00:00"
},
{
"name": "doctrine/annotations",
"version": "1.10.4",
"source": {
"type": "git",
"url": "https://github.com/doctrine/annotations.git",
"reference": "bfe91e31984e2ba76df1c1339681770401ec262f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/annotations/zipball/bfe91e31984e2ba76df1c1339681770401ec262f",
"reference": "bfe91e31984e2ba76df1c1339681770401ec262f",
"shasum": ""
},
"require": {
"doctrine/lexer": "1.*",
"ext-tokenizer": "*",
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/cache": "1.*",
"phpstan/phpstan": "^0.12.20",
"phpunit/phpunit": "^7.5 || ^9.1.5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.9.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
}
],
"description": "Docblock Annotations Parser",
"homepage": "http://www.doctrine-project.org",
"keywords": [
"annotations",
"docblock",
"parser"
],
"time": "2020-08-10T19:35:50+00:00"
},
{
"name": "doctrine/cache",
"version": "1.10.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/cache.git",
"reference": "13e3381b25847283a91948d04640543941309727"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/cache/zipball/13e3381b25847283a91948d04640543941309727",
"reference": "13e3381b25847283a91948d04640543941309727",
"shasum": ""
},
"require": {
"php": "~7.1 || ^8.0"
},
"conflict": {
"doctrine/common": ">2.2,<2.4"
},
"require-dev": {
"alcaeus/mongo-php-adapter": "^1.1",
"doctrine/coding-standard": "^6.0",
"mongodb/mongodb": "^1.1",
"phpunit/phpunit": "^7.0",
"predis/predis": "~1.0"
},
"suggest": {
"alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.9.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
}
],
"description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.",
"homepage": "https://www.doctrine-project.org/projects/cache.html",
"keywords": [
"abstraction",
"apcu",
"cache",
"caching",
"couchdb",
"memcached",
"php",
"redis",
"xcache"
],
"time": "2020-07-07T18:54:01+00:00"
},
{
"name": "doctrine/collections",
"version": "1.6.7",
"source": {
"type": "git",
"url": "https://github.com/doctrine/collections.git",
"reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/collections/zipball/55f8b799269a1a472457bd1a41b4f379d4cfba4a",
"reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a",
"shasum": ""
},
"require": {
"php": "^7.1.3 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^6.0",
"phpstan/phpstan-shim": "^0.9.2",
"phpunit/phpunit": "^7.0",
"vimeo/psalm": "^3.8.1"
},
"type": "library",
"autoload": {
"psr-4": {
"Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
}
],
"description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.",
"homepage": "https://www.doctrine-project.org/projects/collections.html",
"keywords": [
"array",
"collections",
"iterators",
"php"
],
"time": "2020-07-27T17:53:49+00:00"
},
{
"name": "doctrine/common",
"version": "2.13.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/common.git",
"reference": "f3812c026e557892c34ef37f6ab808a6b567da7f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/common/zipball/f3812c026e557892c34ef37f6ab808a6b567da7f",
"reference": "f3812c026e557892c34ef37f6ab808a6b567da7f",
"shasum": ""
},
"require": {
"doctrine/annotations": "^1.0",
"doctrine/cache": "^1.0",
"doctrine/collections": "^1.0",
"doctrine/event-manager": "^1.0",
"doctrine/inflector": "^1.0",
"doctrine/lexer": "^1.0",
"doctrine/persistence": "^1.3.3",
"doctrine/reflection": "^1.0",
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^1.0",
"phpstan/phpstan": "^0.11",
"phpstan/phpstan-phpunit": "^0.11",
"phpunit/phpunit": "^7.0",
"squizlabs/php_codesniffer": "^3.0",
"symfony/phpunit-bridge": "^4.0.5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.11.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\": "lib/Doctrine/Common"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
},
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com"
}
],
"description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, persistence interfaces, proxies, event system and much more.",
"homepage": "https://www.doctrine-project.org/projects/common.html",
"keywords": [
"common",
"doctrine",
"php"
],
"time": "2020-06-05T16:46:05+00:00"
},
{
"name": "doctrine/dbal",
"version": "2.10.4",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
"reference": "47433196b6390d14409a33885ee42b6208160643"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/47433196b6390d14409a33885ee42b6208160643",
"reference": "47433196b6390d14409a33885ee42b6208160643",
"shasum": ""
},
"require": {
"doctrine/cache": "^1.0",
"doctrine/event-manager": "^1.0",
"ext-pdo": "*",
"php": "^7.2"
},
"require-dev": {
"doctrine/coding-standard": "^8.1",
"jetbrains/phpstorm-stubs": "^2019.1",
"nikic/php-parser": "^4.4",
"phpstan/phpstan": "^0.12.40",
"phpunit/phpunit": "^8.5.5",
"psalm/plugin-phpunit": "^0.10.0",
"symfony/console": "^2.0.5|^3.0|^4.0|^5.0",
"vimeo/psalm": "^3.14.2"
},
"suggest": {
"symfony/console": "For helpful console commands such as SQL execution and import of files."
},
"bin": [
"bin/doctrine-dbal"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.10.x-dev",
"dev-develop": "3.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\DBAL\\": "lib/Doctrine/DBAL"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
}
],
"description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.",
"homepage": "https://www.doctrine-project.org/projects/dbal.html",
"keywords": [
"abstraction",
"database",
"db2",
"dbal",
"mariadb",
"mssql",
"mysql",
"oci8",
"oracle",
"pdo",
"pgsql",
"postgresql",
"queryobject",
"sasql",
"sql",
"sqlanywhere",
"sqlite",
"sqlserver",
"sqlsrv"
],
"time": "2020-09-12T21:20:41+00:00"
},
{
"name": "doctrine/doctrine-bundle",
"version": "2.1.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineBundle.git",
"reference": "f5153089993e1230f5d8acbd8e126014d5a63e17"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/f5153089993e1230f5d8acbd8e126014d5a63e17",
"reference": "f5153089993e1230f5d8acbd8e126014d5a63e17",
"shasum": ""
},
"require": {
"doctrine/dbal": "^2.9.0|^3.0",
"doctrine/persistence": "^1.3.3|^2.0",
"doctrine/sql-formatter": "^1.0.1",
"php": "^7.1 || ^8.0",
"symfony/cache": "^4.3.3|^5.0",
"symfony/config": "^4.3.3|^5.0",
"symfony/console": "^3.4.30|^4.3.3|^5.0",
"symfony/dependency-injection": "^4.3.3|^5.0",
"symfony/doctrine-bridge": "^4.3.7|^5.0",
"symfony/framework-bundle": "^3.4.30|^4.3.3|^5.0",
"symfony/service-contracts": "^1.1.1|^2.0"
},
"conflict": {
"doctrine/orm": "<2.6",
"twig/twig": "<1.34|>=2.0,<2.4"
},
"require-dev": {
"doctrine/coding-standard": "^6.0",
"doctrine/orm": "^2.6",
"ocramius/proxy-manager": "^2.1",
"phpunit/phpunit": "^7.5",
"symfony/phpunit-bridge": "^4.2",
"symfony/property-info": "^4.3.3|^5.0",
"symfony/proxy-manager-bridge": "^3.4|^4.3.3|^5.0",
"symfony/twig-bridge": "^3.4.30|^4.3.3|^5.0",
"symfony/validator": "^3.4.30|^4.3.3|^5.0",
"symfony/web-profiler-bundle": "^3.4.30|^4.3.3|^5.0",
"symfony/yaml": "^3.4.30|^4.3.3|^5.0",
"twig/twig": "^1.34|^2.12"
},
"suggest": {
"doctrine/orm": "The Doctrine ORM integration is optional in the bundle.",
"symfony/web-profiler-bundle": "To use the data collector."
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "2.1.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Bundle\\DoctrineBundle\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Symfony Community",
"homepage": "http://symfony.com/contributors"
},
{
"name": "Doctrine Project",
"homepage": "http://www.doctrine-project.org/"
}
],
"description": "Symfony DoctrineBundle",
"homepage": "http://www.doctrine-project.org",
"keywords": [
"database",
"dbal",
"orm",
"persistence"
],
"time": "2020-08-25T10:57:15+00:00"
},
{
"name": "doctrine/doctrine-migrations-bundle",
"version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineMigrationsBundle.git",
"reference": "5efa29df768abaafe29b34e73dac68efbedcaa4d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/5efa29df768abaafe29b34e73dac68efbedcaa4d",
"reference": "5efa29df768abaafe29b34e73dac68efbedcaa4d",
"shasum": ""
},
"require": {
"doctrine/doctrine-bundle": "~1.0|~2.0",
"doctrine/migrations": "^2.2",
"php": "^7.1",
"symfony/framework-bundle": "~3.4|~4.0|~5.0"
},
"require-dev": {
"doctrine/coding-standard": "^5.0",
"mikey179/vfsstream": "^1.6",
"phpstan/phpstan": "^0.9.2",
"phpstan/phpstan-strict-rules": "^0.9",
"phpunit/phpunit": "^6.4|^7.0"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "2.1.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Bundle\\MigrationsBundle\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Doctrine Project",
"homepage": "http://www.doctrine-project.org"
},
{
"name": "Symfony Community",
"homepage": "http://symfony.com/contributors"
}
],
"description": "Symfony DoctrineMigrationsBundle",
"homepage": "https://www.doctrine-project.org",
"keywords": [
"dbal",
"migrations",
"schema"
],
"time": "2020-06-25T19:36:08+00:00"
},
{
"name": "doctrine/event-manager",
"version": "1.1.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/event-manager.git",
"reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f",
"reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"conflict": {
"doctrine/common": "<2.9@dev"
},
"require-dev": {
"doctrine/coding-standard": "^6.0",
"phpunit/phpunit": "^7.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\": "lib/Doctrine/Common"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
},
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com"
}
],
"description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.",
"homepage": "https://www.doctrine-project.org/projects/event-manager.html",
"keywords": [
"event",
"event dispatcher",
"event manager",
"event system",
"events"
],
"time": "2020-05-29T18:28:51+00:00"
},
{
"name": "doctrine/inflector",
"version": "1.4.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
"reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/4650c8b30c753a76bf44fb2ed00117d6f367490c",
"reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^7.0",
"phpstan/phpstan": "^0.11",
"phpstan/phpstan-phpunit": "^0.11",
"phpstan/phpstan-strict-rules": "^0.11",
"phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector",
"Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
}
],
"description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.",
"homepage": "https://www.doctrine-project.org/projects/inflector.html",
"keywords": [
"inflection",
"inflector",
"lowercase",
"manipulation",
"php",
"plural",
"singular",
"strings",
"uppercase",
"words"
],
"time": "2020-05-29T07:19:59+00:00"
},
{
"name": "doctrine/instantiator",
"version": "1.3.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/instantiator.git",
"reference": "f350df0268e904597e3bd9c4685c53e0e333feea"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea",
"reference": "f350df0268e904597e3bd9c4685c53e0e333feea",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^6.0",
"ext-pdo": "*",
"ext-phar": "*",
"phpbench/phpbench": "^0.13",
"phpstan/phpstan-phpunit": "^0.11",
"phpstan/phpstan-shim": "^0.11",
"phpunit/phpunit": "^7.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.2.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com",
"homepage": "http://ocramius.github.com/"
}
],
"description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
"homepage": "https://www.doctrine-project.org/projects/instantiator.html",
"keywords": [
"constructor",
"instantiate"
],
"time": "2020-05-29T17:27:14+00:00"
},
{
"name": "doctrine/lexer",
"version": "1.2.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
"reference": "e864bbf5904cb8f5bb334f99209b48018522f042"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042",
"reference": "e864bbf5904cb8f5bb334f99209b48018522f042",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^6.0",
"phpstan/phpstan": "^0.11.8",
"phpunit/phpunit": "^8.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.2.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
}
],
"description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
"homepage": "https://www.doctrine-project.org/projects/lexer.html",
"keywords": [
"annotations",
"docblock",
"lexer",
"parser",
"php"
],
"time": "2020-05-25T17:44:05+00:00"
},
{
"name": "doctrine/migrations",
"version": "2.2.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/migrations.git",
"reference": "a3987131febeb0e9acb3c47ab0df0af004588934"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/migrations/zipball/a3987131febeb0e9acb3c47ab0df0af004588934",
"reference": "a3987131febeb0e9acb3c47ab0df0af004588934",
"shasum": ""
},
"require": {
"doctrine/dbal": "^2.9",
"ocramius/package-versions": "^1.3",
"ocramius/proxy-manager": "^2.0.2",
"php": "^7.1",
"symfony/console": "^3.4||^4.0||^5.0",
"symfony/stopwatch": "^3.4||^4.0||^5.0"
},
"require-dev": {
"doctrine/coding-standard": "^6.0",
"doctrine/orm": "^2.6",
"ext-pdo_sqlite": "*",
"jdorn/sql-formatter": "^1.1",
"mikey179/vfsstream": "^1.6",
"phpstan/phpstan": "^0.10",
"phpstan/phpstan-deprecation-rules": "^0.10",
"phpstan/phpstan-phpunit": "^0.10",
"phpstan/phpstan-strict-rules": "^0.10",
"phpunit/phpunit": "^7.0",
"symfony/process": "^3.4||^4.0||^5.0",
"symfony/yaml": "^3.4||^4.0||^5.0"
},
"suggest": {
"jdorn/sql-formatter": "Allows to generate formatted SQL with the diff command.",
"symfony/yaml": "Allows the use of yaml for migration configuration files."
},
"bin": [
"bin/doctrine-migrations"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Migrations\\": "lib/Doctrine/Migrations"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Michael Simonson",
"email": "contact@mikesimonson.com"
}
],
"description": "PHP Doctrine Migrations project offer additional functionality on top of the database abstraction layer (DBAL) for versioning your database schema and easily deploying changes to it. It is a very easy to use and a powerful tool.",
"homepage": "https://www.doctrine-project.org/projects/migrations.html",
"keywords": [
"database",
"dbal",
"migrations",
"php"
],
"time": "2019-12-04T06:09:14+00:00"
},
{
"name": "doctrine/orm",
"version": "v2.7.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/orm.git",
"reference": "d95e03ba660d50d785a9925f41927fef0ee553cf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/orm/zipball/d95e03ba660d50d785a9925f41927fef0ee553cf",
"reference": "d95e03ba660d50d785a9925f41927fef0ee553cf",
"shasum": ""
},
"require": {
"doctrine/annotations": "^1.8",
"doctrine/cache": "^1.9.1",
"doctrine/collections": "^1.5",
"doctrine/common": "^2.11 || ^3.0",
"doctrine/dbal": "^2.9.3",
"doctrine/event-manager": "^1.1",
"doctrine/inflector": "^1.0",
"doctrine/instantiator": "^1.3",
"doctrine/lexer": "^1.0",
"doctrine/persistence": "^1.3.3 || ^2.0",
"ext-pdo": "*",
"ocramius/package-versions": "^1.2",
"php": "^7.1",
"symfony/console": "^3.0|^4.0|^5.0"
},
"require-dev": {
"doctrine/coding-standard": "^5.0",
"phpstan/phpstan": "^0.12.18",
"phpunit/phpunit": "^7.5",
"symfony/yaml": "^3.4|^4.0|^5.0",
"vimeo/psalm": "^3.11"
},
"suggest": {
"symfony/yaml": "If you want to use YAML Metadata Mapping Driver"
},
"bin": [
"bin/doctrine"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.7.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\ORM\\": "lib/Doctrine/ORM"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com"
}
],
"description": "Object-Relational-Mapper for PHP",
"homepage": "https://www.doctrine-project.org/projects/orm.html",
"keywords": [
"database",
"orm"
],
"time": "2020-05-26T16:03:49+00:00"
},
{
"name": "doctrine/persistence",
"version": "1.3.8",
"source": {
"type": "git",
"url": "https://github.com/doctrine/persistence.git",
"reference": "7a6eac9fb6f61bba91328f15aa7547f4806ca288"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/persistence/zipball/7a6eac9fb6f61bba91328f15aa7547f4806ca288",
"reference": "7a6eac9fb6f61bba91328f15aa7547f4806ca288",
"shasum": ""
},
"require": {
"doctrine/annotations": "^1.0",
"doctrine/cache": "^1.0",
"doctrine/collections": "^1.0",
"doctrine/event-manager": "^1.0",
"doctrine/reflection": "^1.2",
"php": "^7.1 || ^8.0"
},
"conflict": {
"doctrine/common": "<2.10@dev"
},
"require-dev": {
"doctrine/coding-standard": "^6.0",
"phpstan/phpstan": "^0.11",
"phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
"vimeo/psalm": "^3.11"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.3.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\": "lib/Doctrine/Common",
"Doctrine\\Persistence\\": "lib/Doctrine/Persistence"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
},
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com"
}
],
"description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.",
"homepage": "https://doctrine-project.org/projects/persistence.html",
"keywords": [
"mapper",
"object",
"odm",
"orm",
"persistence"
],
"time": "2020-06-20T12:56:16+00:00"
},
{
"name": "doctrine/reflection",
"version": "1.2.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/reflection.git",
"reference": "55e71912dfcd824b2fdd16f2d9afe15684cfce79"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/reflection/zipball/55e71912dfcd824b2fdd16f2d9afe15684cfce79",
"reference": "55e71912dfcd824b2fdd16f2d9afe15684cfce79",
"shasum": ""
},
"require": {
"doctrine/annotations": "^1.0",
"ext-tokenizer": "*",
"php": "^7.1"
},
"conflict": {
"doctrine/common": "<2.9"
},
"require-dev": {
"doctrine/coding-standard": "^5.0",
"doctrine/common": "^2.10",
"phpstan/phpstan": "^0.11.0",
"phpstan/phpstan-phpunit": "^0.11.0",
"phpunit/phpunit": "^7.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.2.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\": "lib/Doctrine/Common"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
},
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com"
}
],
"description": "The Doctrine Reflection project is a simple library used by the various Doctrine projects which adds some additional functionality on top of the reflection functionality that comes with PHP. It allows you to get the reflection information about classes, methods and properties statically.",
"homepage": "https://www.doctrine-project.org/projects/reflection.html",
"keywords": [
"reflection",
"static"
],
"time": "2020-03-27T11:06:43+00:00"
},
{
"name": "doctrine/sql-formatter",
"version": "1.1.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/sql-formatter.git",
"reference": "56070bebac6e77230ed7d306ad13528e60732871"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/56070bebac6e77230ed7d306ad13528e60732871",
"reference": "56070bebac6e77230ed7d306ad13528e60732871",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.4"
},
"bin": [
"bin/sql-formatter"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\SqlFormatter\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jeremy Dorn",
"email": "jeremy@jeremydorn.com",
"homepage": "http://jeremydorn.com/"
}
],
"description": "a PHP SQL highlighting library",
"homepage": "https://github.com/doctrine/sql-formatter/",
"keywords": [
"highlight",
"sql"
],
"time": "2020-07-30T16:57:33+00:00"
},
{
"name": "egulias/email-validator",
"version": "2.1.22",
"source": {
"type": "git",
"url": "https://github.com/egulias/EmailValidator.git",
"reference": "68e418ec08fbfc6f58f6fd2eea70ca8efc8cc7d5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/68e418ec08fbfc6f58f6fd2eea70ca8efc8cc7d5",
"reference": "68e418ec08fbfc6f58f6fd2eea70ca8efc8cc7d5",
"shasum": ""
},
"require": {
"doctrine/lexer": "^1.0.1",
"php": ">=5.5",
"symfony/polyfill-intl-idn": "^1.10"
},
"require-dev": {
"dominicsayers/isemail": "^3.0.7",
"phpunit/phpunit": "^4.8.36|^7.5.15",
"satooshi/php-coveralls": "^1.0.1"
},
"suggest": {
"ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.1.x-dev"
}
},
"autoload": {
"psr-4": {
"Egulias\\EmailValidator\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Eduardo Gulias Davis"
}
],
"description": "A library for validating emails against several RFCs",
"homepage": "https://github.com/egulias/EmailValidator",
"keywords": [
"email",
"emailvalidation",
"emailvalidator",
"validation",
"validator"
],
"time": "2020-09-26T15:48:38+00:00"
},
{
"name": "exsyst/swagger",
"version": "v0.4.1",
"source": {
"type": "git",
"url": "https://github.com/GuilhemN/swagger.git",
"reference": "a02984db5edacdce2b4e09dae5ba8fe17a0e449e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/GuilhemN/swagger/zipball/a02984db5edacdce2b4e09dae5ba8fe17a0e449e",
"reference": "a02984db5edacdce2b4e09dae5ba8fe17a0e449e",
"shasum": ""
},
"require": {
"php": "^7.0"
},
"require-dev": {
"phpunit/phpunit": "^6.5"
},
"type": "library",
"autoload": {
"psr-4": {
"EXSyst\\Component\\Swagger\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ener-Getick",
"email": "egetick@gmail.com"
}
],
"description": "A php library to manipulate Swagger specifications",
"time": "2018-07-27T06:40:00+00:00"
},
{
"name": "friendsofsymfony/ckeditor-bundle",
"version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/FriendsOfSymfony/FOSCKEditorBundle.git",
"reference": "7e1cfe2a83faba0be02661d44289d35e940bb5ea"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/FriendsOfSymfony/FOSCKEditorBundle/zipball/7e1cfe2a83faba0be02661d44289d35e940bb5ea",
"reference": "7e1cfe2a83faba0be02661d44289d35e940bb5ea",
"shasum": ""
},
"require": {
"ext-json": "*",
"ext-zip": "*",
"php": "^7.1",
"symfony/asset": "^3.4 || ^4.0 || ^5.0",
"symfony/config": "^3.4 || ^4.0 || ^5.0",
"symfony/dependency-injection": "^3.4 || ^4.0 || ^5.0",
"symfony/expression-language": "^3.4 || ^4.0 || ^5.0",
"symfony/form": "^3.4 || ^4.0 || ^5.0",
"symfony/framework-bundle": "^3.4 || ^4.0 || ^5.0",
"symfony/http-foundation": "^3.4 || ^4.0 || ^5.0",
"symfony/http-kernel": "^3.4 || ^4.0 || ^5.0",
"symfony/options-resolver": "^3.4 || ^4.0 || ^5.0",
"symfony/property-access": "^3.4 || ^4.0 || ^5.0",
"symfony/routing": "^3.4 || ^4.0 || ^5.0",
"symfony/twig-bundle": "^3.4 || ^4.0 || ^5.0",
"twig/twig": "^2.4 || ^3.0"
},
"conflict": {
"sebastian/environment": "<1.3.4",
"sebastian/exporter": "<2.0.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.0",
"matthiasnoback/symfony-dependency-injection-test": "^1.0 || ^2.0",
"phpunit/phpunit": "^6.0",
"symfony/console": "^3.4 || ^4.0 || ^5.0",
"symfony/phpunit-bridge": "^4.1 || ^5.0",
"symfony/yaml": "^3.4 || ^4.0 || ^5.0"
},
"suggest": {
"egeloen/form-extra-bundle": "Allows to load CKEditor asynchronously"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "2.x-dev"
}
},
"autoload": {
"psr-4": {
"FOS\\CKEditorBundle\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Eric GELOEN",
"email": "geloen.eric@gmail.com"
},
{
"name": "FriendsOfSymfony Community",
"homepage": "https://github.com/FriendsOfSymfony/FOSCKEditorBundle/graphs/contributors"
}
],
"description": "Provides a CKEditor integration for your Symfony project.",
"keywords": [
"CKEditor"
],
"time": "2019-12-23T15:31:36+00:00"
},
{
"name": "friendsofsymfony/rest-bundle",
"version": "2.8.3",
"source": {
"type": "git",
"url": "https://github.com/FriendsOfSymfony/FOSRestBundle.git",
"reference": "2000204f4ac6bf5515222fc5d9be1652ed138e8f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/FriendsOfSymfony/FOSRestBundle/zipball/2000204f4ac6bf5515222fc5d9be1652ed138e8f",
"reference": "2000204f4ac6bf5515222fc5d9be1652ed138e8f",
"shasum": ""
},
"require": {
"doctrine/inflector": "^1.0",
"php": "^7.1|^8.0",
"psr/log": "^1.0",
"symfony/config": "^3.4|^4.3",
"symfony/debug": "^3.4|^4.3",
"symfony/dependency-injection": "^3.4|^4.3",
"symfony/event-dispatcher": "^3.4|^4.3",
"symfony/finder": "^3.4|^4.3",
"symfony/framework-bundle": "^3.4|^4.3",
"symfony/http-foundation": "^3.4|^4.3",
"symfony/http-kernel": "^3.4|^4.3",
"symfony/routing": "^3.4|^4.3",
"symfony/security-core": "^3.4|^4.3",
"willdurand/jsonp-callback-validator": "^1.0",
"willdurand/negotiation": "^2.0"
},
"conflict": {
"doctrine/inflector": "1.4.0",
"jms/serializer": "<1.13.0",
"jms/serializer-bundle": "<2.0.0",
"sensio/framework-extra-bundle": "<3.0.13"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.0",
"jms/serializer": "^1.13|^2.0|^3.0",
"jms/serializer-bundle": "^2.3.1|^3.0",
"phpoption/phpoption": "^1.1",
"psr/http-message": "^1.0",
"sensio/framework-extra-bundle": "^3.0.13|^4.0|^5.0",
"symfony/asset": "^3.4|^4.3",
"symfony/browser-kit": "^3.4|^4.3",
"symfony/css-selector": "^3.4|^4.3",
"symfony/expression-language": "^3.4|^4.3",
"symfony/form": "^3.4|^4.3",
"symfony/phpunit-bridge": "^4.1.8",
"symfony/security-bundle": "^3.4|^4.3",
"symfony/serializer": "^3.4|^4.3",
"symfony/templating": "^3.4|^4.3",
"symfony/twig-bundle": "^3.4|^4.3",
"symfony/validator": "^3.4|^4.3",
"symfony/web-profiler-bundle": "^3.4|^4.3",
"symfony/yaml": "^3.4|^4.3"
},
"suggest": {
"jms/serializer-bundle": "Add support for advanced serialization capabilities, recommended, requires ^2.0|^3.0",
"sensio/framework-extra-bundle": "Add support for the request body converter and the view response listener, requires ^3.0",
"symfony/expression-language": "Add support for using the expression language in the routing, requires ^2.7|^3.0",
"symfony/serializer": "Add support for basic serialization capabilities and xml decoding, requires ^2.7|^3.0",
"symfony/validator": "Add support for validation capabilities in the ParamFetcher, requires ^2.7|^3.0"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"2.x-dev": "2.8-dev",
"dev-master": "2.7-dev"
}
},
"autoload": {
"psr-4": {
"FOS\\RestBundle\\": ""
},
"exclude-from-classmap": [
"Resources/",
"Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Lukas Kahwe Smith",
"email": "smith@pooteeweet.org"
},
{
"name": "Konstantin Kudryashov",
"email": "ever.zet@gmail.com"
},
{
"name": "FriendsOfSymfony Community",
"homepage": "https://github.com/friendsofsymfony/FOSRestBundle/contributors"
}
],
"description": "This Bundle provides various tools to rapidly develop RESTful API's with Symfony",
"homepage": "http://friendsofsymfony.github.com",
"keywords": [
"rest"
],
"time": "2020-09-10T06:51:53+00:00"
},
{
"name": "guzzlehttp/promises",
"version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
"reference": "60d379c243457e073cff02bc323a2a86cb355631"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631",
"reference": "60d379c243457e073cff02bc323a2a86cb355631",
"shasum": ""
},
"require": {
"php": ">=5.5"
},
"require-dev": {
"symfony/phpunit-bridge": "^4.4 || ^5.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Promise\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
}
],
"description": "Guzzle promises library",
"keywords": [
"promise"
],
"time": "2020-09-30T07:37:28+00:00"
},
{
"name": "guzzlehttp/psr7",
"version": "1.7.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3",
"reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3",
"shasum": ""
},
"require": {
"php": ">=5.4.0",
"psr/http-message": "~1.0",
"ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
},
"provide": {
"psr/http-message-implementation": "1.0"
},
"require-dev": {
"ext-zlib": "*",
"phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10"
},
"suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.7-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Psr7\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "Tobias Schultze",
"homepage": "https://github.com/Tobion"
}
],
"description": "PSR-7 message implementation that also provides common utility methods",
"keywords": [
"http",
"message",
"psr-7",
"request",
"response",
"stream",
"uri",
"url"
],
"time": "2020-09-30T07:37:11+00:00"
},
{
"name": "http-interop/http-factory-guzzle",
"version": "1.0.0",
"source": {
"type": "git",
"url": "https://github.com/http-interop/http-factory-guzzle.git",
"reference": "34861658efb9899a6618cef03de46e2a52c80fc0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/34861658efb9899a6618cef03de46e2a52c80fc0",
"reference": "34861658efb9899a6618cef03de46e2a52c80fc0",
"shasum": ""
},
"require": {
"guzzlehttp/psr7": "^1.4.2",
"psr/http-factory": "^1.0"
},
"provide": {
"psr/http-factory-implementation": "^1.0"
},
"require-dev": {
"http-interop/http-factory-tests": "^0.5",
"phpunit/phpunit": "^6.5"
},
"type": "library",
"autoload": {
"psr-4": {
"Http\\Factory\\Guzzle\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "An HTTP Factory using Guzzle PSR7",
"keywords": [
"factory",
"http",
"psr-17",
"psr-7"
],
"time": "2018-07-31T19:32:56+00:00"
},
{
"name": "jasig/phpcas",
"version": "1.3.8",
"source": {
"type": "git",
"url": "https://github.com/apereo/phpCAS.git",
"reference": "40c0769ce05a30c8172b36ceab11124375c8366e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/apereo/phpCAS/zipball/40c0769ce05a30c8172b36ceab11124375c8366e",
"reference": "40c0769ce05a30c8172b36ceab11124375c8366e",
"shasum": ""
},
"require": {
"ext-curl": "*",
"php": ">=5.4.0"
},
"require-dev": {
"phpunit/phpunit": "~3.7.10"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.3.x-dev"
}
},
"autoload": {
"classmap": [
"source/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "Joachim Fritschi",
"homepage": "https://wiki.jasig.org/display/~fritschi"
},
{
"name": "Adam Franco",
"homepage": "https://wiki.jasig.org/display/~adamfranco"
}
],
"description": "Provides a simple API for authenticating users against a CAS server",
"homepage": "https://wiki.jasig.org/display/CASC/phpCAS",
"keywords": [
"apereo",
"cas",
"jasig"
],
"time": "2019-08-18T20:01:55+00:00"
},
{
"name": "jean85/pretty-package-versions",
"version": "1.5.1",
"source": {
"type": "git",
"url": "https://github.com/Jean85/pretty-package-versions.git",
"reference": "a917488320c20057da87f67d0d40543dd9427f7a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/a917488320c20057da87f67d0d40543dd9427f7a",
"reference": "a917488320c20057da87f67d0d40543dd9427f7a",
"shasum": ""
},
"require": {
"composer/package-versions-deprecated": "^1.8.0",
"php": "^7.0|^8.0"
},
"require-dev": {
"phpunit/phpunit": "^6.0|^8.5|^9.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"Jean85\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Alessandro Lai",
"email": "alessandro.lai85@gmail.com"
}
],
"description": "A wrapper for ocramius/package-versions to get pretty versions strings",
"keywords": [
"composer",
"package",
"release",
"versions"
],
"time": "2020-09-14T08:43:34+00:00"
},
{
"name": "knplabs/knp-snappy",
"version": "v1.2.1",
"source": {
"type": "git",
"url": "https://github.com/KnpLabs/snappy.git",
"reference": "7bac60fb729147b7ccd8532c07df3f52a4afa8a4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/KnpLabs/snappy/zipball/7bac60fb729147b7ccd8532c07df3f52a4afa8a4",
"reference": "7bac60fb729147b7ccd8532c07df3f52a4afa8a4",
"shasum": ""
},
"require": {
"php": ">=7.1",
"psr/log": "^1.0",
"symfony/process": "~3.4||~4.3||~5.0"
},
"require-dev": {
"phpunit/phpunit": "~7.4"
},
"suggest": {
"h4cc/wkhtmltoimage-amd64": "Provides wkhtmltoimage-amd64 binary for Linux-compatible machines, use version `~0.12` as dependency",
"h4cc/wkhtmltoimage-i386": "Provides wkhtmltoimage-i386 binary for Linux-compatible machines, use version `~0.12` as dependency",
"h4cc/wkhtmltopdf-amd64": "Provides wkhtmltopdf-amd64 binary for Linux-compatible machines, use version `~0.12` as dependency",
"h4cc/wkhtmltopdf-i386": "Provides wkhtmltopdf-i386 binary for Linux-compatible machines, use version `~0.12` as dependency",
"wemersonjanuario/wkhtmltopdf-windows": "Provides wkhtmltopdf executable for Windows, use version `~0.12` as dependency"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"Knp\\Snappy\\": "src/Knp/Snappy"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "KnpLabs Team",
"homepage": "http://knplabs.com"
},
{
"name": "Symfony Community",
"homepage": "http://github.com/KnpLabs/snappy/contributors"
}
],
"description": "PHP5 library allowing thumbnail, snapshot or PDF generation from a url or a html page. Wrapper for wkhtmltopdf/wkhtmltoimage.",
"homepage": "http://github.com/KnpLabs/snappy",
"keywords": [
"knp",
"knplabs",
"pdf",
"snapshot",
"thumbnail",
"wkhtmltopdf"
],
"time": "2020-01-20T08:30:30+00:00"
},
{
"name": "knplabs/knp-snappy-bundle",
"version": "v1.7.1",
"source": {
"type": "git",
"url": "https://github.com/KnpLabs/KnpSnappyBundle.git",
"reference": "89a633d30d39b71b38511b70e1f0495164140933"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/KnpLabs/KnpSnappyBundle/zipball/89a633d30d39b71b38511b70e1f0495164140933",
"reference": "89a633d30d39b71b38511b70e1f0495164140933",
"shasum": ""
},
"require": {
"knplabs/knp-snappy": "~1.0,>=1.0.1",
"php": ">=7.1",
"symfony/framework-bundle": "^3.4|^4.3|^5.0"
},
"require-dev": {
"doctrine/annotations": "~1.0",
"symfony/asset": "^3.4|^4.3|^5.0",
"symfony/finder": "^3.4|^4.3|^5.0",
"symfony/phpunit-bridge": "^4.3|^5.0",
"symfony/security-csrf": "^3.4|^4.3|^5.0",
"symfony/templating": "^3.4|^4.3|^5.0",
"symfony/validator": "^3.4|^4.3|^5.0",
"symfony/yaml": "^3.4|^4.3|^5.0"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"Knp\\Bundle\\SnappyBundle\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "KnpLabs Team",
"homepage": "http://knplabs.com"
},
{
"name": "Symfony Community",
"homepage": "http://github.com/KnpLabs/KnpSnappyBundle/contributors"
}
],
"description": "Easily create PDF and images in Symfony by converting Twig/HTML templates.",
"homepage": "http://github.com/KnpLabs/KnpSnappyBundle",
"keywords": [
"bundle",
"knp",
"knplabs",
"pdf",
"snappy"
],
"time": "2020-09-11T12:51:46+00:00"
},
{
"name": "monolog/monolog",
"version": "1.25.5",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
"reference": "1817faadd1846cd08be9a49e905dc68823bc38c0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/1817faadd1846cd08be9a49e905dc68823bc38c0",
"reference": "1817faadd1846cd08be9a49e905dc68823bc38c0",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"psr/log": "~1.0"
},
"provide": {
"psr/log-implementation": "1.0.0"
},
"require-dev": {
"aws/aws-sdk-php": "^2.4.9 || ^3.0",
"doctrine/couchdb": "~1.0@dev",
"graylog2/gelf-php": "~1.0",
"php-amqplib/php-amqplib": "~2.4",
"php-console/php-console": "^3.1.3",
"php-parallel-lint/php-parallel-lint": "^1.0",
"phpunit/phpunit": "~4.5",
"ruflin/elastica": ">=0.90 <3.0",
"sentry/sentry": "^0.13",
"swiftmailer/swiftmailer": "^5.3|^6.0"
},
"suggest": {
"aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
"doctrine/couchdb": "Allow sending log messages to a CouchDB server",
"ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
"ext-mongo": "Allow sending log messages to a MongoDB server",
"graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
"mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver",
"php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
"php-console/php-console": "Allow sending log messages to Google Chrome",
"rollbar/rollbar": "Allow sending log messages to Rollbar",
"ruflin/elastica": "Allow sending log messages to an Elastic Search server",
"sentry/sentry": "Allow sending log messages to a Sentry server"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Monolog\\": "src/Monolog"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "http://seld.be"
}
],
"description": "Sends your logs to files, sockets, inboxes, databases and various web services",
"homepage": "http://github.com/Seldaek/monolog",
"keywords": [
"log",
"logging",
"psr-3"
],
"time": "2020-07-23T08:35:51+00:00"
},
{
"name": "nategood/httpful",
"version": "0.3.2",
"source": {
"type": "git",
"url": "https://github.com/nategood/httpful.git",
"reference": "0cded3ea97ba905600de9ceb9ef13f3ab681587c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nategood/httpful/zipball/0cded3ea97ba905600de9ceb9ef13f3ab681587c",
"reference": "0cded3ea97ba905600de9ceb9ef13f3ab681587c",
"shasum": ""
},
"require": {
"ext-curl": "*",
"php": ">=7.2"
},
"require-dev": {
"phpunit/phpunit": "*"
},
"type": "library",
"autoload": {
"psr-0": {
"Httpful": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nate Good",
"email": "me@nategood.com",
"homepage": "http://nategood.com"
}
],
"description": "A Readable, Chainable, REST friendly, PHP HTTP Client",
"homepage": "http://github.com/nategood/httpful",
"keywords": [
"api",
"curl",
"http",
"requests",
"rest",
"restful"
],
"time": "2020-01-25T01:13:13+00:00"
},
{
"name": "nelmio/api-doc-bundle",
"version": "v3.7.4",
"source": {
"type": "git",
"url": "https://github.com/nelmio/NelmioApiDocBundle.git",
"reference": "290df23dc0060c4daaed95a7f37845f16a287ebd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/290df23dc0060c4daaed95a7f37845f16a287ebd",
"reference": "290df23dc0060c4daaed95a7f37845f16a287ebd",
"shasum": ""
},
"require": {
"exsyst/swagger": "^0.4.1",
"php": "^7.1",
"phpdocumentor/reflection-docblock": "^3.1|^4.0|^5.0",
"symfony/framework-bundle": "^3.4|^4.0|^5.0",
"symfony/options-resolver": "^3.4.4|^4.0|^5.0",
"symfony/property-info": "^3.4|^4.0|^5.0",
"zircote/swagger-php": "^2.0.9"
},
"conflict": {
"symfony/framework-bundle": "4.2.7"
},
"require-dev": {
"api-platform/core": "^2.1.2",
"doctrine/annotations": "^1.2",
"doctrine/common": "^2.4",
"friendsofsymfony/rest-bundle": "^2.0|^3.0@beta",
"jms/serializer": "^1.14|^3.0",
"jms/serializer-bundle": "^2.3|^3.0",
"sensio/framework-extra-bundle": "^3.0.13|^4.0|^5.0",
"symfony/asset": "^3.4|^4.0|^5.0",
"symfony/browser-kit": "^3.4|^4.0|^5.0",
"symfony/cache": "^3.4|^4.0|^5.0",
"symfony/config": "^3.4|^4.0|^5.0",
"symfony/console": "^3.4|^4.0|^5.0",
"symfony/dom-crawler": "^3.4|^4.0|^5.0",
"symfony/form": "^3.4|^4.0|^5.0",
"symfony/phpunit-bridge": "^3.4.24|^4.0|^5.0",
"symfony/property-access": "^3.4|^4.0|^5.0",
"symfony/routing": "^3.4.42|^4.0|^5.0",
"symfony/stopwatch": "^3.4|^4.0|^5.0",
"symfony/templating": "^3.4|^4.0|^5.0",
"symfony/twig-bundle": "^3.4|^4.0|^5.0",
"symfony/validator": "^3.4|^4.0|^5.0",
"willdurand/hateoas-bundle": "^1.0|^2.0"
},
"suggest": {
"api-platform/core": "For using an API oriented framework.",
"friendsofsymfony/rest-bundle": "For using the parameters annotations."
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-3.x": "3.7.x-dev"
}
},
"autoload": {
"psr-4": {
"Nelmio\\ApiDocBundle\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nelmio",
"homepage": "http://nelm.io"
},
{
"name": "Symfony Community",
"homepage": "https://github.com/nelmio/NelmioApiDocBundle/contributors"
}
],
"description": "Generates documentation for your REST API from annotations",
"keywords": [
"api",
"doc",
"documentation",
"rest"
],
"time": "2020-09-29T10:30:21+00:00"
},
{
"name": "nikic/php-parser",
"version": "v4.10.2",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
"reference": "658f1be311a230e0907f5dfe0213742aff0596de"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/658f1be311a230e0907f5dfe0213742aff0596de",
"reference": "658f1be311a230e0907f5dfe0213742aff0596de",
"shasum": ""
},
"require": {
"ext-tokenizer": "*",
"php": ">=7.0"
},
"require-dev": {
"ircmaxell/php-yacc": "^0.0.7",
"phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
},
"bin": [
"bin/php-parse"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.9-dev"
}
},
"autoload": {
"psr-4": {
"PhpParser\\": "lib/PhpParser"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Nikita Popov"
}
],
"description": "A PHP parser written in PHP",
"keywords": [
"parser",
"php"
],
"time": "2020-09-26T10:30:38+00:00"
},
{
"name": "ocramius/proxy-manager",
"version": "2.2.3",
"source": {
"type": "git",
"url": "https://github.com/Ocramius/ProxyManager.git",
"reference": "4d154742e31c35137d5374c998e8f86b54db2e2f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/4d154742e31c35137d5374c998e8f86b54db2e2f",
"reference": "4d154742e31c35137d5374c998e8f86b54db2e2f",
"shasum": ""
},
"require": {
"ocramius/package-versions": "^1.1.3",
"php": "^7.2.0",
"zendframework/zend-code": "^3.3.0"
},
"require-dev": {
"couscous/couscous": "^1.6.1",
"ext-phar": "*",
"humbug/humbug": "1.0.0-RC.0@RC",
"nikic/php-parser": "^3.1.1",
"padraic/phpunit-accelerator": "dev-master@DEV",
"phpbench/phpbench": "^0.12.2",
"phpstan/phpstan": "dev-master#856eb10a81c1d27c701a83f167dc870fd8f4236a as 0.9.999",
"phpstan/phpstan-phpunit": "dev-master#5629c0a1f4a9c417cb1077cf6693ad9753895761",
"phpunit/phpunit": "^6.4.3",
"squizlabs/php_codesniffer": "^2.9.1"
},
"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-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0.x-dev"
}
},
"autoload": {
"psr-0": {
"ProxyManager\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com",
"homepage": "http://ocramius.github.io/"
}
],
"description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies",
"homepage": "https://github.com/Ocramius/ProxyManager",
"keywords": [
"aop",
"lazy loading",
"proxy",
"proxy pattern",
"service proxies"
],
"time": "2019-08-10T08:37:15+00:00"
},
{
"name": "oneup/uploader-bundle",
"version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/1up-lab/OneupUploaderBundle.git",
"reference": "8bd74b2d5f07f9ee6280f0b90ed8199471f57f52"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/1up-lab/OneupUploaderBundle/zipball/8bd74b2d5f07f9ee6280f0b90ed8199471f57f52",
"reference": "8bd74b2d5f07f9ee6280f0b90ed8199471f57f52",
"shasum": ""
},
"require": {
"php": "^7.1",
"symfony/asset": "^3.0|^4.0",
"symfony/finder": "^3.0|^4.0",
"symfony/framework-bundle": "^3.0|^4.0",
"symfony/http-foundation": "^3.0|^4.0",
"symfony/templating": "^3.0|^4.0",
"symfony/translation": "^3.0|^4.0",
"symfony/yaml": "^3.0|^4.0",
"twig/twig": "^1.41|^2.10|^3.0"
},
"require-dev": {
"amazonwebservices/aws-sdk-for-php": "1.5.*",
"knplabs/gaufrette": "^0.9",
"oneup/flysystem-bundle": "^1.2|^2.0|^3.0",
"phpunit/phpunit": "^7.5",
"sensio/framework-extra-bundle": "^5.0",
"symfony/browser-kit": "^3.0|^4.0",
"symfony/class-loader": "^3.0|^4.0",
"symfony/phpunit-bridge": "^5.0",
"symfony/security-bundle": "^3.0|^4.0",
"symfony/var-dumper": "^3.0|^4.0",
"twistor/flysystem-stream-wrapper": "^1.0"
},
"suggest": {
"knplabs/knp-gaufrette-bundle": "0.1.*",
"oneup/flysystem-bundle": "^3.0",
"twistor/flysystem-stream-wrapper": "^1.0 (Required when using Flysystem)"
},
"type": "symfony-bundle",
"autoload": {
"psr-4": {
"Oneup\\UploaderBundle\\": ""
},
"classmap": [
"Tests/App/AppKernel.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jim Schmid",
"email": "js@1up.io",
"homepage": "http://1up.io",
"role": "Developer"
},
{
"name": "David Greminger",
"email": "dg@1up.io",
"homepage": "http://1up.io",
"role": "Developer"
}
],
"description": "Handles multi file uploads in Symfony2. Features included: Chunked upload, Orphans management, Gaufrette support.",
"homepage": "http://1up.io",
"keywords": [
"FancyUpload",
"FineUploader",
"MooUpload",
"Uploadify",
"YUI3 Uploader",
"blueimp",
"dropzone",
"fileupload",
"jQuery File Uploader",
"plupload",
"upload"
],
"time": "2020-02-06T09:12:03+00:00"
},
{
"name": "php-http/client-common",
"version": "2.3.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/client-common.git",
"reference": "e37e46c610c87519753135fb893111798c69076a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/client-common/zipball/e37e46c610c87519753135fb893111798c69076a",
"reference": "e37e46c610c87519753135fb893111798c69076a",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0",
"php-http/httplug": "^2.0",
"php-http/message": "^1.6",
"php-http/message-factory": "^1.0",
"psr/http-client": "^1.0",
"psr/http-factory": "^1.0",
"psr/http-message": "^1.0",
"symfony/options-resolver": "^2.6 || ^3.4.20 || ~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0",
"symfony/polyfill-php80": "^1.17"
},
"require-dev": {
"doctrine/instantiator": "^1.1",
"guzzlehttp/psr7": "^1.4",
"nyholm/psr7": "^1.2",
"phpspec/phpspec": "^5.1 || ^6.0",
"phpspec/prophecy": "^1.10.2",
"phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3"
},
"suggest": {
"ext-json": "To detect JSON responses with the ContentTypePlugin",
"ext-libxml": "To detect XML responses with the ContentTypePlugin",
"php-http/cache-plugin": "PSR-6 Cache plugin",
"php-http/logger-plugin": "PSR-3 Logger plugin",
"php-http/stopwatch-plugin": "Symfony Stopwatch plugin"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.3.x-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Client\\Common\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com"
}
],
"description": "Common HTTP Client implementations and tools for HTTPlug",
"homepage": "http://httplug.io",
"keywords": [
"client",
"common",
"http",
"httplug"
],
"time": "2020-07-21T10:04:13+00:00"
},
{
"name": "php-http/discovery",
"version": "1.12.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/discovery.git",
"reference": "4366bf1bc39b663aa87459bd725501d2f1988b6c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/discovery/zipball/4366bf1bc39b663aa87459bd725501d2f1988b6c",
"reference": "4366bf1bc39b663aa87459bd725501d2f1988b6c",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"conflict": {
"nyholm/psr7": "<1.0"
},
"require-dev": {
"graham-campbell/phpspec-skip-example-extension": "^5.0",
"php-http/httplug": "^1.0 || ^2.0",
"php-http/message-factory": "^1.0",
"phpspec/phpspec": "^5.1 || ^6.1",
"puli/composer-plugin": "1.0.0-beta10"
},
"suggest": {
"php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories",
"puli/composer-plugin": "Sets up Puli which is recommended for Discovery to work. Check http://docs.php-http.org/en/latest/discovery.html for more details."
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.9-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Discovery\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com"
}
],
"description": "Finds installed HTTPlug implementations and PSR-7 message factories",
"homepage": "http://php-http.org",
"keywords": [
"adapter",
"client",
"discovery",
"factory",
"http",
"message",
"psr7"
],
"time": "2020-09-22T13:31:04+00:00"
},
{
"name": "php-http/httplug",
"version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/httplug.git",
"reference": "191a0a1b41ed026b717421931f8d3bd2514ffbf9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/httplug/zipball/191a0a1b41ed026b717421931f8d3bd2514ffbf9",
"reference": "191a0a1b41ed026b717421931f8d3bd2514ffbf9",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0",
"php-http/promise": "^1.1",
"psr/http-client": "^1.0",
"psr/http-message": "^1.0"
},
"require-dev": {
"friends-of-phpspec/phpspec-code-coverage": "^4.1",
"phpspec/phpspec": "^5.1 || ^6.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.x-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Client\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Eric GELOEN",
"email": "geloen.eric@gmail.com"
},
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com",
"homepage": "https://sagikazarmark.hu"
}
],
"description": "HTTPlug, the HTTP client abstraction for PHP",
"homepage": "http://httplug.io",
"keywords": [
"client",
"http"
],
"time": "2020-07-13T15:43:23+00:00"
},
{
"name": "php-http/message",
"version": "1.9.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/message.git",
"reference": "2c7256e3c1aba0bfca70f099810f1c7712e00945"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/message/zipball/2c7256e3c1aba0bfca70f099810f1c7712e00945",
"reference": "2c7256e3c1aba0bfca70f099810f1c7712e00945",
"shasum": ""
},
"require": {
"clue/stream-filter": "^1.4.1",
"php": "^7.1",
"php-http/message-factory": "^1.0.2",
"psr/http-message": "^1.0"
},
"provide": {
"php-http/message-factory-implementation": "1.0"
},
"require-dev": {
"akeneo/phpspec-skip-example-extension": "^1.0",
"coduo/phpspec-data-provider-extension": "^1.0",
"ergebnis/composer-normalize": "^2.1",
"ext-zlib": "*",
"guzzlehttp/psr7": "^1.0",
"henrikbjorn/phpspec-code-coverage": "^1.0",
"phpspec/phpspec": "^2.4",
"slim/slim": "^3.0",
"zendframework/zend-diactoros": "^1.0"
},
"suggest": {
"ext-zlib": "Used with compressor/decompressor streams",
"guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories",
"slim/slim": "Used with Slim Framework PSR-7 implementation",
"zendframework/zend-diactoros": "Used with Diactoros Factories"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.8-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Message\\": "src/"
},
"files": [
"src/filters.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com"
}
],
"description": "HTTP Message related tools",
"homepage": "http://php-http.org",
"keywords": [
"http",
"message",
"psr-7"
],
"time": "2020-08-17T06:33:14+00:00"
},
{
"name": "php-http/message-factory",
"version": "v1.0.2",
"source": {
"type": "git",
"url": "https://github.com/php-http/message-factory.git",
"reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1",
"reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1",
"shasum": ""
},
"require": {
"php": ">=5.4",
"psr/http-message": "^1.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Message\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com"
}
],
"description": "Factory interfaces for PSR-7 HTTP Message",
"homepage": "http://php-http.org",
"keywords": [
"factory",
"http",
"message",
"stream",
"uri"
],
"time": "2015-12-19T14:08:53+00:00"
},
{
"name": "php-http/promise",
"version": "1.1.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/promise.git",
"reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/promise/zipball/4c4c1f9b7289a2ec57cde7f1e9762a5789506f88",
"reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
"friends-of-phpspec/phpspec-code-coverage": "^4.3.2",
"phpspec/phpspec": "^5.1.2 || ^6.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Promise\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Joel Wurtz",
"email": "joel.wurtz@gmail.com"
},
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com"
}
],
"description": "Promise used for asynchronous HTTP requests",
"homepage": "http://httplug.io",
"keywords": [
"promise"
],
"time": "2020-07-07T09:29:14+00:00"
},
{
"name": "phpdocumentor/reflection-common",
"version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionCommon.git",
"reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
"reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-2.x": "2.x-dev"
}
},
"autoload": {
"psr-4": {
"phpDocumentor\\Reflection\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jaap van Otterdijk",
"email": "opensource@ijaap.nl"
}
],
"description": "Common reflection classes used by phpdocumentor to reflect the code structure",
"homepage": "http://www.phpdoc.org",
"keywords": [
"FQSEN",
"phpDocumentor",
"phpdoc",
"reflection",
"static analysis"
],
"time": "2020-06-27T09:03:43+00:00"
},
{
"name": "phpdocumentor/reflection-docblock",
"version": "5.2.2",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
"reference": "069a785b2141f5bcf49f3e353548dc1cce6df556"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
"reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
"shasum": ""
},
"require": {
"ext-filter": "*",
"php": "^7.2 || ^8.0",
"phpdocumentor/reflection-common": "^2.2",
"phpdocumentor/type-resolver": "^1.3",
"webmozart/assert": "^1.9.1"
},
"require-dev": {
"mockery/mockery": "~1.3.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "5.x-dev"
}
},
"autoload": {
"psr-4": {
"phpDocumentor\\Reflection\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Mike van Riel",
"email": "me@mikevanriel.com"
},
{
"name": "Jaap van Otterdijk",
"email": "account@ijaap.nl"
}
],
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
"time": "2020-09-03T19:13:55+00:00"
},
{
"name": "phpdocumentor/type-resolver",
"version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
"reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
"reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0",
"phpdocumentor/reflection-common": "^2.0"
},
"require-dev": {
"ext-tokenizer": "*"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-1.x": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"phpDocumentor\\Reflection\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Mike van Riel",
"email": "me@mikevanriel.com"
}
],
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"time": "2020-09-17T18:55:26+00:00"
},
{
"name": "psr/cache",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/cache.git",
"reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
"reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Cache\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interface for caching libraries",
"keywords": [
"cache",
"psr",
"psr-6"
],
"time": "2016-08-06T20:24:11+00:00"
},
{
"name": "psr/container",
"version": "1.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/container.git",
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Container\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common Container Interface (PHP FIG PSR-11)",
"homepage": "https://github.com/php-fig/container",
"keywords": [
"PSR-11",
"container",
"container-interface",
"container-interop",
"psr"
],
"time": "2017-02-14T16:28:37+00:00"
},
{
"name": "psr/http-client",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-client.git",
"reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
"reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
"shasum": ""
},
"require": {
"php": "^7.0 || ^8.0",
"psr/http-message": "^1.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Http\\Client\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interface for HTTP clients",
"homepage": "https://github.com/php-fig/http-client",
"keywords": [
"http",
"http-client",
"psr",
"psr-18"
],
"time": "2020-06-29T06:28:15+00:00"
},
{
"name": "psr/http-factory",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-factory.git",
"reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
"reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
"shasum": ""
},
"require": {
"php": ">=7.0.0",
"psr/http-message": "^1.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Http\\Message\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interfaces for PSR-7 HTTP message factories",
"keywords": [
"factory",
"http",
"message",
"psr",
"psr-17",
"psr-7",
"request",
"response"
],
"time": "2019-04-30T12:38:16+00:00"
},
{
"name": "psr/http-message",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-message.git",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Http\\Message\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interface for HTTP messages",
"homepage": "https://github.com/php-fig/http-message",
"keywords": [
"http",
"http-message",
"psr",
"psr-7",
"request",
"response"
],
"time": "2016-08-06T14:39:51+00:00"
},
{
"name": "psr/link",
"version": "1.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/link.git",
"reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562",
"reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Link\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interfaces for HTTP links",
"keywords": [
"http",
"http-link",
"link",
"psr",
"psr-13",
"rest"
],
"time": "2016-10-28T16:06:13+00:00"
},
{
"name": "psr/log",
"version": "1.1.3",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
"reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Log\\": "Psr/Log/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interface for logging libraries",
"homepage": "https://github.com/php-fig/log",
"keywords": [
"log",
"psr",
"psr-3"
],
"time": "2020-03-23T09:12:05+00:00"
},
{
"name": "ralouphie/getallheaders",
"version": "3.0.3",
"source": {
"type": "git",
"url": "https://github.com/ralouphie/getallheaders.git",
"reference": "120b605dfeb996808c31b6477290a714d356e822"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
"reference": "120b605dfeb996808c31b6477290a714d356e822",
"shasum": ""
},
"require": {
"php": ">=5.6"
},
"require-dev": {
"php-coveralls/php-coveralls": "^2.1",
"phpunit/phpunit": "^5 || ^6.5"
},
"type": "library",
"autoload": {
"files": [
"src/getallheaders.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ralph Khattar",
"email": "ralph.khattar@gmail.com"
}
],
"description": "A polyfill for getallheaders.",
"time": "2019-03-08T08:55:37+00:00"
},
{
"name": "sensio/framework-extra-bundle",
"version": "v5.6.1",
"source": {
"type": "git",
"url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git",
"reference": "430d14c01836b77c28092883d195a43ce413ee32"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/430d14c01836b77c28092883d195a43ce413ee32",
"reference": "430d14c01836b77c28092883d195a43ce413ee32",
"shasum": ""
},
"require": {
"doctrine/annotations": "^1.0",
"php": ">=7.2.5",
"symfony/config": "^4.4|^5.0",
"symfony/dependency-injection": "^4.4|^5.0",
"symfony/framework-bundle": "^4.4|^5.0",
"symfony/http-kernel": "^4.4|^5.0"
},
"conflict": {
"doctrine/doctrine-cache-bundle": "<1.3.1",
"doctrine/persistence": "<1.3"
},
"require-dev": {
"doctrine/dbal": "^2.10|^3.0",
"doctrine/doctrine-bundle": "^1.11|^2.0",
"doctrine/orm": "^2.5",
"nyholm/psr7": "^1.1",
"symfony/browser-kit": "^4.4|^5.0",
"symfony/doctrine-bridge": "^4.4|^5.0",
"symfony/dom-crawler": "^4.4|^5.0",
"symfony/expression-language": "^4.4|^5.0",
"symfony/finder": "^4.4|^5.0",
"symfony/monolog-bridge": "^4.0|^5.0",
"symfony/monolog-bundle": "^3.2",
"symfony/phpunit-bridge": "^4.4.9|^5.0.9",
"symfony/psr-http-message-bridge": "^1.1",
"symfony/security-bundle": "^4.4|^5.0",
"symfony/twig-bundle": "^4.4|^5.0",
"symfony/yaml": "^4.4|^5.0",
"twig/twig": "^1.34|^2.4|^3.0"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "5.6.x-dev"
}
},
"autoload": {
"psr-4": {
"Sensio\\Bundle\\FrameworkExtraBundle\\": "src/"
},
"exclude-from-classmap": [
"/tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
}
],
"description": "This bundle provides a way to configure your controllers with annotations",
"keywords": [
"annotations",
"controllers"
],
"time": "2020-08-25T19:10:18+00:00"
},
{
"name": "sentry/sdk",
"version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-php-sdk.git",
"reference": "089858b1b27d3705a5fd1c32d8d10beb55980190"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/089858b1b27d3705a5fd1c32d8d10beb55980190",
"reference": "089858b1b27d3705a5fd1c32d8d10beb55980190",
"shasum": ""
},
"require": {
"http-interop/http-factory-guzzle": "^1.0",
"sentry/sentry": "^2.5",
"symfony/http-client": "^4.3|^5.0"
},
"type": "metapackage",
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Sentry",
"email": "accounts@sentry.io"
}
],
"description": "This is a metapackage shipping sentry/sentry with a recommended HTTP client.",
"homepage": "http://sentry.io",
"keywords": [
"crash-reporting",
"crash-reports",
"error-handler",
"error-monitoring",
"log",
"logging",
"sentry"
],
"time": "2020-09-14T09:30:55+00:00"
},
{
"name": "sentry/sentry",
"version": "2.5.0",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-php.git",
"reference": "bab5b73dbaf5f0ff62317e1611d952764d5514a9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/getsentry/sentry-php/zipball/bab5b73dbaf5f0ff62317e1611d952764d5514a9",
"reference": "bab5b73dbaf5f0ff62317e1611d952764d5514a9",
"shasum": ""
},
"require": {
"ext-json": "*",
"ext-mbstring": "*",
"guzzlehttp/promises": "^1.3",
"guzzlehttp/psr7": "^1.6",
"jean85/pretty-package-versions": "^1.2",
"php": "^7.1",
"php-http/async-client-implementation": "^1.0",
"php-http/client-common": "^1.5|^2.0",
"php-http/discovery": "^1.6.1",
"php-http/httplug": "^1.1|^2.0",
"php-http/message": "^1.5",
"psr/http-factory": "^1.0",
"psr/http-message-implementation": "^1.0",
"psr/log": "^1.0",
"symfony/options-resolver": "^2.7|^3.0|^4.0|^5.0",
"symfony/polyfill-uuid": "^1.13.1"
},
"conflict": {
"php-http/client-common": "1.8.0",
"raven/raven": "*"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.16",
"monolog/monolog": "^1.3|^2.0",
"php-http/mock-client": "^1.3",
"phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "^0.12",
"phpstan/phpstan-phpunit": "^0.12",
"phpunit/phpunit": "^7.5.18",
"symfony/phpunit-bridge": "^4.3|^5.0",
"vimeo/psalm": "^3.4"
},
"suggest": {
"monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler."
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.5.x-dev"
}
},
"autoload": {
"files": [
"src/functions.php"
],
"psr-4": {
"Sentry\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sentry",
"email": "accounts@sentry.io"
}
],
"description": "A PHP SDK for Sentry (http://sentry.io)",
"homepage": "http://sentry.io",
"keywords": [
"crash-reporting",
"crash-reports",
"error-handler",
"error-monitoring",
"log",
"logging",
"sentry"
],
"time": "2020-09-14T07:02:40+00:00"
},
{
"name": "sentry/sentry-symfony",
"version": "3.5.2",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-symfony.git",
"reference": "ed178a9cff1cff2e8816d5b279ab311e43b16371"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/getsentry/sentry-symfony/zipball/ed178a9cff1cff2e8816d5b279ab311e43b16371",
"reference": "ed178a9cff1cff2e8816d5b279ab311e43b16371",
"shasum": ""
},
"require": {
"jean85/pretty-package-versions": "^1.5",
"php": "^7.1",
"sentry/sdk": "^2.1",
"symfony/config": "^3.4||^4.0||^5.0",
"symfony/console": "^3.4||^4.0||^5.0",
"symfony/dependency-injection": "^3.4||^4.0||^5.0",
"symfony/event-dispatcher": "^3.4||^4.0||^5.0",
"symfony/http-kernel": "^3.4||^4.0||^5.0",
"symfony/security-core": "^3.4||^4.0||^5.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.8",
"jangregor/phpstan-prophecy": "^0.6.2",
"monolog/monolog": "^1.11||^2.0",
"php-http/mock-client": "^1.0",
"phpspec/prophecy": "!=1.11.0",
"phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "^0.12.19",
"phpstan/phpstan-phpunit": "^0.12.8",
"phpunit/phpunit": "^7.5||^8.5",
"symfony/browser-kit": "^3.4||^4.0||^5.0",
"symfony/expression-language": "^3.4||^4.0||^5.0",
"symfony/framework-bundle": "^3.4||^4.0||^5.0",
"symfony/messenger": "^4.3||^5.0",
"symfony/monolog-bundle": "^3.4",
"symfony/phpunit-bridge": "^5.0",
"symfony/yaml": "^3.4||^4.0||^5.0"
},
"suggest": {
"monolog/monolog": "Required to use the Monolog handler"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"master": "3.x-dev",
"releases/3.2.x": "3.2.x-dev",
"releases/2.x": "2.x-dev",
"releases/1.x": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"Sentry\\SentryBundle\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "David Cramer",
"email": "dcramer@gmail.com"
},
{
"name": "Alessandro Lai",
"email": "alessandro.lai85@gmail.com"
}
],
"description": "Symfony integration for Sentry (http://getsentry.com)",
"homepage": "http://getsentry.com",
"keywords": [
"errors",
"logging",
"sentry",
"symfony"
],
"time": "2020-07-08T10:36:55+00:00"
},
{
"name": "swiftmailer/swiftmailer",
"version": "v6.2.3",
"source": {
"type": "git",
"url": "https://github.com/swiftmailer/swiftmailer.git",
"reference": "149cfdf118b169f7840bbe3ef0d4bc795d1780c9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/149cfdf118b169f7840bbe3ef0d4bc795d1780c9",
"reference": "149cfdf118b169f7840bbe3ef0d4bc795d1780c9",
"shasum": ""
},
"require": {
"egulias/email-validator": "~2.0",
"php": ">=7.0.0",
"symfony/polyfill-iconv": "^1.0",
"symfony/polyfill-intl-idn": "^1.10",
"symfony/polyfill-mbstring": "^1.0"
},
"require-dev": {
"mockery/mockery": "~0.9.1",
"symfony/phpunit-bridge": "^3.4.19|^4.1.8"
},
"suggest": {
"ext-intl": "Needed to support internationalized email addresses",
"true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "6.2-dev"
}
},
"autoload": {
"files": [
"lib/swift_required.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Chris Corbyn"
},
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
}
],
"description": "Swiftmailer, free feature-rich PHP mailer",
"homepage": "https://swiftmailer.symfony.com",
"keywords": [
"email",
"mail",
"mailer"
],
"time": "2019-11-12T09:31:26+00:00"
},
{
"name": "symfony/apache-pack",
"version": "v1.0.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/apache-pack.git",
"reference": "3aa5818d73ad2551281fc58a75afd9ca82622e6c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/apache-pack/zipball/3aa5818d73ad2551281fc58a75afd9ca82622e6c",
"reference": "3aa5818d73ad2551281fc58a75afd9ca82622e6c",
"shasum": ""
},
"type": "symfony-pack",
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "A pack for Apache support in Symfony",
"time": "2017-12-12T01:46:35+00:00"
},
{
"name": "symfony/asset",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/asset.git",
"reference": "9b446eb7c16347088663dc18d38fb0f3b536b7e2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/asset/zipball/9b446eb7c16347088663dc18d38fb0f3b536b7e2",
"reference": "9b446eb7c16347088663dc18d38fb0f3b536b7e2",
"shasum": ""
},
"require": {
"php": ">=7.1.3"
},
"require-dev": {
"symfony/http-foundation": "^3.4|^4.0|^5.0",
"symfony/http-kernel": "^3.4|^4.0|^5.0"
},
"suggest": {
"symfony/http-foundation": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Asset\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Asset Component",
"homepage": "https://symfony.com",
"time": "2020-09-02T16:08:58+00:00"
},
{
"name": "symfony/cache",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache.git",
"reference": "969a76c2dbce7e4306684f5376718147d1ec4ae7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/cache/zipball/969a76c2dbce7e4306684f5376718147d1ec4ae7",
"reference": "969a76c2dbce7e4306684f5376718147d1ec4ae7",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"psr/cache": "~1.0",
"psr/log": "~1.0",
"symfony/cache-contracts": "^1.1.7|^2",
"symfony/service-contracts": "^1.1|^2",
"symfony/var-exporter": "^4.2|^5.0"
},
"conflict": {
"doctrine/dbal": "<2.5",
"symfony/dependency-injection": "<3.4",
"symfony/http-kernel": "<4.4",
"symfony/var-dumper": "<4.4"
},
"provide": {
"psr/cache-implementation": "1.0",
"psr/simple-cache-implementation": "1.0",
"symfony/cache-implementation": "1.0"
},
"require-dev": {
"cache/integration-tests": "dev-master",
"doctrine/cache": "^1.6",
"doctrine/dbal": "^2.5|^3.0",
"predis/predis": "^1.1",
"psr/simple-cache": "^1.0",
"symfony/config": "^4.2|^5.0",
"symfony/dependency-injection": "^3.4|^4.1|^5.0",
"symfony/var-dumper": "^4.4|^5.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Cache\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Cache component with PSR-6, PSR-16, and tags",
"homepage": "https://symfony.com",
"keywords": [
"caching",
"psr6"
],
"time": "2020-09-27T12:40:39+00:00"
},
{
"name": "symfony/cache-contracts",
"version": "v2.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache-contracts.git",
"reference": "8034ca0b61d4dd967f3698aaa1da2507b631d0cb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/cache-contracts/zipball/8034ca0b61d4dd967f3698aaa1da2507b631d0cb",
"reference": "8034ca0b61d4dd967f3698aaa1da2507b631d0cb",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"psr/cache": "^1.0"
},
"suggest": {
"symfony/cache-implementation": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"psr-4": {
"Symfony\\Contracts\\Cache\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Generic abstractions related to caching",
"homepage": "https://symfony.com",
"keywords": [
"abstractions",
"contracts",
"decoupling",
"interfaces",
"interoperability",
"standards"
],
"time": "2020-09-07T11:33:47+00:00"
},
{
"name": "symfony/config",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
"reference": "7c5a1002178a612787c291a4f515f87b19176b61"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/config/zipball/7c5a1002178a612787c291a4f515f87b19176b61",
"reference": "7c5a1002178a612787c291a4f515f87b19176b61",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/filesystem": "^3.4|^4.0|^5.0",
"symfony/polyfill-ctype": "~1.8"
},
"conflict": {
"symfony/finder": "<3.4"
},
"require-dev": {
"symfony/event-dispatcher": "^3.4|^4.0|^5.0",
"symfony/finder": "^3.4|^4.0|^5.0",
"symfony/messenger": "^4.1|^5.0",
"symfony/service-contracts": "^1.1|^2",
"symfony/yaml": "^3.4|^4.0|^5.0"
},
"suggest": {
"symfony/yaml": "To use the yaml reference dumper"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Config\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Config Component",
"homepage": "https://symfony.com",
"time": "2020-10-02T07:34:48+00:00"
},
{
"name": "symfony/console",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
"reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php73": "^1.8",
"symfony/polyfill-php80": "^1.15",
"symfony/service-contracts": "^1.1|^2"
},
"conflict": {
"symfony/dependency-injection": "<3.4",
"symfony/event-dispatcher": "<4.3|>=5",
"symfony/lock": "<4.4",
"symfony/process": "<3.3"
},
"provide": {
"psr/log-implementation": "1.0"
},
"require-dev": {
"psr/log": "~1.0",
"symfony/config": "^3.4|^4.0|^5.0",
"symfony/dependency-injection": "^3.4|^4.0|^5.0",
"symfony/event-dispatcher": "^4.3",
"symfony/lock": "^4.4|^5.0",
"symfony/process": "^3.4|^4.0|^5.0",
"symfony/var-dumper": "^4.3|^5.0"
},
"suggest": {
"psr/log": "For using the console logger",
"symfony/event-dispatcher": "",
"symfony/lock": "",
"symfony/process": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Console\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
"time": "2020-09-15T07:58:55+00:00"
},
{
"name": "symfony/debug",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
"reference": "726b85e69342e767d60e3853b98559a68ff74183"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/debug/zipball/726b85e69342e767d60e3853b98559a68ff74183",
"reference": "726b85e69342e767d60e3853b98559a68ff74183",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"psr/log": "~1.0",
"symfony/polyfill-php80": "^1.15"
},
"conflict": {
"symfony/http-kernel": "<3.4"
},
"require-dev": {
"symfony/http-kernel": "^3.4|^4.0|^5.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Debug\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
"time": "2020-09-09T05:20:36+00:00"
},
{
"name": "symfony/dependency-injection",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
"reference": "89274c8847dff2ed703e481843eb9159ca25cc6e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/89274c8847dff2ed703e481843eb9159ca25cc6e",
"reference": "89274c8847dff2ed703e481843eb9159ca25cc6e",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"psr/container": "^1.0",
"symfony/service-contracts": "^1.1.6|^2"
},
"conflict": {
"symfony/config": "<4.3|>=5.0",
"symfony/finder": "<3.4",
"symfony/proxy-manager-bridge": "<3.4",
"symfony/yaml": "<3.4"
},
"provide": {
"psr/container-implementation": "1.0",
"symfony/service-implementation": "1.0"
},
"require-dev": {
"symfony/config": "^4.3",
"symfony/expression-language": "^3.4|^4.0|^5.0",
"symfony/yaml": "^3.4|^4.0|^5.0"
},
"suggest": {
"symfony/config": "",
"symfony/expression-language": "For using expressions in service container configuration",
"symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required",
"symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
"symfony/yaml": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\DependencyInjection\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony DependencyInjection Component",
"homepage": "https://symfony.com",
"time": "2020-09-10T10:08:39+00:00"
},
{
"name": "symfony/doctrine-bridge",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/doctrine-bridge.git",
"reference": "98c60d6dbaafeaf6204d3476ab1b54335ff7f540"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/98c60d6dbaafeaf6204d3476ab1b54335ff7f540",
"reference": "98c60d6dbaafeaf6204d3476ab1b54335ff7f540",
"shasum": ""
},
"require": {
"doctrine/event-manager": "~1.0",
"doctrine/persistence": "^1.3|^2",
"php": ">=7.1.3",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.0",
"symfony/service-contracts": "^1.1|^2"
},
"conflict": {
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
"symfony/dependency-injection": "<3.4",
"symfony/form": "<4.4",
"symfony/http-kernel": "<4.3.7",
"symfony/messenger": "<4.3",
"symfony/security-core": "<4.4",
"symfony/validator": "<4.4.2|<5.0.2,>=5.0"
},
"require-dev": {
"composer/package-versions-deprecated": "^1.8",
"doctrine/annotations": "~1.7",
"doctrine/cache": "~1.6",
"doctrine/collections": "~1.0",
"doctrine/data-fixtures": "^1.1",
"doctrine/dbal": "~2.4|^3.0",
"doctrine/orm": "^2.6.3",
"doctrine/reflection": "~1.0",
"symfony/config": "^4.2|^5.0",
"symfony/dependency-injection": "^3.4|^4.0|^5.0",
"symfony/expression-language": "^3.4|^4.0|^5.0",
"symfony/form": "^4.4.11|^5.0.11",
"symfony/http-kernel": "^4.3.7",
"symfony/messenger": "^4.4|^5.0",
"symfony/property-access": "^3.4|^4.0|^5.0",
"symfony/property-info": "^3.4|^4.0|^5.0",
"symfony/proxy-manager-bridge": "^3.4|^4.0|^5.0",
"symfony/security-core": "^4.4|^5.0",
"symfony/stopwatch": "^3.4|^4.0|^5.0",
"symfony/translation": "^3.4|^4.0|^5.0",
"symfony/validator": "^4.4.2|^5.0.2",
"symfony/var-dumper": "^3.4|^4.0|^5.0"
},
"suggest": {
"doctrine/data-fixtures": "",
"doctrine/dbal": "",
"doctrine/orm": "",
"symfony/form": "",
"symfony/property-info": "",
"symfony/validator": ""
},
"type": "symfony-bridge",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Bridge\\Doctrine\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Doctrine Bridge",
"homepage": "https://symfony.com",
"time": "2020-09-27T14:14:06+00:00"
},
{
"name": "symfony/dotenv",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/dotenv.git",
"reference": "f17675595fd7527c57d11bd3d733eb5d41600128"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dotenv/zipball/f17675595fd7527c57d11bd3d733eb5d41600128",
"reference": "f17675595fd7527c57d11bd3d733eb5d41600128",
"shasum": ""
},
"require": {
"php": ">=7.1.3"
},
"require-dev": {
"symfony/process": "^3.4.2|^4.0|^5.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Dotenv\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Registers environment variables from a .env file",
"homepage": "https://symfony.com",
"keywords": [
"dotenv",
"env",
"environment"
],
"time": "2020-09-02T16:08:58+00:00"
},
{
"name": "symfony/error-handler",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
"reference": "c8be4a5c70af70fec82e762dd93e3bbcf95c035f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/c8be4a5c70af70fec82e762dd93e3bbcf95c035f",
"reference": "c8be4a5c70af70fec82e762dd93e3bbcf95c035f",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"psr/log": "~1.0",
"symfony/debug": "^4.4.5",
"symfony/polyfill-php80": "^1.15",
"symfony/var-dumper": "^4.4|^5.0"
},
"require-dev": {
"symfony/http-kernel": "^4.4|^5.0",
"symfony/serializer": "^4.4|^5.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\ErrorHandler\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony ErrorHandler Component",
"homepage": "https://symfony.com",
"time": "2020-10-01T16:21:20+00:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e17bb5e0663dc725f7cdcafc932132735b4725cd",
"reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/event-dispatcher-contracts": "^1.1"
},
"conflict": {
"symfony/dependency-injection": "<3.4"
},
"provide": {
"psr/event-dispatcher-implementation": "1.0",
"symfony/event-dispatcher-implementation": "1.1"
},
"require-dev": {
"psr/log": "~1.0",
"symfony/config": "^3.4|^4.0|^5.0",
"symfony/dependency-injection": "^3.4|^4.0|^5.0",
"symfony/error-handler": "~3.4|~4.4",
"symfony/expression-language": "^3.4|^4.0|^5.0",
"symfony/http-foundation": "^3.4|^4.0|^5.0",
"symfony/service-contracts": "^1.1|^2",
"symfony/stopwatch": "^3.4|^4.0|^5.0"
},
"suggest": {
"symfony/dependency-injection": "",
"symfony/http-kernel": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\EventDispatcher\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
"time": "2020-09-18T14:07:46+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
"version": "v1.1.9",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git",
"reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7",
"reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7",
"shasum": ""
},
"require": {
"php": ">=7.1.3"
},
"suggest": {
"psr/event-dispatcher": "",
"symfony/event-dispatcher-implementation": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"psr-4": {
"Symfony\\Contracts\\EventDispatcher\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Generic abstractions related to dispatching event",
"homepage": "https://symfony.com",
"keywords": [
"abstractions",
"contracts",
"decoupling",
"interfaces",
"interoperability",
"standards"
],
"time": "2020-07-06T13:19:58+00:00"
},
{
"name": "symfony/expression-language",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/expression-language.git",
"reference": "54b118a1c91991b90e67919146db66093def1bf9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/expression-language/zipball/54b118a1c91991b90e67919146db66093def1bf9",
"reference": "54b118a1c91991b90e67919146db66093def1bf9",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/cache": "^3.4|^4.0|^5.0",
"symfony/service-contracts": "^1.1|^2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\ExpressionLanguage\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony ExpressionLanguage Component",
"homepage": "https://symfony.com",
"time": "2020-09-02T16:08:58+00:00"
},
{
"name": "symfony/filesystem",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/ebc51494739d3b081ea543ed7c462fa73a4f74db",
"reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/polyfill-ctype": "~1.8"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Filesystem\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Filesystem Component",
"homepage": "https://symfony.com",
"time": "2020-09-27T13:54:16+00:00"
},
{
"name": "symfony/finder",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "60d08560f9aa72997c44077c40d47aa28a963230"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/60d08560f9aa72997c44077c40d47aa28a963230",
"reference": "60d08560f9aa72997c44077c40d47aa28a963230",
"shasum": ""
},
"require": {
"php": ">=7.1.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Finder\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
"time": "2020-10-02T07:34:48+00:00"
},
{
"name": "symfony/flex",
"version": "v1.9.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/flex.git",
"reference": "115e67f76ba95d70946a6e0b15d4578bf04927c3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/flex/zipball/115e67f76ba95d70946a6e0b15d4578bf04927c3",
"reference": "115e67f76ba95d70946a6e0b15d4578bf04927c3",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.0|^2.0",
"php": ">=7.1"
},
"require-dev": {
"composer/composer": "^1.0.2|^2.0",
"symfony/dotenv": "^4.4|^5.0",
"symfony/phpunit-bridge": "^4.4|^5.0",
"symfony/process": "^3.4|^4.4|^5.0"
},
"type": "composer-plugin",
"extra": {
"branch-alias": {
"dev-master": "1.8-dev"
},
"class": "Symfony\\Flex\\Flex"
},
"autoload": {
"psr-4": {
"Symfony\\Flex\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien.potencier@gmail.com"
}
],
"description": "Composer plugin for Symfony",
"time": "2020-09-14T14:58:36+00:00"
},
{
"name": "symfony/form",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/form.git",
"reference": "54d9ec68b65440a4a5937bd6b76ac92214dcd210"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/form/zipball/54d9ec68b65440a4a5937bd6b76ac92214dcd210",
"reference": "54d9ec68b65440a4a5937bd6b76ac92214dcd210",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/event-dispatcher": "^4.3",
"symfony/intl": "^4.4|^5.0",
"symfony/options-resolver": "~4.3|^5.0",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.0",
"symfony/property-access": "^3.4.40|^4.4.8|^5.0.8",
"symfony/service-contracts": "^1.1|^2"
},
"conflict": {
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
"symfony/console": "<4.3",
"symfony/dependency-injection": "<3.4",
"symfony/doctrine-bridge": "<3.4",
"symfony/framework-bundle": "<3.4",
"symfony/http-kernel": "<4.4",
"symfony/intl": "<4.3",
"symfony/translation": "<4.2",
"symfony/twig-bridge": "<3.4.5|<4.0.5,>=4.0"
},
"require-dev": {
"doctrine/collections": "~1.0",
"symfony/config": "^3.4|^4.0|^5.0",
"symfony/console": "^4.3|^5.0",
"symfony/dependency-injection": "^3.4|^4.0|^5.0",
"symfony/expression-language": "^3.4|^4.0|^5.0",
"symfony/http-foundation": "^3.4|^4.0|^5.0",
"symfony/http-kernel": "^4.4",
"symfony/security-csrf": "^3.4|^4.0|^5.0",
"symfony/translation": "^4.2|^5.0",
"symfony/validator": "^3.4.44|^4.3.4|^5.0",
"symfony/var-dumper": "^4.3|^5.0"
},
"suggest": {
"symfony/security-csrf": "For protecting forms against CSRF attacks.",
"symfony/twig-bridge": "For templating with Twig.",
"symfony/validator": "For form validation."
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Form\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Form Component",
"homepage": "https://symfony.com",
"time": "2020-10-02T12:43:11+00:00"
},
{
"name": "symfony/framework-bundle",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/framework-bundle.git",
"reference": "01c517f48814a1f599ce721814435f2dc548ce4c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/framework-bundle/zipball/01c517f48814a1f599ce721814435f2dc548ce4c",
"reference": "01c517f48814a1f599ce721814435f2dc548ce4c",
"shasum": ""
},
"require": {
"ext-xml": "*",
"php": ">=7.1.3",
"symfony/cache": "^4.4|^5.0",
"symfony/config": "^4.3.4|^5.0",
"symfony/dependency-injection": "^4.4.1|^5.0.1",
"symfony/error-handler": "^4.4.1|^5.0.1",
"symfony/filesystem": "^3.4|^4.0|^5.0",
"symfony/finder": "^3.4|^4.0|^5.0",
"symfony/http-foundation": "^4.4|^5.0",
"symfony/http-kernel": "^4.4",
"symfony/polyfill-mbstring": "~1.0",
"symfony/routing": "^4.4|^5.0"
},
"conflict": {
"doctrine/persistence": "<1.3",
"phpdocumentor/reflection-docblock": "<3.0",
"phpdocumentor/type-resolver": "<0.2.1",
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
"symfony/asset": "<3.4",
"symfony/browser-kit": "<4.3",
"symfony/console": "<4.3",
"symfony/dom-crawler": "<4.3",
"symfony/dotenv": "<4.3.6",
"symfony/form": "<4.3.5",
"symfony/http-client": "<4.4",
"symfony/lock": "<4.4",
"symfony/mailer": "<4.4",
"symfony/messenger": "<4.4",
"symfony/mime": "<4.4",
"symfony/property-info": "<3.4",
"symfony/security-bundle": "<4.4",
"symfony/serializer": "<4.4",
"symfony/stopwatch": "<3.4",
"symfony/translation": "<4.4",
"symfony/twig-bridge": "<4.1.1",
"symfony/twig-bundle": "<4.4",
"symfony/validator": "<4.4",
"symfony/web-profiler-bundle": "<4.4",
"symfony/workflow": "<4.3.6"
},
"require-dev": {
"doctrine/annotations": "~1.7",
"doctrine/cache": "~1.0",
"paragonie/sodium_compat": "^1.8",
"phpdocumentor/reflection-docblock": "^3.0|^4.0",
"symfony/asset": "^3.4|^4.0|^5.0",
"symfony/browser-kit": "^4.3|^5.0",
"symfony/console": "^4.3.4|^5.0",
"symfony/css-selector": "^3.4|^4.0|^5.0",
"symfony/dom-crawler": "^4.3|^5.0",
"symfony/dotenv": "^4.3.6|^5.0",
"symfony/expression-language": "^3.4|^4.0|^5.0",
"symfony/form": "^4.3.5|^5.0",
"symfony/http-client": "^4.4|^5.0",
"symfony/lock": "^4.4|^5.0",
"symfony/mailer": "^4.4|^5.0",
"symfony/messenger": "^4.4|^5.0",
"symfony/mime": "^4.4|^5.0",
"symfony/polyfill-intl-icu": "~1.0",
"symfony/process": "^3.4|^4.0|^5.0",
"symfony/property-info": "^3.4|^4.0|^5.0",
"symfony/security-csrf": "^3.4|^4.0|^5.0",
"symfony/security-http": "^3.4|^4.0|^5.0",
"symfony/serializer": "^4.4|^5.0",
"symfony/stopwatch": "^3.4|^4.0|^5.0",
"symfony/templating": "^3.4|^4.0|^5.0",
"symfony/translation": "^4.4|^5.0",
"symfony/twig-bundle": "^4.4|^5.0",
"symfony/validator": "^4.4|^5.0",
"symfony/web-link": "^4.4|^5.0",
"symfony/workflow": "^4.3.6|^5.0",
"symfony/yaml": "^3.4|^4.0|^5.0",
"twig/twig": "^1.41|^2.10|^3.0"
},
"suggest": {
"ext-apcu": "For best performance of the system caches",
"symfony/console": "For using the console commands",
"symfony/form": "For using forms",
"symfony/property-info": "For using the property_info service",
"symfony/serializer": "For using the serializer service",
"symfony/validator": "For using validation",
"symfony/web-link": "For using web links, features such as preloading, prefetching or prerendering",
"symfony/yaml": "For using the debug:config and lint:yaml commands"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Bundle\\FrameworkBundle\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony FrameworkBundle",
"homepage": "https://symfony.com",
"time": "2020-09-29T09:51:46+00:00"
},
{
"name": "symfony/http-client",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
"reference": "b1cb966898aaf8df37280fde537a27b6724b3bc4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/b1cb966898aaf8df37280fde537a27b6724b3bc4",
"reference": "b1cb966898aaf8df37280fde537a27b6724b3bc4",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"psr/log": "^1.0",
"symfony/http-client-contracts": "^1.1.10|^2",
"symfony/polyfill-php73": "^1.11",
"symfony/service-contracts": "^1.0|^2"
},
"provide": {
"php-http/async-client-implementation": "*",
"php-http/client-implementation": "*",
"psr/http-client-implementation": "1.0",
"symfony/http-client-implementation": "1.1"
},
"require-dev": {
"guzzlehttp/promises": "^1.3.1",
"nyholm/psr7": "^1.0",
"php-http/httplug": "^1.0|^2.0",
"psr/http-client": "^1.0",
"symfony/dependency-injection": "^4.3|^5.0",
"symfony/http-kernel": "^4.4.13",
"symfony/process": "^4.2|^5.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\HttpClient\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony HttpClient component",
"homepage": "https://symfony.com",
"time": "2020-10-02T13:41:48+00:00"
},
{
"name": "symfony/http-client-contracts",
"version": "v2.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client-contracts.git",
"reference": "3a5d0fe7908daaa23e3dbf4cee3ba4bfbb19fdd3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/3a5d0fe7908daaa23e3dbf4cee3ba4bfbb19fdd3",
"reference": "3a5d0fe7908daaa23e3dbf4cee3ba4bfbb19fdd3",
"shasum": ""
},
"require": {
"php": ">=7.2.5"
},
"suggest": {
"symfony/http-client-implementation": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"psr-4": {
"Symfony\\Contracts\\HttpClient\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Generic abstractions related to HTTP clients",
"homepage": "https://symfony.com",
"keywords": [
"abstractions",
"contracts",
"decoupling",
"interfaces",
"interoperability",
"standards"
],
"time": "2020-09-07T11:33:47+00:00"
},
{
"name": "symfony/http-foundation",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "10683b407c3b6087c64619ebc97a87e36ea62c92"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/10683b407c3b6087c64619ebc97a87e36ea62c92",
"reference": "10683b407c3b6087c64619ebc97a87e36ea62c92",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/mime": "^4.3|^5.0",
"symfony/polyfill-mbstring": "~1.1"
},
"require-dev": {
"predis/predis": "~1.0",
"symfony/expression-language": "^3.4|^4.0|^5.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\HttpFoundation\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
"time": "2020-09-27T14:14:06+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "6544745997b06c7dcecf0d4a70f09e5de1db7ca8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/6544745997b06c7dcecf0d4a70f09e5de1db7ca8",
"reference": "6544745997b06c7dcecf0d4a70f09e5de1db7ca8",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"psr/log": "~1.0",
"symfony/error-handler": "^4.4",
"symfony/event-dispatcher": "^4.4",
"symfony/http-client-contracts": "^1.1|^2",
"symfony/http-foundation": "^4.4|^5.0",
"symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-php73": "^1.9",
"symfony/polyfill-php80": "^1.15"
},
"conflict": {
"symfony/browser-kit": "<4.3",
"symfony/config": "<3.4",
"symfony/console": ">=5",
"symfony/dependency-injection": "<4.3",
"symfony/translation": "<4.2",
"twig/twig": "<1.34|<2.4,>=2"
},
"provide": {
"psr/log-implementation": "1.0"
},
"require-dev": {
"psr/cache": "~1.0",
"symfony/browser-kit": "^4.3|^5.0",
"symfony/config": "^3.4|^4.0|^5.0",
"symfony/console": "^3.4|^4.0",
"symfony/css-selector": "^3.4|^4.0|^5.0",
"symfony/dependency-injection": "^4.3|^5.0",
"symfony/dom-crawler": "^3.4|^4.0|^5.0",
"symfony/expression-language": "^3.4|^4.0|^5.0",
"symfony/finder": "^3.4|^4.0|^5.0",
"symfony/process": "^3.4|^4.0|^5.0",
"symfony/routing": "^3.4|^4.0|^5.0",
"symfony/stopwatch": "^3.4|^4.0|^5.0",
"symfony/templating": "^3.4|^4.0|^5.0",
"symfony/translation": "^4.2|^5.0",
"symfony/translation-contracts": "^1.1|^2",
"twig/twig": "^1.34|^2.4|^3.0"
},
"suggest": {
"symfony/browser-kit": "",
"symfony/config": "",
"symfony/console": "",
"symfony/dependency-injection": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\HttpKernel\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com",
"time": "2020-10-04T07:48:13+00:00"
},
{
"name": "symfony/inflector",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/inflector.git",
"reference": "3330be44724db42f0aa493002ae63f5d29f8d5f7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/inflector/zipball/3330be44724db42f0aa493002ae63f5d29f8d5f7",
"reference": "3330be44724db42f0aa493002ae63f5d29f8d5f7",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/polyfill-ctype": "~1.8"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Inflector\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Bernhard Schussek",
"email": "bschussek@gmail.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Inflector Component",
"homepage": "https://symfony.com",
"keywords": [
"inflection",
"pluralize",
"singularize",
"string",
"symfony",
"words"
],
"time": "2020-05-20T08:37:50+00:00"
},
{
"name": "symfony/intl",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/intl.git",
"reference": "0da1f7f08072ddb9185b02ce30ce098fa61f4042"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/intl/zipball/0da1f7f08072ddb9185b02ce30ce098fa61f4042",
"reference": "0da1f7f08072ddb9185b02ce30ce098fa61f4042",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/polyfill-intl-icu": "~1.0"
},
"require-dev": {
"symfony/filesystem": "^3.4|^4.0|^5.0"
},
"suggest": {
"ext-intl": "to use the component with locales other than \"en\""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Intl\\": ""
},
"classmap": [
"Resources/stubs"
],
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Bernhard Schussek",
"email": "bschussek@gmail.com"
},
{
"name": "Eriksen Costa",
"email": "eriksen.costa@infranology.com.br"
},
{
"name": "Igor Wiedler",
"email": "igor@wiedler.ch"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "A PHP replacement layer for the C intl extension that includes additional data from the ICU library.",
"homepage": "https://symfony.com",
"keywords": [
"i18n",
"icu",
"internationalization",
"intl",
"l10n",
"localization"
],
"time": "2020-09-27T03:36:23+00:00"
},
{
"name": "symfony/lock",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/lock.git",
"reference": "9d7e8148dd399f392b9b4920832b632c04ffdf64"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/lock/zipball/9d7e8148dd399f392b9b4920832b632c04ffdf64",
"reference": "9d7e8148dd399f392b9b4920832b632c04ffdf64",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"psr/log": "~1.0"
},
"conflict": {
"doctrine/dbal": "<2.5"
},
"require-dev": {
"doctrine/dbal": "^2.5|^3.0",
"predis/predis": "~1.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Lock\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jérémy Derussé",
"email": "jeremy@derusse.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Lock Component",
"homepage": "https://symfony.com",
"keywords": [
"cas",
"flock",
"locking",
"mutex",
"redlock",
"semaphore"
],
"time": "2020-10-03T06:31:32+00:00"
},
{
"name": "symfony/mailer",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailer.git",
"reference": "c1018952b49058802c2aa1ea831935e996b7f5d3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/mailer/zipball/c1018952b49058802c2aa1ea831935e996b7f5d3",
"reference": "c1018952b49058802c2aa1ea831935e996b7f5d3",
"shasum": ""
},
"require": {
"egulias/email-validator": "^2.1.10",
"php": ">=7.1.3",
"psr/log": "~1.0",
"symfony/event-dispatcher": "^4.3",
"symfony/mime": "^4.4|^5.0",
"symfony/service-contracts": "^1.1|^2"
},
"conflict": {
"symfony/http-kernel": "<4.4",
"symfony/sendgrid-mailer": "<4.4"
},
"require-dev": {
"symfony/amazon-mailer": "^4.4|^5.0",
"symfony/google-mailer": "^4.4|^5.0",
"symfony/http-client-contracts": "^1.1|^2",
"symfony/mailchimp-mailer": "^4.4|^5.0",
"symfony/mailgun-mailer": "^4.4|^5.0",
"symfony/messenger": "^4.4|^5.0",
"symfony/postmark-mailer": "^4.4|^5.0",
"symfony/sendgrid-mailer": "^4.4|^5.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Mailer\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Mailer Component",
"homepage": "https://symfony.com",
"time": "2020-09-06T17:12:23+00:00"
},
{
"name": "symfony/maker-bundle",
"version": "v1.21.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/maker-bundle.git",
"reference": "da629093c7bf9abd9a6a0f232a43bbb1b88de68d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/maker-bundle/zipball/da629093c7bf9abd9a6a0f232a43bbb1b88de68d",
"reference": "da629093c7bf9abd9a6a0f232a43bbb1b88de68d",
"shasum": ""
},
"require": {
"doctrine/inflector": "^1.2",
"nikic/php-parser": "^4.0",
"php": "^7.1.3",
"symfony/config": "^3.4|^4.0|^5.0",
"symfony/console": "^3.4|^4.0|^5.0",
"symfony/dependency-injection": "^3.4|^4.0|^5.0",
"symfony/filesystem": "^3.4|^4.0|^5.0",
"symfony/finder": "^3.4|^4.0|^5.0",
"symfony/framework-bundle": "^3.4|^4.0|^5.0",
"symfony/http-kernel": "^3.4|^4.0|^5.0"
},
"require-dev": {
"composer/semver": "^3.0@dev",
"doctrine/doctrine-bundle": "^1.8|^2.0",
"doctrine/orm": "^2.3",
"friendsofphp/php-cs-fixer": "^2.8",
"friendsoftwig/twigcs": "^3.1.2",
"symfony/http-client": "^4.3|^5.0",
"symfony/phpunit-bridge": "^4.3|^5.0",
"symfony/process": "^3.4|^4.0|^5.0",
"symfony/security-core": "^3.4|^4.0|^5.0",
"symfony/yaml": "^3.4|^4.0|^5.0"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "1.0-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Bundle\\MakerBundle\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Maker helps you create empty commands, controllers, form classes, tests and more so you can forget about writing boilerplate code.",
"homepage": "https://symfony.com/doc/current/bundles/SymfonyMakerBundle/index.html",
"keywords": [
"code generator",
"generator",
"scaffold",
"scaffolding"
],
"time": "2020-08-29T18:05:46+00:00"
},
{
"name": "symfony/mime",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
"reference": "42df2507eb8e6cd9795f51c99dd52bab543a918f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/mime/zipball/42df2507eb8e6cd9795f51c99dd52bab543a918f",
"reference": "42df2507eb8e6cd9795f51c99dd52bab543a918f",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/polyfill-intl-idn": "^1.10",
"symfony/polyfill-mbstring": "^1.0"
},
"conflict": {
"symfony/mailer": "<4.4"
},
"require-dev": {
"egulias/email-validator": "^2.1.10",
"symfony/dependency-injection": "^3.4|^4.1|^5.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Mime\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "A library to manipulate MIME messages",
"homepage": "https://symfony.com",
"keywords": [
"mime",
"mime-type"
],
"time": "2020-09-02T16:08:58+00:00"
},
{
"name": "symfony/monolog-bridge",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/monolog-bridge.git",
"reference": "267085e15c00ea5e8059dbf1cd7ba8f5f7541221"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/267085e15c00ea5e8059dbf1cd7ba8f5f7541221",
"reference": "267085e15c00ea5e8059dbf1cd7ba8f5f7541221",
"shasum": ""
},
"require": {
"monolog/monolog": "^1.25.1",
"php": ">=7.1.3",
"symfony/http-kernel": "^4.3",
"symfony/service-contracts": "^1.1|^2"
},
"conflict": {
"symfony/console": "<3.4",
"symfony/http-foundation": "<3.4"
},
"require-dev": {
"symfony/console": "^3.4|^4.0|^5.0",
"symfony/http-client": "^4.4|^5.0",
"symfony/security-core": "^3.4|^4.0|^5.0",
"symfony/var-dumper": "^3.4|^4.0|^5.0"
},
"suggest": {
"symfony/console": "For the possibility to show log messages in console commands depending on verbosity settings.",
"symfony/http-kernel": "For using the debugging handlers together with the response life cycle of the HTTP kernel.",
"symfony/var-dumper": "For using the debugging handlers like the console handler or the log server handler."
},
"type": "symfony-bridge",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Bridge\\Monolog\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Monolog Bridge",
"homepage": "https://symfony.com",
"time": "2020-10-02T07:34:48+00:00"
},
{
"name": "symfony/monolog-bundle",
"version": "v3.6.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/monolog-bundle.git",
"reference": "e495f5c7e4e672ffef4357d4a4d85f010802f940"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/e495f5c7e4e672ffef4357d4a4d85f010802f940",
"reference": "e495f5c7e4e672ffef4357d4a4d85f010802f940",
"shasum": ""
},
"require": {
"monolog/monolog": "~1.22 || ~2.0",
"php": ">=5.6",
"symfony/config": "~3.4 || ~4.0 || ^5.0",
"symfony/dependency-injection": "~3.4.10 || ^4.0.10 || ^5.0",
"symfony/http-kernel": "~3.4 || ~4.0 || ^5.0",
"symfony/monolog-bridge": "~3.4 || ~4.0 || ^5.0"
},
"require-dev": {
"symfony/console": "~3.4 || ~4.0 || ^5.0",
"symfony/phpunit-bridge": "^4.4 || ^5.0",
"symfony/yaml": "~3.4 || ~4.0 || ^5.0"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "3.x-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Bundle\\MonologBundle\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "http://symfony.com/contributors"
}
],
"description": "Symfony MonologBundle",
"homepage": "http://symfony.com",
"keywords": [
"log",
"logging"
],
"time": "2020-10-06T15:12:11+00:00"
},
{
"name": "symfony/options-resolver",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
"reference": "02b120a79ff06b779819f1594a300226bfc75105"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/02b120a79ff06b779819f1594a300226bfc75105",
"reference": "02b120a79ff06b779819f1594a300226bfc75105",
"shasum": ""
},
"require": {
"php": ">=7.1.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\OptionsResolver\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony OptionsResolver Component",
"homepage": "https://symfony.com",
"keywords": [
"config",
"configuration",
"options"
],
"time": "2020-09-24T16:40:22+00:00"
},
{
"name": "symfony/orm-pack",
"version": "v1.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/orm-pack.git",
"reference": "21ac491414b5815e5ebb7425908c1d1568d2e775"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/orm-pack/zipball/21ac491414b5815e5ebb7425908c1d1568d2e775",
"reference": "21ac491414b5815e5ebb7425908c1d1568d2e775",
"shasum": ""
},
"require": {
"composer/package-versions-deprecated": "*",
"doctrine/common": "^2",
"doctrine/doctrine-bundle": "^2",
"doctrine/doctrine-migrations-bundle": "^2",
"doctrine/orm": "^2"
},
"type": "symfony-pack",
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "A pack for the Doctrine ORM",
"time": "2020-08-31T10:20:18+00:00"
},
{
"name": "symfony/polyfill-intl-icu",
"version": "v1.18.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-icu.git",
"reference": "4e45a6e39041a9cc78835b11abc47874ae302a55"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/4e45a6e39041a9cc78835b11abc47874ae302a55",
"reference": "4e45a6e39041a9cc78835b11abc47874ae302a55",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"symfony/intl": "~2.3|~3.0|~4.0|~5.0"
},
"suggest": {
"ext-intl": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.18-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for intl's ICU-related data and classes",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"icu",
"intl",
"polyfill",
"portable",
"shim"
],
"time": "2020-07-14T12:35:20+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
"version": "v1.18.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
"reference": "5dcab1bc7146cf8c1beaa4502a3d9be344334251"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/5dcab1bc7146cf8c1beaa4502a3d9be344334251",
"reference": "5dcab1bc7146cf8c1beaa4502a3d9be344334251",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"symfony/polyfill-intl-normalizer": "^1.10",
"symfony/polyfill-php70": "^1.10",
"symfony/polyfill-php72": "^1.10"
},
"suggest": {
"ext-intl": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.18-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Intl\\Idn\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Laurent Bassin",
"email": "laurent@bassin.info"
},
{
"name": "Trevor Rowbotham",
"email": "trevor.rowbotham@pm.me"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"idn",
"intl",
"polyfill",
"portable",
"shim"
],
"time": "2020-08-04T06:02:08+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.18.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
"reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e",
"reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"suggest": {
"ext-intl": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.18-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Intl\\Normalizer\\": ""
},
"files": [
"bootstrap.php"
],
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for intl's Normalizer class and related functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"intl",
"normalizer",
"polyfill",
"portable",
"shim"
],
"time": "2020-07-14T12:35:20+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.18.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
"reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"suggest": {
"ext-mbstring": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.18-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Mbstring\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for the Mbstring extension",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"mbstring",
"polyfill",
"portable",
"shim"
],
"time": "2020-07-14T12:35:20+00:00"
},
{
"name": "symfony/polyfill-php72",
"version": "v1.18.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php72.git",
"reference": "639447d008615574653fb3bc60d1986d7172eaae"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/639447d008615574653fb3bc60d1986d7172eaae",
"reference": "639447d008615574653fb3bc60d1986d7172eaae",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.18-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Php72\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"time": "2020-07-14T12:35:20+00:00"
},
{
"name": "symfony/polyfill-php73",
"version": "v1.18.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php73.git",
"reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
"reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.18-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Php73\\": ""
},
"files": [
"bootstrap.php"
],
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"time": "2020-07-14T12:35:20+00:00"
},
{
"name": "symfony/polyfill-php80",
"version": "v1.18.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
"reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981",
"reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981",
"shasum": ""
},
"require": {
"php": ">=7.0.8"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.18-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Php80\\": ""
},
"files": [
"bootstrap.php"
],
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ion Bazan",
"email": "ion.bazan@gmail.com"
},
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"time": "2020-07-14T12:35:20+00:00"
},
{
"name": "symfony/polyfill-uuid",
"version": "v1.18.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-uuid.git",
"reference": "da48e2cccd323e48c16c26481bf5800f6ab1c49d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/da48e2cccd323e48c16c26481bf5800f6ab1c49d",
"reference": "da48e2cccd323e48c16c26481bf5800f6ab1c49d",
"shasum": ""
},
"require": {
"paragonie/random_compat": "~1.0|~2.0|~9.99",
"php": ">=5.3.3"
},
"suggest": {
"ext-uuid": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.18-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Uuid\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Grégoire Pineau",
"email": "lyrixx@lyrixx.info"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for uuid functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"uuid"
],
"time": "2020-07-14T12:35:20+00:00"
},
{
"name": "symfony/process",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
"reference": "9b887acc522935f77555ae8813495958c7771ba7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/9b887acc522935f77555ae8813495958c7771ba7",
"reference": "9b887acc522935f77555ae8813495958c7771ba7",
"shasum": ""
},
"require": {
"php": ">=7.1.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Process\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Process Component",
"homepage": "https://symfony.com",
"time": "2020-09-02T16:08:58+00:00"
},
{
"name": "symfony/profiler-pack",
"version": "v1.0.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/profiler-pack.git",
"reference": "29ec66471082b4eb068db11eb4f0a48c277653f7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/profiler-pack/zipball/29ec66471082b4eb068db11eb4f0a48c277653f7",
"reference": "29ec66471082b4eb068db11eb4f0a48c277653f7",
"shasum": ""
},
"require": {
"symfony/stopwatch": "*",
"symfony/twig-bundle": "*",
"symfony/web-profiler-bundle": "*"
},
"type": "symfony-pack",
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "A pack for the Symfony web profiler",
"time": "2020-08-12T06:50:46+00:00"
},
{
"name": "symfony/property-access",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-access.git",
"reference": "ecc35239f0f665fd7a8e3a2ecaad7e4ee2668ab6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/property-access/zipball/ecc35239f0f665fd7a8e3a2ecaad7e4ee2668ab6",
"reference": "ecc35239f0f665fd7a8e3a2ecaad7e4ee2668ab6",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/inflector": "^3.4|^4.0|^5.0"
},
"require-dev": {
"symfony/cache": "^3.4|^4.0|^5.0"
},
"suggest": {
"psr/cache-implementation": "To cache access methods."
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\PropertyAccess\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony PropertyAccess Component",
"homepage": "https://symfony.com",
"keywords": [
"access",
"array",
"extraction",
"index",
"injection",
"object",
"property",
"property path",
"reflection"
],
"time": "2020-09-02T16:08:58+00:00"
},
{
"name": "symfony/property-info",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-info.git",
"reference": "387c5823e37f14271a499d1b9844c2009cb79d44"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/property-info/zipball/387c5823e37f14271a499d1b9844c2009cb79d44",
"reference": "387c5823e37f14271a499d1b9844c2009cb79d44",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/inflector": "^3.4|^4.0|^5.0"
},
"conflict": {
"phpdocumentor/reflection-docblock": "<3.0||>=3.2.0,<3.2.2",
"phpdocumentor/type-resolver": "<0.3.0",
"symfony/dependency-injection": "<3.4"
},
"require-dev": {
"doctrine/annotations": "~1.7",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
"symfony/cache": "^3.4|^4.0|^5.0",
"symfony/dependency-injection": "^3.4|^4.0|^5.0",
"symfony/serializer": "^3.4|^4.0|^5.0"
},
"suggest": {
"phpdocumentor/reflection-docblock": "To use the PHPDoc",
"psr/cache-implementation": "To cache results",
"symfony/doctrine-bridge": "To use Doctrine metadata",
"symfony/serializer": "To use Serializer metadata"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\PropertyInfo\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Kévin Dunglas",
"email": "dunglas@gmail.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Property Info Component",
"homepage": "https://symfony.com",
"keywords": [
"doctrine",
"phpdoc",
"property",
"symfony",
"type",
"validator"
],
"time": "2020-09-03T00:26:19+00:00"
},
{
"name": "symfony/routing",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
"reference": "006b2d06672b8650998f328fc603eb6f3feb979f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/006b2d06672b8650998f328fc603eb6f3feb979f",
"reference": "006b2d06672b8650998f328fc603eb6f3feb979f",
"shasum": ""
},
"require": {
"php": ">=7.1.3"
},
"conflict": {
"symfony/config": "<4.2",
"symfony/dependency-injection": "<3.4",
"symfony/yaml": "<3.4"
},
"require-dev": {
"doctrine/annotations": "~1.2",
"psr/log": "~1.0",
"symfony/config": "^4.2|^5.0",
"symfony/dependency-injection": "^3.4|^4.0|^5.0",
"symfony/expression-language": "^3.4|^4.0|^5.0",
"symfony/http-foundation": "^3.4|^4.0|^5.0",
"symfony/yaml": "^3.4|^4.0|^5.0"
},
"suggest": {
"doctrine/annotations": "For using the annotation loader",
"symfony/config": "For using the all-in-one router or any loader",
"symfony/expression-language": "For using expression matching",
"symfony/http-foundation": "For using a Symfony Request object",
"symfony/yaml": "For using the YAML loader"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Routing\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Routing Component",
"homepage": "https://symfony.com",
"keywords": [
"router",
"routing",
"uri",
"url"
],
"time": "2020-10-01T16:25:17+00:00"
},
{
"name": "symfony/security-bundle",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-bundle.git",
"reference": "274b0eb10dfc9067175cb4d1bcc68f8b37ebee14"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-bundle/zipball/274b0eb10dfc9067175cb4d1bcc68f8b37ebee14",
"reference": "274b0eb10dfc9067175cb4d1bcc68f8b37ebee14",
"shasum": ""
},
"require": {
"ext-xml": "*",
"php": ">=7.1.3",
"symfony/config": "^4.2|^5.0",
"symfony/dependency-injection": "^4.4|^5.0",
"symfony/http-kernel": "^4.4",
"symfony/security-core": "^4.4",
"symfony/security-csrf": "^4.2|^5.0",
"symfony/security-guard": "^4.2|^5.0",
"symfony/security-http": "^4.4.5"
},
"conflict": {
"symfony/browser-kit": "<4.2",
"symfony/console": "<3.4",
"symfony/framework-bundle": "<4.4",
"symfony/ldap": "<4.4",
"symfony/twig-bundle": "<4.4"
},
"require-dev": {
"doctrine/doctrine-bundle": "^1.5|^2.0",
"symfony/asset": "^3.4|^4.0|^5.0",
"symfony/browser-kit": "^4.2|^5.0",
"symfony/console": "^3.4|^4.0|^5.0",
"symfony/css-selector": "^3.4|^4.0|^5.0",
"symfony/dom-crawler": "^3.4|^4.0|^5.0",
"symfony/expression-language": "^3.4|^4.0|^5.0",
"symfony/form": "^3.4|^4.0|^5.0",
"symfony/framework-bundle": "^4.4|^5.0",
"symfony/process": "^3.4|^4.0|^5.0",
"symfony/serializer": "^4.4|^5.0",
"symfony/translation": "^3.4|^4.0|^5.0",
"symfony/twig-bridge": "^3.4|^4.0|^5.0",
"symfony/twig-bundle": "^4.4|^5.0",
"symfony/validator": "^3.4|^4.0|^5.0",
"symfony/yaml": "^3.4|^4.0|^5.0",
"twig/twig": "^1.41|^2.10|^3.0"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Bundle\\SecurityBundle\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony SecurityBundle",
"homepage": "https://symfony.com",
"time": "2020-09-02T16:08:58+00:00"
},
{
"name": "symfony/security-core",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-core.git",
"reference": "264f391b7b172e36884790b4689152303d61e424"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-core/zipball/264f391b7b172e36884790b4689152303d61e424",
"reference": "264f391b7b172e36884790b4689152303d61e424",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/event-dispatcher-contracts": "^1.1|^2",
"symfony/service-contracts": "^1.1.6|^2"
},
"conflict": {
"symfony/event-dispatcher": "<4.3|>=5",
"symfony/ldap": "<4.4",
"symfony/security-guard": "<4.3"
},
"require-dev": {
"psr/container": "^1.0",
"psr/log": "~1.0",
"symfony/event-dispatcher": "^4.3",
"symfony/expression-language": "^3.4|^4.0|^5.0",
"symfony/http-foundation": "^3.4|^4.0|^5.0",
"symfony/ldap": "^4.4|^5.0",
"symfony/validator": "^3.4.31|^4.3.4|^5.0"
},
"suggest": {
"psr/container-implementation": "To instantiate the Security class",
"symfony/event-dispatcher": "",
"symfony/expression-language": "For using the expression voter",
"symfony/http-foundation": "",
"symfony/ldap": "For using LDAP integration",
"symfony/validator": "For using the user password constraint"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Security\\Core\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Security Component - Core Library",
"homepage": "https://symfony.com",
"time": "2020-10-04T07:09:09+00:00"
},
{
"name": "symfony/security-csrf",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-csrf.git",
"reference": "59bc56de929b1e1d2cd41c22874f8f57863f0aff"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-csrf/zipball/59bc56de929b1e1d2cd41c22874f8f57863f0aff",
"reference": "59bc56de929b1e1d2cd41c22874f8f57863f0aff",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/security-core": "^3.4|^4.0|^5.0"
},
"conflict": {
"symfony/http-foundation": "<3.4"
},
"require-dev": {
"symfony/http-foundation": "^3.4|^4.0|^5.0"
},
"suggest": {
"symfony/http-foundation": "For using the class SessionTokenStorage."
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Security\\Csrf\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Security Component - CSRF Library",
"homepage": "https://symfony.com",
"time": "2020-09-02T16:08:58+00:00"
},
{
"name": "symfony/security-guard",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-guard.git",
"reference": "95b7f702c4f07c44504a81c69ef07036e68b96b9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-guard/zipball/95b7f702c4f07c44504a81c69ef07036e68b96b9",
"reference": "95b7f702c4f07c44504a81c69ef07036e68b96b9",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/security-core": "^3.4.22|^4.2.3|^5.0",
"symfony/security-http": "^4.4.1"
},
"require-dev": {
"psr/log": "~1.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Security\\Guard\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Security Component - Guard",
"homepage": "https://symfony.com",
"time": "2020-09-02T16:08:58+00:00"
},
{
"name": "symfony/security-http",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-http.git",
"reference": "eddcd6b7372d430a47091fa5e5d733785b5a582b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-http/zipball/eddcd6b7372d430a47091fa5e5d733785b5a582b",
"reference": "eddcd6b7372d430a47091fa5e5d733785b5a582b",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/http-foundation": "^3.4.40|^4.4.7|^5.0.7",
"symfony/http-kernel": "^4.4",
"symfony/property-access": "^3.4|^4.0|^5.0",
"symfony/security-core": "^4.4.8"
},
"conflict": {
"symfony/event-dispatcher": ">=5",
"symfony/security-csrf": "<3.4.11|~4.0,<4.0.11"
},
"require-dev": {
"psr/log": "~1.0",
"symfony/routing": "^3.4|^4.0|^5.0",
"symfony/security-csrf": "^3.4.11|^4.0.11|^5.0"
},
"suggest": {
"symfony/routing": "For using the HttpUtils class to create sub-requests, redirect the user, and match URLs",
"symfony/security-csrf": "For using tokens to protect authentication/logout attempts"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Security\\Http\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Security Component - HTTP Integration",
"homepage": "https://symfony.com",
"time": "2020-09-02T16:08:58+00:00"
},
{
"name": "symfony/serializer",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/serializer.git",
"reference": "8e97a9cfc5a48de83437f286d6d0ab4a2a2c22b0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/serializer/zipball/8e97a9cfc5a48de83437f286d6d0ab4a2a2c22b0",
"reference": "8e97a9cfc5a48de83437f286d6d0ab4a2a2c22b0",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/polyfill-ctype": "~1.8"
},
"conflict": {
"phpdocumentor/type-resolver": "<0.2.1",
"symfony/dependency-injection": "<3.4",
"symfony/property-access": "<3.4",
"symfony/property-info": "<3.4",
"symfony/yaml": "<3.4"
},
"require-dev": {
"doctrine/annotations": "~1.0",
"doctrine/cache": "~1.0",
"phpdocumentor/reflection-docblock": "^3.2|^4.0",
"symfony/cache": "^3.4|^4.0|^5.0",
"symfony/config": "^3.4|^4.0|^5.0",
"symfony/dependency-injection": "^3.4|^4.0|^5.0",
"symfony/error-handler": "^4.4|^5.0",
"symfony/http-foundation": "^3.4|^4.0|^5.0",
"symfony/mime": "^4.4|^5.0",
"symfony/property-access": "^3.4|^4.0|^5.0",
"symfony/property-info": "^3.4.13|~4.0|^5.0",
"symfony/validator": "^3.4|^4.0|^5.0",
"symfony/yaml": "^3.4|^4.0|^5.0"
},
"suggest": {
"doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.",
"doctrine/cache": "For using the default cached annotation reader and metadata cache.",
"psr/cache-implementation": "For using the metadata cache.",
"symfony/config": "For using the XML mapping loader.",
"symfony/http-foundation": "For using a MIME type guesser within the DataUriNormalizer.",
"symfony/property-access": "For using the ObjectNormalizer.",
"symfony/property-info": "To deserialize relations.",
"symfony/yaml": "For using the default YAML mapping loader."
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Serializer\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Serializer Component",
"homepage": "https://symfony.com",
"time": "2020-10-02T20:12:42+00:00"
},
{
"name": "symfony/serializer-pack",
"version": "v1.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/serializer-pack.git",
"reference": "9bbce72dcad0cca797b678d3bfb764cf923ab28a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/serializer-pack/zipball/9bbce72dcad0cca797b678d3bfb764cf923ab28a",
"reference": "9bbce72dcad0cca797b678d3bfb764cf923ab28a",
"shasum": ""
},
"require": {
"doctrine/annotations": "^1.0",
"php": "^7.0",
"phpdocumentor/reflection-docblock": "*",
"symfony/property-access": "*",
"symfony/property-info": "*",
"symfony/serializer": "*"
},
"type": "symfony-pack",
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "A pack for the Symfony serializer",
"time": "2020-03-28T16:26:24+00:00"
},
{
"name": "symfony/service-contracts",
"version": "v2.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
"reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1",
"reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"psr/container": "^1.0"
},
"suggest": {
"symfony/service-implementation": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"psr-4": {
"Symfony\\Contracts\\Service\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Generic abstractions related to writing services",
"homepage": "https://symfony.com",
"keywords": [
"abstractions",
"contracts",
"decoupling",
"interfaces",
"interoperability",
"standards"
],
"time": "2020-09-07T11:33:47+00:00"
},
{
"name": "symfony/stopwatch",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/stopwatch.git",
"reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/stopwatch/zipball/6f89e19772cf61b3c65bab329fe0e318259fbd91",
"reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/service-contracts": "^1.0|^2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Stopwatch\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Stopwatch Component",
"homepage": "https://symfony.com",
"time": "2020-09-02T16:08:58+00:00"
},
{
"name": "symfony/swiftmailer-bundle",
"version": "v3.5.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/swiftmailer-bundle.git",
"reference": "933be6a3196fb354615290f53ff7ff61e0bdde58"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/933be6a3196fb354615290f53ff7ff61e0bdde58",
"reference": "933be6a3196fb354615290f53ff7ff61e0bdde58",
"shasum": ""
},
"require": {
"php": ">=7.1",
"swiftmailer/swiftmailer": "^6.1.3",
"symfony/config": "^4.4|^5.0",
"symfony/dependency-injection": "^4.4|^5.0",
"symfony/http-kernel": "^4.4|^5.0"
},
"conflict": {
"twig/twig": "<1.41|<2.10"
},
"require-dev": {
"symfony/console": "^4.4|^5.0",
"symfony/framework-bundle": "^4.4|^5.0",
"symfony/phpunit-bridge": "^4.4|^5.0",
"symfony/yaml": "^4.4|^5.0"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "3.5-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Bundle\\SwiftmailerBundle\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "http://symfony.com/contributors"
}
],
"description": "Symfony SwiftmailerBundle",
"homepage": "http://symfony.com",
"time": "2020-10-06T05:51:35+00:00"
},
{
"name": "symfony/templating",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/templating.git",
"reference": "7c5e32de7cf3efe9a11def8eaedc7901ec7b22b6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/templating/zipball/7c5e32de7cf3efe9a11def8eaedc7901ec7b22b6",
"reference": "7c5e32de7cf3efe9a11def8eaedc7901ec7b22b6",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/polyfill-ctype": "~1.8"
},
"require-dev": {
"psr/log": "~1.0"
},
"suggest": {
"psr/log-implementation": "For using debug logging in loaders"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Templating\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Templating Component",
"homepage": "https://symfony.com",
"time": "2020-09-02T16:08:58+00:00"
},
{
"name": "symfony/translation",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
"reference": "8494fa1bbf9d77fe1e7d50ac8ccfb80a858a98bd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/8494fa1bbf9d77fe1e7d50ac8ccfb80a858a98bd",
"reference": "8494fa1bbf9d77fe1e7d50ac8ccfb80a858a98bd",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/polyfill-mbstring": "~1.0",
"symfony/translation-contracts": "^1.1.6|^2"
},
"conflict": {
"symfony/config": "<3.4",
"symfony/dependency-injection": "<3.4",
"symfony/http-kernel": "<4.4",
"symfony/yaml": "<3.4"
},
"provide": {
"symfony/translation-implementation": "1.0"
},
"require-dev": {
"psr/log": "~1.0",
"symfony/config": "^3.4|^4.0|^5.0",
"symfony/console": "^3.4|^4.0|^5.0",
"symfony/dependency-injection": "^3.4|^4.0|^5.0",
"symfony/finder": "~2.8|~3.0|~4.0|^5.0",
"symfony/http-kernel": "^4.4",
"symfony/intl": "^3.4|^4.0|^5.0",
"symfony/service-contracts": "^1.1.2|^2",
"symfony/yaml": "^3.4|^4.0|^5.0"
},
"suggest": {
"psr/log-implementation": "To use logging capability in translator",
"symfony/config": "",
"symfony/yaml": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Translation\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Translation Component",
"homepage": "https://symfony.com",
"time": "2020-10-02T07:34:48+00:00"
},
{
"name": "symfony/translation-contracts",
"version": "v2.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation-contracts.git",
"reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e2eaa60b558f26a4b0354e1bbb25636efaaad105",
"reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105",
"shasum": ""
},
"require": {
"php": ">=7.2.5"
},
"suggest": {
"symfony/translation-implementation": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.3-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"psr-4": {
"Symfony\\Contracts\\Translation\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Generic abstractions related to translation",
"homepage": "https://symfony.com",
"keywords": [
"abstractions",
"contracts",
"decoupling",
"interfaces",
"interoperability",
"standards"
],
"time": "2020-09-28T13:05:58+00:00"
},
{
"name": "symfony/twig-bridge",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bridge.git",
"reference": "ac5de06ef28f0638bd87d8fcf515715232db34d2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/ac5de06ef28f0638bd87d8fcf515715232db34d2",
"reference": "ac5de06ef28f0638bd87d8fcf515715232db34d2",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/translation-contracts": "^1.1|^2",
"twig/twig": "^1.41|^2.10|^3.0"
},
"conflict": {
"symfony/console": "<3.4",
"symfony/form": "<4.4",
"symfony/http-foundation": "<4.3",
"symfony/translation": "<4.2",
"symfony/workflow": "<4.3"
},
"require-dev": {
"egulias/email-validator": "^2.1.10",
"symfony/asset": "^3.4|^4.0|^5.0",
"symfony/console": "^3.4|^4.0|^5.0",
"symfony/dependency-injection": "^3.4|^4.0|^5.0",
"symfony/error-handler": "^4.4|^5.0",
"symfony/expression-language": "^3.4|^4.0|^5.0",
"symfony/finder": "^3.4|^4.0|^5.0",
"symfony/form": "^4.3.5",
"symfony/http-foundation": "^4.3|^5.0",
"symfony/http-kernel": "^4.4",
"symfony/mime": "^4.3|^5.0",
"symfony/polyfill-intl-icu": "~1.0",
"symfony/routing": "^3.4|^4.0|^5.0",
"symfony/security-acl": "^2.8|^3.0",
"symfony/security-core": "^3.0|^4.0|^5.0",
"symfony/security-csrf": "^3.4|^4.0|^5.0",
"symfony/security-http": "^3.4|^4.0|^5.0",
"symfony/stopwatch": "^3.4|^4.0|^5.0",
"symfony/templating": "^3.4|^4.0|^5.0",
"symfony/translation": "^4.2.1|^5.0",
"symfony/web-link": "^4.4|^5.0",
"symfony/workflow": "^4.3|^5.0",
"symfony/yaml": "^3.4|^4.0|^5.0",
"twig/cssinliner-extra": "^2.12",
"twig/inky-extra": "^2.12",
"twig/markdown-extra": "^2.12"
},
"suggest": {
"symfony/asset": "For using the AssetExtension",
"symfony/expression-language": "For using the ExpressionExtension",
"symfony/finder": "",
"symfony/form": "For using the FormExtension",
"symfony/http-kernel": "For using the HttpKernelExtension",
"symfony/routing": "For using the RoutingExtension",
"symfony/security-core": "For using the SecurityExtension",
"symfony/security-csrf": "For using the CsrfExtension",
"symfony/security-http": "For using the LogoutUrlExtension",
"symfony/stopwatch": "For using the StopwatchExtension",
"symfony/templating": "For using the TwigEngine",
"symfony/translation": "For using the TranslationExtension",
"symfony/var-dumper": "For using the DumpExtension",
"symfony/web-link": "For using the WebLinkExtension",
"symfony/yaml": "For using the YamlExtension"
},
"type": "symfony-bridge",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Bridge\\Twig\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Twig Bridge",
"homepage": "https://symfony.com",
"time": "2020-09-02T16:08:58+00:00"
},
{
"name": "symfony/twig-bundle",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bundle.git",
"reference": "19369cd319700a925c1a736f3059894aab04c387"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bundle/zipball/19369cd319700a925c1a736f3059894aab04c387",
"reference": "19369cd319700a925c1a736f3059894aab04c387",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/http-foundation": "^4.3|^5.0",
"symfony/http-kernel": "^4.4",
"symfony/polyfill-ctype": "~1.8",
"symfony/twig-bridge": "^4.4|^5.0",
"twig/twig": "^1.41|^2.10|^3.0"
},
"conflict": {
"symfony/dependency-injection": "<4.1",
"symfony/framework-bundle": "<4.4",
"symfony/translation": "<4.2"
},
"require-dev": {
"doctrine/annotations": "~1.7",
"doctrine/cache": "~1.0",
"symfony/asset": "^3.4|^4.0|^5.0",
"symfony/dependency-injection": "^4.2.5|^5.0",
"symfony/expression-language": "^3.4|^4.0|^5.0",
"symfony/finder": "^3.4|^4.0|^5.0",
"symfony/form": "^3.4|^4.0|^5.0",
"symfony/framework-bundle": "^4.4|^5.0",
"symfony/routing": "^3.4|^4.0|^5.0",
"symfony/stopwatch": "^3.4|^4.0|^5.0",
"symfony/templating": "^3.4|^4.0|^5.0",
"symfony/translation": "^4.2|^5.0",
"symfony/web-link": "^3.4|^4.0|^5.0",
"symfony/yaml": "^3.4|^4.0|^5.0"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Bundle\\TwigBundle\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony TwigBundle",
"homepage": "https://symfony.com",
"time": "2020-10-01T13:17:48+00:00"
},
{
"name": "symfony/twig-pack",
"version": "v1.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-pack.git",
"reference": "8b278ea4b61fba7c051f172aacae6d87ef4be0e0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/twig-pack/zipball/8b278ea4b61fba7c051f172aacae6d87ef4be0e0",
"reference": "8b278ea4b61fba7c051f172aacae6d87ef4be0e0",
"shasum": ""
},
"require": {
"php": "^7.0",
"symfony/twig-bundle": "*",
"twig/extra-bundle": "^2.12|^3.0",
"twig/twig": "^2.12|^3.0"
},
"type": "symfony-pack",
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "A Twig pack for Symfony projects",
"time": "2019-10-17T05:44:22+00:00"
},
{
"name": "symfony/validator",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/validator.git",
"reference": "8da71f775b7e1ffeed784d27f526527bb8e9504b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/validator/zipball/8da71f775b7e1ffeed784d27f526527bb8e9504b",
"reference": "8da71f775b7e1ffeed784d27f526527bb8e9504b",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.0",
"symfony/translation-contracts": "^1.1|^2"
},
"conflict": {
"doctrine/lexer": "<1.0.2",
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
"symfony/dependency-injection": "<3.4",
"symfony/http-kernel": "<4.4",
"symfony/intl": "<4.3",
"symfony/translation": ">=5.0",
"symfony/yaml": "<3.4"
},
"require-dev": {
"doctrine/annotations": "~1.7",
"doctrine/cache": "~1.0",
"egulias/email-validator": "^2.1.10",
"symfony/cache": "^3.4|^4.0|^5.0",
"symfony/config": "^3.4|^4.0|^5.0",
"symfony/dependency-injection": "^3.4|^4.0|^5.0",
"symfony/expression-language": "^3.4|^4.0|^5.0",
"symfony/http-client": "^4.3|^5.0",
"symfony/http-foundation": "^4.1|^5.0",
"symfony/http-kernel": "^4.4",
"symfony/intl": "^4.3|^5.0",
"symfony/mime": "^4.4|^5.0",
"symfony/property-access": "^3.4|^4.0|^5.0",
"symfony/property-info": "^3.4|^4.0|^5.0",
"symfony/translation": "^4.2",
"symfony/yaml": "^3.4|^4.0|^5.0"
},
"suggest": {
"doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.",
"doctrine/cache": "For using the default cached annotation reader.",
"egulias/email-validator": "Strict (RFC compliant) email validation",
"psr/cache-implementation": "For using the mapping cache.",
"symfony/config": "",
"symfony/expression-language": "For using the Expression validator",
"symfony/http-foundation": "",
"symfony/intl": "",
"symfony/property-access": "For accessing properties within comparison constraints",
"symfony/property-info": "To automatically add NotNull and Type constraints",
"symfony/translation": "For translating validation errors.",
"symfony/yaml": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Validator\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Validator Component",
"homepage": "https://symfony.com",
"time": "2020-09-27T03:36:23+00:00"
},
{
"name": "symfony/var-dumper",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "0dc22bdf9d1197467bb04d505355180b6f20bcca"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/0dc22bdf9d1197467bb04d505355180b6f20bcca",
"reference": "0dc22bdf9d1197467bb04d505355180b6f20bcca",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php72": "~1.5",
"symfony/polyfill-php80": "^1.15"
},
"conflict": {
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
"symfony/console": "<3.4"
},
"require-dev": {
"ext-iconv": "*",
"symfony/console": "^3.4|^4.0|^5.0",
"symfony/process": "^4.4|^5.0",
"twig/twig": "^1.34|^2.4|^3.0"
},
"suggest": {
"ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
"ext-intl": "To show region name in time zone dump",
"symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
},
"bin": [
"Resources/bin/var-dump-server"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"files": [
"Resources/functions/dump.php"
],
"psr-4": {
"Symfony\\Component\\VarDumper\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony mechanism for exploring and dumping PHP variables",
"homepage": "https://symfony.com",
"keywords": [
"debug",
"dump"
],
"time": "2020-09-18T08:35:10+00:00"
},
{
"name": "symfony/var-exporter",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-exporter.git",
"reference": "bb6c505d1492bf55534184c0a38826bda529e5e2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/bb6c505d1492bf55534184c0a38826bda529e5e2",
"reference": "bb6c505d1492bf55534184c0a38826bda529e5e2",
"shasum": ""
},
"require": {
"php": ">=7.1.3"
},
"require-dev": {
"symfony/var-dumper": "^4.4.9|^5.0.9"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\VarExporter\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "A blend of var_export() + serialize() to turn any serializable data structure to plain PHP code",
"homepage": "https://symfony.com",
"keywords": [
"clone",
"construct",
"export",
"hydrate",
"instantiate",
"serialize"
],
"time": "2020-09-07T21:10:21+00:00"
},
{
"name": "symfony/web-link",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/web-link.git",
"reference": "b862a104ef3a233b6f12fdbf6b57113308af79ff"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/web-link/zipball/b862a104ef3a233b6f12fdbf6b57113308af79ff",
"reference": "b862a104ef3a233b6f12fdbf6b57113308af79ff",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"psr/link": "^1.0",
"symfony/polyfill-php72": "^1.5"
},
"conflict": {
"symfony/http-kernel": "<4.3"
},
"provide": {
"psr/link-implementation": "1.0"
},
"require-dev": {
"symfony/http-foundation": "^4.4|^5.0",
"symfony/http-kernel": "^4.3|^5.0"
},
"suggest": {
"symfony/http-kernel": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\WebLink\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Kévin Dunglas",
"email": "dunglas@gmail.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony WebLink Component",
"homepage": "https://symfony.com",
"keywords": [
"dns-prefetch",
"http",
"http2",
"link",
"performance",
"prefetch",
"preload",
"prerender",
"psr13",
"push"
],
"time": "2020-05-26T09:42:42+00:00"
},
{
"name": "symfony/web-profiler-bundle",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/web-profiler-bundle.git",
"reference": "f3b967b34b1db5d3285c415fbe5ce2b9299e6cd6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/f3b967b34b1db5d3285c415fbe5ce2b9299e6cd6",
"reference": "f3b967b34b1db5d3285c415fbe5ce2b9299e6cd6",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/config": "^4.2|^5.0",
"symfony/framework-bundle": "^4.4|^5.0",
"symfony/http-kernel": "^4.4",
"symfony/routing": "^4.3|^5.0",
"symfony/twig-bundle": "^4.2|^5.0",
"twig/twig": "^1.41|^2.10|^3.0"
},
"conflict": {
"symfony/form": "<4.3",
"symfony/messenger": "<4.2"
},
"require-dev": {
"symfony/browser-kit": "^4.3|^5.0",
"symfony/console": "^4.3|^5.0",
"symfony/css-selector": "^3.4|^4.0|^5.0",
"symfony/dependency-injection": "^3.4|^4.0|^5.0",
"symfony/stopwatch": "^3.4|^4.0|^5.0"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Bundle\\WebProfilerBundle\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony WebProfilerBundle",
"homepage": "https://symfony.com",
"time": "2020-09-06T17:41:24+00:00"
},
{
"name": "symfony/webpack-encore-bundle",
"version": "v1.7.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/webpack-encore-bundle.git",
"reference": "5c0f659eceae87271cce54bbdfb05ed8ec9007bd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/5c0f659eceae87271cce54bbdfb05ed8ec9007bd",
"reference": "5c0f659eceae87271cce54bbdfb05ed8ec9007bd",
"shasum": ""
},
"require": {
"php": "^7.1.3",
"symfony/asset": "^3.4 || ^4.0 || ^5.0",
"symfony/config": "^3.4 || ^4.0 || ^5.0",
"symfony/dependency-injection": "^3.4 || ^4.0 || ^5.0",
"symfony/http-kernel": "^3.4 || ^4.0 || ^5.0",
"symfony/service-contracts": "^1.0 || ^2.0"
},
"require-dev": {
"symfony/framework-bundle": "^3.4 || ^4.0 || ^5.0",
"symfony/phpunit-bridge": "^4.3.5 || ^5.0",
"symfony/twig-bundle": "^3.4 || ^4.0 || ^5.0",
"symfony/web-link": "^3.4 || ^4.0 || ^5.0"
},
"type": "symfony-bundle",
"extra": {
"thanks": {
"name": "symfony/webpack-encore",
"url": "https://github.com/symfony/webpack-encore"
}
},
"autoload": {
"psr-4": {
"Symfony\\WebpackEncoreBundle\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Integration with your Symfony app & Webpack Encore!",
"time": "2020-01-31T15:31:59+00:00"
},
{
"name": "symfony/yaml",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
"reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/polyfill-ctype": "~1.8"
},
"conflict": {
"symfony/console": "<3.4"
},
"require-dev": {
"symfony/console": "^3.4|^4.0|^5.0"
},
"suggest": {
"symfony/console": "For validating YAML files using the lint command"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Yaml\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
"time": "2020-09-27T03:36:23+00:00"
},
{
"name": "tetranz/select2entity-bundle",
"version": "v3.1.0",
"source": {
"type": "git",
"url": "https://github.com/tetranz/select2entity-bundle.git",
"reference": "66f515417c609f20f49ff27d3980ffcf1b8f347b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/tetranz/select2entity-bundle/zipball/66f515417c609f20f49ff27d3980ffcf1b8f347b",
"reference": "66f515417c609f20f49ff27d3980ffcf1b8f347b",
"shasum": ""
},
"require": {
"doctrine/orm": ">=2.4",
"php": ">=7.1.3",
"symfony/config": ">=4.0",
"symfony/dependency-injection": ">=4.0",
"symfony/form": ">=4.0",
"symfony/http-kernel": ">=4.0",
"symfony/property-access": ">=4.0",
"symfony/routing": ">=4.0",
"twig/twig": ">=2.9"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": []
},
"autoload": {
"psr-4": {
"Tetranz\\Select2EntityBundle\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ross Keatinge",
"email": "tetranz@gmail.com"
}
],
"description": "A Symfony bundle that integrates Select2 as a drop-in replacement for a standard entity field on a Symfony form.",
"keywords": [
"autocomplete",
"select2",
"symfony",
"typeahead"
],
"time": "2020-09-28T11:42:58+00:00"
},
{
"name": "twig/extra-bundle",
"version": "v3.0.5",
"source": {
"type": "git",
"url": "https://github.com/twigphp/twig-extra-bundle.git",
"reference": "a7c5799cf742ab0827f5d32df37528ee8bf5a233"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/a7c5799cf742ab0827f5d32df37528ee8bf5a233",
"reference": "a7c5799cf742ab0827f5d32df37528ee8bf5a233",
"shasum": ""
},
"require": {
"php": "^7.1.3|^8.0",
"symfony/framework-bundle": "^4.3|^5.0",
"symfony/twig-bundle": "^4.3|^5.0",
"twig/twig": "^2.4|^3.0"
},
"require-dev": {
"twig/cssinliner-extra": "^2.12|^3.0",
"twig/html-extra": "^2.12|^3.0",
"twig/inky-extra": "^2.12|^3.0",
"twig/intl-extra": "^2.12|^3.0",
"twig/markdown-extra": "^2.12|^3.0"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
}
},
"autoload": {
"psr-4": {
"Twig\\Extra\\TwigExtraBundle\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com",
"homepage": "http://fabien.potencier.org",
"role": "Lead Developer"
}
],
"description": "A Symfony bundle for extra Twig extensions",
"homepage": "https://twig.symfony.com",
"keywords": [
"bundle",
"extra",
"twig"
],
"time": "2020-05-21T09:56:39+00:00"
},
{
"name": "twig/twig",
"version": "v3.0.5",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "9b76b1535483cdf4edf01bb787b0217b62bd68a5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/9b76b1535483cdf4edf01bb787b0217b62bd68a5",
"reference": "9b76b1535483cdf4edf01bb787b0217b62bd68a5",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-mbstring": "^1.3"
},
"require-dev": {
"psr/container": "^1.0",
"symfony/phpunit-bridge": "^4.4.9|^5.0.9"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
}
},
"autoload": {
"psr-4": {
"Twig\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com",
"homepage": "http://fabien.potencier.org",
"role": "Lead Developer"
},
{
"name": "Twig Team",
"role": "Contributors"
},
{
"name": "Armin Ronacher",
"email": "armin.ronacher@active-4.com",
"role": "Project Founder"
}
],
"description": "Twig, the flexible, fast, and secure template language for PHP",
"homepage": "https://twig.symfony.com",
"keywords": [
"templating"
],
"time": "2020-08-05T15:13:19+00:00"
},
{
"name": "webmozart/assert",
"version": "1.9.1",
"source": {
"type": "git",
"url": "https://github.com/webmozart/assert.git",
"reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
"reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
"shasum": ""
},
"require": {
"php": "^5.3.3 || ^7.0 || ^8.0",
"symfony/polyfill-ctype": "^1.8"
},
"conflict": {
"phpstan/phpstan": "<0.12.20",
"vimeo/psalm": "<3.9.1"
},
"require-dev": {
"phpunit/phpunit": "^4.8.36 || ^7.5.13"
},
"type": "library",
"autoload": {
"psr-4": {
"Webmozart\\Assert\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Bernhard Schussek",
"email": "bschussek@gmail.com"
}
],
"description": "Assertions to validate method input/output with nice error messages.",
"keywords": [
"assert",
"check",
"validate"
],
"time": "2020-07-08T17:02:28+00:00"
},
{
"name": "willdurand/jsonp-callback-validator",
"version": "v1.1.0",
"source": {
"type": "git",
"url": "https://github.com/willdurand/JsonpCallbackValidator.git",
"reference": "1a7d388bb521959e612ef50c5c7b1691b097e909"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/willdurand/JsonpCallbackValidator/zipball/1a7d388bb521959e612ef50c5c7b1691b097e909",
"reference": "1a7d388bb521959e612ef50c5c7b1691b097e909",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"require-dev": {
"phpunit/phpunit": "~3.7"
},
"type": "library",
"autoload": {
"psr-0": {
"JsonpCallbackValidator": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "William Durand",
"email": "william.durand1@gmail.com",
"homepage": "http://www.willdurand.fr"
}
],
"description": "JSONP callback validator.",
"time": "2014-01-20T22:35:06+00:00"
},
{
"name": "willdurand/negotiation",
"version": "v2.3.1",
"source": {
"type": "git",
"url": "https://github.com/willdurand/Negotiation.git",
"reference": "03436ededa67c6e83b9b12defac15384cb399dc9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/willdurand/Negotiation/zipball/03436ededa67c6e83b9b12defac15384cb399dc9",
"reference": "03436ededa67c6e83b9b12defac15384cb399dc9",
"shasum": ""
},
"require": {
"php": ">=5.4.0"
},
"require-dev": {
"phpunit/phpunit": "~4.5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.3-dev"
}
},
"autoload": {
"psr-4": {
"Negotiation\\": "src/Negotiation"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "William Durand",
"email": "will+git@drnd.me"
}
],
"description": "Content Negotiation tools for PHP provided as a standalone library.",
"homepage": "http://williamdurand.fr/Negotiation/",
"keywords": [
"accept",
"content",
"format",
"header",
"negotiation"
],
"time": "2017-05-14T17:21:12+00:00"
},
{
"name": "zendframework/zend-code",
"version": "3.4.1",
"source": {
"type": "git",
"url": "https://github.com/zendframework/zend-code.git",
"reference": "268040548f92c2bfcba164421c1add2ba43abaaa"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/zendframework/zend-code/zipball/268040548f92c2bfcba164421c1add2ba43abaaa",
"reference": "268040548f92c2bfcba164421c1add2ba43abaaa",
"shasum": ""
},
"require": {
"php": "^7.1",
"zendframework/zend-eventmanager": "^2.6 || ^3.0"
},
"conflict": {
"phpspec/prophecy": "<1.9.0"
},
"require-dev": {
"doctrine/annotations": "^1.7",
"ext-phar": "*",
"phpunit/phpunit": "^7.5.16 || ^8.4",
"zendframework/zend-coding-standard": "^1.0",
"zendframework/zend-stdlib": "^2.7 || ^3.0"
},
"suggest": {
"doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features",
"zendframework/zend-stdlib": "Zend\\Stdlib component"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.4.x-dev",
"dev-develop": "3.5.x-dev",
"dev-dev-4.0": "4.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Zend\\Code\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"description": "Extensions to the PHP Reflection API, static code scanning, and code generation",
"keywords": [
"ZendFramework",
"code",
"zf"
],
"abandoned": "laminas/laminas-code",
"time": "2019-12-10T19:21:15+00:00"
},
{
"name": "zendframework/zend-eventmanager",
"version": "3.2.1",
"source": {
"type": "git",
"url": "https://github.com/zendframework/zend-eventmanager.git",
"reference": "a5e2583a211f73604691586b8406ff7296a946dd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/a5e2583a211f73604691586b8406ff7296a946dd",
"reference": "a5e2583a211f73604691586b8406ff7296a946dd",
"shasum": ""
},
"require": {
"php": "^5.6 || ^7.0"
},
"require-dev": {
"athletic/athletic": "^0.1",
"container-interop/container-interop": "^1.1.0",
"phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2",
"zendframework/zend-coding-standard": "~1.0.0",
"zendframework/zend-stdlib": "^2.7.3 || ^3.0"
},
"suggest": {
"container-interop/container-interop": "^1.1.0, to use the lazy listeners feature",
"zendframework/zend-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.2-dev",
"dev-develop": "3.3-dev"
}
},
"autoload": {
"psr-4": {
"Zend\\EventManager\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"description": "Trigger and listen to events within a PHP application",
"homepage": "https://github.com/zendframework/zend-eventmanager",
"keywords": [
"event",
"eventmanager",
"events",
"zf2"
],
"abandoned": "laminas/laminas-eventmanager",
"time": "2018-04-25T15:33:34+00:00"
},
{
"name": "zircote/swagger-php",
"version": "2.0.16",
"source": {
"type": "git",
"url": "https://github.com/zircote/swagger-php.git",
"reference": "a25c1bfe508e5f27d5f618648449593a79cbe406"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/zircote/swagger-php/zipball/a25c1bfe508e5f27d5f618648449593a79cbe406",
"reference": "a25c1bfe508e5f27d5f618648449593a79cbe406",
"shasum": ""
},
"require": {
"doctrine/annotations": "*",
"php": ">=5.6",
"symfony/finder": ">=2.2"
},
"require-dev": {
"phpunit/phpunit": ">=4.8.35 <=5.6",
"squizlabs/php_codesniffer": ">=2.7",
"zendframework/zend-form": "<2.8"
},
"bin": [
"bin/swagger"
],
"type": "library",
"autoload": {
"psr-4": {
"Swagger\\": "src"
},
"files": [
"src/functions.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "Robert Allen",
"email": "zircote@gmail.com",
"homepage": "http://www.zircote.com"
},
{
"name": "Bob Fanger",
"email": "bfanger@gmail.com",
"homepage": "http://bfanger.nl"
}
],
"description": "Swagger-PHP - Generate interactive documentation for your RESTful API using phpdoc annotations",
"homepage": "https://github.com/zircote/swagger-php/",
"keywords": [
"api",
"json",
"rest",
"service discovery"
],
"time": "2020-05-10T13:42:24+00:00"
}
],
"packages-dev": [
{
"name": "composer/pcre",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/composer/pcre.git",
"reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/pcre/zipball/67a32d7d6f9f560b726ab25a061b38ff3a80c560",
"reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560",
"shasum": ""
},
"require": {
"php": "^5.3.2 || ^7.0 || ^8.0"
},
"require-dev": {
"phpstan/phpstan": "^1.3",
"phpstan/phpstan-strict-rules": "^1.1",
"symfony/phpunit-bridge": "^4.2 || ^5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"Composer\\Pcre\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "http://seld.be"
}
],
"description": "PCRE wrapping library that offers type-safe preg_* replacements.",
"keywords": [
"PCRE",
"preg",
"regex",
"regular expression"
],
"support": {
"issues": "https://github.com/composer/pcre/issues",
"source": "https://github.com/composer/pcre/tree/1.0.1"
},
"funding": [
{
"url": "https://packagist.com",
"type": "custom"
},
{
"url": "https://github.com/composer",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
"type": "tidelift"
}
],
"time": "2022-01-21T20:24:37+00:00"
},
{
"name": "composer/semver",
"version": "3.4.4",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
"reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95",
"reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95",
"shasum": ""
},
"require": {
"php": "^5.3.2 || ^7.0 || ^8.0"
},
"require-dev": {
"phpstan/phpstan": "^1.11",
"symfony/phpunit-bridge": "^3 || ^7"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "3.x-dev"
}
},
"autoload": {
"psr-4": {
"Composer\\Semver\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nils Adermann",
"email": "naderman@naderman.de",
"homepage": "http://www.naderman.de"
},
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "http://seld.be"
},
{
"name": "Rob Bast",
"email": "rob.bast@gmail.com",
"homepage": "http://robbast.nl"
}
],
"description": "Semver library that offers utilities, version constraint parsing and validation.",
"keywords": [
"semantic",
"semver",
"validation",
"versioning"
],
"support": {
"irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/semver/issues",
"source": "https://github.com/composer/semver/tree/3.4.4"
},
"funding": [
{
"url": "https://packagist.com",
"type": "custom"
},
{
"url": "https://github.com/composer",
"type": "github"
}
],
"time": "2025-08-20T19:15:30+00:00"
},
{
"name": "composer/xdebug-handler",
"version": "2.0.5",
"source": {
"type": "git",
"url": "https://github.com/composer/xdebug-handler.git",
"reference": "9e36aeed4616366d2b690bdce11f71e9178c579a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/xdebug-handler/zipball/9e36aeed4616366d2b690bdce11f71e9178c579a",
"reference": "9e36aeed4616366d2b690bdce11f71e9178c579a",
"shasum": ""
},
"require": {
"composer/pcre": "^1",
"php": "^5.3.2 || ^7.0 || ^8.0",
"psr/log": "^1 || ^2 || ^3"
},
"require-dev": {
"phpstan/phpstan": "^1.0",
"phpstan/phpstan-strict-rules": "^1.1",
"symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Composer\\XdebugHandler\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "John Stevenson",
"email": "john-stevenson@blueyonder.co.uk"
}
],
"description": "Restarts a process without Xdebug.",
"keywords": [
"Xdebug",
"performance"
],
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/xdebug-handler/issues",
"source": "https://github.com/composer/xdebug-handler/tree/2.0.5"
},
"funding": [
{
"url": "https://packagist.com",
"type": "custom"
},
{
"url": "https://github.com/composer",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
"type": "tidelift"
}
],
"time": "2022-02-24T20:20:32+00:00"
},
{
"name": "friendsofphp/php-cs-fixer",
"version": "v2.19.3",
"source": {
"type": "git",
"url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git",
"reference": "75ac86f33fab4714ea5a39a396784d83ae3b5ed8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/75ac86f33fab4714ea5a39a396784d83ae3b5ed8",
"reference": "75ac86f33fab4714ea5a39a396784d83ae3b5ed8",
"shasum": ""
},
"require": {
"composer/semver": "^1.4 || ^2.0 || ^3.0",
"composer/xdebug-handler": "^1.2 || ^2.0",
"doctrine/annotations": "^1.2",
"ext-json": "*",
"ext-tokenizer": "*",
"php": "^5.6 || ^7.0 || ^8.0",
"php-cs-fixer/diff": "^1.3",
"symfony/console": "^3.4.43 || ^4.1.6 || ^5.0",
"symfony/event-dispatcher": "^3.0 || ^4.0 || ^5.0",
"symfony/filesystem": "^3.0 || ^4.0 || ^5.0",
"symfony/finder": "^3.0 || ^4.0 || ^5.0",
"symfony/options-resolver": "^3.0 || ^4.0 || ^5.0",
"symfony/polyfill-php70": "^1.0",
"symfony/polyfill-php72": "^1.4",
"symfony/process": "^3.0 || ^4.0 || ^5.0",
"symfony/stopwatch": "^3.0 || ^4.0 || ^5.0"
},
"require-dev": {
"justinrainbow/json-schema": "^5.0",
"keradus/cli-executor": "^1.4",
"mikey179/vfsstream": "^1.6",
"php-coveralls/php-coveralls": "^2.4.2",
"php-cs-fixer/accessible-object": "^1.0",
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2",
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1",
"phpspec/prophecy-phpunit": "^1.1 || ^2.0",
"phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.13 || ^9.5",
"phpunitgoodpractices/polyfill": "^1.5",
"phpunitgoodpractices/traits": "^1.9.1",
"sanmai/phpunit-legacy-adapter": "^6.4 || ^8.2.1",
"symfony/phpunit-bridge": "^5.2.1",
"symfony/yaml": "^3.0 || ^4.0 || ^5.0"
},
"suggest": {
"ext-dom": "For handling output formats in XML",
"ext-mbstring": "For handling non-UTF8 characters.",
"php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.",
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.",
"symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible."
},
"bin": [
"php-cs-fixer"
],
"type": "application",
"extra": {
"branch-alias": {
"dev-master": "2.19-dev"
}
},
"autoload": {
"psr-4": {
"PhpCsFixer\\": "src/"
},
"classmap": [
"tests/Test/AbstractFixerTestCase.php",
"tests/Test/AbstractIntegrationCaseFactory.php",
"tests/Test/AbstractIntegrationTestCase.php",
"tests/Test/Assert/AssertTokensTrait.php",
"tests/Test/IntegrationCase.php",
"tests/Test/IntegrationCaseFactory.php",
"tests/Test/IntegrationCaseFactoryInterface.php",
"tests/Test/InternalIntegrationCaseFactory.php",
"tests/Test/IsIdenticalConstraint.php",
"tests/Test/TokensWithObservedTransformers.php",
"tests/TestCase.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Dariusz Rumiński",
"email": "dariusz.ruminski@gmail.com"
}
],
"description": "A tool to automatically fix PHP code style",
"support": {
"issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues",
"source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v2.19.3"
},
"funding": [
{
"url": "https://github.com/keradus",
"type": "github"
}
],
"time": "2021-11-15T17:17:55+00:00"
},
{
"name": "php-cs-fixer/diff",
"version": "v1.3.1",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/diff.git",
"reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/dbd31aeb251639ac0b9e7e29405c1441907f5759",
"reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759",
"shasum": ""
},
"require": {
"php": "^5.6 || ^7.0 || ^8.0"
},
"require-dev": {
"phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0",
"symfony/process": "^3.3"
},
"type": "library",
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
},
{
"name": "Kore Nordmann",
"email": "mail@kore-nordmann.de"
},
{
"name": "SpacePossum"
}
],
"description": "sebastian/diff v2 backport support for PHP5.6",
"homepage": "https://github.com/PHP-CS-Fixer",
"keywords": [
"diff"
],
"support": {
"issues": "https://github.com/PHP-CS-Fixer/diff/issues",
"source": "https://github.com/PHP-CS-Fixer/diff/tree/v1.3.1"
},
"abandoned": true,
"time": "2020-10-14T08:39:05+00:00"
},
{
"name": "symfony/browser-kit",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/browser-kit.git",
"reference": "9a1786e5020783605a30cff2ceed9aca030e8d80"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/browser-kit/zipball/9a1786e5020783605a30cff2ceed9aca030e8d80",
"reference": "9a1786e5020783605a30cff2ceed9aca030e8d80",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/dom-crawler": "^3.4|^4.0|^5.0"
},
"require-dev": {
"symfony/css-selector": "^3.4|^4.0|^5.0",
"symfony/http-client": "^4.3|^5.0",
"symfony/mime": "^4.3|^5.0",
"symfony/process": "^3.4|^4.0|^5.0"
},
"suggest": {
"symfony/process": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\BrowserKit\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony BrowserKit Component",
"homepage": "https://symfony.com",
"time": "2020-10-02T08:38:15+00:00"
},
{
"name": "symfony/css-selector",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
"reference": "bf17dc9f6ce144e41f786c32435feea4d8e11dcc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/bf17dc9f6ce144e41f786c32435feea4d8e11dcc",
"reference": "bf17dc9f6ce144e41f786c32435feea4d8e11dcc",
"shasum": ""
},
"require": {
"php": ">=7.1.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\CssSelector\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Jean-François Simon",
"email": "jeanfrancois.simon@sensiolabs.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony CssSelector Component",
"homepage": "https://symfony.com",
"time": "2020-07-05T09:39:30+00:00"
},
{
"name": "symfony/debug-bundle",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug-bundle.git",
"reference": "12a020d14b4f6f3a5cfb46cd83836b78be036210"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/debug-bundle/zipball/12a020d14b4f6f3a5cfb46cd83836b78be036210",
"reference": "12a020d14b4f6f3a5cfb46cd83836b78be036210",
"shasum": ""
},
"require": {
"ext-xml": "*",
"php": ">=7.1.3",
"symfony/http-kernel": "^3.4|^4.0|^5.0",
"symfony/twig-bridge": "^3.4|^4.0|^5.0",
"symfony/var-dumper": "^4.1.1|^5.0"
},
"conflict": {
"symfony/config": "<4.2",
"symfony/dependency-injection": "<3.4"
},
"require-dev": {
"symfony/config": "^4.2|^5.0",
"symfony/dependency-injection": "^3.4|^4.0|^5.0",
"symfony/web-profiler-bundle": "^3.4|^4.0|^5.0"
},
"suggest": {
"symfony/config": "For service container configuration",
"symfony/dependency-injection": "For using as a service from the container"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Bundle\\DebugBundle\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony DebugBundle",
"homepage": "https://symfony.com",
"time": "2020-05-20T08:37:50+00:00"
},
{
"name": "symfony/debug-pack",
"version": "v1.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug-pack.git",
"reference": "7310a66f9f81c9f292ff9089f0b0062386cb83fb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/debug-pack/zipball/7310a66f9f81c9f292ff9089f0b0062386cb83fb",
"reference": "7310a66f9f81c9f292ff9089f0b0062386cb83fb",
"shasum": ""
},
"require": {
"php": "^7.0",
"symfony/debug-bundle": "*",
"symfony/monolog-bundle": "^3.0",
"symfony/profiler-pack": "*",
"symfony/var-dumper": "*"
},
"type": "symfony-pack",
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "A debug pack for Symfony projects",
"time": "2020-04-07T10:08:51+00:00"
},
{
"name": "symfony/dom-crawler",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/dom-crawler.git",
"reference": "bdcb7633a501770a0daefbf81d2e6b28c3864f2b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/bdcb7633a501770a0daefbf81d2e6b28c3864f2b",
"reference": "bdcb7633a501770a0daefbf81d2e6b28c3864f2b",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.0"
},
"conflict": {
"masterminds/html5": "<2.6"
},
"require-dev": {
"masterminds/html5": "^2.6",
"symfony/css-selector": "^3.4|^4.0|^5.0"
},
"suggest": {
"symfony/css-selector": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\DomCrawler\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony DomCrawler Component",
"homepage": "https://symfony.com",
"time": "2020-10-02T07:34:48+00:00"
},
{
"name": "symfony/phpunit-bridge",
"version": "v5.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/phpunit-bridge.git",
"reference": "150aeb91dd9dafe13ec8416abd62e435330ca12d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/150aeb91dd9dafe13ec8416abd62e435330ca12d",
"reference": "150aeb91dd9dafe13ec8416abd62e435330ca12d",
"shasum": ""
},
"require": {
"php": ">=5.5.9"
},
"conflict": {
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0|<6.4,>=6.0|9.1.2"
},
"require-dev": {
"symfony/deprecation-contracts": "^2.1"
},
"suggest": {
"symfony/error-handler": "For tracking deprecated interfaces usages at runtime with DebugClassLoader"
},
"bin": [
"bin/simple-phpunit"
],
"type": "symfony-bridge",
"extra": {
"branch-alias": {
"dev-master": "5.1-dev"
},
"thanks": {
"name": "phpunit/phpunit",
"url": "https://github.com/sebastianbergmann/phpunit"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Bridge\\PhpUnit\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony PHPUnit Bridge",
"homepage": "https://symfony.com",
"time": "2020-10-02T12:57:56+00:00"
},
{
"name": "symfony/test-pack",
"version": "v1.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/test-pack.git",
"reference": "ff87e800a67d06c423389f77b8209bc9dc469def"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/test-pack/zipball/ff87e800a67d06c423389f77b8209bc9dc469def",
"reference": "ff87e800a67d06c423389f77b8209bc9dc469def",
"shasum": ""
},
"require": {
"php": "^7.0",
"symfony/browser-kit": "*",
"symfony/css-selector": "*",
"symfony/phpunit-bridge": "*"
},
"type": "symfony-pack",
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "A pack for functional and end-to-end testing within a Symfony app",
"time": "2019-06-21T06:27:32+00:00"
}
],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": {},
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"php": "^7.1.3",
"ext-ctype": "*",
"ext-iconv": "*"
},
"platform-dev": {},
"plugin-api-version": "2.6.0"
}

View File

@@ -1,11 +0,0 @@
# Read the documentation: https://symfony.com/doc/master/bundles/FOSRestBundle/index.html
fos_rest:
param_fetcher_listener: true
body_listener: true
format_listener:
enabled: true
rules:
- { path: '/rest', priorities: ['json', 'xml'], fallback_format: 'html' }
- { path: '/', fallback_format: 'html' }

View File

@@ -1,9 +0,0 @@
nelmio_api_doc:
documentation:
info:
title: '%appName%'
description:
version: 1.0.0
areas: # to filter documented areas
path_patterns:
- /rest # Accepts routes under /rest except /rest/doc

View File

@@ -1,15 +0,0 @@
twig:
default_path: '%kernel.project_dir%/templates'
debug: '%kernel.debug%'
strict_variables: '%kernel.debug%'
exception_controller: null
form_themes:
- 'Form/fields.html.twig'
- '@TetranzSelect2Entity/Form/fields.html.twig'
globals:
appAlias: '%appAlias%'
appAuth: '%appAuth%'
appName: '%appName%'
appCron: '%appCron%'
doliActive: '%doliActive%'
doliUri: '%doliUri%'

View File

@@ -1,520 +0,0 @@
#== Home ========================================================================================================
app_home:
path: /
defaults: { _controller: App\Controller\HomeController:home }
app_home_selectmonth:
path: /customer/selectmonth
defaults: { _controller: App\Controller\HomeController:selectmonth }
app_home_selectuser:
path: /user/selectuser
defaults: { _controller: App\Controller\HomeController:selectuser }
app_home_selectproject:
path: /user/selectproject
defaults: { _controller: App\Controller\HomeController:selectproject }
app_home_selectservice:
path: /user/selectservice
defaults: { _controller: App\Controller\HomeController:selectservice }
app_home_selectdomaine:
path: /user/selectdomaine
defaults: { _controller: App\Controller\HomeController:selectdomaine }
#== Security ====================================================================================================
app_login:
path: /login
defaults: { _controller: App\Controller\SecurityController:login }
app_logincheck:
path: /logincheck
defaults: { _controller: App\Controller\SecurityController:logincheck }
app_logout:
path: /logout
defaults: { _controller: App\Controller\SecurityController:logout }
app_logincas:
path: /logincas
defaults: { _controller: App\Controller\SecurityController:logincas }
app_logoutcas:
path: /logoutcas
defaults: { _controller: App\Controller\SecurityController:logoutcas }
#== Crop =========================================================================================================
app_crop01:
path: /user/crop01
defaults: { _controller: App\Controller\CropController:crop01 }
app_crop02:
path: /user/crop02
defaults: { _controller: App\Controller\CropController:crop02 }
oneup_uploader:
resource: .
type: uploader
#== Cron =================================================================================================================
app_cron:
path: /admin/cron
defaults: { _controller: App\Controller\CronController:list }
app_cron_ajax_list:
path: /admin/cron/ajax/list
defaults: { _controller: App\Controller\CronController:ajaxlist }
app_cron_update:
path: /admin/cron/update/{id}
defaults: { _controller: App\Controller\CronController:update }
app_cron_exec:
path: /admin/cron/exec/{id}
defaults: { _controller: App\Controller\CronController:exec }
app_cron_log:
path: /admin/cron/log
defaults: { _controller: App\Controller\CronController:log }
app_cron_getlog:
path: /admin/cron/getlog/{id}
defaults: { _controller: App\Controller\CronController:getlog }
#== User ========================================================================================================
app_user:
path: /admin/user
defaults: { _controller: App\Controller\UserController:list }
app_user_submit:
path: /admin/user/submit
defaults: { _controller: App\Controller\UserController:submit }
app_user_update:
path: /admin/user/update/{id}
defaults: { _controller: App\Controller\UserController:update }
app_user_delete:
path: /admin/user/delete/{id}
defaults: { _controller: App\Controller\UserController:delete }
app_user_profil:
path: /user/profil
defaults: { _controller: App\Controller\UserController:profil }
#== Service =====================================================================================================
app_service:
path: /admin/service
defaults: { _controller: App\Controller\ServiceController:list }
app_service_submit:
path: /admin/service/submit
defaults: { _controller: App\Controller\ServiceController:submit }
app_service_update:
path: /admin/service/update/{id}
defaults: { _controller: App\Controller\ServiceController:update }
app_service_delete:
path: /admin/service/delete/{id}
defaults: { _controller: App\Controller\ServiceController:delete }
#== Domaine =====================================================================================================
app_domaine:
path: /admin/domaine
defaults: { _controller: App\Controller\DomaineController:list }
app_domaine_submit:
path: /admin/domaine/submit
defaults: { _controller: App\Controller\DomaineController:submit }
app_domaine_update:
path: /admin/domaine/update/{id}
defaults: { _controller: App\Controller\DomaineController:update }
app_domaine_delete:
path: /admin/domaine/delete/{id}
defaults: { _controller: App\Controller\DomaineController:delete }
#== Nature =====================================================================================================
app_nature:
path: /admin/nature
defaults: { _controller: App\Controller\NatureController:list }
app_nature_submit:
path: /admin/nature/submit
defaults: { _controller: App\Controller\NatureController:submit }
app_nature_update:
path: /admin/nature/update/{id}
defaults: { _controller: App\Controller\NatureController:update }
app_nature_delete:
path: /admin/nature/delete/{id}
defaults: { _controller: App\Controller\NatureController:delete }
#== Customer ===================================================================================================
app_customer:
path: /master/customer
defaults: { _controller: App\Controller\CustomerController:list }
app_customer_submit:
path: /master/customer/submit
defaults: { _controller: App\Controller\CustomerController:submit }
app_customer_update:
path: /master/customer/update/{id}
defaults: { _controller: App\Controller\CustomerController:update }
app_customer_delete:
path: /master/customer/delete/{id}
defaults: { _controller: App\Controller\CustomerController:delete }
#== Job =====================================================================================================
app_job:
path: /admin/job
defaults: { _controller: App\Controller\JobController:list }
app_job_submit:
path: /admin/job/submit
defaults: { _controller: App\Controller\JobController:submit }
app_job_update:
path: /admin/job/update/{id}
defaults: { _controller: App\Controller\JobController:update }
app_job_delete:
path: /admin/job/delete/{id}
defaults: { _controller: App\Controller\JobController:delete }
app_job_select:
path: /user/job/select
defaults: { _controller: App\Controller\JobController:select }
#== Project ====================================================================================================
app_project:
path: /master/project
defaults: { _controller: App\Controller\ProjectController:list }
app_project_submit:
path: /master/project/submit
defaults: { _controller: App\Controller\ProjectController:submit }
app_project_update:
path: /master/project/update/{id}
defaults: { _controller: App\Controller\ProjectController:update }
app_project_delete:
path: /master/project/delete/{id}
defaults: { _controller: App\Controller\ProjectController:delete }
app_project_activeproject:
path: /master/project/activeproject
defaults: { _controller: App\Controller\ProjectController:activeproject }
app_project_viewservice:
path: /master/project/viewservice
defaults: { _controller: App\Controller\ProjectController:viewservice }
app_project_select:
path: /master/project/select
defaults: { _controller: App\Controller\ProjectController:select }
app_project_users_add:
path: /master/project/users/add
defaults: { _controller: App\Controller\ProjectController:usersadd }
app_project_users_del:
path: /master/project/users/del
defaults: { _controller: App\Controller\ProjectController:usersdel }
app_project_users:
path: /master/project/users/{id}
defaults: { _controller: App\Controller\ProjectController:users }
#== Offer ====================================================================================================
app_offer:
path: /master/offer
defaults: { _controller: App\Controller\OfferController:list }
app_offer_submit:
path: /master/offer/submit
defaults: { _controller: App\Controller\OfferController:submit }
app_offer_update:
path: /master/offer/update/{id}
defaults: { _controller: App\Controller\OfferController:update }
app_offer_delete:
path: /master/offer/delete/{id}
defaults: { _controller: App\Controller\OfferController:delete }
app_offer_activeproject:
path: /master/offer/activeproject
defaults: { _controller: App\Controller\OfferController:activeproject }
app_offer_activeoffer:
path: /master/offer/activeoffer
defaults: { _controller: App\Controller\OfferController:activeoffer }
app_offer_viewservice:
path: /master/offer/viewservice
defaults: { _controller: App\Controller\OfferController:viewservice }
app_offer_dolibarr:
path: /master/offer/dolibarr
defaults: { _controller: App\Controller\OfferController:dolibarr }
app_offer_getdolibarr:
path: /master/offer/getdolibarr
defaults: { _controller: App\Controller\OfferController:getdolibarr }
#== Task ====================================================================================================
app_task:
path: /master/task
defaults: { _controller: App\Controller\TaskController:list }
app_task_submit:
path: /master/task/submit
defaults: { _controller: App\Controller\TaskController:submit }
app_task_update:
path: /master/task/update/{id}
defaults: { _controller: App\Controller\TaskController:update }
app_task_delete:
path: /master/task/delete/{id}
defaults: { _controller: App\Controller\TaskController:delete }
app_task_activeproject:
path: /master/task/activeproject
defaults: { _controller: App\Controller\TaskController:activeproject }
app_task_activetask:
path: /master/task/activetask
defaults: { _controller: App\Controller\TaskController:activetask }
app_task_viewservice:
path: /master/task/viewservice
defaults: { _controller: App\Controller\TaskController:viewservice }
#== Event ====================================================================================================
app_event:
path: /user/event
defaults: { _controller: App\Controller\EventController:list }
app_event_load:
path: /user/event/load/{iduser}
defaults: { _controller: App\Controller\EventController:load }
app_event_submit:
path: /user/event/submit
defaults: { _controller: App\Controller\EventController:submit }
app_event_update:
path: /user/event/update
defaults: { _controller: App\Controller\EventController:update }
app_event_delete:
path: /user/event/delete
defaults: { _controller: App\Controller\EventController:delete }
#== Report ====================================================================================================
app_synthese:
path: /user/synthese
defaults: { _controller: App\Controller\ReportController:synthese }
app_planning:
path: /user/planning
defaults: { _controller: App\Controller\ReportController:planning }
app_report:
path: /user/report
defaults: { _controller: App\Controller\ReportController:report }
app_holiday:
path: /user/holiday
defaults: { _controller: App\Controller\ReportController:holiday }
app_holiday_activeholiday:
path: /user/holiday/activeholiday
defaults: { _controller: App\Controller\ReportController:activeholiday }
#== Breakday =================================================================================================
app_breakday:
path: /admin/breakday
defaults: { _controller: App\Controller\BreakdayController:list }
app_breakday_submit:
path: /admin/breakday/submit
defaults: { _controller: App\Controller\BreakdayController:submit }
app_breakday_update:
path: /admin/breakday/update/{id}
defaults: { _controller: App\Controller\BreakdayController:update }
app_breakday_delete:
path: /admin/breakday/delete/{id}
defaults: { _controller: App\Controller\BreakdayController:delete }
#== Validation ====================================================================================================
app_validation:
path: /validator/validation
defaults: { _controller: App\Controller\ValidationController:validation }
app_validation_validate:
path: /validator/validate
defaults: { _controller: App\Controller\ValidationController:validate }
app_validation_devalidate:
path: /validator/devalidate
defaults: { _controller: App\Controller\ValidationController:devalidate }
#== Validationholiday ====================================================================================================
app_validationholiday:
path: /validator/validationholiday
defaults: { _controller: App\Controller\ValidationController:validationholiday }
app_validationholiday_validate:
path: /validator/validateholiday
defaults: { _controller: App\Controller\ValidationController:validateholiday }
app_validationholiday_devalidate:
path: /validator/devalidateholiday
defaults: { _controller: App\Controller\ValidationController:devalidateholiday }
app_validationholiday_activeholiday:
path: /validator/validateholiday/activeholiday
defaults: { _controller: App\Controller\ValidationController:activeholiday }
#== Validationtimer ====================================================================================================
app_validationtimer:
path: /validator/validationtimer
defaults: { _controller: App\Controller\ValidationController:validationtimer }
app_validationtimer_validate:
path: /validator/validatetimer
defaults: { _controller: App\Controller\ValidationController:validatetimer }
app_validationtimer_devalidate:
path: /validator/devalidatetimer
defaults: { _controller: App\Controller\ValidationController:devalidatetimer }
app_validationtimer_activetimer:
path: /validator/validateholiday/activetimer
defaults: { _controller: App\Controller\ValidationController:activetimer }
#== Timer ====================================================================================================
app_timer:
path: /timer
defaults: { _controller: App\Controller\TimerController:list }
app_timer_view:
path: /timer/event
defaults: { _controller: App\Controller\TimerController:view }
app_timer_load:
path: /timer/event/load
defaults: { _controller: App\Controller\TimerController:load }
app_timer_submit:
path: /timer/submit
defaults: { _controller: App\Controller\TimerController:submit }
app_timer_create:
path: /timer/create
defaults: { _controller: App\Controller\TimerController:create }
app_timer_update:
path: /timer/update/{id}
defaults: { _controller: App\Controller\TimerController:update }
app_timer_delete:
path: /timer/delete/{id}
defaults: { _controller: App\Controller\TimerController:delete }
#== Year =====================================================================================================
app_year:
path: /admin/year
defaults: { _controller: App\Controller\YearController:list }
app_year_submit:
path: /admin/year/submit
defaults: { _controller: App\Controller\YearController:submit }
app_year_update:
path: /admin/year/update/{id}
defaults: { _controller: App\Controller\YearController:update }
app_year_delete:
path: /admin/year/delete/{id}
defaults: { _controller: App\Controller\YearController:delete }
#== Budget =====================================================================================================
app_budget_last:
path: /master/budget
defaults: { _controller: App\Controller\BudgetController:list }
app_budget:
path: /master/budget/{id}
defaults: { _controller: App\Controller\BudgetController:list }
app_budget_update:
path: /master/budget/update/{type}/{id}/{year}
defaults: { _controller: App\Controller\BudgetController:update }
#== Customer ======================================================================================================
app_customer_home:
path: /customer
defaults: { _controller: App\Controller\HomeController:customer }
app_customer_report:
path: /customer/report/{key}
defaults: { _controller: App\Controller\ReportController:report, access: 'customer' }
app_customer_planning:
path: /customer/planning/{key}
defaults: { _controller: App\Controller\ReportController:planning, access: 'customer' }
#== Export ======================================================================================================
app_export_view:
path: /export
defaults: { _controller: App\Controller\ExportController:view }
app_export_penalty_additional:
path: /export/export_penalty_additional
defaults: { _controller: App\Controller\ExportController:export_penalty_additional }
export_project_weekly:
path: /export/export_project_weekly
defaults: { _controller: App\Controller\ExportController:export_project_weekly }
export_full_worked_days:
path: /export/export_full_worked_days
defaults: { _controller: App\Controller\ExportController:export_full_worked_days }
export_offers:
path: /export/export_offers
defaults: { _controller: App\Controller\ExportController:export_offers }
export_month_charged_days:
path: /export/export_month_charged_days
defaults: { _controller: App\Controller\ExportController:export_month_charged_days }
#== Export ======================================================================================================
app_stat_view:
path: /user/stat
defaults: { _controller: App\Controller\StatController:view }
#== API ===========================================================================================================
app_api:
path: /api/{key}
defaults: { _controller: App\Controller\ApiController:api }

View File

@@ -1,4 +0,0 @@
app_swagger_ui:
path: /rest
methods: GET
defaults: { _controller: nelmio_api_doc.controller.swagger_ui }

View File

@@ -1,86 +0,0 @@
# This file is the entry point to configure your own services.
# Files in the packages/ subdirectory configure your dependencies.
# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:
appAlias: '%env(resolve:APP_ALIAS)%'
appAuth: '%env(resolve:APP_AUTH)%'
appSecret: '%env(resolve:APP_SECRET)%'
appName: '%env(resolve:APP_NAME)%'
appEnv: '%env(resolve:APP_ENV)%'
appCron: '%env(resolve:APP_CRON)%'
appMailmethod: '%env(resolve:MAILER_METHOD)%'
appMailnoreply: '%env(resolve:MAILER_NOREPLY)%'
appMailnotif: '%env(resolve:MAILER_DEFAULT_NOTIF)%'
casHost: '%env(resolve:CAS_HOST)%'
casPort: '%env(resolve:CAS_PORT)%'
casPath: '%env(resolve:CAS_PATH)%'
casUsername: '%env(resolve:CAS_USERNAME)%'
casEmail: '%env(resolve:CAS_EMAIL)%'
casLastname: '%env(resolve:CAS_LASTNAME)%'
casFirstname: '%env(resolve:CAS_FIRSTNAME)%'
officeHourStart: '%env(resolve:OFFICE_HOUR_START)%'
officeHourEnd: '%env(resolve:OFFICE_HOUR_END)%'
doliActive: '%env(resolve:DOLIBARR_ACTIVE)%'
doliApiKey: '%env(resolve:DOLIBARR_API_KEY)%'
doliUri: '%env(resolve:DOLIBARR_URI)%'
databaseName: '%env(resolve:DATABASE_NAME)%'
databaseUser: '%env(resolve:DATABASE_USER)%'
databasePassword: '%env(resolve:DATABASE_PASSWORD)%'
databaseHost: '%env(resolve:DATABASE_HOST)%'
services:
# default configuration for services in *this* file
_defaults:
autowire: true # Automatically injects dependencies in your services.
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
# makes classes in src/ available to be used as services
# this creates a service per class whose id is the fully-qualified class name
App\:
resource: '../src/*'
exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'
# controllers are imported separately to make sure services can be injected
# as action arguments even if you don't extend any base controller class
App\Controller\:
resource: '../src/Controller'
tags: ['controller.service_arguments']
# add more service definitions when explicit configuration is needed
# please note that last definitions always *replace* previous ones
app.password.encoder:
public: true
class: App\Service\passwordEncoder
app.ics.service:
public: true
class: App\Service\icsService
app.upload.listener:
public: true
class: App\Service\uploadListener
arguments: ["@doctrine.orm.entity_manager","@security.token_storage","@session","@service_container"]
tags:
- { name: kernel.event_listener, event: oneup_uploader.post_persist, method: onUpload }
app.session.listener:
public: true
class: App\Service\sessionListener
arguments: ['@service_container','@doctrine.orm.entity_manager',"@security.token_storage"]
tags:
- { name: kernel.event_listener, event: kernel.request, method: onDomainParse }
app.sendmail.transport:
class: Swift_SendmailTransport
public: true
arguments: ['/usr/sbin/sendmail -t']
app.mail.service:
public: true
class: App\Service\mailService
arguments: ["@mailer", "@twig"]
App\Controller\RestController:
public: true

View File

@@ -0,0 +1,5 @@
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
CREATE DATABASE schedule DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

1
debian/compat vendored Normal file
View File

@@ -0,0 +1 @@
7

24
debian/control vendored Normal file
View File

@@ -0,0 +1,24 @@
Source: eole-schedule
Section: web
Priority: optional
Maintainer: Cadoles <contact@cadoles.com>
Build-Depends: debhelper (>= 7.0.50)
Standards-Version: 3.8.4
Homepage: https://forge.cadoles.com/Cadoles/schedule
Vcs-Git: https://forge.cadoles.com/Cadoles/schedule
Vcs-Browser: https://forge.cadoles.com/Cadoles/schedule
Package: schedule-sso
Architecture: all
Depends: ${misc:Depends}, eole-sso
Description: Filtre SSO pour schedule "EOLE".
Package: eole-schedule
Architecture: all
Depends: ${misc:Depends}, eole-envole-dependances, schedule-sso
Description: Eolisation de l'application schedule.
Package: schedule-apps
Architecture: all
Depends: ${misc:Depends}, envole-dependances-apps
Description: Sources pour schedule "EOLE".

44
debian/copyright vendored Normal file
View File

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

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

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

3
debian/gbp.conf vendored Normal file
View File

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

8
debian/rules vendored Executable file
View File

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

1
debian/schedule-apps.install vendored Normal file
View File

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

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

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

1
debian/source/format vendored Normal file
View File

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

103
dicos/25_schedule.xml Normal file
View File

@@ -0,0 +1,103 @@
<?xml version="1.0" encoding="utf-8"?>
<creole>
<files>
<file filelist='schedule' name='/etc/eole/eole-db.d/schedule-db.yml' rm='True' mkdir='True'/>
</files>
<containers>
<container name='web'>
<!--
<package>schedule-apps</package>
-->
<!-- service de configuration apache -->
<service method="apache" servicelist="schedule">schedule</service>
<!-- template -->
<file filelist='schedule' name='/etc/apache2/sites-available/schedule' source='schedule-apache.conf' />
<file filelist='schedule' name='/var/www/html/schedule/.env.local' source='schedule-env.local' rm='True'/>
<file filelist='schedule' name='/var/www/html/schedule/scripts/proxy.sh' source='schedule-proxy.sh' rm='True'/>
</container>
</containers>
<variables>
<family name='applications web'>
<variable name='activer_schedule' type='oui/non' description='Activer schedule'>
<value>oui</value>
</variable>
</family>
<family name='schedule' mode='expert'>
<variable type='string' name='schedule_db_mode' description='Serveur de bases de données à utiliser'/>
<variable type='string' name='schedule_dbserver' description='Adresse du serveur de base de données'/>
<variable type='number' name='schedule_dbport' description="Port d'écoute du serveur de base de données"/>
<variable type='string' name='schedule_allow_hosts' description="Hôtes authorisés à utiliser la base de données" multi='True'/>
<variable type='string' name='schedule_dbuser' description='Utilisateur du serveur de base de données'/>
<variable type='string' name='schedule_dbpass' description='Fichier de mot de passe du serveur'/>
<variable type='string' name='schedule_email_url' description='URL de connexion au serveur smtp'/>
<variable type='string' name='schedule_email_global_notif' description='Email pour envoie de notifications'/>
<variable type='string' name="schedule_office_hour_start" description="Heure de début d'une journée">
<value>09:00</value>
</variable>
<variable type='string' name="schedule_office_hour_end" description="Heure de fin d'une journée">
<value>17:30</value>
</variable>
<variable type='oui/non' name="schedule_dolibarr_api" description='Activer la récupération des commandes depuis Dolibarr'>
<value>non</value>
</variable>
<variable type='string' name='schedule_dolibarr_apikey' description='Api Key pour Dolibarr'/>
<variable type='string' name='schedule_dolibarr_uri' description='Uri du serveur Dolibarr'/>
<variable type='oui/non' name="schedule_sentry" description='Activer Sentry'>
<value>non</value>
</variable>
<variable type='string' name='schedule_sentry_dsn' description='DSN de Sentry'/>
</family>
</variables>
<constraints>
<condition name='hidden_if_in' source='activer_apache'>
<param>non</param>
<target type='filelist'>schedule</target>
<target type='servicelist'>schedule</target>
</condition>
<condition name='hidden_if_in' source='activer_schedule'>
<param>non</param>
<target type='filelist'>schedule</target>
<target type='servicelist'>schedule</target>
</condition>
<check name='valid_enum' target='schedule_db_mode'>
<param>['default', 'externe', 'local']</param>
</check>
<condition name='disabled_if_in' source='schedule_db_mode'>
<param>local</param>
<target type='variable'>schedule_dbserver</target>
<target type='variable'>schedule_dbuser</target>
<target type='variable'>schedule_dbport</target>
<target type='variable'>schedule_dbpass</target>
</condition>
<condition name='disabled_if_in' source='schedule_db_mode'>
<param>default</param>
<target type='variable'>schedule_dbserver</target>
<target type='variable'>schedule_dbuser</target>
<target type='variable'>schedule_dbport</target>
<target type='variable'>schedule_dbpass</target>
<target type='variable'>schedule_allow_hosts</target>
</condition>
<condition name='disabled_if_in' source='schedule_dolibarr_api'>
<param>non</param>
<target type='variable'>schedule_dolibarr_apikey</target>
<target type='variable'>schedule_dolibarr_uri</target>
</condition>
<condition name='disabled_if_in' source='schedule_sentry'>
<param>non</param>
<target type='variable'>schedule_sentry_dsn</target>
</condition>
</constraints>
<help>
<variable name='activer_schedule'>Outils de gestion de Planning</variable>
</help>
</creole>

View File

@@ -1,41 +0,0 @@
services:
mariadb:
image: mariadb
container_name: schedule-mariadb
restart: unless-stopped
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: changeme
MYSQL_DATABASE: schedule
MYSQL_USER: user
MYSQL_PASSWORD: changeme
volumes:
- mariadb-data:/var/lib/mysql
adminer:
image: adminer
container_name: schedule-adminer
restart: unless-stopped
ports:
- 6081:8080
schedule:
build:
context: .
dockerfile: ./misc/docker/Dockerfile
container_name: schedule
image: reg.cadoles.com/envole/schedule
restart: unless-stopped
volumes:
- ./src:/app/src:delegated
- ./templates:/app/templates:delegated
- ./config:/app/config:delegated
- ./public/uploads:/app/public/uploads:delegated
- ./uploads:/app/uploads:delegated
- ./misc:/app/misc:delegated
ports:
- "8000:80"
volumes:
mariadb-data:

231
eole.mk Normal file
View File

@@ -0,0 +1,231 @@
#
# NE PAS EDITER CE FICHIER
#
# Utiliser <appli>.mk à inclure à la fin de Makefile
#################
# Sanity checks #
#################
ifeq (, $(DESTDIR))
$(warning $$(DESTDIR) is empty, installation will be done in /)
endif
ifeq (, $(filter-out XXX-XXX, $(strip $(SOURCE))))
$(error $$(SOURCE) variable has incorrect value '$(SOURCE)')
endif
ifeq (, $(filter-out 2.X, $(strip $(EOLE_VERSION))))
$(error $$(EOLE_VERSION) variable has incorrect value '$(EOLE_VERSION)')
endif
ifeq (, $(filter-out 2.X.Y, $(strip $(EOLE_RELEASE))))
$(error $$(EOLE_RELEASE) variable has incorrect value '$(EOLE_RELEASE)')
endif
#########################
# Variables definitions #
#########################
INSTALL := install
INSTALL_DATA := install -m 644
INSTALL_PROGRAM := install -m 755
INSTALL_DIRECTORY := install -m 755 -d
INSTALL_RECURSIVE := cp -dr --no-preserve=ownership
# Standard path
bin_PROG_DIR := $(DESTDIR)/usr/bin
sbin_PROG_DIR := $(DESTDIR)/usr/sbin
man8_DATA_DIR := $(DESTDIR)/usr/share/man/fr.UTF-8/man8
# Base
eole_DIR := $(DESTDIR)/usr/share/eole
ifeq ($(strip $(EOLE_VERSION)), 2.3)
diagnose_PROG_DIR := $(eole_DIR)/diagnose/module
else
diagnose_PROG_DIR := $(eole_DIR)/diagnose/
endif
# Creole
creole_DIR := $(eole_DIR)/creole
dicos_DATA_DIR := $(creole_DIR)/dicos
tmpl_DATA_DIR := $(creole_DIR)/distrib
preservice_PROG_DIR := $(eole_DIR)/preservice
pretemplate_PROG_DIR := $(eole_DIR)/pretemplate
posttemplate_PROG_DIR := $(eole_DIR)/posttemplate
postservice_PROG_DIR := $(eole_DIR)/postservice
ifeq ($(strip $(EOLE_VERSION)), 2.3)
firewall_DATA_DIR := $(eole_DIR)/firewall
endif
bacula_restore_DATA_DIR := $(eole_DIR)/bacula/restore
bareos_restore_DATA_DIR := $(eole_DIR)/bareos/restore
bacula_fichier_DATA_DIR := $(DESTDIR)/etc/bacula/baculafichiers.d
bareos_fichier_DATA_DIR := $(DESTDIR)/etc/bareos/bareosfichiers.d
ifeq ($(strip $(EOLE_VERSION)), 2.3)
schedule_pre_PROG_DIR := $(eole_DIR)/schedule/pre
schedule_post_PROG_DIR := $(eole_DIR)/schedule/post
else
schedule_scripts_PROG_DIR := $(eole_DIR)/schedule/scripts
endif
extra_REC_DIR := $(creole_DIR)/extra
# Zéphir
zephir_DATA_DIR := $(DESTDIR)/usr/share/zephir
zephir_configs_DATA_DIR := $(zephir_DATA_DIR)/monitor/configs
zephir_srv_DATA_DIR := $(zephir_configs_DATA_DIR)/services
zephir_scripts_PROG_DIR := $(zephir_DATA_DIR)/scripts
# SSO
sso_DATA_DIR := $(DESTDIR)/usr/share/sso
sso_filtres_DATA_DIR := $(sso_DATA_DIR)/app_filters
sso_user-info_DATA_DIR := $(sso_DATA_DIR)/user_infos
# EAD
ead_DATA_DIR := $(DESTDIR)/usr/share/ead2/backend/config
ead_actions_DATA_DIR := $(ead_DATA_DIR)/actions
ead_perms_DATA_DIR := $(ead_DATA_DIR)/perms
ead_roles_DATA_DIR := $(ead_DATA_DIR)/roles
# Program libraries goes under /usr/lib/<PROGRAM>/
lib_$(SOURCE)_DATA_DIR := $(DESTDIR)/usr/lib/$(SOURCE)
# Scripts Eole
scripts_PROG_DIR := $(eole_DIR)/sbin
lib_eole_DATA_DIR := $(DESTDIR)/usr/lib/eole
# LDAP
ldap_passwords_DATA_DIR := $(eole_DIR)/annuaire/password_files
# LXC
lxc_DATA_DIR := $(eole_DIR)/lxc
lxc_fstab_DATA_DIR := $(lxc_DATA_DIR)/fstab
lxc_hosts_DATA_DIR := $(lxc_DATA_DIR)/hosts
# SQL
sql_DATA_DIR := $(eole_DIR)/mysql/$(SOURCE)
sql_gen_DATA_DIR := $(sql_DATA_DIR)/gen
sql_updates_DATA_DIR := $(sql_DATA_DIR)/updates
sql_conf_gen_DATA_DIR := $(eole_DIR)/applications/gen
sql_conf_passwords_DATA_DIR := $(eole_DIR)/applications/passwords
sql_conf_updates_DATA_DIR := $(eole_DIR)/applications/updates/$(SOURCE)
# EoleDB sql directory
db_DIR := $(eole_DIR)/db
db_gen_DATA_DIR := $(eole_DIR)/db/$(SOURCE)/gen
db_updates_DATA_DIR := $(eole_DIR)/db/$(SOURCE)/updates
# Certifs
certs_DATA_DIR := $(eole_DIR)/certs
# Logrotate
logrotate_DATA_DIR := $(DESTDIR)/etc/logrotate.d
# Cron
cron_PROG_DIR := $(DESTDIR)/etc/cron.daily
# Python modules
ifneq ($(DESTDIR),)
PYTHON_OPTS := --root $(DESTDIR)
endif
# Translation
TRANSLATION_SRC := translation
TRANSLATION_DEST := $(DESTDIR)/usr/share/locale
PO_FILES = $(wildcard $(TRANSLATION_SRC)/*/*.po)
MO_FOLDERS = $(addprefix $(TRANSLATION_DEST), $(addsuffix LC_MESSAGES,$(subst $(TRANSLATION_SRC),,$(dir $(PO_FILES)))))
#############################################
# Common directories and files installation #
#############################################
all:
$(MO_FOLDERS):
$(INSTALL_DIRECTORY) $@
$(PO_FILES): $(MO_FOLDERS)
msgfmt -o $(TRANSLATION_DEST)$(subst $(TRANSLATION_SRC),,$(addsuffix LC_MESSAGES,$(dir $@)))/$(notdir $(@:.po=.mo)) $@
install-lang: $(PO_FILES)
install:: install-dirs install-files install-lang
# $1 = command to run
# $2 = source directory
# $3 = destination directory
define fc_install_file
if [ -d $2 ]; then \
for file in `ls -1 $2/`; do \
$1 $2/$$file $3 || true; \
done; \
fi
endef
##
## Directory creation
##
# use % to catch local name in $*
# data, program and recursive directory require a corresponding
# directory in local sources
%_DATA_DIR %_PROG_DIR %REC_DIR:
test ! -d $(subst _,/,$*) || $(INSTALL_DIRECTORY) $($@)
# Create the directory referenced by the variable without a local one.
%_DIR:
@: # do nothing
##
## Install files present directly under data, program and recursive directories
##
# $* : name of variable
# $($*): value of variable
%-instdata:
$(call fc_install_file, $(INSTALL_DATA), $(subst _,/,$(subst _DATA_DIR,,$*)), $($*))
%-instprog:
$(call fc_install_file, $(INSTALL_PROGRAM), $(subst _,/,$(subst _PROG_DIR,,$*)), $($*))
%-instrec:
$(call fc_install_file, $(INSTALL_RECURSIVE), $(subst _,/,$(subst _REC_DIR,,$*)), $($*))
# Use second expansion as variables may be created in included
# Makefiles
.SECONDEXPANSION:
# List of all directories
installdirs_LIST = $(foreach V, $(filter %_DIR, $(.VARIABLES)), \
$(if $(filter file, $(origin $(V))), \
$(V)))
# List of data directories
installdata_LIST = $(filter %_DATA_DIR, $(installdirs_LIST))
# List of program directories
installprog_LIST = $(filter %_PROG_DIR, $(installdirs_LIST))
# List of recursive directories
installrec_LIST = $(filter %_REC_DIR, $(installdirs_LIST))
# Expand directories to create as dependency
# Use double-colon to permit user to define additionnal install-dirs
install-dirs:: $$(installdirs_LIST)
# Expand files to install as dependency
# Use double-colon to permit user to define additionnal install-files
install-files:: install-data-files install-prog-files install-rec-dirs
install-data-files: $$(patsubst %,%-instdata,$$(installdata_LIST))
install-prog-files: $$(patsubst %,%-instprog,$$(installprog_LIST))
install-rec-dirs: $$(patsubst %,%-instrec,$$(installrec_LIST))
# Installation of python modules
ifeq ($(shell test -f setup.py && echo 0), 0)
install-files::
python setup.py install --no-compile --install-layout=deb $(PYTHON_OPTS)
endif
.PHONY: install install-dirs install-files install-data-files install-prog-files install-rec-dirs

View File

@@ -1,25 +0,0 @@
ARG NODE_VERSION=20.12.2
FROM node:${NODE_VERSION}-alpine AS node
FROM reg.cadoles.com/envole/nineapache:7.4
COPY ./misc/docker/apache.conf /etc/apache2/conf.d/zapp.conf
COPY --from=node /usr/lib /usr/lib
COPY --from=node /usr/local/lib /usr/local/lib
COPY --from=node /usr/local/include /usr/local/include
COPY --from=node /usr/local/bin /usr/local/bin
RUN npm install -g yarn --force
RUN composer self-update --1
RUN echo "* * * * * /app/bin/console app:Cron --env=prod" >> /var/spool/cron/crontabs/root
WORKDIR /app
COPY . .
RUN export NODE_OPTIONS=--openssl-legacy-provider && yarn install
RUN export NODE_OPTIONS=--openssl-legacy-provider && yarn build
RUN rm -rf node_modules
RUN composer install
CMD /app/misc/script/reconfigure.sh && /etc/apache2/apache2.sh

View File

@@ -1,19 +0,0 @@
LoadModule rewrite_module modules/mod_rewrite.so
ServerName nineapache.local
DocumentRoot "/app/public"
Alias /schedule /app/public
<Directory "/app/public">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
RewriteEngine On
RewriteCond %{REQUEST_URI}::$0 ^(/.+)/(.*)::\2$
RewriteRule .* - [E=BASE:%1]
RewriteCond %{HTTP:Authorization} .+
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0]
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ %{ENV:BASE}/index.php [L]
</Directory>

View File

@@ -1,28 +0,0 @@
#!/bin/bash
set -eo pipefail
# Se positionner sur la racine du projet
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
cd ${DIR}
cd ../..
DIR=$(pwd)
mkdir -p public/uploads/avatar
cp public/images/admin.jpg public/uploads/avatar/
cp public/images/system.jpg public/uploads/avatar/
cp public/images/noavatar.png public/uploads/avatar/
chown -R apache:apache public/uploads
mkdir -p uploads
chown -R apache:apache public/uploads
bin/console d:s:u --force --complete
php bin/console app:AppInit --env=prod
php bin/console app:CronInit --env=prod
php bin/console app:Script --env=prod
crond -b
echo
exec $@

View File

@@ -1,37 +0,0 @@
{
"devDependencies": {
"@symfony/webpack-encore": "^0.28.2",
"core-js": "^3.14.0",
"regenerator-runtime": "^0.13.2",
"webpack-notifier": "^1.6.0"
},
"license": "UNLICENSED",
"private": true,
"scripts": {
"dev-server": "encore dev-server",
"dev": "encore dev",
"watch": "encore dev --watch",
"build": "encore production --progress"
},
"dependencies": {
"@fortawesome/fontawesome-free": "^5.12.1",
"@fullcalendar/core": "^4.4.0",
"@fullcalendar/daygrid": "^4.4.0",
"@fullcalendar/interaction": "^4.4.0",
"@ttskch/select2-bootstrap4-theme": "^1.3.2",
"bootstrap": "^4.4.1",
"ckeditor": "^4.12.1",
"crop-select-js": "^1.0.1",
"datatables.net-bs4": "^1.10.25",
"dropzone": "^5.7.0",
"html2canvas": "^1.0.0-rc.5",
"jquery": "^3.4.1",
"jspdf": "^1.5.3",
"moment": "^2.24.0",
"popper.js": "^1.16.1",
"select2": "^4.0.13",
"spectrum-colorpicker2": "^2.0.0",
"tempusdominus-bootstrap-4": "^5.1.2",
"tempusdominus-core": "^5.0.3"
}
}

2
postservice/25-schedule Executable file
View File

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

3
pretemplate/25-schedule Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/bash
CreoleRun "/var/www/html/schedule/scripts/genkey.sh" web
exit 0

View File

@@ -1,77 +0,0 @@
# In all environments, the following files are loaded if they exist,
# the latter taking precedence over the former:
#
# * .env contains default values for the environment variables needed by the app
# * .env.local uncommitted file with local overrides
# * .env.$APP_ENV committed environment-specific defaults
# * .env.$APP_ENV.local uncommitted environment-specific overrides
#
# Real environment variables win over .env files.
#
# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES.
#
# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2).
# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration
###> symfony/framework-bundle ###
APP_SECRET=52c1cb88ee822cd2643abe29e16a68a6
#TRUSTED_PROXIES=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
#TRUSTED_HOSTS='^(localhost|example\.com)$'
###< symfony/framework-bundle ###
###> symfony/mailer ###
# MAILER_DSN=smtp://localhost
###< symfony/mailer ###
###< doctrine/doctrine-bundle ###
# Basic
APP_ALIAS=schedule
APP_AUTH=MYSQL
APP_NAME=Schedule
APP_ENV=PROD
APP_CRON=true
# Office hours
OFFICE_HOUR_START=09:00
OFFICE_HOUR_END=17:30
# MAIL sendmail / smtp
MAILER_METHOD=sendmail
MAILER_URL=
MAILER_NOREPLY=noreply@noreply.fr
MAILER_DEFAULT_NOTIF=
# BDD
DATABASE_NAME=
DATABASE_USER=
DATABASE_PASSWORD=
DATABASE_HOST=
# If APP_AUTH = CAS
CAS_HOST=
CAS_PORT=
CAS_PATH=
CAS_USERNAME=username
CAS_EMAIL=email
CAS_LASTNAME=lastname
CAS_FIRSTNAME=firstname
## Sentry DSN
SENTRY_DSN=
# Dolibar
DOLIBARR_ACTIVE=false
DOLIBARR_API_KEY=
DOLIBARR_URI=
###> sentry/sentry-symfony ###
SENTRY_DSN=
###< sentry/sentry-symfony ###
###> symfony/swiftmailer-bundle ###
# For Gmail as a transport, use: "gmail://username:password@localhost"
# For a generic SMTP server, use: "smtp://localhost:25?encryption=&auth_mode="
# Delivery is disabled by default via "null://localhost"
MAILER_URL=null://localhost
###< symfony/swiftmailer-bundle ###

View File

@@ -1,13 +0,0 @@
<?php
$requiredVersion = 'version 1'; // La version interdite
$composerVersion = trim(shell_exec('COMPOSER_ALLOW_SUPERUSER=1 composer --version --no-ansi'));
echo $composerVersion."\n";
if (stripos($composerVersion,$requiredVersion)===false ) {
echo "La version de Composer $requiredVersion n'est pas autorisée" . PHP_EOL;
echo "Veuillez mettre à jour Composer avec 'composer self-update --1'." . PHP_EOL;
echo "Ou executez le scripts/reconfigure.sh" . PHP_EOL;
exit(1); // Quitte avec un code d'erreur
}

View File

@@ -1,2 +0,0 @@
#!/bin/bash
# Si besoin export des valeurs de HTTP_PROXY et HTTPS_PROXY

View File

@@ -1,22 +0,0 @@
#!/bin/bash
cd /var/www/html/schedule
# Déclaration d'un proxy
. scripts/proxy.sh
# Mise en place du fichier d'environnement model
yes 2>/dev/null | cp /var/www/html/schedule/scripts/.env.model $DIR/.env
# Installation des dépendances composer
echo COMPOSER = Install
export COMPOSER_ALLOW_SUPERUSER=1
composer self-update --1 --quiet
composer install --quiet
php bin/console app:AppInit --env=prod
php bin/console app:CronInit --env=prod
php bin/console app:Script --env=prod
# Permissions
./scripts/perm.sh www-data

View File

@@ -1,145 +0,0 @@
<?php
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Console\Input\ArrayInput;
use Doctrine\ORM\Mapping\ClassMetadata;
use Doctrine\ORM\Id\AssignedGenerator;
use App\Entity\User;
use App\Entity\Nature;
use App\Entity\Domaine;
class AppInitCommand extends Command
{
private $container;
private $em;
private $output;
private $filesystem;
private $rootlog;
public function __construct(ContainerInterface $container,EntityManagerInterface $em)
{
parent::__construct();
$this->container = $container;
$this->em = $em;
}
protected function configure()
{
$this
->setName('app:AppInit')
->setDescription('Init Data for App')
->setHelp('This command Init Data App')
;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->output = $output;
$this->filesystem = new Filesystem();
$this->rootlog = $this->container->get('kernel')->getProjectDir()."/../var/log/";
$output->writeln('APP = Default Data');
// Création des natures par défaut
$this->insertNature(-200,"Congés",true);
$this->insertNature(-190,"Temps Partiel",false);
$this->insertNature(-100,"Non Travaillé",false);
$this->insertNature(-90,"Non Facturable",false);
$this->insertNature(-80,"Prestation",false);
// Création domaine par défaut
$this->insertDomaine(-100,"Administratif","Administratif");
// Création du compte admin si non existant
$this->insertUser("admin","admin");
$output->writeln('');
$this->em->flush();
return 0;
}
protected function insertNature($id,$name,$isvacation) {
$metadata = $this->em->getClassMetaData('App:Nature');
$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);
$metadata->setIdGenerator(new AssignedGenerator());
$entity = $this->em->getRepository('App:Nature')->find($id);
if(!$entity) {
$entity = new Nature;
$entity->setId($id);
$entity->setName($name);
$entity->setIsvacation($isvacation);
$this->em->persist($entity);
$this->em->flush();
}
}
protected function insertDomaine($id,$category,$name) {
$metadata = $this->em->getClassMetaData('App:Domaine');
$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);
$metadata->setIdGenerator(new AssignedGenerator());
$entity = $this->em->getRepository('App:Domaine')->find($id);
if(!$entity) {
$entity = new Domaine;
$entity->setId($id);
$entity->setName($name);
$entity->setCategory($category);
$this->em->persist($entity);
$this->em->flush();
}
}
protected function insertUser() {
$metadata = $this->em->getClassMetaData('App:User');
$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);
$metadata->setIdGenerator(new AssignedGenerator());
// Job Récupératoin la table de référence des articles
// Toute les 1mn
$entity = $this->em->getRepository('App:User')->findOneBy(["username"=>"admin"]);
if(!$entity) {
$this->writelnred('Création du compte admin par défaut avec password admin - Veuillez modifier votre password admin après connexion');
$entity = new User;
$entity->setId(0);
$entity->setUsername("admin");
$entity->setPassword("admin");
$entity->setFirstname("schedule");
$entity->setLastname("admin");
$entity->setEmail("admin@noreply@com");
$entity->setRoles(["ROLE_ADMIN"]);
$entity->setAvatar("admin.jpg");
$this->em->persist($entity);
}
// On flush
$this->em->flush();
}
private function writelnred($string) {
$this->output->writeln('<fg=red>'.$string.'</>');
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
}
private function writeln($string) {
$this->output->writeln($string);
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
}
}

View File

@@ -1,162 +0,0 @@
<?php
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Command\LockableTrait;
use App\Entity\Cron;
class CronCommand extends Command
{
private $container;
private $em;
private $output;
private $filesystem;
private $rootlog;
use LockableTrait;
public function __construct(ContainerInterface $container,EntityManagerInterface $em)
{
parent::__construct();
$this->container = $container;
$this->em = $em;
}
protected function configure()
{
$this
->setName('app:Cron')
->setDescription('Execution of the cron command')
;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->output = $output;
$this->filesystem = new Filesystem();
$this->rootlog = $this->container->get('kernel')->getProjectDir()."/../var/log/";
$appCron = $this->container->getParameter('appCron');
if(!$appCron)
{
$this->writelnred('CRON désactivé');
return 0;
}
if (!$this->lock()) {
$this->output->writeln("CRON LOCK");
return 0;
}
$crons = $this->em->getRepository('App:Cron')->toexec();
$i=0;
if($crons) {
$now=new \DateTime();
$this->writelnred('');
$this->writelnred('');
$this->writelnred('');
$this->writelnred('');
$this->writelnred('==========================================================================================================');
$this->writelnred('== CRON ==================================================================================================');
$this->writelnred('==========================================================================================================');
$this->writeln ('Date = '.$now->format('Y-m-d H:i:s'));
}
foreach($crons as $cron) {
$i++;
// Id du cron
$idcron = $cron->getId();
// Flag d'execution en cours
$now=new \DateTime();
$cron->setStartexecdate($now);
//$cron->setStatut(1);
$this->em->persist($cron);
$this->em->flush();
// Récupération de la commande
$command = $this->getApplication()->find($cron->getCommand());
// Réccuépration des parametres
$jsonparameter=json_decode($cron->getJsonargument(),true);
// Parametre id du cron actuel
$jsonparameter["cronid"]=$cron->getId();
// Parametre si dernière execution
$lastchance=false;
if($cron->getRepeatcall()>0)
$lastchance=($cron->getRepeatexec()+1==$cron->getRepeatcall());
$jsonparameter["lastchance"]=$lastchance;
// Formater la chaine de parametre
$parameter = new ArrayInput($jsonparameter);
// Executer la commande
$returnCode==1;
try{
$returnCode = $command->run($parameter, $output);
// Revenir sur le cron encours à cause du clear du manager présent dans la synchro
// Sinon le manager se pomme et génère des nouveaux enregistrement plutot que mettre à jour celui en cours
$cron=$this->em->getRepository('App:Cron')->find($idcron);
}
catch(\Exception $e) {
$this->writelnred("JOB EN ERREUR");
}
// Flag de fin d'execution
$now=new \DateTime();
$cron->setEndexecdate($now);
// Date prochaine execution
if($cron->getrepeatinterval()>=0) {
// Si interval par heure
if(fmod($cron->getRepeatinterval(),3600)==0)
$next=clone $cron->getNextexecdate();
else
$next=new \DateTime();
$next->add(new \DateInterval('PT'.$cron->getRepeatinterval().'S'));
$cron->setNextexecdate($next);
}
// Statut OK/KO/Retry
if($returnCode==1) {
$cron->setStatut(3);
if($cron->getRepeatcall()>0) $cron->setRepeatexec($cron->getRepeatexec()+1);
}
$this->em->persist($cron);
$this->em->flush();
}
if($crons) {
$this->writelnred("==");
$this->writelnred("FIN CRON");
$this->writelnred("==");
$this->writelnred("");
}
return 0;
}
private function writelnred($string) {
$this->output->writeln('<fg=red>'.$string.'</>');
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
}
private function writeln($string) {
$this->output->writeln($string);
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
}
}

View File

@@ -1,99 +0,0 @@
<?php
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Filesystem\Filesystem;
use Doctrine\ORM\Mapping\ClassMetadata;
use Doctrine\ORM\Id\AssignedGenerator;
use App\Entity\Cron;
class CronInitCommand extends Command
{
private $container;
private $em;
private $output;
private $filesystem;
private $rootlog;
public function __construct(ContainerInterface $container,EntityManagerInterface $em)
{
parent::__construct();
$this->container = $container;
$this->em = $em;
}
protected function configure()
{
$this
->setName('app:CronInit')
->setDescription('Init Data for Cron')
->setHelp('This command Init Data Cron')
;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$appCron = $this->container->getParameter('appCron');
if(!$appCron) return 0;
$output->writeln('CRON = Default Data');
$this->insertCron();
$output->writeln('');
$this->em->flush();
return 0;
}
protected function insertCron() {
$metadata = $this->em->getClassMetaData('App:Cron');
// Job Mail
// Toute les minutes
$entity = $this->em->getRepository('App:Cron')->findOneBy(["command"=>"app:sendMail"]);
if(!$entity) {
$entity = new Cron;
$entity->setCommand("app:sendMail");
$entity->setDescription("Execution du spool de mail en attente");
$entity->setStatut(2);
$entity->setRepeatcall(0);
$entity->setRepeatexec(0);
$entity->setRepeatinterval(60);
$entity->setNextexecdate($entity->getSubmitdate());
$entity->setJsonargument('{"message-limit":"100","env":"prod"}');
$this->em->persist($entity);
}
// Job Dump
// Toute les 24h à 2h00
$entity = $this->em->getRepository('App:Cron')->findOneBy(["command"=>"app:dumpBdd"]);
if(!$entity) {
$entity = new Cron;
$nextdate=$entity->getSubmitdate();
$nextdate->setTime(2,0);
$entity->setCommand("app:dumpBdd");
$entity->setDescription("Sauvegarde de la BDD");
$entity->setStatut(2);
$entity->setRepeatcall(0);
$entity->setRepeatexec(0);
$entity->setRepeatinterval(86400);
$entity->setNextexecdate($nextdate);
$this->em->persist($entity);
}
// On flush
$this->em->flush();
}
}

View File

@@ -1,92 +0,0 @@
<?php
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Security\Core\Encoder\EncoderFactory;
use Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder;
use Symfony\Component\Finder\Finder;
class DumpBddCommand extends Command
{
private $container;
private $em;
private $output;
private $filesystem;
private $rootlog;
private $byexec;
public function __construct(ContainerInterface $container,EntityManagerInterface $em)
{
parent::__construct();
$this->container = $container;
$this->em = $em;
}
protected function configure()
{
$this
->setName('app:dumpBdd')
->setDescription('Sauvegarde de la BDD')
->setHelp('Sauvegarde de la BDD')
->addArgument('cronid', InputArgument::OPTIONAL, 'ID Cron Job')
->addArgument('lastchance', InputArgument::OPTIONAL, 'Lastchance to run the cron')
;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->output = $output;
$this->filesystem = new Filesystem();
$this->rootlog = $this->container->get('kernel')->getLogDir()."/";
$alias = $this->container->getParameter('appAlias');
$this->writelnred('');
$this->writelnred('== app:dumpBdd');
$this->writelnred('==========================================================================================================');
$this->datahost = $this->container->getParameter('databaseHost');
$this->database = $this->container->getParameter('databaseName') ;
$this->username = $this->container->getParameter('databaseUser') ;
$this->password = $this->container->getParameter('databasePassword') ;
$cmd = sprintf('mysqldump -h %s -B %s -u %s --password=%s'
, $this->datahost
, $this->database
, $this->username
, $this->password
);
$result = $this->runCommand($cmd);
if($result['exit_status'] == 0) {
$this->filesystem->dumpFile($this->rootlog.$alias.".sql", implode('', $result['output']));
}
$this->writeln('');
return 0;
}
protected function runCommand($command)
{
$command .=" >&1";
exec($command, $output, $exit_status);
return array(
"output" => $output
, "exit_status" => $exit_status
);
}
private function writelnred($string) {
$this->output->writeln('<fg=red>'.$string.'</>');
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
}
private function writeln($string) {
$this->output->writeln($string);
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
}
}

View File

@@ -1,99 +0,0 @@
<?php
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Finder\Finder;
use Ramsey\Uuid\Uuid;
use App\Entity\Script;
class ScriptCommand extends Command
{
private $container;
private $em;
private $output;
private $filesystem;
private $rootlog;
public function __construct(ContainerInterface $container,EntityManagerInterface $em)
{
parent::__construct();
$this->container = $container;
$this->em = $em;
}
protected function configure()
{
$this
->setName('app:Script')
->setDescription('Script to call')
->setHelp('Script to call')
;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->output = $output;
$this->filesystem = new Filesystem();
$this->rootlog = $this->container->get('kernel')->getLogDir()."/";
$output->writeln('APP = Scripts');
$this->callscript("initdomaine");
$this->callscript("initofferservice");
$output->writeln('');
return 0;
}
private function callscript($name) {
$script=$this->em->getRepository("App:Script")->findOneBy(["name"=>$name]);
if(!$script) {
//$this->writelnred("== SCRIPT = ".$name);
$this->$name();
$script=new Script();
$script->setName($name);
$this->em->persist($script);
$this->em->flush();
$this->writeln("");
}
}
private function initdomaine() {
$domaine=$this->em->getRepository("App:Domaine")->find(-100);
$projects=$this->em->getRepository("App:Project")->findBy(["domaine"=>null]);
foreach($projects as $project) {
$project->setDomaine($domaine);
$this->em->persist($project);
$this->em->flush();
}
}
private function initofferservice() {
$offers=$this->em->getRepository("App:Offer")->findBy(["service"=>null]);
foreach($offers as $offer) {
$offer->setService($offer->getProject()->getService());
$this->em->persist($offer);
$this->em->flush();
}
}
private function writelnred($string) {
$this->output->writeln('<fg=red>'.$string.'</>');
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
}
private function writeln($string) {
$this->output->writeln($string);
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
}
}

View File

@@ -1,87 +0,0 @@
<?php
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Security\Core\Encoder\EncoderFactory;
use Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder;
class SendMailCommand extends Command
{
private $container;
private $em;
private $output;
private $filesystem;
private $rootlog;
public function __construct(ContainerInterface $container,EntityManagerInterface $em)
{
parent::__construct();
$this->container = $container;
$this->em = $em;
}
protected function configure()
{
$this
->setName('app:sendMail')
->setDescription('Envoi des mails')
->setHelp('Envoi des mails')
->addArgument('message-limit', InputArgument::OPTIONAL, 'limit message Mail')
->addArgument('env', InputArgument::OPTIONAL, 'env Mail')
->addArgument('cronid', InputArgument::OPTIONAL, 'ID Cron Job')
->addArgument('lastchance', InputArgument::OPTIONAL, 'Lastchance to run the cron')
;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->output = $output;
$this->filesystem = new Filesystem();
$this->rootlog = $this->container->get('kernel')->getRootDir()."/../var/logs/";
$this->writelnred('');
$this->writelnred('== app:sendMail');
$this->writelnred('==========================================================================================================');
$appMailmethod=$this->container->getParameter("appMailmethod");
$command = $this->getApplication()->find("swiftmailer:spool:send");
$tbparameter["--message-limit"]=100;
$tbparameter["--env"]="prod";
$tbparameter["--time-limit"]=5;
if($appMailmethod=="sendmail") $tbparameter["--transport"]="app.sendmail.transport";
$parameter = new ArrayInput($tbparameter);
try{
$returnCode = $command->run($parameter, $output);
}
catch(\Exception $e) {
$this->writeln("");
$this->writelnred("Impossible d'envoyer des mails");
$this->writeln("");
return 1;
}
$this->writeln("");
return 0;
}
private function writelnred($string) {
$this->output->writeln('<fg=red>'.$string.'</>');
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
}
private function writeln($string) {
$this->output->writeln($string);
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
}
}

View File

@@ -1,82 +0,0 @@
<?php
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Security\Core\Encoder\EncoderFactory;
use Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder;
use Cadoles\CoreBundle\Entity\User;
class SetPasswordCommand extends Command
{
private $container;
private $em;
private $output;
private $filesystem;
private $rootlog;
public function __construct(ContainerInterface $container,EntityManagerInterface $em)
{
parent::__construct();
$this->container = $container;
$this->em = $em;
}
protected function configure()
{
$this
->setName('app:setPassword')
->setDescription("Modifier le password d'un utilisateur")
->setHelp("Modifier le password d'un utilisateur")
->addArgument('username', InputArgument::OPTIONAL, 'username')
->addArgument('password', InputArgument::OPTIONAL, 'password')
;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->output = $output;
$this->filesystem = new Filesystem();
$this->rootlog = $this->container->get('kernel')->getProjectDir()."/../var/log/";
$this->writelnred('');
$this->writelnred('== app:SetPasword');
$this->writelnred('==========================================================================================================');
$username = $input->getArgument('username');
$this->writeln($username);
$password = $input->getArgument('password');
$this->writeln($password);
$user = $this->em->getRepository('App:User')->findOneBy(array('username' => $username));
if($user) {
// Set Password
$user->setPassword($password);
$this->em->persist($user);
$this->em->flush();
}
$this->writeln('');
return 0;
}
private function writelnred($string) {
$this->output->writeln('<fg=red>'.$string.'</>');
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
}
private function writeln($string) {
$this->output->writeln($string);
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
}
}

View File

@@ -1,83 +0,0 @@
<?php
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Security\Core\Encoder\EncoderFactory;
use Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder;
use Cadoles\CoreBundle\Entity\User;
class SetRolesCommand extends Command
{
private $container;
private $em;
private $output;
private $filesystem;
private $rootlog;
public function __construct(ContainerInterface $container,EntityManagerInterface $em)
{
parent::__construct();
$this->container = $container;
$this->em = $em;
}
protected function configure()
{
$this
->setName('app:setRoles')
->setDescription("Modifier le rôle d'un utilisateur")
->setHelp("Modifier le rôle d'un utilisateur")
->addArgument('username', InputArgument::OPTIONAL, 'username')
->addArgument('roles', InputArgument::OPTIONAL, 'roles')
;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->output = $output;
$this->filesystem = new Filesystem();
$this->rootlog = $this->container->get('kernel')->getProjectDir()."/../var/log/";
$this->writelnred('');
$this->writelnred('== app:setRoles');
$this->writelnred('==========================================================================================================');
$username = $input->getArgument('username');
$this->writeln($username);
$this->writeln($input->getArgument('roles'));
$roles = explode(",",$input->getArgument('roles'));
//$this->writeln($roles);
$user = $this->em->getRepository('App:User')->findOneBy(array('username' => $username));
if($user) {
// Set Password
$user->setRoles($roles);
$this->em->persist($user);
$this->em->flush();
}
$this->writeln('');
return 0;
}
private function writelnred($string) {
$this->output->writeln('<fg=red>'.$string.'</>');
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
}
private function writeln($string) {
$this->output->writeln($string);
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
}
}

View File

@@ -1,49 +0,0 @@
<?php
namespace App\Controller;
use App\Service\icsService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class ApiController extends AbstractController
{
public function api($key): Response
{
$em = $this->getDoctrine()->getManager();
$user = $em->getRepository('App:User')->findBy(['apikey' => $key]);
if (!$user) {
return new Response('Accès refusé', 403);
}
$ics = new icsService();
$ics->debug(false);
$content = $ics->writeheader();
$events = $em->getRepository('App:Event')->findBy(['user' => $user]);
foreach ($events as $event) {
$task = $event->getTask();
$project = $task->getProject();
$customer = $project->getCustomer();
$ics->set(
[
'allday' => $event->getAllday(),
'description' => $event->getDescription(),
'dtstart' => $event->getStart()->format('Y-m-d H:i:s'),
'dtend' => $event->getEnd()->format('Y-m-d H:i:s'),
'summary' => $customer->getName().'-'.$project->getName().'-'.$task->getName(),
'uid' => 'schedule'.$event->getId(),
]
);
$content .= $ics->writeevent();
}
$content .= $ics->writefooter();
return new Response($content);
}
}

View File

@@ -1,102 +0,0 @@
<?php
namespace App\Controller;
use App\Entity\Breakday;
use App\Form\BreakdayType;
use App\Repository\BreakdayRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class BreakdayController extends AbstractController
{
private EntityManagerInterface $em;
private BreakdayRepository $breakdayRepository;
public function __construct(EntityManagerInterface $em, BreakdayRepository $breakdayRepository)
{
$this->em = $em;
$this->breakdayRepository = $breakdayRepository;
}
public function list()
{
$breakdays = $this->breakdayRepository->findAll();
return $this->render('Breakday/list.html.twig', [
'breakdays' => $breakdays,
'useheader' => true,
'usesidebar' => true,
]);
}
public function submit(Request $request)
{
$breakday = new Breakday();
$form = $this->createForm(BreakdayType::class, $breakday, ['mode' => 'submit']);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$end = clone $breakday->getStart();
$end->add(new \DateInterval('P1D'));
$breakday->setEnd($end);
$this->em->persist($breakday);
$this->em->flush();
return $this->redirectToRoute('app_breakday');
}
return $this->render('Breakday/edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
'breakday' => $breakday,
'mode' => 'submit',
'form' => $form->createView(),
]);
}
public function update(int $id, Request $request)
{
$breakday = $this->breakdayRepository->find($id);
if (!$breakday) {
throw new NotFoundHttpException('La ressource demandée est introuvable.');
}
$form = $this->createForm(BreakdayType::class, $breakday, ['mode' => 'update']);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$breakday = $form->getData();
$end = clone $breakday->getStart();
$end->add(new \DateInterval('P1D'));
$breakday->setEnd($end);
$this->em->flush();
return $this->redirectToRoute('app_breakday');
}
return $this->render('Breakday/edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
'breakday' => $breakday,
'mode' => 'update',
'form' => $form->createView(),
]);
}
public function delete($id)
{
$breakday = $this->breakdayRepository->find($id);
if (!$breakday) {
throw new NotFoundHttpException('La ressource demandée est introuvable.');
}
try {
$this->em->remove($breakday);
$this->em->flush();
} catch (\Exception $e) {
$this->addflash('error', $e->getMessage());
}
return $this->redirectToRoute('app_breakday');
}
}

View File

@@ -1,409 +0,0 @@
<?php
namespace App\Controller;
use App\Entity\Yeardomaine as Yeardomaine;
use App\Entity\Yearproject as Yearproject;
use App\Form\YeardomaineType as YeardomaineType;
use App\Form\YearprojectType as YearprojectType;
use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
class BudgetController extends AbstractController
{
private $knpSnappy;
public function __construct(\Knp\Snappy\Pdf $knpSnappy)
{
$this->knpSnappy = $knpSnappy;
}
public function list($id = null, Request $request)
{
$em = $this->getDoctrine()->getManager();
// Rechercher de l'ensemble des exercices sauf du premier
$years = $em
->createQueryBuilder('year')
->select('year')
->from('App:Year', 'year')
->orderBy('year.start')
->setFirstResult(1)
->getQuery()->getResult();
// Rechercher l'exercice demandé sinon le dernier
if ($id) {
$n2 = $em->getRepository('App:Year')->find($id);
} else {
$n2 = $em->getRepository('App:Year')->findOneBy([], ['start' => 'DESC']);
}
// Rechercher l'exercice précendent à celui selectionné
$n1 = $em
->createQueryBuilder('year')
->select('year')
->from('App:Year', 'year')
->Where('year.end<:start')
->setParameter('start', $n2->getStart())
->orderBy('year.start', 'DESC')
->setFirstResult(0)->setMaxResults(1)
->getQuery()->getResult();
if (empty($n1)) {
$n1 = null;
} else {
$n1 = $n1[0];
}
if ($n1) {
$startn1 = clone $n1->getStart();
$startn1->setTime(0, 0, 0);
$endn1 = clone $n1->getEnd();
$endn1->add(new \DateInterval('P1D'))->setTime(0, 0, 0);
}
if ($n2) {
$startn2 = clone $n2->getStart();
$startn2->setTime(0, 0, 0);
$endn2 = clone $n2->getEnd();
$endn2->add(new \DateInterval('P1D'))->setTime(0, 0, 0);
}
// Pour chaque domaine
$tbdomaines = [];
$domaines = $em->getRepository('App:Domaine')->findBy([], ['category' => 'ASC', 'name' => 'ASC']);
foreach ($domaines as $domaine) {
// Filtre par Domaine
if ('all' != $this->get('session')->get('iddomaine')) {
if ($domaine->getId() != $this->get('session')->get('iddomaine')) {
continue;
}
}
// On calcume le réel validé pour les deux périodes pour les domaines
$tbdomaines[$domaine->getId()] = [
'id' => $domaine->getId(),
'category' => $domaine->getCategory(),
'name' => $domaine->getCategory().' - '.$domaine->getName(),
'nbdayrealn1' => 0,
'nbetprealn1' => 0,
'nbcaarealn1' => 0,
'nbdaybudgn1' => 0,
'nbetpbudgn1' => 0,
'nbcaabudgn1' => 0,
'nbdayrealn2' => 0,
'nbetprealn2' => 0,
'nbcaarealn2' => 0,
'nbdaybudgn2' => 0,
'nbetpbudgn2' => 0,
'nbcaabudgn2' => 0,
'projects' => [],
];
// Période précédente n1
if ($n1) {
// Events
$start = clone $n1->getStart();
$start->setTime(0, 0, 0);
$end = clone $n1->getEnd();
$end->add(new \DateInterval('P1D'))->setTime(0, 0, 0);
$events = $em
->createQueryBuilder('event')
->select('SUM(event.duration) as somme')
->from('App:Project', 'project')
->from('App:Task', 'task')
->from('App:Event', 'event')
->Where('project.domaine=:domaine')
->andWhere('task.project=project')
->andWhere('event.task=task')
->andWhere('event.start >=:start')
->andWhere('event.end <=:end')
->andWhere('event.validate=:validate')
->setParameter('domaine', $domaine)
->setParameter('start', $startn1)
->setParameter('end', $endn1)
->setParameter('validate', true)
->getQuery()->getResult();
$tbdomaines[$domaine->getId()]['nbdayrealn1'] = ($events[0]['somme'] ? $events[0]['somme'] : 0);
$tbdomaines[$domaine->getId()]['nbetprealn1'] = $tbdomaines[$domaine->getId()]['nbdayrealn1'] / $n1->getNbday();
// Yeardomaine
$yeardomaine = $em->getRepository('App:Yeardomaine')->findOneBy(['domaine' => $domaine, 'year' => $n1]);
if ($yeardomaine) {
$tbdomaines[$domaine->getId()]['nbcaarealn1'] = $yeardomaine->getCareal();
$tbdomaines[$domaine->getId()]['nbdaybudgn1'] = $yeardomaine->getNbdaybudget();
$tbdomaines[$domaine->getId()]['nbetpbudgn1'] = $yeardomaine->getNbdaybudget() / $n1->getNbday();
$tbdomaines[$domaine->getId()]['nbcaabudgn1'] = $yeardomaine->getCabudget();
}
}
// Période encour n2
if ($n2) {
$events = $em
->createQueryBuilder('event')
->select('SUM(event.duration) as somme')
->from('App:Project', 'project')
->from('App:Task', 'task')
->from('App:Event', 'event')
->Where('project.domaine=:domaine')
->andWhere('task.project=project')
->andWhere('event.task=task')
->andWhere('event.start >=:start')
->andWhere('event.end <=:end')
->andWhere('event.validate=:validate')
->setParameter('domaine', $domaine)
->setParameter('start', $startn2)
->setParameter('end', $endn2)
->setParameter('validate', true)
->getQuery()->getResult();
$tbdomaines[$domaine->getId()]['nbdayrealn2'] = ($events[0]['somme'] ? $events[0]['somme'] : 0);
$tbdomaines[$domaine->getId()]['nbetprealn2'] = $tbdomaines[$domaine->getId()]['nbdayrealn2'] / $n2->getNbday();
// Yeardomaine
$yeardomaine = $em->getRepository('App:Yeardomaine')->findOneBy(['domaine' => $domaine, 'year' => $n2]);
if ($yeardomaine) {
$tbdomaines[$domaine->getId()]['nbcaarealn2'] = $yeardomaine->getCareal();
$tbdomaines[$domaine->getId()]['nbdaybudgn2'] = $yeardomaine->getNbdaybudget();
$tbdomaines[$domaine->getId()]['nbetpbudgn2'] = $yeardomaine->getNbdaybudget() / $n2->getNbday();
$tbdomaines[$domaine->getId()]['nbcaabudgn2'] = $yeardomaine->getCabudget();
}
}
// Pour chaque project du domaine
foreach ($domaine->getProjects() as $project) {
// On calcume le réel validé pour les deux périodes pour les projects
$tbdomaines[$domaine->getId()]['projects'][$project->getId()] = [
'id' => $project->getId(),
'name' => $project->getCustomer()->getName().' - '.$project->getName(),
'nbdayrealn1' => 0,
'nbetprealn1' => 0,
'nbcaarealn1' => 0,
'nbdaybudgn1' => 0,
'nbetpbudgn1' => 0,
'nbcaabudgn1' => 0,
'nbdayrealn2' => 0,
'nbetprealn2' => 0,
'nbcaarealn2' => 0,
'nbdaybudgn2' => 0,
'nbetpbudgn2' => 0,
'nbcaabudgn2' => 0,
];
// Période précédente n1
if ($n1) {
$events = $em
->createQueryBuilder('event')
->select('SUM(event.duration) as somme')
->from('App:Task', 'task')
->from('App:Event', 'event')
->Where('task.project=:project')
->andWhere('event.task=task')
->andWhere('event.start >=:start')
->andWhere('event.end <=:end')
->andWhere('event.validate=:validate')
->setParameter('project', $project)
->setParameter('start', $startn1)
->setParameter('end', $endn1)
->setParameter('validate', true)
->getQuery()->getResult();
$nbdayrealn1 = ($events[0]['somme'] ? $events[0]['somme'] : 0);
$tbdomaines[$domaine->getId()]['projects'][$project->getId()]['nbdayrealn1'] = $nbdayrealn1;
$tbdomaines[$domaine->getId()]['projects'][$project->getId()]['nbetprealn1'] = $nbdayrealn1 / $n1->getNbday();
// Yearproject
$yearproject = $em->getRepository('App:Yearproject')->findOneBy(['project' => $project, 'year' => $n1]);
if ($yearproject) {
$tbdomaines[$domaine->getId()]['projects'][$project->getId()]['nbcaarealn1'] = $yearproject->getCareal();
$tbdomaines[$domaine->getId()]['projects'][$project->getId()]['nbdaybudgn1'] = $yearproject->getNbdaybudget();
$tbdomaines[$domaine->getId()]['projects'][$project->getId()]['nbetpbudgn1'] = $yearproject->getNbdaybudget() / $n1->getNbday();
$tbdomaines[$domaine->getId()]['projects'][$project->getId()]['nbcaabudgn1'] = $yearproject->getCabudget();
}
}
// Période encour n2
if ($n2) {
$start = $n2->getStart()->setTime(0, 0, 0);
$end = $n2->getEnd()->add(new \DateInterval('P1D'))->setTime(0, 0, 0);
$events = $em
->createQueryBuilder('event')
->select('SUM(event.duration) as somme')
->from('App:Task', 'task')
->from('App:Event', 'event')
->andWhere('task.project=:project')
->andWhere('event.task=task')
->andWhere('event.start >=:start')
->andWhere('event.end <=:end')
->andWhere('event.validate=:validate')
->setParameter('project', $project)
->setParameter('start', $startn2)
->setParameter('end', $endn2)
->setParameter('validate', true)
->getQuery()->getResult();
$nbdayrealn2 = ($events[0]['somme'] ? $events[0]['somme'] : 0);
$tbdomaines[$domaine->getId()]['projects'][$project->getId()]['nbdayrealn2'] = $nbdayrealn2;
$tbdomaines[$domaine->getId()]['projects'][$project->getId()]['nbetprealn2'] = $nbdayrealn2 / $n2->getNbday();
// Yearproject
$yearproject = $em->getRepository('App:Yearproject')->findOneBy(['project' => $project, 'year' => $n2]);
if ($yearproject) {
$tbdomaines[$domaine->getId()]['projects'][$project->getId()]['nbcaarealn2'] = $yearproject->getCareal();
$tbdomaines[$domaine->getId()]['projects'][$project->getId()]['nbdaybudgn2'] = $yearproject->getNbdaybudget();
$tbdomaines[$domaine->getId()]['projects'][$project->getId()]['nbetpbudgn2'] = $yearproject->getNbdaybudget() / $n2->getNbday();
$tbdomaines[$domaine->getId()]['projects'][$project->getId()]['nbcaabudgn2'] = $yearproject->getCabudget();
}
}
if (!$project->getActive() && 0 == $nbdayrealn1 && 0 == $nbdayrealn2) {
unset($tbdomaines[$domaine->getId()]['projects'][$project->getId()]);
}
}
}
if ($request->query->get('fgprint')) {
$render = $this->renderView('Budget/list.html.twig', [
'useheader' => true,
'usesidebar' => true,
'domaines' => $tbdomaines,
'n1' => $n1,
'n2' => $n2,
'years' => $years,
'fgprint' => true,
]);
return new PdfResponse(
$this->knpSnappy->getOutputFromHtml($render),
'domaines.pdf'
);
} else {
return $this->render('Budget/list.html.twig', [
'useheader' => true,
'usesidebar' => true,
'domaines' => $tbdomaines,
'n1' => $n1,
'n2' => $n2,
'years' => $years,
]);
}
}
public function update($type, $id, $year, Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
// Returnto
$returnto = $request->get('returnto');
// Recherche de l'exercice
$year = $em->getRepository('App:Year')->find($year);
// Recherche de la ligne projet/domaine associée à l'exercice
if ('project' == $type) {
$project = $em->getRepository('App:Project')->find($id);
$data = $em->getRepository('App:Yearproject')->findOneBy(['year' => $year, 'project' => $project]);
if (!$data) {
$data = new Yearproject();
$data->setYear($year);
$data->setProject($project);
$em->persist($data);
$em->flush();
}
// Création du formulaire
$form = $this->createForm(YearprojectType::class, $data, ['mode' => 'update']);
} else {
$domaine = $em->getRepository('App:Domaine')->find($id);
$data = $em->getRepository('App:Yeardomaine')->findOneBy(['year' => $year, 'domaine' => $domaine]);
if (!$data) {
$data = new Yeardomaine();
$data->setYear($year);
$data->setDomaine($domaine);
$em->persist($data);
$em->flush();
}
// Création du formulaire
$form = $this->createForm(YeardomaineType::class, $data, ['mode' => 'update']);
}
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm(null, $form, $request, $data, 'update');
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData();
$em->persist($data);
$em->flush();
// Retour à la liste
if ($returnto) {
return $this->redirectToRoute('app_budget', ['id' => $returnto]);
} else {
return $this->redirectToRoute('app_budget', ['id' => $year->getId()]);
}
}
// Affichage du formulaire
if ($request->query->get('fgprint')) {
$render = $this->renderView('Budget/edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
'budget' => $data,
'type' => $type,
'id' => $id,
'year' => $year,
'mode' => 'update',
'form' => $form->createView(),
'fgprint' => true,
'returnto' => $returnto,
]);
return new PdfResponse(
$this->knpSnappy->getOutputFromHtml($render),
'budget.pdf'
);
} else {
return $this->render('Budget/edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
'budget' => $data,
'type' => $type,
'id' => $id,
'year' => $year,
'mode' => 'update',
'form' => $form->createView(),
'returnto' => $returnto,
]);
}
}
protected function getErrorForm($id, $form, $request, $data, $mode)
{
if ($form->get('submit')->isClicked() && 'delete' == $mode) {
}
if ($form->get('submit')->isClicked() && 'submit' == $mode) {
}
if ($form->get('submit')->isClicked() && !$form->isValid()) {
$this->get('session')->getFlashBag()->clear();
$errors = $form->getErrors();
foreach ($errors as $error) {
$request->getSession()->getFlashBag()->add('error', $error->getMessage());
}
}
}
}

View File

@@ -1,83 +0,0 @@
<?php
namespace App\Controller;
use App\Form\CronType;
use App\Repository\CronRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class CronController extends AbstractController
{
private EntityManagerInterface $em;
private CronRepository $cronRepository;
public function __construct(EntityManagerInterface $em, CronRepository $cronRepository)
{
$this->em = $em;
$this->cronRepository = $cronRepository;
}
public function list()
{
$crons = $this->cronRepository->findAll();
return $this->render('Cron/list.html.twig', [
'crons' => $crons,
'useheader' => true,
'usesidebar' => true,
]);
}
public function update($id, Request $request)
{
$cron = $this->cronRepository->find($id);
if (!$cron) {
throw new NotFoundHttpException('La ressource demandée est introuvable.');
}
$form = $this->createForm(CronType::class, $cron, ['mode' => 'update']);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->em->persist($cron);
$this->em->flush();
return $this->redirectToRoute('app_cron');
}
return $this->render('Cron/edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
'cron' => $cron,
'mode' => 'update',
'form' => $form->createView(),
]);
}
public function log()
{
return $this->render('Cron/logs.html.twig', [
'useheader' => true,
'usesidebar' => true,
]);
}
public function getlog($id)
{
$path = $this->getParameter('kernel.project_dir');
if ('dump' == $id) {
$file = $path.'/var/log/'.$this->getParameter('appAlias').'.sql';
} else {
$file = $path.'/var/log/'.$id.'.log';
}
$response = new BinaryFileResponse($file);
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT);
return $response;
}
}

View File

@@ -1,184 +0,0 @@
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\HttpFoundation\Request;
class CropController extends AbstractController
{
// Etape 01 - Téléchargement de l'image
public function crop01()
{
return $this->render('Crop/crop01.html.twig', [
'useheader' => false,
'usemenu' => false,
'usesidebar' => false,
]);
}
// Etape 02 - Couper votre l'image
public function crop02(Request $request)
{
// Récupération de l'image à cropper
$large_image_location = 'uploads/avatar/'.$this->get('session')->get('uploadavatar');
// Récupérer les tailles de l'image
$width = $this->getWidth($large_image_location);
$height = $this->getHeight($large_image_location);
// Définir le pourcentage de réduction de l'image
$max_height = 400000;
$max_width = 800;
$scale = $max_height / $height;
if (($width * $scale) > $max_width) {
$scale = $max_width / $width;
}
$this->resizeImage($large_image_location, $width, $height, $scale);
// Construction du formulaire
$form = $this->createFormBuilder()
->add('submit', SubmitType::class, ['label' => 'Valider', 'attr' => ['class' => 'btn btn-success', 'onclick' => 'reportThumb()']])
->add('x', HiddenType::class)
->add('y', HiddenType::class)
->add('w', HiddenType::class)
->add('h', HiddenType::class)
->getForm();
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur validation on généère la miniature croppée
if ($form->isSubmitted() && $form->isValid()) {
// Récupération des valeurs du formulaire
$data = $form->getData();
$thumb_image_location = 'uploads/avatar/thumb_'.$this->get('session')->get('uploadavatar');
$cropped = $this->resizeThumbnailImage($thumb_image_location, $large_image_location, $data['w'], $data['h'], $data['x'], $data['y'], $scale);
}
return $this->render('Crop/crop02.html.twig', [
'useheader' => false,
'usemenu' => false,
'usesidebar' => false,
'form' => $form->createView(),
]);
}
// Calcul de la hauteur
protected function getHeight($image)
{
$size = getimagesize($image);
$height = $size[1];
return $height;
}
// Cacul de la largeur
protected function getWidth($image)
{
$size = getimagesize($image);
$width = $size[0];
return $width;
}
protected function resizeImage($image, $width, $height, $scale)
{
list($imagewidth, $imageheight, $imageType) = getimagesize($image);
$imageType = image_type_to_mime_type($imageType);
$newImageWidth = ceil($width * $scale);
$newImageHeight = ceil($height * $scale);
$newImage = imagecreatetruecolor($newImageWidth, $newImageHeight);
switch ($imageType) {
case 'image/gif':
$source = imagecreatefromgif($image);
break;
case 'image/pjpeg':
case 'image/jpeg':
case 'image/jpg':
$source = imagecreatefromjpeg($image);
break;
case 'image/png':
case 'image/x-png':
$source = imagecreatefrompng($image);
break;
case 'image/webp':
$source = imagecreatefromwebp($image);
break;
}
imagecopyresampled($newImage, $source, 0, 0, 0, 0, $newImageWidth, $newImageHeight, $width, $height);
switch ($imageType) {
case 'image/gif':
imagegif($newImage, $image);
break;
case 'image/pjpeg':
case 'image/jpeg':
case 'image/jpg':
imagejpeg($newImage, $image, 90);
break;
case 'image/png':
case 'image/x-png':
imagepng($newImage, $image);
break;
case 'image/webp':
imagewebp($newImage, $image, 90);
break;
}
chmod($image, 0640);
return $image;
}
protected function resizeThumbnailImage($thumb_image_name, $image, $width, $height, $start_width, $start_height, $scale)
{
list($imagewidth, $imageheight, $imageType) = getimagesize($image);
$imageType = image_type_to_mime_type($imageType);
$newImageWidth = ceil($width * $scale);
$newImageHeight = ceil($height * $scale);
$newImage = imagecreatetruecolor($newImageWidth, $newImageHeight);
switch ($imageType) {
case 'image/gif':
$source = imagecreatefromgif($image);
break;
case 'image/pjpeg':
case 'image/jpeg':
case 'image/jpg':
$source = imagecreatefromjpeg($image);
break;
case 'image/png':
case 'image/x-png':
$source = imagecreatefrompng($image);
break;
case 'image/webp':
$source = imagecreatefromwebp($image);
break;
}
imagecopyresampled($newImage, $source, 0, 0, $start_width, $start_height, $newImageWidth, $newImageHeight, $width, $height);
switch ($imageType) {
case 'image/gif':
imagegif($newImage, $thumb_image_name);
break;
case 'image/pjpeg':
case 'image/jpeg':
case 'image/jpg':
imagejpeg($newImage, $thumb_image_name, 90);
break;
case 'image/png':
case 'image/x-png':
imagepng($newImage, $thumb_image_name);
break;
case 'image/webp':
imagewebp($newImage, $thumb_image_name, 90);
break;
}
chmod($thumb_image_name, 0640);
return $thumb_image_name;
}
}

View File

@@ -1,96 +0,0 @@
<?php
namespace App\Controller;
use App\Entity\Customer;
use App\Form\CustomerType;
use App\Repository\CustomerRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class CustomerController extends AbstractController
{
private EntityManagerInterface $em;
private CustomerRepository $customerRepository;
public function __construct(EntityManagerInterface $em, CustomerRepository $customerRepository)
{
$this->em = $em;
$this->customerRepository = $customerRepository;
}
public function list()
{
$customers = $this->customerRepository->findAll();
return $this->render('Customer/list.html.twig', [
'customers' => $customers,
'useheader' => true,
'usesidebar' => true,
]);
}
public function submit(Request $request)
{
$customer = new Customer();
$form = $this->createForm(CustomerType::class, $customer, ['mode' => 'submit']);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->em->persist($customer);
$this->em->flush();
return $this->redirectToRoute('app_customer');
}
return $this->render('Customer/edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
'customer' => $customer,
'mode' => 'submit',
'form' => $form->createView(),
]);
}
public function update($id, Request $request)
{
$customer = $this->customerRepository->find($id);
if (!$customer) {
throw new NotFoundHttpException('La ressource demandée est introuvable.');
}
$form = $this->createForm(CustomerType::class, $customer, ['mode' => 'update']);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->em->flush();
return $this->redirectToRoute('app_customer');
}
return $this->render('Customer/edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
'customer' => $customer,
'mode' => 'update',
'form' => $form->createView(),
]);
}
public function delete($id)
{
$customer = $this->customerRepository->find($id);
if (!$customer) {
throw new NotFoundHttpException('La ressource demandée est introuvable.');
}
try {
$this->em->remove($customer);
$this->em->flush();
} catch (\Exception $e) {
$this->addflash('error', $e->getMessage());
}
return $this->redirectToRoute('app_customer');
}
}

View File

@@ -1,96 +0,0 @@
<?php
namespace App\Controller;
use App\Entity\Domaine;
use App\Form\DomaineType;
use App\Repository\DomaineRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class DomaineController extends AbstractController
{
private EntityManagerInterface $em;
private DomaineRepository $domaineRepository;
public function __construct(EntityManagerInterface $em, DomaineRepository $domaineRepository)
{
$this->em = $em;
$this->domaineRepository = $domaineRepository;
}
public function list()
{
$domaine = $this->domaineRepository->findAll();
return $this->render('Domaine/list.html.twig', [
'domaines' => $domaine,
'useheader' => true,
'usesidebar' => true,
]);
}
public function submit(Request $request)
{
$domaine = new Domaine();
$form = $this->createForm(DomaineType::class, $domaine, ['mode' => 'submit']);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->em->persist($domaine);
$this->em->flush();
return $this->redirectToRoute('app_domaine');
}
return $this->render('Domaine/edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
'domaine' => $domaine,
'mode' => 'submit',
'form' => $form->createView(),
]);
}
public function update($id, Request $request)
{
$domaine = $this->domaineRepository->find($id);
if (!$domaine) {
throw new NotFoundHttpException('La ressource demandée est introuvable.');
}
$form = $this->createForm(DomaineType::class, $domaine, ['mode' => 'update']);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->em->flush();
return $this->redirectToRoute('app_domaine');
}
return $this->render('Domaine/edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
'domaine' => $domaine,
'mode' => 'update',
'form' => $form->createView(),
]);
}
public function delete($id)
{
$domaine = $this->domaineRepository->find($id);
if (!$domaine) {
throw new NotFoundHttpException('La ressource demandée est introuvable.');
}
try {
$this->em->remove($domaine);
$this->em->flush();
} catch (\Exception $e) {
$this->addflash('error', $e->getMessage());
}
return $this->redirectToRoute('app_domaine');
}
}

View File

@@ -1,674 +0,0 @@
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\FormError;
use App\Entity\Event as Entity;
use App\Form\EventType as Form;
use App\Entity\Penalty;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class EventController extends AbstractController
{
private $data = "event";
private $route = "app_event";
private $render = "Event/";
private $entity = "App:Event";
private $notificator;
private $router;
public function __construct(\App\Service\notificationService $notificator,UrlGeneratorInterface $router) {
$this->notificator = $notificator;
$this->router = $router;
}
public function list(Request $request)
{
$em = $this->getDoctrine()->getManager();
$users = $em->getRepository("App:User")->findAll();
$tasks = $em->getRepository("App:Task")->findAll();
$projects= $em->getRepository("App:Project")->findBy(["active"=>true]);
return $this->render($this->render.'list.html.twig',[
"useheader" => true,
"usesidebar" => true,
"users" => $users,
"projects" => $projects
]);
}
public function load($iduser, Request $request)
{
$em = $this->getDoctrine()->getManager();
$tbevents=[];
$start = $request->query->get('start');
$end = $request->query->get('end');
//$iduser=$this->get("session")->get("iduser");
// Evenements
if($iduser=="all") {
$events=$em->getRepository("App:Event")->findAll();
$events = $em
->createQueryBuilder('event')
->select('event')
->from('App:Event','event')
->Where('event.start>=:start AND event.end <:end')
->setParameter('start',$start)
->setParameter('end',$end)
->getQuery()->getResult();
}
else {
$user=$em->getRepository("App:User")->find($iduser);
$events=$em->getRepository("App:Event")->findBy(["user"=>$user]);
$events = $em
->createQueryBuilder('event')
->select('event')
->from('App:Event','event')
->Where('event.user=:user AND event.start>=:start AND event.end <:end')
->setParameter('user',$user->getId())
->setParameter('start',$start)
->setParameter('end',$end)
->getQuery()->getResult();
}
foreach($events as $event) {
//Filtre par service
if($this->get('session')->get('idservice')!="all") {
$idservice=$event->getUser()->getService()->getId();
if ($idservice!=$this->get('session')->get('idservice')){
continue;
}
}
// Filtre par project
if($this->get('session')->get('idproject')!="all") {
$idproject=$event->getTask()->getProject()->getId();
if($idproject!=$this->get('session')->get('idproject'))
continue;
}
$tmp=$this->formatEvent($event);
array_push($tbevents,$tmp);
}
// Astreintes
if($iduser=="all")
$penaltys=$em->getRepository("App:Penalty")->findAll();
else {
$iduser=$this->get("session")->get("iduser");
$user=$em->getRepository("App:User")->find($iduser);
$penaltys=$em->getRepository("App:Penalty")->findBy(["user"=>$user]);
}
foreach($penaltys as $penalty) {
$tmp=$this->formatEvent($penalty);
array_push($tbevents,$tmp);
}
// Breakday
$breakdays=$em->getRepository("App:Breakday")->findAll();
foreach($breakdays as $breakday) {
$tmp=$this->formatBreakday($breakday);
array_push($tbevents,$tmp);
}
// Retour
return new Response(json_encode($tbevents));
}
public function submit(Request $request)
{
$em = $this->getDoctrine()->getManager();
// Récupération des variables envoyées en post
$iduser = $request->request->get('iduser');
$idtask = $request->request->get('idtask');
$start = $request->request->get('start');
$end = $request->request->get('end');
$am = ($request->request->get('am')=="true");
$ap = ($request->request->get('ap')=="true");
$astreinte = ($request->request->get('astreinte')=="true");
$externaltrip = ($request->request->get('externaltrip')=="true");
$description = $request->request->get('description');
$user = $em->getRepository("App:User")->find($iduser);
$task = $em->getRepository("App:Task")->find($idtask);
// Controle de cohérance
if(!$user) {
$output=["return"=>"KO","error"=>"Utilisateur inconnu"];
return new Response(json_encode($output));
}
if(!$task) {
$output=["return"=>"KO","error"=>"Tâche inconnu"];
return new Response(json_encode($output));
}
// Convertir les dates string en date
$datestart=new \DateTime($start);
$dateend =new \DateTime($end);
if($am&&$ap) {
$datestart->SetTime(0,0,0);
$dateend->add(new \DateInterval('P1D'));
$dateend->SetTime(0,0,0);
$duration=$dateend->diff($datestart)->d;
$allday=true;
}
else {
$duration=0.5;
$allday=false;
if($am) {
$datestart->SetTime(9,0,0);
$dateend->SetTime(12,0,0);
}
else {
$datestart->SetTime(13,0,0);
$dateend->SetTime(17,0,0);
}
}
// Astreinte
if($astreinte) {
// Une astreinte ne peut-etre un congès
if($task->getNature()->getIsvacation()) {
$output=["return"=>"KO","error"=>"Une astreinte ne peut être de nature congès","start"=>$datestart,"end"=>$dateend,"events"=>null];
return new Response(json_encode($output));
}
// On regarde si une astreinte ne commence pas pendant une autre astreinte ou qui se termine pendant une autre astreinte ou qui a une astreinte compris dans ses dates
$penaltys = $em->createQueryBuilder('penalty')
->select('penalty')
->from('App:Penalty','penalty')
->Where('penalty.user=:user AND penalty.start<=:start AND penalty.end >:start')
->orWhere('penalty.user=:user AND penalty.start<:end AND penalty.end >=:end')
->orWhere('penalty.user=:user AND penalty.start>:start AND penalty.end <:end')
->setParameter('user',$iduser)
->setParameter('start',$datestart)
->setParameter('end',$dateend)
->getQuery()->getResult();
if($penaltys) {
$tbpenalty=[];
foreach($penaltys as $penalty) {
$tmp=[
"id" => $penalty->getId(),
"start" => $penalty->getStart(),
"end" => $penalty->getEnd(),
];
array_push($tbpenalty,$tmp);
}
$output=["return"=>"KO","error"=>"Cet intervant a déjà une tache à cette date","start"=>$datestart,"end"=>$dateend,"events"=>$tbpenalty];
return new Response(json_encode($output));
}
// On regarde si un évenement ne commence pas pendant un autre évenement ou qui se termine pendant un autre évenement ou qui a un évenement compris dans ses dates
$events = $em->createQueryBuilder('event')
->select('event')
->from('App:Event','event')
->Where('event.user=:user AND event.start<=:start AND event.end >:start')
->orWhere('event.user=:user AND event.start<:end AND event.end >=:end')
->orWhere('event.user=:user AND event.start>:start AND event.end <:end')
->setParameter('user',$iduser)
->setParameter('start',$datestart)
->setParameter('end',$dateend)
->getQuery()->getResult();
if($events) {
$tbevent=[];
$validate=false;
$holiday=false;
foreach($events as $event) {
$tmp=[
"id" => $event->getId(),
"start" => $event->getStart(),
"end" => $event->getEnd(),
];
array_push($tbevent,$tmp);
if($event->getValidate()) $validate=true;
if($event->getTask()->getNature()->getIsvacation()) $holiday=true;
}
if($validate) {
$output=["return"=>"KO","error"=>"Cet intervant a sa semaine de validé","start"=>$datestart,"end"=>$dateend,"events"=>$tbevent];
return new Response(json_encode($output));
}
elseif($holiday) {
$output=["return"=>"KO","error"=>"Cet intervant a posé des congés sur cette période","start"=>$datestart,"end"=>$dateend,"events"=>$tbevent];
return new Response(json_encode($output));
}
}
// Création de l'astreinte
$penalty = new Penalty();
$penalty->setStart($datestart);
$penalty->setEnd($dateend);
$penalty->setDuration($duration);
$penalty->setAllday($allday);
$penalty->setDescription($description);
$penalty->setUser($user);
$penalty->setTask($task);
$penalty->setValidate(false);
$em->persist($penalty);
$em->flush();
$output=$this->formatEvent($penalty);
}
// Evenement
else {
// On regarde si une tache ne commence pas pendant une autre intervention ou qui se termine pendant une autre intervention ou qui a une intervention compris dans ses dates
$events = $em->createQueryBuilder('event')
->select('event')
->from('App:Event','event')
->Where('event.user=:user AND event.start<=:start AND event.end >:start')
->orWhere('event.user=:user AND event.start<:end AND event.end >=:end')
->orWhere('event.user=:user AND event.start>:start AND event.end <:end')
->setParameter('user',$iduser)
->setParameter('start',$datestart)
->setParameter('end',$dateend)
->getQuery()->getResult();
if($events) {
$tbevent=[];
$validate=false;
$holiday=false;
foreach($events as $event) {
$tmp=[
"id" => $event->getId(),
"start" => $event->getStart(),
"end" => $event->getEnd(),
];
array_push($tbevent,$tmp);
if($event->getValidate()) $validate=true;
if($event->getTask()->getNature()->getIsvacation()) $holiday=true;
}
if(!$this->isGranted('ROLE_ADMIN')&&!$this->isGranted('ROLE_MASTER')) {
$output=["return"=>"KO","error"=>"Cet intervant a déjà une tache à cette date","start"=>$datestart,"end"=>$dateend,"events"=>$tbevent];
return new Response(json_encode($output));
}
elseif($validate) {
$output=["return"=>"KO","error"=>"Cet intervant a sa semaine de validé","start"=>$datestart,"end"=>$dateend,"events"=>$tbevent];
return new Response(json_encode($output));
}
elseif($holiday) {
$output=["return"=>"KO","error"=>"Cet intervant a posé des congés sur cette période","start"=>$datestart,"end"=>$dateend,"events"=>$tbevent];
return new Response(json_encode($output));
}
elseif($task->getNature()->getIsvacation()) {
$output=["return"=>"KO","error"=>"Vous ne pouvez pas poser de congés à cette date, une intervention y est déjà plannifiée","start"=>$datestart,"end"=>$dateend,"events"=>null];
return new Response(json_encode($output));
}
}
// On regarde si un jour férié ne commence pas pendant une autre intervention ou qui se termine pendant une autre intervention ou qui a une intervention compris dans ses dates
$breakdays = $em->createQueryBuilder('breakday')
->select('breakday')
->from('App:Breakday','breakday')
->Where('breakday.start<=:start AND breakday.end >:start')
->orWhere('breakday.start<:end AND breakday.end >=:end')
->orWhere('breakday.start>:start AND breakday.end <:end')
->setParameter('start',$datestart)
->setParameter('end',$dateend)
->getQuery()->getResult();
if($breakdays) {
$tbevent=[];
foreach($breakdays as $breakday) {
$tmp=[
"id" => $breakday->getId(),
"start" => $breakday->getStart(),
"end" => $breakday->getEnd(),
];
array_push($tbevent,$tmp);
}
$output=["return"=>"KO","error"=>"Cet intervant a déjà une tache à cette date","start"=>$datestart,"end"=>$dateend,"events"=>$tbevent];
return new Response(json_encode($output));
}
// Création de l'évenement
$event = new Entity();
$event->setStart($datestart);
$event->setEnd($dateend);
$event->setDuration($duration);
$event->setAllday($allday);
$event->setExternalTrip($externaltrip);
$event->setDescription($description);
$event->setUser($user);
$event->setTask($task);
$event->setValidate(false);
$event->setValidateholiday(false);
$em->persist($event);
$em->flush();
if($task->getNature()->getIsvacation()){
$idevent=$event->getId();
//$valid_url = $this->generateUrl('app_validationholiday',[],true);
$valid_url = $this->router->generate('app_validationholiday', [], urlGeneratorInterface::ABSOLUTE_URL);
// $this->notificator->sendNotifAttenteValid("Congés en attente de validation", $iduser, $idevent, $valid_url);
}
$output=$this->formatEvent($event);
}
return new Response(json_encode($output));
}
public function update(Request $request)
{
$em = $this->getDoctrine()->getManager();
// Récupération des variables envoyées en post
$idevent = str_replace("A","",$request->request->get('idevent'));
$iduser = $request->request->get('iduser');
$idtask = $request->request->get('idtask');
$am = ($request->request->get('am')=="true");
$ap = ($request->request->get('ap')=="true");
$fgastreinte = ($request->request->get('fgastreinte')=="true");
$externaltrip = ($request->request->get('externaltrip')=="true");
$description = $request->request->get('description');
$user = $em->getRepository("App:User")->find($iduser);
$task = $em->getRepository("App:Task")->find($idtask);
// Controle de cohérance
if(!$user) {
$output=["return"=>"KO","error"=>"Utilisateur inconnu"];
return new Response(json_encode($output));
}
if(!$task) {
$output=["return"=>"KO","error"=>"Tâche inconnue"];
return new Response(json_encode($output));
}
// Astreinte
if($fgastreinte) {
// Une astreinte ne peut-etre un congès
if($task->getNature()->getIsvacation()) {
$output=["return"=>"KO","error"=>"Une astreinte ne peut être de nature congès"];
return new Response(json_encode($output));
}
// Recherche de l'event
$penalty = $em->getRepository("App:Penalty")->find($idevent);
if(!$penalty) {
$output=["return"=>"KO","error"=>"L'évènement n'existe plus"];
return new Response(json_encode($output));
}
if($penalty->getValidate()) {
$output=["return"=>"KO","error"=>"Modification impossible l'évènement a été validé"];
return new Response(json_encode($output));
}
// Modification de l'évenement
$penalty->setDescription($description);
$penalty->setUser($user);
$penalty->setTask($task);
$em->persist($penalty);
$em->flush();
$output=$this->formatEvent($penalty);
}
// Evenement
else {
// Recherche de l'event
$event = $em->getRepository("App:Event")->find($idevent);
if(!$event) {
$output=["return"=>"KO","error"=>"L'évènement n'existe plus"];
return new Response(json_encode($output));
}
if($event->getValidate()||$event->getValidateholiday()) {
$output=["return"=>"KO","error"=>"Modification impossible l'évènement a été validé"];
return new Response(json_encode($output));
}
$datestart=$event->getStart();
$dateend =$event->getEnd();
$duration=$dateend->diff($datestart)->d;
if($am&&$ap) {
if ($duration >= 1) {
$dateend->SetTime(0,0,-1);
}
$datestart->SetTime(0,0,0);
$dateend->add(new \DateInterval('P1D'));
$dateend->SetTime(0,0,0);
$duration=$dateend->diff($datestart)->d;
$allday=true;
}
else {
$duration=$dateend->diff($datestart)->d;
if ($duration == 1) {
$dateend->SetTime(0,0,-1);
}
$duration=0.5;
$allday=false;
if($am) {
$datestart->SetTime(9,0,0);
$dateend->SetTime(12,0,0);
}
else {
$datestart->SetTime(13,0,0);
$dateend->SetTime(17,0,0);
}
}
// On regarde si une tache ne commence pas pendant une autre intervention ou qui se termine pendant une autre intervention ou qui a une intervention compris dans ses dates
$events = $em->createQueryBuilder('event')
->select('event')
->from('App:Event','event')
->Where('event.user=:user AND event.start<=:start AND event.end >:start')
->orWhere('event.user=:user AND event.start<:end AND event.end >=:end')
->orWhere('event.user=:user AND event.start>:start AND event.end <:end')
->setParameter('user',$iduser)
->setParameter('start',$datestart)
->setParameter('end',$dateend)
->getQuery()->getResult();
if($events) {
$tbevent=[];
$validate=false;
$holiday=false;
foreach($events as $ev) {
if ($event->getId() != $ev->getId()) {
$tmp=[
"id" => $ev->getId(),
"task" => $ev->getTask()->getName(),
"start" => $ev->getStart(),
"end" => $ev->getEnd(),
];
array_push($tbevent,$tmp);
if($ev->getValidate()) $validate=true;
if($ev->getTask()->getNature()->getIsvacation()) $holiday=true;
}
}
if (sizeof($tbevent)>0) {
if(!$this->isGranted('ROLE_ADMIN')&&!$this->isGranted('ROLE_MASTER')) {
$output=["return"=>"KO","error"=>"Cet intervant a déjà une tache à cette date","start"=>$datestart,"end"=>$dateend,"events"=>$tbevent];
return new Response(json_encode($output));
}
elseif($validate) {
$output=["return"=>"KO","error"=>"Cet intervant a sa semaine de validé","start"=>$datestart,"end"=>$dateend,"events"=>$tbevent];
return new Response(json_encode($output));
}
elseif($holiday) {
$output=["return"=>"KO","error"=>"Cet intervant a posé des congés sur cette période","start"=>$datestart,"end"=>$dateend,"events"=>$tbevent];
return new Response(json_encode($output));
}
elseif($task->getNature()->getIsvacation()) {
$output=["return"=>"KO","error"=>"Vous ne pouvez pas poser de congés à cette date, une intervention y est déjà plannifiée","start"=>$datestart,"end"=>$dateend,"events"=>null];
return new Response(json_encode($output));
}
}
}
// Modification de l'évenement
$event->setStart($datestart);
$event->setEnd($dateend);
$event->setDescription($description);
$event->setDuration($duration);
$event->setAllday($allday);
$event->setExternalTrip($externaltrip);
$event->setUser($user);
$event->setTask($task);
$em->persist($event);
$em->flush();
$output=$this->formatEvent($event);
}
return new Response(json_encode($output));
}
public function delete(Request $request)
{
$em = $this->getDoctrine()->getManager();
// Récupération des variables envoyées en post
$idevent = str_replace("A","",$request->request->get('idevent'));
$fgastreinte = ($request->request->get('fgastreinte')=="true");
// Astreinte
if($fgastreinte) {
// Recherche de l'event
$penalty = $em->getRepository("App:Penalty")->find($idevent);
if(!$penalty) {
$output=["return"=>"KO","error"=>"L'évènement n'existe plus"];
return new Response(json_encode($output));
}
if($penalty->getValidate()) {
$output=["return"=>"KO","error"=>"Modification impossible l'évènement a été validé"];
return new Response(json_encode($output));
}
// Suppression de l'évenement
$em->remove($penalty);
$em->flush();
}
// Evenement
else {
// Recherche de l'event
$event = $em->getRepository("App:Event")->find($idevent);
if(!$event) {
$output=["return"=>"KO","error"=>"L'évènement n'existe plus"];
return new Response(json_encode($output));
}
if($event->getValidate()||$event->getValidateholiday()) {
$output=["return"=>"KO","error"=>"Modification impossible l'évènement a été validé"];
return new Response(json_encode($output));
}
// Suppression de l'évenement
$em->remove($event);
$em->flush();
}
$output=[];
return new Response(json_encode($output));
}
public function formatEvent($event) {
$event instanceof Penalty ? $editable=(!($event->getValidate())) : ($editable=(!($event->getValidate())&&!($event->getValidateholiday())));
// Si l'utilisateur en cours est différent de celui de l'event = seul MASTER - ADMIN peuvent modifier
if($event->getUser()!=$this->getUser()) {
if(!$this->isGranted('ROLE_ADMIN')&&!$this->isGranted('ROLE_MASTER'))
$editable=false;
}
$tmp= [
"id"=> ($event instanceof Penalty?"A":"").$event->getId(),
"title" => ($event instanceof Penalty?"ASTREINTE = ":"").$event->getTask()->getDisplayname(),
"start" => $event->getStart()->format("Y-m-d H:i"),
"end" => $event->getEnd()->format("Y-m-d H:i"),
"backgroundColor" => $event->getTask()->getColor(),
"borderColor" => $event->getTask()->getColor(),
"textColor" => "#ffffff",
"allDay" => $event->getAllday(),
"holiday" => $event->getTask()->getNature()->getIsvacation(),
"externaltrip" => ($event instanceof Penalty?false:$event->getExternalTrip()),
"editable" => $editable,
"durationEditable" => false,
"extendedProps" => [
"fulldescription" => ($event instanceof Penalty?"ASTREINTE\n":"").strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription(),
"description" => $event->getDescription(),
"userid" => $event->getUser()->getId(),
"username" => $event->getUser()->getUsername(),
"taskid" => $event->getTask()->getId(),
"avatar" => "/".$this->getParameter("appAlias")."/uploads/avatar/".$event->getUser()->getAvatar(),
"estimate" => !$event->getTask()->getNature()->getIsvacation() ? $event->getTask()->getDuration($event->getEnd())." / ".$event->getTask()->getQuantity(): "",
"locked" => ($event instanceof Penalty?$event->getValidate():$event->getValidate()||$event->getValidateholiday()),
"editable" => $editable,
"astreinte" => ($event instanceof Penalty)
]
];
return $tmp;
}
public function formatBreakday($event) {
$editable=false;
$tmp= [
"id"=> "B".$event->getId(),
"title" => "Jour Férié",
"start" => $event->getStart()->format("Y-m-d H:i"),
"end" => $event->getEnd()->format("Y-m-d H:i"),
"backgroundColor" => "#cdcdcd",
"borderColor" => "#cdcdcd",
"textColor" => "#ffffff",
"allDay" => true,
"externaltrip" => false,
"holiday" => false,
"editable" => false,
"durationEditable" => false,
"extendedProps" => [
"fulldescription" => "Jour Férié",
"description" => "Jour Férié",
"userid" => null,
"username" => "",
"taskid" => null,
"avatar" => "/".$this->getParameter("appAlias")."/uploads/avatar/".$this->getUser()->getAvatar(),
"estimate" => "",
"locked" => true,
"editable" => false,
"astreinte" => false
]
];
return $tmp;
}
protected function getErrorForm($id,$form,$request,$data,$mode) {
if ($form->get('submit')->isClicked()&&$mode=="delete") {
}
if ($form->get('submit')->isClicked() && $mode=="submit") {
}
if ($form->get('submit')->isClicked() && !$form->isValid()) {
$this->get('session')->getFlashBag()->clear();
$errors = $form->getErrors();
foreach( $errors as $error ) {
$request->getSession()->getFlashBag()->add("error", $error->getMessage());
}
}
}
}

View File

@@ -1,532 +0,0 @@
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Doctrine\ORM\EntityManagerInterface;
class ExportController extends AbstractController
{
private $data = "export";
private $route = "app_exportèview";
private $render = "Export/";
private $entity = "App:Export";
public function view(Request $request)
{
$em = $this->getDoctrine()->getManager();
$iduser = $this->get("session")->get("iduser");
$user = $em->getRepository("App:User")->find($iduser);
return $this->render($this->render.'list.html.twig',[
"useheader" => true,
"usesidebar" => true,
"user" => $user,
]);
}
public function export_full_worked_days(Request $request,$access=null): Response
{
$em = $this->getDoctrine()->getManager();
$nbmonth=$this->get("session")->get("nbmonth");
$iduser=$this->get("session")->get("iduser");
if($iduser=="all") {
$users=$em->getRepository("App:User")->findAll();
}
else {
$users=$em->getRepository("App:User")->findBy(["id"=>$iduser]);
}
$tbevents=[];
foreach($users as $user) {
if(in_array("ROLE_USER",$user->getRoles())) {
// Filtre par Service
if($this->get('session')->get('idservice')!="all") {
if($user->getService()->getId()!=$this->get('session')->get('idservice'))
continue;
}
$tmp=[
"id" => $user->getId(),
"user" => $user,
"events" => [],
];
// On formate le tableau de jour
$start=new \Datetime('first day of this month');
$start->sub(new \DateInterval('P'.$nbmonth.'M'));
$start->modify('previous monday');
$start->setTime(0,0,0);
$end = new \Datetime('first day of this month');
$end->add(new \DateInterval('P1M'));
$end->modify('next monday');
$end->setTime(23,59,0);
while($start<$end) {
$idday=$start->format("Ymd");
$idmonth=$start->format("Ym");
$tmp["events"][$idday] = [
"date"=>clone $start,
"allday"=>false,
"descriptionday"=>"",
"am"=>false,
"descriptionam"=>"",
"ap"=>false,
"descriptionap"=>"",
"astreinte"=>false,
"descriptionastreinte"=>"",
];
$start->add(new \DateInterval('P1D'));
}
// On formate le tableau des event
$start=new \Datetime('first day of this month');
$start->sub(new \DateInterval('P'.$nbmonth.'M'));
$start->modify('previous monday');
$start->setTime(0,0,0);
$end = new \Datetime('first day of this month');
$end->add(new \DateInterval('P1M'));
$end->modify('next monday');
$end->setTime(23,59,0);
$events = $em
->createQueryBuilder('event')
->select('event')
->from('App:Event','event')
->Where('event.user=:user AND event.start>=:start AND event.end <:end')
->setParameter('user',$user->getId())
->setParameter('start',$start)
->setParameter('end',$end)
->getQuery()->getResult();
foreach($events as $event) {
$idproject=$event->getTask()->getProject()->getId();
// Filtre par project
if($this->get('session')->get('idproject')!="all") {
if($idproject!=$this->get('session')->get('idproject'))
continue;
}
$isvac= $event->getTask()->getNature()->getIsvacation();
if($isvac) {continue;}
$st=clone $event->getStart();
while($st<$event->getEnd()) {
$idday=$st->format("Ymd");
if($event->getAllday()) {
$tmp["events"][$idday]["allday"]=true;
$tmp["events"][$idday]["descriptionday"]=strtoupper($event->getTask()->getDisplayname());
}
else {
// Matin ou après-midi ?
$time=$event->getStart()->format("H");
if($time==9) {
$tmp["events"][$idday]["am"]=true;
if(isset($tmp["events"][$idday]["ap"]) && $tmp["events"][$idday]["ap"]==true){$tmp["events"][$idday]["allday"]=true;}
$tmp["events"][$idday]["descriptionam"]=strtoupper($event->getTask()->getDisplayname());
}
else {
$tmp["events"][$idday]["ap"]=true;
if(isset($tmp["events"][$idday]["am"]) && $tmp["events"][$idday]["am"] ==true){$tmp["events"][$idday]["allday"]=true;}
$tmp["events"][$idday]["descriptionap"]=strtoupper($event->getTask()->getDisplayname());
}
}
$st->add(new \DateInterval('P1D'));
}
}
// On formate le tableau des astreintes
$start=new \Datetime('first day of this month');
$start->sub(new \DateInterval('P'.$nbmonth.'M'));
$start->modify('previous monday');
$start->setTime(0,0,0);
$end = new \Datetime('first day of this month');
$end->add(new \DateInterval('P1M'));
$end->modify('next monday');
$end->setTime(23,59,0);
$penaltys = $em
->createQueryBuilder('penalty')
->select('penalty')
->from('App:Penalty','penalty')
->Where('penalty.user=:user AND penalty.start>=:start AND penalty.end <:end')
->setParameter('user',$user->getId())
->setParameter('start',$start)
->setParameter('end',$end)
->getQuery()->getResult();
foreach($penaltys as $penalty) {
$idproject=$penalty->getTask()->getProject()->getId();
// Filtre par project
if($this->get('session')->get('idproject')!="all") {
if($idproject!=$this->get('session')->get('idproject'))
continue;
}
$st=clone $penalty->getStart();
while($st<$penalty->getEnd()) {
$idday=$st->format("Ymd");
if($penalty->getAllday()) {
$tmp["events"][$idday]["astreinte"]=true;
$tmp["events"][$idday]["descriptionastreinte"]=strtoupper($penalty->getTask()->getDisplayname());
}
$st->add(new \DateInterval('P1D'));
}
}
array_push($tbevents,$tmp);
}
}
$csv = $this->renderView('Export/export_full_worked_days.csv.twig', ["users" => $tbevents]);
$response = new Response($csv);
$response->headers->set('Content-Type', 'text/csv; charset=utf-8');
$response->headers->set('Content-Disposition', 'attachment; filename="export_full_worked_days.csv"');
return $response;
}
public function export_penalty_additional(Request $request,$access=null): Response
{
$em = $this->getDoctrine()->getManager();
$iduser = $this->get("session")->get("iduser");
$timers = $em->getRepository("App:Timer")->findBy(["user"=>$iduser]);
$tbtimers = [];
foreach ($timers as $timer) {
$isactive = $timer->getActivePenalty();
$isadditional = $timer->getAdditionalHour();
if ($isactive || $isadditional) {
$tbtimer["id"] = $timer->getId();
$tbtimer["taskname"] = $timer->getTask()->getDisplayname();
$tbtimer["user"] = $timer->getUser()->getUsername();
$tbtimer["start"] = $timer->getStart()->format("Y-m-d H:i");
$tbtimer["end"] = $timer->getEnd()->format("Y-m-d H:i");
$tbtimer["duration"] = $timer->getDuration();
$tbtimer["activepenalty"] = $timer->getActivePenalty();
$tbtimer["additionalhour"] = $timer->getAdditionalHour();
$tbtimer["description"] = $timer->getDescription();
array_push($tbtimers, $tbtimer);
}
}
$csv = $this->renderView('Export/export_penalty_additional.csv.twig', ["timers" => $tbtimers]);
$response = new Response($csv);
$response->headers->set('Content-Type', 'text/csv; charset=utf-8');
$response->headers->set('Content-Disposition', 'attachment; filename="export_penalty_additional.csv"');
return $response;
}
public function export_project_weekly(Request $request,$access=null): Response {
$nbmonth=$this->get("session")->get("nbmonth");
$em = $this->getDoctrine()->getManager();
$projects=$em->getRepository("App:Project")->findAll();
//Construction du tableau des projets
$tbprojects=[];
foreach($projects as $project) {
// Filtre par Customer
if($access=="customer") {
if($project->getCustomer()->getKeypass()!=$key)
continue;
}
// Filtre par Service
if($this->get('session')->get('idservice')!="all") {
if($project->getService()->getId()!=$this->get('session')->get('idservice'))
continue;
}
// Filtre par project
if($this->get('session')->get('idproject')!="all") {
if($project->getId()!=$this->get('session')->get('idproject'))
continue;
}
// // Ne prendre que les projets actif/inactif
// if($this->get('session')->get('activeproject')!=$project->getActive())
// continue;
$tbproject= [];
$tbproject["projectname"] = $project->getDisplayname();
$tbproject["name"] = $project->getname();
$tbproject["customer"] = $project->getCustomer()->getName();
$tbproject["service"] = $project->getService()->getName();
$tbproject["domaine"] = $project->getDomaine()->getName();
// Somme event validé par semaine
$start=new \Datetime('first day of this month');
$start->sub(new \DateInterval('P'.$nbmonth.'M'));
$start->modify('previous monday');
$start->setTime(0,0,0);
$endmonth = new \Datetime('first day of this month');
$endmonth->add(new \DateInterval('P1M'));
$endmonth->modify('next monday');
$endmonth->setTime(23,59,0);
$eventsbyweek = $em
->createQueryBuilder('event')
->select('event')
->from('App:Task','task')
->from('App:Event','event')
->Where('task.project=:project')
->andWhere('event.task=task')
->andWhere('event.end >=:start')
->andWhere('event.end <:end')
->andWhere('event.validate=:validate')
->setParameter('project',$project)
->setParameter('validate',true)
->setParameter('start',$start)
->setParameter('end',$endmonth)
->orderBy('event.start')
->getQuery()->getResult();
// foreach($eventsbyweek as $event) {
// if(!isset($tbproject["weeks"][$event->getStart()->format("Y")][$event->getStart()->format("o-\SW")])){
// $tbproject["weeks"][$event->getStart()->format("Y")][$event->getStart()->format("o-\SW")] = [
// "weeknumber" => $event->getStart()->format("o-\SW"),
// "cumul" => 0,
// ];
// }
// $tbproject["weeks"][$event->getStart()->format("Y")][$event->getStart()->format("o-\SW")]["cumul"] = $tbproject["weeks"][$event->getStart()->format("Y")][$event->getStart()->format("o-\SW")]["cumul"]+$event->getDuration();
// }
// foreach($eventsbyweek as $event) {
// if(!isset($tbproject["weeks_by_name"][$event->getStart()->format("Y")][$event->getStart()->format("o-\SW")]["users"])){
// $tbproject["weeks_by_name"][$event->getStart()->format("Y")][$event->getStart()->format("o-\SW")] = [
// "weeknumber" => $event->getStart()->format("o-\SW"),
// "users" => [],
// ];
// }
// if(!isset($tbproject["weeks_by_name"][$event->getStart()->format("Y")][$event->getStart()->format("o-\SW")]["users"][$event->getUser()->getId()])){
// $tbuser= [
// "id"=>$event->getUser()->getId(),
// "displayname"=>$event->getUser()->getDisplayname(),
// "cumul"=>0
// ];
// $tbproject["weeks_by_name"][$event->getStart()->format("Y")][$event->getStart()->format("o-\SW")]["users"][$event->getUser()->getId()] = $tbuser;
// }
// $tbproject["weeks_by_name"][$event->getStart()->format("Y")][$event->getStart()->format("o-\SW")]["users"][$event->getUser()->getId()]["cumul"] = $tbproject["weeks_by_name"][$event->getStart()->format("Y")][$event->getStart()->format("o-\SW")]["users"][$event->getUser()->getId()]["cumul"]+$event->getDuration();
// }
foreach($eventsbyweek as $event) {
if(!isset($tbproject["weeks_by_task_by_user"][$event->getStart()->format("Y")][$event->getStart()->format("o-\SW")]["tasks"])){
$tbproject["weeks_by_task_by_user"][$event->getStart()->format("Y")][$event->getStart()->format("o-\SW")] = [
"isoweek" => $event->getStart()->format("\SW"),
"isoyear" => $event->getStart()->format("o"),
"tasks" => [],
];
}
if(!isset($tbproject["weeks_by_task_by_user"][$event->getStart()->format("Y")][$event->getStart()->format("o-\SW")]["tasks"][$event->getTask()->getId()])){
$tbproject["weeks_by_task_by_user"][$event->getStart()->format("Y")][$event->getStart()->format("o-\SW")]["tasks"][$event->getTask()->getId()] = [
"taskname" => $event->getTask()->getName(),
"nature" => $event->getTask()->getNature()->getName(),
"users" => [],
];
}
if(!isset($tbproject["weeks_by_task_by_user"][$event->getStart()->format("Y")][$event->getStart()->format("o-\SW")]["tasks"][$event->getTask()->getId()]["users"][$event->getUser()->getId()])){
$tbuser= [
"id"=>$event->getUser()->getId(),
"displayname"=>$event->getUser()->getDisplayname(),
"cumul"=>0
];
$tbproject["weeks_by_task_by_user"][$event->getStart()->format("Y")][$event->getStart()->format("o-\SW")]["tasks"][$event->getTask()->getId()]["users"][$event->getUser()->getId()] = $tbuser;
}
$tbproject["weeks_by_task_by_user"][$event->getStart()->format("Y")][$event->getStart()->format("o-\SW")]["tasks"][$event->getTask()->getId()]["users"][$event->getUser()->getId()]["cumul"] = $tbproject["weeks_by_task_by_user"][$event->getStart()->format("Y")][$event->getStart()->format("o-\SW")]["tasks"][$event->getTask()->getId()]["users"][$event->getUser()->getId()]["cumul"]+$event->getDuration();
}
// Somme astreintes validé par semaine
$start=new \Datetime('first day of this month');
$start->sub(new \DateInterval('P'.$nbmonth.'M'));
$start->modify('previous monday');
$start->setTime(0,0,0);
$endmonth = new \Datetime('first day of this month');
$endmonth->add(new \DateInterval('P1M'));
$endmonth->modify('next monday');
$endmonth->setTime(23,59,0);
$penaltybyweek = $em
->createQueryBuilder('penalty')
->select('penalty')
->from('App:Task','task')
->from('App:Penalty','penalty')
->Where('task.project=:project')
->andWhere('penalty.task=task')
->andWhere('penalty.end >=:start')
->andWhere('penalty.end <:end')
->andWhere('penalty.validate=:validate')
->setParameter('project',$project)
->setParameter('validate',true)
->setParameter('start',$start)
->setParameter('end',$endmonth)
->orderBy('penalty.start')
->getQuery()->getResult();
// foreach($penaltybyweek as $penalty) {
// if(!isset($tbproject["weeks"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("o-\SW")])){
// $tbproject["weeks"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("o-\SW")] = [
// "weeknumber" => $penalty->getStart()->format("o-\SW"),
// "cumul" => 0,
// ];
// }
// $tbproject["weeks"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("o-\SW")]["cumul"] = $tbproject["weeks"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("o-\SW")]["cumul"]+$penalty->getDuration();
// }
// foreach($penaltybyweek as $penalty) {
// if(!isset($tbproject["weeks_by_name"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("o-\SW")]["users"])){
// $tbproject["weeks_by_name"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("o-\SW")] = [
// "weeknumber" => $penalty->getStart()->format("o-\SW"),
// "users" => [],
// ];
// }
// if(!isset($tbproject["weeks_by_name"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("o-\SW")]["users"][$penalty->getUser()->getId()])){
// $tbuser= [
// "id"=>$penalty->getUser()->getId(),
// "displayname"=>$penalty->getUser()->getDisplayname(),
// "cumul"=>0
// ];
// $tbproject["weeks_by_name"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("o-\SW")]["users"][$penalty->getUser()->getId()] = $tbuser;
// }
// $tbproject["weeks_by_name"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("o-\SW")]["users"][$penalty->getUser()->getId()]["cumul"] = $tbproject["weeks_by_name"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("o-\SW")]["users"][$penalty->getUser()->getId()]["cumul"]+$penalty->getDuration();
// }
foreach($penaltybyweek as $penalty) {
if(!isset($tbproject["weeks_by_task_by_user"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("o-\SW")]["tasks"])){
$tbproject["weeks_by_task_by_user"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("o-\SW")] = [
"isoweek" => $event->getStart()->format("\SW"),
"isoyear" => $event->getStart()->format("o"),
"tasks" => [],
];
}
if(!isset($tbproject["weeks_by_task_by_user"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("o-\SW")]["tasks"][$penalty->getTask()->getId()])){
$tbproject["weeks_by_task_by_user"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("o-\SW")]["tasks"][$penalty->getTask()->getId()] = [
"taskname" => $penalty->getTask()->getName(),
"nature" => $event->getTask()->getNature()->getName(),
"users" => [],
];
}
if(!isset($tbproject["weeks_by_task_by_user"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("o-\SW")]["tasks"][$penalty->getTask()->getId()]["users"][$penalty->getUser()->getId()])){
$tbuser= [
"id"=>$penalty->getUser()->getId(),
"displayname"=>$penalty->getUser()->getDisplayname(),
"cumul"=>0
];
$tbproject["weeks_by_task_by_user"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("o-\SW")]["tasks"][$penalty->getTask()->getId()]["users"][$penalty->getUser()->getId()] = $tbuser;
}
$tbproject["weeks_by_task_by_user"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("o-\SW")]["tasks"][$penalty->getTask()->getId()]["users"][$penalty->getUser()->getId()]["cumul"] = $tbproject["weeks_by_task_by_user"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("o-\SW")]["tasks"][$penalty->getTask()->getId()]["users"][$penalty->getUser()->getId()]["cumul"]+$penalty->getDuration();
}
$tbprojects[$project->getId()]=$tbproject;
}
$csv = $this->renderView('Export/export_project_weekly.csv.twig', ["projects" => $tbprojects]);
$response = new Response($csv);
$response->headers->set('Content-Type', 'text/csv; charset=utf-8');
$response->headers->set('Content-Disposition', 'attachment; filename="export_project_weekly.csv"');
return $response;
}
public function export_offers(Request $request,$access=null): Response {
$em = $this->getDoctrine()->getManager();
$projects=$em->getRepository("App:Project")->findAll();
//Construction du tableau des projets
$tbprojects=[];
foreach($projects as $project) {
// Filtre par Customer
if($access=="customer") {
if($project->getCustomer()->getKeypass()!=$key)
continue;
}
// Filtre par Service
if($this->get('session')->get('idservice')!="all") {
if($project->getService()->getId()!=$this->get('session')->get('idservice'))
continue;
}
// Filtre par project
if($this->get('session')->get('idproject')!="all") {
if($project->getId()!=$this->get('session')->get('idproject'))
continue;
}
$tbproject["name"] = $project->getname();
$tbproject["customer"] = $project->getCustomer()->getName();
$tbproject["offers"] = $project->getOffers();
$tbprojects[$project->getId()]=$tbproject;
}
$csv = $this->renderView('Export/export_offers.csv.twig', ["projects" => $tbprojects]);
$response = new Response($csv);
$response->headers->set('Content-Type', 'text/csv; charset=utf-8');
$response->headers->set('Content-Disposition', 'attachment; filename="export_offers.csv"');
return $response;
}
public function export_month_charged_days(Request $request,$access=null): Response {
$em = $this->getDoctrine()->getManager();
$nbmonth=$this->get("session")->get("nbmonth");
$tbevents=[];
// On formate le tableau des event
$start=new \Datetime('first day of this month');
$start->sub(new \DateInterval('P'.$nbmonth.'M'));
$start->setTime(0,0,0);
$end = new \Datetime('first day of this month');
$end->add(new \DateInterval('P1M'));
$end->setTime(23,59,0);
$events = $em
->createQueryBuilder('event')
->select('event')
->from('App:Event','event')
->Where('event.start>=:start AND event.end <:end')
->setParameter('start',$start)
->setParameter('end',$end)
->getQuery()->getResult();
foreach($events as $event) {
if (!isset($tbevents[$event->getStart()->format("m")])) {
$tbevents[$event->getStart()->format("m")]["f"]=0;
$tbevents[$event->getStart()->format("m")]["nf"]=0;
}
if ($event->getTask()->getNature()->getName() == "Prestation") {
if (!isset($tbevents[$event->getStart()->format("m")])){
$tbevents[$event->getStart()->format("m")]['f'] = $event->getDuration();
}else{
$tbevents[$event->getStart()->format("m")]['f'] += $event->getDuration();
}
}
if ($event->getTask()->getNature()->getName() != "Prestation") {
if (!isset($tbevents[$event->getStart()->format("m")])){
$tbevents[$event->getStart()->format("m")]['nf'] = $event->getDuration();
}else{
$tbevents[$event->getStart()->format("m")]['nf'] += $event->getDuration();
}
}
}
$csv = $this->renderView('Export/export_month_charged_days.csv.twig', ["events" => $tbevents]);
$response = new Response($csv);
$response->headers->set('Content-Type', 'text/csv; charset=utf-8');
$response->headers->set('Content-Disposition', 'attachment; filename="export_month_charged_days.csv"');
return $response;
}
}

View File

@@ -1,140 +0,0 @@
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class HomeController extends AbstractController
{
public function home()
{
return $this->redirectToRoute("app_synthese");
/*
if($this->getUser()) {
return $this->redirectToRoute("app_synthese");
}
else {
return $this->render('Home/home.html.twig',[
"useheader" => true,
"usesidebar" => false,
]);
}
*/
}
public function customer()
{
return $this->render('Home/customer.html.twig',[
"useheader" => true,
"usesidebar" => false,
]);
}
public function selectmonth(Request $request)
{
$nbmonth = $request->request->get('nbmonth');
$this->get('session')->set('nbmonth',$nbmonth);
$output=["return"=>"OK"];
return new Response(json_encode($output));
}
public function selectuser(Request $request)
{
$iduser = $request->request->get('iduser');
$this->get('session')->set('iduser',$iduser);
$output=["return"=>"OK"];
return new Response(json_encode($output));
}
public function selectproject(Request $request)
{
$idproject = $request->request->get('idproject');
$this->get('session')->set('idproject',$idproject);
$output=["return"=>"OK"];
return new Response(json_encode($output));
}
public function selectservice(Request $request)
{
$em = $this->getDoctrine()->getManager();
$iddomaine = $this->get('session')->get('iddomaine');
$idservice = $request->request->get('idservice');
$this->get('session')->set('idservice',$idservice);
$output=["return"=>"OK"];
// On recalcul les users
if($idservice=="all")
$users=$em->getRepository("App:User")->findAll();
else
$users=$em->getRepository("App:User")->findBy(["service"=>$idservice]);
$tbusers=[];
$haveuser=false;
foreach($users as $user) {
if(in_array("ROLE_USER",$user->getRoles())) {
if($user->getId()==$this->get('session')->get('iduser'))
$haveuser=true;
$tmp=[
"id"=>$user->getId(),
"displayname"=>$user->getDisplayname()
];
array_push($tbusers,$tmp);
}
}
$this->get('session')->set('users',$tbusers);
if(!$haveuser) $this->get('session')->set("iduser","all");
// On recalcul les projets
$this->regenProjects($idservice,$iddomaine);
return new Response(json_encode($output));
}
public function selectdomaine(Request $request)
{
$iddomaine = $request->request->get('iddomaine');
$idservice = $this->get('session')->get('idservice');
$this->get('session')->set('iddomaine',$iddomaine);
$output=["return"=>"OK"];
// On recalcul les projets
$this->regenProjects($idservice,$iddomaine);
return new Response(json_encode($output));
}
private function regenProjects($idservice,$iddomaine) {
$em = $this->getDoctrine()->getManager();
if($idservice=="all"&&$iddomaine=="all")
$projects=$em->getRepository('App:Project')->findBy(["active"=>$this->get('session')->get('activeproject')]);
elseif($idservice!="all"&&$iddomaine!="all")
$projects=$em->getRepository('App:Project')->findBy(["active"=>$this->get('session')->get('activeproject'),"service"=>$idservice,"domaine"=>$iddomaine]);
elseif($idservice!="all")
$projects=$em->getRepository('App:Project')->findBy(["active"=>$this->get('session')->get('activeproject'),"service"=>$idservice]);
else
$projects=$em->getRepository('App:Project')->findBy(["active"=>$this->get('session')->get('activeproject'),"domaine"=>$iddomaine]);
$tbprojects=[];
$haveproject=false;
foreach($projects as $project) {
if($project->getId()==$this->get('session')->get('idproject'))
$haveproject=true;
$tmp=[
"id"=>$project->getId(),
"displayname"=>$project->getDisplayname()
];
array_push($tbprojects,$tmp);
}
$this->get('session')->set('projects',$tbprojects);
if(!$haveproject) $this->get('session')->set("idproject","all");
}
}

View File

@@ -1,285 +0,0 @@
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Form\FormError;
use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
use App\Entity\Offer as Entity;
use App\Form\OfferType as Form;
use App\Form\OfferdolibarrType as Formdollibar;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
class OfferController extends AbstractController
{
private $data = "offer";
private $route = "app_offer";
private $render = "Offer/";
private $entity = "App:Offer";
private $dolibarrapi;
private $knpSnappy;
public function __construct(\Knp\Snappy\Pdf $knpSnappy, \App\Service\dolibarrApi $dolibarrapi) {
$this->knpSnappy = $knpSnappy;
$this->dolibarrapi = $dolibarrapi;
}
public function list(Request $request)
{
$em = $this->getDoctrine()->getManager();
$services=$em->getRepository("App:Service")->findAllOfferActive($this->get('session')->get('activeproject'),$this->get('session')->get('activeoffer'),$this->get('session')->get('idservice'));
$domaines=$em->getRepository("App:Domaine")->findAllOfferActive($this->get('session')->get('activeproject'),$this->get('session')->get('activeoffer'),$this->get('session')->get('iddomaine'));
if($request->query->get('fgprint')) {
$render = $this->renderView($this->render.'list.html.twig',[
"services" => $services,
"domaines" => $domaines,
"useheader" => true,
"usesidebar" => true,
"fgprint" => true,
]);
return new PdfResponse(
$this->knpSnappy->getOutputFromHtml($render,["orientation"=>"Landscape"]),
'propositions.pdf'
);
}
else {
return $this->render($this->render.'list.html.twig',[
"services" => $services,
"domaines" => $domaines,
"useheader" => true,
"usesidebar" => true,
"doliactive" => $this->getParameter('doliActive'),
]);
}
}
public function submit(Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data = new Entity();
// Création du formulaire
$form = $this->createForm(Form::class,$data,array("mode"=>"submit"));
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm(null,$form,$request,$data,"submit");
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData();
$em->persist($data);
$em->flush();
// Retour à la liste
return $this->redirectToRoute($this->route);
}
// Affichage du formulaire
return $this->render($this->render.'edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
$this->data => $data,
'mode' => 'submit',
'form' => $form->createView()
]);
}
public function update($id,Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data=$em->getRepository($this->entity)->find($id);
// Création du formulaire
$form = $this->createForm(Form::class,$data,array("mode"=>"update"));
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm(null,$form,$request,$data,"update");
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData();
$em->persist($data);
$em->flush();
// Retour à la liste
return $this->redirectToRoute($this->route);
}
// Affichage du formulaire
if($request->query->get('fgprint')) {
$render = $this->renderView($this->render.'edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
$this->data => $data,
'mode' => 'update',
'form' => $form->createView(),
"fgprint" => true,
]);
return new PdfResponse(
$this->knpSnappy->getOutputFromHtml($render),
'proposition.pdf'
);
}
else {
return $this->render($this->render.'edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
$this->data => $data,
'mode' => 'update',
'form' => $form->createView()
]);
}
}
public function delete($id,Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data=$em->getRepository($this->entity)->find($id);
// Controle avant suppression
$error=false;
if($error)
return $this->redirectToRoute($this->route."_update",["id"=>$id]);
else {
try {
$em->remove($data);
$em->flush();
}
catch(\Doctrine\DBAL\DBALException $e) {
// Création du formulaire
$this->get('session')->getFlashBag()->add('error', 'Impossible de supprimer cet enregistrement');
return $this->redirectToRoute($this->route."_update",["id"=>$id]);
}
// Retour à la liste
return $this->redirectToRoute($this->route);
}
}
public function activeproject() {
$this->get('session')->set('activeproject',!$this->get('session')->get('activeproject'));
return $this->redirectToRoute($this->route);
}
public function activeoffer() {
$this->get('session')->set('activeoffer',!$this->get('session')->get('activeoffer'));
return $this->redirectToRoute($this->route);
}
public function viewservice() {
$this->get('session')->set('viewservice',!$this->get('session')->get('viewservice'));
return $this->redirectToRoute($this->route);
}
public function dolibarr(Request $request) {
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data = new Entity();
// Création du formulaire
$form = $this->createForm(Formdollibar::class,$data,array("mode"=>"submit"));
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm(null,$form,$request,$data,"submit");
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData();
$tasks=json_decode($form->get("tasks")->getData());
foreach($tasks as $key=>$value) {
dump($value);
$iddolibarr=$value->idoffer."|".$value->idline;
// Recherche offer sur cet id
$offer=$em->getRepository($this->entity)->findOneBy(["iddolibarr" => $iddolibarr]);
if(!$offer) {
$offer=new Entity();
$offer->setName($data->getName()." = ".$value->label);
$offer->setRef($value->idoffer);
$offer->setIddolibarr($iddolibarr);
$offer->setProject($data->getProject());
$offer->setValidate(0);
$offer->setCost(0);
$offer->setActive(true);
// Déterminer le service
$services=$em->getRepository("App\Entity\Service")->findAll();
$myservice=$data->getProject()->getService();
foreach($services as $service) {
if($service->getDolibarrcode()) {
if(stripos($value->ref,$service->getDolibarrcode())===1)
$myservice=$service;
}
}
$offer->setService($service);
}
$offer->setQuantity($value->qty);
$offer->setPu($value->price);
$em->persist($offer);
$em->flush();
}
/*
$em->persist($data);
$em->flush();
// Retour à la liste
return $this->redirectToRoute($this->route);
*/
}
return $this->render($this->render.'dolibarr.html.twig', [
'useheader' => true,
'usesidebar' => true,
'form' => $form->createView()
]);
}
public function getDolibarr(Request $request){
$ref = $request->request->get('ref');
$order = $this->dolibarrapi->getOrder($ref);
return new JsonResponse($order);
}
protected function getErrorForm($id,$form,$request,$data,$mode) {
if ($form->get('submit')->isClicked()&&$mode=="delete") {
}
if ($form->get('submit')->isClicked() && $mode=="submit") {
}
if ($form->get('submit')->isClicked() && !$form->isValid()) {
$this->get('session')->getFlashBag()->clear();
$errors = $form->getErrors();
foreach( $errors as $error ) {
$request->getSession()->getFlashBag()->add("error", $error->getMessage());
}
}
}
}

View File

@@ -1,340 +0,0 @@
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Form\FormError;
use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
use App\Entity\Project as Entity;
use App\Form\ProjectType as Form;
use App\Entity\Userproject as Userproject;
class ProjectController extends AbstractController
{
private $data = "project";
private $route = "app_project";
private $render = "Project/";
private $entity = "App:Project";
private $knpSnappy;
public function __construct(\Knp\Snappy\Pdf $knpSnappy) { $this->knpSnappy = $knpSnappy; }
public function list(Request $request)
{
$em = $this->getDoctrine()->getManager();
$services=$em->getRepository("App:Service")->findAllProjectActive($this->get('session')->get('activeproject'),$this->get('session')->get('idservice'));
$domaines=$em->getRepository("App:Domaine")->findAllProjectActive($this->get('session')->get('activeproject'),$this->get('session')->get('iddomaine'));
if($request->query->get('fgprint')) {
$render = $this->renderView($this->render.'list.html.twig',[
"services" => $services,
"domaines" => $domaines,
"useheader" => true,
"usesidebar" => true,
"fgprint" => true,
]);
$render=str_replace("file:///","/var/www/html/",$render);
return new PdfResponse(
$this->knpSnappy->getOutputFromHtml($render,["orientation"=>"Landscape"]),
'projets.pdf'
);
}
else {
return $this->render($this->render.'list.html.twig',[
"services" => $services,
"domaines" => $domaines,
"useheader" => true,
"usesidebar" => true,
]);
}
}
public function submit(Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data = new Entity();
// Création du formulaire
$form = $this->createForm(Form::class,$data,array("mode"=>"submit"));
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm(null,$form,$request,$data,"submit");
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData();
$em->persist($data);
$em->flush();
$this->refreshsession();
// Retour à la liste
return $this->redirectToRoute($this->route."_users",["id"=>$data->getId()]);
}
// Affichage du formulaire
return $this->render($this->render.'edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
$this->data => $data,
'mode' => 'submit',
'form' => $form->createView()
]);
}
public function update($id,Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data=$em->getRepository($this->entity)->find($id);
// Création du formulaire
$form = $this->createForm(Form::class,$data,array("mode"=>"update"));
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm(null,$form,$request,$data,"update");
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData();
$em->persist($data);
$em->flush();
$this->refreshsession();
// Retour à la liste
return $this->redirectToRoute($this->route);
}
// Affichage du formulaire
if($request->query->get('fgprint')) {
$render = $this->renderView($this->render.'edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
$this->data => $data,
'mode' => 'update',
'form' => $form->createView(),
"fgprint" => true,
]);
return new PdfResponse(
$this->knpSnappy->getOutputFromHtml($render),
'projet.pdf'
);
}
else {
return $this->render($this->render.'edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
$this->data => $data,
'mode' => 'update',
'form' => $form->createView()
]);
}
}
public function delete($id,Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data=$em->getRepository($this->entity)->find($id);
// Controle avant suppression
$error=false;
if($error)
return $this->redirectToRoute($this->route."_update",["id"=>$id]);
else {
try {
$em->remove($data);
$em->flush();
}
catch(\Doctrine\DBAL\DBALException $e) {
// Création du formulaire
$this->get('session')->getFlashBag()->add('error', 'Impossible de supprimer cet enregistrement');
return $this->redirectToRoute($this->route."_update",["id"=>$id]);
}
$this->refreshsession();
// Retour à la liste
return $this->redirectToRoute($this->route);
}
}
public function select(Request $request) {
// S'assurer que c'est un appel ajax
if (!$request->isXmlHttpRequest()) {
//return new JsonResponse(array('message' => 'Interdit'), 400);
}
$output=array();
$em = $this->getDoctrine()->getManager();
$page_limit=$request->query->get('page_limit');
$q=$request->query->get('q');
$qb = $em->createQueryBuilder();
$qb->select("project")
->from("App:Project","project")
->from("App:Customer", "customer")
->where("project.name LIKE :value")
->orWhere("customer.name LIKE :value")
->andWhere("project.customer=customer")
->setParameter("value", "%".$q."%")
->orderBy('customer.name');
$datas=$qb->setFirstResult(0)->getQuery()->getResult();
foreach($datas as $data) {
array_push($output,array("id"=>$data->getId(),"text"=>$data->getDisplayname()));
}
$output["results"]=$output;
$response = new Response(json_encode($output));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
public function users($id, Request $request) {
$em = $this->getDoctrine()->getManager();
$data=$em->getRepository($this->entity)->find($id);
// Controle avant affichage
$error=false;
if($error)
return $this->redirectToRoute($this->route."_update",["id"=>$id]);
else {
$jobs=$em->getRepository("App:Job")->findBy(["type"=>"Projet"]);
$users=$em->getRepository("App:User")->findAll();
$userprojects=[];
foreach($jobs as $job) {
$entitys=$em->getRepository("App:Userproject")->findBy(["project"=>$data,"job"=>$job]);
if($entitys) $userprojects[$job->getId()]= [
"id"=>$job->getId(),
"name"=>$job->getName(),
"users"=>$entitys
];
}
return $this->render($this->render.'users.html.twig', [
'useheader' => true,
'usesidebar' => true,
$this->data => $data,
'jobs' => $jobs,
'users' => $users,
'userprojects' => $userprojects
]);
}
}
public function usersadd(Request $request) {
$em = $this->getDoctrine()->getManager();
$idproject = $request->request->get('idproject');
$iduser = $request->request->get('iduser');
$idjob = $request->request->get('idjob');
$project=$em->getRepository("App:Project")->find($idproject);
$user=$em->getRepository("App:User")->find($iduser);
$job=$em->getRepository("App:Job")->find($idjob);
if(!$project||!$user||!$job) {
$output=["return"=>"KO","error"=>"Un élément a été supprimé entre temps "];
return new Response(json_encode($output));
}
$userproject = $em->getRepository("App:Userproject")->findBy(["user"=>$user,"project"=>$project,"job"=>$job]);
if($userproject) {
$output=["return"=>"KO","error"=>"Cet utilisateur a déjà ce metier sur ce projet"];
return new Response(json_encode($output));
}
$userproject= new Userproject();
$userproject->setUser($user);
$userproject->setJob($job);
$userproject->setProject($project);
$em->persist($userproject);
$em->flush();
return new Response(json_encode([]));
}
public function usersdel(Request $request) {
$em = $this->getDoctrine()->getManager();
$iduser = $request->request->get('iduser');
$userproject = $em->getRepository("App:Userproject")->find($iduser);
if($userproject) {
$em->remove($userproject);
$em->flush();
$this->refreshsession();
}
return new Response(json_encode([]));
}
public function activeproject() {
$this->get('session')->set('activeproject',!$this->get('session')->get('activeproject'));
$this->refreshsession();
return $this->redirectToRoute($this->route);
}
public function viewservice() {
$this->get('session')->set('viewservice',!$this->get('session')->get('viewservice'));
$this->refreshsession();
return $this->redirectToRoute($this->route);
}
protected function refreshsession() {
$em = $this->getDoctrine()->getManager();
$tbprojects=[];
$haveproject=false;
$projects=$em->getRepository('App:Project')->findBy(["active"=>$this->get('session')->get('activeproject')]);
foreach($projects as $project) {
if($project->getId()==$this->get('session')->get('idproject'))
$haveproject=true;
$tmp=[
"id"=>$project->getId(),
"displayname"=>$project->getDisplayname()
];
array_push($tbprojects,$tmp);
}
if(!$haveproject) $this->get('session')->set("idproject","all");
$this->get('session')->set('projects',$tbprojects);
}
protected function getErrorForm($id,$form,$request,$data,$mode) {
if ($form->get('submit')->isClicked()&&$mode=="delete") {
}
if ($form->get('submit')->isClicked() && $mode=="submit") {
}
if ($form->get('submit')->isClicked() && !$form->isValid()) {
$this->get('session')->getFlashBag()->clear();
$errors = $form->getErrors();
foreach( $errors as $error ) {
$request->getSession()->getFlashBag()->add("error", $error->getMessage());
}
}
}
}

View File

@@ -1,1130 +0,0 @@
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
class ReportController extends AbstractController
{
private $knpSnappy;
public function __construct(\Knp\Snappy\Pdf $knpSnappy) { $this->knpSnappy = $knpSnappy; }
public function synthese(Request $request)
{
$em = $this->getDoctrine()->getManager();
$nbmonth=$this->get("session")->get("nbmonth");
$iduser=$this->get("session")->get("iduser");
if($iduser=="all") {
$users=$em->getRepository("App:User")->findAll();
}
else {
$users=$em->getRepository("App:User")->findBy(["id"=>$iduser]);
}
$tbevents=[];
foreach($users as $user) {
if(in_array("ROLE_USER",$user->getRoles())) {
// Filtre par Service
if($this->get('session')->get('idservice')!="all") {
if($user->getService()->getId()!=$this->get('session')->get('idservice'))
continue;
}
$tmp=[
"id" => $user->getId(),
"user" => $user,
"events" => [],
];
// On formate le tableau de jour
$start=new \Datetime('first day of this month');
$start->modify('last Monday');
$end=new \Datetime('first day of this month');
$end->add(new \DateInterval('P'.$nbmonth.'M'));
$end->modify('first Monday');
while($start<$end) {
$idday=$start->format("Ymd");
$idmonth=$start->format("Ym");
$tmp["events"][$idday] = [
"date"=>clone $start,
"events"=>[],
"astreinte"=>false,
"colorastreinte"=>"",
"descriptionastreinte"=>"",
];
$start->add(new \DateInterval('P1D'));
}
// On formate le tableau des event
$start=new \Datetime('first day of this month');
$start->modify('last Monday');
$end=new \Datetime('first day of this month');
$end->add(new \DateInterval('P'.$nbmonth.'M'));
$end->modify('first Monday');
$events = $em
->createQueryBuilder('event')
->select('event')
->from('App:Event','event')
->Where('event.user=:user AND event.start>=:start AND event.end <:end')
->setParameter('user',$user->getId())
->setParameter('start',$start)
->setParameter('end',$end)
->getQuery()->getResult();
foreach($events as $event) {
$idproject=$event->getTask()->getProject()->getId();
// Filtre par project
if($this->get('session')->get('idproject')!="all") {
if($idproject!=$this->get('session')->get('idproject'))
continue;
}
$st=clone $event->getStart();
while($st<$event->getEnd()) {
$idday=$st->format("Ymd");
if($event->getAllday()) {
$tmp["events"][$idday]["events"][$event->getId()]=["allday"=>true,"colorday"=>$event->getTask()->getColor(),"descriptionday"=>strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription()];
}
else {
// Matin ou après-midi ?
$time=$event->getStart()->format("H");
if($time==9) {
$tmp["events"][$idday]["events"][$event->getId()]=["allday"=>false,"am"=>true,"ap"=>false,"coloram"=>$event->getTask()->getColor(),"descriptionam"=>strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription()];
}
else {
$tmp["events"][$idday]["events"][$event->getId()]=["allday"=>false,"am"=>false,"ap"=>true,"colorap"=>$event->getTask()->getColor(),"descriptionap"=>strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription()];
}
}
$st->add(new \DateInterval('P1D'));
}
}
// On formate le tableau des astreintes
$start=new \Datetime('first day of this month');
$start->modify('last Monday');
$end=new \Datetime('first day of this month');
$end->add(new \DateInterval('P'.$nbmonth.'M'));
$end->modify('first Monday');
$penaltys = $em
->createQueryBuilder('penalty')
->select('penalty')
->from('App:Penalty','penalty')
->Where('penalty.user=:user AND penalty.start>=:start AND penalty.end <:end')
->setParameter('user',$user->getId())
->setParameter('start',$start)
->setParameter('end',$end)
->getQuery()->getResult();
foreach($penaltys as $penalty) {
$idproject=$penalty->getTask()->getProject()->getId();
// Filtre par project
if($this->get('session')->get('idproject')!="all") {
if($idproject!=$this->get('session')->get('idproject'))
continue;
}
$st=clone $penalty->getStart();
while($st<$penalty->getEnd()) {
$idday=$st->format("Ymd");
if($penalty->getAllday()) {
$tmp["events"][$idday]["astreinte"]=true;
$tmp["events"][$idday]["colorastreinte"]=$penalty->getTask()->getColor();
$tmp["events"][$idday]["descriptionastreinte"]=strtoupper($penalty->getTask()->getDisplayname())."\n\n".$penalty->getDescription();
}
$st->add(new \DateInterval('P1D'));
}
}
// On formate le tableau des jours fériés
$start=new \Datetime('first day of this month');
$start->modify('last Monday');
$end=new \Datetime('first day of this month');
$end->add(new \DateInterval('P'.$nbmonth.'M'));
$end->modify('first Monday');
$breakdays = $em
->createQueryBuilder('breakday')
->select('breakday')
->from('App:Breakday','breakday')
->Where('breakday.start>=:start AND breakday.end <:end')
->setParameter('start',$start)
->setParameter('end',$end)
->getQuery()->getResult();
foreach($breakdays as $breakday) {
$st=clone $breakday->getStart();
while($st<$breakday->getEnd()) {
$idday=$st->format("Ymd");
$tmp["events"][$idday]["events"][-2000]["allday"]=true;
$tmp["events"][$idday]["events"][-2000]["colorday"]="#6c7a89";
$tmp["events"][$idday]["events"][-2000]["descriptionday"]="Jour Férié";
$st->add(new \DateInterval('P1D'));
}
}
array_push($tbevents,$tmp);
}
}
//dump($tbevents);
if($request->query->get('fgprint')) {
$render = $this->renderView('Report/synthese.html.twig',[
"useheader" => true,
"usesidebar" => ($this->getUser()),
"users" => $tbevents,
"fgprint" => true,
]);
return new PdfResponse(
$this->knpSnappy->getOutputFromHtml($render),
'synthese.pdf'
);
}
else {
return $this->render('Report/synthese.html.twig',[
"useheader" => true,
"usesidebar" => ($this->getUser()),
"users" => $tbevents,
]);
}
}
function planning($key=null,$access=null,Request $request) {
$em = $this->getDoctrine()->getManager();
$iduser=$this->get("session")->get("iduser");
$nbmonth=$this->get("session")->get("nbmonth");
if($iduser=="all") {
$users=$em->getRepository("App:User")->findAll();
}
else {
$users=$em->getRepository("App:User")->findBy(["id"=>$iduser]);
}
$projects=$em->getRepository("App:Project")->findAll();
$tbprojects=[];
foreach($projects as $project) {
// Filtre par Customer
if($access=="customer") {
if($project->getCustomer()->getKeypass()!=$key)
continue;
if(!$project->getVisible())
continue;
}
// Filtre par Service
if($this->get('session')->get('idservice')!="all") {
if($project->getService()->getId()!=$this->get('session')->get('idservice'))
continue;
}
// Filtre par Domaine
if($this->get('session')->get('iddomaine')!="all") {
if($project->getDomaine()->getId()!=$this->get('session')->get('iddomaine'))
continue;
}
// Filtre par project
if($this->get('session')->get('idproject')!="all") {
if($project->getId()!=$this->get('session')->get('idproject'))
continue;
}
// Ne prendre que les projets actif/inactif
if($this->get('session')->get('activeproject')!=$project->getActive())
continue;
// Ne pas prendre les projects sans event dans la durée
$start=new \Datetime('first day of this month');
$start->setTime(0,0,0);
$end=new \Datetime('first day of this month');
$end->add(new \DateInterval('P'.$nbmonth.'M'));
$end->setTime(0,0,0);
$events = $em
->createQueryBuilder('event')
->select('event')
->from('App:Task','task')
->from('App:Event','event')
->Where('task.project=:project')
->andWhere('event.task=task')
->andWhere('event.start>=:start')
->andWhere('event.end <=:end')
->setParameter('project',$project)
->setParameter('start',$start)
->setParameter('end',$end)
->getQuery()->getResult();
if(!$events)
continue;
$validate=$em->getRepository("App:Project")->sumDuration($project->getId(),true);
$planified=$em->getRepository("App:Project")->sumDuration($project->getId(),false);
$estimate=$em->getRepository("App:Project")->sumEstimate($project->getId());
$proposed=$em->getRepository("App:Project")->sumProposed($project->getId());
$tbproject = [
"id"=>$project->getId(),
"displayname"=>$project->getDisplayname(),
"validate"=>$validate,
"planified"=>$planified,
"estimate"=>$estimate,
"proposed"=>$proposed,
"months"=>[],
];
// Formater les mois
$start=new \Datetime('first day of this month');
$start->setTime(0,0,0);
$end=new \Datetime('first day of this month');
$end->add(new \DateInterval('P'.$nbmonth.'M'));
$end->setTime(0,0,0);
while($start<$end) {
$tbproject["months"][$start->format("Ym")]=[
"monthid"=> $start->format("Ym"),
"monthlabel"=>$start->format("m/Y"),
"days"=>[],
"users"=>[],
"tasks"=>[]
];
// Init du tableau des utilisateurs pour le mois
foreach($users as $user) {
$tbuser= [
"id"=>$user->getId(),
"displayname"=>$user->getDisplayname(),
"days"=>[]
];
$tbproject["months"][$start->format("Ym")]["users"][$user->getId()]=$tbuser;
}
// Init des taches par mois
$endmonth=clone $start;
$endmonth->add(new \DateInterval('P1M'));
$events = $em
->createQueryBuilder('event')
->select('task.id, task.name, SUM(event.duration) as somme')
->from('App:Task','task')
->from('App:Event','event')
->Where('task.project=:project')
->andWhere('event.task=task')
->andWhere('event.start >=:start')
->andWhere('event.end <=:end')
->setParameter('project',$project)
->setParameter('start',$start)
->setParameter('end',$endmonth)
->groupBy('task.id')
->getQuery()->getResult();
foreach($events as $event) {
$tbtask= [
"id"=>$event["id"],
"displayname"=>$event["name"],
"duration"=>$event["somme"]
];
$tbproject["months"][$start->format("Ym")]["tasks"][$event["id"]]=$tbtask;
}
$start->add(new \DateInterval('P1M'));
}
// Formater les jours
$start=new \Datetime('first day of this month');
$start->setTime(0,0,0);
$end=new \Datetime('first day of this month');
$end->add(new \DateInterval('P'.$nbmonth.'M'));
$end->sub(new \DateInterval('P1D'));
$end->setTime(23,59,0);
while($start<$end) {
$tbday=[
"date"=>clone $start,
"daylabel"=>$this->frmDay($start->format("w")),
"daycolor"=>$this->frmColorday($start->format("w")),
"daynumber"=>$start->format("d"),
];
$tbproject["months"][$start->format("Ym")]["days"][$start->format("Ymd")]=$tbday;
foreach($users as $user) {
$tbday=[
"date"=>clone $start,
"duration"=>0,
"astreinte"=>0,
"daycolor"=>$this->frmColorday($start->format("w")),
];
$tbproject["months"][$start->format("Ym")]["users"][$user->getId()]["days"][$start->format("Ymd")]=$tbday;
}
$start->add(new \DateInterval('P1D'));
}
$tbprojects[$project->getId()]=$tbproject;
}
// Formater les utilisateurs
$start=new \Datetime('first day of this month');
$start->setTime(0,0,0);
$end=new \Datetime('first day of this month');
$end->add(new \DateInterval('P'.$nbmonth.'M'));
$end->setTime(0,0,0);
foreach($users as $user) {
$tbevents = $this->getEventuser($user,$start,$end,false);
foreach($tbevents as $project) {
foreach($project as $event) {
if(isset($tbprojects[$event["idproject"]])) {
$tbprojects[$event["idproject"]]["months"][$event["idmonth"]]["users"][$user->getId()]["days"][$event["idday"]]=
[
"date"=>$event["idday"],
"duration"=>$event["duration"],
"astreinte"=>$event["astreinte"],
"daycolor"=>$event["daycolor"],
];
}
}
}
}
// Cumule
foreach($tbprojects as $project) {
foreach($project["months"] as $month) {
$haveuser=false;
$totmonth=0;
$totmontha=0;
foreach($month["users"] as $user) {
$totuser=0;
$totusera=0;
foreach($user["days"] as $day) {
$totuser+=$day["duration"];
$totusera+=$day["astreinte"];
$totmonth+=$day["duration"];
$totmontha+=$day["astreinte"];
}
if($totuser==0&&$totusera==0) {
unset($tbprojects[$project["id"]]["months"][$month["monthid"]]["users"][$user["id"]]);
} else {
$tbprojects[$project["id"]]["months"][$month["monthid"]]["users"][$user["id"]]["total"]=$totuser+$totusera;
$haveuser=true;
}
}
if(!$haveuser)
unset($tbprojects[$project["id"]]["months"][$month["monthid"]]);
else {
$tbprojects[$project["id"]]["months"][$month["monthid"]]["total"]=$totmonth;
$tbprojects[$project["id"]]["months"][$month["monthid"]]["totala"]=$totmontha;
}
}
}
if($request->query->get('fgprint')) {
$render = $this->renderView('Report/planning.html.twig',[
"useheader" => true,
"usesidebar" => ($this->getUser()),
"projects" => $tbprojects,
"access" => $access,
"key" => $key,
"fgprint" => true,
]);
return new PdfResponse(
$this->knpSnappy->getOutputFromHtml($render,["orientation"=>"Landscape"]),
'planning.pdf'
);
}
else {
return $this->render('Report/planning.html.twig',[
"useheader" => true,
"usesidebar" => ($this->getUser()),
"projects" => $tbprojects,
"access" => $access,
"key" => $key
]);
}
}
public function report($key=null,$access=null,Request $request) {
ini_set('memory_limit','500M');
$em = $this->getDoctrine()->getManager();
$iduser=$this->get("session")->get("iduser");
$nbmonth=$this->get("session")->get("nbmonth");
if($iduser=="all") {
$users=$em->getRepository("App:User")->findAll();
}
else {
$users=$em->getRepository("App:User")->findBy(["id"=>$iduser]);
}
$projects=$em->getRepository("App:Project")->findAll();
//Construction du tableau des projets
$tbprojects=[];
foreach($projects as $project) {
// Filtre par Customer
if($access=="customer") {
if($project->getCustomer()->getKeypass()!=$key)
continue;
if(!$project->getVisible())
continue;
}
// Filtre par Service
if($this->get('session')->get('idservice')!="all") {
if($project->getService()->getId()!=$this->get('session')->get('idservice'))
continue;
}
// Filtre par Domaine
if($this->get('session')->get('iddomaine')!="all") {
if($project->getDomaine()->getId()!=$this->get('session')->get('iddomaine'))
continue;
}
// Filtre par project
if($this->get('session')->get('idproject')!="all") {
if($project->getId()!=$this->get('session')->get('idproject'))
continue;
}
// Ne prendre que les projets actif/inactif
if($this->get('session')->get('activeproject')!=$project->getActive())
continue;
$validate=$em->getRepository("App:Project")->sumDuration($project->getId(),true);
$planified=$em->getRepository("App:Project")->sumDuration($project->getId(),false);
$estimate=$em->getRepository("App:Project")->sumEstimate($project->getId());
$proposed=$em->getRepository("App:Project")->sumProposed($project->getId());
// Ne prendre que les projects avec du validé
if($validate==0) continue;
// Somme des taches validé avant
$event = $em
->createQueryBuilder('task')
->select('SUM(task.validate) as somme')
->from('App:Task','task')
->Where('task.project=:project')
->setParameter('project',$project)
->getQuery()->getOneOrNullResult();
$hors1=($event["somme"]?$event["somme"]:0);
$event = $em
->createQueryBuilder('offer')
->select('SUM(offer.validate) as somme')
->from('App:Offer','offer')
->Where('offer.project=:project')
->setParameter('project',$project)
->getQuery()->getOneOrNullResult();
$hors2=($event["somme"]?$event["somme"]:0);
$hors=$hors1+$hors2;
// Init tableau project
$tbproject = [
"id"=>$project->getId(),
"displayname"=>$project->getDisplayname(),
"validate"=>$validate,
"planified"=>$planified,
"estimate"=>$estimate,
"proposed"=>$proposed,
"hors"=>$hors,
"before"=>[],
"beforeastreinte"=>[],
"months"=>[],
"offers"=>[],
"weeks"=>[],
];
// Somme event validé avant la date
$end=new \Datetime('first day of this month');
$end->sub(new \DateInterval('P'.$nbmonth.'M'));
$end->setTime(23,59,0);
$events = $em
->createQueryBuilder('event')
->select('event')
->from('App:Task','task')
->from('App:Event','event')
->Where('task.project=:project')
->andWhere('event.task=task')
->andWhere('event.end <:end')
->andWhere('event.validate=:validate')
->setParameter('project',$project)
->setParameter('validate',true)
->setParameter('end',$end)
->orderBy('event.start')
->getQuery()->getResult();
foreach($events as $event) {
if(!isset($tbproject["before"][$event->getStart()->format("Y")][$event->getStart()->format("Ym")])) {
$tbproject["before"][$event->getStart()->format("Y")][$event->getStart()->format("Ym")] = [
"idmonth" => $event->getStart()->format("Ym"),
"monthlabel"=>$event->getStart()->format("m/Y"),
"duration" => 0,
];
}
$tbproject["before"][$event->getStart()->format("Y")][$event->getStart()->format("Ym")]["duration"]=$tbproject["before"][$event->getStart()->format("Y")][$event->getStart()->format("Ym")]["duration"]+$event->getDuration();
}
// Somme astreinte validé avant la date
$end=new \Datetime('first day of this month');
$end->sub(new \DateInterval('P'.$nbmonth.'M'));
$end->setTime(23,59,0);
$penaltys = $em
->createQueryBuilder('penalty')
->select('penalty')
->from('App:Task','task')
->from('App:Penalty','penalty')
->Where('task.project=:project')
->andWhere('penalty.task=task')
->andWhere('penalty.end <:end')
->andWhere('penalty.validate=:validate')
->setParameter('project',$project)
->setParameter('validate',true)
->setParameter('end',$end)
->orderBy('penalty.start')
->getQuery()->getResult();
foreach($penaltys as $penalty) {
if(!isset($tbproject["beforeastreinte"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("Ym")])) {
$tbproject["beforeastreinte"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("Ym")] = [
"idmonth" => $penalty->getStart()->format("Ym"),
"monthlabel"=>$penalty->getStart()->format("m/Y"),
"duration" => 0,
];
}
$tbproject["beforeastreinte"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("Ym")]["duration"]=$tbproject["beforeastreinte"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("Ym")]["duration"]+$penalty->getDuration();
}
// Somme event validé par semaine
$start=new \Datetime('first day of this month');
$start->sub(new \DateInterval('P'.$nbmonth.'M'));
$start->setTime(0,0,0);
$endmonth = new \Datetime('first day of this month');
$endmonth->add(new \DateInterval('P1M'));
$eventsbyweek = $em
->createQueryBuilder('event')
->select('event')
->from('App:Task','task')
->from('App:Event','event')
->Where('task.project=:project')
->andWhere('event.task=task')
->andWhere('event.end >:start')
->andWhere('event.end <:end')
->andWhere('event.validate=:validate')
->setParameter('project',$project)
->setParameter('validate',true)
->setParameter('start',$start)
->setParameter('end',$endmonth)
->orderBy('event.start')
->getQuery()->getResult();
foreach($eventsbyweek as $event) {
if(!isset($tbproject["weeks"][$event->getStart()->format("Y")][$event->getStart()->format("W")])){
$tbproject["weeks"][$event->getStart()->format("Y")][$event->getStart()->format("W")] = [
"weeknumber" => $event->getStart()->format("W"),
"cumul" => 0,
];
}
$tbproject["weeks"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["cumul"] = $tbproject["weeks"][$event->getStart()->format("Y")][$event->getStart()->format("W")]["cumul"]+$event->getDuration();
}
// Somme astreintes validé par semaine
$start=new \Datetime('first day of this month');
$start->sub(new \DateInterval('P'.$nbmonth.'M'));
$start->setTime(0,0,0);
$endmonth = new \Datetime('first day of this month');
$endmonth->add(new \DateInterval('P1M'));
$penaltybyweek = $em
->createQueryBuilder('penalty')
->select('penalty')
->from('App:Task','task')
->from('App:Penalty','penalty')
->Where('task.project=:project')
->andWhere('penalty.task=task')
->andWhere('penalty.end >=:start')
->andWhere('penalty.end <:end')
->andWhere('penalty.validate=:validate')
->setParameter('project',$project)
->setParameter('validate',true)
->setParameter('start',$start)
->setParameter('end',$endmonth)
->orderBy('penalty.start')
->getQuery()->getResult();
foreach($penaltybyweek as $penalty) {
if(!isset($tbproject["weeks"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")])){
$tbproject["weeks"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")] = [
"weeknumber" => $penalty->getStart()->format("W"),
"cumul" => 0,
];
}
$tbproject["weeks"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["cumul"] = $tbproject["weeks"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["cumul"]+$penalty->getDuration();
}
foreach($penaltybyweek as $penaltybyweek) {
if(!isset($tbproject["weeks_by_name"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["users"])){
$tbproject["weeks_by_name"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")] = [
"weeknumber" => $penalty->getStart()->format("W"),
"users" => [],
];
}
if(!isset($tbproject["weeks_by_name"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["users"][$penalty->getUser()->getId()])){
$tbuser= [
"id"=>$penalty->getUser()->getId(),
"displayname"=>$penalty->getUser()->getDisplayname(),
"cumul"=>0
];
$tbproject["weeks_by_name"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["users"][$penalty->getUser()->getId()] = $tbuser;
}
$tbproject["weeks_by_name"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["users"][$penalty->getUser()->getId()]["cumul"] = $tbproject["weeks_by_name"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("W")]["users"][$penalty->getUser()->getId()]["cumul"]+$penalty->getDuration();
}
// Recap des Commandes
$offers=$em->getRepository("App:Offer")->findBy(["project"=>$project->getId()]);
foreach($offers as $offer) {
$tbproject["offers"][$offer->getId()] = [
"name"=>$offer->getName(),
"ref"=>$offer->getRef(),
"quantity"=>$offer->getQuantity(),
];
}
// Formater les mois
$start=new \Datetime('first day of this month');
$start->sub(new \DateInterval('P'.$nbmonth.'M'));
$start->setTime(0,0,0);
$end=new \Datetime('first day of this month');
$end->add(new \DateInterval('P'.$nbmonth.'M'));
$end->sub(new \DateInterval('P1D'));
$end->setTime(23,59,0);
while($start<$end) {
$tbproject["months"][$start->format("Ym")]=[
"monthid"=> $start->format("Ym"),
"monthlabel"=>$start->format("m/Y"),
"days"=>[],
"users"=>[],
"tasks"=>[],
];
// Init du tableau des utilisateurs pour le mois
foreach($users as $user) {
$tbuser= [
"id"=>$user->getId(),
"displayname"=>$user->getDisplayname(),
"days"=>[]
];
$tbproject["months"][$start->format("Ym")]["users"][$user->getId()]=$tbuser;
}
// Init des taches par mois
$endmonth=clone $start;
$endmonth->add(new \DateInterval('P1M'));
$events = $em
->createQueryBuilder('event')
->select('task.id, task.name, SUM(event.duration) as somme')
->from('App:Task','task')
->from('App:Event','event')
->Where('task.project=:project')
->andWhere('event.task=task')
->andWhere('event.end >:start')
->andWhere('event.end <=:end')
->andWhere('event.validate=:validate')
->setParameter('project',$project)
->setParameter('validate',true)
->setParameter('start',$start)
->setParameter('end',$endmonth)
->groupBy('task.id')
->getQuery()->getResult();
foreach($events as $event) {
$tbtask= [
"id"=>$event["id"],
"displayname"=>$event["name"],
"duration"=>$event["somme"]
];
$tbproject["months"][$start->format("Ym")]["tasks"][$event["id"]]=$tbtask;
}
$start->add(new \DateInterval('P1M'));
}
// Formater les jours
$start=new \Datetime('first day of this month');
$start->sub(new \DateInterval('P'.$nbmonth.'M'));
$start->setTime(0,0,0);
$end=new \Datetime('first day of this month');
$end->add(new \DateInterval('P'.$nbmonth.'M'));
$end->sub(new \DateInterval('P1D'));
while($start<$end) {
$tbday=[
"date"=>clone $start,
"daylabel"=>$this->frmDay($start->format("w")),
"daycolor"=>$this->frmColorday($start->format("w")),
"daynumber"=>$start->format("d"),
];
$tbproject["months"][$start->format("Ym")]["days"][$start->format("Ymd")]=$tbday;
foreach($users as $user) {
$tbday=[
"date"=>clone $start,
"duration"=>0,
"astreinte"=>0,
"daycolor"=>$this->frmColorday($start->format("w")),
];
$tbproject["months"][$start->format("Ym")]["users"][$user->getId()]["days"][$start->format("Ymd")]=$tbday;
}
$start->add(new \DateInterval('P1D'));
}
$tbprojects[$project->getId()]=$tbproject;
}
// Formater les utilisateurs
$start=new \Datetime('first day of this month');
$start->sub(new \DateInterval('P'.$nbmonth.'M'));
$start->setTime(0,0,0);
$end=new \Datetime('first day of this month');
$end->add(new \DateInterval('P'.$nbmonth.'M'));
$end->sub(new \DateInterval('P1D'));
$end->setTime(23,59,0);
foreach($users as $user) {
$tbevents = $this->getEventuser($user,$start,$end,true);
foreach($tbevents as $project) {
foreach($project as $event) {
if(isset($tbprojects[$event["idproject"]])) {
$tbprojects[$event["idproject"]]["months"][$event["idmonth"]]["users"][$user->getId()]["days"][$event["idday"]]=
[
"date"=>$event["idday"],
"duration"=>$event["duration"],
"astreinte"=>$event["astreinte"],
"daycolor"=>$event["daycolor"],
];
}
}
}
}
// Cumule
foreach($tbprojects as $project) {
foreach($project["months"] as $month) {
$haveuser=false;
$totmonth=0;
$totmontha=0;
foreach($month["users"] as $user) {
$totuser=0;
$totusera=0;
foreach($user["days"] as $day) {
$totuser+=$day["duration"];
$totusera+=$day["astreinte"];
$totmonth+=$day["duration"];
$totmontha+=$day["astreinte"];
}
if($totuser==0&&$totusera==0) {
unset($tbprojects[$project["id"]]["months"][$month["monthid"]]["users"][$user["id"]]);
} else {
$tbprojects[$project["id"]]["months"][$month["monthid"]]["users"][$user["id"]]["total"]=$totuser+$totusera;
$haveuser=true;
}
}
if(!$haveuser)
unset($tbprojects[$project["id"]]["months"][$month["monthid"]]);
else {
$tbprojects[$project["id"]]["months"][$month["monthid"]]["total"]=$totmonth;
$tbprojects[$project["id"]]["months"][$month["monthid"]]["totala"]=$totmontha;
}
}
}
if($request->query->get('fgprint')) {
$render = $this->renderView('Report/report.html.twig',[
"useheader" => true,
"usesidebar" => ($this->getUser()),
"projects" => $tbprojects,
"access" => $access,
"key" => $key,
"fgprint" => true,
]);
return new PdfResponse(
$this->knpSnappy->getOutputFromHtml($render,["orientation"=>"Landscape"]),
'report.pdf'
);
}
else {
return $this->render('Report/report.html.twig',[
"useheader" => true,
"usesidebar" => ($this->getUser()),
"projects" => $tbprojects,
"access" => $access,
"key" => $key
]);
}
}
private function getEventuser($user,$start,$end,$onlyvalidate) {
$em = $this->getDoctrine()->getManager();
$tbevents=[];
// Récupération de event
$qb = $em
->createQueryBuilder('event')
->select('event')
->from('App:Event','event')
->Where('event.user=:user AND event.start>=:start AND event.end <=:end')
->setParameter('user',$user->getId())
->setParameter('start',$start)
->setParameter('end',$end);
if($onlyvalidate)
$qb->andWhere('event.validate=:validate')->setParameter('validate',true);
$events=$qb->getQuery()->getResult();
foreach($events as $event) {
$project=$event->getTask()->getProject();
$idproject=$project->getId();
$idservice=$project->getService()->getId();
$iddomaine=$project->getDomaine()->getId();
$activeproject=$project->getActive();
// Filtre par Service
if($this->get('session')->get('idservice')!="all") {
if($idservice!=$this->get('session')->get('idservice'))
continue;
}
// Filtre par Domaine
if($this->get('session')->get('iddomaine')!="all") {
if($iddomaine!=$this->get('session')->get('iddomaine'))
continue;
}
// Filtre par project
if($this->get('session')->get('idproject')!="all") {
if($idproject!=$this->get('session')->get('idproject'))
continue;
}
// Ne prendre que les projets actif/inactif
if($this->get('session')->get('activeproject')!=$activeproject)
continue;
if(!isset($tbevents[$idproject]))
$tbevents[$idproject] = [];
$st=clone $event->getStart();
while($st<$event->getEnd()) {
$idday=$st->format("Ymd");
$idmonth=$st->format("Ym");
if(!isset($tbevents[$idproject][$idday])) {
$tbevents[$idproject][$idday] = [
"idproject"=>$idproject,
"idmonth"=>$idmonth,
"idday"=>$idday,
"daycolor"=>$this->frmColorday($st->format("w")),
"duration"=>0,
"astreinte"=>0,
];
}
$tbevents[$idproject][$idday]["duration"]+=($event->getAllday()?1:0.5);
$st->add(new \DateInterval('P1D'));
}
}
// Récupération des astreintes
$qb = $em
->createQueryBuilder('penalty')
->select('penalty')
->from('App:Penalty','penalty')
->Where('penalty.user=:user AND penalty.start>=:start AND penalty.end <:end')
->setParameter('user',$user->getId())
->setParameter('start',$start)
->setParameter('end',$end);
if($onlyvalidate)
$qb->andWhere('penalty.validate=:validate')->setParameter('validate',true);
$penaltys=$qb->getQuery()->getResult();
foreach($penaltys as $penalty) {
$project=$penalty->getTask()->getProject();
$idproject=$project->getId();
$idservice=$project->getService()->getId();
$iddomaine=$project->getDomaine()->getId();
$activeproject=$project->getActive();
// Filtre par Service
if($this->get('session')->get('idservice')!="all") {
if($idservice!=$this->get('session')->get('idservice'))
continue;
}
// Filtre par Domaine
if($this->get('session')->get('iddomaine')!="all") {
if($iddomaine!=$this->get('session')->get('iddomaine'))
continue;
}
// Filtre par project
if($this->get('session')->get('idproject')!="all") {
if($idproject!=$this->get('session')->get('idproject'))
continue;
}
// Ne prendre que les projets actif/inactif
if($this->get('session')->get('activeproject')!=$activeproject)
continue;
if(!isset($tbevents[$idproject]))
$tbevents[$idproject] = [];
$st=clone $penalty->getStart();
while($st<$penalty->getEnd()) {
$idday=$st->format("Ymd");
$idmonth=$st->format("Ym");
if(!isset($tbevents[$idproject][$idday])) {
$tbevents[$idproject][$idday] = [
"idproject"=>$idproject,
"idmonth"=>$idmonth,
"idday"=>$idday,
"daycolor"=>$this->frmColorday($st->format("w")),
"duration"=>0,
"astreinte"=>0,
];
}
$tbevents[$idproject][$idday]["astreinte"]=1;
$st->add(new \DateInterval('P1D'));
}
}
return $tbevents;
}
public function holiday(Request $request)
{
$em = $this->getDoctrine()->getManager();
$iduser=$this->getUser();
$users=$em->getRepository("App:User")->findBy(["id"=>$iduser]);
$tbevents=[];
foreach($users as $user) {
$tmp=[
"id" => $user->getId(),
"user" => $user,
"holidays" => [],
"holidaystodevalidate" => [],
];
// Congès à valider ou à dévalider
$holidays = $em
->createQueryBuilder('event')
->select('event')
->from('App:Event','event')
->from('App:Task','task')
->Where('event.user=:user')
->andWhere('event.validateholiday=:validate')
->andWhere('task=event.task')
->andWhere('task.nature=:nature')
->setParameter('user',$user->getId())
->setParameter('validate',!($this->get("session")->get("activeholiday")))
->setParameter('nature',-200)
->getQuery()->getResult();
foreach($holidays as $holiday) {
$tbholiday = [
"id"=>$holiday->getId(),
"start"=>$holiday->getStart(),
"end"=>$holiday->getEnd()->sub(new \DateInterval('PT1M')),
"task"=>$holiday->getTask()->getName(),
"duration"=>$holiday->getDuration(),
"validateholiday"=>$holiday->getValidateholiday(),
];
array_push($tmp["holidays"],$tbholiday);
}
array_push($tbevents,$tmp);
}
if($request->query->get('fgprint')) {
$render = $this->renderView('Report/holiday.html.twig',[
"useheader" => true,
"usesidebar" => ($this->getUser()),
"users" => $tbevents,
"fgprint" => $request->query->get('fgprint'),
]);
return new PdfResponse(
$this->knpSnappy->getOutputFromHtml($render),
'conges.pdf'
);
}
else {
return $this->render('Report/holiday.html.twig',[
"useheader" => true,
"usesidebar" => ($this->getUser()),
"users" => $tbevents
]);
}
}
public function activeholiday() {
$this->get('session')->set('activeholiday',!$this->get('session')->get('activeholiday'));
return $this->redirectToRoute("app_holiday");
}
private function frmDay($daynumber) {
switch($daynumber) {
case 0: return "D"; break;
case 1: return "L"; break;
case 2: return "M"; break;
case 3: return "M"; break;
case 4: return "J"; break;
case 5: return "V"; break;
case 6: return "S"; break;
}
}
private function frmColorday($daynumber) {
switch($daynumber) {
case 0: return "#888888"; break;
case 1: return "#cccccc"; break;
case 2: return "#cccccc"; break;
case 3: return "#cccccc"; break;
case 4: return "#cccccc"; break;
case 5: return "#cccccc"; break;
case 6: return "#888888"; break;
}
}
}

View File

@@ -1,132 +0,0 @@
<?php
namespace App\Controller;
use FOS\RestBundle\Controller\AbstractFOSRestController;
use Symfony\Component\HttpFoundation\Request;
use FOS\RestBundle\Controller\Annotations as FOSRest;
use Swagger\Annotations as SWG;
use App\Entity\Cache;
class RestController extends AbstractFOSRestController
{
private $output=[];
private $cpt;
/**
* Return list of maps
*
*
* @FOSRest\Post("/rest/getBreakdays")
* @SWG\Response(
* response=200,
* description="Return list of breakday events"
* )
* )
* @SWG\Parameter(
* name="key",
* in="formData",
* required=true,
* description="APIKey",
* type="string"
* )
* @SWG\Parameter(
* name="username",
* in="formData",
* required=true,
* description="username",
* type="string"
* )
*/
public function getBreakdays(Request $request) {
set_time_limit(0);
ini_set('memory_limit', '1024M');
// Initalisation Manager
$em = $this->getDoctrine()->getManager();
// Récupération des parametres
$key=$request->get("key");
$username=$request->get("username");
if($key!=$this->getParameter("appSecret")) {
$view = $this->view("API Key inconnue", 403);
return $this->handleView($view);
}
$user=$em->getRepository("App:User")->findOneBy(["username"=>$username]);
if(!$user) {
$view = $this->view("User inconnue", 403);
return $this->handleView($view);
}
// On formate le tableau de jour
$start=new \Datetime('2022-03-07 00:00');
$end=new \Datetime('00:00');
$end->modify("last day of this month");
$end->modify("next sunday");
$events = $em
->createQueryBuilder('event')
->select('event')
->from('App:Event','event')
->Where('event.user=:user AND event.start>=:start AND event.end <:end')
->setParameter('user',$user)
->setParameter('start',$start)
->setParameter('end',$end)
->getQuery()->getResult();
$output=[
"start"=>$start->format("d/m/Y"),
"end"=>$end->format("d/m/Y"),
"events"=>[],
];
$tbnature=[-200,-190,-100];
foreach($events as $event) {
if(in_array($event->getTask()->getNature()->getId(),$tbnature)) {
$tmp = [
"eventstart"=>$event->getStart(),
"eventend"=>$event->getEnd(),
"eventallday"=>$event->getAllday(),
"taskid"=>$event->getTask()->getId(),
"taskname"=>$event->getTask()->getName(),
"natureid"=>$event->getTask()->getNature()->getId(),
"naturename"=>$event->getTask()->getNature()->getName(),
];
array_push($output["events"],$tmp);
}
}
$events = $em
->createQueryBuilder('breakday')
->select('breakday')
->from('App:Breakday','breakday')
->Where('breakday.start>=:start AND breakday.end <:end')
->setParameter('start',$start)
->setParameter('end',$end)
->getQuery()->getResult();
foreach($events as $event) {
$tmp = [
"eventstart"=>$event->getStart(),
"eventend"=>$event->getEnd(),
"eventallday"=>true,
"taskid"=>null,
"taskname"=>"Jour Férié",
"natureid"=>null,
"naturename"=>"Jour Férié",
];
array_push($output["events"],$tmp);
}
$view = $this->view($output, 200);
return $this->handleView($view);
}
}

View File

@@ -1,157 +0,0 @@
<?php
// src/OC/UserBundle/Controller/SecurityController.php;
namespace App\Controller;
use App\Entity\User;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Core\Encoder\EncoderFactory;
use Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder;
use jasig\phpcas\CAS;
class SecurityController extends AbstractController
{
public function login(Request $request, AuthenticationUtils $authenticationUtils)
{
$auth_mode=$this->getParameter("appAuth");
switch($auth_mode) {
case "MYSQL":
return $this->loginMYSQL($request,$authenticationUtils);
break;
case "CAS":
return $this->loginCAS($request,$authenticationUtils);
break;
}
}
public function loginMYSQL(Request $request, AuthenticationUtils $authenticationUtils) {
return $this->render('Home/login.html.twig', array(
'last_username' => $authenticationUtils->getLastUsername(),
'error' => $authenticationUtils->getLastAuthenticationError(),
));
}
public function logincas(Request $request, AuthenticationUtils $authenticationUtils)
{
// Récupération de la cible de navigation
$redirect = $request->get("redirect");
// Init Client CAS
\phpCAS::client(CAS_VERSION_2_0, $this->getParameter('casHost'), intval($this->getParameter('casPort')), is_null($this->getParameter('casPath')) ? '' : $this->getParameter('casPath'), false);
\phpCAS::setNoCasServerValidation();
// Authentification
\phpCAS::forceAuthentication();
// Récupération UID
$username = \phpCAS::getUser();
// Récupération Attribut
$attributes = \phpCAS::getAttributes();
// Suppression des Attributs en tableaux
foreach ($attributes as $key => $value) {
if(is_array($value))
unset($attributes[$key]);
}
// Rechercher l'utilisateur
$em = $this->getDoctrine()->getManager();
if(isset($attributes[$this->getParameter('casUsername')]))
$username = $attributes[$this->getParameter('casUsername')];
if(isset($attributes[$this->getParameter('casEmail')]))
$email = $attributes[$this->getParameter('casEmail')];
if(isset($attributes[$this->getParameter('casLastname')]))
$lastname = $attributes[$this->getParameter('casLastname')];
if(isset($attributes[$this->getParameter('casFirstname')]))
$firstname = $attributes[$this->getParameter('casFirstname')];
$user = $em->getRepository('App:User')->findOneBy(array("username"=>$username));
$exists = $user ? true : false;
if (!$exists) {
$user = new User();
$user->setUsername($username);
$user->setLastname($lastname);
$user->setFirstname($firstname);
$user->setEmail($email);
$user->setPassword("CASPWD-".$username);
$user->setSalt("CASPWD-".$username);
$user->setRoles(["ROLE_VISITOR"]);
$em->persist($user);
$em->flush();
}
else {
if(isset($lastname)) $user->setLastname($lastname);
if(isset($firstname)) $user->setFirstname($firstname);
if(isset($email)) $user->setEmail($email);
$em->persist($user);
$em->flush();
}
// Autoconnexion
// Récupérer le token de l'utilisateur
$token = new UsernamePasswordToken($user, null, "main", $user->getRoles());
$this->get("security.token_storage")->setToken($token);
// Simuler l'evenement de connexion
$event = new InteractiveLoginEvent($request, $token);
$dispatcher = new EventDispatcher();
$dispatcher->dispatch("security.interactive_login", $event);
// Redirection
if($redirect)
return $this->redirect($redirect);
else {
$roles=$user->getRoles();
if(!in_array("ROLE_VISITOR",$roles))
return $this->redirect($this->generateUrl('app_home'));
else
return $this->redirect($this->generateUrl('app_customer_home'));
}
}
public function logout() {
$this->get('security.token_storage')->setToken(null);
$this->get('session')->invalidate();
return $this->redirect($this->generateUrl("cnous_portal_homepage"));
}
public function logoutcas() {
// Init Client CAS
\phpCAS::client(CAS_VERSION_2_0, $this->getParameter('casHost'), intval($this->getParameter('casPort')), is_null($this->getParameter('casPath')) ? '' : $this->getParameter('casPath'), false);
\phpCAS::setNoCasServerValidation();
// Logout
$url=$this->generateUrl('app_home', array(), UrlGeneratorInterface::ABSOLUTE_URL);
\phpCAS::logout(array("service"=>$url));
}
}

View File

@@ -1,180 +0,0 @@
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\FormError;
use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
use App\Entity\Service as Entity;
use App\Form\ServiceType as Form;
class ServiceController extends AbstractController
{
private $data = "service";
private $route = "app_service";
private $render = "Service/";
private $entity = "App:Service";
private $knpSnappy;
public function __construct(\Knp\Snappy\Pdf $knpSnappy) { $this->knpSnappy = $knpSnappy; }
public function list(Request $request)
{
$em = $this->getDoctrine()->getManager();
$datas = $em->getRepository($this->entity)->findAll();
if($request->query->get('fgprint')) {
$render = $this->renderView($this->render.'list.html.twig',[
$this->data."s" => $datas,
"useheader" => true,
"usesidebar" => true,
"fgprint" => true,
]);
return new PdfResponse(
$this->knpSnappy->getOutputFromHtml($render),
'services.pdf'
);
}
else {
return $this->render($this->render.'list.html.twig',[
$this->data."s" => $datas,
"useheader" => true,
"usesidebar" => true,
]);
}
}
public function submit(Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data = new Entity();
// Création du formulaire
$form = $this->createForm(Form::class,$data,array("mode"=>"submit","doliActive"=>$this->getParameter("doliActive")));
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm(null,$form,$request,$data,"submit");
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData();
$em->persist($data);
$em->flush();
// Retour à la liste
return $this->redirectToRoute($this->route);
}
// Affichage du formulaire
return $this->render($this->render.'edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
$this->data => $data,
'mode' => 'submit',
'form' => $form->createView()
]);
}
public function update($id,Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data=$em->getRepository($this->entity)->find($id);
// Création du formulaire
$form = $this->createForm(Form::class,$data,array("mode"=>"update","doliActive"=>$this->getParameter("doliActive")));
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm(null,$form,$request,$data,"update");
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData();
$em->persist($data);
$em->flush();
// Retour à la liste
return $this->redirectToRoute($this->route);
}
// Affichage du formulaire
if($request->query->get('fgprint')) {
$render = $this->renderView($this->render.'edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
$this->data => $data,
'mode' => 'update',
'form' => $form->createView(),
"fgprint" => true,
]);
return new PdfResponse(
$this->knpSnappy->getOutputFromHtml($render),
'service.pdf'
);
}
else {
return $this->render($this->render.'edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
$this->data => $data,
'mode' => 'update',
'form' => $form->createView()
]);
}
}
public function delete($id,Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data=$em->getRepository($this->entity)->find($id);
// Controle avant suppression
$error=false;
if($error)
return $this->redirectToRoute($this->route."_update",["id"=>$id]);
else {
try {
$em->remove($data);
$em->flush();
}
catch(\Doctrine\DBAL\DBALException $e) {
// Création du formulaire
$this->get('session')->getFlashBag()->add('error', 'Impossible de supprimer cet enregistrement');
return $this->redirectToRoute($this->route."_update",["id"=>$id]);
}
// Retour à la liste
return $this->redirectToRoute($this->route);
}
}
protected function getErrorForm($id,$form,$request,$data,$mode) {
if ($form->get('submit')->isClicked()&&$mode=="delete") {
}
if ($form->get('submit')->isClicked() && $mode=="submit") {
}
if ($form->get('submit')->isClicked() && !$form->isValid()) {
$this->get('session')->getFlashBag()->clear();
$errors = $form->getErrors();
foreach( $errors as $error ) {
$request->getSession()->getFlashBag()->add("error", $error->getMessage());
}
}
}
}

View File

@@ -1,208 +0,0 @@
<?php
namespace App\Controller;
use App\Entity\Domaine;
use App\Entity\Service;
use App\Entity\Task as Entity;
use App\Form\TaskType as Form;
use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
class TaskController extends AbstractController
{
private $data = 'task';
private $route = 'app_task';
private $render = 'Task/';
private $entity = 'App:Task';
private $knpSnappy;
public function __construct(\Knp\Snappy\Pdf $knpSnappy)
{
$this->knpSnappy = $knpSnappy;
}
public function list(Request $request)
{
$em = $this->getDoctrine()->getManager();
$services = $em->getRepository(Service::class)->findAllTaskActive($this->get('session')->get('activeproject'), $this->get('session')->get('idservice'));
$domaines = $em->getRepository(Domaine::class)->findAllTaskActive($this->get('session')->get('activeproject'), $this->get('session')->get('iddomaine'));
if ($request->query->get('fgprint')) {
$render = $this->renderView($this->render.'list.html.twig', [
'services' => $services,
'domaines' => $domaines,
'useheader' => true,
'usesidebar' => true,
'fgprint' => true,
]);
return new PdfResponse(
$this->knpSnappy->getOutputFromHtml($render, ['orientation' => 'Landscape']),
'taches.pdf'
);
} else {
return $this->render($this->render.'list.html.twig', [
'services' => $services,
'domaines' => $domaines,
'useheader' => true,
'usesidebar' => true,
]);
}
}
public function submit(Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data = new Entity();
$defaultnature = $em->getRepository('App:Nature')->findOneBy(['name' => 'Prestation']);
$data->setNature($defaultnature);
$data->setActive(true);
// Création du formulaire
$form = $this->createForm(Form::class, $data, ['mode' => 'submit']);
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm(null, $form, $request, $data, 'submit');
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData();
$em->persist($data);
$em->flush();
// Retour à la liste
return $this->redirectToRoute($this->route);
}
// Affichage du formulaire
return $this->render($this->render.'edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
$this->data => $data,
'mode' => 'submit',
'form' => $form->createView(),
]);
}
public function update($id, Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data = $em->getRepository($this->entity)->find($id);
// Création du formulaire
$form = $this->createForm(Form::class, $data, ['mode' => 'update']);
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm(null, $form, $request, $data, 'update');
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData();
$em->persist($data);
$em->flush();
// Retour à la liste
return $this->redirectToRoute($this->route);
}
// Affichage du formulaire
if ($request->query->get('fgprint')) {
$render = $this->renderView($this->render.'edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
$this->data => $data,
'mode' => 'update',
'form' => $form->createView(),
'fgprint' => true,
]);
return new PdfResponse(
$this->knpSnappy->getOutputFromHtml($render),
'tache.pdf'
);
} else {
return $this->render($this->render.'edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
$this->data => $data,
'mode' => 'update',
'form' => $form->createView(),
]);
}
}
public function delete($id, Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data = $em->getRepository($this->entity)->find($id);
// Controle avant suppression
$error = false;
if ($error) {
return $this->redirectToRoute($this->route.'_update', ['id' => $id]);
} else {
try {
$em->remove($data);
$em->flush();
} catch (\Doctrine\DBAL\DBALException $e) {
// Création du formulaire
$this->get('session')->getFlashBag()->add('error', 'Impossible de supprimer cet enregistrement');
return $this->redirectToRoute($this->route.'_update', ['id' => $id]);
}
// Retour à la liste
return $this->redirectToRoute($this->route);
}
}
public function activeproject()
{
$this->get('session')->set('activeproject', !$this->get('session')->get('activeproject'));
return $this->redirectToRoute($this->route);
}
public function activetask()
{
$this->get('session')->set('activetask', !$this->get('session')->get('activetask'));
return $this->redirectToRoute($this->route);
}
public function viewservice()
{
$this->get('session')->set('viewservice', !$this->get('session')->get('viewservice'));
return $this->redirectToRoute($this->route);
}
protected function getErrorForm($id, $form, $request, $data, $mode)
{
if ($form->get('submit')->isClicked() && 'delete' == $mode) {
}
if ($form->get('submit')->isClicked() && 'submit' == $mode) {
}
if ($form->get('submit')->isClicked() && !$form->isValid()) {
$this->get('session')->getFlashBag()->clear();
$errors = $form->getErrors();
foreach ($errors as $error) {
$request->getSession()->getFlashBag()->add('error', $error->getMessage());
}
}
}
}

View File

@@ -1,644 +0,0 @@
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
class ValidationController extends AbstractController
{
private $knpSnappy;
private $notificator;
public function __construct(\Knp\Snappy\Pdf $knpSnappy, \App\Service\notificationService $notificator) {
$this->knpSnappy = $knpSnappy;
$this->notificator = $notificator;
}
public function validation(Request $request)
{
$em = $this->getDoctrine()->getManager();
$nbmonth=$this->get("session")->get("nbmonth");
$iduser=$this->get("session")->get("iduser");
if($iduser=="all") {
$users=$em->getRepository("App:User")->findAll();
}
else {
$users=$em->getRepository("App:User")->findBy(["id"=>$iduser]);
}
$maxend=new \Datetime();
$maxend->add(new \DateInterval('P1M'));
$maxend->modify('first Monday');
$tbevents=[];
foreach($users as $user) {
if(in_array("ROLE_USER",$user->getRoles())) {
// Filtre par Service
if($this->get('session')->get('idservice')!="all") {
if($user->getService()->getId()!=$this->get('session')->get('idservice'))
continue;
}
$tmp=[
"id" => $user->getId(),
"user" => $user,
"events" => [],
];
// On recherche le dernier evenement non congés validé pour ce user
$eventstart = $em
->createQueryBuilder('event')
->select("event")
->from('App:Event','event')
->Where('event.user=:user')
->andWhere('event.validate=true')
->setParameter('user',$user)
->setMaxResults(1)
->orderBy('event.start', 'DESC')
->getQuery()->getOneOrNullResult();
if(!$eventstart) {
// Sinon on recherche le premier evenement de l'utilisateur
$eventstart=$em->getRepository("App:Event")->findOneBy(["user"=>$user],["start"=>"ASC"]);
}
// On formate le tableau des jours
$start=clone $eventstart->getStart();
if($start->format("w")!=1) $start->modify('last Monday');
$end=clone $maxend;
while($start<$end) {
$idday=$start->format("Ymd");
$idmonth=$start->format("Ym");
// Si le lundi on regarde s'il une tache de validé dans la semaine
if($start->format("w")==1) {
$validate=false;
$endweek=clone $start;
$endweek->modify('next Monday');
$event = $em
->createQueryBuilder('event')
->select("event.id")
->from('App:Event','event')
->Where('event.user=:user')
->andWhere('event.start>=:start')
->andWhere('event.end<:end')
->andWhere('event.validate=true')
->setParameter('user',$user)
->setParameter('start',$start)
->setParameter('end',$endweek)
->getQuery()->getResult();
if($event) {
$validate=true;
}
}
$tmp["events"][$idday] = [
"date"=>clone $start,
"events"=>[],
"astreinte"=>false,
"colorastreinte"=>"",
"descriptionastreinte"=>"",
];
$start->add(new \DateInterval('P1D'));
}
// On formate le tableau des event
$start=clone $eventstart->getStart();
if($start->format("w")!=1) $start->modify('last Monday');
$end=clone $maxend;
$events = $em
->createQueryBuilder('event')
->select('event')
->from('App:Event','event')
->Where('event.user=:user AND event.start>=:start AND event.end <:end')
->setParameter('user',$user->getId())
->setParameter('start',$start)
->setParameter('end',$end)
->getQuery()->getResult();
foreach($events as $event) {
$st=clone $event->getStart();
while($st<$event->getEnd()) {
$idday=$st->format("Ymd");
if($event->getAllday()) {
$tmp["events"][$idday]["events"][$event->getId()]=["allday"=>true,"colorday"=>$event->getTask()->getColor(),"descriptionday"=>strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription(),"validate"=>$event->getValidate()];
}
else {
// Matin ou après-midi ?
$time=$event->getStart()->format("H");
if($time==9) {
$tmp["events"][$idday]["events"][$event->getId()]=["allday"=>false,"am"=>true,"ap"=>false,"coloram"=>$event->getTask()->getColor(),"descriptionam"=>strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription(),"validate"=>$event->getValidate()];
}
else {
$tmp["events"][$idday]["events"][$event->getId()]=["allday"=>false,"am"=>false,"ap"=>true,"colorap"=>$event->getTask()->getColor(),"descriptionap"=>strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription(),"validate"=>$event->getValidate()];
}
}
$st->add(new \DateInterval('P1D'));
}
}
// On formate le tableau des astreintes
$start=clone $eventstart->getStart();
if($start->format("w")!=1) $start->modify('last Monday');
$end=clone $maxend;
$penaltys = $em
->createQueryBuilder('penalty')
->select('penalty')
->from('App:Penalty','penalty')
->Where('penalty.user=:user AND penalty.start>=:start AND penalty.end <:end')
->setParameter('user',$user->getId())
->setParameter('start',$start)
->setParameter('end',$end)
->getQuery()->getResult();
foreach($penaltys as $penalty) {
$st=clone $penalty->getStart();
while($st<$penalty->getEnd()) {
$idday=$st->format("Ymd");
if($penalty->getAllday()) {
$tmp["events"][$idday]["astreinte"]=true;
$tmp["events"][$idday]["colorastreinte"]=$penalty->getTask()->getColor();
$tmp["events"][$idday]["descriptionastreinte"]=strtoupper($penalty->getTask()->getDisplayname())."\n\n".$penalty->getDescription();
}
$st->add(new \DateInterval('P1D'));
}
}
// On formate le tableau des jours fériés
$start=clone $eventstart->getStart();
if($start->format("w")!=1) $start->modify('last Monday');
$end=clone $maxend;
$breakdays = $em
->createQueryBuilder('breakday')
->select('breakday')
->from('App:Breakday','breakday')
->Where('breakday.start>=:start AND breakday.end <:end')
->setParameter('start',$start)
->setParameter('end',$end)
->getQuery()->getResult();
foreach($breakdays as $breakday) {
$st=clone $breakday->getStart();
while($st<$breakday->getEnd()) {
$idday=$st->format("Ymd");
$tmp["events"][$idday]["allday"]=true;
$tmp["events"][$idday]["colorday"]="#6c7a89";
$tmp["events"][$idday]["descriptionday"]="Jour Férié";
$st->add(new \DateInterval('P1D'));
}
}
array_push($tbevents,$tmp);
}
}
if($request->query->get('fgprint')) {
$render = $this->renderView('Validation/validation.html.twig',[
"useheader" => true,
"usesidebar" => ($this->getUser()),
"users" => $tbevents,
"fgprint" => $request->query->get('fgprint'),
]);
return new PdfResponse(
$this->knpSnappy->getOutputFromHtml($render),
'validation.pdf'
);
}
else {
return $this->render('Validation/validation.html.twig',[
"useheader" => true,
"usesidebar" => ($this->getUser()),
"users" => $tbevents
]);
}
}
public function validate(Request $request){
$em = $this->getDoctrine()->getManager();
// Récupération des variables envoyées en post
$iduser = $request->request->get('iduser');
$day = $request->request->get('day');
$start= new \Datetime($day);
$end=clone $start;
$end->modify('next Saturday');
// Somme dans la semaine
$duration=0;
// Somme des jours fériés de la semaine
$breakdays = $em
->createQueryBuilder('breakday')
->select("breakday")
->from('App:Breakday','breakday')
->Where('breakday.start>=:start')
->andWhere('breakday.end<=:end')
->setParameter('start',$start)
->setParameter('end',$end)
->getQuery()->getResult();
foreach($breakdays as $breakday) {
$duration++;
}
// On recherche l'ensemble des évènements de la semaine
$events = $em
->createQueryBuilder('event')
->select("event")
->from('App:Event','event')
->Where('event.user=:user')
->andWhere('event.start>=:start')
->andWhere('event.end<=:end')
->setParameter('user',$iduser)
->setParameter('start',$start)
->setParameter('end',$end)
->getQuery()->getResult();
foreach($events as $event) {
$duration+=$event->getDuration();
// Si congès = le congès doit etre validé
if($event->getTask()->getNature()->getId()==-200)
{
if(!$event->getValidateholiday()) {
$output=["return"=>"KO","error"=>"Validation impossible = présence de congés non validés"];
return new Response(json_encode($output));
}
}
}
if($duration< 5) {
$output=["return"=>"KO","error"=>"Validation impossible = semaine incomplète"];
return new Response(json_encode($output));
}
// OK = On valide les evenements
foreach($events as $event) {
$event->setValidate(true);
$em->persist($event);
$em->flush();
}
// OK = On valide les astreintes
$start= new \Datetime($day);
$end=clone $start;
$end->modify('next Monday');
$penaltys = $em
->createQueryBuilder('penalty')
->select("penalty")
->from('App:Penalty','penalty')
->Where('penalty.user=:user')
->andWhere('penalty.start>=:start')
->andWhere('penalty.end<=:end')
->setParameter('user',$iduser)
->setParameter('start',$start)
->setParameter('end',$end)
->getQuery()->getResult();
foreach($penaltys as $penalty) {
$penalty->setValidate(true);
$em->persist($penalty);
$em->flush();
}
$output=[];
return new Response(json_encode($output));
}
public function devalidate(Request $request){
$em = $this->getDoctrine()->getManager();
// Récupération des variables envoyées en post
$iduser = $request->request->get('iduser');
$day = $request->request->get('day');
$start= new \Datetime($day);
$end=clone $start;
$end->modify('next Saturday');
// On recherche l'ensemble des évènements de la semaine
$events = $em
->createQueryBuilder('event')
->select("event")
->from('App:Event','event')
->Where('event.user=:user')
->andWhere('event.start>=:start')
->andWhere('event.end<=:end')
->setParameter('user',$iduser)
->setParameter('start',$start)
->setParameter('end',$end)
->getQuery()->getResult();
/*
foreach($events as $event) {
// Si congès = le congès doit etre non validé
if($event->getTask()->getNature()->getId()==-200)
{
if($event->getValidateholiday()) {
$output=["return"=>"KO","error"=>"Dévalidation impossible = présence de congés validés"];
return new Response(json_encode($output));
}
}
}
*/
// OK = On devalide les evenements
foreach($events as $event) {
$event->setValidate(false);
$em->persist($event);
$em->flush();
}
// OK = On devalide les astreintes
$start= new \Datetime($day);
$end=clone $start;
$end->modify('next Monday');
$penaltys = $em
->createQueryBuilder('penalty')
->select("penalty")
->from('App:Penalty','penalty')
->Where('penalty.user=:user')
->andWhere('penalty.start>=:start')
->andWhere('penalty.end<=:end')
->setParameter('user',$iduser)
->setParameter('start',$start)
->setParameter('end',$end)
->getQuery()->getResult();
foreach($penaltys as $penalty) {
$penalty->setValidate(false);
$em->persist($penalty);
$em->flush();
}
$output=[];
return new Response(json_encode($output));
}
public function validationholiday(Request $request)
{
$em = $this->getDoctrine()->getManager();
$iduser=$this->get("session")->get("iduser");
if($iduser=="all") {
$users=$em->getRepository("App:User")->findAll();
}
else {
$users=$em->getRepository("App:User")->findBy(["id"=>$iduser]);
}
$tbevents=[];
foreach($users as $user) {
if(in_array("ROLE_USER",$user->getRoles())) {
// Filtre par Service
if($this->get('session')->get('idservice')!="all") {
if($user->getService()->getId()!=$this->get('session')->get('idservice'))
continue;
}
$tmp=[
"id" => $user->getId(),
"user" => $user,
"holidays" => [],
"holidaystodevalidate" => [],
];
// Congès à valider ou à dévalider
$holidays = $em
->createQueryBuilder('event')
->select('event')
->from('App:Event','event')
->from('App:Task','task')
->Where('event.user=:user')
->andWhere('event.validateholiday=:validate')
->andWhere('task=event.task')
->andWhere('task.nature=:nature')
->setParameter('user',$user->getId())
->setParameter('validate',!($this->get("session")->get("activeholiday")))
->setParameter('nature',-200)
->getQuery()->getResult();
foreach($holidays as $holiday) {
// On ne peut dévalider les congès que sur une semaine non validé
if(!$this->get("session")->get("activeholiday")&&$holiday->getValidate())
continue;
$tbholiday = [
"id"=>$holiday->getId(),
"start"=>$holiday->getStart(),
"end"=>$holiday->getEnd()->sub(new \DateInterval('PT1M')),
"task"=>$holiday->getTask()->getName(),
"duration"=>$holiday->getDuration(),
"validateholiday"=>$holiday->getValidateholiday(),
];
array_push($tmp["holidays"],$tbholiday);
}
array_push($tbevents,$tmp);
}
}
if($request->query->get('fgprint')) {
$render = $this->renderView('Validation/validationholiday.html.twig',[
"useheader" => true,
"usesidebar" => ($this->getUser()),
"users" => $tbevents,
"fgprint" => $request->query->get('fgprint'),
]);
return new PdfResponse(
$this->knpSnappy->getOutputFromHtml($render),
'validationconges.pdf'
);
}
else {
return $this->render('Validation/validationholiday.html.twig',[
"useheader" => true,
"usesidebar" => ($this->getUser()),
"users" => $tbevents
]);
}
}
public function validateholiday(Request $request){
$em = $this->getDoctrine()->getManager();
// Récupération des variables envoyées en post
$id = $request->request->get('id');
$event=$em->getRepository("App:Event")->find($id);
if($event) {
$event->setValidateholiday(true);
$em->persist($event);
$em->flush();
$iduser=$event->getUser()->getId();
$idevent=$event->getId();
// $this->notificator->sendNotifValid("Congé validé", $iduser, $event);
}
$output=[];
return new Response(json_encode($output));
}
public function devalidateholiday(Request $request){
$em = $this->getDoctrine()->getManager();
// Récupération des variables envoyées en post
$id = $request->request->get('id');
$event=$em->getRepository("App:Event")->find($id);
if($event) {
if($event->getValidate()) {
$output=["return"=>"KO","error"=>"Dévalidation impossible = semaine de travail validée"];
return new Response(json_encode($output));
}
$event->setValidateholiday(false);
$em->persist($event);
$em->flush();
}
$output=[];
return new Response(json_encode($output));
}
public function activeholiday() {
$this->get('session')->set('activeholiday',!$this->get('session')->get('activeholiday'));
return $this->redirectToRoute("app_validationholiday");
}
public function validationtimer(Request $request)
{
$em = $this->getDoctrine()->getManager();
$iduser=$this->get("session")->get("iduser");
if($iduser=="all") {
$users=$em->getRepository("App:User")->findAll();
}
else {
$users=$em->getRepository("App:User")->findBy(["id"=>$iduser]);
}
$tbtimers=[];
foreach($users as $user) {
if(in_array("ROLE_USER",$user->getRoles())) {
// Filtre par Service
if($this->get('session')->get('idservice')!="all") {
if($user->getService()->getId()!=$this->get('session')->get('idservice'))
continue;
}
$tmp=[
"id" => $user->getId(),
"user" => $user,
"timers" => [],
"timerstodevalidate" => [],
];
// Timers à valider ou à dévalider
$timers = $em
->createQueryBuilder('timer')
->select('timer')
->from('App:Timer','timer')
->from('App:Task','task')
->Where('timer.user=:user')
->andWhere('timer.validate=:validate')
->andWhere('task=timer.task')
->setParameter('user',$user->getId())
->setParameter('validate',!($this->get("session")->get("activetimer")))
->getQuery()->getResult();
foreach($timers as $timer) {
$tbtimer = [
"id"=>$timer->getId(),
"taskname"=>$timer->getTask()->getDisplayname(),
"user"=>$timer->getUser()->getUsername(),
"start"=>$timer->getStart()->format("Y-m-d H:i"),
"end"=>$timer->getEnd()->format("Y-m-d H:i"),
"duration"=>$timer->getDuration(),
"activepenalty"=>$timer->getActivePenalty(),
"additionalhour"=>$timer->getAdditionalHour(),
"description"=>$timer->getDescription(),
"validate"=>$timer->getValidate(),
];
array_push($tmp["timers"],$tbtimer);
}
array_push($tbtimers,$tmp);
}
}
if($request->query->get('fgprint')) {
$render = $this->renderView('Validation/validationtimer.html.twig',[
"useheader" => true,
"usesidebar" => ($this->getUser()),
"users" => $tbtimers,
"fgprint" => $request->query->get('fgprint'),
]);
return new PdfResponse(
$this->knpSnappy->getOutputFromHtml($render),
'validationhoraires.pdf'
);
}
else {
return $this->render('Validation/validationtimer.html.twig',[
"useheader" => true,
"usesidebar" => ($this->getUser()),
"users" => $tbtimers
]);
}
}
public function validatetimer(Request $request){
$em = $this->getDoctrine()->getManager();
// Récupération des variables envoyées en post
$id = $request->request->get('id');
$timer=$em->getRepository("App:Timer")->find($id);
if($timer) {
$timer->setValidate(true);
$em->persist($timer);
$em->flush();
$iduser=$this->get("session")->get("iduser");
$idtimer=$timer->getId();
}
$output=[];
return new Response(json_encode($output));
}
public function devalidatetimer(Request $request){
$em = $this->getDoctrine()->getManager();
// Récupération des variables envoyées en post
$id = $request->request->get('id');
$timer=$em->getRepository("App:Timer")->find($id);
if($timer) {
$timer->setValidate(false);
$em->persist($timer);
$em->flush();
}
$output=[];
return new Response(json_encode($output));
}
public function activetimer() {
$this->get('session')->set('activetimer',!$this->get('session')->get('activetimer'));
return $this->redirectToRoute("app_validationtimer");
}
}

View File

@@ -1,180 +0,0 @@
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\FormError;
use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
use App\Entity\Year as Entity;
use App\Form\YearType as Form;
class YearController extends AbstractController
{
private $data = "year";
private $route = "app_year";
private $render = "Year/";
private $entity = "App:Year";
private $knpSnappy;
public function __construct(\Knp\Snappy\Pdf $knpSnappy) { $this->knpSnappy = $knpSnappy; }
public function list(Request $request)
{
$em = $this->getDoctrine()->getManager();
$datas = $em->getRepository($this->entity)->findAll();
if($request->query->get('fgprint')) {
$render = $this->renderView($this->render.'list.html.twig',[
$this->data."s" => $datas,
"useheader" => true,
"usesidebar" => true,
"fgprint" => true,
]);
return new PdfResponse(
$this->knpSnappy->getOutputFromHtml($render),
'years.pdf'
);
}
else {
return $this->render($this->render.'list.html.twig',[
$this->data."s" => $datas,
"useheader" => true,
"usesidebar" => true,
]);
}
}
public function submit(Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data = new Entity();
// Création du formulaire
$form = $this->createForm(Form::class,$data,array("mode"=>"submit"));
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm(null,$form,$request,$data,"submit");
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData();
$em->persist($data);
$em->flush();
// Retour à la liste
return $this->redirectToRoute($this->route);
}
// Affichage du formulaire
return $this->render($this->render.'edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
$this->data => $data,
'mode' => 'submit',
'form' => $form->createView()
]);
}
public function update($id,Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data=$em->getRepository($this->entity)->find($id);
// Création du formulaire
$form = $this->createForm(Form::class,$data,array("mode"=>"update"));
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm(null,$form,$request,$data,"update");
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData();
$em->persist($data);
$em->flush();
// Retour à la liste
return $this->redirectToRoute($this->route);
}
// Affichage du formulaire
if($request->query->get('fgprint')) {
$render = $this->renderView($this->render.'edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
$this->data => $data,
'mode' => 'update',
'form' => $form->createView(),
"fgprint" => true,
]);
return new PdfResponse(
$this->knpSnappy->getOutputFromHtml($render),
'year.pdf'
);
}
else {
return $this->render($this->render.'edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
$this->data => $data,
'mode' => 'update',
'form' => $form->createView()
]);
}
}
public function delete($id,Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data=$em->getRepository($this->entity)->find($id);
// Controle avant suppression
$error=false;
if($error)
return $this->redirectToRoute($this->route."_update",["id"=>$id]);
else {
try {
$em->remove($data);
$em->flush();
}
catch(\Doctrine\DBAL\DBALException $e) {
// Création du formulaire
$this->get('session')->getFlashBag()->add('error', 'Impossible de supprimer cet enregistrement');
return $this->redirectToRoute($this->route."_update",["id"=>$id]);
}
// Retour à la liste
return $this->redirectToRoute($this->route);
}
}
protected function getErrorForm($id,$form,$request,$data,$mode) {
if ($form->get('submit')->isClicked()&&$mode=="delete") {
}
if ($form->get('submit')->isClicked() && $mode=="submit") {
}
if ($form->get('submit')->isClicked() && !$form->isValid()) {
$this->get('session')->getFlashBag()->clear();
$errors = $form->getErrors();
foreach( $errors as $error ) {
$request->getSession()->getFlashBag()->add("error", $error->getMessage());
}
}
}
}

View File

@@ -1,65 +0,0 @@
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* Event
*
* @ORM\Table(name="breakday")
* @ORM\Entity(repositoryClass="App\Repository\BreakdayRepository")
* @UniqueEntity(
* fields={"start"},
* message="Jour férié déjà existant"
* )
*/
class Breakday
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="start", type="datetime", unique=true)
*/
private $start;
/**
* @ORM\Column(name="end", type="datetime")
*/
private $end;
public function getId(): ?int
{
return $this->id;
}
public function getStart(): ?\DateTime
{
return $this->start;
}
public function setStart(\DateTime $start): self
{
$this->start = $start;
return $this;
}
public function getEnd(): ?\DateTime
{
return $this->end;
}
public function setEnd(\DateTime $end): self
{
$this->end = $end;
return $this;
}
}

View File

@@ -1,206 +0,0 @@
<?php
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Domaine
*
* @ORM\Table(name="domaine")
* @ORM\Entity(repositoryClass="App\Repository\DomaineRepository")
*/
class Domaine
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="name", type="string")
*
*/
private $name;
/**
* @ORM\Column(name="category", type="string")
*
*/
private $category;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $description;
/**
* @ORM\OneToMany(targetEntity="User", mappedBy="domaine", cascade={"persist"}, orphanRemoval=false)
*/
private $users;
/**
* @ORM\OneToMany(targetEntity="Project", mappedBy="domaine", cascade={"persist"}, orphanRemoval=false)
*/
private $projects;
/**
* @ORM\OneToMany(targetEntity="Yeardomaine", mappedBy="domaine", cascade={"persist", "remove"}, orphanRemoval=true)
*/
private $years;
public function __construct()
{
$this->users = new ArrayCollection();
$this->projects = new ArrayCollection();
$this->years = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function setId(int $id): self
{
$this->id = $id;
return $this;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getDescription(): ?string
{
return $this->description;
}
public function setDescription(?string $description): self
{
$this->description = $description;
return $this;
}
/**
* @return Collection|User[]
*/
public function getUsers(): Collection
{
return $this->users;
}
public function addUser(User $user): self
{
if (!$this->users->contains($user)) {
$this->users[] = $user;
$user->setDomaine($this);
}
return $this;
}
public function removeUser(User $user): self
{
if ($this->users->contains($user)) {
$this->users->removeElement($user);
// set the owning side to null (unless already changed)
if ($user->getDomaine() === $this) {
$user->setDomaine(null);
}
}
return $this;
}
/**
* @return Collection|Project[]
*/
public function getProjects(): Collection
{
return $this->projects;
}
public function addProject(Project $project): self
{
if (!$this->projects->contains($project)) {
$this->projects[] = $project;
$project->setDomaine($this);
}
return $this;
}
public function removeProject(Project $project): self
{
if ($this->projects->contains($project)) {
$this->projects->removeElement($project);
// set the owning side to null (unless already changed)
if ($project->getDomaine() === $this) {
$project->setDomaine(null);
}
}
return $this;
}
public function getCategory(): ?string
{
return $this->category;
}
public function setCategory(string $category): self
{
$this->category = $category;
return $this;
}
/**
* @return Collection|Yeardomaine[]
*/
public function getYears(): Collection
{
return $this->years;
}
public function addYear(Yeardomaine $year): self
{
if (!$this->years->contains($year)) {
$this->years[] = $year;
$year->setDomaine($this);
}
return $this;
}
public function removeYear(Yeardomaine $year): self
{
if ($this->years->contains($year)) {
$this->years->removeElement($year);
// set the owning side to null (unless already changed)
if ($year->getDomaine() === $this) {
$year->setDomaine(null);
}
}
return $this;
}
}

View File

@@ -1,214 +0,0 @@
<?php
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Offer
*
* @ORM\Table(name="offer")
* @ORM\Entity(repositoryClass="App\Repository\OfferRepository")
*/
class Offer
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="name", type="string")
*
*/
private $name;
/**
* @ORM\Column(name="ref", type="string", nullable=true)
*
*/
private $ref;
/**
* @ORM\Column(name="quantity", type="decimal", scale=2)
*
*/
private $quantity;
/**
* @ORM\Column(name="pu", type="decimal", scale=2)
*
*/
private $pu;
private $total;
/**
* @ORM\Column(name="validate", type="decimal", scale=2, nullable=true)
*
*/
private $validate;
/**
* @ORM\Column(name="cost", type="decimal", scale=2, nullable=true)
*
*/
private $cost;
/**
* @ORM\Column(name="active", type="boolean")
*
*/
private $active;
/**
* @ORM\Column(name="iddolibarr", type="string", nullable=true)
*
*/
private $iddolibarr;
/**
* @ORM\ManyToOne(targetEntity="Project", inversedBy="offers")
*/
private $project;
/**
* @ORM\ManyToOne(targetEntity="Service", inversedBy="offers")
*/
private $service;
public function getTotal()
{
return $this->quantity*$this->pu;
}
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getRef(): ?string
{
return $this->ref;
}
public function setRef(string $ref): self
{
$this->ref = $ref;
return $this;
}
public function getQuantity(): ?string
{
return $this->quantity;
}
public function setQuantity(string $quantity): self
{
$this->quantity = $quantity;
return $this;
}
public function getPu(): ?string
{
return $this->pu;
}
public function setPu(string $pu): self
{
$this->pu = $pu;
return $this;
}
public function getValidate(): ?string
{
return $this->validate;
}
public function setValidate(string $validate): self
{
$this->validate = $validate;
return $this;
}
public function getActive(): ?bool
{
return $this->active;
}
public function setActive(bool $active): self
{
$this->active = $active;
return $this;
}
public function getProject(): ?Project
{
return $this->project;
}
public function setProject(?Project $project): self
{
$this->project = $project;
return $this;
}
public function getIddolibarr(): ?string
{
return $this->iddolibarr;
}
public function setIddolibarr(?string $iddolibarr): self
{
$this->iddolibarr = $iddolibarr;
return $this;
}
public function getCost(): ?string
{
return $this->cost;
}
public function setCost(?string $cost): self
{
$this->cost = $cost;
return $this;
}
public function getService(): ?Service
{
return $this->service;
}
public function setService(?Service $service): self
{
$this->service = $service;
return $this;
}
}

View File

@@ -1,300 +0,0 @@
<?php
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Project
*
* @ORM\Table(name="project")
* @ORM\Entity(repositoryClass="App\Repository\ProjectRepository")
*/
class Project
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="name", type="string")
*
*/
private $name;
private $displayname;
/**
* @ORM\Column(name="active", type="boolean")
*
*/
private $active;
/**
* @ORM\Column(name="visible", type="boolean")
*
*/
private $visible=true;
/**
* @ORM\ManyToOne(targetEntity="Customer", inversedBy="projects")
*/
private $customer;
/**
* @ORM\ManyToOne(targetEntity="Service", inversedBy="projects")
*/
private $service;
/**
* @ORM\ManyToOne(targetEntity="Domaine", inversedBy="projects")
*/
private $domaine;
/**
* @ORM\OneToMany(targetEntity="Offer", mappedBy="project", cascade={"persist"}, orphanRemoval=false)
*/
private $offers;
/**
* @ORM\OneToMany(targetEntity="Task", mappedBy="project", cascade={"persist"}, orphanRemoval=false)
*/
private $tasks;
/**
* @ORM\OneToMany(targetEntity="Userproject", mappedBy="project", cascade={"persist", "remove"}, orphanRemoval=true)
*/
private $userprojects;
/**
* @ORM\OneToMany(targetEntity="Yearproject", mappedBy="project", cascade={"persist", "remove"}, orphanRemoval=true)
*/
private $years;
public function getDisplayname(): ?string
{
return $this->customer->getName()." - ".$this->name;
}
public function __construct()
{
$this->offers = new ArrayCollection();
$this->task = new ArrayCollection();
$this->tasks = new ArrayCollection();
$this->userprojects = new ArrayCollection();
$this->years = new ArrayCollection();
}
public function __toString()
{
return $this->name;
}
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getActive(): ?bool
{
return $this->active;
}
public function setActive(bool $active): self
{
$this->active = $active;
return $this;
}
public function getCustomer(): ?Customer
{
return $this->customer;
}
public function setCustomer(?Customer $customer): self
{
$this->customer = $customer;
return $this;
}
public function getService(): ?Service
{
return $this->service;
}
public function setService(?Service $service): self
{
$this->service = $service;
return $this;
}
/**
* @return Collection|Offer[]
*/
public function getOffers(): Collection
{
return $this->offers;
}
public function addOffer(Offer $offer): self
{
if (!$this->offers->contains($offer)) {
$this->offers[] = $offer;
$offer->setProject($this);
}
return $this;
}
public function removeOffer(Offer $offer): self
{
if ($this->offers->contains($offer)) {
$this->offers->removeElement($offer);
// set the owning side to null (unless already changed)
if ($offer->getProject() === $this) {
$offer->setProject(null);
}
}
return $this;
}
/**
* @return Collection|Task[]
*/
public function getTasks(): Collection
{
return $this->tasks;
}
public function addTask(Task $task): self
{
if (!$this->tasks->contains($task)) {
$this->tasks[] = $task;
$task->setProject($this);
}
return $this;
}
public function removeTask(Task $task): self
{
if ($this->tasks->contains($task)) {
$this->tasks->removeElement($task);
// set the owning side to null (unless already changed)
if ($task->getProject() === $this) {
$task->setProject(null);
}
}
return $this;
}
/**
* @return Collection|Userproject[]
*/
public function getUserprojects(): Collection
{
return $this->userprojects;
}
public function addUserproject(Userproject $userproject): self
{
if (!$this->userprojects->contains($userproject)) {
$this->userprojects[] = $userproject;
$userproject->setProject($this);
}
return $this;
}
public function removeUserproject(Userproject $userproject): self
{
if ($this->userprojects->contains($userproject)) {
$this->userprojects->removeElement($userproject);
// set the owning side to null (unless already changed)
if ($userproject->getProject() === $this) {
$userproject->setProject(null);
}
}
return $this;
}
public function getVisible(): ?bool
{
return $this->visible;
}
public function setVisible(bool $visible): self
{
$this->visible = $visible;
return $this;
}
public function getDomaine(): ?Domaine
{
return $this->domaine;
}
public function setDomaine(?Domaine $domaine): self
{
$this->domaine = $domaine;
return $this;
}
/**
* @return Collection|Yearproject[]
*/
public function getYears(): Collection
{
return $this->years;
}
public function addYear(Yearproject $year): self
{
if (!$this->years->contains($year)) {
$this->years[] = $year;
$year->setProject($this);
}
return $this;
}
public function removeYear(Yearproject $year): self
{
if ($this->years->contains($year)) {
$this->years->removeElement($year);
// set the owning side to null (unless already changed)
if ($year->getProject() === $this) {
$year->setProject(null);
}
}
return $this;
}
}

View File

@@ -1,50 +0,0 @@
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Script
*
* @ORM\Table(name="script")
* @ORM\Entity(repositoryClass="App\Repository\ScriptRepository")
*/
class Script
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", nullable=false)
* @Assert\NotBlank()
*
*/
private $name;
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
}

View File

@@ -1,199 +0,0 @@
<?php
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Service
*
* @ORM\Table(name="service")
* @ORM\Entity(repositoryClass="App\Repository\ServiceRepository")
*/
class Service
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="name", type="string")
*
*/
private $name;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $description;
/**
* @ORM\Column(name="dolibarrcode", type="string", nullable=true)
*
*/
private $dolibarrcode;
/**
* @ORM\OneToMany(targetEntity="User", mappedBy="service", cascade={"persist"}, orphanRemoval=false)
*/
private $users;
/**
* @ORM\OneToMany(targetEntity="Project", mappedBy="service", cascade={"persist"}, orphanRemoval=false)
*/
private $projects;
/**
* @ORM\OneToMany(targetEntity="Offer", mappedBy="service", cascade={"persist"}, orphanRemoval=false)
*/
private $offers;
public function __construct()
{
$this->users = new ArrayCollection();
$this->projects = new ArrayCollection();
$this->offers = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getDescription(): ?string
{
return $this->description;
}
public function setDescription(?string $description): self
{
$this->description = $description;
return $this;
}
/**
* @return Collection|User[]
*/
public function getUsers(): Collection
{
return $this->users;
}
public function addUser(User $user): self
{
if (!$this->users->contains($user)) {
$this->users[] = $user;
$user->setService($this);
}
return $this;
}
public function removeUser(User $user): self
{
if ($this->users->contains($user)) {
$this->users->removeElement($user);
// set the owning side to null (unless already changed)
if ($user->getService() === $this) {
$user->setService(null);
}
}
return $this;
}
/**
* @return Collection|Project[]
*/
public function getProjects(): Collection
{
return $this->projects;
}
public function addProject(Project $project): self
{
if (!$this->projects->contains($project)) {
$this->projects[] = $project;
$project->setService($this);
}
return $this;
}
public function removeProject(Project $project): self
{
if ($this->projects->contains($project)) {
$this->projects->removeElement($project);
// set the owning side to null (unless already changed)
if ($project->getService() === $this) {
$project->setService(null);
}
}
return $this;
}
/**
* @return Collection|Offer[]
*/
public function getOffers(): Collection
{
return $this->offers;
}
public function addOffer(Offer $offer): self
{
if (!$this->offers->contains($offer)) {
$this->offers[] = $offer;
$offer->setService($this);
}
return $this;
}
public function removeOffer(Offer $offer): self
{
if ($this->offers->contains($offer)) {
$this->offers->removeElement($offer);
// set the owning side to null (unless already changed)
if ($offer->getService() === $this) {
$offer->setService(null);
}
}
return $this;
}
public function getDolibarrcode(): ?string
{
return $this->dolibarrcode;
}
public function setDolibarrcode(string $dolibarrcode): self
{
$this->dolibarrcode = $dolibarrcode;
return $this;
}
}

View File

@@ -1,160 +0,0 @@
<?php
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Year
*
* @ORM\Table(name="year")
* @ORM\Entity()
*/
class Year
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="start", type="datetime")
*
*/
private $start;
/**
* @ORM\Column(name="end", type="datetime")
*
*/
private $end;
/**
* @ORM\Column(type="integer")
*/
private $nbday;
/**
* @ORM\OneToMany(targetEntity="Yearproject", mappedBy="year", cascade={"persist", "remove"}, orphanRemoval=true)
*/
private $projects;
/**
* @ORM\OneToMany(targetEntity="Yeardomaine", mappedBy="year", cascade={"persist", "remove"}, orphanRemoval=true)
*/
private $domaines;
public function __construct()
{
$this->projects = new ArrayCollection();
$this->domaines = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getStart(): ?\DateTimeInterface
{
return $this->start;
}
public function setStart(\DateTimeInterface $start): self
{
$this->start = $start;
return $this;
}
public function getEnd(): ?\DateTimeInterface
{
return $this->end;
}
public function setEnd(\DateTimeInterface $end): self
{
$this->end = $end;
return $this;
}
public function getNbday()
{
return $this->nbday;
}
public function setNbday($nbday): self
{
$this->nbday = $nbday;
return $this;
}
/**
* @return Collection|Yearproject[]
*/
public function getProjects(): Collection
{
return $this->projects;
}
public function addProject(Yearproject $project): self
{
if (!$this->projects->contains($project)) {
$this->projects[] = $project;
$project->setYear($this);
}
return $this;
}
public function removeProject(Yearproject $project): self
{
if ($this->projects->contains($project)) {
$this->projects->removeElement($project);
// set the owning side to null (unless already changed)
if ($project->getYear() === $this) {
$project->setYear(null);
}
}
return $this;
}
/**
* @return Collection|Yeardomaine[]
*/
public function getDomaines(): Collection
{
return $this->domaines;
}
public function addDomaine(Yeardomaine $domaine): self
{
if (!$this->domaines->contains($domaine)) {
$this->domaines[] = $domaine;
$domaine->setYear($this);
}
return $this;
}
public function removeDomaine(Yeardomaine $domaine): self
{
if ($this->domaines->contains($domaine)) {
$this->domaines->removeElement($domaine);
// set the owning side to null (unless already changed)
if ($domaine->getYear() === $this) {
$domaine->setYear(null);
}
}
return $this;
}
}

View File

@@ -1,114 +0,0 @@
<?php
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Table(name="yeardomaine")
* @ORM\Entity()
*/
class Yeardomaine
{ /**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Year", inversedBy="domaines")
*/
private $year;
/**
* @ORM\ManyToOne(targetEntity="Domaine", inversedBy="years")
*/
private $domaine;
/**
* @ORM\Column(type="integer")
*/
private $nbdaybudget=0;
/**
* @ORM\Column(type="integer")
*/
private $cabudget=0;
/**
* @ORM\Column(type="integer")
*/
private $careal=0;
public function getId(): ?int
{
return $this->id;
}
public function getNbdaybudget(): ?int
{
return $this->nbdaybudget;
}
public function setNbdaybudget(int $nbdaybudget): self
{
$this->nbdaybudget = $nbdaybudget;
return $this;
}
public function getCabudget(): ?int
{
return $this->cabudget;
}
public function setCabudget(int $cabudget): self
{
$this->cabudget = $cabudget;
return $this;
}
public function getCareal(): ?int
{
return $this->careal;
}
public function setCareal(int $careal): self
{
$this->careal = $careal;
return $this;
}
public function getYear(): ?Year
{
return $this->year;
}
public function setYear(?Year $year): self
{
$this->year = $year;
return $this;
}
public function getDomaine(): ?Domaine
{
return $this->domaine;
}
public function setDomaine(?Domaine $domaine): self
{
$this->domaine = $domaine;
return $this;
}
}

View File

@@ -1,113 +0,0 @@
<?php
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Table(name="yearproject")
* @ORM\Entity()
*/
class Yearproject
{ /**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Year", inversedBy="projects")
*/
private $year;
/**
* @ORM\ManyToOne(targetEntity="Project", inversedBy="years")
*/
private $project;
/**
* @ORM\Column(type="integer")
*/
private $nbdaybudget=0;
/**
* @ORM\Column(type="integer")
*/
private $cabudget=0;
/**
* @ORM\Column(type="integer")
*/
private $careal=0;
public function getId(): ?int
{
return $this->id;
}
public function getNbdaybudget(): ?int
{
return $this->nbdaybudget;
}
public function setNbdaybudget(int $nbdaybudget): self
{
$this->nbdaybudget = $nbdaybudget;
return $this;
}
public function getCabudget(): ?int
{
return $this->cabudget;
}
public function setCabudget(int $cabudget): self
{
$this->cabudget = $cabudget;
return $this;
}
public function getCareal(): ?int
{
return $this->careal;
}
public function setCareal(int $careal): self
{
$this->careal = $careal;
return $this;
}
public function getYear(): ?Year
{
return $this->year;
}
public function setYear(?Year $year): self
{
$this->year = $year;
return $this;
}
public function getProject(): ?Project
{
return $this->project;
}
public function setProject(?Project $project): self
{
$this->project = $project;
return $this;
}
}

View File

@@ -1,65 +0,0 @@
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\EntityManager;
class DomaineType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('submit',
SubmitType::class, [
"label" => "Valider",
"attr" => ["class" => "btn btn-success no-print"],
]
);
$builder->add('category',
ChoiceType::class, [
'label' => "Catégorie",
'choices' => array("Frais"=>"Frais","Administratif" => "Administratif","Opérationnel" => "Opérationnel","Interne" => "Interne")
]
);
$builder->add('name',
TextType::class, [
"label" =>"Nom"
]
);
$builder->add('description',
CKEditorType::class, [
"required" => false,
"config" => [
'uiColor' => '#ffffff',
],
]
);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'App\Entity\Domaine',
'mode' => 'string',
));
}
}

View File

@@ -1,131 +0,0 @@
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Tetranz\Select2EntityBundle\Form\Type\Select2EntityType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\EntityManager;
class OfferType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('submit',
SubmitType::class, [
"label" => "Valider",
"attr" => ["class" => "btn btn-success no-print"],
]
);
$builder->add('name',
TextType::class, [
"label" => "Nom"
]
);
$builder->add('ref',
TextType::class, [
"label" => "Référence",
"required" => false
]
);
$builder->add('quantity',
NumberType::class, [
"label" => "Quantité",
//"html5" => true,
"scale" => 2
]
);
$builder->add('pu',
NumberType::class, [
"label" => "Prix Unitaire",
//"html5" => true,
"scale" => 2
]
);
$builder->add('validate',
NumberType::class, [
"label" => "Nombre de jours validés hors planning",
//"html5" => true,
"scale" => 2
]
);
$builder->add('cost',
NumberType::class, [
"label" => "Autres Frais",
//"html5" => true,
"scale" => 2
]
);
$builder->add("active",
ChoiceType::class,[
"label" => "Actif",
"choices" => ["Oui"=>true,"Non"=>false]
]
);
$builder->add('project',
Select2EntityType::class, [
"label" => "Projet",
"disabled" => false,
"required" => true,
"multiple" => false,
"remote_route" => "app_project_select",
"class" => "App:Project",
"primary_key" => "id",
"text_property" => "displayname",
"minimum_input_length" => 0,
"page_limit" => 10,
"allow_clear" => true,
"delay" => 250,
"cache" => false,
"cache_timeout" => 60000,
"language" => "fr",
"theme" => "bootstrap4",
"placeholder" => "Selectionner un Projet",
//"attr" => ["class" => "form-control", "style" => "margin-bottom:15px"]
]
);
$builder->add('service',
EntityType::class, [
"class" => "App:Service",
"label" => "Service",
"choice_label" => "name",
"placeholder" => "Selectionner un Service",
]
);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'App\Entity\Offer',
'mode' => 'string',
));
}
}

View File

@@ -1,77 +0,0 @@
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Tetranz\Select2EntityBundle\Form\Type\Select2EntityType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\EntityManager;
class OfferdolibarrType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('submit',
SubmitType::class, [
"label" => "Valider",
"attr" => ["class" => "btn btn-success no-print"],
]
);
$builder->add('name',
TextType::class, [
"label" => "Nom (désignation produit ajoutée en fin de nom automatiquement)"
]
);
$builder->add('project',
Select2EntityType::class, [
"label" => "Projet",
"disabled" => false,
"required" => true,
"multiple" => false,
"remote_route" => "app_project_select",
"class" => "App:Project",
"primary_key" => "id",
"text_property" => "displayname",
"minimum_input_length" => 0,
"page_limit" => 10,
"allow_clear" => true,
"delay" => 250,
"cache" => false,
"cache_timeout" => 60000,
"language" => "fr",
"theme" => "bootstrap4",
"placeholder" => "Selectionner un Projet",
//"attr" => ["class" => "form-control", "style" => "margin-bottom:15px"]
]
);
$builder->add('tasks', HiddenType::class,["mapped" => false]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'App\Entity\Offer',
'mode' => 'string',
));
}
}

View File

@@ -1,93 +0,0 @@
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\EntityManager;
class ProjectType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('submit',
SubmitType::class, [
"label" => "Valider",
"attr" => ["class" => "btn btn-success no-print"],
]
);
$builder->add('name',
TextType::class, [
"label" =>"Nom"
]
);
$builder->add("active",
ChoiceType::class,[
"label" => "Actif",
"choices" => ["Oui"=>true,"Non"=>false]
]
);
$builder->add("visible",
ChoiceType::class,[
"label" => "Visible par le client",
"choices" => ["Oui"=>true,"Non"=>false]
]
);
$builder->add('customer',
EntityType::class, [
"label" => "Client",
"class" => "App:Customer",
"choice_label" => function ($customer) {
return $customer->getName();},
"disabled" => false,
"required" => true,
"multiple" => false,
"placeholder" => "Selectionner un Client",
]
);
$builder->add('service',
EntityType::class, [
"class" => "App:Service",
"label" => "Service",
"choice_label" => "name",
]
);
$builder->add('domaine',
EntityType::class, [
"class" => "App:Domaine",
"label" => "Domaine",
"choice_label" => "name",
]
);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'App\Entity\Project',
'mode' => 'string',
));
}
}

View File

@@ -1,68 +0,0 @@
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\EntityManager;
class ServiceType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('submit',
SubmitType::class, [
"label" => "Valider",
"attr" => ["class" => "btn btn-success no-print"],
]
);
$builder->add('name',
TextType::class, [
"label" =>"Nom"
]
);
$builder->add('description',
CKEditorType::class, [
"required" => false,
"config" => [
'uiColor' => '#ffffff',
],
]
);
if($options["doliActive"]) {
$builder->add('dolibarrcode',
TextType::class, [
"required" => false,
"label" =>"Code Produit Dolibarr"
]
);
}
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'App\Entity\Service',
'mode' => 'string',
'doliActive' => 'string',
));
}
}

View File

@@ -1,104 +0,0 @@
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Tetranz\Select2EntityBundle\Form\Type\Select2EntityType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\EntityManager;
class TaskType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('submit',
SubmitType::class, [
"label" => "Valider",
"attr" => ["class" => "btn btn-success no-print"],
]
);
$builder->add('name',
TextType::class, [
"label" => "Nom"
]
);
$builder->add('quantity',
NumberType::class, [
"label" => "Estimation",
//"html5" => true,
"scale" => 2,
"required" => false,
]
);
$builder->add('nature',
EntityType::class, [
"class" => "App:Nature",
"label" => "Nature",
"choice_label" => "name",
]
);
$builder->add("active",
ChoiceType::class,[
"label" => "Actif",
"choices" => ["Non"=>false, "Oui"=>true]
]
);
$builder->add('color',
TextType::class, [
"label" => "Couleur",
"attr" => array("class" => "pick-a-color")
]
);
$builder->add('project',
Select2EntityType::class, [
"label" => "Projet",
"disabled" => false,
"required" => true,
"multiple" => false,
"remote_route" => "app_project_select",
"class" => "App:Project",
"primary_key" => "id",
"text_property" => "displayname",
"minimum_input_length" => 0,
"page_limit" => 100,
"allow_clear" => true,
"delay" => 250,
"cache" => false,
"cache_timeout" => 60000,
"language" => "fr",
"theme" => "bootstrap4",
"placeholder" => "Selectionner un Projet",
]
);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'App\Entity\Task',
'mode' => 'string',
));
}
}

View File

@@ -1,137 +0,0 @@
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Tetranz\Select2EntityBundle\Form\Type\Select2EntityType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\EntityManager;
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('submit',
SubmitType::class, [
"label" => "Valider",
"attr" => ["class" => "btn btn-success no-print"],
]
);
$builder->add('username',
TextType::class, [
"label" =>"Login",
"disabled" => ($options["mode"]=="submit"?false:true),
"attr" => ["autocomplete" => "off"],
]
);
if($options["appAuth"]=="MYSQL"&&$options["mode"]!="profil") {
$builder->add('password',
RepeatedType::class, [
"type" => PasswordType::class,
"required" => ($options["mode"]=="submit"?true:false),
"first_options" => ["label" => "Mot de Passe", "attr" => ["class" => " no-print", "autocomplete" => "new-password"]],
"second_options" => ["label" => "Confirmer Mot de Passe", "attr" => ["class" => "no-print"]],
]
);
}
if($options["mode"]!="profil") {
$choices=[];
$choices['Administrateur']='ROLE_ADMIN';
$choices['Validateur']='ROLE_VALIDATOR';
$choices['Master']='ROLE_MASTER';
$choices['Intervenant']='ROLE_USER';
$choices['Invité']='ROLE_VISITOR';
$builder->add('roles',
ChoiceType::class, [
'choices' => $choices,
'multiple' => true,
'expanded' => true,
]
);
}
$builder->add('lastname',
TextType::class, [
"label" =>"Nom",
]
);
$builder->add('firstname',
TextType::class, [
"label" =>"Prénom",
"required" => false ]
);
$builder->add('email',
EmailType::class, [
"label" =>"Email",
]
);
$builder->add('service',
EntityType::class, [
"class" => "App:Service",
"label" => "Activité",
"required" => false,
"choice_label" => "name",
]
);
$builder->add('jobs',
Select2EntityType::class, [
"label" => "Métiers",
"disabled" => false,
"required" => false,
"multiple" => true,
"remote_route" => "app_job_select",
"class" => "App:Job",
"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 Métiers",
]
);
$builder->add('apikey',
TextType::class, [
"label" =>"Clé Accès",
"required" => false
]
);
$builder->add('avatar',HiddenType::class, array("empty_data" => "noavatar.png"));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'App\Entity\User',
'mode' => 'string',
'appAuth' => 'string',
));
}
}

View File

@@ -1,63 +0,0 @@
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\EntityManager;
class YearType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('submit',
SubmitType::class, [
"label" => "Valider",
"attr" => ["class" => "btn btn-success no-print"],
]
);
$builder->add('start',
DateType::class, [
"label" =>"Début"
]
);
$builder->add('end',
DateType::class, [
"label" =>"Fin"
]
);
$builder->add('nbday',
IntegerType::class, [
"label" =>"Nombre de jours travaillé pour un temps plein"
]
);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'App\Entity\Year',
'mode' => 'string',
));
}
}

View File

@@ -1,63 +0,0 @@
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\EntityManager;
class YeardomaineType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('submit',
SubmitType::class, [
"label" => "Valider",
"attr" => ["class" => "btn btn-success no-print"],
]
);
$builder->add('nbdaybudget',
IntegerType::class, [
"label" =>"Nombre de jours prévus pour l'exercice"
]
);
$builder->add('cabudget',
IntegerType::class, [
"label" =>"Budget prévu pour l'exercice"
]
);
$builder->add('careal',
IntegerType::class, [
"label" =>"Budget réel pour l'exercice"
]
);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'App\Entity\Yeardomaine',
'mode' => 'string',
));
}
}

View File

@@ -1,63 +0,0 @@
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\EntityManager;
class YearprojectType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('submit',
SubmitType::class, [
"label" => "Valider",
"attr" => ["class" => "btn btn-success no-print"],
]
);
$builder->add('nbdaybudget',
IntegerType::class, [
"label" =>"Nombre de jours prévus pour l'exercice"
]
);
$builder->add('cabudget',
IntegerType::class, [
"label" =>"Budget prévu pour l'exercice"
]
);
$builder->add('careal',
IntegerType::class, [
"label" =>"Budget réel pour l'exercice"
]
);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'App\Entity\Yearproject',
'mode' => 'string',
));
}
}

View File

@@ -1,57 +0,0 @@
<?php
namespace App\Repository;
use App\Entity\Domaine;
use App\Entity\Project;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Common\Persistence\ManagerRegistry;
class DomaineRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Domaine::class);
}
public function findAllProjectActive($activeproject,$iddomaine) {
$qb = $this->createQueryBuilder('domaine')
->from('App:Project','project')
->Where('project.active=:activeproject')
->andWhere('project.domaine=domaine');
if($iddomaine!="all")
$qb->andWhere("domaine.id=:id")->setParameter('id',$iddomaine);
return $qb->getQuery()->setParameter('activeproject',$activeproject)->getResult();
}
public function findAllOfferActive($activeproject,$activeoffer,$iddomaine) {
$qb = $this->createQueryBuilder('domaine')
->from('App:Project','project')
->from('App:Offer','offer')
->Where('offer.active=:activeoffer')
->andWhere('project.active=:activeproject')
->andWhere('project.domaine=domaine')
->andWhere('offer.project=project');
if($iddomaine!="all")
$qb->andWhere("domaine.id=:id")->setParameter('id',$iddomaine);
return $qb->getQuery()->setParameter('activeproject',$activeproject)->setParameter('activeoffer',$activeoffer)->getResult();
}
public function findAllTaskActive($activeproject,$iddomaine) {
$qb = $this->createQueryBuilder('domaine')
->from('App:Project','project')
->Where('project.active=:activeproject')
->andWhere('project.domaine=domaine');
if($iddomaine!="all")
$qb->andWhere("domaine.id=:id")->setParameter('id',$iddomaine);
return $qb->getQuery()->setParameter('activeproject',$activeproject)->getResult();
}
}

View File

@@ -1,15 +0,0 @@
<?php
namespace App\Repository;
use App\Entity\Script;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Common\Persistence\ManagerRegistry;
class ScriptRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Script::class);
}
}

View File

@@ -1,57 +0,0 @@
<?php
namespace App\Repository;
use App\Entity\Service;
use App\Entity\Project;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Common\Persistence\ManagerRegistry;
class ServiceRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Service::class);
}
public function findAllProjectActive($activeproject,$idservice) {
$qb = $this->createQueryBuilder('service')
->from('App:Project','project')
->Where('project.active=:activeproject')
->andWhere('project.service=service');
if($idservice!="all")
$qb->andWhere("service.id=:id")->setParameter('id',$idservice);
return $qb->getQuery()->setParameter('activeproject',$activeproject)->getResult();
}
public function findAllOfferActive($activeproject,$activeoffer,$idservice) {
$qb = $this->createQueryBuilder('service')
->from('App:Project','project')
->from('App:Offer','offer')
->Where('offer.active=:activeoffer')
->andWhere('project.active=:activeproject')
->andWhere('offer.service=service')
->andWhere('offer.project=project');
if($idservice!="all")
$qb->andWhere("service.id=:id")->setParameter('id',$idservice);
return $qb->getQuery()->setParameter('activeproject',$activeproject)->setParameter('activeoffer',$activeoffer)->getResult();
}
public function findAllTaskActive($activeproject,$idservice) {
$qb = $this->createQueryBuilder('service')
->from('App:Project','project')
->Where('project.active=:activeproject')
->andWhere('project.service=service');
if($idservice!="all")
$qb->andWhere("service.id=:id")->setParameter('id',$idservice);
return $qb->getQuery()->setParameter('activeproject',$activeproject)->getResult();
}
}

View File

@@ -1,83 +0,0 @@
<?php
namespace App\Service;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class dolibarrApi
{
private $container;
private $em;
private $session;
private $client;
private $doliuri;
private $dolikey;
public function __construct(EntityManagerInterface $em, ContainerInterface $container, HttpClientInterface $client )
{
$this->em = $em;
$this->container = $container;
$this->client = $client;
$this->doliuri = $this->container->getParameter('doliUri');
$this->dolikey = $this->container->getParameter('doliApiKey');
}
private function CallAPI($method, $url, $data = false)
{
$curl = curl_init();
$httpheader = ['DOLAPIKEY: '.$this->dolikey];
switch ($method)
{
case "POST":
curl_setopt($curl, CURLOPT_POST, 1);
$httpheader[] = "Content-Type:application/json";
if ($data)
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
case "PUT":
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
$httpheader[] = "Content-Type:application/json";
if ($data)
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
default:
if ($data)
$url = sprintf("%s%s?DOLAPIKEY=%s&%s", $this->doliuri."/api/index.php/", $url, $this->dolikey, http_build_query($data));
else
$url = sprintf("%s%s?DOLAPIKEY=%s", $this->doliuri."/api/index.php/", $url, $this->dolikey);
}
// Optional Authentication:
// curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
// curl_setopt($curl, CURLOPT_USERPWD, "username:password");
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, $httpheader);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
public function getOrder($ref) {
$response = $this->CallAPI('GET','orders/ref/'.$ref);
return json_decode($response);
}
}

View File

@@ -1,104 +0,0 @@
<?php
namespace App\Service;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class notificationService
{
private $em;
protected $mailer;
protected $twig;
private $container;
public function __construct(EntityManagerInterface $em, \Swift_Mailer $mailer, \Twig\Environment $twig, ContainerInterface $container)
{
$this->mailer = $mailer;
$this->twig = $twig;
$this->em = $em;
$this->container = $container;
}
public function sendNotifAttenteValid($subject, $iduser, $idevent, $valid_url)
{
$template = $this->twig->load('Notif/attentevalidation.html.twig');
$user=$this->em->getRepository("App:User")->find($iduser);
$event=$this->em->getRepository("App:Event")->find($idevent);
$users=$this->em->getRepository("App:User")->findAll();
$valid_url=str_replace("http://","https://",$valid_url);
$tbemails=[];
foreach($users as $usr) {
if(in_array("ROLE_VALIDATOR",$usr->getRoles())) {
array_push($tbemails,$usr->getEmail());
}
// else{
// if(in_array("ROLE_MASTER",$usr->getRoles())) {
// if ($usr->getService() == $user->getService() ){
// $tmp=[
// "id"=>$usr->getId(),
// "email"=>$usr->getEmail()
// ];
// }
// array_push($tbemails,$tmp);
// }
// }
}
$parameters=[
'date' => new \DateTime(),
'username' => $user->getUsername(),
'start' => $event->getStart(),
'end' => $event->getEnd(),
'duration' => $event->getDuration(),
'valid_link' => $valid_url,
];
$bodyHtml = $template->renderBlock('body', $parameters);
$message = (new \Swift_Message())
->setFrom('schedule@cadoles.com')
->setSubject($user->getUsername() . " = " . $subject)
//TODO envoyer à tt les users master associé au service de l'utilisateur et l'ensemble des user validator
->setTo($tbemails)
->setBody($bodyHtml, 'text/html');
$response = $this->mailer->send($message);
return $response;
}
public function sendNotifValid($subject, $iduser, $idevent)
{
$template = $this->twig->load('Notif/validation.html.twig');
$user=$this->em->getRepository("App:User")->find($iduser);
$event=$this->em->getRepository("App:Event")->find($idevent);
$users=$this->em->getRepository("App:User")->findAll();
$tbemails=[];
foreach($users as $usr) {
if(in_array("ROLE_VALIDATOR",$usr->getRoles())) {
array_push($tbemails,$usr->getEmail());
}
}
$parameters=[
'date' => new \DateTime(),
'username' => $user->getUsername(),
'start' => $event->getStart(),
'end' => $event->getEnd(),
'duration' => $event->getDuration(),
];
$bodyHtml = $template->renderBlock('body', $parameters);
$message = (new \Swift_Message())
->setFrom('schedule@cadoles.com')
->setSubject($user->getUsername() . " = " . $subject)
->setTo($this->container->getParameter('appMailnotif'))
->setCc($tbemails)
->setBody($bodyHtml, 'text/html');
$response = $this->mailer->send($message);
return $response;
}
}

View File

@@ -1,142 +0,0 @@
<?php
namespace App\Service;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\HttpFoundation\Session\Session;
use Doctrine\ORM\EntityManager;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
class sessionListener {
protected $container;
protected $em;
public function __construct($container, EntityManager $em, TokenStorageInterface $token_storage)
{
$this->container = $container;
$this->em = $em;
$this->token_storage = $token_storage;
}
public function haveRole($roles,$tohave) {
$haverole=false;
if($roles=="") {
if(empty($tohave)) $haverole=true;
}
else {
foreach($roles as $role) {
if(in_array($role,$tohave))
$haverole=true;
}
}
return $haverole;
}
public function onDomainParse(Event $event) {
$session = new Session();
// Utilisateur en cours
$curentuserid=0;
$token = $this->token_storage->getToken();
if(!$token) return;
$curentuser=$token->getUser();
// Roles actif
if($curentuser=="anon.") $roles=[];
else $roles=$curentuser->getRoles();
$regen=false;
if (!$session->get('isuser') && $curentuser!="anon.") {
$regen=true;
$session->set('isuser',true);
}
if ($session->get('isuser') && $curentuser=="anon.") {
$regen=true;
$session->set('isuser',false);
}
if(!$session->get('nbmonth')) $regen=true;
// Initialisation de la session
if($regen) {
$session->set('activeproject',true);
$session->set('activetask',true);
$session->set('activeoffer',true);
$session->set('activeholiday',true);
$session->set('activetimer',true);
$session->set('viewservice',true);
$session->set('nbmonth',3);
if($curentuser!="anon.") {
if(in_array("ROLE_USER",$roles))
$session->set('iduser',$curentuser->getId());
else
$session->set('iduser',"all");
$session->set('idproject',"all");
$session->set('idservice',"all");
$session->set('iddomaine',"all");
}
else {
$session->set('iduser',"all");
$session->set('idproject',"all");
$session->set('idservice',"all");
$session->set('iddomaine',"all");
}
$tbusers=[];
$users=$this->em->getRepository('App:User')->findAll();
foreach($users as $user) {
if(in_array("ROLE_USER",$user->getRoles())) {
$tmp=[
"id"=>$user->getId(),
"displayname"=>$user->getDisplayname()
];
array_push($tbusers,$tmp);
}
}
$session->set('users',$tbusers);
$tbprojects=[];
$projects=$this->em->getRepository('App:Project')->findBy(["active"=>true]);
foreach($projects as $project) {
$tmp=[
"id"=>$project->getId(),
"displayname"=>$project->getDisplayname()
];
array_push($tbprojects,$tmp);
}
$session->set('projects',$tbprojects);
$tbservices=[];
$services=$this->em->getRepository('App:Service')->findAll();
foreach($services as $service) {
$tmp=[
"id"=>$service->getId(),
"name"=>$service->getName()
];
array_push($tbservices,$tmp);
}
$session->set('services',$tbservices);
$tbdomaines=[];
$domaines=$this->em->getRepository('App:Domaine')->findAll();
foreach($domaines as $domaine) {
$tmp=[
"id"=>$domaine->getId(),
"name"=>$domaine->getName()
];
array_push($tbdomaines,$tmp);
}
$session->set('domaines',$tbdomaines);
}
}
}

66
src/schedule-2.0/.env Normal file
View File

@@ -0,0 +1,66 @@
# In all environments, the following files are loaded if they exist,
# the latter taking precedence over the former:
#
# * .env contains default values for the environment variables needed by the app
# * .env.local uncommitted file with local overrides
# * .env.$APP_ENV committed environment-specific defaults
# * .env.$APP_ENV.local uncommitted environment-specific overrides
#
# Real environment variables win over .env files.
#
# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES.
#
# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2).
# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration
###> symfony/framework-bundle ###
APP_SECRET=52c1cb88ee822cd2643abe29e16a68a6
#TRUSTED_PROXIES=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
#TRUSTED_HOSTS='^(localhost|example\.com)$'
###< symfony/framework-bundle ###
###> symfony/mailer ###
# MAILER_DSN=smtp://localhost
###< symfony/mailer ###
###< doctrine/doctrine-bundle ###
# Basic
APP_ALIAS=schedule
APP_AUTH=MYSQL
APP_NAME=Schedule
APP_ENV=PROD
APP_CRON=false
# Office hours
OFFICE_HOUR_START=09:00
OFFICE_HOUR_END=17:30
# MAIL sendmail / smtp
MAILER_METHOD=sendmail
MAILER_URL=
MAILER_NOREPLY=noreply@noreply.fr
MAILER_DEFAULT_NOTIF=
# BDD
DATABASE_NAME=
DATABASE_USER=
DATABASE_PASSWORD=
DATABASE_HOST=
# If APP_AUTH = CAS
CAS_HOST=
CAS_PORT=
CAS_PATH=
CAS_USERNAME=username
CAS_EMAIL=email
CAS_LASTNAME=lastname
CAS_FIRSTNAME=firstname
## Sentry DSN
SENTRY_DSN=
# Dolibar
DOLIBARR_ACTIVE=false
DOLIBARR_API_KEY=
DOLIBARR_URI=

23
src/schedule-2.0/.gitignore vendored Normal file
View File

@@ -0,0 +1,23 @@
###> symfony/framework-bundle ###
/.env.local
/.env.local.php
/.env.*.local
/config/secrets/prod/prod.decrypt.private.php
/public/bundles/
/var/
/vendor/
###< symfony/framework-bundle ###
###> symfony/phpunit-bridge ###
.phpunit
.phpunit.result.cache
/phpunit.xml
###< symfony/phpunit-bridge ###
###> symfony/webpack-encore-bundle ###
/node_modules/
npm-debug.log
yarn-error.log
###< symfony/webpack-encore-bundle ###
*~

View File

@@ -0,0 +1,11 @@
require('dropzone/dist/min/dropzone.min.css');
window.Dropzone = require('dropzone/dist/min/dropzone.min.js');
//Dropzone.autoDiscover = false;
/*
document.addEventListener('DOMContentLoaded', function() {
var elt = document.getElementById('mydropzone');
var mydropzone = new Dropzone(elt, { url: "upload"});
global.mydropzone=mydropzone;
});
*/

View File

@@ -0,0 +1,38 @@
// Fullcalendar
require('@fullcalendar/core/main.css');
require('@fullcalendar/daygrid/main.css');
require('@fullcalendar/daygrid/main.css');
import { Calendar } from '@fullcalendar/core';
import frLocale from '@fullcalendar/core/locales/fr.js';
import interactionPlugin from '@fullcalendar/interaction';
import dayGridPlugin from '@fullcalendar/daygrid';
var calendar;
var e = document.getElementById("sideuser");
var iduser = e.value;
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('fullcalendar');
calendar = new Calendar(calendarEl, {
plugins: [ interactionPlugin, dayGridPlugin ],
locale: frLocale,
weekNumbers: true,
selectable: true,
events: 'event/load/'+iduser,
eventLimit:8,
eventDrop: function(info) {
info.revert();
},
eventRender: function (info) {
eventRender(info);
},
select: function(selectionInfo) {
eventSelect(selectionInfo);
},
eventClick: function(info) {
eventClick(info);
}
});
global.calendar = calendar;
calendar.render();
});

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