Compare commits

...

111 Commits

Author SHA1 Message Date
0e159604e6 maj condition affichage dolibarr 2020-11-03 09:53:53 +01:00
62e7339057 ajout variable pour activer dolibarr 2020-11-03 09:53:53 +01:00
5ea06c9aec set template for link orders 2020-11-03 09:53:53 +01:00
bb7e66f0c9 Add link on dolibarr on convertion 2020-11-03 09:53:53 +01:00
e5863fdd0a set template 2020-11-03 09:53:53 +01:00
1691620986 first implementation of dolibarr api 2020-11-03 09:53:53 +01:00
bceee0582e add template configuration 2020-11-03 09:53:16 +01:00
5b62397a23 remove debugs 2020-10-15 10:23:58 +02:00
f86972fe7d modification taille box sur les stats 2020-10-14 16:51:26 +02:00
37095a4aac nettoyage des natures 2020-10-14 16:13:58 +02:00
4e407397f2 stat cadoles 2020-10-14 16:08:53 +02:00
702d471c1a max y pour les graph 2020-10-14 14:11:44 +02:00
1d7ad9bfc0 mise en place de stats 2020-10-14 12:01:28 +02:00
a6acd26a5c Ne pas afficher le cumul des congés sur le calendrier ref #52 2020-10-14 10:16:00 +02:00
e47bf32cc6 Correction cumul par tache dans les rapports ref: #54 2020-10-14 10:06:40 +02:00
398e803b1a récupération du bon utilisateur lors de la validation des congés 2020-10-13 10:29:40 +02:00
364da8ae38 add container to notificationservice 2020-10-13 09:08:44 +02:00
2c281d5166 corrections on timer task form id 2020-10-13 09:08:20 +02:00
5dacb82378 update composer.json 2020-10-12 16:57:01 +02:00
64e3da238d Merge branch 'sentry' of Cadoles/schedule into master 2020-10-07 13:04:03 +02:00
7b0a263581 update .env for sentry 2020-10-07 13:02:05 +02:00
2cac8080ee ajout de sentry en composer #48 2020-10-07 11:35:39 +02:00
92ac88b39d typo 2020-10-06 16:27:15 +02:00
354e2186c8 Ajout export commandes 2020-10-06 16:25:16 +02:00
6a92c43234 typo 2020-10-06 15:56:01 +02:00
1f53179ea5 export all projects 2020-10-06 15:54:46 +02:00
9a72b782c2 Affichage des user actif uniquement sur la création d'events 2020-10-06 15:23:58 +02:00
0d9524f5d2 set Default Nature Task choice correctly 2020-10-06 15:02:29 +02:00
8b9e27ad50 update offer title page 2020-10-06 14:46:25 +02:00
c28f7a8b2f select default nature on Task 2020-10-06 14:41:32 +02:00
653031017c set filter on customer project 2020-10-06 14:19:46 +02:00
e4526cb621 implémentaiton de _tosrting a project pour la création de taches 2020-10-01 10:36:48 +02:00
45606d9b97 correciton requete recherche dans liste des projets 2020-09-29 10:34:05 +02:00
c81d58d399 amélioration affichage listes des taches 2020-09-29 10:19:41 +02:00
58ac18f005 ajout vue par tache dans le planning 2020-09-28 16:11:25 +02:00
4d98fd9d42 Affichage et recherche d'un projet poru créer une tache 2020-09-28 15:57:17 +02:00
9006dd3b38 correciton sur la configuration du mailer 2020-09-28 14:33:18 +02:00
51337ee42b affichage des dates ISO dans les rapports 2020-09-28 14:33:04 +02:00
1de7abe9fd Tri alphabétique des taches 2020-09-28 10:10:47 +02:00
862c3651c0 Affcihage 8 events par défaut sur le calendrier 2020-09-28 10:10:17 +02:00
51bf8c855f add TimeRepository 2020-09-23 08:28:31 +02:00
root
6a9ae5323b mise à plat depot 2020-09-22 14:20:47 +02:00
66fa43497e Add atsk nature on export 2020-09-22 10:49:43 +02:00
9836498b1c Corrections sur Timers 2020-09-01 16:25:05 +02:00
ecacf68ad3 correction timer 2020-09-01 16:04:59 +02:00
d9fe49cce5 Affichage 7 evenement par jour 2020-09-01 14:46:37 +02:00
761f4c929d opyimisation de la requetes des événements 2020-09-01 14:34:32 +02:00
root
04ed1645fa Merge branch 'timetracking' of https://forge.cadoles.com/afornerot/schedule into timetracking 2020-09-01 11:59:43 +02:00
root
e37ced1f4d resolution pb proxy.sh sur reconf 2020-09-01 11:59:20 +02:00
b86601b709 Merge branch 'timetracking' of https://forge.cadoles.com/afornerot/schedule into timetracking 2020-09-01 11:55:06 +02:00
c0d1759bed distinguer les vacations sur le flag validateholiday (fixes #29) 2020-09-01 11:54:55 +02:00
058d5177eb remove select multi user 2020-09-01 11:45:41 +02:00
254dec4372 ajout var office à la config 2020-09-01 10:43:05 +02:00
a524e353db cumul des durées d'événements dans les rapports si deux événements sur une meme date 2020-09-01 10:42:50 +02:00
4523aa41b1 filtre evenets par projet 2020-09-01 10:42:09 +02:00
root
6954153be9 correction script migration 2020-08-31 11:03:41 +02:00
6b0b8bf281 ajout possibilité de sélectionner plusieurs utilisateurs 2020-07-31 14:14:44 +02:00
5c690431dc Ajout infromations export 2020-07-31 10:59:58 +02:00
8dee5b5ce4 export journée pleines travaillés 2020-07-31 10:44:19 +02:00
c6ade61a08 Ajout d'une page unique pour les exports 2020-07-31 10:44:19 +02:00
1f2b36b7fd correction bug affiche external trip 2020-07-31 10:43:51 +02:00
016d209d43 Merge branch 'referent_projet' into timetracking 2020-07-30 13:57:36 +02:00
f54f582d25 Merge branch 'changehourevent' into timetracking 2020-07-30 13:57:18 +02:00
f183d744cc correction externaltrip si penalty 2020-07-30 10:56:21 +02:00
756f946ce8 affichage des affectations sur le profil utilisateur 2020-07-30 10:26:39 +02:00
9604ce80ef list les référents projet dans un tooltip 2020-07-30 10:06:00 +02:00
d4b05c883c Ajout icone congé sur calendrier 2020-07-30 09:06:44 +02:00
aeeb6384c4 ajout icone congés 2020-07-30 09:06:44 +02:00
8b46636159 correction bug 2020-07-30 09:06:44 +02:00
9471ada755 ajout propriété déplacement externe 2020-07-30 09:06:44 +02:00
df4d62df7d bug correction 2020-07-30 09:06:44 +02:00
8b4d1e31ec disable hour edition if more than one day 2020-07-30 09:06:44 +02:00
dc182b6888 ajout possibilité de modifier la plage horaire d'un événement sur le calendrier 2020-07-30 09:06:44 +02:00
99b55dece3 set default active timer view 2020-07-30 09:05:06 +02:00
cbe0cbf4e7 Ajout des horaires de travail en paramètres .env 2020-07-30 09:05:06 +02:00
c30bd74e6f Passage d'un timer en heure supplémentaire si hors des plages horaires de travail 2020-07-30 09:05:06 +02:00
80b6e4964f correciton calcul de la durée automatiquement 2020-07-30 09:05:06 +02:00
1fb5c4c715 ajout page validation des timer et option heure supplémentaires 2020-07-30 09:05:05 +02:00
a316a4c753 ajout numéro de semaine dans les tableau de synthèse 2020-07-30 09:05:05 +02:00
46805a2e3d export astreintes actives et exports 2020-07-30 09:05:05 +02:00
2513eced52 correction affectation utilisateur, et ajout vue caendrier 2020-07-30 09:05:05 +02:00
38b8b79fb1 timer description no mandatory 2020-07-30 09:05:05 +02:00
78b6651483 suppression de public/build dans gitignore 2020-07-30 09:05:05 +02:00
8f5f136607 Time Tracking 2020-07-30 09:05:05 +02:00
0ba2f94521 add spacing to navbar at bottom 2020-07-30 09:04:28 +02:00
0ee945eed3 update report csv format 2020-07-28 10:44:00 +02:00
d92e1d8d5c rapport hebdomadaire, par projet, tâche et utilisateur 2020-07-28 10:36:44 +02:00
25f78e3f34 set correct report format 2020-07-28 09:41:34 +02:00
6452f94cfe Rapport hebdo par utilisateur 2020-07-27 15:22:16 +02:00
5a4e0c6c0b typo 2020-06-26 11:57:09 +02:00
19889197ce update comoser.lock 2020-06-26 11:54:01 +02:00
ee6601bc35 add penalty to export 2020-06-19 13:54:14 +02:00
7fbed84998 Ajout d'un export csv hebdomadaire sur les rapports 2020-06-19 11:56:33 +02:00
32c08bcb52 remove debug infos 2020-06-18 11:42:27 +02:00
dd4f03a00e correction sur la plage horaire de récupération des événements 2020-06-18 11:41:36 +02:00
ae78edf02f correciton css pour affichage username calendrier 2020-06-18 11:09:37 +02:00
00fc14c91b affichage utilisateur sur calendrier 2020-06-18 10:36:09 +02:00
5643360f9d modification mise en page du rapport 2020-06-17 17:32:32 +02:00
7f19e8c5ff Affichage cumul par semaines 2020-06-17 17:32:19 +02:00
7edbdbd3e7 présentaiton sous forme de tableau des consommation passé dans les rapports 2020-06-17 14:48:18 +02:00
f944981109 Renommage Proposition en Commande 2020-06-16 11:26:11 +02:00
6c68abf922 Merge branch 'notification' of afornerot/schedule into master 2020-06-16 11:16:01 +02:00
79b8fb9af5 add dependencies 2020-06-16 11:11:19 +02:00
efa4f1fc62 Envoie des notifications à tous les valideurs, et variable pour messagerie globale de notification 2020-06-12 16:58:23 +02:00
root
6b00cec84b resolution cumul sur total planifié (ref #4) 2020-06-12 15:29:27 +02:00
20d42d319a Envoie de notification à la pose et la vadliation de congés 2020-06-12 15:18:53 +02:00
root
80227e7416 suppression dump 2020-06-11 11:52:19 +02:00
root
c948be02cc suppression dump 2020-06-11 11:49:27 +02:00
08249abbf5 controle sur suppression 2020-06-10 10:22:47 +02:00
03680beba1 Merge branch 'master' of https://forge.cadoles.com/afornerot/schedule 2020-05-13 14:03:59 +02:00
1eafb7090e genkey sans message au reconfigure 2020-05-13 14:03:46 +02:00
78 changed files with 7275 additions and 1105 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
*~

View File

@@ -6,7 +6,9 @@
<containers> <containers>
<container name='web'> <container name='web'>
<!--
<package>schedule-apps</package> <package>schedule-apps</package>
-->
<!-- service de configuration apache --> <!-- service de configuration apache -->
<service method="apache" servicelist="schedule">schedule</service> <service method="apache" servicelist="schedule">schedule</service>
@@ -32,6 +34,24 @@
<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_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_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_dbpass' description='Fichier de mot de passe du serveur'/>
<variable type='string' name='schedule_email_global_notif' description='URL de connexion au serveur smtp'/>
<variable type='string' name='schedule_email_url' 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> </family>
</variables> </variables>
@@ -66,6 +86,15 @@
<target type='variable'>schedule_dbpass</target> <target type='variable'>schedule_dbpass</target>
<target type='variable'>schedule_allow_hosts</target> <target type='variable'>schedule_allow_hosts</target>
</condition> </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> </constraints>
<help> <help>

View File

@@ -32,6 +32,16 @@ APP_NAME=Schedule
APP_ENV=PROD APP_ENV=PROD
APP_CRON=false 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 # BDD
DATABASE_NAME= DATABASE_NAME=
DATABASE_USER= DATABASE_USER=
@@ -46,3 +56,16 @@ CAS_USERNAME=username
CAS_EMAIL=email CAS_EMAIL=email
CAS_LASTNAME=lastname CAS_LASTNAME=lastname
CAS_FIRSTNAME=firstname CAS_FIRSTNAME=firstname
###> 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=
## Sentry DSN
SENTRY_DSN=
DOLIBARR_ACTIVE=false
DOLIBARR_API_KEY=
DOLIBARR_URI=

View File

@@ -17,7 +17,7 @@
###> symfony/webpack-encore-bundle ### ###> symfony/webpack-encore-bundle ###
/node_modules/ /node_modules/
/public/build/
npm-debug.log npm-debug.log
yarn-error.log yarn-error.log
###< symfony/webpack-encore-bundle ### ###< symfony/webpack-encore-bundle ###
*~

View File

@@ -17,7 +17,7 @@ document.addEventListener('DOMContentLoaded', function() {
weekNumbers: true, weekNumbers: true,
selectable: true, selectable: true,
events: 'event/load', events: 'event/load',
eventLimit:4, eventLimit:8,
eventDrop: function(info) { eventDrop: function(info) {
info.revert(); info.revert();
}, },

View File

@@ -0,0 +1,609 @@
/* Creates a new Task object. */
function Task(id ,name, description) {
this._name = name;
this._taskid = id;
this._description = description;
this._state = Task.State.STOPPED;
this._timeSpentInPreviousIterations = 0;
this._startDate = 0;
this._endDate = 0;
this._currentIterationStartTime = 0;
this._customTimeSpent = 0;
this._onChange = null;
}
/* Possible task states. */
Task.State = {
STOPPED: "stopped",
RUNNING: "running"
}
Task.prototype = {
/* Returns the task name. */
getName: function() {
return this._name;
},
/* Returns the task description. */
getDescription: function() {
if (this._description == "NaN") {
this._description = ""
}
return this._description;
},
/* Returns the task state. */
getState: function() {
return this._state;
},
/* Is the task stopped? */
isStopped: function() {
return this._state == Task.State.STOPPED;
},
/* Is the task running? */
isRunning: function() {
return this._state == Task.State.RUNNING;
},
/*
* Sets the "onChange" event handler. The "onChange" event is fired when the
* task is started, stopped, or reset.
*/
setOnChange: function(onChange) {
this._onChange = onChange;
},
/*
* Returns the time spent on the task in the current work iteration. Works
* correctly only when the task is running.
*/
_getCurrentIterationTime: function() {
return (new Date).getTime() - this._currentIterationStartTime;
},
/*
* Returns the total time spent on the task. This includes time spent in
* the current work iteration if the task is running.
*/
getTimeSpent: function() {
var result = this._timeSpentInPreviousIterations;
if (this._state == Task.State.RUNNING) {
result += this._getCurrentIterationTime();
}
return result;
},
/* Calls the "onChange" event handler if set. */
_callOnChange: function() {
if (typeof this._onChange == "function") {
this._onChange();
}
},
/* Starts a new task work iteration. */
start: function() {
if (this._state == Task.State.RUNNING) { return };
if (this._startDate == 0) {this._startDate = new Date()}
this._state = Task.State.RUNNING;
this._currentIterationStartTime = (new Date).getTime();
this._callOnChange();
},
/* Stops the current task work iteration. */
stop: function() {
if (this._state == Task.State.STOPPED) { return };
this._state = Task.State.STOPPED;
this._timeSpentInPreviousIterations += this._getCurrentIterationTime();
this._currentIterationStartTime = 0;
this._endDate = new Date();
this._callOnChange();
},
/* Stops the current task work iteration and resets the time data. */
reset: function() {
this.stop();
this._timeSpentInPreviousIterations = 0;
this._callOnChange();
},
save: function(task){
console.log(task)
$.ajax({
type: "POST",
data: {
taskname: task._name,
taskid: task._taskid,
description: task._description,
start: task._startDate,
end: task._endDate,
duration: task._timeSpentInPreviousIterations,
},
url: "{{ path('app_timer_create') }}",
success: function (response) {
response=JSON.parse(response);
if(response.return=="KO") {
$("#dataTable_wrapper").append("<div class='alert alert-danger' style='margin: 5px 0px'>"+response.error+"</div>");
}else{
location.reload();
}
}
});
},
/* Serializes the task into a string. */
serialize: function() {
/*
* Originally, I wanted to use "toSource" and "eval" for serialization and
* deserialization, but "toSource" is not supported by WebKit, so I resorted
* to ugly hackery...
*/
return [
encodeURIComponent(this._name),
this._state,
this._timeSpentInPreviousIterations,
this._currentIterationStartTime,
this._startDate,
this._endDate,
this._taskid,
this._description,
].join("&");
},
/* Deserializes the task from a string. */
deserialize: function(serialized) {
var parts = serialized.split("&");
this._name = decodeURIComponent(parts[0]);
this._state = parts[1];
this._timeSpentInPreviousIterations = parseInt(parts[2]);
this._currentIterationStartTime = parseInt(parts[3]);
this._startDate = parseInt(parts[4]);
this._endDate = parseInt(parts[5]);
this._taskid = parseInt(parts[6]);
this._description = parseInt(parts[7]);
}
}
/* ===== Tasks ===== */
/* The Tasks class represents a list of tasks. */
/* Creates a new Tasks object. */
function Tasks() {
this._tasks = [];
this._onAdd = null;
this._onRemove = null;
}
Tasks.prototype = {
/*
* Sets the "onAdd" event handler. The "onAdd" event is fired when a task
* is added to the list.
*/
setOnAdd: function(onAdd) {
this._onAdd = onAdd;
},
/*
* Sets the "onRemove" event handler. The "onRemove" event is fired when a
* task is removed from the list.
*/
setOnRemove: function(onRemove) {
this._onRemove = onRemove;
},
/* Returns the length of the task list. */
length: function() {
return this._tasks.length
},
/*
* Returns index-th task in the list, or "undefined" if the index is out of
* bounds.
*/
get: function(index) {
return this._tasks[index];
},
/*
* Calls the callback function for each task in the list. The function is
* called with three parameters - the task, its index and the task list
* object. This is modeled after "Array.forEach" in JavaScript 1.6.
*/
forEach: function(callback) {
for (var i = 0; i < this._tasks.length; i++) {
callback(this._tasks[i], i, this);
}
},
/* Calls the "onAdd" event handler if set. */
_callOnAdd: function(task) {
if (typeof this._onAdd == "function") {
this._onAdd(task);
}
},
/* Adds a new task to the end of the list. */
add: function(task) {
this._tasks.push(task);
this._callOnAdd(task);
},
/* Calls the "onRemove" event handler if set. */
_callOnRemove: function(index) {
if (typeof this._onRemove == "function") {
this._onRemove(index);
}
},
/*
* Removes index-th task from the list. Does not do anything if the index
* is out of bounds.
*/
remove: function(index) {
this._callOnRemove(index);
this._tasks.splice(index, 1);
},
/* Serializes the list of tasks into a string. */
serialize: function() {
var serializedTasks = [];
this.forEach(function(task) {
serializedTasks.push(task.serialize());
});
return serializedTasks.join("|");
},
/* Deserializes the list of tasks from a string. */
deserialize: function(serialized) {
/*
* Repeatedly use "remove" so the "onRemove" event is triggered. Do the same
* with the "add" method below.
*/
while (this._tasks.length > 0) {
this.remove(0);
}
var serializedTasks = serialized.split("|");
for (var i = 0; i < serializedTasks.length; i++) {
var task = new Task(0 ,"", "");
task.deserialize(serializedTasks[i]);
this.add(task);
}
}
}
/* ===== Extensions ===== */
/*
* Pads this string with another string on the left until the resulting string
* has specified length. If the padding string has more than one character, the
* resulting string may be longer than desired (the padding string is not
* truncated and it is only prepended as a whole). Bad API, I know, but it's
* good enough for me.
*/
String.prototype.pad = function(length, padding) {
var result = this;
while (result.length < length) {
result = padding + result;
}
return result;
}
/* ===== Task List + DOM Storage ===== */
/* The list of tasks. */
var tasks = new Tasks();
/* The last value of the serialized task list string. */
var lastSerializedTasksString;
/*
* The key under which the serialized task list string is stored in the DOM
* Storage.
*/
var TASKS_DOM_STORAGE_KEY = "timerTasks";
/*
* Returns DOM Storage used by the application, or "null" if the browser does
* not support DOM Storage.
*/
function getStorage() {
/*
* HTML 5 says that the persistent storage is available in the
* "window.localStorage" attribute, however Firefox implements older version
* of the proposal, which uses "window.globalStorage" indexed by the domain
* name. We deal with this situation here as gracefully as possible (i.e.
* without concrete browser detection and with forward compatibility).
*
* For more information, see:
*
* http://www.whatwg.org/specs/web-apps/current-work/#storage
* https://developer.mozilla.org/En/DOM/Storage
*/
if (window.localStorage !== undefined) {
return window.localStorage;
} else if (window.globalStorage !== undefined) {
return window.globalStorage[location.hostname];
} else {
return null;
}
}
/*
* Saves the task list into a DOM Storage. Also updates the value of the
* "lastSerializedTasksString" variable.
*/
function saveTasks() {
var serializedTasksString = tasks.serialize();
getStorage()[TASKS_DOM_STORAGE_KEY] = serializedTasksString;
lastSerializedTasksString = serializedTasksString;
}
/*
* Loads the serialized task list string from the DOM Storage. Returns
* "undefined" if the storage does not contain the string (this happens when
* running the application for the first time).
*/
function loadSerializedTasksString() {
var storedValue = getStorage()[TASKS_DOM_STORAGE_KEY];
/*
* The spec says "null" should be returned when the key is not found, but some
* browsers return "undefined" instead. Maybe it was in some earlier version
* of the spec (I didn't bother to check).
*/
if (storedValue !== null && storedValue !== undefined && storedValue.length > 0) {
/*
* The values retrieved from "globalStorage" use one more level of
* indirection.
*/
return (window.localStorage === undefined) ? storedValue.value : storedValue;
} else {
return undefined;
}
}
/*
* Loads the task list from the DOM Storage. Also updates the value of the
* "lastSerializedTasksString" variable.
*/
function loadTasks() {
var serializedTasksString = loadSerializedTasksString();
if (serializedTasksString !== undefined) {
tasks.deserialize(serializedTasksString);
lastSerializedTasksString = serializedTasksString;
}
}
/*
* Was the task list changed outside of the application? Detects the change
* by comparing the current serialized task list string in the DOM Storage
* with a kept old value.
*/
function tasksHaveChangedOutsideApplication() {
var serializedTasksString = loadSerializedTasksString();
if (serializedTasksString != lastSerializedTasksString) {
return true
}
return false;
}
/* ===== View ===== */
/* Some time constants. */
var MILISECONDS_IN_SECOND = 1000;
var MILISECONDS_IN_MINUTE = 60 * MILISECONDS_IN_SECOND;
var MINUTES_IN_HOUR = 60;
/* Formats the time in the H:MM format. */
function formatTime(time) {
var timeInMinutes = time / MILISECONDS_IN_MINUTE;
var hours = Math.floor(timeInMinutes / MINUTES_IN_HOUR);
var minutes = Math.floor(timeInMinutes - hours * MINUTES_IN_HOUR);
return hours + ":" + String(minutes).pad(2, "0");
}
/*
* Computes the URL of the image in the start/stop link according to the task
* state.
*/
function computeStartStopLinkImageUrl(state) {
switch (state) {
case Task.State.STOPPED:
return "fa-play";
case Task.State.RUNNING:
return "fa-stop";
default:
throw "Invalid task state."
}
}
/*
* Builds the HTML element of the row in the task table corresponding to the
* specified task and index.
*/
function buildTaskRow(task, index) {
var result = $("<tr />");
var startStopLink = $(
"<a href='#' class='start-stop-link' title='Start/stop'>"
+ "<i class='fa " + computeStartStopLinkImageUrl(task.getState()) + "'></i>"
);
startStopLink.click(function() {
switch (task.getState()) {
case Task.State.STOPPED:
task.start();
break;
case Task.State.RUNNING:
task.stop();
break;
default:
throw "Invalid task state."
}
saveTasks();
return false;
});
var resetLink = $(
"<a href='#' title='Reset'>"
+ "<i class='fa fa-undo'></i>"
);
resetLink.click(function() {
task.reset();
saveTasks();
return false;
});
var deleteLink = $(
"<a href='#' title='Delete' class='deletetask'>"
+ "<i class='fa fa-trash-alt' class='deletetask'></i>"
);
deleteLink.click(function() {
if (confirm("Do you really want to delete task \"" + task.getName() + "\"?")) {
tasks.remove(index);
saveTasks();
}
return false;
});
var saveLink = $(
"<a href='#' title='Save' class='savetask'>"
+ "<i class='fa fa-download' class='savetask'></i>"
);
saveLink.click(function() {
tasks.remove(index);
saveTasks();
task.save(task);
return false;
});
result
.addClass("state-" + task.getState())
.append($("<td class='task-name' />").text(task.getName()))
.append($("<td class='task-description' />").text(task.getDescription()))
.append($("<td class='task-time' />").text(formatTime(task.getTimeSpent())))
.append($("<td class='task-actions' />")
.append(startStopLink)
.append("&nbsp;&nbsp;")
.append(resetLink)
.append("&nbsp;&nbsp;")
.append(saveLink)
.append("&nbsp;&nbsp;&nbsp;&nbsp;")
.append(deleteLink)
);
return result;
}
/* Finds row with the specified index in the task table. */
function findRowWithIndex(index) {
return $("#task-table").find("tr").slice(1).eq(index);
}
/*
* Updates the row in the task table corresponding to a task according to
* its state.
*/
function updateTaskRow(row, task) {
if (task.isStopped()) {
row.removeClass("state-running");
row.addClass("state-stopped");
} else if (task.isRunning()) {
row.removeClass("state-stopped");
row.addClass("state-running");
}
row.find(".task-time").text(formatTime(task.getTimeSpent()))
row.find(".start-stop-link i").removeClass();
row.find(".start-stop-link i").addClass("fa "+computeStartStopLinkImageUrl(task.getState()));
}
/* ===== Initialization ===== */
/* Initializes event handlers on the task list. */
function initializeTasksEventHandlers() {
tasks.setOnAdd(function(task) {
var row = buildTaskRow(task, tasks.length() - 1);
$("#task-table").append(row);
task.setOnChange(function() {
updateTaskRow(row, task);
});
});
tasks.setOnRemove(function(index) {
findRowWithIndex(index).remove();
if (tasks.length() == 1 ) {
$( "#task-table" ).css({"display":"none"});
}
});
}
/* Initializes GUI event handlers. */
function initializeGuiEventHandlers() {
$( "#addtimer" ).click(function() {
displayTaskAdd();
});
$( "#timer-desc" ).keypress(function( event ) {
if ( event.which == 13 ) {
event.preventDefault();
displayTaskAdd();
}
});
}
function displayTaskAdd() {
$( "#task-table" ).css({"display":"inline"});
var taskName = $("#timer-task option:selected").text();
var taskId = $("#timer-task option:selected").val();
var taskDesc = $("#timer-desc").val();
var task = new Task(taskId, taskName, taskDesc);
tasks.add(task);
saveTasks();
$("#timer-desc").val("");
}
/*
* Initializes a timer used to update task times and detect changes in the
* data stored in the DOM Storage.
*/
function initializeTimer() {
setInterval(function() {
tasks.forEach(function(task, index) {
updateTaskRow(findRowWithIndex(index), task);
});
if (tasksHaveChangedOutsideApplication()) {
loadTasks();
}
}, 10 * MILISECONDS_IN_SECOND);
}
/* Initializes the application. */
$(document).ready(function(){
try {
if (!getStorage()) {
alert("Timer requires a browser with DOM Storage support, such as Firefox 3+ or Safari 4+.");
return;
}
} catch (e) {
alert("Timer does not work with file: URLs in Firefox.");
return;
}
initializeTasksEventHandlers();
loadTasks();
initializeGuiEventHandlers();
initializeTimer();
});

View File

@@ -14,6 +14,7 @@
"nelmio/api-doc-bundle": "^3.6", "nelmio/api-doc-bundle": "^3.6",
"oneup/uploader-bundle": "^2.2", "oneup/uploader-bundle": "^2.2",
"sensio/framework-extra-bundle": "^5.1", "sensio/framework-extra-bundle": "^5.1",
"sentry/sentry-symfony": "^3.5",
"symfony/apache-pack": "^1.0", "symfony/apache-pack": "^1.0",
"symfony/asset": "4.4.*", "symfony/asset": "4.4.*",
"symfony/console": "4.4.*", "symfony/console": "4.4.*",
@@ -33,6 +34,7 @@
"symfony/profiler-pack": "^1.0", "symfony/profiler-pack": "^1.0",
"symfony/security-bundle": "4.4.*", "symfony/security-bundle": "4.4.*",
"symfony/serializer-pack": "*", "symfony/serializer-pack": "*",
"symfony/swiftmailer-bundle": "^3.4",
"symfony/translation": "4.4.*", "symfony/translation": "4.4.*",
"symfony/twig-pack": "*", "symfony/twig-pack": "*",
"symfony/validator": "4.4.*", "symfony/validator": "4.4.*",
@@ -75,7 +77,7 @@
"cache:clear --env=prod": "symfony-cmd", "cache:clear --env=prod": "symfony-cmd",
"assets:install %PUBLIC_DIR%": "symfony-cmd", "assets:install %PUBLIC_DIR%": "symfony-cmd",
"make:migration": "symfony-cmd", "make:migration": "symfony-cmd",
"doctrine:migrations:migrate --no-interaction": "symfony-cmd" "doctrine:migrations:migrate --no-interaction --allow-no-migration": "symfony-cmd"
}, },
"post-install-cmd": [ "post-install-cmd": [
"@auto-scripts" "@auto-scripts"

View File

@@ -4,34 +4,143 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "24b27b5f4efd6efcabe5c89e1e1ac51b", "content-hash": "1ad3ebfcef7f9cf273d256ed17d9bfa1",
"packages": [ "packages": [
{ {
"name": "doctrine/annotations", "name": "clue/stream-filter",
"version": "v1.8.0", "version": "v1.5.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/annotations.git", "url": "https://github.com/clue/php-stream-filter.git",
"reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc" "reference": "aeb7d8ea49c7963d3b581378955dbf5bc49aa320"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/annotations/zipball/904dca4eb10715b92569fbcd79e201d5c349b6bc", "url": "https://api.github.com/repos/clue/php-stream-filter/zipball/aeb7d8ea49c7963d3b581378955dbf5bc49aa320",
"reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc", "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": "" "shasum": ""
}, },
"require": { "require": {
"doctrine/lexer": "1.*", "doctrine/lexer": "1.*",
"php": "^7.1" "ext-tokenizer": "*",
"php": "^7.1 || ^8.0"
}, },
"require-dev": { "require-dev": {
"doctrine/cache": "1.*", "doctrine/cache": "1.*",
"phpunit/phpunit": "^7.5" "phpstan/phpstan": "^0.12.20",
"phpunit/phpunit": "^7.5 || ^9.1.5"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.7.x-dev" "dev-master": "1.9.x-dev"
} }
}, },
"autoload": { "autoload": {
@@ -72,24 +181,24 @@
"docblock", "docblock",
"parser" "parser"
], ],
"time": "2019-10-01T18:55:10+00:00" "time": "2020-08-10T19:35:50+00:00"
}, },
{ {
"name": "doctrine/cache", "name": "doctrine/cache",
"version": "1.10.0", "version": "1.10.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/cache.git", "url": "https://github.com/doctrine/cache.git",
"reference": "382e7f4db9a12dc6c19431743a2b096041bcdd62" "reference": "13e3381b25847283a91948d04640543941309727"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/cache/zipball/382e7f4db9a12dc6c19431743a2b096041bcdd62", "url": "https://api.github.com/repos/doctrine/cache/zipball/13e3381b25847283a91948d04640543941309727",
"reference": "382e7f4db9a12dc6c19431743a2b096041bcdd62", "reference": "13e3381b25847283a91948d04640543941309727",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "~7.1" "php": "~7.1 || ^8.0"
}, },
"conflict": { "conflict": {
"doctrine/common": ">2.2,<2.4" "doctrine/common": ">2.2,<2.4"
@@ -154,37 +263,32 @@
"redis", "redis",
"xcache" "xcache"
], ],
"time": "2019-11-29T15:36:20+00:00" "time": "2020-07-07T18:54:01+00:00"
}, },
{ {
"name": "doctrine/collections", "name": "doctrine/collections",
"version": "1.6.4", "version": "1.6.7",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/collections.git", "url": "https://github.com/doctrine/collections.git",
"reference": "6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7" "reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/collections/zipball/6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7", "url": "https://api.github.com/repos/doctrine/collections/zipball/55f8b799269a1a472457bd1a41b4f379d4cfba4a",
"reference": "6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7", "reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3" "php": "^7.1.3 || ^8.0"
}, },
"require-dev": { "require-dev": {
"doctrine/coding-standard": "^6.0", "doctrine/coding-standard": "^6.0",
"phpstan/phpstan-shim": "^0.9.2", "phpstan/phpstan-shim": "^0.9.2",
"phpunit/phpunit": "^7.0", "phpunit/phpunit": "^7.0",
"vimeo/psalm": "^3.2.2" "vimeo/psalm": "^3.8.1"
}, },
"type": "library", "type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.6.x-dev"
}
},
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections"
@@ -224,20 +328,20 @@
"iterators", "iterators",
"php" "php"
], ],
"time": "2019-11-13T13:07:11+00:00" "time": "2020-07-27T17:53:49+00:00"
}, },
{ {
"name": "doctrine/common", "name": "doctrine/common",
"version": "2.12.0", "version": "2.13.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/common.git", "url": "https://github.com/doctrine/common.git",
"reference": "2053eafdf60c2172ee1373d1b9289ba1db7f1fc6" "reference": "f3812c026e557892c34ef37f6ab808a6b567da7f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/common/zipball/2053eafdf60c2172ee1373d1b9289ba1db7f1fc6", "url": "https://api.github.com/repos/doctrine/common/zipball/f3812c026e557892c34ef37f6ab808a6b567da7f",
"reference": "2053eafdf60c2172ee1373d1b9289ba1db7f1fc6", "reference": "f3812c026e557892c34ef37f6ab808a6b567da7f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -247,9 +351,9 @@
"doctrine/event-manager": "^1.0", "doctrine/event-manager": "^1.0",
"doctrine/inflector": "^1.0", "doctrine/inflector": "^1.0",
"doctrine/lexer": "^1.0", "doctrine/lexer": "^1.0",
"doctrine/persistence": "^1.1", "doctrine/persistence": "^1.3.3",
"doctrine/reflection": "^1.0", "doctrine/reflection": "^1.0",
"php": "^7.1" "php": "^7.1 || ^8.0"
}, },
"require-dev": { "require-dev": {
"doctrine/coding-standard": "^1.0", "doctrine/coding-standard": "^1.0",
@@ -307,20 +411,20 @@
"doctrine", "doctrine",
"php" "php"
], ],
"time": "2020-01-10T15:49:25+00:00" "time": "2020-06-05T16:46:05+00:00"
}, },
{ {
"name": "doctrine/dbal", "name": "doctrine/dbal",
"version": "v2.10.1", "version": "2.10.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/dbal.git", "url": "https://github.com/doctrine/dbal.git",
"reference": "c2b8e6e82732a64ecde1cddf9e1e06cb8556e3d8" "reference": "47433196b6390d14409a33885ee42b6208160643"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/c2b8e6e82732a64ecde1cddf9e1e06cb8556e3d8", "url": "https://api.github.com/repos/doctrine/dbal/zipball/47433196b6390d14409a33885ee42b6208160643",
"reference": "c2b8e6e82732a64ecde1cddf9e1e06cb8556e3d8", "reference": "47433196b6390d14409a33885ee42b6208160643",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -330,11 +434,14 @@
"php": "^7.2" "php": "^7.2"
}, },
"require-dev": { "require-dev": {
"doctrine/coding-standard": "^6.0", "doctrine/coding-standard": "^8.1",
"jetbrains/phpstorm-stubs": "^2019.1", "jetbrains/phpstorm-stubs": "^2019.1",
"phpstan/phpstan": "^0.11.3", "nikic/php-parser": "^4.4",
"phpunit/phpunit": "^8.4.1", "phpstan/phpstan": "^0.12.40",
"symfony/console": "^2.0.5|^3.0|^4.0|^5.0" "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": { "suggest": {
"symfony/console": "For helpful console commands such as SQL execution and import of files." "symfony/console": "For helpful console commands such as SQL execution and import of files."
@@ -399,27 +506,27 @@
"sqlserver", "sqlserver",
"sqlsrv" "sqlsrv"
], ],
"time": "2020-01-04T12:56:21+00:00" "time": "2020-09-12T21:20:41+00:00"
}, },
{ {
"name": "doctrine/doctrine-bundle", "name": "doctrine/doctrine-bundle",
"version": "2.0.7", "version": "2.1.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/DoctrineBundle.git", "url": "https://github.com/doctrine/DoctrineBundle.git",
"reference": "6926771140ee87a823c3b2c72602de9dda4490d3" "reference": "f5153089993e1230f5d8acbd8e126014d5a63e17"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/6926771140ee87a823c3b2c72602de9dda4490d3", "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/f5153089993e1230f5d8acbd8e126014d5a63e17",
"reference": "6926771140ee87a823c3b2c72602de9dda4490d3", "reference": "f5153089993e1230f5d8acbd8e126014d5a63e17",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"doctrine/dbal": "^2.9.0", "doctrine/dbal": "^2.9.0|^3.0",
"doctrine/persistence": "^1.3.3", "doctrine/persistence": "^1.3.3|^2.0",
"jdorn/sql-formatter": "^1.2.16", "doctrine/sql-formatter": "^1.0.1",
"php": "^7.1", "php": "^7.1 || ^8.0",
"symfony/cache": "^4.3.3|^5.0", "symfony/cache": "^4.3.3|^5.0",
"symfony/config": "^4.3.3|^5.0", "symfony/config": "^4.3.3|^5.0",
"symfony/console": "^3.4.30|^4.3.3|^5.0", "symfony/console": "^3.4.30|^4.3.3|^5.0",
@@ -453,7 +560,7 @@
"type": "symfony-bundle", "type": "symfony-bundle",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "2.0.x-dev" "dev-master": "2.1.x-dev"
} }
}, },
"autoload": { "autoload": {
@@ -491,20 +598,20 @@
"orm", "orm",
"persistence" "persistence"
], ],
"time": "2020-01-18T11:56:15+00:00" "time": "2020-08-25T10:57:15+00:00"
}, },
{ {
"name": "doctrine/doctrine-migrations-bundle", "name": "doctrine/doctrine-migrations-bundle",
"version": "2.1.2", "version": "2.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git",
"reference": "856437e8de96a70233e1f0cc2352fc8dd15a899d" "reference": "5efa29df768abaafe29b34e73dac68efbedcaa4d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/856437e8de96a70233e1f0cc2352fc8dd15a899d", "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/5efa29df768abaafe29b34e73dac68efbedcaa4d",
"reference": "856437e8de96a70233e1f0cc2352fc8dd15a899d", "reference": "5efa29df768abaafe29b34e73dac68efbedcaa4d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -559,24 +666,24 @@
"migrations", "migrations",
"schema" "schema"
], ],
"time": "2019-11-13T12:57:41+00:00" "time": "2020-06-25T19:36:08+00:00"
}, },
{ {
"name": "doctrine/event-manager", "name": "doctrine/event-manager",
"version": "1.1.0", "version": "1.1.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/event-manager.git", "url": "https://github.com/doctrine/event-manager.git",
"reference": "629572819973f13486371cb611386eb17851e85c" "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/event-manager/zipball/629572819973f13486371cb611386eb17851e85c", "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f",
"reference": "629572819973f13486371cb611386eb17851e85c", "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1" "php": "^7.1 || ^8.0"
}, },
"conflict": { "conflict": {
"doctrine/common": "<2.9@dev" "doctrine/common": "<2.9@dev"
@@ -635,37 +742,42 @@
"event system", "event system",
"events" "events"
], ],
"time": "2019-11-10T09:48:07+00:00" "time": "2020-05-29T18:28:51+00:00"
}, },
{ {
"name": "doctrine/inflector", "name": "doctrine/inflector",
"version": "1.3.1", "version": "1.4.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/inflector.git", "url": "https://github.com/doctrine/inflector.git",
"reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1" "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/ec3a55242203ffa6a4b27c58176da97ff0a7aec1", "url": "https://api.github.com/repos/doctrine/inflector/zipball/4650c8b30c753a76bf44fb2ed00117d6f367490c",
"reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1", "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1" "php": "^7.2 || ^8.0"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^6.2" "doctrine/coding-standard": "^7.0",
"phpstan/phpstan": "^0.11",
"phpstan/phpstan-phpunit": "^0.11",
"phpstan/phpstan-strict-rules": "^0.11",
"phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.3.x-dev" "dev-master": "2.0.x-dev"
} }
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector",
"Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
} }
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
@@ -694,32 +806,38 @@
"email": "schmittjoh@gmail.com" "email": "schmittjoh@gmail.com"
} }
], ],
"description": "Common String Manipulations with regard to casing and singular/plural rules.", "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": "http://www.doctrine-project.org", "homepage": "https://www.doctrine-project.org/projects/inflector.html",
"keywords": [ "keywords": [
"inflection", "inflection",
"pluralize", "inflector",
"singularize", "lowercase",
"string" "manipulation",
"php",
"plural",
"singular",
"strings",
"uppercase",
"words"
], ],
"time": "2019-10-30T19:59:35+00:00" "time": "2020-05-29T07:19:59+00:00"
}, },
{ {
"name": "doctrine/instantiator", "name": "doctrine/instantiator",
"version": "1.3.0", "version": "1.3.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/instantiator.git", "url": "https://github.com/doctrine/instantiator.git",
"reference": "ae466f726242e637cebdd526a7d991b9433bacf1" "reference": "f350df0268e904597e3bd9c4685c53e0e333feea"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea",
"reference": "ae466f726242e637cebdd526a7d991b9433bacf1", "reference": "f350df0268e904597e3bd9c4685c53e0e333feea",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1" "php": "^7.1 || ^8.0"
}, },
"require-dev": { "require-dev": {
"doctrine/coding-standard": "^6.0", "doctrine/coding-standard": "^6.0",
@@ -758,24 +876,24 @@
"constructor", "constructor",
"instantiate" "instantiate"
], ],
"time": "2019-10-21T16:45:58+00:00" "time": "2020-05-29T17:27:14+00:00"
}, },
{ {
"name": "doctrine/lexer", "name": "doctrine/lexer",
"version": "1.2.0", "version": "1.2.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/lexer.git", "url": "https://github.com/doctrine/lexer.git",
"reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6" "reference": "e864bbf5904cb8f5bb334f99209b48018522f042"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042",
"reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", "reference": "e864bbf5904cb8f5bb334f99209b48018522f042",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.2" "php": "^7.2 || ^8.0"
}, },
"require-dev": { "require-dev": {
"doctrine/coding-standard": "^6.0", "doctrine/coding-standard": "^6.0",
@@ -820,7 +938,7 @@
"parser", "parser",
"php" "php"
], ],
"time": "2019-10-30T14:39:59+00:00" "time": "2020-05-25T17:44:05+00:00"
}, },
{ {
"name": "doctrine/migrations", "name": "doctrine/migrations",
@@ -906,27 +1024,29 @@
}, },
{ {
"name": "doctrine/orm", "name": "doctrine/orm",
"version": "v2.7.1", "version": "v2.7.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/orm.git", "url": "https://github.com/doctrine/orm.git",
"reference": "445796af0e873d9bd04f2502d322a7d5009b6846" "reference": "d95e03ba660d50d785a9925f41927fef0ee553cf"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/orm/zipball/445796af0e873d9bd04f2502d322a7d5009b6846", "url": "https://api.github.com/repos/doctrine/orm/zipball/d95e03ba660d50d785a9925f41927fef0ee553cf",
"reference": "445796af0e873d9bd04f2502d322a7d5009b6846", "reference": "d95e03ba660d50d785a9925f41927fef0ee553cf",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"doctrine/annotations": "^1.8", "doctrine/annotations": "^1.8",
"doctrine/cache": "^1.9.1", "doctrine/cache": "^1.9.1",
"doctrine/collections": "^1.5", "doctrine/collections": "^1.5",
"doctrine/common": "^2.11", "doctrine/common": "^2.11 || ^3.0",
"doctrine/dbal": "^2.9.3", "doctrine/dbal": "^2.9.3",
"doctrine/event-manager": "^1.1", "doctrine/event-manager": "^1.1",
"doctrine/inflector": "^1.0",
"doctrine/instantiator": "^1.3", "doctrine/instantiator": "^1.3",
"doctrine/persistence": "^1.2", "doctrine/lexer": "^1.0",
"doctrine/persistence": "^1.3.3 || ^2.0",
"ext-pdo": "*", "ext-pdo": "*",
"ocramius/package-versions": "^1.2", "ocramius/package-versions": "^1.2",
"php": "^7.1", "php": "^7.1",
@@ -934,8 +1054,10 @@
}, },
"require-dev": { "require-dev": {
"doctrine/coding-standard": "^5.0", "doctrine/coding-standard": "^5.0",
"phpstan/phpstan": "^0.12.18",
"phpunit/phpunit": "^7.5", "phpunit/phpunit": "^7.5",
"symfony/yaml": "^3.4|^4.0|^5.0" "symfony/yaml": "^3.4|^4.0|^5.0",
"vimeo/psalm": "^3.11"
}, },
"suggest": { "suggest": {
"symfony/yaml": "If you want to use YAML Metadata Mapping Driver" "symfony/yaml": "If you want to use YAML Metadata Mapping Driver"
@@ -986,20 +1108,20 @@
"database", "database",
"orm" "orm"
], ],
"time": "2020-02-15T14:35:56+00:00" "time": "2020-05-26T16:03:49+00:00"
}, },
{ {
"name": "doctrine/persistence", "name": "doctrine/persistence",
"version": "1.3.6", "version": "1.3.8",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/persistence.git", "url": "https://github.com/doctrine/persistence.git",
"reference": "5dd3ac5eebef2d0b074daa4440bb18f93132dee4" "reference": "7a6eac9fb6f61bba91328f15aa7547f4806ca288"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/persistence/zipball/5dd3ac5eebef2d0b074daa4440bb18f93132dee4", "url": "https://api.github.com/repos/doctrine/persistence/zipball/7a6eac9fb6f61bba91328f15aa7547f4806ca288",
"reference": "5dd3ac5eebef2d0b074daa4440bb18f93132dee4", "reference": "7a6eac9fb6f61bba91328f15aa7547f4806ca288",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1007,8 +1129,8 @@
"doctrine/cache": "^1.0", "doctrine/cache": "^1.0",
"doctrine/collections": "^1.0", "doctrine/collections": "^1.0",
"doctrine/event-manager": "^1.0", "doctrine/event-manager": "^1.0",
"doctrine/reflection": "^1.1", "doctrine/reflection": "^1.2",
"php": "^7.1" "php": "^7.1 || ^8.0"
}, },
"conflict": { "conflict": {
"doctrine/common": "<2.10@dev" "doctrine/common": "<2.10@dev"
@@ -1016,7 +1138,8 @@
"require-dev": { "require-dev": {
"doctrine/coding-standard": "^6.0", "doctrine/coding-standard": "^6.0",
"phpstan/phpstan": "^0.11", "phpstan/phpstan": "^0.11",
"phpunit/phpunit": "^7.0" "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
"vimeo/psalm": "^3.11"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@@ -1069,20 +1192,20 @@
"orm", "orm",
"persistence" "persistence"
], ],
"time": "2020-01-16T22:06:23+00:00" "time": "2020-06-20T12:56:16+00:00"
}, },
{ {
"name": "doctrine/reflection", "name": "doctrine/reflection",
"version": "v1.1.0", "version": "1.2.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/reflection.git", "url": "https://github.com/doctrine/reflection.git",
"reference": "bc420ead87fdfe08c03ecc3549db603a45b06d4c" "reference": "55e71912dfcd824b2fdd16f2d9afe15684cfce79"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/reflection/zipball/bc420ead87fdfe08c03ecc3549db603a45b06d4c", "url": "https://api.github.com/repos/doctrine/reflection/zipball/55e71912dfcd824b2fdd16f2d9afe15684cfce79",
"reference": "bc420ead87fdfe08c03ecc3549db603a45b06d4c", "reference": "55e71912dfcd824b2fdd16f2d9afe15684cfce79",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1103,7 +1226,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.0.x-dev" "dev-master": "1.2.x-dev"
} }
}, },
"autoload": { "autoload": {
@@ -1147,20 +1270,73 @@
"reflection", "reflection",
"static" "static"
], ],
"time": "2020-01-08T19:53:19+00:00" "time": "2020-03-27T11:06:43+00:00"
}, },
{ {
"name": "egulias/email-validator", "name": "doctrine/sql-formatter",
"version": "2.1.17", "version": "1.1.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/egulias/EmailValidator.git", "url": "https://github.com/doctrine/sql-formatter.git",
"reference": "ade6887fd9bd74177769645ab5c474824f8a418a" "reference": "56070bebac6e77230ed7d306ad13528e60732871"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ade6887fd9bd74177769645ab5c474824f8a418a", "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/56070bebac6e77230ed7d306ad13528e60732871",
"reference": "ade6887fd9bd74177769645ab5c474824f8a418a", "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": "" "shasum": ""
}, },
"require": { "require": {
@@ -1184,7 +1360,7 @@
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Egulias\\EmailValidator\\": "EmailValidator" "Egulias\\EmailValidator\\": "src"
} }
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
@@ -1205,7 +1381,7 @@
"validation", "validation",
"validator" "validator"
], ],
"time": "2020-02-13T22:36:52+00:00" "time": "2020-09-26T15:48:38+00:00"
}, },
{ {
"name": "exsyst/swagger", "name": "exsyst/swagger",
@@ -1326,21 +1502,21 @@
}, },
{ {
"name": "friendsofsymfony/rest-bundle", "name": "friendsofsymfony/rest-bundle",
"version": "2.7.2", "version": "2.8.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/FriendsOfSymfony/FOSRestBundle.git", "url": "https://github.com/FriendsOfSymfony/FOSRestBundle.git",
"reference": "22fbbc35a2964564bfde765007655174262315c9" "reference": "2000204f4ac6bf5515222fc5d9be1652ed138e8f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/FriendsOfSymfony/FOSRestBundle/zipball/22fbbc35a2964564bfde765007655174262315c9", "url": "https://api.github.com/repos/FriendsOfSymfony/FOSRestBundle/zipball/2000204f4ac6bf5515222fc5d9be1652ed138e8f",
"reference": "22fbbc35a2964564bfde765007655174262315c9", "reference": "2000204f4ac6bf5515222fc5d9be1652ed138e8f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"doctrine/inflector": "^1.0", "doctrine/inflector": "^1.0",
"php": "^7.1", "php": "^7.1|^8.0",
"psr/log": "^1.0", "psr/log": "^1.0",
"symfony/config": "^3.4|^4.3", "symfony/config": "^3.4|^4.3",
"symfony/debug": "^3.4|^4.3", "symfony/debug": "^3.4|^4.3",
@@ -1356,6 +1532,7 @@
"willdurand/negotiation": "^2.0" "willdurand/negotiation": "^2.0"
}, },
"conflict": { "conflict": {
"doctrine/inflector": "1.4.0",
"jms/serializer": "<1.13.0", "jms/serializer": "<1.13.0",
"jms/serializer-bundle": "<2.0.0", "jms/serializer-bundle": "<2.0.0",
"sensio/framework-extra-bundle": "<3.0.13" "sensio/framework-extra-bundle": "<3.0.13"
@@ -1391,6 +1568,7 @@
"type": "symfony-bundle", "type": "symfony-bundle",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"2.x-dev": "2.8-dev",
"dev-master": "2.7-dev" "dev-master": "2.7-dev"
} }
}, },
@@ -1399,6 +1577,7 @@
"FOS\\RestBundle\\": "" "FOS\\RestBundle\\": ""
}, },
"exclude-from-classmap": [ "exclude-from-classmap": [
"Resources/",
"Tests/" "Tests/"
] ]
}, },
@@ -1425,7 +1604,179 @@
"keywords": [ "keywords": [
"rest" "rest"
], ],
"time": "2020-03-04T21:18:53+00:00" "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", "name": "jasig/phpcas",
@@ -1483,35 +1834,36 @@
"time": "2019-08-18T20:01:55+00:00" "time": "2019-08-18T20:01:55+00:00"
}, },
{ {
"name": "jdorn/sql-formatter", "name": "jean85/pretty-package-versions",
"version": "v1.2.17", "version": "1.5.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/jdorn/sql-formatter.git", "url": "https://github.com/Jean85/pretty-package-versions.git",
"reference": "64990d96e0959dff8e059dfcdc1af130728d92bc" "reference": "a917488320c20057da87f67d0d40543dd9427f7a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc", "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/a917488320c20057da87f67d0d40543dd9427f7a",
"reference": "64990d96e0959dff8e059dfcdc1af130728d92bc", "reference": "a917488320c20057da87f67d0d40543dd9427f7a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=5.2.4" "composer/package-versions-deprecated": "^1.8.0",
"php": "^7.0|^8.0"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "3.7.*" "phpunit/phpunit": "^6.0|^8.5|^9.2"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.3.x-dev" "dev-master": "1.x-dev"
} }
}, },
"autoload": { "autoload": {
"classmap": [ "psr-4": {
"lib" "Jean85\\": "src/"
] }
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
@@ -1519,18 +1871,18 @@
], ],
"authors": [ "authors": [
{ {
"name": "Jeremy Dorn", "name": "Alessandro Lai",
"email": "jeremy@jeremydorn.com", "email": "alessandro.lai85@gmail.com"
"homepage": "http://jeremydorn.com/"
} }
], ],
"description": "a PHP SQL highlighting library", "description": "A wrapper for ocramius/package-versions to get pretty versions strings",
"homepage": "https://github.com/jdorn/sql-formatter/",
"keywords": [ "keywords": [
"highlight", "composer",
"sql" "package",
"release",
"versions"
], ],
"time": "2014-01-12T16:20:24+00:00" "time": "2020-09-14T08:43:34+00:00"
}, },
{ {
"name": "knplabs/knp-snappy", "name": "knplabs/knp-snappy",
@@ -1600,16 +1952,16 @@
}, },
{ {
"name": "knplabs/knp-snappy-bundle", "name": "knplabs/knp-snappy-bundle",
"version": "v1.7.0", "version": "v1.7.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/KnpLabs/KnpSnappyBundle.git", "url": "https://github.com/KnpLabs/KnpSnappyBundle.git",
"reference": "717185618888b03daf85a54897a8a11e655a3eeb" "reference": "89a633d30d39b71b38511b70e1f0495164140933"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/KnpLabs/KnpSnappyBundle/zipball/717185618888b03daf85a54897a8a11e655a3eeb", "url": "https://api.github.com/repos/KnpLabs/KnpSnappyBundle/zipball/89a633d30d39b71b38511b70e1f0495164140933",
"reference": "717185618888b03daf85a54897a8a11e655a3eeb", "reference": "89a633d30d39b71b38511b70e1f0495164140933",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1635,7 +1987,7 @@
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Knp\\Bundle\\SnappyBundle\\": "" "Knp\\Bundle\\SnappyBundle\\": "src/"
} }
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
@@ -1652,7 +2004,7 @@
"homepage": "http://github.com/KnpLabs/KnpSnappyBundle/contributors" "homepage": "http://github.com/KnpLabs/KnpSnappyBundle/contributors"
} }
], ],
"description": "Easily create PDF and images in Symfony2 by converting Twig/HTML templates.", "description": "Easily create PDF and images in Symfony by converting Twig/HTML templates.",
"homepage": "http://github.com/KnpLabs/KnpSnappyBundle", "homepage": "http://github.com/KnpLabs/KnpSnappyBundle",
"keywords": [ "keywords": [
"bundle", "bundle",
@@ -1661,20 +2013,20 @@
"pdf", "pdf",
"snappy" "snappy"
], ],
"time": "2019-12-30T16:19:53+00:00" "time": "2020-09-11T12:51:46+00:00"
}, },
{ {
"name": "monolog/monolog", "name": "monolog/monolog",
"version": "1.25.3", "version": "1.25.5",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Seldaek/monolog.git", "url": "https://github.com/Seldaek/monolog.git",
"reference": "fa82921994db851a8becaf3787a9e73c5976b6f1" "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/fa82921994db851a8becaf3787a9e73c5976b6f1", "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1817faadd1846cd08be9a49e905dc68823bc38c0",
"reference": "fa82921994db851a8becaf3787a9e73c5976b6f1", "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1688,11 +2040,10 @@
"aws/aws-sdk-php": "^2.4.9 || ^3.0", "aws/aws-sdk-php": "^2.4.9 || ^3.0",
"doctrine/couchdb": "~1.0@dev", "doctrine/couchdb": "~1.0@dev",
"graylog2/gelf-php": "~1.0", "graylog2/gelf-php": "~1.0",
"jakub-onderka/php-parallel-lint": "0.9",
"php-amqplib/php-amqplib": "~2.4", "php-amqplib/php-amqplib": "~2.4",
"php-console/php-console": "^3.1.3", "php-console/php-console": "^3.1.3",
"php-parallel-lint/php-parallel-lint": "^1.0",
"phpunit/phpunit": "~4.5", "phpunit/phpunit": "~4.5",
"phpunit/phpunit-mock-objects": "2.3.0",
"ruflin/elastica": ">=0.90 <3.0", "ruflin/elastica": ">=0.90 <3.0",
"sentry/sentry": "^0.13", "sentry/sentry": "^0.13",
"swiftmailer/swiftmailer": "^5.3|^6.0" "swiftmailer/swiftmailer": "^5.3|^6.0"
@@ -1739,7 +2090,7 @@
"logging", "logging",
"psr-3" "psr-3"
], ],
"time": "2019-12-20T14:15:16+00:00" "time": "2020-07-23T08:35:51+00:00"
}, },
{ {
"name": "nategood/httpful", "name": "nategood/httpful",
@@ -1793,16 +2144,16 @@
}, },
{ {
"name": "nelmio/api-doc-bundle", "name": "nelmio/api-doc-bundle",
"version": "v3.6.0", "version": "v3.7.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/nelmio/NelmioApiDocBundle.git", "url": "https://github.com/nelmio/NelmioApiDocBundle.git",
"reference": "0fcf2d5c9a9b4e230e5bcf6b3f4ad469ba738ed2" "reference": "290df23dc0060c4daaed95a7f37845f16a287ebd"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/0fcf2d5c9a9b4e230e5bcf6b3f4ad469ba738ed2", "url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/290df23dc0060c4daaed95a7f37845f16a287ebd",
"reference": "0fcf2d5c9a9b4e230e5bcf6b3f4ad469ba738ed2", "reference": "290df23dc0060c4daaed95a7f37845f16a287ebd",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1821,7 +2172,7 @@
"api-platform/core": "^2.1.2", "api-platform/core": "^2.1.2",
"doctrine/annotations": "^1.2", "doctrine/annotations": "^1.2",
"doctrine/common": "^2.4", "doctrine/common": "^2.4",
"friendsofsymfony/rest-bundle": "^2.0", "friendsofsymfony/rest-bundle": "^2.0|^3.0@beta",
"jms/serializer": "^1.14|^3.0", "jms/serializer": "^1.14|^3.0",
"jms/serializer-bundle": "^2.3|^3.0", "jms/serializer-bundle": "^2.3|^3.0",
"sensio/framework-extra-bundle": "^3.0.13|^4.0|^5.0", "sensio/framework-extra-bundle": "^3.0.13|^4.0|^5.0",
@@ -1834,7 +2185,7 @@
"symfony/form": "^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/phpunit-bridge": "^3.4.24|^4.0|^5.0",
"symfony/property-access": "^3.4|^4.0|^5.0", "symfony/property-access": "^3.4|^4.0|^5.0",
"symfony/routing": "^3.4|^4.0|^5.0", "symfony/routing": "^3.4.42|^4.0|^5.0",
"symfony/stopwatch": "^3.4|^4.0|^5.0", "symfony/stopwatch": "^3.4|^4.0|^5.0",
"symfony/templating": "^3.4|^4.0|^5.0", "symfony/templating": "^3.4|^4.0|^5.0",
"symfony/twig-bundle": "^3.4|^4.0|^5.0", "symfony/twig-bundle": "^3.4|^4.0|^5.0",
@@ -1848,13 +2199,16 @@
"type": "symfony-bundle", "type": "symfony-bundle",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "3.6.x-dev" "dev-3.x": "3.7.x-dev"
} }
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Nelmio\\ApiDocBundle\\": "" "Nelmio\\ApiDocBundle\\": ""
} },
"exclude-from-classmap": [
"/Tests/"
]
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
@@ -1877,20 +2231,20 @@
"documentation", "documentation",
"rest" "rest"
], ],
"time": "2020-02-23T16:51:12+00:00" "time": "2020-09-29T10:30:21+00:00"
}, },
{ {
"name": "nikic/php-parser", "name": "nikic/php-parser",
"version": "v4.3.0", "version": "v4.10.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/nikic/PHP-Parser.git", "url": "https://github.com/nikic/PHP-Parser.git",
"reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc" "reference": "658f1be311a230e0907f5dfe0213742aff0596de"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/9a9981c347c5c49d6dfe5cf826bb882b824080dc", "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/658f1be311a230e0907f5dfe0213742aff0596de",
"reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc", "reference": "658f1be311a230e0907f5dfe0213742aff0596de",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1898,8 +2252,8 @@
"php": ">=7.0" "php": ">=7.0"
}, },
"require-dev": { "require-dev": {
"ircmaxell/php-yacc": "0.0.5", "ircmaxell/php-yacc": "^0.0.7",
"phpunit/phpunit": "^6.5 || ^7.0 || ^8.0" "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
}, },
"bin": [ "bin": [
"bin/php-parse" "bin/php-parse"
@@ -1907,7 +2261,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "4.3-dev" "dev-master": "4.9-dev"
} }
}, },
"autoload": { "autoload": {
@@ -1929,57 +2283,7 @@
"parser", "parser",
"php" "php"
], ],
"time": "2019-11-08T13:50:10+00:00" "time": "2020-09-26T10:30:38+00:00"
},
{
"name": "ocramius/package-versions",
"version": "1.4.2",
"source": {
"type": "git",
"url": "https://github.com/Ocramius/PackageVersions.git",
"reference": "44af6f3a2e2e04f2af46bcb302ad9600cba41c7d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/44af6f3a2e2e04f2af46bcb302ad9600cba41c7d",
"reference": "44af6f3a2e2e04f2af46bcb302ad9600cba41c7d",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.0.0",
"php": "^7.1.0"
},
"require-dev": {
"composer/composer": "^1.6.3",
"doctrine/coding-standard": "^5.0.1",
"ext-zip": "*",
"infection/infection": "^0.7.1",
"phpunit/phpunit": "^7.5.17"
},
"type": "composer-plugin",
"extra": {
"class": "PackageVersions\\Installer",
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
"PackageVersions\\": "src/PackageVersions"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com"
}
],
"description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
"time": "2019-11-15T16:17:10+00:00"
}, },
{ {
"name": "ocramius/proxy-manager", "name": "ocramius/proxy-manager",
@@ -2139,24 +2443,164 @@
"time": "2020-02-06T09:12:03+00:00" "time": "2020-02-06T09:12:03+00:00"
}, },
{ {
"name": "phpdocumentor/reflection-common", "name": "php-http/client-common",
"version": "2.0.0", "version": "2.3.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpDocumentor/ReflectionCommon.git", "url": "https://github.com/php-http/client-common.git",
"reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" "reference": "e37e46c610c87519753135fb893111798c69076a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", "url": "https://api.github.com/repos/php-http/client-common/zipball/e37e46c610c87519753135fb893111798c69076a",
"reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", "reference": "e37e46c610c87519753135fb893111798c69076a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=7.1" "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": { "require-dev": {
"phpunit/phpunit": "~6" "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", "type": "library",
"extra": { "extra": {
@@ -2164,6 +2608,233 @@
"dev-master": "2.x-dev" "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": { "autoload": {
"psr-4": { "psr-4": {
"phpDocumentor\\Reflection\\": "src/" "phpDocumentor\\Reflection\\": "src/"
@@ -2188,45 +2859,41 @@
"reflection", "reflection",
"static analysis" "static analysis"
], ],
"time": "2018-08-07T13:53:10+00:00" "time": "2020-06-27T09:03:43+00:00"
}, },
{ {
"name": "phpdocumentor/reflection-docblock", "name": "phpdocumentor/reflection-docblock",
"version": "4.3.4", "version": "5.2.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
"reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c" "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c", "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
"reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c", "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.0", "ext-filter": "*",
"phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", "php": "^7.2 || ^8.0",
"phpdocumentor/type-resolver": "~0.4 || ^1.0.0", "phpdocumentor/reflection-common": "^2.2",
"webmozart/assert": "^1.0" "phpdocumentor/type-resolver": "^1.3",
"webmozart/assert": "^1.9.1"
}, },
"require-dev": { "require-dev": {
"doctrine/instantiator": "^1.0.5", "mockery/mockery": "~1.3.2"
"mockery/mockery": "^1.0",
"phpdocumentor/type-resolver": "0.4.*",
"phpunit/phpunit": "^6.4"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "4.x-dev" "dev-master": "5.x-dev"
} }
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"phpDocumentor\\Reflection\\": [ "phpDocumentor\\Reflection\\": "src"
"src/"
]
} }
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
@@ -2237,37 +2904,40 @@
{ {
"name": "Mike van Riel", "name": "Mike van Riel",
"email": "me@mikevanriel.com" "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.", "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
"time": "2019-12-28T18:55:12+00:00" "time": "2020-09-03T19:13:55+00:00"
}, },
{ {
"name": "phpdocumentor/type-resolver", "name": "phpdocumentor/type-resolver",
"version": "1.1.0", "version": "1.4.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git", "url": "https://github.com/phpDocumentor/TypeResolver.git",
"reference": "7462d5f123dfc080dfdf26897032a6513644fc95" "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95", "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
"reference": "7462d5f123dfc080dfdf26897032a6513644fc95", "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.2", "php": "^7.2 || ^8.0",
"phpdocumentor/reflection-common": "^2.0" "phpdocumentor/reflection-common": "^2.0"
}, },
"require-dev": { "require-dev": {
"ext-tokenizer": "^7.2", "ext-tokenizer": "*"
"mockery/mockery": "~1"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.x-dev" "dev-1.x": "1.x-dev"
} }
}, },
"autoload": { "autoload": {
@@ -2286,7 +2956,7 @@
} }
], ],
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"time": "2020-02-18T18:59:58+00:00" "time": "2020-09-17T18:55:26+00:00"
}, },
{ {
"name": "psr/cache", "name": "psr/cache",
@@ -2383,6 +3053,157 @@
], ],
"time": "2017-02-14T16:28:37+00:00" "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", "name": "psr/link",
"version": "1.0.0", "version": "1.0.0",
@@ -2434,16 +3255,16 @@
}, },
{ {
"name": "psr/log", "name": "psr/log",
"version": "1.1.2", "version": "1.1.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/php-fig/log.git", "url": "https://github.com/php-fig/log.git",
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -2477,59 +3298,97 @@
"psr", "psr",
"psr-3" "psr-3"
], ],
"time": "2019-11-01T11:05:21+00:00" "time": "2020-03-23T09:12:05+00:00"
}, },
{ {
"name": "sensio/framework-extra-bundle", "name": "ralouphie/getallheaders",
"version": "v5.5.3", "version": "3.0.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", "url": "https://github.com/ralouphie/getallheaders.git",
"reference": "98f0807137b13d0acfdf3c255a731516e97015de" "reference": "120b605dfeb996808c31b6477290a714d356e822"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/98f0807137b13d0acfdf3c255a731516e97015de", "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
"reference": "98f0807137b13d0acfdf3c255a731516e97015de", "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": "" "shasum": ""
}, },
"require": { "require": {
"doctrine/annotations": "^1.0", "doctrine/annotations": "^1.0",
"php": ">=7.1.3", "php": ">=7.2.5",
"symfony/config": "^4.3|^5.0", "symfony/config": "^4.4|^5.0",
"symfony/dependency-injection": "^4.3|^5.0", "symfony/dependency-injection": "^4.4|^5.0",
"symfony/framework-bundle": "^4.3|^5.0", "symfony/framework-bundle": "^4.4|^5.0",
"symfony/http-kernel": "^4.3|^5.0" "symfony/http-kernel": "^4.4|^5.0"
}, },
"conflict": { "conflict": {
"doctrine/doctrine-cache-bundle": "<1.3.1" "doctrine/doctrine-cache-bundle": "<1.3.1",
"doctrine/persistence": "<1.3"
}, },
"require-dev": { "require-dev": {
"doctrine/dbal": "^2.10|^3.0",
"doctrine/doctrine-bundle": "^1.11|^2.0", "doctrine/doctrine-bundle": "^1.11|^2.0",
"doctrine/orm": "^2.5", "doctrine/orm": "^2.5",
"nyholm/psr7": "^1.1", "nyholm/psr7": "^1.1",
"symfony/browser-kit": "^4.3|^5.0", "symfony/browser-kit": "^4.4|^5.0",
"symfony/dom-crawler": "^4.3|^5.0", "symfony/doctrine-bridge": "^4.4|^5.0",
"symfony/expression-language": "^4.3|^5.0", "symfony/dom-crawler": "^4.4|^5.0",
"symfony/finder": "^4.3|^5.0", "symfony/expression-language": "^4.4|^5.0",
"symfony/finder": "^4.4|^5.0",
"symfony/monolog-bridge": "^4.0|^5.0", "symfony/monolog-bridge": "^4.0|^5.0",
"symfony/monolog-bundle": "^3.2", "symfony/monolog-bundle": "^3.2",
"symfony/phpunit-bridge": "^4.3.5|^5.0", "symfony/phpunit-bridge": "^4.4.9|^5.0.9",
"symfony/psr-http-message-bridge": "^1.1", "symfony/psr-http-message-bridge": "^1.1",
"symfony/security-bundle": "^4.3|^5.0", "symfony/security-bundle": "^4.4|^5.0",
"symfony/twig-bundle": "^4.3|^5.0", "symfony/twig-bundle": "^4.4|^5.0",
"symfony/yaml": "^4.3|^5.0", "symfony/yaml": "^4.4|^5.0",
"twig/twig": "^1.34|^2.4|^3.0" "twig/twig": "^1.34|^2.4|^3.0"
}, },
"suggest": {
"symfony/expression-language": "",
"symfony/psr-http-message-bridge": "To use the PSR-7 converters",
"symfony/security-bundle": ""
},
"type": "symfony-bundle", "type": "symfony-bundle",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "5.5.x-dev" "dev-master": "5.6.x-dev"
} }
}, },
"autoload": { "autoload": {
@@ -2555,7 +3414,283 @@
"annotations", "annotations",
"controllers" "controllers"
], ],
"time": "2019-12-27T08:57:19+00:00" "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", "name": "symfony/apache-pack",
@@ -2581,20 +3716,20 @@
}, },
{ {
"name": "symfony/asset", "name": "symfony/asset",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/asset.git", "url": "https://github.com/symfony/asset.git",
"reference": "5c1afa35f0ff6a4fa5d037b4a5ef1bf60513e65b" "reference": "9b446eb7c16347088663dc18d38fb0f3b536b7e2"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/asset/zipball/5c1afa35f0ff6a4fa5d037b4a5ef1bf60513e65b", "url": "https://api.github.com/repos/symfony/asset/zipball/9b446eb7c16347088663dc18d38fb0f3b536b7e2",
"reference": "5c1afa35f0ff6a4fa5d037b4a5ef1bf60513e65b", "reference": "9b446eb7c16347088663dc18d38fb0f3b536b7e2",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3" "php": ">=7.1.3"
}, },
"require-dev": { "require-dev": {
"symfony/http-foundation": "^3.4|^4.0|^5.0", "symfony/http-foundation": "^3.4|^4.0|^5.0",
@@ -2633,24 +3768,24 @@
], ],
"description": "Symfony Asset Component", "description": "Symfony Asset Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-24T13:10:00+00:00" "time": "2020-09-02T16:08:58+00:00"
}, },
{ {
"name": "symfony/cache", "name": "symfony/cache",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/cache.git", "url": "https://github.com/symfony/cache.git",
"reference": "28511cbd8c760a19f4b4b70961d2cd957733b3d9" "reference": "969a76c2dbce7e4306684f5376718147d1ec4ae7"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/cache/zipball/28511cbd8c760a19f4b4b70961d2cd957733b3d9", "url": "https://api.github.com/repos/symfony/cache/zipball/969a76c2dbce7e4306684f5376718147d1ec4ae7",
"reference": "28511cbd8c760a19f4b4b70961d2cd957733b3d9", "reference": "969a76c2dbce7e4306684f5376718147d1ec4ae7",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"psr/cache": "~1.0", "psr/cache": "~1.0",
"psr/log": "~1.0", "psr/log": "~1.0",
"symfony/cache-contracts": "^1.1.7|^2", "symfony/cache-contracts": "^1.1.7|^2",
@@ -2670,9 +3805,9 @@
}, },
"require-dev": { "require-dev": {
"cache/integration-tests": "dev-master", "cache/integration-tests": "dev-master",
"doctrine/cache": "~1.6", "doctrine/cache": "^1.6",
"doctrine/dbal": "~2.5", "doctrine/dbal": "^2.5|^3.0",
"predis/predis": "~1.1", "predis/predis": "^1.1",
"psr/simple-cache": "^1.0", "psr/simple-cache": "^1.0",
"symfony/config": "^4.2|^5.0", "symfony/config": "^4.2|^5.0",
"symfony/dependency-injection": "^3.4|^4.1|^5.0", "symfony/dependency-injection": "^3.4|^4.1|^5.0",
@@ -2712,24 +3847,24 @@
"caching", "caching",
"psr6" "psr6"
], ],
"time": "2020-02-20T16:31:44+00:00" "time": "2020-09-27T12:40:39+00:00"
}, },
{ {
"name": "symfony/cache-contracts", "name": "symfony/cache-contracts",
"version": "v2.0.1", "version": "v2.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/cache-contracts.git", "url": "https://github.com/symfony/cache-contracts.git",
"reference": "23ed8bfc1a4115feca942cb5f1aacdf3dcdf3c16" "reference": "8034ca0b61d4dd967f3698aaa1da2507b631d0cb"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/cache-contracts/zipball/23ed8bfc1a4115feca942cb5f1aacdf3dcdf3c16", "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/8034ca0b61d4dd967f3698aaa1da2507b631d0cb",
"reference": "23ed8bfc1a4115feca942cb5f1aacdf3dcdf3c16", "reference": "8034ca0b61d4dd967f3698aaa1da2507b631d0cb",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.2.5", "php": ">=7.2.5",
"psr/cache": "^1.0" "psr/cache": "^1.0"
}, },
"suggest": { "suggest": {
@@ -2738,7 +3873,11 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "2.0-dev" "dev-master": "2.2-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
} }
}, },
"autoload": { "autoload": {
@@ -2770,24 +3909,24 @@
"interoperability", "interoperability",
"standards" "standards"
], ],
"time": "2019-11-18T17:27:11+00:00" "time": "2020-09-07T11:33:47+00:00"
}, },
{ {
"name": "symfony/config", "name": "symfony/config",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/config.git", "url": "https://github.com/symfony/config.git",
"reference": "cbfef5ae91ccd3b06621c18d58cd355c68c87ae9" "reference": "7c5a1002178a612787c291a4f515f87b19176b61"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/config/zipball/cbfef5ae91ccd3b06621c18d58cd355c68c87ae9", "url": "https://api.github.com/repos/symfony/config/zipball/7c5a1002178a612787c291a4f515f87b19176b61",
"reference": "cbfef5ae91ccd3b06621c18d58cd355c68c87ae9", "reference": "7c5a1002178a612787c291a4f515f87b19176b61",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/filesystem": "^3.4|^4.0|^5.0", "symfony/filesystem": "^3.4|^4.0|^5.0",
"symfony/polyfill-ctype": "~1.8" "symfony/polyfill-ctype": "~1.8"
}, },
@@ -2834,26 +3973,27 @@
], ],
"description": "Symfony Config Component", "description": "Symfony Config Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-04T09:32:40+00:00" "time": "2020-10-02T07:34:48+00:00"
}, },
{ {
"name": "symfony/console", "name": "symfony/console",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/console.git", "url": "https://github.com/symfony/console.git",
"reference": "4fa15ae7be74e53f6ec8c83ed403b97e23b665e9" "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/4fa15ae7be74e53f6ec8c83ed403b97e23b665e9", "url": "https://api.github.com/repos/symfony/console/zipball/90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
"reference": "4fa15ae7be74e53f6ec8c83ed403b97e23b665e9", "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php73": "^1.8", "symfony/polyfill-php73": "^1.8",
"symfony/polyfill-php80": "^1.15",
"symfony/service-contracts": "^1.1|^2" "symfony/service-contracts": "^1.1|^2"
}, },
"conflict": { "conflict": {
@@ -2910,25 +4050,26 @@
], ],
"description": "Symfony Console Component", "description": "Symfony Console Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-24T13:10:00+00:00" "time": "2020-09-15T07:58:55+00:00"
}, },
{ {
"name": "symfony/debug", "name": "symfony/debug",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/debug.git", "url": "https://github.com/symfony/debug.git",
"reference": "a980d87a659648980d89193fd8b7a7ca89d97d21" "reference": "726b85e69342e767d60e3853b98559a68ff74183"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/debug/zipball/a980d87a659648980d89193fd8b7a7ca89d97d21", "url": "https://api.github.com/repos/symfony/debug/zipball/726b85e69342e767d60e3853b98559a68ff74183",
"reference": "a980d87a659648980d89193fd8b7a7ca89d97d21", "reference": "726b85e69342e767d60e3853b98559a68ff74183",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"psr/log": "~1.0" "psr/log": "~1.0",
"symfony/polyfill-php80": "^1.15"
}, },
"conflict": { "conflict": {
"symfony/http-kernel": "<3.4" "symfony/http-kernel": "<3.4"
@@ -2966,24 +4107,24 @@
], ],
"description": "Symfony Debug Component", "description": "Symfony Debug Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-23T14:41:43+00:00" "time": "2020-09-09T05:20:36+00:00"
}, },
{ {
"name": "symfony/dependency-injection", "name": "symfony/dependency-injection",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/dependency-injection.git", "url": "https://github.com/symfony/dependency-injection.git",
"reference": "ebb2e882e8c9e2eb990aa61ddcd389848466e342" "reference": "89274c8847dff2ed703e481843eb9159ca25cc6e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/ebb2e882e8c9e2eb990aa61ddcd389848466e342", "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/89274c8847dff2ed703e481843eb9159ca25cc6e",
"reference": "ebb2e882e8c9e2eb990aa61ddcd389848466e342", "reference": "89274c8847dff2ed703e481843eb9159ca25cc6e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"psr/container": "^1.0", "psr/container": "^1.0",
"symfony/service-contracts": "^1.1.6|^2" "symfony/service-contracts": "^1.1.6|^2"
}, },
@@ -3039,26 +4180,26 @@
], ],
"description": "Symfony DependencyInjection Component", "description": "Symfony DependencyInjection Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-29T09:50:10+00:00" "time": "2020-09-10T10:08:39+00:00"
}, },
{ {
"name": "symfony/doctrine-bridge", "name": "symfony/doctrine-bridge",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/doctrine-bridge.git", "url": "https://github.com/symfony/doctrine-bridge.git",
"reference": "1b4564758fe91f5d53dfbdfd9007d15e43fa465f" "reference": "98c60d6dbaafeaf6204d3476ab1b54335ff7f540"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/1b4564758fe91f5d53dfbdfd9007d15e43fa465f", "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/98c60d6dbaafeaf6204d3476ab1b54335ff7f540",
"reference": "1b4564758fe91f5d53dfbdfd9007d15e43fa465f", "reference": "98c60d6dbaafeaf6204d3476ab1b54335ff7f540",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"doctrine/event-manager": "~1.0", "doctrine/event-manager": "~1.0",
"doctrine/persistence": "^1.3", "doctrine/persistence": "^1.3|^2",
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/polyfill-ctype": "~1.8", "symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-mbstring": "~1.0",
"symfony/service-contracts": "^1.1|^2" "symfony/service-contracts": "^1.1|^2"
@@ -3073,17 +4214,18 @@
"symfony/validator": "<4.4.2|<5.0.2,>=5.0" "symfony/validator": "<4.4.2|<5.0.2,>=5.0"
}, },
"require-dev": { "require-dev": {
"composer/package-versions-deprecated": "^1.8",
"doctrine/annotations": "~1.7", "doctrine/annotations": "~1.7",
"doctrine/cache": "~1.6", "doctrine/cache": "~1.6",
"doctrine/collections": "~1.0", "doctrine/collections": "~1.0",
"doctrine/data-fixtures": "1.0.*", "doctrine/data-fixtures": "^1.1",
"doctrine/dbal": "~2.4", "doctrine/dbal": "~2.4|^3.0",
"doctrine/orm": "^2.6.3", "doctrine/orm": "^2.6.3",
"doctrine/reflection": "~1.0", "doctrine/reflection": "~1.0",
"symfony/config": "^4.2|^5.0", "symfony/config": "^4.2|^5.0",
"symfony/dependency-injection": "^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/expression-language": "^3.4|^4.0|^5.0",
"symfony/form": "^4.4|^5.0", "symfony/form": "^4.4.11|^5.0.11",
"symfony/http-kernel": "^4.3.7", "symfony/http-kernel": "^4.3.7",
"symfony/messenger": "^4.4|^5.0", "symfony/messenger": "^4.4|^5.0",
"symfony/property-access": "^3.4|^4.0|^5.0", "symfony/property-access": "^3.4|^4.0|^5.0",
@@ -3133,24 +4275,24 @@
], ],
"description": "Symfony Doctrine Bridge", "description": "Symfony Doctrine Bridge",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-24T17:16:47+00:00" "time": "2020-09-27T14:14:06+00:00"
}, },
{ {
"name": "symfony/dotenv", "name": "symfony/dotenv",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/dotenv.git", "url": "https://github.com/symfony/dotenv.git",
"reference": "9bba981ecb1f57c04520d4165b3e6a17ac49319f" "reference": "f17675595fd7527c57d11bd3d733eb5d41600128"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/dotenv/zipball/9bba981ecb1f57c04520d4165b3e6a17ac49319f", "url": "https://api.github.com/repos/symfony/dotenv/zipball/f17675595fd7527c57d11bd3d733eb5d41600128",
"reference": "9bba981ecb1f57c04520d4165b3e6a17ac49319f", "reference": "f17675595fd7527c57d11bd3d733eb5d41600128",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3" "php": ">=7.1.3"
}, },
"require-dev": { "require-dev": {
"symfony/process": "^3.4.2|^4.0|^5.0" "symfony/process": "^3.4.2|^4.0|^5.0"
@@ -3190,26 +4332,27 @@
"env", "env",
"environment" "environment"
], ],
"time": "2020-02-29T10:04:02+00:00" "time": "2020-09-02T16:08:58+00:00"
}, },
{ {
"name": "symfony/error-handler", "name": "symfony/error-handler",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/error-handler.git", "url": "https://github.com/symfony/error-handler.git",
"reference": "89aa4b9ac6f1f35171b8621b24f60477312085be" "reference": "c8be4a5c70af70fec82e762dd93e3bbcf95c035f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/89aa4b9ac6f1f35171b8621b24f60477312085be", "url": "https://api.github.com/repos/symfony/error-handler/zipball/c8be4a5c70af70fec82e762dd93e3bbcf95c035f",
"reference": "89aa4b9ac6f1f35171b8621b24f60477312085be", "reference": "c8be4a5c70af70fec82e762dd93e3bbcf95c035f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"psr/log": "~1.0", "psr/log": "~1.0",
"symfony/debug": "^4.4.5", "symfony/debug": "^4.4.5",
"symfony/polyfill-php80": "^1.15",
"symfony/var-dumper": "^4.4|^5.0" "symfony/var-dumper": "^4.4|^5.0"
}, },
"require-dev": { "require-dev": {
@@ -3246,24 +4389,24 @@
], ],
"description": "Symfony ErrorHandler Component", "description": "Symfony ErrorHandler Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-26T11:45:31+00:00" "time": "2020-10-01T16:21:20+00:00"
}, },
{ {
"name": "symfony/event-dispatcher", "name": "symfony/event-dispatcher",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/event-dispatcher.git", "url": "https://github.com/symfony/event-dispatcher.git",
"reference": "4ad8e149799d3128621a3a1f70e92b9897a8930d" "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4ad8e149799d3128621a3a1f70e92b9897a8930d", "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e17bb5e0663dc725f7cdcafc932132735b4725cd",
"reference": "4ad8e149799d3128621a3a1f70e92b9897a8930d", "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/event-dispatcher-contracts": "^1.1" "symfony/event-dispatcher-contracts": "^1.1"
}, },
"conflict": { "conflict": {
@@ -3277,6 +4420,7 @@
"psr/log": "~1.0", "psr/log": "~1.0",
"symfony/config": "^3.4|^4.0|^5.0", "symfony/config": "^3.4|^4.0|^5.0",
"symfony/dependency-injection": "^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/expression-language": "^3.4|^4.0|^5.0",
"symfony/http-foundation": "^3.4|^4.0|^5.0", "symfony/http-foundation": "^3.4|^4.0|^5.0",
"symfony/service-contracts": "^1.1|^2", "symfony/service-contracts": "^1.1|^2",
@@ -3316,24 +4460,24 @@
], ],
"description": "Symfony EventDispatcher Component", "description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-04T09:32:40+00:00" "time": "2020-09-18T14:07:46+00:00"
}, },
{ {
"name": "symfony/event-dispatcher-contracts", "name": "symfony/event-dispatcher-contracts",
"version": "v1.1.7", "version": "v1.1.9",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git", "url": "https://github.com/symfony/event-dispatcher-contracts.git",
"reference": "c43ab685673fb6c8d84220c77897b1d6cdbe1d18" "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c43ab685673fb6c8d84220c77897b1d6cdbe1d18", "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7",
"reference": "c43ab685673fb6c8d84220c77897b1d6cdbe1d18", "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3" "php": ">=7.1.3"
}, },
"suggest": { "suggest": {
"psr/event-dispatcher": "", "psr/event-dispatcher": "",
@@ -3343,6 +4487,10 @@
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.1-dev" "dev-master": "1.1-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
} }
}, },
"autoload": { "autoload": {
@@ -3374,24 +4522,24 @@
"interoperability", "interoperability",
"standards" "standards"
], ],
"time": "2019-09-17T09:54:03+00:00" "time": "2020-07-06T13:19:58+00:00"
}, },
{ {
"name": "symfony/expression-language", "name": "symfony/expression-language",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/expression-language.git", "url": "https://github.com/symfony/expression-language.git",
"reference": "70649e0abcac6ad1109f6243886bca0445e278b9" "reference": "54b118a1c91991b90e67919146db66093def1bf9"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/expression-language/zipball/70649e0abcac6ad1109f6243886bca0445e278b9", "url": "https://api.github.com/repos/symfony/expression-language/zipball/54b118a1c91991b90e67919146db66093def1bf9",
"reference": "70649e0abcac6ad1109f6243886bca0445e278b9", "reference": "54b118a1c91991b90e67919146db66093def1bf9",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/cache": "^3.4|^4.0|^5.0", "symfony/cache": "^3.4|^4.0|^5.0",
"symfony/service-contracts": "^1.1|^2" "symfony/service-contracts": "^1.1|^2"
}, },
@@ -3425,24 +4573,24 @@
], ],
"description": "Symfony ExpressionLanguage Component", "description": "Symfony ExpressionLanguage Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-24T13:10:00+00:00" "time": "2020-09-02T16:08:58+00:00"
}, },
{ {
"name": "symfony/filesystem", "name": "symfony/filesystem",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/filesystem.git", "url": "https://github.com/symfony/filesystem.git",
"reference": "266c9540b475f26122b61ef8b23dd9198f5d1cfd" "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/266c9540b475f26122b61ef8b23dd9198f5d1cfd", "url": "https://api.github.com/repos/symfony/filesystem/zipball/ebc51494739d3b081ea543ed7c462fa73a4f74db",
"reference": "266c9540b475f26122b61ef8b23dd9198f5d1cfd", "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/polyfill-ctype": "~1.8" "symfony/polyfill-ctype": "~1.8"
}, },
"type": "library", "type": "library",
@@ -3475,24 +4623,24 @@
], ],
"description": "Symfony Filesystem Component", "description": "Symfony Filesystem Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-01-21T08:20:44+00:00" "time": "2020-09-27T13:54:16+00:00"
}, },
{ {
"name": "symfony/finder", "name": "symfony/finder",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/finder.git", "url": "https://github.com/symfony/finder.git",
"reference": "ea69c129aed9fdeca781d4b77eb20b62cf5d5357" "reference": "60d08560f9aa72997c44077c40d47aa28a963230"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/ea69c129aed9fdeca781d4b77eb20b62cf5d5357", "url": "https://api.github.com/repos/symfony/finder/zipball/60d08560f9aa72997c44077c40d47aa28a963230",
"reference": "ea69c129aed9fdeca781d4b77eb20b62cf5d5357", "reference": "60d08560f9aa72997c44077c40d47aa28a963230",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3" "php": ">=7.1.3"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@@ -3524,36 +4672,36 @@
], ],
"description": "Symfony Finder Component", "description": "Symfony Finder Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-14T07:42:58+00:00" "time": "2020-10-02T07:34:48+00:00"
}, },
{ {
"name": "symfony/flex", "name": "symfony/flex",
"version": "v1.6.2", "version": "v1.9.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/flex.git", "url": "https://github.com/symfony/flex.git",
"reference": "e4f5a2653ca503782a31486198bd1dd1c9a47f83" "reference": "115e67f76ba95d70946a6e0b15d4578bf04927c3"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/flex/zipball/e4f5a2653ca503782a31486198bd1dd1c9a47f83", "url": "https://api.github.com/repos/symfony/flex/zipball/115e67f76ba95d70946a6e0b15d4578bf04927c3",
"reference": "e4f5a2653ca503782a31486198bd1dd1c9a47f83", "reference": "115e67f76ba95d70946a6e0b15d4578bf04927c3",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"composer-plugin-api": "^1.0", "composer-plugin-api": "^1.0|^2.0",
"php": "^7.0" "php": ">=7.1"
}, },
"require-dev": { "require-dev": {
"composer/composer": "^1.0.2", "composer/composer": "^1.0.2|^2.0",
"symfony/dotenv": "^3.4|^4.0|^5.0", "symfony/dotenv": "^4.4|^5.0",
"symfony/phpunit-bridge": "^3.4.19|^4.1.8|^5.0", "symfony/phpunit-bridge": "^4.4|^5.0",
"symfony/process": "^2.7|^3.0|^4.0|^5.0" "symfony/process": "^3.4|^4.4|^5.0"
}, },
"type": "composer-plugin", "type": "composer-plugin",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.5-dev" "dev-master": "1.8-dev"
}, },
"class": "Symfony\\Flex\\Flex" "class": "Symfony\\Flex\\Flex"
}, },
@@ -3573,30 +4721,30 @@
} }
], ],
"description": "Composer plugin for Symfony", "description": "Composer plugin for Symfony",
"time": "2020-01-30T12:06:45+00:00" "time": "2020-09-14T14:58:36+00:00"
}, },
{ {
"name": "symfony/form", "name": "symfony/form",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/form.git", "url": "https://github.com/symfony/form.git",
"reference": "677927dad3b9f93117db62fc1df4de82027dc282" "reference": "54d9ec68b65440a4a5937bd6b76ac92214dcd210"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/form/zipball/677927dad3b9f93117db62fc1df4de82027dc282", "url": "https://api.github.com/repos/symfony/form/zipball/54d9ec68b65440a4a5937bd6b76ac92214dcd210",
"reference": "677927dad3b9f93117db62fc1df4de82027dc282", "reference": "54d9ec68b65440a4a5937bd6b76ac92214dcd210",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/event-dispatcher": "^4.3", "symfony/event-dispatcher": "^4.3",
"symfony/intl": "^4.4|^5.0", "symfony/intl": "^4.4|^5.0",
"symfony/options-resolver": "~4.3|^5.0", "symfony/options-resolver": "~4.3|^5.0",
"symfony/polyfill-ctype": "~1.8", "symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-mbstring": "~1.0",
"symfony/property-access": "^3.4|^4.0|^5.0", "symfony/property-access": "^3.4.40|^4.4.8|^5.0.8",
"symfony/service-contracts": "^1.1|^2" "symfony/service-contracts": "^1.1|^2"
}, },
"conflict": { "conflict": {
@@ -3615,11 +4763,12 @@
"symfony/config": "^3.4|^4.0|^5.0", "symfony/config": "^3.4|^4.0|^5.0",
"symfony/console": "^4.3|^5.0", "symfony/console": "^4.3|^5.0",
"symfony/dependency-injection": "^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-foundation": "^3.4|^4.0|^5.0", "symfony/http-foundation": "^3.4|^4.0|^5.0",
"symfony/http-kernel": "^4.4", "symfony/http-kernel": "^4.4",
"symfony/security-csrf": "^3.4|^4.0|^5.0", "symfony/security-csrf": "^3.4|^4.0|^5.0",
"symfony/translation": "^4.2|^5.0", "symfony/translation": "^4.2|^5.0",
"symfony/validator": "^3.4.31|^4.3.4|^5.0", "symfony/validator": "^3.4.44|^4.3.4|^5.0",
"symfony/var-dumper": "^4.3|^5.0" "symfony/var-dumper": "^4.3|^5.0"
}, },
"suggest": { "suggest": {
@@ -3657,25 +4806,25 @@
], ],
"description": "Symfony Form Component", "description": "Symfony Form Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-29T10:05:28+00:00" "time": "2020-10-02T12:43:11+00:00"
}, },
{ {
"name": "symfony/framework-bundle", "name": "symfony/framework-bundle",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/framework-bundle.git", "url": "https://github.com/symfony/framework-bundle.git",
"reference": "df5528926e6e1954975f3d73a91f029ba3d9c76b" "reference": "01c517f48814a1f599ce721814435f2dc548ce4c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/framework-bundle/zipball/df5528926e6e1954975f3d73a91f029ba3d9c76b", "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/01c517f48814a1f599ce721814435f2dc548ce4c",
"reference": "df5528926e6e1954975f3d73a91f029ba3d9c76b", "reference": "01c517f48814a1f599ce721814435f2dc548ce4c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-xml": "*", "ext-xml": "*",
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/cache": "^4.4|^5.0", "symfony/cache": "^4.4|^5.0",
"symfony/config": "^4.3.4|^5.0", "symfony/config": "^4.3.4|^5.0",
"symfony/dependency-injection": "^4.4.1|^5.0.1", "symfony/dependency-injection": "^4.4.1|^5.0.1",
@@ -3788,26 +4937,26 @@
], ],
"description": "Symfony FrameworkBundle", "description": "Symfony FrameworkBundle",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-28T13:15:16+00:00" "time": "2020-09-29T09:51:46+00:00"
}, },
{ {
"name": "symfony/http-client", "name": "symfony/http-client",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/http-client.git", "url": "https://github.com/symfony/http-client.git",
"reference": "65ccb6ca4a5a7bf7c244b8a28195fa188521b3d2" "reference": "b1cb966898aaf8df37280fde537a27b6724b3bc4"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/65ccb6ca4a5a7bf7c244b8a28195fa188521b3d2", "url": "https://api.github.com/repos/symfony/http-client/zipball/b1cb966898aaf8df37280fde537a27b6724b3bc4",
"reference": "65ccb6ca4a5a7bf7c244b8a28195fa188521b3d2", "reference": "b1cb966898aaf8df37280fde537a27b6724b3bc4",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"psr/log": "^1.0", "psr/log": "^1.0",
"symfony/http-client-contracts": "^1.1.8|^2", "symfony/http-client-contracts": "^1.1.10|^2",
"symfony/polyfill-php73": "^1.11", "symfony/polyfill-php73": "^1.11",
"symfony/service-contracts": "^1.0|^2" "symfony/service-contracts": "^1.0|^2"
}, },
@@ -3823,7 +4972,7 @@
"php-http/httplug": "^1.0|^2.0", "php-http/httplug": "^1.0|^2.0",
"psr/http-client": "^1.0", "psr/http-client": "^1.0",
"symfony/dependency-injection": "^4.3|^5.0", "symfony/dependency-injection": "^4.3|^5.0",
"symfony/http-kernel": "^4.4", "symfony/http-kernel": "^4.4.13",
"symfony/process": "^4.2|^5.0" "symfony/process": "^4.2|^5.0"
}, },
"type": "library", "type": "library",
@@ -3856,24 +5005,24 @@
], ],
"description": "Symfony HttpClient component", "description": "Symfony HttpClient component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-25T13:55:11+00:00" "time": "2020-10-02T13:41:48+00:00"
}, },
{ {
"name": "symfony/http-client-contracts", "name": "symfony/http-client-contracts",
"version": "v2.0.1", "version": "v2.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/http-client-contracts.git", "url": "https://github.com/symfony/http-client-contracts.git",
"reference": "378868b61b85c5cac6822d4f84e26999c9f2e881" "reference": "3a5d0fe7908daaa23e3dbf4cee3ba4bfbb19fdd3"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/378868b61b85c5cac6822d4f84e26999c9f2e881", "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/3a5d0fe7908daaa23e3dbf4cee3ba4bfbb19fdd3",
"reference": "378868b61b85c5cac6822d4f84e26999c9f2e881", "reference": "3a5d0fe7908daaa23e3dbf4cee3ba4bfbb19fdd3",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.2.5" "php": ">=7.2.5"
}, },
"suggest": { "suggest": {
"symfony/http-client-implementation": "" "symfony/http-client-implementation": ""
@@ -3881,7 +5030,11 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "2.0-dev" "dev-master": "2.2-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
} }
}, },
"autoload": { "autoload": {
@@ -3913,24 +5066,24 @@
"interoperability", "interoperability",
"standards" "standards"
], ],
"time": "2019-11-26T23:25:11+00:00" "time": "2020-09-07T11:33:47+00:00"
}, },
{ {
"name": "symfony/http-foundation", "name": "symfony/http-foundation",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/http-foundation.git", "url": "https://github.com/symfony/http-foundation.git",
"reference": "7e41b4fcad4619535f45f8bfa7744c4f384e1648" "reference": "10683b407c3b6087c64619ebc97a87e36ea62c92"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/7e41b4fcad4619535f45f8bfa7744c4f384e1648", "url": "https://api.github.com/repos/symfony/http-foundation/zipball/10683b407c3b6087c64619ebc97a87e36ea62c92",
"reference": "7e41b4fcad4619535f45f8bfa7744c4f384e1648", "reference": "10683b407c3b6087c64619ebc97a87e36ea62c92",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/mime": "^4.3|^5.0", "symfony/mime": "^4.3|^5.0",
"symfony/polyfill-mbstring": "~1.1" "symfony/polyfill-mbstring": "~1.1"
}, },
@@ -3968,30 +5121,32 @@
], ],
"description": "Symfony HttpFoundation Component", "description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-13T19:40:01+00:00" "time": "2020-09-27T14:14:06+00:00"
}, },
{ {
"name": "symfony/http-kernel", "name": "symfony/http-kernel",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/http-kernel.git", "url": "https://github.com/symfony/http-kernel.git",
"reference": "8c8734486dada83a6041ab744709bdc1651a8462" "reference": "6544745997b06c7dcecf0d4a70f09e5de1db7ca8"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/8c8734486dada83a6041ab744709bdc1651a8462", "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6544745997b06c7dcecf0d4a70f09e5de1db7ca8",
"reference": "8c8734486dada83a6041ab744709bdc1651a8462", "reference": "6544745997b06c7dcecf0d4a70f09e5de1db7ca8",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"psr/log": "~1.0", "psr/log": "~1.0",
"symfony/error-handler": "^4.4", "symfony/error-handler": "^4.4",
"symfony/event-dispatcher": "^4.4", "symfony/event-dispatcher": "^4.4",
"symfony/http-client-contracts": "^1.1|^2",
"symfony/http-foundation": "^4.4|^5.0", "symfony/http-foundation": "^4.4|^5.0",
"symfony/polyfill-ctype": "^1.8", "symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-php73": "^1.9" "symfony/polyfill-php73": "^1.9",
"symfony/polyfill-php80": "^1.15"
}, },
"conflict": { "conflict": {
"symfony/browser-kit": "<4.3", "symfony/browser-kit": "<4.3",
@@ -4058,24 +5213,24 @@
], ],
"description": "Symfony HttpKernel Component", "description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-29T10:31:38+00:00" "time": "2020-10-04T07:48:13+00:00"
}, },
{ {
"name": "symfony/inflector", "name": "symfony/inflector",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/inflector.git", "url": "https://github.com/symfony/inflector.git",
"reference": "f419ab2853cc00471ffd7fc18e544b5f5a90adb1" "reference": "3330be44724db42f0aa493002ae63f5d29f8d5f7"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/inflector/zipball/f419ab2853cc00471ffd7fc18e544b5f5a90adb1", "url": "https://api.github.com/repos/symfony/inflector/zipball/3330be44724db42f0aa493002ae63f5d29f8d5f7",
"reference": "f419ab2853cc00471ffd7fc18e544b5f5a90adb1", "reference": "3330be44724db42f0aa493002ae63f5d29f8d5f7",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/polyfill-ctype": "~1.8" "symfony/polyfill-ctype": "~1.8"
}, },
"type": "library", "type": "library",
@@ -4116,24 +5271,24 @@
"symfony", "symfony",
"words" "words"
], ],
"time": "2020-01-04T13:00:46+00:00" "time": "2020-05-20T08:37:50+00:00"
}, },
{ {
"name": "symfony/intl", "name": "symfony/intl",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/intl.git", "url": "https://github.com/symfony/intl.git",
"reference": "f675f139e20b9e0ff05bac662c081fe9ef7b2f88" "reference": "0da1f7f08072ddb9185b02ce30ce098fa61f4042"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/intl/zipball/f675f139e20b9e0ff05bac662c081fe9ef7b2f88", "url": "https://api.github.com/repos/symfony/intl/zipball/0da1f7f08072ddb9185b02ce30ce098fa61f4042",
"reference": "f675f139e20b9e0ff05bac662c081fe9ef7b2f88", "reference": "0da1f7f08072ddb9185b02ce30ce098fa61f4042",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/polyfill-intl-icu": "~1.0" "symfony/polyfill-intl-icu": "~1.0"
}, },
"require-dev": { "require-dev": {
@@ -4191,32 +5346,31 @@
"l10n", "l10n",
"localization" "localization"
], ],
"time": "2020-02-04T09:32:40+00:00" "time": "2020-09-27T03:36:23+00:00"
}, },
{ {
"name": "symfony/lock", "name": "symfony/lock",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/lock.git", "url": "https://github.com/symfony/lock.git",
"reference": "de412046486269dd3984db757e492ee5f81e0bf2" "reference": "9d7e8148dd399f392b9b4920832b632c04ffdf64"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/lock/zipball/de412046486269dd3984db757e492ee5f81e0bf2", "url": "https://api.github.com/repos/symfony/lock/zipball/9d7e8148dd399f392b9b4920832b632c04ffdf64",
"reference": "de412046486269dd3984db757e492ee5f81e0bf2", "reference": "9d7e8148dd399f392b9b4920832b632c04ffdf64",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"psr/log": "~1.0" "psr/log": "~1.0"
}, },
"conflict": { "conflict": {
"doctrine/dbal": "<2.5" "doctrine/dbal": "<2.5"
}, },
"require-dev": { "require-dev": {
"doctrine/dbal": "~2.5", "doctrine/dbal": "^2.5|^3.0",
"mongodb/mongodb": "~1.1",
"predis/predis": "~1.0" "predis/predis": "~1.0"
}, },
"type": "library", "type": "library",
@@ -4257,25 +5411,25 @@
"redlock", "redlock",
"semaphore" "semaphore"
], ],
"time": "2020-02-04T09:32:40+00:00" "time": "2020-10-03T06:31:32+00:00"
}, },
{ {
"name": "symfony/mailer", "name": "symfony/mailer",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/mailer.git", "url": "https://github.com/symfony/mailer.git",
"reference": "f79a2cc091c14c2d78cade2f8b772f568fb63c43" "reference": "c1018952b49058802c2aa1ea831935e996b7f5d3"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/mailer/zipball/f79a2cc091c14c2d78cade2f8b772f568fb63c43", "url": "https://api.github.com/repos/symfony/mailer/zipball/c1018952b49058802c2aa1ea831935e996b7f5d3",
"reference": "f79a2cc091c14c2d78cade2f8b772f568fb63c43", "reference": "c1018952b49058802c2aa1ea831935e996b7f5d3",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"egulias/email-validator": "^2.1.10", "egulias/email-validator": "^2.1.10",
"php": "^7.1.3", "php": ">=7.1.3",
"psr/log": "~1.0", "psr/log": "~1.0",
"symfony/event-dispatcher": "^4.3", "symfony/event-dispatcher": "^4.3",
"symfony/mime": "^4.4|^5.0", "symfony/mime": "^4.4|^5.0",
@@ -4325,26 +5479,26 @@
], ],
"description": "Symfony Mailer Component", "description": "Symfony Mailer Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-07T16:56:37+00:00" "time": "2020-09-06T17:12:23+00:00"
}, },
{ {
"name": "symfony/maker-bundle", "name": "symfony/maker-bundle",
"version": "v1.14.6", "version": "v1.21.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/maker-bundle.git", "url": "https://github.com/symfony/maker-bundle.git",
"reference": "bc4df88792fbaaeb275167101dc714218475db5f" "reference": "da629093c7bf9abd9a6a0f232a43bbb1b88de68d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/maker-bundle/zipball/bc4df88792fbaaeb275167101dc714218475db5f", "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/da629093c7bf9abd9a6a0f232a43bbb1b88de68d",
"reference": "bc4df88792fbaaeb275167101dc714218475db5f", "reference": "da629093c7bf9abd9a6a0f232a43bbb1b88de68d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"doctrine/inflector": "^1.2", "doctrine/inflector": "^1.2",
"nikic/php-parser": "^4.0", "nikic/php-parser": "^4.0",
"php": "^7.0.8", "php": "^7.1.3",
"symfony/config": "^3.4|^4.0|^5.0", "symfony/config": "^3.4|^4.0|^5.0",
"symfony/console": "^3.4|^4.0|^5.0", "symfony/console": "^3.4|^4.0|^5.0",
"symfony/dependency-injection": "^3.4|^4.0|^5.0", "symfony/dependency-injection": "^3.4|^4.0|^5.0",
@@ -4354,6 +5508,7 @@
"symfony/http-kernel": "^3.4|^4.0|^5.0" "symfony/http-kernel": "^3.4|^4.0|^5.0"
}, },
"require-dev": { "require-dev": {
"composer/semver": "^3.0@dev",
"doctrine/doctrine-bundle": "^1.8|^2.0", "doctrine/doctrine-bundle": "^1.8|^2.0",
"doctrine/orm": "^2.3", "doctrine/orm": "^2.3",
"friendsofphp/php-cs-fixer": "^2.8", "friendsofphp/php-cs-fixer": "^2.8",
@@ -4393,24 +5548,24 @@
"scaffold", "scaffold",
"scaffolding" "scaffolding"
], ],
"time": "2020-03-04T13:57:29+00:00" "time": "2020-08-29T18:05:46+00:00"
}, },
{ {
"name": "symfony/mime", "name": "symfony/mime",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/mime.git", "url": "https://github.com/symfony/mime.git",
"reference": "304db017bafd71c122cd5223a9ac2d03dc24da32" "reference": "42df2507eb8e6cd9795f51c99dd52bab543a918f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/mime/zipball/304db017bafd71c122cd5223a9ac2d03dc24da32", "url": "https://api.github.com/repos/symfony/mime/zipball/42df2507eb8e6cd9795f51c99dd52bab543a918f",
"reference": "304db017bafd71c122cd5223a9ac2d03dc24da32", "reference": "42df2507eb8e6cd9795f51c99dd52bab543a918f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-intl-idn": "^1.10",
"symfony/polyfill-mbstring": "^1.0" "symfony/polyfill-mbstring": "^1.0"
}, },
@@ -4455,25 +5610,25 @@
"mime", "mime",
"mime-type" "mime-type"
], ],
"time": "2020-02-04T09:32:40+00:00" "time": "2020-09-02T16:08:58+00:00"
}, },
{ {
"name": "symfony/monolog-bridge", "name": "symfony/monolog-bridge",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/monolog-bridge.git", "url": "https://github.com/symfony/monolog-bridge.git",
"reference": "b14ee2f0488b3ad879fd000bc3dcce1cd2f6cfff" "reference": "267085e15c00ea5e8059dbf1cd7ba8f5f7541221"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/b14ee2f0488b3ad879fd000bc3dcce1cd2f6cfff", "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/267085e15c00ea5e8059dbf1cd7ba8f5f7541221",
"reference": "b14ee2f0488b3ad879fd000bc3dcce1cd2f6cfff", "reference": "267085e15c00ea5e8059dbf1cd7ba8f5f7541221",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"monolog/monolog": "^1.25.1", "monolog/monolog": "^1.25.1",
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/http-kernel": "^4.3", "symfony/http-kernel": "^4.3",
"symfony/service-contracts": "^1.1|^2" "symfony/service-contracts": "^1.1|^2"
}, },
@@ -4522,20 +5677,20 @@
], ],
"description": "Symfony Monolog Bridge", "description": "Symfony Monolog Bridge",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-04T09:32:40+00:00" "time": "2020-10-02T07:34:48+00:00"
}, },
{ {
"name": "symfony/monolog-bundle", "name": "symfony/monolog-bundle",
"version": "v3.5.0", "version": "v3.6.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/monolog-bundle.git", "url": "https://github.com/symfony/monolog-bundle.git",
"reference": "dd80460fcfe1fa2050a7103ad818e9d0686ce6fd" "reference": "e495f5c7e4e672ffef4357d4a4d85f010802f940"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/dd80460fcfe1fa2050a7103ad818e9d0686ce6fd", "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/e495f5c7e4e672ffef4357d4a4d85f010802f940",
"reference": "dd80460fcfe1fa2050a7103ad818e9d0686ce6fd", "reference": "e495f5c7e4e672ffef4357d4a4d85f010802f940",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -4548,7 +5703,7 @@
}, },
"require-dev": { "require-dev": {
"symfony/console": "~3.4 || ~4.0 || ^5.0", "symfony/console": "~3.4 || ~4.0 || ^5.0",
"symfony/phpunit-bridge": "^3.4.19 || ^4.0 || ^5.0", "symfony/phpunit-bridge": "^4.4 || ^5.0",
"symfony/yaml": "~3.4 || ~4.0 || ^5.0" "symfony/yaml": "~3.4 || ~4.0 || ^5.0"
}, },
"type": "symfony-bundle", "type": "symfony-bundle",
@@ -4585,24 +5740,24 @@
"log", "log",
"logging" "logging"
], ],
"time": "2019-11-13T13:11:14+00:00" "time": "2020-10-06T15:12:11+00:00"
}, },
{ {
"name": "symfony/options-resolver", "name": "symfony/options-resolver",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/options-resolver.git", "url": "https://github.com/symfony/options-resolver.git",
"reference": "9a02d6662660fe7bfadad63b5f0b0718d4c8b6b0" "reference": "02b120a79ff06b779819f1594a300226bfc75105"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/9a02d6662660fe7bfadad63b5f0b0718d4c8b6b0", "url": "https://api.github.com/repos/symfony/options-resolver/zipball/02b120a79ff06b779819f1594a300226bfc75105",
"reference": "9a02d6662660fe7bfadad63b5f0b0718d4c8b6b0", "reference": "02b120a79ff06b779819f1594a300226bfc75105",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3" "php": ">=7.1.3"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@@ -4639,26 +5794,28 @@
"configuration", "configuration",
"options" "options"
], ],
"time": "2020-01-04T13:00:46+00:00" "time": "2020-09-24T16:40:22+00:00"
}, },
{ {
"name": "symfony/orm-pack", "name": "symfony/orm-pack",
"version": "v1.0.8", "version": "v1.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/orm-pack.git", "url": "https://github.com/symfony/orm-pack.git",
"reference": "c9bcc08102061f406dc908192c0f33524a675666" "reference": "21ac491414b5815e5ebb7425908c1d1568d2e775"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/orm-pack/zipball/c9bcc08102061f406dc908192c0f33524a675666", "url": "https://api.github.com/repos/symfony/orm-pack/zipball/21ac491414b5815e5ebb7425908c1d1568d2e775",
"reference": "c9bcc08102061f406dc908192c0f33524a675666", "reference": "21ac491414b5815e5ebb7425908c1d1568d2e775",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"doctrine/doctrine-bundle": "*", "composer/package-versions-deprecated": "*",
"doctrine/doctrine-migrations-bundle": "*", "doctrine/common": "^2",
"doctrine/orm": "*" "doctrine/doctrine-bundle": "^2",
"doctrine/doctrine-migrations-bundle": "^2",
"doctrine/orm": "^2"
}, },
"type": "symfony-pack", "type": "symfony-pack",
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
@@ -4666,20 +5823,20 @@
"MIT" "MIT"
], ],
"description": "A pack for the Doctrine ORM", "description": "A pack for the Doctrine ORM",
"time": "2020-02-10T18:03:48+00:00" "time": "2020-08-31T10:20:18+00:00"
}, },
{ {
"name": "symfony/polyfill-intl-icu", "name": "symfony/polyfill-intl-icu",
"version": "v1.14.0", "version": "v1.18.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-intl-icu.git", "url": "https://github.com/symfony/polyfill-intl-icu.git",
"reference": "727b3bb5bfa7ca9eeb86416784cf1c08a6289b86" "reference": "4e45a6e39041a9cc78835b11abc47874ae302a55"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/727b3bb5bfa7ca9eeb86416784cf1c08a6289b86", "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/4e45a6e39041a9cc78835b11abc47874ae302a55",
"reference": "727b3bb5bfa7ca9eeb86416784cf1c08a6289b86", "reference": "4e45a6e39041a9cc78835b11abc47874ae302a55",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -4692,7 +5849,11 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.14-dev" "dev-master": "1.18-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
} }
}, },
"autoload": { "autoload": {
@@ -4724,25 +5885,26 @@
"portable", "portable",
"shim" "shim"
], ],
"time": "2020-01-13T11:15:53+00:00" "time": "2020-07-14T12:35:20+00:00"
}, },
{ {
"name": "symfony/polyfill-intl-idn", "name": "symfony/polyfill-intl-idn",
"version": "v1.14.0", "version": "v1.18.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git", "url": "https://github.com/symfony/polyfill-intl-idn.git",
"reference": "6842f1a39cf7d580655688069a03dd7cd83d244a" "reference": "5dcab1bc7146cf8c1beaa4502a3d9be344334251"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/6842f1a39cf7d580655688069a03dd7cd83d244a", "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/5dcab1bc7146cf8c1beaa4502a3d9be344334251",
"reference": "6842f1a39cf7d580655688069a03dd7cd83d244a", "reference": "5dcab1bc7146cf8c1beaa4502a3d9be344334251",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=5.3.3", "php": ">=5.3.3",
"symfony/polyfill-mbstring": "^1.3", "symfony/polyfill-intl-normalizer": "^1.10",
"symfony/polyfill-php70": "^1.10",
"symfony/polyfill-php72": "^1.10" "symfony/polyfill-php72": "^1.10"
}, },
"suggest": { "suggest": {
@@ -4751,7 +5913,11 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.14-dev" "dev-master": "1.18-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
} }
}, },
"autoload": { "autoload": {
@@ -4771,6 +5937,10 @@
"name": "Laurent Bassin", "name": "Laurent Bassin",
"email": "laurent@bassin.info" "email": "laurent@bassin.info"
}, },
{
"name": "Trevor Rowbotham",
"email": "trevor.rowbotham@pm.me"
},
{ {
"name": "Symfony Community", "name": "Symfony Community",
"homepage": "https://symfony.com/contributors" "homepage": "https://symfony.com/contributors"
@@ -4786,20 +5956,87 @@
"portable", "portable",
"shim" "shim"
], ],
"time": "2020-01-17T12:01:36+00:00" "time": "2020-08-04T06:02:08+00:00"
}, },
{ {
"name": "symfony/polyfill-mbstring", "name": "symfony/polyfill-intl-normalizer",
"version": "v1.14.0", "version": "v1.18.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
"reference": "34094cfa9abe1f0f14f48f490772db7a775559f2" "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/34094cfa9abe1f0f14f48f490772db7a775559f2", "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e",
"reference": "34094cfa9abe1f0f14f48f490772db7a775559f2", "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": "" "shasum": ""
}, },
"require": { "require": {
@@ -4811,7 +6048,11 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.14-dev" "dev-master": "1.18-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
} }
}, },
"autoload": { "autoload": {
@@ -4845,20 +6086,20 @@
"portable", "portable",
"shim" "shim"
], ],
"time": "2020-01-13T11:15:53+00:00" "time": "2020-07-14T12:35:20+00:00"
}, },
{ {
"name": "symfony/polyfill-php72", "name": "symfony/polyfill-php72",
"version": "v1.14.0", "version": "v1.18.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-php72.git", "url": "https://github.com/symfony/polyfill-php72.git",
"reference": "46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf" "reference": "639447d008615574653fb3bc60d1986d7172eaae"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf", "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/639447d008615574653fb3bc60d1986d7172eaae",
"reference": "46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf", "reference": "639447d008615574653fb3bc60d1986d7172eaae",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -4867,7 +6108,11 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.14-dev" "dev-master": "1.18-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
} }
}, },
"autoload": { "autoload": {
@@ -4900,20 +6145,20 @@
"portable", "portable",
"shim" "shim"
], ],
"time": "2020-01-13T11:15:53+00:00" "time": "2020-07-14T12:35:20+00:00"
}, },
{ {
"name": "symfony/polyfill-php73", "name": "symfony/polyfill-php73",
"version": "v1.14.0", "version": "v1.18.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-php73.git", "url": "https://github.com/symfony/polyfill-php73.git",
"reference": "5e66a0fa1070bf46bec4bea7962d285108edd675" "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/5e66a0fa1070bf46bec4bea7962d285108edd675", "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
"reference": "5e66a0fa1070bf46bec4bea7962d285108edd675", "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -4922,7 +6167,11 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.14-dev" "dev-master": "1.18-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
} }
}, },
"autoload": { "autoload": {
@@ -4958,24 +6207,153 @@
"portable", "portable",
"shim" "shim"
], ],
"time": "2020-01-13T11:15:53+00:00" "time": "2020-07-14T12:35:20+00:00"
}, },
{ {
"name": "symfony/process", "name": "symfony/polyfill-php80",
"version": "v4.4.5", "version": "v1.18.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/process.git", "url": "https://github.com/symfony/polyfill-php80.git",
"reference": "bf9166bac906c9e69fb7a11d94875e7ced97bcd7" "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/bf9166bac906c9e69fb7a11d94875e7ced97bcd7", "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981",
"reference": "bf9166bac906c9e69fb7a11d94875e7ced97bcd7", "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3" "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", "type": "library",
"extra": { "extra": {
@@ -5007,24 +6385,23 @@
], ],
"description": "Symfony Process Component", "description": "Symfony Process Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-07T20:06:44+00:00" "time": "2020-09-02T16:08:58+00:00"
}, },
{ {
"name": "symfony/profiler-pack", "name": "symfony/profiler-pack",
"version": "v1.0.4", "version": "v1.0.5",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/profiler-pack.git", "url": "https://github.com/symfony/profiler-pack.git",
"reference": "99c4370632c2a59bb0444852f92140074ef02209" "reference": "29ec66471082b4eb068db11eb4f0a48c277653f7"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/profiler-pack/zipball/99c4370632c2a59bb0444852f92140074ef02209", "url": "https://api.github.com/repos/symfony/profiler-pack/zipball/29ec66471082b4eb068db11eb4f0a48c277653f7",
"reference": "99c4370632c2a59bb0444852f92140074ef02209", "reference": "29ec66471082b4eb068db11eb4f0a48c277653f7",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.0",
"symfony/stopwatch": "*", "symfony/stopwatch": "*",
"symfony/twig-bundle": "*", "symfony/twig-bundle": "*",
"symfony/web-profiler-bundle": "*" "symfony/web-profiler-bundle": "*"
@@ -5035,24 +6412,24 @@
"MIT" "MIT"
], ],
"description": "A pack for the Symfony web profiler", "description": "A pack for the Symfony web profiler",
"time": "2018-12-10T12:11:44+00:00" "time": "2020-08-12T06:50:46+00:00"
}, },
{ {
"name": "symfony/property-access", "name": "symfony/property-access",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/property-access.git", "url": "https://github.com/symfony/property-access.git",
"reference": "090b4bc92ded1ec512f7e2ed1691210769dffdb3" "reference": "ecc35239f0f665fd7a8e3a2ecaad7e4ee2668ab6"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/property-access/zipball/090b4bc92ded1ec512f7e2ed1691210769dffdb3", "url": "https://api.github.com/repos/symfony/property-access/zipball/ecc35239f0f665fd7a8e3a2ecaad7e4ee2668ab6",
"reference": "090b4bc92ded1ec512f7e2ed1691210769dffdb3", "reference": "ecc35239f0f665fd7a8e3a2ecaad7e4ee2668ab6",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/inflector": "^3.4|^4.0|^5.0" "symfony/inflector": "^3.4|^4.0|^5.0"
}, },
"require-dev": { "require-dev": {
@@ -5102,24 +6479,24 @@
"property path", "property path",
"reflection" "reflection"
], ],
"time": "2020-01-04T13:00:46+00:00" "time": "2020-09-02T16:08:58+00:00"
}, },
{ {
"name": "symfony/property-info", "name": "symfony/property-info",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/property-info.git", "url": "https://github.com/symfony/property-info.git",
"reference": "e6355ba81c738be31c3c3b3cd7929963f98da576" "reference": "387c5823e37f14271a499d1b9844c2009cb79d44"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/property-info/zipball/e6355ba81c738be31c3c3b3cd7929963f98da576", "url": "https://api.github.com/repos/symfony/property-info/zipball/387c5823e37f14271a499d1b9844c2009cb79d44",
"reference": "e6355ba81c738be31c3c3b3cd7929963f98da576", "reference": "387c5823e37f14271a499d1b9844c2009cb79d44",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/inflector": "^3.4|^4.0|^5.0" "symfony/inflector": "^3.4|^4.0|^5.0"
}, },
"conflict": { "conflict": {
@@ -5129,7 +6506,7 @@
}, },
"require-dev": { "require-dev": {
"doctrine/annotations": "~1.7", "doctrine/annotations": "~1.7",
"phpdocumentor/reflection-docblock": "^3.0|^4.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
"symfony/cache": "^3.4|^4.0|^5.0", "symfony/cache": "^3.4|^4.0|^5.0",
"symfony/dependency-injection": "^3.4|^4.0|^5.0", "symfony/dependency-injection": "^3.4|^4.0|^5.0",
"symfony/serializer": "^3.4|^4.0|^5.0" "symfony/serializer": "^3.4|^4.0|^5.0"
@@ -5178,24 +6555,24 @@
"type", "type",
"validator" "validator"
], ],
"time": "2020-01-04T13:00:46+00:00" "time": "2020-09-03T00:26:19+00:00"
}, },
{ {
"name": "symfony/routing", "name": "symfony/routing",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/routing.git", "url": "https://github.com/symfony/routing.git",
"reference": "4124d621d0e445732520037f888a0456951bde8c" "reference": "006b2d06672b8650998f328fc603eb6f3feb979f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/4124d621d0e445732520037f888a0456951bde8c", "url": "https://api.github.com/repos/symfony/routing/zipball/006b2d06672b8650998f328fc603eb6f3feb979f",
"reference": "4124d621d0e445732520037f888a0456951bde8c", "reference": "006b2d06672b8650998f328fc603eb6f3feb979f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3" "php": ">=7.1.3"
}, },
"conflict": { "conflict": {
"symfony/config": "<4.2", "symfony/config": "<4.2",
@@ -5254,25 +6631,25 @@
"uri", "uri",
"url" "url"
], ],
"time": "2020-02-25T12:41:09+00:00" "time": "2020-10-01T16:25:17+00:00"
}, },
{ {
"name": "symfony/security-bundle", "name": "symfony/security-bundle",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/security-bundle.git", "url": "https://github.com/symfony/security-bundle.git",
"reference": "21c4270b37f76e6c3c22f92597f397593ed1c9db" "reference": "274b0eb10dfc9067175cb4d1bcc68f8b37ebee14"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/security-bundle/zipball/21c4270b37f76e6c3c22f92597f397593ed1c9db", "url": "https://api.github.com/repos/symfony/security-bundle/zipball/274b0eb10dfc9067175cb4d1bcc68f8b37ebee14",
"reference": "21c4270b37f76e6c3c22f92597f397593ed1c9db", "reference": "274b0eb10dfc9067175cb4d1bcc68f8b37ebee14",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-xml": "*", "ext-xml": "*",
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/config": "^4.2|^5.0", "symfony/config": "^4.2|^5.0",
"symfony/dependency-injection": "^4.4|^5.0", "symfony/dependency-injection": "^4.4|^5.0",
"symfony/http-kernel": "^4.4", "symfony/http-kernel": "^4.4",
@@ -5337,24 +6714,24 @@
], ],
"description": "Symfony SecurityBundle", "description": "Symfony SecurityBundle",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-26T10:27:30+00:00" "time": "2020-09-02T16:08:58+00:00"
}, },
{ {
"name": "symfony/security-core", "name": "symfony/security-core",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/security-core.git", "url": "https://github.com/symfony/security-core.git",
"reference": "6251c8e432640106e6f2f045ac3b365f1af36d44" "reference": "264f391b7b172e36884790b4689152303d61e424"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/security-core/zipball/6251c8e432640106e6f2f045ac3b365f1af36d44", "url": "https://api.github.com/repos/symfony/security-core/zipball/264f391b7b172e36884790b4689152303d61e424",
"reference": "6251c8e432640106e6f2f045ac3b365f1af36d44", "reference": "264f391b7b172e36884790b4689152303d61e424",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/event-dispatcher-contracts": "^1.1|^2", "symfony/event-dispatcher-contracts": "^1.1|^2",
"symfony/service-contracts": "^1.1.6|^2" "symfony/service-contracts": "^1.1.6|^2"
}, },
@@ -5410,24 +6787,24 @@
], ],
"description": "Symfony Security Component - Core Library", "description": "Symfony Security Component - Core Library",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-24T13:10:00+00:00" "time": "2020-10-04T07:09:09+00:00"
}, },
{ {
"name": "symfony/security-csrf", "name": "symfony/security-csrf",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/security-csrf.git", "url": "https://github.com/symfony/security-csrf.git",
"reference": "da4664d94164e2b50ce75f2453724c6c33222505" "reference": "59bc56de929b1e1d2cd41c22874f8f57863f0aff"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/security-csrf/zipball/da4664d94164e2b50ce75f2453724c6c33222505", "url": "https://api.github.com/repos/symfony/security-csrf/zipball/59bc56de929b1e1d2cd41c22874f8f57863f0aff",
"reference": "da4664d94164e2b50ce75f2453724c6c33222505", "reference": "59bc56de929b1e1d2cd41c22874f8f57863f0aff",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/security-core": "^3.4|^4.0|^5.0" "symfony/security-core": "^3.4|^4.0|^5.0"
}, },
"conflict": { "conflict": {
@@ -5469,24 +6846,24 @@
], ],
"description": "Symfony Security Component - CSRF Library", "description": "Symfony Security Component - CSRF Library",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-01-04T13:00:46+00:00" "time": "2020-09-02T16:08:58+00:00"
}, },
{ {
"name": "symfony/security-guard", "name": "symfony/security-guard",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/security-guard.git", "url": "https://github.com/symfony/security-guard.git",
"reference": "7dcc99e3fa89387a1914496118b4aa0927f282e1" "reference": "95b7f702c4f07c44504a81c69ef07036e68b96b9"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/security-guard/zipball/7dcc99e3fa89387a1914496118b4aa0927f282e1", "url": "https://api.github.com/repos/symfony/security-guard/zipball/95b7f702c4f07c44504a81c69ef07036e68b96b9",
"reference": "7dcc99e3fa89387a1914496118b4aa0927f282e1", "reference": "95b7f702c4f07c44504a81c69ef07036e68b96b9",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/security-core": "^3.4.22|^4.2.3|^5.0", "symfony/security-core": "^3.4.22|^4.2.3|^5.0",
"symfony/security-http": "^4.4.1" "symfony/security-http": "^4.4.1"
}, },
@@ -5523,28 +6900,28 @@
], ],
"description": "Symfony Security Component - Guard", "description": "Symfony Security Component - Guard",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-24T13:10:00+00:00" "time": "2020-09-02T16:08:58+00:00"
}, },
{ {
"name": "symfony/security-http", "name": "symfony/security-http",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/security-http.git", "url": "https://github.com/symfony/security-http.git",
"reference": "c38fe1cd72360dfaa39c82fcb9e4666b041f8834" "reference": "eddcd6b7372d430a47091fa5e5d733785b5a582b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/security-http/zipball/c38fe1cd72360dfaa39c82fcb9e4666b041f8834", "url": "https://api.github.com/repos/symfony/security-http/zipball/eddcd6b7372d430a47091fa5e5d733785b5a582b",
"reference": "c38fe1cd72360dfaa39c82fcb9e4666b041f8834", "reference": "eddcd6b7372d430a47091fa5e5d733785b5a582b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/http-foundation": "^3.4|^4.0|^5.0", "symfony/http-foundation": "^3.4.40|^4.4.7|^5.0.7",
"symfony/http-kernel": "^4.4", "symfony/http-kernel": "^4.4",
"symfony/property-access": "^3.4|^4.0|^5.0", "symfony/property-access": "^3.4|^4.0|^5.0",
"symfony/security-core": "^4.4" "symfony/security-core": "^4.4.8"
}, },
"conflict": { "conflict": {
"symfony/event-dispatcher": ">=5", "symfony/event-dispatcher": ">=5",
@@ -5589,24 +6966,24 @@
], ],
"description": "Symfony Security Component - HTTP Integration", "description": "Symfony Security Component - HTTP Integration",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-26T10:27:30+00:00" "time": "2020-09-02T16:08:58+00:00"
}, },
{ {
"name": "symfony/serializer", "name": "symfony/serializer",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/serializer.git", "url": "https://github.com/symfony/serializer.git",
"reference": "bc76d242fea5ff09c3ca34c90f3bb9341a2470a4" "reference": "8e97a9cfc5a48de83437f286d6d0ab4a2a2c22b0"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/serializer/zipball/bc76d242fea5ff09c3ca34c90f3bb9341a2470a4", "url": "https://api.github.com/repos/symfony/serializer/zipball/8e97a9cfc5a48de83437f286d6d0ab4a2a2c22b0",
"reference": "bc76d242fea5ff09c3ca34c90f3bb9341a2470a4", "reference": "8e97a9cfc5a48de83437f286d6d0ab4a2a2c22b0",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/polyfill-ctype": "~1.8" "symfony/polyfill-ctype": "~1.8"
}, },
"conflict": { "conflict": {
@@ -5671,26 +7048,26 @@
], ],
"description": "Symfony Serializer Component", "description": "Symfony Serializer Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-29T10:05:28+00:00" "time": "2020-10-02T20:12:42+00:00"
}, },
{ {
"name": "symfony/serializer-pack", "name": "symfony/serializer-pack",
"version": "v1.0.2", "version": "v1.0.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/serializer-pack.git", "url": "https://github.com/symfony/serializer-pack.git",
"reference": "c5f18ba4ff989a42d7d140b7f85406e77cd8c4b2" "reference": "9bbce72dcad0cca797b678d3bfb764cf923ab28a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/serializer-pack/zipball/c5f18ba4ff989a42d7d140b7f85406e77cd8c4b2", "url": "https://api.github.com/repos/symfony/serializer-pack/zipball/9bbce72dcad0cca797b678d3bfb764cf923ab28a",
"reference": "c5f18ba4ff989a42d7d140b7f85406e77cd8c4b2", "reference": "9bbce72dcad0cca797b678d3bfb764cf923ab28a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"doctrine/annotations": "^1.0", "doctrine/annotations": "^1.0",
"php": "^7.0", "php": "^7.0",
"phpdocumentor/reflection-docblock": "^3.0|^4.0", "phpdocumentor/reflection-docblock": "*",
"symfony/property-access": "*", "symfony/property-access": "*",
"symfony/property-info": "*", "symfony/property-info": "*",
"symfony/serializer": "*" "symfony/serializer": "*"
@@ -5701,24 +7078,24 @@
"MIT" "MIT"
], ],
"description": "A pack for the Symfony serializer", "description": "A pack for the Symfony serializer",
"time": "2018-12-10T12:14:14+00:00" "time": "2020-03-28T16:26:24+00:00"
}, },
{ {
"name": "symfony/service-contracts", "name": "symfony/service-contracts",
"version": "v2.0.1", "version": "v2.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/service-contracts.git", "url": "https://github.com/symfony/service-contracts.git",
"reference": "144c5e51266b281231e947b51223ba14acf1a749" "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749", "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1",
"reference": "144c5e51266b281231e947b51223ba14acf1a749", "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.2.5", "php": ">=7.2.5",
"psr/container": "^1.0" "psr/container": "^1.0"
}, },
"suggest": { "suggest": {
@@ -5727,7 +7104,11 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "2.0-dev" "dev-master": "2.2-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
} }
}, },
"autoload": { "autoload": {
@@ -5759,24 +7140,24 @@
"interoperability", "interoperability",
"standards" "standards"
], ],
"time": "2019-11-18T17:27:11+00:00" "time": "2020-09-07T11:33:47+00:00"
}, },
{ {
"name": "symfony/stopwatch", "name": "symfony/stopwatch",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/stopwatch.git", "url": "https://github.com/symfony/stopwatch.git",
"reference": "abc08d7c48987829bac301347faa10f7e8bbf4fb" "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/stopwatch/zipball/abc08d7c48987829bac301347faa10f7e8bbf4fb", "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6f89e19772cf61b3c65bab329fe0e318259fbd91",
"reference": "abc08d7c48987829bac301347faa10f7e8bbf4fb", "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/service-contracts": "^1.0|^2" "symfony/service-contracts": "^1.0|^2"
}, },
"type": "library", "type": "library",
@@ -5809,24 +7190,86 @@
], ],
"description": "Symfony Stopwatch Component", "description": "Symfony Stopwatch Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-01-04T13:00:46+00:00" "time": "2020-09-02T16:08:58+00:00"
}, },
{ {
"name": "symfony/templating", "name": "symfony/swiftmailer-bundle",
"version": "v4.4.5", "version": "v3.5.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/templating.git", "url": "https://github.com/symfony/swiftmailer-bundle.git",
"reference": "9995a4f65149d5ab7f0d9cca6d88136ae8bfaa72" "reference": "933be6a3196fb354615290f53ff7ff61e0bdde58"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/templating/zipball/9995a4f65149d5ab7f0d9cca6d88136ae8bfaa72", "url": "https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/933be6a3196fb354615290f53ff7ff61e0bdde58",
"reference": "9995a4f65149d5ab7f0d9cca6d88136ae8bfaa72", "reference": "933be6a3196fb354615290f53ff7ff61e0bdde58",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "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" "symfony/polyfill-ctype": "~1.8"
}, },
"require-dev": { "require-dev": {
@@ -5865,24 +7308,24 @@
], ],
"description": "Symfony Templating Component", "description": "Symfony Templating Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-01-04T13:00:46+00:00" "time": "2020-09-02T16:08:58+00:00"
}, },
{ {
"name": "symfony/translation", "name": "symfony/translation",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/translation.git", "url": "https://github.com/symfony/translation.git",
"reference": "0a19a77fba20818a969ef03fdaf1602de0546353" "reference": "8494fa1bbf9d77fe1e7d50ac8ccfb80a858a98bd"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/0a19a77fba20818a969ef03fdaf1602de0546353", "url": "https://api.github.com/repos/symfony/translation/zipball/8494fa1bbf9d77fe1e7d50ac8ccfb80a858a98bd",
"reference": "0a19a77fba20818a969ef03fdaf1602de0546353", "reference": "8494fa1bbf9d77fe1e7d50ac8ccfb80a858a98bd",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-mbstring": "~1.0",
"symfony/translation-contracts": "^1.1.6|^2" "symfony/translation-contracts": "^1.1.6|^2"
}, },
@@ -5941,24 +7384,24 @@
], ],
"description": "Symfony Translation Component", "description": "Symfony Translation Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-04T09:32:40+00:00" "time": "2020-10-02T07:34:48+00:00"
}, },
{ {
"name": "symfony/translation-contracts", "name": "symfony/translation-contracts",
"version": "v2.0.1", "version": "v2.3.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/translation-contracts.git", "url": "https://github.com/symfony/translation-contracts.git",
"reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed" "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/8cc682ac458d75557203b2f2f14b0b92e1c744ed", "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e2eaa60b558f26a4b0354e1bbb25636efaaad105",
"reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed", "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.2.5" "php": ">=7.2.5"
}, },
"suggest": { "suggest": {
"symfony/translation-implementation": "" "symfony/translation-implementation": ""
@@ -5966,7 +7409,11 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "2.0-dev" "dev-master": "2.3-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
} }
}, },
"autoload": { "autoload": {
@@ -5998,24 +7445,24 @@
"interoperability", "interoperability",
"standards" "standards"
], ],
"time": "2019-11-18T17:27:11+00:00" "time": "2020-09-28T13:05:58+00:00"
}, },
{ {
"name": "symfony/twig-bridge", "name": "symfony/twig-bridge",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/twig-bridge.git", "url": "https://github.com/symfony/twig-bridge.git",
"reference": "e76e963d8aeb1370a1236ca237a8028141402fc0" "reference": "ac5de06ef28f0638bd87d8fcf515715232db34d2"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/e76e963d8aeb1370a1236ca237a8028141402fc0", "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/ac5de06ef28f0638bd87d8fcf515715232db34d2",
"reference": "e76e963d8aeb1370a1236ca237a8028141402fc0", "reference": "ac5de06ef28f0638bd87d8fcf515715232db34d2",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/translation-contracts": "^1.1|^2", "symfony/translation-contracts": "^1.1|^2",
"twig/twig": "^1.41|^2.10|^3.0" "twig/twig": "^1.41|^2.10|^3.0"
}, },
@@ -6101,24 +7548,24 @@
], ],
"description": "Symfony Twig Bridge", "description": "Symfony Twig Bridge",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-14T08:28:51+00:00" "time": "2020-09-02T16:08:58+00:00"
}, },
{ {
"name": "symfony/twig-bundle", "name": "symfony/twig-bundle",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/twig-bundle.git", "url": "https://github.com/symfony/twig-bundle.git",
"reference": "d3e3e46e9e683e946746219570299ba07506260a" "reference": "19369cd319700a925c1a736f3059894aab04c387"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bundle/zipball/d3e3e46e9e683e946746219570299ba07506260a", "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/19369cd319700a925c1a736f3059894aab04c387",
"reference": "d3e3e46e9e683e946746219570299ba07506260a", "reference": "19369cd319700a925c1a736f3059894aab04c387",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/http-foundation": "^4.3|^5.0", "symfony/http-foundation": "^4.3|^5.0",
"symfony/http-kernel": "^4.4", "symfony/http-kernel": "^4.4",
"symfony/polyfill-ctype": "~1.8", "symfony/polyfill-ctype": "~1.8",
@@ -6176,7 +7623,7 @@
], ],
"description": "Symfony TwigBundle", "description": "Symfony TwigBundle",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-01-04T13:00:46+00:00" "time": "2020-10-01T13:17:48+00:00"
}, },
{ {
"name": "symfony/twig-pack", "name": "symfony/twig-pack",
@@ -6208,20 +7655,20 @@
}, },
{ {
"name": "symfony/validator", "name": "symfony/validator",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/validator.git", "url": "https://github.com/symfony/validator.git",
"reference": "3a3a07fe2f42492eccca6771f1a460c9900cd851" "reference": "8da71f775b7e1ffeed784d27f526527bb8e9504b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/validator/zipball/3a3a07fe2f42492eccca6771f1a460c9900cd851", "url": "https://api.github.com/repos/symfony/validator/zipball/8da71f775b7e1ffeed784d27f526527bb8e9504b",
"reference": "3a3a07fe2f42492eccca6771f1a460c9900cd851", "reference": "8da71f775b7e1ffeed784d27f526527bb8e9504b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/polyfill-ctype": "~1.8", "symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-mbstring": "~1.0",
"symfony/translation-contracts": "^1.1|^2" "symfony/translation-contracts": "^1.1|^2"
@@ -6297,26 +7744,27 @@
], ],
"description": "Symfony Validator Component", "description": "Symfony Validator Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-29T10:05:28+00:00" "time": "2020-09-27T03:36:23+00:00"
}, },
{ {
"name": "symfony/var-dumper", "name": "symfony/var-dumper",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/var-dumper.git", "url": "https://github.com/symfony/var-dumper.git",
"reference": "2572839911702b0405479410ea7a1334bfab0b96" "reference": "0dc22bdf9d1197467bb04d505355180b6f20bcca"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/2572839911702b0405479410ea7a1334bfab0b96", "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0dc22bdf9d1197467bb04d505355180b6f20bcca",
"reference": "2572839911702b0405479410ea7a1334bfab0b96", "reference": "0dc22bdf9d1197467bb04d505355180b6f20bcca",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php72": "~1.5" "symfony/polyfill-php72": "~1.5",
"symfony/polyfill-php80": "^1.15"
}, },
"conflict": { "conflict": {
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
@@ -6373,27 +7821,27 @@
"debug", "debug",
"dump" "dump"
], ],
"time": "2020-02-24T13:10:00+00:00" "time": "2020-09-18T08:35:10+00:00"
}, },
{ {
"name": "symfony/var-exporter", "name": "symfony/var-exporter",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/var-exporter.git", "url": "https://github.com/symfony/var-exporter.git",
"reference": "1a76a943f2af334da13bc9f33f49392fa530eec9" "reference": "bb6c505d1492bf55534184c0a38826bda529e5e2"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/1a76a943f2af334da13bc9f33f49392fa530eec9", "url": "https://api.github.com/repos/symfony/var-exporter/zipball/bb6c505d1492bf55534184c0a38826bda529e5e2",
"reference": "1a76a943f2af334da13bc9f33f49392fa530eec9", "reference": "bb6c505d1492bf55534184c0a38826bda529e5e2",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3" "php": ">=7.1.3"
}, },
"require-dev": { "require-dev": {
"symfony/var-dumper": "^4.1.1|^5.0" "symfony/var-dumper": "^4.4.9|^5.0.9"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@@ -6433,24 +7881,24 @@
"instantiate", "instantiate",
"serialize" "serialize"
], ],
"time": "2020-01-04T13:00:46+00:00" "time": "2020-09-07T21:10:21+00:00"
}, },
{ {
"name": "symfony/web-link", "name": "symfony/web-link",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/web-link.git", "url": "https://github.com/symfony/web-link.git",
"reference": "dad60d94b2e7f16e1a7d0ebd0f1f460f45a51386" "reference": "b862a104ef3a233b6f12fdbf6b57113308af79ff"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/web-link/zipball/dad60d94b2e7f16e1a7d0ebd0f1f460f45a51386", "url": "https://api.github.com/repos/symfony/web-link/zipball/b862a104ef3a233b6f12fdbf6b57113308af79ff",
"reference": "dad60d94b2e7f16e1a7d0ebd0f1f460f45a51386", "reference": "b862a104ef3a233b6f12fdbf6b57113308af79ff",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"psr/link": "^1.0", "psr/link": "^1.0",
"symfony/polyfill-php72": "^1.5" "symfony/polyfill-php72": "^1.5"
}, },
@@ -6509,24 +7957,24 @@
"psr13", "psr13",
"push" "push"
], ],
"time": "2020-01-04T13:00:46+00:00" "time": "2020-05-26T09:42:42+00:00"
}, },
{ {
"name": "symfony/web-profiler-bundle", "name": "symfony/web-profiler-bundle",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/web-profiler-bundle.git", "url": "https://github.com/symfony/web-profiler-bundle.git",
"reference": "76c21d0137f0b9c6bbbc93ac2672cadfdf2e625a" "reference": "f3b967b34b1db5d3285c415fbe5ce2b9299e6cd6"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/76c21d0137f0b9c6bbbc93ac2672cadfdf2e625a", "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/f3b967b34b1db5d3285c415fbe5ce2b9299e6cd6",
"reference": "76c21d0137f0b9c6bbbc93ac2672cadfdf2e625a", "reference": "f3b967b34b1db5d3285c415fbe5ce2b9299e6cd6",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/config": "^4.2|^5.0", "symfony/config": "^4.2|^5.0",
"symfony/framework-bundle": "^4.4|^5.0", "symfony/framework-bundle": "^4.4|^5.0",
"symfony/http-kernel": "^4.4", "symfony/http-kernel": "^4.4",
@@ -6575,7 +8023,7 @@
], ],
"description": "Symfony WebProfilerBundle", "description": "Symfony WebProfilerBundle",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-14T07:42:58+00:00" "time": "2020-09-06T17:41:24+00:00"
}, },
{ {
"name": "symfony/webpack-encore-bundle", "name": "symfony/webpack-encore-bundle",
@@ -6632,20 +8080,20 @@
}, },
{ {
"name": "symfony/yaml", "name": "symfony/yaml",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/yaml.git", "url": "https://github.com/symfony/yaml.git",
"reference": "94d005c176db2080e98825d98e01e8b311a97a88" "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/94d005c176db2080e98825d98e01e8b311a97a88", "url": "https://api.github.com/repos/symfony/yaml/zipball/c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
"reference": "94d005c176db2080e98825d98e01e8b311a97a88", "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/polyfill-ctype": "~1.8" "symfony/polyfill-ctype": "~1.8"
}, },
"conflict": { "conflict": {
@@ -6687,20 +8135,20 @@
], ],
"description": "Symfony Yaml Component", "description": "Symfony Yaml Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-03T10:46:43+00:00" "time": "2020-09-27T03:36:23+00:00"
}, },
{ {
"name": "tetranz/select2entity-bundle", "name": "tetranz/select2entity-bundle",
"version": "v3.0.0", "version": "v3.1.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/tetranz/select2entity-bundle.git", "url": "https://github.com/tetranz/select2entity-bundle.git",
"reference": "46326457084f6c01f204a02af4a3a3aba19e02c4" "reference": "66f515417c609f20f49ff27d3980ffcf1b8f347b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/tetranz/select2entity-bundle/zipball/46326457084f6c01f204a02af4a3a3aba19e02c4", "url": "https://api.github.com/repos/tetranz/select2entity-bundle/zipball/66f515417c609f20f49ff27d3980ffcf1b8f347b",
"reference": "46326457084f6c01f204a02af4a3a3aba19e02c4", "reference": "66f515417c609f20f49ff27d3980ffcf1b8f347b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -6740,24 +8188,24 @@
"symfony", "symfony",
"typeahead" "typeahead"
], ],
"time": "2019-09-23T00:42:17+00:00" "time": "2020-09-28T11:42:58+00:00"
}, },
{ {
"name": "twig/extra-bundle", "name": "twig/extra-bundle",
"version": "v3.0.3", "version": "v3.0.5",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/twigphp/twig-extra-bundle.git", "url": "https://github.com/twigphp/twig-extra-bundle.git",
"reference": "6eaf1637abe6b68518e7e0949ebb84e55770d5c6" "reference": "a7c5799cf742ab0827f5d32df37528ee8bf5a233"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/6eaf1637abe6b68518e7e0949ebb84e55770d5c6", "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/a7c5799cf742ab0827f5d32df37528ee8bf5a233",
"reference": "6eaf1637abe6b68518e7e0949ebb84e55770d5c6", "reference": "a7c5799cf742ab0827f5d32df37528ee8bf5a233",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": "^7.1.3|^8.0",
"symfony/framework-bundle": "^4.3|^5.0", "symfony/framework-bundle": "^4.3|^5.0",
"symfony/twig-bundle": "^4.3|^5.0", "symfony/twig-bundle": "^4.3|^5.0",
"twig/twig": "^2.4|^3.0" "twig/twig": "^2.4|^3.0"
@@ -6799,30 +8247,30 @@
"extra", "extra",
"twig" "twig"
], ],
"time": "2020-01-01T17:11:09+00:00" "time": "2020-05-21T09:56:39+00:00"
}, },
{ {
"name": "twig/twig", "name": "twig/twig",
"version": "v3.0.3", "version": "v3.0.5",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/twigphp/Twig.git", "url": "https://github.com/twigphp/Twig.git",
"reference": "3b88ccd180a6b61ebb517aea3b1a8906762a1dc2" "reference": "9b76b1535483cdf4edf01bb787b0217b62bd68a5"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/3b88ccd180a6b61ebb517aea3b1a8906762a1dc2", "url": "https://api.github.com/repos/twigphp/Twig/zipball/9b76b1535483cdf4edf01bb787b0217b62bd68a5",
"reference": "3b88ccd180a6b61ebb517aea3b1a8906762a1dc2", "reference": "9b76b1535483cdf4edf01bb787b0217b62bd68a5",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.2.5", "php": ">=7.2.5",
"symfony/polyfill-ctype": "^1.8", "symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-mbstring": "^1.3" "symfony/polyfill-mbstring": "^1.3"
}, },
"require-dev": { "require-dev": {
"psr/container": "^1.0", "psr/container": "^1.0",
"symfony/phpunit-bridge": "^4.4|^5.0" "symfony/phpunit-bridge": "^4.4.9|^5.0.9"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@@ -6861,28 +8309,29 @@
"keywords": [ "keywords": [
"templating" "templating"
], ],
"time": "2020-02-11T15:33:47+00:00" "time": "2020-08-05T15:13:19+00:00"
}, },
{ {
"name": "webmozart/assert", "name": "webmozart/assert",
"version": "1.7.0", "version": "1.9.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/webmozart/assert.git", "url": "https://github.com/webmozart/assert.git",
"reference": "aed98a490f9a8f78468232db345ab9cf606cf598" "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/webmozart/assert/zipball/aed98a490f9a8f78468232db345ab9cf606cf598", "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
"reference": "aed98a490f9a8f78468232db345ab9cf606cf598", "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^5.3.3 || ^7.0", "php": "^5.3.3 || ^7.0 || ^8.0",
"symfony/polyfill-ctype": "^1.8" "symfony/polyfill-ctype": "^1.8"
}, },
"conflict": { "conflict": {
"vimeo/psalm": "<3.6.0" "phpstan/phpstan": "<0.12.20",
"vimeo/psalm": "<3.9.1"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^4.8.36 || ^7.5.13" "phpunit/phpunit": "^4.8.36 || ^7.5.13"
@@ -6909,7 +8358,7 @@
"check", "check",
"validate" "validate"
], ],
"time": "2020-02-14T12:15:55+00:00" "time": "2020-07-08T17:02:28+00:00"
}, },
{ {
"name": "willdurand/jsonp-callback-validator", "name": "willdurand/jsonp-callback-validator",
@@ -7118,16 +8567,16 @@
}, },
{ {
"name": "zircote/swagger-php", "name": "zircote/swagger-php",
"version": "2.0.15", "version": "2.0.16",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/zircote/swagger-php.git", "url": "https://github.com/zircote/swagger-php.git",
"reference": "5fd9439cfb76713925e23f206e9db4bf35784683" "reference": "a25c1bfe508e5f27d5f618648449593a79cbe406"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/zircote/swagger-php/zipball/5fd9439cfb76713925e23f206e9db4bf35784683", "url": "https://api.github.com/repos/zircote/swagger-php/zipball/a25c1bfe508e5f27d5f618648449593a79cbe406",
"reference": "5fd9439cfb76713925e23f206e9db4bf35784683", "reference": "a25c1bfe508e5f27d5f618648449593a79cbe406",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -7176,77 +8625,26 @@
"rest", "rest",
"service discovery" "service discovery"
], ],
"time": "2020-01-25T14:15:57+00:00" "time": "2020-05-10T13:42:24+00:00"
} }
], ],
"packages-dev": [ "packages-dev": [
{
"name": "easycorp/easy-log-handler",
"version": "v1.0.9",
"source": {
"type": "git",
"url": "https://github.com/EasyCorp/easy-log-handler.git",
"reference": "224e1dfcf9455aceee89cd0af306ac097167fac1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/EasyCorp/easy-log-handler/zipball/224e1dfcf9455aceee89cd0af306ac097167fac1",
"reference": "224e1dfcf9455aceee89cd0af306ac097167fac1",
"shasum": ""
},
"require": {
"monolog/monolog": "~1.6|~2.0",
"php": ">=7.1",
"symfony/yaml": "^3.4|^4.0|^5.0"
},
"type": "library",
"autoload": {
"psr-4": {
"EasyCorp\\EasyLog\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Javier Eguiluz",
"email": "javiereguiluz@gmail.com"
},
{
"name": "Project Contributors",
"homepage": "https://github.com/EasyCorp/easy-log-handler"
}
],
"description": "A handler for Monolog that optimizes log messages to be processed by humans instead of software. Improve your productivity with logs that are easy to understand.",
"homepage": "https://github.com/EasyCorp/easy-log-handler",
"keywords": [
"easy",
"log",
"logging",
"monolog",
"productivity"
],
"abandoned": true,
"time": "2019-10-24T07:13:31+00:00"
},
{ {
"name": "symfony/browser-kit", "name": "symfony/browser-kit",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/browser-kit.git", "url": "https://github.com/symfony/browser-kit.git",
"reference": "090ce406505149d6852a7c03b0346dec3b8cf612" "reference": "9a1786e5020783605a30cff2ceed9aca030e8d80"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/browser-kit/zipball/090ce406505149d6852a7c03b0346dec3b8cf612", "url": "https://api.github.com/repos/symfony/browser-kit/zipball/9a1786e5020783605a30cff2ceed9aca030e8d80",
"reference": "090ce406505149d6852a7c03b0346dec3b8cf612", "reference": "9a1786e5020783605a30cff2ceed9aca030e8d80",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/dom-crawler": "^3.4|^4.0|^5.0" "symfony/dom-crawler": "^3.4|^4.0|^5.0"
}, },
"require-dev": { "require-dev": {
@@ -7288,24 +8686,24 @@
], ],
"description": "Symfony BrowserKit Component", "description": "Symfony BrowserKit Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-23T10:00:59+00:00" "time": "2020-10-02T08:38:15+00:00"
}, },
{ {
"name": "symfony/css-selector", "name": "symfony/css-selector",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/css-selector.git", "url": "https://github.com/symfony/css-selector.git",
"reference": "d0a6dd288fa8848dcc3d1f58b94de6a7cc5d2d22" "reference": "bf17dc9f6ce144e41f786c32435feea4d8e11dcc"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/d0a6dd288fa8848dcc3d1f58b94de6a7cc5d2d22", "url": "https://api.github.com/repos/symfony/css-selector/zipball/bf17dc9f6ce144e41f786c32435feea4d8e11dcc",
"reference": "d0a6dd288fa8848dcc3d1f58b94de6a7cc5d2d22", "reference": "bf17dc9f6ce144e41f786c32435feea4d8e11dcc",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3" "php": ">=7.1.3"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@@ -7341,25 +8739,25 @@
], ],
"description": "Symfony CssSelector Component", "description": "Symfony CssSelector Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-04T09:01:01+00:00" "time": "2020-07-05T09:39:30+00:00"
}, },
{ {
"name": "symfony/debug-bundle", "name": "symfony/debug-bundle",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/debug-bundle.git", "url": "https://github.com/symfony/debug-bundle.git",
"reference": "570c3c69e69f7709f184ee3acbebe45e5ff1adce" "reference": "12a020d14b4f6f3a5cfb46cd83836b78be036210"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/debug-bundle/zipball/570c3c69e69f7709f184ee3acbebe45e5ff1adce", "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/12a020d14b4f6f3a5cfb46cd83836b78be036210",
"reference": "570c3c69e69f7709f184ee3acbebe45e5ff1adce", "reference": "12a020d14b4f6f3a5cfb46cd83836b78be036210",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-xml": "*", "ext-xml": "*",
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/http-kernel": "^3.4|^4.0|^5.0", "symfony/http-kernel": "^3.4|^4.0|^5.0",
"symfony/twig-bridge": "^3.4|^4.0|^5.0", "symfony/twig-bridge": "^3.4|^4.0|^5.0",
"symfony/var-dumper": "^4.1.1|^5.0" "symfony/var-dumper": "^4.1.1|^5.0"
@@ -7407,24 +8805,23 @@
], ],
"description": "Symfony DebugBundle", "description": "Symfony DebugBundle",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-01-04T13:00:46+00:00" "time": "2020-05-20T08:37:50+00:00"
}, },
{ {
"name": "symfony/debug-pack", "name": "symfony/debug-pack",
"version": "v1.0.7", "version": "v1.0.8",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/debug-pack.git", "url": "https://github.com/symfony/debug-pack.git",
"reference": "09a4a1e9bf2465987d4f79db0ad6c11cc632bc79" "reference": "7310a66f9f81c9f292ff9089f0b0062386cb83fb"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/debug-pack/zipball/09a4a1e9bf2465987d4f79db0ad6c11cc632bc79", "url": "https://api.github.com/repos/symfony/debug-pack/zipball/7310a66f9f81c9f292ff9089f0b0062386cb83fb",
"reference": "09a4a1e9bf2465987d4f79db0ad6c11cc632bc79", "reference": "7310a66f9f81c9f292ff9089f0b0062386cb83fb",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"easycorp/easy-log-handler": "^1.0.7",
"php": "^7.0", "php": "^7.0",
"symfony/debug-bundle": "*", "symfony/debug-bundle": "*",
"symfony/monolog-bundle": "^3.0", "symfony/monolog-bundle": "^3.0",
@@ -7437,24 +8834,24 @@
"MIT" "MIT"
], ],
"description": "A debug pack for Symfony projects", "description": "A debug pack for Symfony projects",
"time": "2018-12-10T12:11:11+00:00" "time": "2020-04-07T10:08:51+00:00"
}, },
{ {
"name": "symfony/dom-crawler", "name": "symfony/dom-crawler",
"version": "v4.4.5", "version": "v4.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/dom-crawler.git", "url": "https://github.com/symfony/dom-crawler.git",
"reference": "11dcf08f12f29981bf770f097a5d64d65bce5929" "reference": "bdcb7633a501770a0daefbf81d2e6b28c3864f2b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/11dcf08f12f29981bf770f097a5d64d65bce5929", "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/bdcb7633a501770a0daefbf81d2e6b28c3864f2b",
"reference": "11dcf08f12f29981bf770f097a5d64d65bce5929", "reference": "bdcb7633a501770a0daefbf81d2e6b28c3864f2b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"symfony/polyfill-ctype": "~1.8", "symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.0" "symfony/polyfill-mbstring": "~1.0"
}, },
@@ -7498,27 +8895,30 @@
], ],
"description": "Symfony DomCrawler Component", "description": "Symfony DomCrawler Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-29T10:05:28+00:00" "time": "2020-10-02T07:34:48+00:00"
}, },
{ {
"name": "symfony/phpunit-bridge", "name": "symfony/phpunit-bridge",
"version": "v5.0.5", "version": "v5.1.7",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/phpunit-bridge.git", "url": "https://github.com/symfony/phpunit-bridge.git",
"reference": "b8fee53045a55ccbb9209e453bf6fdcf74381959" "reference": "150aeb91dd9dafe13ec8416abd62e435330ca12d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/b8fee53045a55ccbb9209e453bf6fdcf74381959", "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/150aeb91dd9dafe13ec8416abd62e435330ca12d",
"reference": "b8fee53045a55ccbb9209e453bf6fdcf74381959", "reference": "150aeb91dd9dafe13ec8416abd62e435330ca12d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=5.5.9" "php": ">=5.5.9"
}, },
"conflict": { "conflict": {
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0|<6.4,>=6.0" "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": { "suggest": {
"symfony/error-handler": "For tracking deprecated interfaces usages at runtime with DebugClassLoader" "symfony/error-handler": "For tracking deprecated interfaces usages at runtime with DebugClassLoader"
@@ -7529,7 +8929,7 @@
"type": "symfony-bridge", "type": "symfony-bridge",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "5.0-dev" "dev-master": "5.1-dev"
}, },
"thanks": { "thanks": {
"name": "phpunit/phpunit", "name": "phpunit/phpunit",
@@ -7563,7 +8963,7 @@
], ],
"description": "Symfony PHPUnit Bridge", "description": "Symfony PHPUnit Bridge",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2020-02-24T15:05:31+00:00" "time": "2020-10-02T12:57:56+00:00"
}, },
{ {
"name": "symfony/test-pack", "name": "symfony/test-pack",

View File

@@ -19,4 +19,6 @@ return [
Tetranz\Select2EntityBundle\TetranzSelect2EntityBundle::class => ['all' => true], Tetranz\Select2EntityBundle\TetranzSelect2EntityBundle::class => ['all' => true],
Oneup\UploaderBundle\OneupUploaderBundle::class => ['all' => true], Oneup\UploaderBundle\OneupUploaderBundle::class => ['all' => true],
Knp\Bundle\SnappyBundle\KnpSnappyBundle::class => ['all' => true], Knp\Bundle\SnappyBundle\KnpSnappyBundle::class => ['all' => true],
Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle::class => ['all' => true],
Sentry\SentryBundle\SentryBundle::class => ['all' => true],
]; ];

View File

@@ -0,0 +1,4 @@
# See https://symfony.com/doc/current/email/dev_environment.html
swiftmailer:
# send all emails to a specific address
#delivery_addresses: ['me@example.com']

View File

@@ -0,0 +1,6 @@
# config/packages/framework.yaml
framework:
http_client:
default_options:
headers:
DOLAPIKEY: '%env(DOLIBARR_API_KEY)%'

View File

@@ -0,0 +1,2 @@
sentry:
dsn: '%env(SENTRY_DSN)%'

View File

@@ -0,0 +1,5 @@
swiftmailer:
url: '%env(MAILER_URL)%'
spool:
type: file
path: '%kernel.project_dir%/var/spoolmail'

View File

@@ -0,0 +1,5 @@
swiftmailer:
url: '%env(MAILER_URL)%'
spool:
type: file
path: '%kernel.project_dir%/var/spoolmail'

View File

@@ -233,6 +233,14 @@ app_offer_activeoffer:
path: /master/offer/activeoffer path: /master/offer/activeoffer
defaults: { _controller: App\Controller\OfferController:activeoffer } defaults: { _controller: App\Controller\OfferController:activeoffer }
app_offer_getorders:
path: /master/offer/getorders
defaults: { _controller: App\Controller\OfferController:getorders }
app_offer_convert:
path: /master/offer/convert/{type}/{id}
defaults: { _controller: App\Controller\OfferController:convert }
#== Task ==================================================================================================== #== Task ====================================================================================================
app_task: app_task:
path: /master/task path: /master/task
@@ -343,6 +351,52 @@ app_validationholiday_activeholiday:
path: /validator/validateholiday/activeholiday path: /validator/validateholiday/activeholiday
defaults: { _controller: App\Controller\ValidationController: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 }
#== Customer ====================================================================================================== #== Customer ======================================================================================================
app_customer_report: app_customer_report:
@@ -353,6 +407,33 @@ app_customer_planning:
path: /customer/planning/{key} path: /customer/planning/{key}
defaults: { _controller: App\Controller\ReportController:planning, access: 'customer' } 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 ======================================================================================================
app_stat_view:
path: /user/stat
defaults: { _controller: App\Controller\StatController:view }
#== API =========================================================================================================== #== API ===========================================================================================================
app_api: app_api:
path: /api/{key} path: /api/{key}

View File

@@ -9,6 +9,9 @@ parameters:
appName: '%env(resolve:APP_NAME)%' appName: '%env(resolve:APP_NAME)%'
appEnv: '%env(resolve:APP_ENV)%' appEnv: '%env(resolve:APP_ENV)%'
appCron: '%env(resolve:APP_CRON)%' 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)%' casHost: '%env(resolve:CAS_HOST)%'
casPort: '%env(resolve:CAS_PORT)%' casPort: '%env(resolve:CAS_PORT)%'
casPath: '%env(resolve:CAS_PATH)%' casPath: '%env(resolve:CAS_PATH)%'
@@ -16,6 +19,11 @@ parameters:
casEmail: '%env(resolve:CAS_EMAIL)%' casEmail: '%env(resolve:CAS_EMAIL)%'
casLastname: '%env(resolve:CAS_LASTNAME)%' casLastname: '%env(resolve:CAS_LASTNAME)%'
casFirstname: '%env(resolve:CAS_FIRSTNAME)%' 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)%'
services: services:
# default configuration for services in *this* file # default configuration for services in *this* file
@@ -59,3 +67,12 @@ services:
tags: tags:
- { name: kernel.event_listener, event: kernel.request, method: onDomainParse } - { 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"]

View File

@@ -44,7 +44,7 @@ document.addEventListener('DOMContentLoaded', function () {
weekNumbers: true, weekNumbers: true,
selectable: true, selectable: true,
events: 'event/load', events: 'event/load',
eventLimit: 4, eventLimit: 8,
eventDrop: function eventDrop(info) { eventDrop: function eventDrop(info) {
info.revert(); info.revert();
}, },

View File

@@ -20,7 +20,10 @@ APP_SECRET=52c1cb88ee822cd2643abe29e16a68a6
###< symfony/framework-bundle ### ###< symfony/framework-bundle ###
###> symfony/mailer ### ###> symfony/mailer ###
# MAILER_DSN=smtp://localhost MAILER_METHOD=sendmail
MAILER_URL=
MAILER_NOREPLY=noreply@noreply.fr
MAILER_DEFAULT_NOTIF=
###< symfony/mailer ### ###< symfony/mailer ###
###< doctrine/doctrine-bundle ### ###< doctrine/doctrine-bundle ###
@@ -42,7 +45,14 @@ DATABASE_HOST=
CAS_HOST= CAS_HOST=
CAS_PORT= CAS_PORT=
CAS_PATH= CAS_PATH=
CAS_USERNAME=username
CAS_EMAIL=email OFFICE_HOUR_START=09:00
CAS_LASTNAME=lastname OFFICE_HOUR_END=17:30
CAS_FIRSTNAME=firstname
## Sentry DSN
SENTRY_DSN=
## Dolibarr
DOLIBARR_ACTIVE=false
DOLIBARR_API_KEY=
DOLIBARR_URI=

View File

@@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash
if [ ! -f /var/www/html/schedule/.key ]; then if [ ! -f /var/www/html/schedule/.key ]; then
cat /dev/urandom | tr -dc '_A-Za-z0-9' | head -c${1:-32} > /var/www/html/schedule/.key openssl rand -hex 32 > /var/www/html/schedule/.key
fi fi

View File

@@ -48,6 +48,8 @@ writeligne("MIGRATION");
writeligne(""); writeligne("");
writeligne("Purge des Tables Scheudle"); writeligne("Purge des Tables Scheudle");
Purge("userproject");
Purge("timer");
Purge("event"); Purge("event");
Purge("penalty"); Purge("penalty");
Purge("task"); Purge("task");
@@ -180,14 +182,25 @@ while($row=$queryold->fetch()) {
writeligne(""); writeligne("");
writeligne("== Récupération Event"); writeligne("== Récupération Event");
$q="SELECT * FROM schedule_event"; $q="SELECT * FROM schedule_event, schedule_task WHERE event_task=task_id";
$queryold=$bddold->prepare($q); $queryold=$bddold->prepare($q);
$queryold->execute(); $queryold->execute();
while($row=$queryold->fetch()) { while($row=$queryold->fetch()) {
// Event vacation ?
$isvacation=false;
if($row["task_id"]<=-70) $isvacation=true;
if($row["task_id"]==-85 || $row["task_id"]==-70) $isvacation=true;
// Validation
$validate=$row["event_validate"];
$validateholiday=false;
if($isvacation) $validateholiday=$row["event_validate"];
// Génération de l'event
writeligne($row["event_id"]); writeligne($row["event_id"]);
$q="INSERT IGNORE INTO event (id, description, start, end, allday, duration, validate, validateholiday, task_id, user_id ) VALUES (?,?,?,?,?,?,?,?,?,?)"; $q="INSERT IGNORE INTO event (id, description, start, end, allday, duration, validate, validateholiday, task_id, user_id ) VALUES (?,?,?,?,?,?,?,?,?,?)";
$query=$bddnew->prepare($q); $query=$bddnew->prepare($q);
$query->execute([$row["event_id"],$row["event_description"],$row["event_start"],$row["event_end"],$row["event_allday"],$row["event_duration"],$row["event_validate"],$row["event_validate"],$row["event_task"],$row["event_user"] ]); $query->execute([$row["event_id"],$row["event_description"],$row["event_start"],$row["event_end"],$row["event_allday"],$row["event_duration"],$validate,$validateholiday,$row["event_task"],$row["event_user"] ]);
} }
writeligne(""); writeligne("");

View File

@@ -3,7 +3,7 @@
cd /var/www/html/schedule cd /var/www/html/schedule
# Déclaration d'un proxy # Déclaration d'un proxy
. proxy.sh . scripts/proxy.sh
# Mise en place du fichier d'environnement model # Mise en place du fichier d'environnement model
if [ ! -f /var/www/html/schedule/.env ]; then if [ ! -f /var/www/html/schedule/.env ]; then

View File

@@ -57,10 +57,6 @@ class AppInitCommand extends Command
$this->insertNature(-100,"Non Travaillé",false); $this->insertNature(-100,"Non Travaillé",false);
$this->insertNature(-90,"Non Facturable",false); $this->insertNature(-90,"Non Facturable",false);
$this->insertNature(-80,"Prestation",false); $this->insertNature(-80,"Prestation",false);
$this->insertNature(-70,"Intégration",false);
$this->insertNature(-60,"Formation",false);
$this->insertNature(-50,"Ticket",false);
$this->insertNature(-40,"Maintenance",false);
// Création du compte admin si non existant // Création du compte admin si non existant
$this->insertUser("admin","admin"); $this->insertUser("admin","admin");

View File

@@ -0,0 +1,87 @@
<?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 0;
}
$this->writeln("");
return 1;
}
private function writelnred($string) {
$this->output->writeln('<fg=red>'.$string.'</>');
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
}
private function writeln($string) {
$this->output->writeln($string);
$this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n");
}
}

View File

@@ -136,8 +136,15 @@ class BreakdayController extends AbstractController
if($error) if($error)
return $this->redirectToRoute($this->route."_update",["id"=>$id]); return $this->redirectToRoute($this->route."_update",["id"=>$id]);
else { else {
try {
$em->remove($data); $em->remove($data);
$em->flush(); $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 // Retour à la liste
return $this->redirectToRoute($this->route); return $this->redirectToRoute($this->route);

View File

@@ -77,7 +77,6 @@ class CropController extends AbstractController
// Cacul de la largeur // Cacul de la largeur
protected function getWidth($image) { protected function getWidth($image) {
dump($image);
$size = getimagesize($image); $size = getimagesize($image);
$width = $size[0]; $width = $size[0];
return $width; return $width;

View File

@@ -146,8 +146,15 @@ class CustomerController extends AbstractController
if($error) if($error)
return $this->redirectToRoute($this->route."_update",["id"=>$id]); return $this->redirectToRoute($this->route."_update",["id"=>$id]);
else { else {
try {
$em->remove($data); $em->remove($data);
$em->flush(); $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 // Retour à la liste
return $this->redirectToRoute($this->route); return $this->redirectToRoute($this->route);

View File

@@ -17,19 +17,24 @@ class EventController extends AbstractController
private $route = "app_event"; private $route = "app_event";
private $render = "Event/"; private $render = "Event/";
private $entity = "App:Event"; private $entity = "App:Event";
private $notificator;
public function __construct(\App\Service\notificationService $notificator) {
$this->notificator = $notificator;
}
public function list(Request $request) public function list(Request $request)
{ {
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
$users = $em->getRepository("App:User")->findAll(); $users = $em->getRepository("App:User")->findAll();
$tasks = $em->getRepository("App:Task")->findAll(); $tasks = $em->getRepository("App:Task")->findAll();
$projects= $em->getRepository("App:Project")->findBy(["active"=>true]);
return $this->render($this->render.'list.html.twig',[ return $this->render($this->render.'list.html.twig',[
"useheader" => true, "useheader" => true,
"usesidebar" => true, "usesidebar" => true,
"users" => $users, "users" => $users,
"tasks" => $tasks "projects" => $projects
]); ]);
} }
@@ -37,24 +42,56 @@ class EventController extends AbstractController
{ {
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
$tbevents=[]; $tbevents=[];
$start = $request->query->get('start');
$end = $request->query->get('end');
$iduser=$this->get("session")->get("iduser");
// Evenements // Evenements
$iduser=$this->get("session")->get("iduser"); if($iduser=="all") {
if($iduser=="all")
$events=$em->getRepository("App:Event")->findAll(); $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 { else {
$iduser=$this->get("session")->get("iduser");
$user=$em->getRepository("App:User")->find($iduser); $user=$em->getRepository("App:User")->find($iduser);
$events=$em->getRepository("App:Event")->findBy(["user"=>$user]); $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) { 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); $tmp=$this->formatEvent($event);
array_push($tbevents,$tmp); array_push($tbevents,$tmp);
} }
// Astreintes // Astreintes
$iduser=$this->get("session")->get("iduser");
if($iduser=="all") if($iduser=="all")
$penaltys=$em->getRepository("App:Penalty")->findAll(); $penaltys=$em->getRepository("App:Penalty")->findAll();
else { else {
@@ -62,11 +99,9 @@ class EventController extends AbstractController
$user=$em->getRepository("App:User")->find($iduser); $user=$em->getRepository("App:User")->find($iduser);
$penaltys=$em->getRepository("App:Penalty")->findBy(["user"=>$user]); $penaltys=$em->getRepository("App:Penalty")->findBy(["user"=>$user]);
} }
foreach($penaltys as $penalty) { foreach($penaltys as $penalty) {
$tmp=$this->formatEvent($penalty); $tmp=$this->formatEvent($penalty);
array_push($tbevents,$tmp); array_push($tbevents,$tmp);
} }
// Breakday // Breakday
@@ -77,7 +112,6 @@ class EventController extends AbstractController
} }
// Retour // Retour
return new Response(json_encode($tbevents)); return new Response(json_encode($tbevents));
} }
@@ -94,6 +128,7 @@ class EventController extends AbstractController
$am = ($request->request->get('am')=="true"); $am = ($request->request->get('am')=="true");
$ap = ($request->request->get('ap')=="true"); $ap = ($request->request->get('ap')=="true");
$astreinte = ($request->request->get('astreinte')=="true"); $astreinte = ($request->request->get('astreinte')=="true");
$externaltrip = ($request->request->get('externaltrip')=="true");
$description = $request->request->get('description'); $description = $request->request->get('description');
$user = $em->getRepository("App:User")->find($iduser); $user = $em->getRepository("App:User")->find($iduser);
@@ -237,6 +272,7 @@ class EventController extends AbstractController
$event->setEnd($dateend); $event->setEnd($dateend);
$event->setDuration($duration); $event->setDuration($duration);
$event->setAllday($allday); $event->setAllday($allday);
$event->setExternalTrip($externaltrip);
$event->setDescription($description); $event->setDescription($description);
$event->setUser($user); $event->setUser($user);
$event->setTask($task); $event->setTask($task);
@@ -245,6 +281,12 @@ class EventController extends AbstractController
$em->persist($event); $em->persist($event);
$em->flush(); $em->flush();
if($task->getNature()->getIsvacation()){
$idevent=$event->getId();
$valid_url = $this->generateUrl('app_validationholiday');
$this->notificator->sendNotifAttenteValid("Congés en attente de validation", $iduser, $idevent, $valid_url);
}
$output=$this->formatEvent($event); $output=$this->formatEvent($event);
} }
@@ -260,7 +302,10 @@ class EventController extends AbstractController
$idevent = str_replace("A","",$request->request->get('idevent')); $idevent = str_replace("A","",$request->request->get('idevent'));
$iduser = $request->request->get('iduser'); $iduser = $request->request->get('iduser');
$idtask = $request->request->get('idtask'); $idtask = $request->request->get('idtask');
$am = ($request->request->get('am')=="true");
$ap = ($request->request->get('ap')=="true");
$fgastreinte = ($request->request->get('fgastreinte')=="true"); $fgastreinte = ($request->request->get('fgastreinte')=="true");
$externaltrip = ($request->request->get('externaltrip')=="true");
$description = $request->request->get('description'); $description = $request->request->get('description');
$user = $em->getRepository("App:User")->find($iduser); $user = $em->getRepository("App:User")->find($iduser);
@@ -316,8 +361,74 @@ class EventController extends AbstractController
return new Response(json_encode($output)); 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=[];
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 (sizeof($tbevent)>0) {
$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));
}
}
// Modification de l'évenement // Modification de l'évenement
$event->setStart($datestart);
$event->setEnd($dateend);
$event->setDescription($description); $event->setDescription($description);
$event->setDuration($duration);
$event->setAllday($allday);
$event->setExternalTrip($externaltrip);
$event->setUser($user); $event->setUser($user);
$event->setTask($task); $event->setTask($task);
@@ -326,7 +437,6 @@ class EventController extends AbstractController
$output=$this->formatEvent($event); $output=$this->formatEvent($event);
} }
return new Response(json_encode($output)); return new Response(json_encode($output));
} }
@@ -400,15 +510,18 @@ class EventController extends AbstractController
"borderColor" => $event->getTask()->getColor(), "borderColor" => $event->getTask()->getColor(),
"textColor" => "#ffffff", "textColor" => "#ffffff",
"allDay" => $event->getAllday(), "allDay" => $event->getAllday(),
"holiday" => $event->getTask()->getNature()->getIsvacation(),
"externaltrip" => ($event instanceof Penalty?false:$event->getExternalTrip()),
"editable" => $editable, "editable" => $editable,
"durationEditable" => false, "durationEditable" => false,
"extendedProps" => [ "extendedProps" => [
"fulldescription" => ($event instanceof Penalty?"ASTREINTE\n":"").strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription(), "fulldescription" => ($event instanceof Penalty?"ASTREINTE\n":"").strtoupper($event->getTask()->getDisplayname())."\n\n".$event->getDescription(),
"description" => $event->getDescription(), "description" => $event->getDescription(),
"userid" => $event->getUser()->getId(), "userid" => $event->getUser()->getId(),
"username" => $event->getUser()->getUsername(),
"taskid" => $event->getTask()->getId(), "taskid" => $event->getTask()->getId(),
"avatar" => "/".$this->getParameter("appAlias")."/uploads/avatar/".$event->getUser()->getAvatar(), "avatar" => "/".$this->getParameter("appAlias")."/uploads/avatar/".$event->getUser()->getAvatar(),
"estimate" => $event->getTask()->getDuration($event->getEnd())." / ".$event->getTask()->getQuantity(), "estimate" => !$event->getTask()->getNature()->getIsvacation() ? $event->getTask()->getDuration($event->getEnd())." / ".$event->getTask()->getQuantity(): "",
"locked" => $event->getValidate()||$event->getValidateholiday(), "locked" => $event->getValidate()||$event->getValidateholiday(),
"editable" => $editable, "editable" => $editable,
"astreinte" => ($event instanceof Penalty) "astreinte" => ($event instanceof Penalty)
@@ -429,12 +542,15 @@ class EventController extends AbstractController
"borderColor" => "#cdcdcd", "borderColor" => "#cdcdcd",
"textColor" => "#ffffff", "textColor" => "#ffffff",
"allDay" => true, "allDay" => true,
"externaltrip" => false,
"holiday" => false,
"editable" => false, "editable" => false,
"durationEditable" => false, "durationEditable" => false,
"extendedProps" => [ "extendedProps" => [
"fulldescription" => "Jour Férié", "fulldescription" => "Jour Férié",
"description" => "Jour Férié", "description" => "Jour Férié",
"userid" => null, "userid" => null,
"username" => "",
"taskid" => null, "taskid" => null,
"avatar" => "/".$this->getParameter("appAlias")."/uploads/avatar/".$this->getUser()->getAvatar(), "avatar" => "/".$this->getParameter("appAlias")."/uploads/avatar/".$this->getUser()->getAvatar(),
"estimate" => "", "estimate" => "",

View File

@@ -0,0 +1,477 @@
<?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();
// 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;
}
}

View File

@@ -146,8 +146,15 @@ class JobController extends AbstractController
if($error) if($error)
return $this->redirectToRoute($this->route."_update",["id"=>$id]); return $this->redirectToRoute($this->route."_update",["id"=>$id]);
else { else {
try {
$em->remove($data); $em->remove($data);
$em->flush(); $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 // Retour à la liste
return $this->redirectToRoute($this->route); return $this->redirectToRoute($this->route);

View File

@@ -129,8 +129,15 @@ class NatureController extends AbstractController
if($error) if($error)
return $this->redirectToRoute($this->route."_update",["id"=>$id]); return $this->redirectToRoute($this->route."_update",["id"=>$id]);
else { else {
try {
$em->remove($data); $em->remove($data);
$em->flush(); $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 // Retour à la liste
return $this->redirectToRoute($this->route); return $this->redirectToRoute($this->route);

View File

@@ -17,9 +17,13 @@ class OfferController extends AbstractController
private $route = "app_offer"; private $route = "app_offer";
private $render = "Offer/"; private $render = "Offer/";
private $entity = "App:Offer"; private $entity = "App:Offer";
private $dolibarrapi;
private $knpSnappy; private $knpSnappy;
public function __construct(\Knp\Snappy\Pdf $knpSnappy) { $this->knpSnappy = $knpSnappy; } public function __construct(\Knp\Snappy\Pdf $knpSnappy, \App\Service\dolibarrApi $dolibarrapi) {
$this->knpSnappy = $knpSnappy;
$this->dolibarrapi = $dolibarrapi;
}
public function list(Request $request) public function list(Request $request)
{ {
@@ -44,6 +48,7 @@ class OfferController extends AbstractController
"services" => $services, "services" => $services,
"useheader" => true, "useheader" => true,
"usesidebar" => true, "usesidebar" => true,
"doliactive" => $this->getParameter('doliActive'),
]); ]);
} }
} }
@@ -53,7 +58,6 @@ class OfferController extends AbstractController
// Initialisation de l'enregistrement // Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
$data = new Entity(); $data = new Entity();
// Création du formulaire // Création du formulaire
$form = $this->createForm(Form::class,$data,array("mode"=>"submit")); $form = $this->createForm(Form::class,$data,array("mode"=>"submit"));
@@ -82,7 +86,52 @@ class OfferController extends AbstractController
'form' => $form->createView() 'form' => $form->createView()
]); ]);
} }
public function convert($type, $id, Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data = new Entity();
$order = $this->dolibarrapi->getOrder($id, $type);
if (isset($order["ref_customer"]) && $order["ref_customer"]!= ""){
$data->setRef($order["ref_customer"]);
}
if (isset($order["ref"]) && $order["ref"]!= ""){
$data->setRef($order["ref"]);
}
$data->setName($order["customer_name"]);
$data->setQuantity($order["total_qty"]);
// 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();
$data->setIddolibarr($order["id"]);
$data->setTypedolibarr($type);
$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) public function update($id,Request $request)
{ {
// Initialisation de l'enregistrement // Initialisation de l'enregistrement
@@ -146,8 +195,15 @@ class OfferController extends AbstractController
if($error) if($error)
return $this->redirectToRoute($this->route."_update",["id"=>$id]); return $this->redirectToRoute($this->route."_update",["id"=>$id]);
else { else {
try {
$em->remove($data); $em->remove($data);
$em->flush(); $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 // Retour à la liste
return $this->redirectToRoute($this->route); return $this->redirectToRoute($this->route);
@@ -163,8 +219,66 @@ class OfferController extends AbstractController
$this->get('session')->set('activeoffer',!$this->get('session')->get('activeoffer')); $this->get('session')->set('activeoffer',!$this->get('session')->get('activeoffer'));
return $this->redirectToRoute($this->route); return $this->redirectToRoute($this->route);
} }
public function getorders(){
$em = $this->getDoctrine()->getManager();
$orders = $this->dolibarrapi->getOrders();
$propals = $this->dolibarrapi->getPropals();
$tborders = [];
foreach($orders as $order){
if (intval($order["statut"]> 0)){
$exist1 = $em->getRepository($this->entity)->findOneBy(['ref' => $order["ref"]]);
$exist2 = $em->getRepository($this->entity)->findOneBy(['ref' => $order["ref_client"]]);
if (!$exist1 && !$exist2) {
$torder["id"]=$order["id"];
$torder["customer_name"]=$order["customer_name"];
$torder["ref"]=$order["ref"];
$torder["ref_client"]=$order["ref_client"];
$torder["statut"]=$order["statut"];
$torder["total_ht"]=$order["total_ht"];
$torder["total_tva"]=$order["total_tva"];
$torder["total_ttc"]=$order["total_ttc"];
$torder["type"] = "commande";
array_push($tborders, $torder);
}
}
}
foreach($propals as $propal){
if (intval($propal["statut"]> 1)){
$exist1 = false;
$exist2 = false;
if ($propal["ref"] != ""){
$exist1 = $em->getRepository($this->entity)->findOneBy(['ref' => $propal["ref"]]);
}
if ($propal["ref_client"] != ""){
$exist2 = $em->getRepository($this->entity)->findOneBy(['ref' => $propal["ref_client"]]);
}
if (!$exist1 && !$exist2) {
$tpropal["id"]=$propal["id"];
$tpropal["customer_name"]=$propal["customer_name"];
$tpropal["ref"]=$propal["ref"];
$tpropal["ref_client"]=$propal["ref_client"];
$tpropal["statut"]=$propal["statut"];
$tpropal["total_ht"]=$propal["total_ht"];
$tpropal["total_tva"]=$propal["total_tva"];
$tpropal["total_ttc"]=$propal["total_ttc"];
$tpropal["type"] = "propal";
array_push($tborders, $tpropal);
}
}
}
return $this->render($this->render.'getorders.html.twig', [
'useheader' => true,
'usesidebar' => true,
'orders' => $tborders
]);
}
protected function getErrorForm($id,$form,$request,$data,$mode) { protected function getErrorForm($id,$form,$request,$data,$mode) {
if ($form->get('submit')->isClicked()&&$mode=="delete") { if ($form->get('submit')->isClicked()&&$mode=="delete") {
} }

View File

@@ -150,8 +150,16 @@ class ProjectController extends AbstractController
if($error) if($error)
return $this->redirectToRoute($this->route."_update",["id"=>$id]); return $this->redirectToRoute($this->route."_update",["id"=>$id]);
else { else {
try {
$em->remove($data); $em->remove($data);
$em->flush(); $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(); $this->refreshsession();
// Retour à la liste // Retour à la liste
@@ -175,12 +183,12 @@ class ProjectController extends AbstractController
->from("App:Project","project") ->from("App:Project","project")
->from("App:Customer", "customer") ->from("App:Customer", "customer")
->where("project.name LIKE :value") ->where("project.name LIKE :value")
->orWhere("customer.name LIKE :value")
->andWhere("project.customer=customer") ->andWhere("project.customer=customer")
->andWhere("customer.name LIKE :value")
->setParameter("value", "%".$q."%") ->setParameter("value", "%".$q."%")
->orderBy('customer.name'); ->orderBy('customer.name');
$datas=$qb->setFirstResult(0)->setMaxResults($page_limit)->getQuery()->getResult(); $datas=$qb->setFirstResult(0)->getQuery()->getResult();
foreach($datas as $data) { foreach($datas as $data) {
array_push($output,array("id"=>$data->getId(),"text"=>$data->getDisplayname())); array_push($output,array("id"=>$data->getId(),"text"=>$data->getDisplayname()));
} }

View File

@@ -6,6 +6,7 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse; use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
class ReportController extends AbstractController class ReportController extends AbstractController
{ {
@@ -15,7 +16,6 @@ class ReportController extends AbstractController
public function synthese(Request $request) public function synthese(Request $request)
{ {
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
$nbmonth=$this->get("session")->get("nbmonth"); $nbmonth=$this->get("session")->get("nbmonth");
$iduser=$this->get("session")->get("iduser"); $iduser=$this->get("session")->get("iduser");
@@ -122,6 +122,7 @@ class ReportController extends AbstractController
} }
} }
// On formate le tableau des astreintes // On formate le tableau des astreintes
$start=new \Datetime('first day of this month'); $start=new \Datetime('first day of this month');
$start->modify('last Monday'); $start->modify('last Monday');
@@ -205,6 +206,7 @@ class ReportController extends AbstractController
); );
} }
else { else {
return $this->render('Report/synthese.html.twig',[ return $this->render('Report/synthese.html.twig',[
"useheader" => true, "useheader" => true,
"usesidebar" => ($this->getUser()), "usesidebar" => ($this->getUser()),
@@ -297,7 +299,8 @@ class ReportController extends AbstractController
"monthid"=> $start->format("Ym"), "monthid"=> $start->format("Ym"),
"monthlabel"=>$start->format("m/Y"), "monthlabel"=>$start->format("m/Y"),
"days"=>[], "days"=>[],
"users"=>[] "users"=>[],
"tasks"=>[]
]; ];
// Init du tableau des utilisateurs pour le mois // Init du tableau des utilisateurs pour le mois
@@ -309,7 +312,32 @@ class ReportController extends AbstractController
]; ];
$tbproject["months"][$start->format("Ym")]["users"][$user->getId()]=$tbuser; $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')
->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')); $start->add(new \DateInterval('P1M'));
} }
@@ -513,11 +541,13 @@ class ReportController extends AbstractController
"beforeastreinte"=>[], "beforeastreinte"=>[],
"months"=>[], "months"=>[],
"offers"=>[], "offers"=>[],
"weeks"=>[],
]; ];
// Somme event validé avant la date // Somme event validé avant la date
$end=new \Datetime('first day of this month'); $end=new \Datetime('first day of this month');
$end->sub(new \DateInterval('P'.$nbmonth.'M')); $end->sub(new \DateInterval('P'.$nbmonth.'M'));
$end->setTime(23,59,0);
$events = $em $events = $em
->createQueryBuilder('event') ->createQueryBuilder('event')
->select('event') ->select('event')
@@ -533,19 +563,19 @@ class ReportController extends AbstractController
->orderBy('event.start') ->orderBy('event.start')
->getQuery()->getResult(); ->getQuery()->getResult();
foreach($events as $event) { foreach($events as $event) {
if(!isset($tbproject["before"][$event->getStart()->format("Ym")])) { if(!isset($tbproject["before"][$event->getStart()->format("Y")][$event->getStart()->format("Ym")])) {
$tbproject["before"][$event->getStart()->format("Ym")] = [ $tbproject["before"][$event->getStart()->format("Y")][$event->getStart()->format("Ym")] = [
"idmonth" => $event->getStart()->format("Ym"), "idmonth" => $event->getStart()->format("Ym"),
"monthlabel"=>$event->getStart()->format("m/Y"), "monthlabel"=>$event->getStart()->format("m/Y"),
"duration" => 0, "duration" => 0,
]; ];
} }
$tbproject["before"][$event->getStart()->format("Ym")]["duration"]=$tbproject["before"][$event->getStart()->format("Ym")]["duration"]+$event->getDuration(); $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 // Somme astreinte validé avant la date
$end=new \Datetime('first day of this month'); $end=new \Datetime('first day of this month');
$end->sub(new \DateInterval('P'.$nbmonth.'M')); $end->sub(new \DateInterval('P'.$nbmonth.'M'));
$end->setTime(23,59,0);
$penaltys = $em $penaltys = $em
->createQueryBuilder('penalty') ->createQueryBuilder('penalty')
->select('penalty') ->select('penalty')
@@ -561,17 +591,101 @@ class ReportController extends AbstractController
->orderBy('penalty.start') ->orderBy('penalty.start')
->getQuery()->getResult(); ->getQuery()->getResult();
foreach($penaltys as $penalty) { foreach($penaltys as $penalty) {
if(!isset($tbproject["beforeastreinte"][$penalty->getStart()->format("Ym")])) { if(!isset($tbproject["beforeastreinte"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("Ym")])) {
$tbproject["beforeastreinte"][$penalty->getStart()->format("Ym")] = [ $tbproject["beforeastreinte"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("Ym")] = [
"idmonth" => $penalty->getStart()->format("Ym"), "idmonth" => $penalty->getStart()->format("Ym"),
"monthlabel"=>$penalty->getStart()->format("m/Y"), "monthlabel"=>$penalty->getStart()->format("m/Y"),
"duration" => 0, "duration" => 0,
]; ];
} }
$tbproject["beforeastreinte"][$penalty->getStart()->format("Ym")]["duration"]=$tbproject["beforeastreinte"][$penalty->getStart()->format("Ym")]["duration"]+$penalty->getDuration(); $tbproject["beforeastreinte"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("Ym")]["duration"]=$tbproject["beforeastreinte"][$penalty->getStart()->format("Y")][$penalty->getStart()->format("Ym")]["duration"]+$penalty->getDuration();
} }
// Recap des propositions // 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()]); $offers=$em->getRepository("App:Offer")->findBy(["project"=>$project->getId()]);
foreach($offers as $offer) { foreach($offers as $offer) {
$tbproject["offers"][$offer->getId()] = [ $tbproject["offers"][$offer->getId()] = [
@@ -584,9 +698,11 @@ class ReportController extends AbstractController
// Formater les mois // Formater les mois
$start=new \Datetime('first day of this month'); $start=new \Datetime('first day of this month');
$start->sub(new \DateInterval('P'.$nbmonth.'M')); $start->sub(new \DateInterval('P'.$nbmonth.'M'));
$start->setTime(0,0,0);
$end=new \Datetime('first day of this month'); $end=new \Datetime('first day of this month');
$end->add(new \DateInterval('P'.$nbmonth.'M')); $end->add(new \DateInterval('P'.$nbmonth.'M'));
$end->sub(new \DateInterval('P1D')); $end->sub(new \DateInterval('P1D'));
$end->setTime(23,59,0);
while($start<$end) { while($start<$end) {
$tbproject["months"][$start->format("Ym")]=[ $tbproject["months"][$start->format("Ym")]=[
"monthid"=> $start->format("Ym"), "monthid"=> $start->format("Ym"),
@@ -609,7 +725,6 @@ class ReportController extends AbstractController
// Init des taches par mois // Init des taches par mois
$endmonth=clone $start; $endmonth=clone $start;
$endmonth->add(new \DateInterval('P1M')); $endmonth->add(new \DateInterval('P1M'));
$events = $em $events = $em
->createQueryBuilder('event') ->createQueryBuilder('event')
->select('task.id, task.name, SUM(event.duration) as somme') ->select('task.id, task.name, SUM(event.duration) as somme')
@@ -617,8 +732,8 @@ class ReportController extends AbstractController
->from('App:Event','event') ->from('App:Event','event')
->Where('task.project=:project') ->Where('task.project=:project')
->andWhere('event.task=task') ->andWhere('event.task=task')
->andWhere('event.end >=:start') ->andWhere('event.end >:start')
->andWhere('event.end <:end') ->andWhere('event.end <=:end')
->andWhere('event.validate=:validate') ->andWhere('event.validate=:validate')
->setParameter('project',$project) ->setParameter('project',$project)
->setParameter('validate',true) ->setParameter('validate',true)
@@ -641,10 +756,10 @@ class ReportController extends AbstractController
// Formater les jours // Formater les jours
$start=new \Datetime('first day of this month'); $start=new \Datetime('first day of this month');
$start->sub(new \DateInterval('P'.$nbmonth.'M')); $start->sub(new \DateInterval('P'.$nbmonth.'M'));
$start->setTime(0,0,0);
$end=new \Datetime('first day of this month'); $end=new \Datetime('first day of this month');
$end->add(new \DateInterval('P'.$nbmonth.'M')); $end->add(new \DateInterval('P'.$nbmonth.'M'));
$end->sub(new \DateInterval('P1D')); $end->sub(new \DateInterval('P1D'));
while($start<$end) { while($start<$end) {
$tbday=[ $tbday=[
"date"=>clone $start, "date"=>clone $start,
@@ -670,14 +785,14 @@ class ReportController extends AbstractController
} }
$tbprojects[$project->getId()]=$tbproject; $tbprojects[$project->getId()]=$tbproject;
} }
// Formater les utilisateurs // Formater les utilisateurs
$start=new \Datetime('first day of this month'); $start=new \Datetime('first day of this month');
$start->sub(new \DateInterval('P'.$nbmonth.'M')); $start->sub(new \DateInterval('P'.$nbmonth.'M'));
$start->setTime(0,0,0);
$end=new \Datetime('first day of this month'); $end=new \Datetime('first day of this month');
$end->add(new \DateInterval('P'.$nbmonth.'M')); $end->add(new \DateInterval('P'.$nbmonth.'M'));
$end->sub(new \DateInterval('P1D')); $end->sub(new \DateInterval('P1D'));
$end->setTime(23,59,0);
foreach($users as $user) { foreach($users as $user) {
$tbevents = $this->getEventuser($user,$start,$end,true); $tbevents = $this->getEventuser($user,$start,$end,true);
@@ -695,7 +810,6 @@ class ReportController extends AbstractController
} }
} }
} }
// Cumule // Cumule
foreach($tbprojects as $project) { foreach($tbprojects as $project) {
foreach($project["months"] as $month) { foreach($project["months"] as $month) {
@@ -761,7 +875,6 @@ class ReportController extends AbstractController
private function getEventuser($user,$start,$end,$onlyvalidate) { private function getEventuser($user,$start,$end,$onlyvalidate) {
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
$tbevents=[]; $tbevents=[];
// Récupération de event // Récupération de event
$qb = $em $qb = $em
->createQueryBuilder('event') ->createQueryBuilder('event')
@@ -816,7 +929,7 @@ class ReportController extends AbstractController
]; ];
} }
$tbevents[$idproject][$idday]["duration"]=($event->getAllday()?1:0.5); $tbevents[$idproject][$idday]["duration"]+=($event->getAllday()?1:0.5);
$st->add(new \DateInterval('P1D')); $st->add(new \DateInterval('P1D'));
@@ -954,9 +1067,9 @@ class ReportController extends AbstractController
"usesidebar" => ($this->getUser()), "usesidebar" => ($this->getUser()),
"users" => $tbevents "users" => $tbevents
]); ]);
}
}
}
}
public function activeholiday() { public function activeholiday() {
$this->get('session')->set('activeholiday',!$this->get('session')->get('activeholiday')); $this->get('session')->set('activeholiday',!$this->get('session')->get('activeholiday'));
@@ -988,3 +1101,4 @@ class ReportController extends AbstractController
} }
} }
} }

View File

@@ -97,7 +97,7 @@ class SecurityController extends AbstractController
$user->setPassword("CASPWD-".$username); $user->setPassword("CASPWD-".$username);
$user->setSalt("CASPWD-".$username); $user->setSalt("CASPWD-".$username);
$user->setRoles(["ROLE_USER"]); $user->setRole("ROLE_USER");
$em->persist($user); $em->persist($user);
$em->flush(); $em->flush();
@@ -132,26 +132,14 @@ class SecurityController extends AbstractController
public function logout() { public function logout() {
$auth_mode=$this->getParameter("appAuth");
switch($auth_mode) {
case "MYSQL":
return $this->logoutMYSQL();
break;
case "CAS":
return $this->logoutCAS();
break;
}
}
public function logoutMYSQL() {
$this->get('security.token_storage')->setToken(null); $this->get('security.token_storage')->setToken(null);
$this->get('session')->invalidate(); $this->get('session')->invalidate();
return $this->redirect($this->generateUrl("app_home")); return $this->redirect($this->generateUrl("cnous_portal_homepage"));
} }
public function logoutcas() { public function logoutcas() {
// Init Client CAS // Init Client CAS
\phpCAS::setDebug('/var/www/html/schedule/var/log/cas.log'); \phpCAS::setDebug('/var/www/html/schedule/var/log/cas.log');
@@ -162,7 +150,5 @@ class SecurityController extends AbstractController
// Logout // Logout
$url=$this->generateUrl('app_home', array(), UrlGeneratorInterface::ABSOLUTE_URL); $url=$this->generateUrl('app_home', array(), UrlGeneratorInterface::ABSOLUTE_URL);
\phpCAS::logout(array("service"=>$url)); \phpCAS::logout(array("service"=>$url));
return true;
} }
} }

View File

@@ -146,8 +146,15 @@ class ServiceController extends AbstractController
if($error) if($error)
return $this->redirectToRoute($this->route."_update",["id"=>$id]); return $this->redirectToRoute($this->route."_update",["id"=>$id]);
else { else {
try {
$em->remove($data); $em->remove($data);
$em->flush(); $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 // Retour à la liste
return $this->redirectToRoute($this->route); return $this->redirectToRoute($this->route);

View File

@@ -0,0 +1,156 @@
<?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 Symfony\Component\HttpFoundation\JsonResponse;
use App\Entity\Service as Entity;
use App\Form\ServiceType as Form;
class StatController extends AbstractController
{
private $knpSnappy;
public function __construct(\Knp\Snappy\Pdf $knpSnappy) { $this->knpSnappy = $knpSnappy; }
public function view(Request $request)
{
$em = $this->getDoctrine()->getManager();
$natures = $em->getRepository("App:Nature")->findAll();
$tbnatures=[];
foreach($natures as $nature) {
$tbnatures[$nature->getId()]=[
"id"=>$nature->getId(),
"name"=>$nature->getName(),
"totalmonth"=> 0,
"totalservice"=> 0,
"totalnature" => 0,
];
}
$services = $em->getRepository("App:Service")->findAll();
$tbservices=[];
foreach($services as $service) {
$tbservices[$service->getId()] = [
"id"=>$service->getId(),
"name"=>$service->getName(),
"natures"=>$tbnatures,
];
}
$tbmonths=[];
$now=new \Datetime("now");
//$now->add(new \DateInterval('P3M'));
$yend= $now->format("Y");
$ystart=$yend-2;
for($i=$ystart;$i<=$yend;$i++) {
for($j=1;$j<=12;$j++) {
$id=$i.str_pad($j, 2, '0', STR_PAD_LEFT);
$name=$i."-".str_pad($j, 2, '0', STR_PAD_LEFT);
$tbmonths[$id]= [
"id"=>$id,
"name"=>$name,
"services"=>$tbservices,
"natures"=>$tbnatures,
];
}
}
foreach($tbmonths as $keymonth => $month) {
$start=new \Datetime($month["id"]."01");
$end=new \Datetime($month["id"]."01");
$end->add(new \DateInterval('P1M'));
$events = $em
->createQueryBuilder('event')
->select('SUM(event.duration) as somme')
->from('App:Event','event')
->andWhere('event.start >=:start')
->andWhere('event.end <:end')
->setParameter('start',$start)
->setParameter('end',$end)
->getQuery()->getResult();
$totalmonth=($events[0]["somme"]?$events[0]["somme"]:0);
foreach($month["natures"] as $keynature => $nature) {
$events = $em
->createQueryBuilder('event')
->select('SUM(event.duration) as somme')
->from('App:Task','task')
->from('App:Event','event')
->andWhere('task.nature=:nature')
->andWhere('event.task=task')
->andWhere('event.start >=:start')
->andWhere('event.end <:end')
->setParameter('nature',$nature["id"])
->setParameter('start',$start)
->setParameter('end',$end)
->getQuery()->getResult();
$tbmonths[$keymonth]["natures"][$keynature]["totalnature"]=($events[0]["somme"]?$events[0]["somme"]:0);
$tbmonths[$keymonth]["natures"][$keynature]["totalmonth"]=$totalmonth;
$tbmonths[$keymonth]["natures"][$keynature]["totalservice"]=0;
}
foreach($month["services"] as $keyservice => $service) {
$events = $em
->createQueryBuilder('event')
->select('SUM(event.duration) as somme')
->from('App:Event','event')
->from('App:User','user')
->andWhere('event.start >=:start')
->andWhere('event.end <:end')
->andWhere('event.user=user')
->andWhere('user.service=:service')
->setParameter('start',$start)
->setParameter('end',$end)
->setParameter('service',$service["id"])
->getQuery()->getResult();
$totalservice=($events[0]["somme"]?$events[0]["somme"]:0);
foreach($service["natures"] as $keynature => $nature) {
$events = $em
->createQueryBuilder('event')
->select('SUM(event.duration) as somme')
->from('App:Task','task')
->from('App:Event','event')
->from('App:User','user')
->andWhere('task.nature=:nature')
->andWhere('event.task=task')
->andWhere('event.start >=:start')
->andWhere('event.end <:end')
->andWhere('event.user=user')
->andWhere('user.service=:service')
->setParameter('nature',$nature["id"])
->setParameter('start',$start)
->setParameter('end',$end)
->setParameter('service',$service["id"])
->getQuery()->getResult();
//echo $keymonth." ".$service["id"]." ".$service["name"]." ".$nature["name"]." = ".$events[0]["somme"]."<br>";
$tbmonths[$keymonth]["services"][$keyservice]["natures"][$keynature]["totalnature"]=($events[0]["somme"]?$events[0]["somme"]:0);
$tbmonths[$keymonth]["services"][$keyservice]["natures"][$keynature]["totalmonth"]=$totalmonth;
$tbmonths[$keymonth]["services"][$keyservice]["natures"][$keynature]["totalservice"]=$totalservice;
}
}
}
//return new JsonResponse($tbmonths);
return $this->render('Stat/view.html.twig',[
"useheader" => true,
"usesidebar" => true,
"tbmonths" => $tbmonths,
"tbnatures" => $tbnatures,
"tbservices" => $tbservices,
]);
}
}

View File

@@ -53,7 +53,8 @@ class TaskController extends AbstractController
// Initialisation de l'enregistrement // Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
$data = new Entity(); $data = new Entity();
$defaultnature = $em->getRepository("App:Nature")->findOneBy(['name' => 'Prestation']);
$data->setNature($defaultnature);
// Création du formulaire // Création du formulaire
$form = $this->createForm(Form::class,$data,array("mode"=>"submit")); $form = $this->createForm(Form::class,$data,array("mode"=>"submit"));
@@ -146,8 +147,15 @@ class TaskController extends AbstractController
if($error) if($error)
return $this->redirectToRoute($this->route."_update",["id"=>$id]); return $this->redirectToRoute($this->route."_update",["id"=>$id]);
else { else {
try {
$em->remove($data); $em->remove($data);
$em->flush(); $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 // Retour à la liste
return $this->redirectToRoute($this->route); return $this->redirectToRoute($this->route);

View File

@@ -0,0 +1,283 @@
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\Timer as Entity;
use App\Form\TimerType as Form;
class TimerController extends AbstractController
{
private $data = "timer";
private $route = "app_timer";
private $render = "Timer/";
private $entity = "App:Timer";
public function list(Request $request)
{
$em = $this->getDoctrine()->getManager();
$iduser = $this->get("session")->get("iduser");
$user = $em->getRepository("App:User")->find($iduser);
$projects= $em->getRepository("App:Project")->findBy(["active"=>true]);
$timers = $em->getRepository("App:Timer")->findBy(["user"=>$iduser]);
return $this->render($this->render.'list.html.twig',[
"useheader" => true,
"usesidebar" => true,
"user" => $user,
"projects" => $projects,
"timers" => $timers,
]);
}
public function view(Request $request)
{
$em = $this->getDoctrine()->getManager();
$iduser = $this->get("session")->get("iduser");
$user = $em->getRepository("App:User")->find($iduser);
$tasks = $em->getRepository("App:Task")->findAll();
$timers = $em->getRepository("App:Timer")->findBy(["user"=>$iduser]);
return $this->render($this->render.'list.cal.html.twig',[
"useheader" => true,
"usesidebar" => true,
"user" => $user,
"tasks" => $tasks,
"timers" => $timers,
]);
}
public function load(Request $request)
{
$em = $this->getDoctrine()->getManager();
$tbtimers=[];
// Evenements
$iduser=$this->get("session")->get("iduser");
if($iduser=="all")
$timers=$em->getRepository("App:Timer")->findAll();
else {
$iduser=$this->get("session")->get("iduser");
$user=$em->getRepository("App:User")->find($iduser);
$timers=$em->getRepository("App:Timer")->findBy(["user"=>$user]);
}
foreach($timers as $timer) {
$tmp=$this->formatTimer($timer);
array_push($tbtimers,$tmp);
}
// Retour
return new Response(json_encode($tbtimers));
}
public function create(Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$iduser = $this->get("session")->get("iduser");
$user = $em->getRepository("App:User")->find($iduser);
$taskid = $request->request->get('taskid');
$description = $request->request->get('description');
$task = $em->getRepository("App:Task")->find($taskid);
$start = \DateTime::createFromFormat('D M d Y H:i:s e+',$request->request->get('start'));
$end = \DateTime::createFromFormat('D M d Y H:i:s e+',$request->request->get('end'));
$duration = new \DateTime(date("H:i:s", ($request->request->get('duration')/1000)));
$duration->sub(new \DateInterval('PT1H'));
$activepenalty = $request->request->get('activepenalty');
$additionalhour= $request->request->get('additionalhour');
$officeworkstart = clone $start;
$officeworkend = clone $officeworkstart;
$officeworkstart->SetTime(9,0,0);
$officeworkend->SetTime(17,30,0);
$timer = new Entity();
$timer->setUser($user);
$timer->setTask($task);
$timer->setStart($start);
$timer->setEnd($end);
$timer->setDuration($duration);
$timer->setDescription($description);
$timer->setActivePenalty($activepenalty ? $activepenalty : false);
if ($start < $officeworkstart || $end > $officeworkend) {
$timer->setAdditionalHour(true);
}else{
$timer->setAdditionalHour($additionalhour ? $additionalhour : false);
}
$em->persist($timer);
$em->flush();
$output=["return"=>"OK"];
return new Response(json_encode($output));
}
public function submit(Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data = new Entity();
$iduser = $this->get("session")->get("iduser");
$user = $em->getRepository("App:User")->find($iduser);
// 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();
$data->setUser($user);
$start = $data->getStart();
$end = $data->getEnd();
$additionalhour = $data->getAdditionalHour();
$officeworkstart = clone $start;
$officeworkend = clone $officeworkstart;
$uStart = explode(":",$this->getParameter('officeHourStart'));
$uEnd = explode(":",$this->getParameter('officeHourEnd'));
$officeworkstart->SetTime(intval($uStart[0]),intval($uStart[1]),0);
$officeworkend->SetTime(intval($uEnd[0]),intval($uEnd[1]),0);
if ($start < $officeworkstart || $end > $officeworkend) {
$data->setAdditionalHour(true);
}else{
$data->setAdditionalHour($additionalhour);
}
$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);
}
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());
}
}
}
public function formatTimer($timer) {
$tmp= [
"id"=> $timer->getId(),
"title" => $timer->getTask()->getDisplayname(),
"start" => $timer->getStart()->format("Y-m-d H:i"),
"end" => $timer->getEnd()->format("Y-m-d H:i"),
"backgroundColor" => $timer->getTask()->getColor(),
"borderColor" => $timer->getTask()->getColor(),
"textColor" => "#ffffff",
"allDay" => false,
"editable" => true,
"durationEditable" => false,
"extendedProps" => [
"fulldescription" => $timer->getTask()->getDisplayname()."\n\n".$timer->getDescription(),
"description" => $timer->getDescription(),
"userid" => $timer->getUser()->getId(),
"username" => $timer->getUser()->getUsername(),
"taskid" => $timer->getTask()->getId(),
"avatar" => "/".$this->getParameter("appAlias")."/uploads/avatar/".$timer->getUser()->getAvatar(),
"estimate" => $timer->getDuration()->format("H:i"),
"locked" => false,
"editable" => true,
"astreinte" => false
]
];
return $tmp;
}
}

View File

@@ -202,8 +202,16 @@ class UserController extends AbstractController
if($error) if($error)
return $this->redirectToRoute($this->route."_update",["id"=>$id]); return $this->redirectToRoute($this->route."_update",["id"=>$id]);
else { else {
try {
$em->remove($data); $em->remove($data);
$em->flush(); $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(); $this->refreshsession();
// Retour à la liste // Retour à la liste

View File

@@ -10,7 +10,11 @@ use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
class ValidationController extends AbstractController class ValidationController extends AbstractController
{ {
private $knpSnappy; private $knpSnappy;
public function __construct(\Knp\Snappy\Pdf $knpSnappy) { $this->knpSnappy = $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) public function validation(Request $request)
{ {
@@ -510,6 +514,9 @@ class ValidationController extends AbstractController
$event->setValidateholiday(true); $event->setValidateholiday(true);
$em->persist($event); $em->persist($event);
$em->flush(); $em->flush();
$iduser=$event->getUser()->getId();
$idevent=$event->getId();
$this->notificator->sendNotifValid("Congé validé", $iduser, $event);
} }
$output=[]; $output=[];
@@ -543,4 +550,126 @@ class ValidationController extends AbstractController
return $this->redirectToRoute("app_validationholiday"); 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

@@ -50,6 +50,12 @@ class Event
*/ */
private $allday; private $allday;
/**
* @ORM\Column(name="externaltrip", type="boolean")
*
*/
private $externaltrip;
/** /**
* @ORM\Column(name="validate", type="boolean") * @ORM\Column(name="validate", type="boolean")
* *
@@ -96,24 +102,24 @@ class Event
public function getStart(): ?\DateTimeInterface public function getStart(): ?\DateTimeInterface
{ {
return $this->start; return clone $this->start;
} }
public function setStart(\DateTimeInterface $start): self public function setStart(\DateTimeInterface $start): self
{ {
$this->start = $start; $this->start = clone $start;
return $this; return $this;
} }
public function getEnd(): ?\DateTimeInterface public function getEnd(): ?\DateTimeInterface
{ {
return $this->end; return clone $this->end;
} }
public function setEnd(\DateTimeInterface $end): self public function setEnd(\DateTimeInterface $end): self
{ {
$this->end = $end; $this->end = clone $end;
return $this; return $this;
} }
@@ -129,6 +135,17 @@ class Event
return $this; return $this;
} }
public function getExternalTrip(): ?bool
{
return $this->externaltrip;
}
public function setExternalTrip(bool $externaltrip): self
{
$this->externaltrip = $externaltrip;
return $this;
}
public function getValidate(): ?bool public function getValidate(): ?bool
{ {

View File

@@ -59,6 +59,17 @@ class Offer
*/ */
private $active; private $active;
/**
* @ORM\Column(name="iddolibarr", type="decimal", scale=5, nullable=true)
*
*/
private $iddolibarr;
/**
* @ORM\Column(name="typedolibarr", type="string", nullable=true)
*
*/
private $typedolibarr;
/** /**
* @ORM\ManyToOne(targetEntity="Project", inversedBy="offers") * @ORM\ManyToOne(targetEntity="Project", inversedBy="offers")
*/ */
@@ -145,7 +156,6 @@ class Offer
return $this; return $this;
} }
public function getProject(): ?Project public function getProject(): ?Project
{ {
return $this->project; return $this->project;
@@ -158,5 +168,29 @@ class Offer
return $this; return $this;
} }
public function getIddolibarr(): ?string
{
return $this->iddolibarr;
}
public function setIddolibarr(?string $iddolibarr): self
{
$this->iddolibarr = $iddolibarr;
return $this;
}
public function getTypedolibarr(): ?string
{
return $this->typedolibarr;
}
public function setTypedolibarr(?string $typedolibarr): self
{
$this->typedolibarr = $typedolibarr;
return $this;
}
} }

View File

@@ -73,6 +73,10 @@ class Project
$this->tasks = new ArrayCollection(); $this->tasks = new ArrayCollection();
$this->userprojects = new ArrayCollection(); $this->userprojects = new ArrayCollection();
} }
public function __toString()
{
return $this->name;
}
public function getId(): ?int public function getId(): ?int
{ {

View File

@@ -61,6 +61,11 @@ class Task
*/ */
private $events; private $events;
/**
* @ORM\OneToMany(targetEntity="Timer", mappedBy="task", cascade={"persist"}, orphanRemoval=false)
*/
private $timers;
/** /**
* @ORM\OneToMany(targetEntity="Penalty", mappedBy="task", cascade={"persist"}, orphanRemoval=false) * @ORM\OneToMany(targetEntity="Penalty", mappedBy="task", cascade={"persist"}, orphanRemoval=false)
*/ */
@@ -90,6 +95,7 @@ class Task
public function __construct() public function __construct()
{ {
$this->events = new ArrayCollection(); $this->events = new ArrayCollection();
$this->timers = new ArrayCollection();
$this->penaltys = new ArrayCollection(); $this->penaltys = new ArrayCollection();
} }
@@ -191,6 +197,24 @@ class Task
return $this; return $this;
} }
/**
* @return Collection|Timer[]
*/
public function getTimers(): Collection
{
return $this->tasks;
}
public function addTimer(Timer $timer): self
{
if (!$this->timers->contains($timer)) {
$this->timers[] = $timer;
$timer->setTask($this);
}
return $this;
}
public function removeEvent(Event $event): self public function removeEvent(Event $event): self
{ {
if ($this->events->contains($event)) { if ($this->events->contains($event)) {
@@ -235,4 +259,17 @@ class Task
return $this; return $this;
} }
public function removeTimer(Timer $timer): self
{
if ($this->timers->contains($timer)) {
$this->timers->removeElement($timer);
// set the owning side to null (unless already changed)
if ($timer->getTask() === $this) {
$timer->setTask(null);
}
}
return $this;
}
} }

View File

@@ -0,0 +1,197 @@
<?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;
/**
* Timer
*
* @ORM\Table(name="timer")
* @ORM\Entity(repositoryClass="App\Repository\TimerRepository")
*/
class Timer
{
/**
* @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(name="duration", type="datetime")
*
*/
private $duration;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $description;
/**
* @ORM\ManyToOne(targetEntity="User")
*/
private $user;
/**
* @ORM\ManyToOne(targetEntity="Task", inversedBy="timers"))
*/
private $task;
/**
* @ORM\Column(name="activepenalty", type="boolean")
*
*/
private $activepenalty;
/**
* @ORM\Column(name="additionalhour", type="boolean")
*
*/
private $additionalhour;
/**
* @ORM\Column(name="validate", type="boolean")
*
*/
private $validate;
public function __construct()
{
$this->start = new \DateTime();
$this->end = new \DateTime();
$this->duration = new \DateTime();
$this->validate = false;
}
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 getDuration(): ?\DateTimeInterface
{
return $this->duration;
}
public function setDuration(\DateTimeInterface $duration): self
{
$this->duration = $duration;
return $this;
}
public function getDescription(): ?string
{
return $this->description;
}
public function setDescription(?string $description): self
{
$this->description = $description;
return $this;
}
public function getUser(): ?User
{
return $this->user;
}
public function setUser(?User $user): self
{
$this->user = $user;
return $this;
}
public function getTask(): ?Task
{
return $this->task;
}
public function setTask(?Task $task): self
{
$this->task = $task;
return $this;
}
public function getActivePenalty(): ?bool
{
return $this->activepenalty;
}
public function setActivePenalty(bool $activepenalty): self
{
$this->activepenalty = $activepenalty;
return $this;
}
public function getAdditionalHour(): ?bool
{
return $this->additionalhour;
}
public function setAdditionalHour(bool $additionalhour): self
{
$this->additionalhour = $additionalhour;
return $this;
}
public function getValidate(): ?bool
{
return $this->validate;
}
public function setValidate(bool $validate): self
{
$this->validate = $validate;
return $this;
}
}

View File

@@ -45,11 +45,18 @@ class ProjectType extends AbstractType
] ]
); );
$builder->add('customer', $builder->add('customer',
EntityType::class, [ EntityType::class, [
"class" => "App:Customer",
"label" => "Client", "label" => "Client",
"choice_label" => "name", "class" => "App:Customer",
"choice_label" => function ($customer) {
return $customer->getName();},
"disabled" => false,
"required" => true,
"multiple" => false,
"placeholder" => "Selectionner un Client",
] ]
); );

View File

@@ -74,8 +74,8 @@ class TaskType extends AbstractType
"class" => "App:Project", "class" => "App:Project",
"primary_key" => "id", "primary_key" => "id",
"text_property" => "displayname", "text_property" => "displayname",
"minimum_input_length" => 0, "minimum_input_length" => 2,
"page_limit" => 10, "page_limit" => 100,
"allow_clear" => true, "allow_clear" => true,
"delay" => 250, "delay" => 250,
"cache" => false, "cache" => false,

View File

@@ -0,0 +1,110 @@
<?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 Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\Extension\Core\Type\TimeType;
use Symfony\Component\Form\ChoiceList\ChoiceList;
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 TimerType 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('task',
EntityType::class, [
"label" => "Tâche",
"class" => "App:Task",
"choice_label" => function ($task) {
return $task->getDisplayname();},
"disabled" => false,
"required" => true,
"multiple" => false,
"placeholder" => "Selectionner une Tâche",
]
);
$builder->add('description',
TextType::class, [
"label" => "Description",
"required" => false
]
);
$builder->add("activepenalty",
ChoiceType::class,[
"label" => "Astreinte active",
"choices" => ["Non"=>false, "Oui"=>true]
]
);
$builder->add("additionalhour",
ChoiceType::class,[
"label" => "Heures supplémentaires",
"choices" => ["Non"=>false, "Oui"=>true]
]
);
$builder->add('start',
DateTimeType::class, [
"label" =>"Début",
"date_widget" => "single_text",
"time_widget" => "single_text",
"format" => "yyyy-MM-dd HH:mm",
]
);
$builder->add('end',
DateTimeType::class, [
"label" =>"Fin",
"date_widget" => "single_text",
"time_widget" => "single_text",
"format" => "yyyy-MM-dd HH:mm",
]
);
$builder->add('duration',
TimeType::class, [
"label" =>"Durée",
"widget" => "single_text",
]
);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'App\Entity\Timer',
'mode' => 'string',
));
}
}

View File

@@ -81,14 +81,14 @@ class ProjectRepository extends ServiceEntityRepository
public function sumEstimate($id) { public function sumEstimate($id) {
$qb = $this->createQueryBuilder('project') $qb = $this->createQueryBuilder('project')
->select('SUM(task.quantity) as somme1, SUM(task.validate) as somme2 ') ->select('SUM(task.quantity) as somme')
->from('App:Task','task') ->from('App:Task','task')
->Where('project.id=:id') ->Where('project.id=:id')
->andWhere('task.project=project') ->andWhere('task.project=project')
->setParameter('id',$id); ->setParameter('id',$id);
$result=$qb->getQuery()->getOneOrNullResult(); $result=$qb->getQuery()->getOneOrNullResult();
$estimate=($result["somme1"]?$result["somme1"]:0)+($result["somme2"]?$result["somme2"]:0); $estimate=($result["somme"]?$result["somme"]:0);
return $estimate; return $estimate;
} }
} }

View File

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

View File

@@ -0,0 +1,98 @@
<?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;
public function __construct(EntityManagerInterface $em, ContainerInterface $container, HttpClientInterface $client )
{
$this->em = $em;
$this->container = $container;
$this->client = $client;
$this->doliuri = $this->container->getParameter('doliUri');
}
public function getOrders() {
$start=new \Datetime();
$start->sub(new \DateInterval('P6M'));
$response = $this->client->request('GET',$this->doliuri."/api/index.php/orders?sortfield=t.rowid&sortorder=DESC&limit=100&sqlfilters=(t.date_creation%3A%3E%3A'".$start->format("Ymd")."')");
$content = $response->toArray();
$tbcontent = [];
foreach($content as $order){
$order['customer_name'] = $this->getCustomer($order['socid']);
$qty = 0;
foreach($order['lines'] as $line){
$qty = $qty + intval($line['qty']);
}
$order['total_qty'] = $qty;
array_push($tbcontent, $order);
}
return $tbcontent;
}
public function getOrder($id, $type) {
$start=new \Datetime();
$start->sub(new \DateInterval('P6M'));
$order=[];
if ($type =="commande") {
$response = $this->client->request('GET',$this->doliuri."/api/index.php/orders/".$id);
$order=$response->toArray();
}
if ($type =="propal") {
$response = $this->client->request('GET',$this->doliuri."/api/index.php/proposals/".$id);
$order=$response->toArray();
}
$order['customer_name'] = $this->getCustomer($order['socid']);
$qty = 0;
foreach($order['lines'] as $line){
$qty = $qty + intval($line['qty']);
}
$order['total_qty'] = $qty;
return $order;
}
public function getPropals() {
$start=new \Datetime();
$start->sub(new \DateInterval('P6M'));
$response = $this->client->request('GET',$this->doliuri."/api/index.php/proposals?sortfield=t.rowid&sortorder=DESC&limit=100&sqlfilters=(t.datec%3A%3E%3A'".$start->format("Ymd")."')");
$content = $response->toArray();
$tbcontent = [];
foreach($content as $propal){
$propal['customer_name'] = $this->getCustomer($propal['socid']);
$qty = 0;
foreach($propal['lines'] as $line){
$qty = $qty + intval($line['qty']);
}
$propal['total_qty'] = $qty;
//$propal['customer_name'] = $this->getCustomer($propal['socid']);
array_push( $tbcontent, $propal);
}
return $tbcontent;
}
public function getCustomer($customerid) {
$response = $this->client->request('GET',$this->doliuri."/api/index.php/thirdparties/".$customerid);
$content = $response->toArray();
return $content['name'];
}
}

View File

@@ -0,0 +1,102 @@
<?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();
$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

@@ -69,6 +69,7 @@ class sessionListener {
$session->set('activeproject',true); $session->set('activeproject',true);
$session->set('activeoffer',true); $session->set('activeoffer',true);
$session->set('activeholiday',true); $session->set('activeholiday',true);
$session->set('activetimer',true);
$session->set('nbmonth',3); $session->set('nbmonth',3);
if($curentuser!="anon.") { if($curentuser!="anon.") {
@@ -120,6 +121,7 @@ class sessionListener {
array_push($tbservices,$tmp); array_push($tbservices,$tmp);
} }
$session->set('services',$tbservices); $session->set('services',$tbservices);
} }
} }
} }

View File

@@ -21,23 +21,35 @@
.fc-title { .fc-title {
font-weight: bolder; font-weight: bolder;
font-size: 14px; font-size: 12px;
} }
.eventAvatar { .eventAvatar {
width: 40px; width: 20px;
margin: 0px 5px 0px 0px; margin: 0px 5px 0px 0px;
float: left; float: left;
} }
.eventInfo{ .eventInfo{
margin: -18px 5px 0px 0px; margin: -5px 5px 0px 0px;
clear: both;
}
.eventUser{
clear: both; clear: both;
} }
.eventEstimate { .eventEstimate {
margin: -3px 10px; margin: -3px 10px;
} }
.select2-results__group {
font-size:12px !important;
}
.select2-results__option{
font-size: 14px;
padding-left:15px
}
{% endblock %} {% endblock %}
{% block body %} {% block body %}
@@ -64,8 +76,13 @@
</label> </label>
<select class="select2entity" id="usersubmit" name="usersubmit"> <select class="select2entity" id="usersubmit" name="usersubmit">
{% if is_granted('ROLE_ADMIN') or is_granted('ROLE_MASTER') or is_granted('ROLE_VALIDATOR')%} {% if is_granted('ROLE_ADMIN') or is_granted('ROLE_MASTER') or is_granted('ROLE_VALIDATOR')%}
{% for user in users %}
<option value="{{user.id}}">{{user.displayname}}</option> {% for user in app.session.get('users') %}
{% set selected="" %}
{%if user.id==app.session.get('iduser') %}
{% set selected="selected" %}
{% endif %}
<option value="{{user.id}}" {{selected}}>{{user.displayname}}</option>
{% endfor %} {% endfor %}
{% else %} {% else %}
<option value="{{app.user.id}}">{{app.user.displayname}}</option> <option value="{{app.user.id}}">{{app.user.displayname}}</option>
@@ -79,9 +96,14 @@
</label> </label>
<select class="select2entity" id="tasksubmit" name="tasksubmit"> <select class="select2entity" id="tasksubmit" name="tasksubmit">
<option></option> <option></option>
{% for task in tasks %} {% for project in projects|sort((a, b) => a.displayname <=> b.displayname) %}
<optgroup label="{{project.displayname}}">
{% for task in project.tasks|sort((a, b) => a.displayname <=> b.displayname) %}
<option value="{{task.id}}">{{task.displayname}}</option> <option value="{{task.id}}">{{task.displayname}}</option>
{% endfor %} {% endfor %}
</optgroup>
{% endfor %}
</select> </select>
</div> </div>
@@ -105,6 +127,12 @@
<label class="custom-control-label" for="astreinte">Astreinte</label> <label class="custom-control-label" for="astreinte">Astreinte</label>
</div> </div>
</div> </div>
<div class="form-group">
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input" id="externaltrip">
<label class="custom-control-label" for="externaltrip">Déplacement externe</label>
</div>
</div>
<div class="form-group"> <div class="form-group">
<label for="description" class="control-label"> <label for="description" class="control-label">
@@ -153,19 +181,40 @@
{% endif %} {% endif %}
</select> </select>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="control-label required" for="taskupdate"> <label class="control-label required" for="taskupdate">
Project<span class="mandatory">*</span> Project<span class="mandatory">*</span>
</label> </label>
<select class="select2entity" id="taskupdate" name="taskupdate"> <select class="select2entity" id="taskupdate" name="taskupdate">
<option></option> <option></option>
{% for task in tasks %} {% for project in projects|sort((a, b) => a.displayname <=> b.displayname) %}
<optgroup label="{{project.displayname}}">
{% for task in project.tasks|sort((a, b) => a.displayname <=> b.displayname) %}
<option value="{{task.id}}">{{task.displayname}}</option> <option value="{{task.id}}">{{task.displayname}}</option>
{% endfor %} {% endfor %}
</optgroup>
{% endfor %}
</select> </select>
</div> </div>
<div class="form-group">
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input" id="amupdate">
<label class="custom-control-label" for="amupdate">Evènement sur la matinée</label>
</div>
</div>
<div class="form-group">
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input" id="apupdate">
<label class="custom-control-label" for="apupdate">Evènement sur l'après-midi</label>
</div>
</div>
<div class="form-group">
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input" id="externaltripupdate">
<label class="custom-control-label" for="externaltripupdate">Déplacement externe</label>
</div>
</div>
<div class="form-group"> <div class="form-group">
<label for="description" class="control-label"> <label for="description" class="control-label">
Description Description
@@ -215,30 +264,38 @@ $(document).ready(function() {
// Rendu d'un évenement // Rendu d'un évenement
function eventRender(info) { function eventRender(info) {
console.log(info.event.extendedProps);
// Récupération des divers élements du rendu event // Récupération des divers élements du rendu event
var content=$(info.el).children('.fc-content'); var content=$(info.el).children('.fc-content');
var title=$(content).children('.fc-title'); var title=$(content).children('.fc-title');
// Ajouter l'avatar // Ajouter l'avatar
content.prepend("<img src="+info.event.extendedProps.avatar+" class='eventAvatar'>"); content.prepend("<img src="+info.event.extendedProps.avatar+" class='eventAvatar'>");
content.append("<span class='eventUser float-left small'>"+info.event.extendedProps.username+"</span>");
var eventInfo=$(content).children('.eventUser');
// Ajout container // Ajout container
content.append("<span class='eventInfo float-right'></span>"); content.append("<span style='margin-top:-12px' class='eventInfo float-right'></span>");
var eventInfo=$(content).children('.eventInfo'); var eventInfo=$(content).children('.eventInfo');
// Ajouter le verrou si event non editable // Ajouter le verrou si event non editable
if(info.event.extendedProps.locked) { if(info.event.extendedProps.locked) {
eventInfo.append("<i class='fa fa-lock float-right'></i>"); eventInfo.append("<i class='fa fa-lock float-right'></i>");
} }
if(info.event.extendedProps.externaltrip) {
eventInfo.append("<i class='fas fa-bed float-right'></i>");
}
if(info.event.extendedProps.holiday) {
eventInfo.append("<i class='fas fa-umbrella-beach float-right'></i>");
}
// Ajout estimation // Ajout estimation
eventInfo.append("<span class='eventEstimate float-right'>"+info.event.extendedProps.estimate+"</span>"); eventInfo.append("<span class='eventEstimate float-right small'>"+info.event.extendedProps.estimate+"</span>");
// Description // Description
content.attr("title",info.event.extendedProps.fulldescription); content.attr("title",info.event.extendedProps.fulldescription);
} }
// Formulaire Création d'un évelement // Formulaire Création d'un événement
var allDay; var allDay;
function eventSelect(selectionInfo) { function eventSelect(selectionInfo) {
var start=moment(selectionInfo.start); var start=moment(selectionInfo.start);
@@ -284,6 +341,7 @@ function eventSelect(selectionInfo) {
$('#modalsubmit #end').val(end.format("YYYY-MM-DD")); $('#modalsubmit #end').val(end.format("YYYY-MM-DD"));
$('#modalsubmit #description').val(""); $('#modalsubmit #description').val("");
$('#modalsubmit #externaltrip').prop("checked",false);
$("#modalsubmit .alert").remove(); $("#modalsubmit .alert").remove();
@@ -291,24 +349,64 @@ function eventSelect(selectionInfo) {
$('#modalsubmit').modal(); $('#modalsubmit').modal();
} }
// Formulaire Modification d'un évelement // Formulaire Modification d'un événement
function eventClick(info) { function eventClick(info) {
if(info.event.extendedProps.editable) { if(info.event.extendedProps.editable) {
console.log(info.event.id); console.log(info.event);
var id=info.event.id; var id=info.event.id;
var description=info.event.extendedProps.description; var description=info.event.extendedProps.description;
var userid=info.event.extendedProps.userid; var userid=info.event.extendedProps.userid;
var taskid=info.event.extendedProps.taskid; var taskid=info.event.extendedProps.taskid;
var fgastreinte=info.event.extendedProps.astreinte; var fgastreinte=info.event.extendedProps.astreinte;
var eventallday = info.event.allDay;
var eventstart = info.event.start;
var eventend = info.event.end;
var externaltrip = info.event.extendedProps.externaltrip;
var holiday = info.event.extendedProps.holiday;
$('#userupdate').val(userid).trigger("change"); $('#userupdate').val(userid).trigger("change");
$('#taskupdate').val(taskid).trigger("change"); $('#taskupdate').val(taskid).trigger("change");
$('#modalupdate #idevent').val(id); $('#modalupdate #idevent').val(id);
$('#modalupdate #fgastreinte').val(fgastreinte); $('#modalupdate #fgastreinte').val(fgastreinte);
$('#modalupdate #description').val(description); $('#modalupdate #description').val(description);
if (holiday) {
$('#modalupdate #externaltripupdate').prop("checked",false);
$('#modalupdate #externaltripupdate').prop("disabled",true);
}else{
$('#modalupdate #externaltripupdate').prop("disabled",false);
$('#modalupdate #externaltripupdate').prop("checked",externaltrip);
}
$("#modalupdate .alert").remove(); $("#modalupdate .alert").remove();
eDayStart=eventstart.toString().split(" ")[2]
eDayEnd=eventend.toString().split(" ")[2]
if ((eDayEnd - eDayStart) >1) {
$('#modalupdate #amupdate').prop("checked",true);
$('#modalupdate #apupdate').prop("checked",true);
$('#modalupdate #amupdate').prop("disabled",true);
$('#modalupdate #apupdate').prop("disabled",true);
}else{
$('#modalupdate #amupdate').prop("disabled",false);
$('#modalupdate #apupdate').prop("disabled",false);
if (!eventallday){
eStart = eventstart.toString().split(" ")[4].split(":")[0]
//eEnd = eventend.toString().split(" ")[4].split(":")[0]
//AM
if (eStart == 09){
$('#modalupdate #amupdate').prop("checked",true);
$('#modalupdate #apupdate').prop("checked",false);
}
//AP
if (eStart == 13){
$('#modalupdate #amupdate').prop("checked",false);
$('#modalupdate #apupdate').prop("checked",true);
}
}else{
$('#modalupdate #amupdate').prop("checked",true);
$('#modalupdate #apupdate').prop("checked",true);
}
}
// Formulaire de création d'un évènement // Formulaire de création d'un évènement
$('#modalupdate').modal(); $('#modalupdate').modal();
@@ -343,6 +441,7 @@ function eventSubmit() {
am: $("#modalsubmit #amsubmit").prop("checked"), am: $("#modalsubmit #amsubmit").prop("checked"),
ap: $("#modalsubmit #apsubmit").prop("checked"), ap: $("#modalsubmit #apsubmit").prop("checked"),
astreinte: $("#modalsubmit #astreinte").prop("checked"), astreinte: $("#modalsubmit #astreinte").prop("checked"),
externaltrip: $("#modalsubmit #externaltrip").prop("checked"),
description: $("#modalsubmit #description").val() description: $("#modalsubmit #description").val()
}, },
url: "{{ path('app_event_submit') }}", url: "{{ path('app_event_submit') }}",
@@ -371,7 +470,10 @@ function eventUpdate() {
idevent: $("#modalupdate #idevent").val(), idevent: $("#modalupdate #idevent").val(),
iduser: $("#userupdate").val(), iduser: $("#userupdate").val(),
idtask: $("#taskupdate").val(), idtask: $("#taskupdate").val(),
am: $("#modalupdate #amupdate").prop("checked"),
ap: $("#modalupdate #apupdate").prop("checked"),
fgastreinte: $("#modalupdate #fgastreinte").val(), fgastreinte: $("#modalupdate #fgastreinte").val(),
externaltrip: $("#modalupdate #externaltripupdate").prop("checked"),
description: $("#modalupdate #description").val() description: $("#modalupdate #description").val()
}, },
url: "{{ path('app_event_update') }}", url: "{{ path('app_event_update') }}",
@@ -419,7 +521,6 @@ function eventDelete() {
// On change astreinte // On change astreinte
$("#astreinte").change(function() { $("#astreinte").change(function() {
console.log(allDay)
if(this.checked) { if(this.checked) {
$("#amsubmit").prop("disabled",true); $("#amsubmit").prop("disabled",true);
$("#apsubmit").prop("disabled",true); $("#apsubmit").prop("disabled",true);

View File

@@ -0,0 +1,8 @@
{% block body %}
Utilisateur;Jour;Journée entière;Astreinte;AM;AP;Taches;AM;Tache AM;AP;Tache AP;Astreinte;Description Astreintes
{% for user in users %}
{% for day, event in user.events %}
{{ user.user.displayname }};{{day}};{{event.allday}};{{event.astreinte}};{{event.am}};{{event.ap}};{{event.descriptionday|trim}} {{event.descriptionam|trim}} {{event.descriptionap|trim}} {{event.descriptionastreinte|trim}}
{% endfor %}
{% endfor %}
{% endblock %}

View File

@@ -0,0 +1,8 @@
{% block body %}
Client;Projet;Proposition;Ref;Qt;PU;Total;
{% for project in projects %}
{% for offer in project.offers %}
{{ project.customer }};{{project.name}};{{offer.name}};{{offer.ref}};{{offer.quantity}};{{offer.pu}};{{offer.total}}
{% endfor %}
{% endfor %}
{% endblock %}

View File

@@ -0,0 +1,6 @@
{% block body %}
Tâche;Astr.Act;H.Supp;Utilisateur;Début;Fin;Durée;Description;
{% for timer in timers %}
{{timer.taskname}};{{timer.activepenalty}};{{timer.additionalhour}};{{timer.user}};{{timer.start|date("d/m/Y H:i")}};{{timer.end|date("d/m/Y H:i")}};{{timer.duration|date("H:i")}};{{timer.description}};
{% endfor %}
{% endblock %}

View File

@@ -0,0 +1,16 @@
{% block body %}
Client;Projet;Tâche;Nature;Utilisateur;Année;Semaine;Cumul;
{% for project in projects %}
{% if project.weeks_by_task_by_user is defined %}
{% for year,weeks in project.weeks_by_task_by_user %}
{% for week in weeks %}
{% for task in week.tasks%}
{% for user in task.users%}
{{project.customer}};{{project.name}};{{task.taskname|replace({"&": "et"})}};{{task.nature}};{{user.displayname}};{{week.isoyear}};{{week.isoweek}};{{user.cumul|replace({".": ","})}};
{% endfor %}
{% endfor %}
{% endfor %}
{% endfor %}
{% endif %}
{% endfor %}
{% endblock %}

View File

@@ -0,0 +1,46 @@
{% extends "base.html.twig" %}
{% block body %}
<h1 class="page-header">
EXPORTS DE DONNEES
</h1>
<div class="card">
<div class="card-header">
<a href="{{ path('export_project_weekly') }}" class="btn btn-success">Export des Projets par semaine par participant</a>
</div>
<div class="card-body">
<p>Exporter le cumul des points éffectués sur un/des projets, par tâche par utilisateur.</p>
<p>Filtres utiles : Nombres de mois, Projet, Service</p>
</div>
</div>
<p></p>
<div class="card">
<div class="card-header">
<a class="btn btn-success" href={{ path('app_export_penalty_additional') }}>Export des astreintes actives et heures supplémentaires</a>
</div>
<div class="card-body">
<p>Exporter la liste des astreintes actives réalisés, ainsi que les saisies en heure supplémentaires.</p>
<p>Filtres utiles : Intervenant (hors "Tout le monde")</p>
</div>
</div>
<p></p>
<div class="card">
<div class="card-header">
<a class="btn btn-success" href={{ path('export_full_worked_days') }}>Export des jours pleins travaillés</a>
</div>
<div class="card-body">
<p>Exporter la liste des jours travaillés pleinement éligibles aux tickets restaurants</p>
<p>Filtres utiles : Nombre de mois, Intervenant</p>
</div>
</div>
<p></p>
<div class="card">
<div class="card-header">
<a class="btn btn-success" href={{ path('export_offers') }}>Export des commandes</a>
</div>
<div class="card-body">
<p>Exporter la liste des commandes</p>
<p>Filtres utiles : Projet, Service</p>
</div>
</div>
<p></p>
{% endblock %}

View File

@@ -0,0 +1,25 @@
{% block body %}
{% autoescape %}
<h2>Date de la demande : {{ date|date("d/m/Y H:i") }} </h2>
<p>
<b>Utilisateur =</b> {{ username }}
</p>
<p>
<b>Début =</b> {{ start|date("d/m/Y H:i") }}
</p>
<p>
<b>Fin =</b> {{ end|date("d/m/Y H:i") }}
</p>
<p>
<b>Durée =</b> {{ duration }}
</p>
<p>
<b>Type =</b> Congé
</p>
<p>
<b>Lien pour valider =</b> {{ valid_link }}
</p>
{% endautoescape %}
{% endblock %}

View File

@@ -0,0 +1,23 @@
{% block body %}
{% autoescape %}
<h2>VALIDATION</h2>
<p>
<b>Utilisateur =</b> {{ username }}
</p>
<p>
<b>Début =</b> {{ start|date("d/m/Y H:i") }}
</p>
<p>
<b>Fin =</b> {{ end|date("d/m/Y H:i") }}
</p>
<p>
<b>Durée =</b> {{ duration }}
</p>
<p>
<b>Type =</b> Congé
</p>
{% endautoescape %}
{% endblock %}

View File

@@ -4,11 +4,11 @@
{{ form_start(form) }} {{ form_start(form) }}
<h1 class="page-header"> <h1 class="page-header">
{% if fgprint is defined and fgprint %} {% if fgprint is defined and fgprint %}
PROPOSITION COMMANDE
{% elseif mode=="update" %} {% elseif mode=="update" %}
Modification PROPOSITION Modification COMMANDE
{% elseif mode=="submit" %} {% elseif mode=="submit" %}
Création PROPOSITION Création COMMANDE
{% endif %} {% endif %}
</h1> </h1>

View File

@@ -0,0 +1,75 @@
{% extends "base.html.twig" %}
{% block localstyle %}
td {
padding:5px !important;
}
{% if fgprint is defined and fgprint %}
table { font-size:10px;}
th,td {
border: 1px solid #37474F;
}
thead {
display: table-header-group;
}
tr { page-break-inside: avoid; }
{%endif%}
{% endblock %}
{% block body %}
<h1 class="page-header">
Nouvelles Commandes Dolibarr
</h1>
<p>Liste des dernières commandes/propal récupérées depuis Dolibarr.<br>
Les commandes doivent avoir un statut "Validée", et le Propal un statut "Signée" pour apparaître dans la liste.</p>
<div class="card">
<div class="dataTable_wrapper">
<table class="table table-striped table-bordered table-hover small" id="dataTables" style="width:100%">
<thead>
<tr>
<th width="70px" class="no-sort no-print">Action</th>
<th width="300px">client</th>
<th width="150px">ref</th>
<th width="150px">ref_client</th>
<th width="50">statut</th>
<th width="100px" class="text-center no-sort no-string">total_ht</th>
<th width="100px" class="text-center no-sort no-string">total_tva</th>
<th width="100px" class="text-center no-sort no-string">total_ttc</th>
</tr>
</thead>
<tbody>
{% for order in orders %}
<tr>
<td class="no-print">
<a href="{{path("app_offer_convert", {type:order.type, id:order.id})}}"><i class="fas fa-file-download"></i></a>
</td>
<td>{{order.customer_name}}</td>
{% if order.type =="commande" %}<td><a href="https://doli.cadoles.com/dolibarr/commande/card.php?id={{order.id}}" target="_blank">{{order.ref}}</td>{% endif %}
{% if order.type =="propal" %}<td><a href="https://doli.cadoles.com/dolibarr/comm/propal/card.php?id={{order.id}}" target="_blank">{{order.ref}}</td>{% endif %}
<td>{{order.ref_client}}</td>
<td>{{order.statut}}</td>
<td class="text-right">{{order.total_ht|number_format(2, '.', ' ')}}</td>
<td class="text-right">{{order.total_tva|number_format(2, '.', ' ')}}</td>
<td class="text-right">{{order.total_ttc|number_format(2, '.', ' ')}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endblock %}
{% block localjavascript %}
$(document).ready(function() {
$('#dataTables').DataTable({
columnDefs: [ { "targets": "no-sort", "orderable": false }, { "targets": "no-string", "type" : "num" } ],
responsive: true,
iDisplayLength: 100,
order: [[ 2, "asc" ]]
});
});
{% endblock %}

View File

@@ -18,10 +18,13 @@
{% block body %} {% block body %}
<h1 class="page-header"> <h1 class="page-header">
PROPOSITIONS COMMANDES
</h1> </h1>
<a class="btn btn-success" href={{ path('app_offer_submit') }}>Ajouter</a> <a class="btn btn-success" href={{ path('app_offer_submit') }}>Ajouter</a>
{% if doliactive == "true" %}
<a class="btn btn-success" href={{ path('app_offer_getorders') }}>Récupérer les commandes de Dolibarr</a>
{% endif %}
<div class="custom-control custom-switch float-right"> <div class="custom-control custom-switch float-right">
<input type="checkbox" class="custom-control-input" id="switchactiveproject" {% if app.session.get('activeproject') %} checked {% endif %}> <input type="checkbox" class="custom-control-input" id="switchactiveproject" {% if app.session.get('activeproject') %} checked {% endif %}>
@@ -84,6 +87,10 @@
<td>{{offer.project.customer.name}}</td> <td>{{offer.project.customer.name}}</td>
<td>{{offer.project.name}}</td> <td>{{offer.project.name}}</td>
<td>{{offer.name}}</td> <td>{{offer.name}}</td>
{%if offer.iddolibarr %}
{% if offer.typedolibarr == "commande" %}<td><a href="https://doli.cadoles.com/dolibarr/commande/card.php?id={{offer.iddolibarr}}" target="_blank">{{offer.ref}}</td>{% endif %}
{% if offer.typedolibarr == "propal" %}<td><a href="https://doli.cadoles.com/dolibarr/comm/propal/card.php?id={{offer.iddolibarr}}" target="_blank">{{offer.ref}}</td>{% endif %}
{% endif %}
<td>{{offer.ref}}</td> <td>{{offer.ref}}</td>
<td class="text-right">{{offer.quantity|number_format(2, '.', ' ')}}</td> <td class="text-right">{{offer.quantity|number_format(2, '.', ' ')}}</td>
<td class="text-right">{{offer.pu|number_format(2, '.', ' ')}}</td> <td class="text-right">{{offer.pu|number_format(2, '.', ' ')}}</td>

View File

@@ -61,6 +61,7 @@
{% endblock %} {% endblock %}
{% block localjavascript %} {% block localjavascript %}
$("#project_customer").addClass("select2entity");
$(document).ready(function() { $(document).ready(function() {
$("#project_name").focus(); $("#project_name").focus();
}); });

View File

@@ -69,7 +69,12 @@
<tr> <tr>
<td class="no-print"> <td class="no-print">
<a href="{{path("app_project_update",{id:project.id})}}"><i class="fa fa-file"></i></a> <a href="{{path("app_project_update",{id:project.id})}}"><i class="fa fa-file"></i></a>
<a href="{{path("app_project_users",{id:project.id})}}"><i class="fa fa-users"></i></a> <a href="{{path("app_project_users",{id:project.id})}}"
data-toggle="tooltip"
data-placement="right"
data-html="true"
title="{% for user in project.userprojects %}<b>{{user.user.username}}:</b> {{user.job.name}} <br />{% endfor %}"
><i class="fa fa-users"></i></a>
</td> </td>
<td>{{project.customer.name}}</td> <td>{{project.customer.name}}</td>
@@ -89,7 +94,7 @@
{% for task in project.tasks %} {% for task in project.tasks %}
{% set tottask=tottask+task.quantity %} {% set tottask=tottask+task.quantity %}
{% set totvalidate=totvalidate+task.validate %}
{% set totplanified=totplanified+task.validate %} {% set totplanified=totplanified+task.validate %}
{% for event in task.events %} {% for event in task.events %}
{% set totplanified=totplanified+event.duration %} {% set totplanified=totplanified+event.duration %}
@@ -130,6 +135,9 @@
{% endblock %} {% endblock %}
{% block localjavascript %} {% block localjavascript %}
$(function () {
$('[data-toggle="tooltip"]').tooltip()
})
$(document).ready(function() { $(document).ready(function() {
{% if not fgprint is defined or not fgprint %} {% if not fgprint is defined or not fgprint %}
$('.table').DataTable({ $('.table').DataTable({

View File

@@ -99,9 +99,10 @@
<h2>{{ project.displayname }}</h2> <h2>{{ project.displayname }}</h2>
<div class="synthese"> <div class="synthese">
Estimé = {{ project.estimate }}<br> Estimé = {{ project.estimate }}<br>
Commandé = {{ project.proposed }}<br>
Validé = {{ project.validate }}<br> Validé = {{ project.validate }}<br>
Planifié = {{ project.planified }}<br> Planifié = {{ project.planified }}<br>
<b>RESTE = {{ (project.estimate - project.validate - project.planified) }}</b> <b>RESTE = {{ ( project.proposed - project.validate - project.planified) }}</b>
</div> </div>
</div> </div>
@@ -141,6 +142,32 @@
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>
{% if month.total > 0 %}
<br>
<table class="recaptask small">
{% for task in month.tasks %}
<tr>
<td>{{ task.displayname }}</td>
<td class="text-right">{{ task.duration|number_format(2, '.', ' ') }}</td>
</tr>
{% endfor %}
{% if month.totala > 0 %}
<tr>
<td>Astreinte</td>
<td class="text-right">{{ month.totala|number_format(2, '.', ' ') }}</td>
</tr>
{% endif %}
<tfoot>
<tr>
<td style="min-width:200px">TOTAL</td>
<td class="text-right" style="min-width:100px">{{ (month.total + month.totala)|number_format(2, '.', ' ') }}</td>
</tr>
</tfoot>
</table>
{% endif %}
{% if month.total > 0 %} {% if month.total > 0 %}
<i>Total = {{ month.total }}</i> <i>Total = {{ month.total }}</i>
{% endif %} {% endif %}

View File

@@ -93,7 +93,6 @@
{% block body %} {% block body %}
{% if fgprint is defined and fgprint %}<h1>Planning</h1>{%endif%} {% if fgprint is defined and fgprint %}<h1>Planning</h1>{%endif%}
{% if access=="customer" and not app.user %} {% if access=="customer" and not app.user %}
<div class="no-print" style="margin-top:10px;"> <div class="no-print" style="margin-top:10px;">
<style> .select2-container { display:inline-block} </style> <style> .select2-container { display:inline-block} </style>
@@ -125,40 +124,9 @@
</div> </div>
<div class="card-body"> <div class="card-body">
<h4>RAPPORT</h4> <h3>RAPPORT</h3>
<div class="small"> <div class="small">
{% if project.hors!=0 %}
consommé avant = {{ project.hors }}<br>
{% endif %}
{% set bycolonne = max(10,((project.before|length)/3)|round) %}
{% set compteur = 0 %}
<div class="row">
<div class="col-md-4">
{% for month in project.before %}
{% set compteur = compteur + 1 %}
{% if compteur > bycolonne %}
</div>
<div class="col-md-4">
{% set compteur = 1 %}
{% endif %}
consommé le {{ month.monthlabel }} = {{ month.duration }}<br>
{% endfor %}
</div>
</div>
</div>
{% if not project.beforeastreinte is empty %}
<h4>ASTREINTE</h4>
{% set compteur = 0 %}
<div class="small">
{% for month in project.beforeastreinte %}
consommé le {{ month.monthlabel }} = {{ month.duration }}<br>
{% endfor %}
</div>
{% endif %}
<div class="new-page">&nbsp;</div> <div class="new-page">&nbsp;</div>
{% for month in project.months %} {% for month in project.months %}
@@ -221,10 +189,37 @@
</table> </table>
{% endif %} {% endif %}
<div class="new-page">&nbsp;</div>
{% endfor %} {% endfor %}
<h4>CUMUL HEBDOMADAIRE</h4>
<table>
{% for year, weeks in project.weeks %}
<thead>
<th class="text-center day">
{{ year}}
</th>
{% for week in weeks %}
<th class="text-center">
S{{ week.weeknumber}}
</th>
{% endfor %}
</thead>
<tr class="text-center">
<td class="text-center">
</td>
{% for week in weeks %}
<td class="text-center">
{{ week.cumul}}
</td>
{% endfor %}
</tr>
{% endfor %}
</table>
<div class="new-page">&nbsp;</div>
{% if not project.offers is empty %} {% if not project.offers is empty %}
<h4>COMMANDES</h4> <h4>COMMANDES</h4>
{% set count=(project.offers|length)-8 %} {% set count=(project.offers|length)-8 %}
@@ -334,7 +329,64 @@
<div class="new-page">&nbsp;</div> <div class="new-page">&nbsp;</div>
{% endif %} {% endif %}
<h4>CONSOMMATION PASSEE</h4>
{% if project.hors!=0 %}
Consommation précédente totale = {{ project.hors }}<br>
{% endif %}
<table>
{% for year in project.before %}
<thead>
<th class="text-center day">
Date
</th>
{% for month in year %}
<th class="text-center">
{{ month.monthlabel }}
</th>
{% endfor %}
</thead>
<tr class="text-center">
<td class="text-center">
Consommé
</td>
{% for month in year %}
<td class="text-center">
{{ month.duration }}
</td>
{% endfor %}
</tr>
{% endfor %}
</table>
{% if not project.beforeastreinte is empty %}
<h4>ASTREINTES PASSEES</h4>
<table>
{% for year in project.beforeastreinte %}
<thead>
<th class="text-center day">
Date
</th>
{% for month in year %}
<th class="text-center">
{{ month.monthlabel }}
</th>
{% endfor %}
</thead>
<tr class=" text-center">
<td class="text-center">
Consommé
</td>
{% for month in year %}
<td class="text-center">
{{ month.duration }}
</td>
{% endfor %}
</tr>
{% endfor %}
</table>
{% endif %}
</div> </div>
</div> </div>
{% endif %} {% endif %}

View File

@@ -66,6 +66,7 @@
<div class="card-body"> <div class="card-body">
<table> <table>
<thead> <thead>
<th>S</th>
<th>L</th> <th>L</th>
<th>M</th> <th>M</th>
<th>M</th> <th>M</th>
@@ -78,8 +79,8 @@
{% for event in user.events %} {% for event in user.events %}
{% if nbday==1 %} {% if nbday==1 %}
<tr> <tr>
<td class="date" style="vertical-align:middle">{{event.date|date("W")}}</td>
{% endif %} {% endif %}
<td> <td>
<div class="date">{{ event.date | date("d/m") }}</div> <div class="date">{{ event.date | date("d/m") }}</div>
{% if event.allday %} {% if event.allday %}

View File

@@ -0,0 +1,161 @@
{% extends 'base.html.twig' %}
{% block body %}
<h1 class="page-header">
STATISTIQUES
</h1>
<div class="row">
<div class="col-md-12">
<div class="card homecard" style="width: 100%; height: 520px;">
<div class="card-header">
CADOLES
</div>
<div class="card-body">
<div id="chart-c" style="height: 250px;"></div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card homecard" style="width: 100%; height: 520px;">
<div class="card-header">
DEV
</div>
<div class="card-body">
<div id="chart-1" style="height: 250px;"></div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card homecard" style="width: 100%; height: 520px;">
<div class="card-header">
CSS
</div>
<div class="card-body">
<div id="chart-3" style="height: 250px;"></div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block localjavascript %}
$(document).ready(function() {
graphCadoles();
graphDEV();
graphCSS();
});
function graphCadoles() {
new Morris.Line({
element: 'chart-c',
xkey: 'month',
ymax: 350,
ykeys: [
'Total',
{% for nature in tbnatures %}
'{{ nature.name }}',
{% endfor %}
],
data: [
{% for month in tbmonths %}
{ month: '{{ month.name }}',
{% for nature in month.natures %}
{% if loop.first %}
'Total': {{ nature.totalmonth }},
{% endif %}
'{{ nature.name }}': {{ nature.totalnature }},
{% endfor %}
},
{% endfor %}
],
labels: [
'Total',
{% for nature in tbnatures %}
'{{ nature.name }}',
{% endfor %}
]
});
}
function graphDEV() {
new Morris.Line({
element: 'chart-1',
xkey: 'month',
ymax: 160,
ykeys: [
'Total',
{% for nature in tbnatures %}
'{{ nature.name }}',
{% endfor %}
],
data: [
{% for month in tbmonths %}
{ month: '{{ month.name }}',
{% for nature in month.services[1].natures %}
{% if loop.first %}
'Total': {{ nature.totalservice }},
{% endif %}
'{{ nature.name }}': {{ nature.totalnature }},
{% endfor %}
},
{% endfor %}
],
labels: [
'Total',
{% for nature in tbnatures %}
'{{ nature.name }}',
{% endfor %}
]
});
}
function graphCSS() {
new Morris.Line({
element: 'chart-3',
xkey: 'month',
ymax: 160,
ykeys: [
'Total',
{% for nature in tbnatures %}
'{{ nature.name }}',
{% endfor %}
],
data: [
{% for month in tbmonths %}
{ month: '{{ month.name }}',
{% for nature in month.services[3].natures %}
{% if loop.first %}
'Total': {{ nature.totalservice }},
{% endif %}
'{{ nature.name }}': {{ nature.totalnature }},
{% endfor %}
},
{% endfor %}
],
labels: [
'Total',
{% for nature in tbnatures %}
'{{ nature.name }}',
{% endfor %}
]
});
}
{% endblock %}
{% block localexternalscript %}
<script src="//cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.min.js"></script>
{% endblock %}

View File

@@ -0,0 +1,112 @@
{% extends "base.html.twig" %}
{% block localstyle %}
td {
padding:5px !important;
}
{% endblock %}
{% block body %}
{{ form_start(form) }}
<h1 class="page-header">
{% if mode=="update" %}
Modification TIMER
{% elseif mode=="submit" %}
Création TIMER
{% endif %}
</h1>
{{ form_widget(form.submit) }}
<a class="btn btn-secondary" href={{ path('app_timer') }}>Annuler</a>
{% if mode=="update" %}
<a href="{{ path('app_timer_delete',{'id':timer.id}) }}"
class="btn btn-danger float-right"
data-method="delete"
data-confirm="Êtes-vous sûr de vouloir supprimer cet entregistrement ?">
Supprimer
</a>
{% endif %}
<br><br>
{% if app.session.flashbag.has('error') %}
<div class='alert alert-danger' style='margin: 5px 0px'>
<strong>Erreur</strong><br>
{% for flashMessage in app.session.flashbag.get('error') %}
{{ flashMessage }}<br>
{% endfor %}
</div>
{% endif %}
{% if app.session.flashbag.has('notice') %}
<div class='alert alert-info' style='margin: 5px 0px'>
<strong>Information</strong><br>
{% for flashMessage in app.session.flashbag.get('notice') %}
{{ flashMessage }}<br>
{% endfor %}
</div>
{% endif %}
<div class="card">
<div class="card-header">
<i class="fa fa-pencil-alt fa-fw"></i> Informations
</div>
<div class="card-body">
{{ form_row(form.task) }}
{{ form_row(form.description) }}
{{ form_row(form.activepenalty) }}
{{ form_row(form.additionalhour) }}
{{ form_row(form.start) }}
{{ form_row(form.end) }}
{{ form_row(form.duration) }}
</div>
</div>
{{ form_end(form) }}
{% endblock %}
{% block localjavascript %}
$("#timer_task").addClass("select2entity");
/*
* Pads this string with another string on the left until the resulting string
* has specified length. If the padding string has more than one character, the
* resulting string may be longer than desired (the padding string is not
* truncated and it is only prepended as a whole). Bad API, I know, but it's
* good enough for me.
*/
String.prototype.pad = function(length, padding) {
var result = this;
while (result.length < length) {
result = padding + result;
}
return result;
}
/* Some time constants. */
var MILISECONDS_IN_SECOND = 1000;
var MILISECONDS_IN_MINUTE = 60 * MILISECONDS_IN_SECOND;
var MINUTES_IN_HOUR = 60;
/* Formats the time in the H:MM format. */
function formatTime(time) {
var timeInMinutes = time / MILISECONDS_IN_MINUTE;
var hours = Math.floor(timeInMinutes / MINUTES_IN_HOUR);
var minutes = Math.floor(timeInMinutes - hours * MINUTES_IN_HOUR);
return String(hours).pad(2, "0") + ":" + String(minutes).pad(2, "0");
}
$("#timer_start_time,#timer_end_time").on('input',function(){
console.log($("#timer_start_date").val() +"T"+$("#timer_start_time").val()+":00Z")
console.log($("#timer_end_date").val()+"T"+$("#timer_end_time").val()+":00Z")
var start = Date.parse($("#timer_start_date").val() +"T"+$("#timer_start_time").val()+":00Z");
var end = Date.parse($("#timer_end_date").val()+"T"+$("#timer_end_time").val()+":00Z");
var diff = end - start;
$("#timer_duration").val(formatTime(diff))
})
{% endblock %}

View File

@@ -0,0 +1,186 @@
{% extends "base.html.twig" %}
{% block head_style %}
{{ encore_entry_link_tags('app') }}
{{ encore_entry_link_tags('fullcalendar') }}
{% endblock head_style %}
{% block localstyle %}
.fc-header-toolbar h2 {
text-transform: uppercase;
}
.fc-day-grid-event {
padding:0px;
border-radius:0px;
border: none;
}
.fc-content {
height: 40px;
}
.fc-title {
font-weight: bolder;
font-size: 12px;
}
.eventAvatar {
width: 20px;
margin: 0px 5px 0px 0px;
float: left;
}
.eventInfo{
margin: -5px 5px 0px 0px;
clear: both;
}
.eventUser{
clear: both;
}
.eventEstimate {
margin: -3px 10px;
}
{% endblock %}
{% block body %}
<div id="fullcalendar" style="width:100%; margin-top:10px;"></div>
{{ encore_entry_script_tags('fullcalendar') }}
{% endblock %}
{% block localjavascript %}
$(document).ready(function() {
$("#modalsubmit #user").select2({
theme: 'bootstrap4',
language: "fr"
});
$("#modalsubmit #task").select2({
placeholder: "Selectionnez un projet",
allowClear: true,
theme: 'bootstrap4',
language: "fr"
});
$("#modalupdate #user").select2({
theme: 'bootstrap4',
language: "fr"
});
$("#modalupdate #task").select2({
placeholder: "Selectionnez un projet",
theme: 'bootstrap4',
language: "fr"
});
});
// Rendu d'un évenement
function eventRender(info) {
console.log(info.event.extendedProps);
// Récupération des divers élements du rendu event
var content=$(info.el).children('.fc-content');
var title=$(content).children('.fc-title');
// Ajouter l'avatar
content.prepend("<img src="+info.event.extendedProps.avatar+" class='eventAvatar'>");
content.append("<span class='eventUser float-left small'>"+info.event.extendedProps.username+"</span>");
var eventInfo=$(content).children('.eventUser');
// Ajout container
content.append("<span class='eventInfo float-right'></span>");
var eventInfo=$(content).children('.eventInfo');
// Ajouter le verrou si event non editable
if(info.event.extendedProps.locked) {
eventInfo.append("<i class='fa fa-lock float-right'></i>");
}
// Ajout estimation
eventInfo.append("<span class='eventEstimate float-right small'>"+info.event.extendedProps.estimate+"</span>");
// Description
content.attr("title",info.event.extendedProps.fulldescription);
}
// Formulaire Création d'un évelement
var allDay;
function eventSelect(selectionInfo) {
var start=moment(selectionInfo.start);
var end=moment(selectionInfo.end);
var end=end.subtract(1, 'd');
allDay=(start.format("DD/MM/YYYY") != end.format("DD/MM/YYYY"));
// Controle
if(start.month()!=end.month()) {
alert("Une tâche ne peut être sur deux mois différents");
return false;
}
if(start.week()!=end.week()) {
alert("Une tâche ne peut être sur deux semaines différentes");
return false;
}
// Valeur par défaut
{% if (is_granted('ROLE_ADMIN') or is_granted('ROLE_VALIDATOR') or is_granted('ROLE_MASTER')) and app.session.get('iduser')!="all" %}
$('#usersubmit').val({{app.session.get('iduser')}}).trigger("change");
{% else %}
$('#usersubmit').val({{app.user.id}}).trigger("change");
{% endif %}
// Si jour de fin un samedi ou un dimanche : on est forcement en astreinte
if(moment(end).day()==0||moment(end).day()==6) {
$("#modalsubmit #astreinte").prop("checked",true);
$("#modalsubmit #astreinte").attr("disabled",true);
allDay=true;
}
else {
$("#modalsubmit #astreinte").prop('checked', false);
$("#modalsubmit #astreinte").attr('disabled', false);
}
$('#modalsubmit #amsubmit').prop("checked",true);
$('#modalsubmit #apsubmit').prop("checked",true);
$('#modalsubmit #amsubmit').attr("disabled",allDay);
$('#modalsubmit #apsubmit').attr("disabled",allDay);
$('#modalsubmit #start').val(start.format("YYYY-MM-DD"));
$('#modalsubmit #end').val(end.format("YYYY-MM-DD"));
$('#modalsubmit #description').val("");
$("#modalsubmit .alert").remove();
// Formulaire de création d'un évènement
$('#modalsubmit').modal();
}
// On change astreinte
$("#astreinte").change(function() {
console.log(allDay)
if(this.checked) {
$("#amsubmit").prop("disabled",true);
$("#apsubmit").prop("disabled",true);
$('#modalsubmit #amsubmit').prop("checked",true);
$('#modalsubmit #apsubmit').prop("checked",true);
}
else {
$("#amsubmit").prop("disabled",allDay);
$("#apsubmit").prop("disabled",allDay);
$('#modalsubmit #amsubmit').prop("checked",true);
$('#modalsubmit #apsubmit').prop("checked",true);
}
});
{% endblock %}

View File

@@ -0,0 +1,722 @@
{% extends "base.html.twig" %}
{% block localstyle %}
#timer-task {
width:300px;
}
#timer-desc {
width:300px;
}
.select2-results__group {
font-size:12px !important;
}
.select2-results__option{
font-size: 14px;
padding-left:15px
}
{% endblock %}
{% block body %}
<h1 class="page-header">
SUIVI HORAIRE
</h1>
<div id="timer" class="card">
<div class="card-header">
<a class="btn btn-success" style="float:right" href={{ path('app_timer_submit') }}>Créer un Timer</a>
{% if user %}
Lancer un Timer :
<select class="select2entity" id="timer-task" name="timer-task">
<option></option>
{% for project in projects|sort((a, b) => a.displayname <=> b.displayname) %}
<optgroup label="{{project.displayname}}">
{% for task in project.tasks|sort((a, b) => a.displayname <=> b.displayname) %}
<option value="{{task.id}}">{{task.displayname}}</option>
{% endfor %}
</optgroup>
{% endfor %}
</select>
<input id="timer-desc" name="timer-desc" placeholder="Description" />
<a href='#' title='Add' id='addtimer'>
<i class='fas fa-plus-circle'></i>
</a>
{% else %}
Veuillez choisir un Intervenant pour lancer un Timer.
{% endif %}
</div>
</div>
<div>
<table id="task-table" class="table table-striped table-hover" >
</table>
</div>
<a class="btn btn-success" href={{ path('app_timer_view') }}>Voir le calendrier</a>
<p></p>
<div class="dataTable_wrapper">
<table class="table table-striped table-bordered table-hover small" id="dataTables" style="width:100%">
<thead>
<tr>
<th width="70px" class="no-sort">Tâche</th>
<th width="150px" class="no-sort">Description</th>
<th width="150px">Début</th>
<th width="100px">Fin</th>
<th width="100px">Durée</th>
<th width="100px" class="text-center no-string">Actions</th>
</tr>
</thead>
<tbody>
{%for timer in timers %}
<tr>
<td>{{ timer.task.displayname }}</td>
<td>
<span class="font-weight-bold">
{{ timer.activepenalty ? "<i class='fa fa-exclamation' style='color:red;opacity: 0.33;'></i> Astreinte active" : "" }}
</span>
<span class="font-weight-bold">
{{ timer.additionalhour ? "<i class='fa fa-exclamation-triangle' style='color:red;opacity: 0.33;'></i> Heures supplémentaires" : "" }}
</span>
<p>{{ timer.description }}</p>
</td>
<td>{{ timer.start|date("d/m/Y H:i") }}</td>
<td>{{ timer.end|date("d/m/Y H:i") }}</td>
<td>{{ timer.duration|date("H:i") }}</td>
<td>
<a href="{{path("app_timer_update",{id:timer.id})}}">
<i class="fa fa-file"></i>
</a>
&nbsp;&nbsp;
<a href="{{ path('app_timer_delete',{'id':timer.id}) }}"
data-method="delete"
data-confirm="Êtes-vous sûr de vouloir supprimer cet entregistrement ?">
<i class="fa fa-trash-alt"></i>
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock %}
{% block localjavascript %}
/* Creates a new Task object. */
function Task(id ,name, description) {
this._name = name;
this._taskid = id;
this._description = description;
this._state = Task.State.STOPPED;
this._timeSpentInPreviousIterations = 0;
this._startDate = 0;
this._endDate = 0;
this._currentIterationStartTime = 0;
this._customTimeSpent = 0;
this._onChange = null;
}
/* Possible task states. */
Task.State = {
STOPPED: "stopped",
RUNNING: "running"
}
Task.prototype = {
/* Returns the task name. */
getName: function() {
return this._name;
},
/* Returns the task description. */
getDescription: function() {
if (this._description == "NaN") {
this._description = ""
}
return this._description;
},
/* Returns the task state. */
getState: function() {
return this._state;
},
/* Is the task stopped? */
isStopped: function() {
return this._state == Task.State.STOPPED;
},
/* Is the task running? */
isRunning: function() {
return this._state == Task.State.RUNNING;
},
/*
* Sets the "onChange" event handler. The "onChange" event is fired when the
* task is started, stopped, or reset.
*/
setOnChange: function(onChange) {
this._onChange = onChange;
},
/*
* Returns the time spent on the task in the current work iteration. Works
* correctly only when the task is running.
*/
_getCurrentIterationTime: function() {
return (new Date).getTime() - this._currentIterationStartTime;
},
/*
* Returns the total time spent on the task. This includes time spent in
* the current work iteration if the task is running.
*/
getTimeSpent: function() {
var result = this._timeSpentInPreviousIterations;
if (this._state == Task.State.RUNNING) {
result += this._getCurrentIterationTime();
}
return result;
},
/* Calls the "onChange" event handler if set. */
_callOnChange: function() {
if (typeof this._onChange == "function") {
this._onChange();
}
},
/* Starts a new task work iteration. */
start: function() {
if (this._state == Task.State.RUNNING) { return };
if (this._startDate == 0) {this._startDate = new Date()}
this._state = Task.State.RUNNING;
this._currentIterationStartTime = (new Date).getTime();
this._callOnChange();
},
/* Stops the current task work iteration. */
stop: function() {
if (this._state == Task.State.STOPPED) { return };
this._state = Task.State.STOPPED;
this._timeSpentInPreviousIterations += this._getCurrentIterationTime();
this._currentIterationStartTime = 0;
this._endDate = new Date();
this._callOnChange();
},
/* Stops the current task work iteration and resets the time data. */
reset: function() {
this.stop();
this._timeSpentInPreviousIterations = 0;
this._callOnChange();
},
save: function(task){
console.log(task)
$.ajax({
type: "POST",
data: {
taskname: task._name,
taskid: task._taskid,
description: task._description,
start: task._startDate,
end: task._endDate,
duration: task._timeSpentInPreviousIterations,
},
url: "{{ path('app_timer_create') }}",
success: function (response) {
response=JSON.parse(response);
if(response.return=="KO") {
$("#dataTable_wrapper").append("<div class='alert alert-danger' style='margin: 5px 0px'>"+response.error+"</div>");
}else{
location.reload();
}
}
});
},
/* Serializes the task into a string. */
serialize: function() {
/*
* Originally, I wanted to use "toSource" and "eval" for serialization and
* deserialization, but "toSource" is not supported by WebKit, so I resorted
* to ugly hackery...
*/
return [
encodeURIComponent(this._name),
this._state,
this._timeSpentInPreviousIterations,
this._currentIterationStartTime,
this._startDate,
this._endDate,
this._taskid,
this._description,
].join("&");
},
/* Deserializes the task from a string. */
deserialize: function(serialized) {
var parts = serialized.split("&");
this._name = decodeURIComponent(parts[0]);
this._state = parts[1];
this._timeSpentInPreviousIterations = parseInt(parts[2]);
this._currentIterationStartTime = parseInt(parts[3]);
this._startDate = parseInt(parts[4]);
this._endDate = parseInt(parts[5]);
this._taskid = parseInt(parts[6]);
this._description = parseInt(parts[7]);
}
}
/* ===== Tasks ===== */
/* The Tasks class represents a list of tasks. */
/* Creates a new Tasks object. */
function Tasks() {
this._tasks = [];
this._onAdd = null;
this._onRemove = null;
}
Tasks.prototype = {
/*
* Sets the "onAdd" event handler. The "onAdd" event is fired when a task
* is added to the list.
*/
setOnAdd: function(onAdd) {
this._onAdd = onAdd;
},
/*
* Sets the "onRemove" event handler. The "onRemove" event is fired when a
* task is removed from the list.
*/
setOnRemove: function(onRemove) {
this._onRemove = onRemove;
},
/* Returns the length of the task list. */
length: function() {
return this._tasks.length
},
/*
* Returns index-th task in the list, or "undefined" if the index is out of
* bounds.
*/
get: function(index) {
return this._tasks[index];
},
/*
* Calls the callback function for each task in the list. The function is
* called with three parameters - the task, its index and the task list
* object. This is modeled after "Array.forEach" in JavaScript 1.6.
*/
forEach: function(callback) {
for (var i = 0; i < this._tasks.length; i++) {
callback(this._tasks[i], i, this);
}
},
/* Calls the "onAdd" event handler if set. */
_callOnAdd: function(task) {
if (typeof this._onAdd == "function") {
this._onAdd(task);
}
},
/* Adds a new task to the end of the list. */
add: function(task) {
this._tasks.push(task);
this._callOnAdd(task);
},
/* Calls the "onRemove" event handler if set. */
_callOnRemove: function(index) {
if (typeof this._onRemove == "function") {
this._onRemove(index);
}
},
/*
* Removes index-th task from the list. Does not do anything if the index
* is out of bounds.
*/
remove: function(index) {
this._callOnRemove(index);
this._tasks.splice(index, 1);
},
/* Serializes the list of tasks into a string. */
serialize: function() {
var serializedTasks = [];
this.forEach(function(task) {
serializedTasks.push(task.serialize());
});
return serializedTasks.join("|");
},
/* Deserializes the list of tasks from a string. */
deserialize: function(serialized) {
/*
* Repeatedly use "remove" so the "onRemove" event is triggered. Do the same
* with the "add" method below.
*/
while (this._tasks.length > 0) {
this.remove(0);
}
var serializedTasks = serialized.split("|");
for (var i = 0; i < serializedTasks.length; i++) {
var task = new Task(0 ,"", "");
task.deserialize(serializedTasks[i]);
this.add(task);
}
}
}
/* ===== Extensions ===== */
/*
* Pads this string with another string on the left until the resulting string
* has specified length. If the padding string has more than one character, the
* resulting string may be longer than desired (the padding string is not
* truncated and it is only prepended as a whole). Bad API, I know, but it's
* good enough for me.
*/
String.prototype.pad = function(length, padding) {
var result = this;
while (result.length < length) {
result = padding + result;
}
return result;
}
/* ===== Task List + DOM Storage ===== */
/* The list of tasks. */
var tasks = new Tasks();
/* The last value of the serialized task list string. */
var lastSerializedTasksString;
/*
* The key under which the serialized task list string is stored in the DOM
* Storage.
*/
var TASKS_DOM_STORAGE_KEY = "timerTasks";
/*
* Returns DOM Storage used by the application, or "null" if the browser does
* not support DOM Storage.
*/
function getStorage() {
/*
* HTML 5 says that the persistent storage is available in the
* "window.localStorage" attribute, however Firefox implements older version
* of the proposal, which uses "window.globalStorage" indexed by the domain
* name. We deal with this situation here as gracefully as possible (i.e.
* without concrete browser detection and with forward compatibility).
*
* For more information, see:
*
* http://www.whatwg.org/specs/web-apps/current-work/#storage
* https://developer.mozilla.org/En/DOM/Storage
*/
if (window.localStorage !== undefined) {
return window.localStorage;
} else if (window.globalStorage !== undefined) {
return window.globalStorage[location.hostname];
} else {
return null;
}
}
/*
* Saves the task list into a DOM Storage. Also updates the value of the
* "lastSerializedTasksString" variable.
*/
function saveTasks() {
var serializedTasksString = tasks.serialize();
getStorage()[TASKS_DOM_STORAGE_KEY] = serializedTasksString;
lastSerializedTasksString = serializedTasksString;
}
/*
* Loads the serialized task list string from the DOM Storage. Returns
* "undefined" if the storage does not contain the string (this happens when
* running the application for the first time).
*/
function loadSerializedTasksString() {
var storedValue = getStorage()[TASKS_DOM_STORAGE_KEY];
/*
* The spec says "null" should be returned when the key is not found, but some
* browsers return "undefined" instead. Maybe it was in some earlier version
* of the spec (I didn't bother to check).
*/
if (storedValue !== null && storedValue !== undefined && storedValue.length > 0) {
/*
* The values retrieved from "globalStorage" use one more level of
* indirection.
*/
return (window.localStorage === undefined) ? storedValue.value : storedValue;
} else {
return undefined;
}
}
/*
* Loads the task list from the DOM Storage. Also updates the value of the
* "lastSerializedTasksString" variable.
*/
function loadTasks() {
var serializedTasksString = loadSerializedTasksString();
if (serializedTasksString !== undefined) {
tasks.deserialize(serializedTasksString);
lastSerializedTasksString = serializedTasksString;
}
}
/*
* Was the task list changed outside of the application? Detects the change
* by comparing the current serialized task list string in the DOM Storage
* with a kept old value.
*/
function tasksHaveChangedOutsideApplication() {
var serializedTasksString = loadSerializedTasksString();
if (serializedTasksString != lastSerializedTasksString) {
return true
}
return false;
}
/* ===== View ===== */
/* Some time constants. */
var MILISECONDS_IN_SECOND = 1000;
var MILISECONDS_IN_MINUTE = 60 * MILISECONDS_IN_SECOND;
var MINUTES_IN_HOUR = 60;
/* Formats the time in the H:MM format. */
function formatTime(time) {
var timeInMinutes = time / MILISECONDS_IN_MINUTE;
var hours = Math.floor(timeInMinutes / MINUTES_IN_HOUR);
var minutes = Math.floor(timeInMinutes - hours * MINUTES_IN_HOUR);
return hours + ":" + String(minutes).pad(2, "0");
}
/*
* Computes the URL of the image in the start/stop link according to the task
* state.
*/
function computeStartStopLinkImageUrl(state) {
switch (state) {
case Task.State.STOPPED:
return "fa-play";
case Task.State.RUNNING:
return "fa-stop";
default:
throw "Invalid task state."
}
}
/*
* Builds the HTML element of the row in the task table corresponding to the
* specified task and index.
*/
function buildTaskRow(task, index) {
var result = $("<tr />");
var startStopLink = $(
"<a href='#' class='start-stop-link' title='Start/stop'>"
+ "<i class='fa " + computeStartStopLinkImageUrl(task.getState()) + "'></i>"
);
startStopLink.click(function() {
switch (task.getState()) {
case Task.State.STOPPED:
task.start();
break;
case Task.State.RUNNING:
task.stop();
break;
default:
throw "Invalid task state."
}
saveTasks();
return false;
});
var resetLink = $(
"<a href='#' title='Reset'>"
+ "<i class='fa fa-undo'></i>"
);
resetLink.click(function() {
task.reset();
saveTasks();
return false;
});
var deleteLink = $(
"<a href='#' title='Delete' class='deletetask'>"
+ "<i class='fa fa-trash-alt' class='deletetask'></i>"
);
deleteLink.click(function() {
if (confirm("Do you really want to delete task \"" + task.getName() + "\"?")) {
tasks.remove(index);
saveTasks();
}
return false;
});
var saveLink = $(
"<a href='#' title='Save' class='savetask'>"
+ "<i class='fa fa-download' class='savetask'></i>"
);
saveLink.click(function() {
tasks.remove(index);
saveTasks();
task.save(task);
return false;
});
result
.addClass("state-" + task.getState())
.append($("<td class='task-name' />").text(task.getName()))
.append($("<td class='task-description' />").text(task.getDescription()))
.append($("<td class='task-time' />").text(formatTime(task.getTimeSpent())))
.append($("<td class='task-actions' />")
.append(startStopLink)
.append("&nbsp;&nbsp;")
.append(resetLink)
.append("&nbsp;&nbsp;")
.append(saveLink)
.append("&nbsp;&nbsp;&nbsp;&nbsp;")
.append(deleteLink)
);
return result;
}
/* Finds row with the specified index in the task table. */
function findRowWithIndex(index) {
return $("#task-table").find("tr").slice(1).eq(index);
}
/*
* Updates the row in the task table corresponding to a task according to
* its state.
*/
function updateTaskRow(row, task) {
if (task.isStopped()) {
row.removeClass("state-running");
row.addClass("state-stopped");
} else if (task.isRunning()) {
row.removeClass("state-stopped");
row.addClass("state-running");
}
row.find(".task-time").text(formatTime(task.getTimeSpent()))
row.find(".start-stop-link i").removeClass();
row.find(".start-stop-link i").addClass("fa "+computeStartStopLinkImageUrl(task.getState()));
}
/* ===== Initialization ===== */
/* Initializes event handlers on the task list. */
function initializeTasksEventHandlers() {
tasks.setOnAdd(function(task) {
var row = buildTaskRow(task, tasks.length() - 1);
$("#task-table").append(row);
task.setOnChange(function() {
updateTaskRow(row, task);
});
});
tasks.setOnRemove(function(index) {
findRowWithIndex(index).remove();
if (tasks.length() == 1 ) {
$( "#task-table" ).css({"display":"none"});
}
});
}
/* Initializes GUI event handlers. */
function initializeGuiEventHandlers() {
$( "#addtimer" ).click(function() {
displayTaskAdd();
});
$( "#timer-desc" ).keypress(function( event ) {
if ( event.which == 13 ) {
event.preventDefault();
displayTaskAdd();
}
});
}
function displayTaskAdd() {
$( "#task-table" ).css({"display":"inline"});
var taskName = $("#timer-task option:selected").text();
var taskId = $("#timer-task option:selected").val();
var taskDesc = $("#timer-desc").val();
var task = new Task(taskId, taskName, taskDesc);
tasks.add(task);
saveTasks();
$("#timer-desc").val("");
}
/*
* Initializes a timer used to update task times and detect changes in the
* data stored in the DOM Storage.
*/
function initializeTimer() {
setInterval(function() {
tasks.forEach(function(task, index) {
updateTaskRow(findRowWithIndex(index), task);
});
if (tasksHaveChangedOutsideApplication()) {
loadTasks();
}
}, 10 * MILISECONDS_IN_SECOND);
}
/* Initializes the application. */
$(document).ready(function(){
try {
if (!getStorage()) {
alert("Timer requires a browser with DOM Storage support, such as Firefox 3+ or Safari 4+.");
return;
}
} catch (e) {
alert("Timer does not work with file: URLs in Firefox.");
return;
}
initializeTasksEventHandlers();
loadTasks();
initializeGuiEventHandlers();
initializeTimer();
});
{% endblock %}

View File

@@ -95,6 +95,32 @@
{%endif%} {%endif%}
</div> </div>
</div> </div>
<p></p>
<div class="card">
<div class="card-header">
<i class="fas fa-list-ul"></i> Affectations
</div>
<div class="card-body">
<table class="table table-striped table-bordered table-hover" id="dataTables" style="width:100%">
<thead>
<tr>
<th>Projet</th>
<th>Rôle</th>
</tr>
</thead>
<tbody>
{% for userproject in user.userprojects %}
<tr>
<td>{{userproject.project.displayname}}</td>
<td>{{userproject.job.name}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div> </div>
</div> </div>
{{ form_end(form) }} {{ form_end(form) }}

View File

@@ -68,6 +68,7 @@
<table> <table>
<thead> <thead>
<th class="no-print"></th> <th class="no-print"></th>
<th>S</th>
<th>L</th> <th>L</th>
<th>M</th> <th>M</th>
<th>M</th> <th>M</th>
@@ -89,6 +90,7 @@
{% set btnvalidate=true %} {% set btnvalidate=true %}
{%endif%} {%endif%}
</td> </td>
<td class="date" style="vertical-align:middle">{{event.date|date("W")}}</td>
{% endif %} {% endif %}
<td> <td>

View File

@@ -0,0 +1,163 @@
{% extends "base.html.twig" %}
{% block localstyle %}
{% if fgprint is defined and fgprint %}
table { font-size:10px;}
th,td {
border: 1px solid #37474F;
}
thead {
display: table-header-group;
}
tr { page-break-inside: avoid; }
.homecard {width: 100% }
{%endif%}
{% endblock %}
{% block body %}
<h1 class="page-header">
VALIDATION HORAIRES
</h1>
<div class="custom-control custom-switch float-right">
<input type="checkbox" class="custom-control-input" id="switchactive" {% if app.session.get('activetimer') %} checked {% endif %}>
<label class="custom-control-label" for="switchactive">Horaires à Valider</label>
</div>
<div style="height:30px;">
</div>
<div class="card homecard">
<div class="card-header">
{% if not app.session.get('activetimer') %}
Horaires à Dévalider
{% else %}
Horaires à Valider
{% endif %}
</div>
<div class="card-body">
<div class="dataTable_wrapper">
<table class="table table-striped table-bordered table-hover small" id="dataTables" style="width:100%">
<thead>
<th class="no-print"></th>
<th width="150px">Utilisateur</th>
<th>Tâche</th>
<th>Description</th>
<th>Début</th>
<th>Fin</th>
<th>Durée</th>
</thead>
{% for user in users %}
{% for timer in user.timers %}
<tr id="row-{{timer.id}}">
<td class="no-print" style="vertical-align:middle">
{% if timer.validate %}
<i class="fa fa-thumbs-down validate-{{user.user.id}}" onClick="devalidate({{timer.id}})" style="cursor:pointer; color:red;"></i>
{% else %}
<i class="fa fa-thumbs-up validate-{{user.user.id}}" onClick="validate({{timer.id}})" style="cursor:pointer; color:green;"></i>
{% endif %}
</td>
<td>
{{ user.user.displayname }}
</td>
<td>
{{ timer.taskname }}
</td>
<td>
<span class="font-weight-bold">
{{ timer.activepenalty ? "<i class='fa fa-exclamation' style='color:red;opacity: 0.33;'></i> Astreinte active" : "" }}
</span>
<span class="font-weight-bold">
{{ timer.additionalhour ? "<i class='fa fa-exclamation-triangle' style='color:red;opacity: 0.33;'></i> Heures supplémentaires" : "" }}
</span>
<p>{{ timer.description }}</p>
</td>
<td>
{{ timer.start|date("d/m/Y H:i") }}
</td>
<td>
{{ timer.end|date("d/m/Y H:i") }}
</td>
<td>
{{ timer.duration|date("H:i") }}
</td>
</tr>
{% endfor %}
{% endfor %}
</table>
</div>
</div>
</div>
{% endblock %}
{% block localjavascript %}
$(document).ready(function() {
{% if not fgprint is defined or not fgprint %}
$('.table ').DataTable({
columnDefs: [ { "targets": "no-sort", "orderable": false }, { "targets": "no-string", "type" : "num" } ],
responsive: true,
iDisplayLength: 100,
order: [[ 1, "asc" ]]
});
{%else%}
$('#dataTables').removeClass("table table-striped table-bordered table-hover small dataTable no-footer");
{% endif %}
});
function myprint() {
href=document.location.href;
document.location.href=href+"?fgprint=true";
}
function validate(id) {
$.ajax({
type: "POST",
data: {
id: id,
},
url: "{{ path('app_validationtimer_validate') }}",
success: function (response) {
response=JSON.parse(response);
if(response.return=="KO") {
alert(response.error);
}
else {
$("#row-"+id).remove();
}
}
});
}
function devalidate(id) {
$.ajax({
type: "POST",
data: {
id: id,
},
url: "{{ path('app_validationtimer_devalidate') }}",
success: function (response) {
response=JSON.parse(response);
if(response.return=="KO") {
alert(response.error);
}
else {
$("#row-"+id).remove();
}
}
});
}
$('#switchactive').change(function() {
window.location="{{ path('app_validationtimer_activetimer' )}}";
});
{% endblock %}

View File

@@ -256,7 +256,7 @@
{% set contentsidebar="contentsidebar" %} {% set contentsidebar="contentsidebar" %}
<div id="sidebar" class="collapse"> <div id="sidebar" class="collapse">
<ul class="nav"> <ul style="padding-bottom:70px" class="nav">
{% if is_granted('ROLE_ADMIN') or is_granted('ROLE_VALIDATOR') or is_granted('ROLE_MASTER') or is_granted('ROLE_USER') %} {% if is_granted('ROLE_ADMIN') or is_granted('ROLE_VALIDATOR') or is_granted('ROLE_MASTER') or is_granted('ROLE_USER') %}
<p></p> <p></p>
<li> <li>
@@ -277,7 +277,23 @@
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
<a>
<label class="control-label">
Service
</label>
</a>
<div class="select-control">
<select class="form-control select2entity" id="sideservice" name="sideservice">
<option value="all" selected>Tous les services</option>
{% for service in app.session.get('services') %}
{% set selected="" %}
{%if service.id==app.session.get('idservice') %}
{% set selected="selected" %}
{% endif %}
<option value="{{service.id}}" {{selected}}>{{service.name}}</option>
{% endfor %}
</select>
</div>
<a> <a>
<label class="control-label"> <label class="control-label">
Intervenant Intervenant
@@ -286,6 +302,7 @@
<div class="select-control"> <div class="select-control">
<select class="form-control select2entity" id="sideuser" name="sideuser"> <select class="form-control select2entity" id="sideuser" name="sideuser">
<option value="all" selected>Tout le monde</option> <option value="all" selected>Tout le monde</option>
{% for user in app.session.get('users') %} {% for user in app.session.get('users') %}
{% set selected="" %} {% set selected="" %}
{%if user.id==app.session.get('iduser') %} {%if user.id==app.session.get('iduser') %}
@@ -303,7 +320,7 @@
</a> </a>
<div class="select-control"> <div class="select-control">
<select class="form-control select2entity" id="sideproject" name="sideproject"> <select class="form-control select2entity" id="sideproject" name="sideproject">
<option value="all" selected>Tout les projets</option> <option value="all" selected>Tous les projets</option>
{% for project in app.session.get('projects') %} {% for project in app.session.get('projects') %}
{% set selected="" %} {% set selected="" %}
{%if project.id==app.session.get('idproject') %} {%if project.id==app.session.get('idproject') %}
@@ -313,23 +330,7 @@
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
<a>
<label class="control-label">
Service
</label>
</a>
<div class="select-control">
<select class="form-control select2entity" id="sideservice" name="sideservice">
<option value="all" selected>Tout les services</option>
{% for service in app.session.get('services') %}
{% set selected="" %}
{%if service.id==app.session.get('idservice') %}
{% set selected="selected" %}
{% endif %}
<option value="{{service.id}}" {{selected}}>{{service.name}}</option>
{% endfor %}
</select>
</div>
</li> </li>
<li class="last"></li> <li class="last"></li>
@@ -359,9 +360,27 @@
</a> </a>
</li> </li>
<li class="last"> <li>
<a href="{{path("app_timer")}}">
<i class="fa fa-stopwatch"></i>Suivi Horaire
</a>
</li>
<li>
<a href="{{path("app_holiday")}}"> <a href="{{path("app_holiday")}}">
<i class="fa fa-cocktail"></i>Mes Congés <i class="fa fa-umbrella-beach"></i>Mes Congés
</a>
</li>
<li>
<a href="{{path("app_stat_view")}}">
<i class="fas fa-chart-line"></i>Statistiques
</a>
</li>
<li class="last">
<a href="{{path("app_export_view")}}">
<i class="fa fa-file-download"></i>Exports
</a> </a>
</li> </li>
@@ -372,13 +391,19 @@
<li> <li>
<a href="{{path("app_validation")}}"> <a href="{{path("app_validation")}}">
<i class="fa fa-user"></i>Validation <i class="fa fa-user-check"></i>Validation Calendrier
</a>
</li>
<li>
<a href="{{path("app_validationholiday")}}">
<i class="fa fa-user-tag"></i>Validation Congés
</a> </a>
</li> </li>
<li class="last"> <li class="last">
<a href="{{path("app_validationholiday")}}"> <a href="{{path("app_validationtimer")}}">
<i class="fa fa-suitcase"></i>Validation Congés <i class="fa fa-user-clock"></i>Validation Horaires
</a> </a>
</li> </li>
@@ -401,7 +426,7 @@
<li> <li>
<a href="{{path("app_offer")}}"> <a href="{{path("app_offer")}}">
<i class="fa fa-euro-sign"></i>Propositions <i class="fa fa-euro-sign"></i>Commandes
</a> </a>
</li> </li>

View File

@@ -4,6 +4,12 @@ APP_SECRET=%%pwdreader("","/var/www/html/schedule/.key")
APP_AUTH=CAS APP_AUTH=CAS
# MAIL sendmail / smtp
MAILER_METHOD=sendmail
MAILER_URL=%%getVar('schedule_email_url', '')
MAILER_NOREPLY=noreply@noreply.fr
MAILER_DEFAULT_NOTIF=%%getVar('schedule_email_global_notif', '')
# Bdd = Redefine local # Bdd = Redefine local
DATABASE_NAME=schedule DATABASE_NAME=schedule
DATABASE_USER=schedule DATABASE_USER=schedule
@@ -30,3 +36,18 @@ DATABASE_HOST=%%adresse_ip_mysql
CAS_HOST=%%eolesso_adresse CAS_HOST=%%eolesso_adresse
CAS_PORT=%%eolesso_port CAS_PORT=%%eolesso_port
CAS_PATH=%%eolesso_cas_folder CAS_PATH=%%eolesso_cas_folder
OFFICE_HOUR_START=%%getVar('schedule_office_hour_start', '')
OFFICE_HOUR_END=%%getVar('schedule_office_hour_end', '')
## Sentry DSN
SENTRY_DSN=%%getVar('schedule_sentry_dsn', '')
## Dolibarr
%if %%getVar('schedule_dolibarr_api', '') == 'oui'
DOLIBARR_ACTIVE=true
%else
DOLIBARR_ACTIVE=false
%end if
DOLIBARR_API_KEY=%%getVar('schedule_dolibarr_apikey', '')
DOLIBARR_URI=%%getVar('schedule_dolibarr_uri', '')