From de247d66055494e854fd0948bc8854ecb3ea7347 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Tue, 10 Dec 2019 21:43:13 +0100 Subject: [PATCH 01/49] Updated name on helm chart --- api/helm/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/helm/Chart.yaml b/api/helm/Chart.yaml index 7c3c8a6a..cd1f7300 100644 --- a/api/helm/Chart.yaml +++ b/api/helm/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v1 appVersion: V.0.1 description: ''Naast deze JSON rest API is er ook een [graphql](/graphql) interface beschikbaar.'' -name: pc +name: vtc version: 0.1.0 home: https://common-ground.dev icon: https://common-ground.dev/logo-250x250.png \ No newline at end of file From 6c6d3b51d484859221c29aa359b399956be4cf30 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Tue, 10 Dec 2019 22:10:49 +0100 Subject: [PATCH 02/49] Fix on the regex error (again) --- api/src/Entity/Property.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/Entity/Property.php b/api/src/Entity/Property.php index 7ab1f6e4..55a6a233 100644 --- a/api/src/Entity/Property.php +++ b/api/src/Entity/Property.php @@ -175,7 +175,7 @@ class Property /** * @var string $pattern A [regular expression](https://en.wikipedia.org/wiki/Regular_expression) that the value should comply to - * @example [+-]?(\d+(\.\d+)?|\.\d+)([eE][+-]?\d+)? + * @example regex * * * @Assert\Length(max = 255) From 06075d0a201dbcd6879092ad7d9609173f22f5d5 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Tue, 10 Dec 2019 22:20:19 +0100 Subject: [PATCH 03/49] Domain to domains An array should make it possible to obtain several security certificates --- .env | 1 + api/config/packages/twig.yaml | 11 +++++++++++ api/helm/values.yaml | 7 +++++++ api/templates/helm/Values.yaml.twig | 4 ++++ docker-compose.yml | 1 + 5 files changed, 24 insertions(+) diff --git a/.env b/.env index d2f0c4c3..dc31d8a8 100644 --- a/.env +++ b/.env @@ -45,6 +45,7 @@ ORGANIZATION_UNIT_NAME=Common-Ground ################################################## APP_DOMAIN=conduction.nl +APP_DOMAINS=["conduction.nl","zaakonline.nl","larping.eu","common-ground.dev","trouwplanner.online","huwelijksplanner.online"] APP_DEMO=pc.zaakonline.nl APP_REPRO=https://github.com/ConductionNL/Proto-component-commonground diff --git a/api/config/packages/twig.yaml b/api/config/packages/twig.yaml index 26f06175..ee6c1853 100644 --- a/api/config/packages/twig.yaml +++ b/api/config/packages/twig.yaml @@ -1,3 +1,13 @@ +parameters: + env(APP_DOMAINS): '[]' + # Organisation stuff + env(ORGANIZATION_NAME): '' + env(ORGANIZATION_EMAIL_ADDRESS): '' + env(ORGANIZATION_COUNTRY_NAME): '' + env(ORGANIZATION_STATE): '' + env(ORGANIZATION_LOCALITY): '' + env(ORGANIZATION_UNIT_NAME): '' + twig: default_path: '%kernel.project_dir%/templates' debug: '%kernel.debug%' @@ -22,6 +32,7 @@ twig: app_env: '%env(APP_ENV)%' app_debug: '%env(APP_DEBUG)%' app_domain: '%env(APP_DOMAIN)%' + app_domains: '%env(json:APP_DOMAINS)%' app_demo: '%env(APP_DEMO)%' app_repro: '%env(APP_REPRO)%' app_description: '%env(APP_DESCRIPTION)%' diff --git a/api/helm/values.yaml b/api/helm/values.yaml index 18c2d9e3..93067cb8 100644 --- a/api/helm/values.yaml +++ b/api/helm/values.yaml @@ -11,6 +11,13 @@ settings: description: ''Naast deze JSON rest API is er ook een [graphql](/graphql) interface beschikbaar.'' repro: 'https://github.com/ConductionNL/Proto-component-commonground' domain: conduction.nl + domains: + - conduction.nl + - zaakonline.nl + - larping.eu + - common-ground.dev + - trouwplanner.online + - huwelijksplanner.online organisationName: Conduction email: info@conduction.nl country: Netherlands diff --git a/api/templates/helm/Values.yaml.twig b/api/templates/helm/Values.yaml.twig index 37ec6129..aade15ab 100644 --- a/api/templates/helm/Values.yaml.twig +++ b/api/templates/helm/Values.yaml.twig @@ -11,6 +11,10 @@ settings: description: '{{ app_description }}' repro: '{{ app_repro }}' domain: {{ app_domain }} + domains: +{% for domain in app_domains %} + - {{ domain }} +{% endfor %} organisationName: {{ organization_name }} email: {{ organization_email }} country: {{ organization_country }} diff --git a/docker-compose.yml b/docker-compose.yml index 4d7436b7..3c8a82c8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -37,6 +37,7 @@ services: - APP_NAME=${APP_NAME} - APP_TITLE=${APP_TITLE} - APP_DOMAIN=${APP_DOMAIN} + - APP_DOMAINS=${APP_DOMAINS} - APP_DEMO=${APP_DEMO} - APP_REPRO=${APP_REPRO} - APP_DESCRIPTION=${APP_DESCRIPTION} From 793cc01936f21454f7f5156d871384917b3f5ca4 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Tue, 10 Dec 2019 22:29:47 +0100 Subject: [PATCH 04/49] Further @example fixes --- api/src/Entity/Property.php | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/api/src/Entity/Property.php b/api/src/Entity/Property.php index 55a6a233..9b5d3250 100644 --- a/api/src/Entity/Property.php +++ b/api/src/Entity/Property.php @@ -288,8 +288,7 @@ class Property private $object; /** - * @var array $enum An array of possible values, input is limited to this array - * @example ['first','second] + * @var array $enum An array of possible values, input is limited to this array] * * * @Groups({"read", "write"}) @@ -298,8 +297,7 @@ class Property private $enum = []; /** - * @var array $allOf *mutually exclusive with using type* An array of possible types that an property should confirm to - * @example ['string','boolean'] + * @var array $allOf *mutually exclusive with using type* An array of possible types that an property should confirm to] * * * @ORM\Column(type="array", nullable=true) @@ -307,8 +305,7 @@ class Property private $allOf = []; /** - * @var array $anyOf *mutually exclusive with using type* An array of possible types that an property might confirm to - * @example ['string','boolean'] + * @var array $anyOf *mutually exclusive with using type* An array of possible types that an property might confirm to] * * * @ORM\Column(type="array", nullable=true) @@ -316,8 +313,7 @@ class Property private $anyOf = []; /** - * @var array $oneOf *mutually exclusive with using type* An array of possible types that an property must confirm to - * @example ['string','boolean'] + * @var array $oneOf *mutually exclusive with using type* An array of possible types that an property must confirm to] * * * @ORM\Column(type="array", nullable=true) From ed9f8a5e0df8eff18d522dfd6fe61f7d4eaa389a Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Wed, 11 Dec 2019 09:19:58 +0100 Subject: [PATCH 05/49] Fix on conflicting secrets --- api/helm/templates/certificate.yaml | 9 ++------- api/helm/templates/ingress.yaml | 5 ++++- api/templates/helm/Values.yaml.twig | 2 +- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/api/helm/templates/certificate.yaml b/api/helm/templates/certificate.yaml index 43dacaf8..85095579 100644 --- a/api/helm/templates/certificate.yaml +++ b/api/helm/templates/certificate.yaml @@ -1,16 +1,11 @@ apiVersion: cert-manager.io/v1alpha2 kind: Certificate metadata: - name: {{ include "name" . }}-acme-cert + name: {{ include "name" . }}-{{ .Values.settings.env }}-cert spec: - secretName: {{ include "name" . }}-tls-cert + secretName: {{ include "name" . }}-{{ .Values.settings.env }}-cert duration: 24h renewBefore: 12h - {{- if eq .Values.settings.env "prod" }} - commonName: {{ .Values.settings.name }}.{{ .Values.settings.domain }} - {{- else }} - commonName: {{ .Values.settings.name }}.{{ .Values.settings.env }}.{{ .Values.settings.domain }} - {{- end }} dnsNames: {{- if eq .Values.settings.env "prod" }} - {{ .Values.settings.name }}.{{ .Values.settings.domain }} diff --git a/api/helm/templates/ingress.yaml b/api/helm/templates/ingress.yaml index 5c76e036..45380689 100644 --- a/api/helm/templates/ingress.yaml +++ b/api/helm/templates/ingress.yaml @@ -19,8 +19,11 @@ metadata: spec: tls: - hosts: + # {{- range .Values.settings.domains }} + # - {{ .domain | quote }} + # {{- end }} - {{ .Values.settings.domain }} - secretName: {{ include "name" . }}-tls-cert + secretName: {{ include "name" . }}-{{ .Values.settings.env }}-cert rules: # - host: {{ .Values.settings.name }}.{{ .Values.settings.env }}.{{ .Values.settings.domain }} # http: diff --git a/api/templates/helm/Values.yaml.twig b/api/templates/helm/Values.yaml.twig index aade15ab..c44953a6 100644 --- a/api/templates/helm/Values.yaml.twig +++ b/api/templates/helm/Values.yaml.twig @@ -13,7 +13,7 @@ settings: domain: {{ app_domain }} domains: {% for domain in app_domains %} - - {{ domain }} + - domain: {{ domain }} {% endfor %} organisationName: {{ organization_name }} email: {{ organization_email }} From 796c48dd4852434e87db85ed06314bfd339f9f93 Mon Sep 17 00:00:00 2001 From: Robert Zondervan Date: Wed, 11 Dec 2019 10:13:37 +0100 Subject: [PATCH 06/49] Add conditions to perform a helm install --- .github/workflows/dockerimage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml index 3be28c02..091c7edd 100644 --- a/.github/workflows/dockerimage.yml +++ b/.github/workflows/dockerimage.yml @@ -99,7 +99,7 @@ jobs: if: (contains( github.ref, 'master' ) || contains( github.ref, 'staging' ) || contains( github.ref, 'development' )) && steps.kubeconfig.outputs.success == 'true' run: helm upgrade $APP_NAME-$APP_ENV ./api/helm --kubeconfig="kubeconfig.yaml" --namespace=$APP_ENV --set settings.env=$APP_ENV,settings.debug=1 - name: Install through helm - if: failure() + if: failure() && (contains( github.ref, 'master' ) || contains( github.ref, 'staging' ) || contains( github.ref, 'development' )) && steps.kubeconfig.outputs.success == 'true' run: helm install --name $APP_NAME-$APP_ENV ./api/helm --kubeconfig="kubeconfig.yaml" --namespace=$APP_ENV --set settings.env=$APP_ENV,settings.debug=1 - name: Rollout new containers if: (contains( github.ref, 'master' ) || contains( github.ref, 'staging' ) || contains( github.ref, 'development' )) && steps.kubeconfig.outputs.success == 'true' && success() From d547dcf605e1cdf939ce90bcfaf8ffe8e86b1b2f Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Thu, 12 Dec 2019 09:07:50 +0100 Subject: [PATCH 07/49] Updates to config - fix op composer - multi domain certificates - swagger proterties fix --- .env | 9 ++++++++- api/Dockerfile | 3 +++ api/helm/templates/certificate.yaml | 8 +++++--- api/helm/templates/ingress.yaml | 6 ++++-- api/src/Swagger/SwaggerDecorator.php | 5 ++++- 5 files changed, 24 insertions(+), 7 deletions(-) diff --git a/.env b/.env index dc31d8a8..db64850a 100644 --- a/.env +++ b/.env @@ -31,7 +31,7 @@ TRUSTED_HOSTS=^(.+\.)?conduction\.nl$|^(.+\.)?huwelijksplanner\.online$|^(.+\.)? # Orgization details ################################################## -# The following details describe your organisations and are used for both certificate creation and common-ground.dev +# The following details describe your organisations and are used for both certificate creation, nlx (if active) and common-ground.dev ORGANIZATION_NAME=Conduction ORGANIZATION_EMAIL_ADDRESS=info@conduction.nl @@ -44,9 +44,15 @@ ORGANIZATION_UNIT_NAME=Common-Ground # Documentation settings ################################################## +# The primary domain for this API @depracticed APP_DOMAIN=conduction.nl +# he domains on wich you want to provide this component, the first wil be used as primary (or common in cert-manger terms) APP_DOMAINS=["conduction.nl","zaakonline.nl","larping.eu","common-ground.dev","trouwplanner.online","huwelijksplanner.online"] +# If set to true wil provide the component on an {APP_NAME}.{APP_DOMAIN} basis for production enviroment, and {APP_NAME}.{APP_ENV}.{APP_DOMAIN} basis for other enviroments. Wil skipp the {APP_NAME}. on both if set to false +APP_USE_NAME_AS_SUBDOMAIN=true +# The demo enviroment for this component @depracticed APP_DEMO=pc.zaakonline.nl +# he Repository for this component APP_REPRO=https://github.com/ConductionNL/Proto-component-commonground ################################################## @@ -55,6 +61,7 @@ APP_REPRO=https://github.com/ConductionNL/Proto-component-commonground CONTAINER_REGISTRY_BASE=docker.io/conduction CONTAINER_PROJECT_NAME=pc +# The repository for the primary (php) container of this project CONTAINER_REPRO=https://hub.docker.com/repository/docker/conduction/pc-php ################################################## diff --git a/api/Dockerfile b/api/Dockerfile index 1b028ba9..aae76b53 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -104,6 +104,9 @@ RUN set -eux; \ chmod +x bin/console; sync VOLUME /srv/api/var +# Now that we have our own composer lets update +RUN composer update --no-interaction + COPY docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint RUN chmod +x /usr/local/bin/docker-entrypoint diff --git a/api/helm/templates/certificate.yaml b/api/helm/templates/certificate.yaml index 85095579..e831c7af 100644 --- a/api/helm/templates/certificate.yaml +++ b/api/helm/templates/certificate.yaml @@ -7,10 +7,12 @@ spec: duration: 24h renewBefore: 12h dnsNames: - {{- if eq .Values.settings.env "prod" }} - - {{ .Values.settings.name }}.{{ .Values.settings.domain }} + {{- range .Values.settings.domains }} + {{- if eq $.Values.settings.env "prod" }} + - {{ $.Values.settings.name }}.{{ . }} {{- else }} - - {{ .Values.settings.name }}.{{ .Values.settings.env }}.{{ .Values.settings.domain }} + - {{ $.Values.settings.name }}.{{ $.Values.settings.env }}.{{ . }} + {{- end }} {{- end }} issuerRef: name: {{ include "name" . }}-{{ .Values.settings.env }}-letsencrypt diff --git a/api/helm/templates/ingress.yaml b/api/helm/templates/ingress.yaml index 45380689..0ba65e6f 100644 --- a/api/helm/templates/ingress.yaml +++ b/api/helm/templates/ingress.yaml @@ -21,8 +21,10 @@ spec: - hosts: # {{- range .Values.settings.domains }} # - {{ .domain | quote }} - # {{- end }} - - {{ .Values.settings.domain }} + # {{- end }} + {{- with .Values.settings.domains }} + {{- toYaml . | nindent 4 }} + {{- end }} secretName: {{ include "name" . }}-{{ .Values.settings.env }}-cert rules: # - host: {{ .Values.settings.name }}.{{ .Values.settings.env }}.{{ .Values.settings.domain }} diff --git a/api/src/Swagger/SwaggerDecorator.php b/api/src/Swagger/SwaggerDecorator.php index 28b4d3e5..2c8b5eba 100644 --- a/api/src/Swagger/SwaggerDecorator.php +++ b/api/src/Swagger/SwaggerDecorator.php @@ -113,7 +113,10 @@ public function normalize($object, $format = null, array $context = []) //$additionalEntityDocs = $this->getAdditionalEntityDocs($entity); $entityDocs = $this->getAdditionalEntityDocs($entity); - $additionalDocs = array_merge($additionalDocs, $entityDocs['properties']); + // Only run if we have aditional docs + if(in_array('properties',$entityDocs)){ + $additionalDocs = array_merge($additionalDocs, $entityDocs['properties']); + } // Security $docs['securityDefinitions']['JWT-Oauth']['scopes'] = array_merge($docs['securityDefinitions']['JWT-Oauth']['scopes'], $entityDocs['security']); From afa5afdd76a2a582fcf640eacdee4b64de2da65e Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Thu, 12 Dec 2019 16:33:33 +0100 Subject: [PATCH 08/49] Small bugfix and the adding of gd --- api/helm/templates/ingress.yaml | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/api/helm/templates/ingress.yaml b/api/helm/templates/ingress.yaml index 0ba65e6f..c0a8d1fe 100644 --- a/api/helm/templates/ingress.yaml +++ b/api/helm/templates/ingress.yaml @@ -18,13 +18,11 @@ metadata: {{- end }} spec: tls: - - hosts: - # {{- range .Values.settings.domains }} - # - {{ .domain | quote }} - # {{- end }} - {{- with .Values.settings.domains }} - {{- toYaml . | nindent 4 }} - {{- end }} + - hosts: + #{{- with .Values.settings.domains }} + {{- toYaml .Values.settings.domains | nindent 4 }} + #{{- end }} + #- {{ .domain | quote }} secretName: {{ include "name" . }}-{{ .Values.settings.env }}-cert rules: # - host: {{ .Values.settings.name }}.{{ .Values.settings.env }}.{{ .Values.settings.domain }} From 527a8e784c432315377c57552c2953ab15f504d7 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Fri, 13 Dec 2019 07:17:30 +0100 Subject: [PATCH 09/49] Multi domain ssl --- .env | 2 +- api/Dockerfile | 1 + api/helm/templates/certificate.yaml | 6 +- api/helm/templates/configmap.yaml | 2 +- api/helm/templates/ingress.yaml | 91 ++++------------------------ api/src/Swagger/SwaggerDecorator.php | 2 +- 6 files changed, 18 insertions(+), 86 deletions(-) diff --git a/.env b/.env index db64850a..1f2db881 100644 --- a/.env +++ b/.env @@ -25,7 +25,7 @@ APP_DESCRIPTION='Naast deze JSON rest API is er ook een [graphql](/graphql) inte # The urls on wich this api is available TRUSTED_PROXIES=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 -TRUSTED_HOSTS=^(.+\.)?conduction\.nl$|^(.+\.)?huwelijksplanner\.online$|^(.+\.)?larping\.eu$|^(.+\.)?common-ground\.nl$|^(.+\.)?trouwplanner\.online$|^(.+\.)?zaakonline\.nl$|localhost +TRUSTED_HOSTS=^(.+\.)?conduction\.nl$|^(.+\.)?huwelijksplanner\.online$|^(.+\.)?larping\.eu$|^(.+\.)?common-ground\.dev$|^(.+\.)?trouwplanner\.online$|^(.+\.)?zaakonline\.nl$|localhost ################################################## # Orgization details diff --git a/api/Dockerfile b/api/Dockerfile index aae76b53..cccb535c 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -40,6 +40,7 @@ RUN set -eux; \ zip \ mysqli \ pdo_mysql \ + gd \ ; \ pecl install \ apcu-${APCU_VERSION} \ diff --git a/api/helm/templates/certificate.yaml b/api/helm/templates/certificate.yaml index e831c7af..6d7d47d5 100644 --- a/api/helm/templates/certificate.yaml +++ b/api/helm/templates/certificate.yaml @@ -7,13 +7,13 @@ spec: duration: 24h renewBefore: 12h dnsNames: - {{- range .Values.settings.domains }} +{{- range .Values.settings.domains }} {{- if eq $.Values.settings.env "prod" }} - - {{ $.Values.settings.name }}.{{ . }} + - {{ $.Values.settings.name }}.{{ . }} {{- else }} - {{ $.Values.settings.name }}.{{ $.Values.settings.env }}.{{ . }} {{- end }} - {{- end }} +{{- end }} issuerRef: name: {{ include "name" . }}-{{ .Values.settings.env }}-letsencrypt kind: ClusterIssuer \ No newline at end of file diff --git a/api/helm/templates/configmap.yaml b/api/helm/templates/configmap.yaml index 39c5e996..41f37e42 100644 --- a/api/helm/templates/configmap.yaml +++ b/api/helm/templates/configmap.yaml @@ -25,7 +25,7 @@ data: app-health: {{ .Values.settings.healthEnabled | quote }} app-archive: {{ .Values.settings.archiveEnabled | quote }} - organization-name: {{ .Values.settings.organisationMame | quote }} + organization-name: {{ .Values.settings.organisationName | quote }} organization-email: {{ .Values.settings.email | quote }} organization-country: {{ .Values.settings.country | quote }} organization-state: {{ .Values.settings.state | quote }} diff --git a/api/helm/templates/ingress.yaml b/api/helm/templates/ingress.yaml index c0a8d1fe..68553258 100644 --- a/api/helm/templates/ingress.yaml +++ b/api/helm/templates/ingress.yaml @@ -12,97 +12,28 @@ metadata: helm.sh/chart: {{ include "chart" . }} app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/managed-by: {{ .Release.Service }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} spec: tls: - hosts: - #{{- with .Values.settings.domains }} - {{- toYaml .Values.settings.domains | nindent 4 }} - #{{- end }} - #- {{ .domain | quote }} + {{- range .Values.settings.domains }} + - {{ . }} + {{- end }} secretName: {{ include "name" . }}-{{ .Values.settings.env }}-cert rules: -# - host: {{ .Values.settings.name }}.{{ .Values.settings.env }}.{{ .Values.settings.domain }} -# http: -# paths: -# - backend: -# serviceName: {{ include "name" . }} -# servicePort: 80 - {{- if eq .Values.settings.env "prod" }} - - host: {{ .Values.settings.name }}.{{ .Values.settings.domain }} - http: - paths: - - backend: - serviceName: {{ include "name" . }} - servicePort: 80 - - host: {{ .Values.settings.name }}.huwelijksplanner.online - http: - paths: - - backend: - serviceName: {{ include "name" . }} - servicePort: 80 - - host: {{ .Values.settings.name }}.trouwplanner.online - http: - paths: - - backend: - serviceName: {{ include "name" . }} - servicePort: 80 - - host: {{ .Values.settings.name }}.common-ground.nl - http: - paths: - - backend: - serviceName: {{ include "name" . }} - servicePort: 80 - - host: {{ .Values.settings.name }}.larping.eu + {{- range .Values.settings.domains }} + {{- if eq $.Values.settings.env "prod" }} + - host: {{ $.Values.settings.name }}.{{ . }} http: paths: - backend: - serviceName: {{ include "name" . }} - servicePort: 80 - - host: {{ .Values.settings.name }}.zaakonline.eu - http: - paths: - - backend: - serviceName: {{ include "name" . }} - servicePort: 80 + serviceName: {{ $.Values.settings.name }} + servicePort: 80 {{- else }} - - host: {{ .Values.settings.name }}.{{ .Values.settings.env }}.{{ .Values.settings.domain }} + - host: {{ $.Values.settings.name }}.{{ $.Values.settings.env }}.{{ . }} http: paths: - backend: - serviceName: {{ include "name" . }} - servicePort: 80 - - host: {{ .Values.settings.name }}.{{ .Values.settings.env }}.huwelijksplanner.online - http: - paths: - - backend: - serviceName: {{ include "name" . }} - servicePort: 80 - - host: {{ .Values.settings.name }}.{{ .Values.settings.env }}.trouwplanner.online - http: - paths: - - backend: - serviceName: {{ include "name" . }} - servicePort: 80 - - host: {{ .Values.settings.name }}.{{ .Values.settings.env }}.common-ground.nl - http: - paths: - - backend: - serviceName: {{ include "name" . }} - servicePort: 80 - - host: {{ .Values.settings.name }}.{{ .Values.settings.env }}.larping.eu - http: - paths: - - backend: - serviceName: {{ include "name" . }} - servicePort: 80 - - host: {{ .Values.settings.name }}.{{ .Values.settings.env }}.zaakonline.nl - http: - paths: - - backend: - serviceName: {{ include "name" . }} + serviceName: {{ $.Values.settings.name }} servicePort: 80 {{- end }} + {{- end }} diff --git a/api/src/Swagger/SwaggerDecorator.php b/api/src/Swagger/SwaggerDecorator.php index 2c8b5eba..b0610232 100644 --- a/api/src/Swagger/SwaggerDecorator.php +++ b/api/src/Swagger/SwaggerDecorator.php @@ -114,7 +114,7 @@ public function normalize($object, $format = null, array $context = []) //$additionalEntityDocs = $this->getAdditionalEntityDocs($entity); $entityDocs = $this->getAdditionalEntityDocs($entity); // Only run if we have aditional docs - if(in_array('properties',$entityDocs)){ + if(array_key_exists('properties',$entityDocs)){ $additionalDocs = array_merge($additionalDocs, $entityDocs['properties']); } From 456a6f0a21cacf01d32d9749fe14dd1c3156f95c Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Fri, 13 Dec 2019 07:56:14 +0100 Subject: [PATCH 10/49] Fix on gd install --- api/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/api/Dockerfile b/api/Dockerfile index cccb535c..df2d1875 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -29,6 +29,7 @@ RUN set -eux; \ $PHPIZE_DEPS \ icu-dev \ libzip-dev \ + libpng-dev \ postgresql-dev \ zlib-dev \ ; \ @@ -40,6 +41,7 @@ RUN set -eux; \ zip \ mysqli \ pdo_mysql \ + pcntl \ gd \ ; \ pecl install \ From 3f06e3b19192872b7f9a4587ccc87c2a8ec54bdc Mon Sep 17 00:00:00 2001 From: Robert Zondervan Date: Fri, 13 Dec 2019 09:59:44 +0100 Subject: [PATCH 11/49] Switching around tests to prevent contamination --- .github/workflows/dockerimage.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml index 091c7edd..2b2a636f 100644 --- a/.github/workflows/dockerimage.yml +++ b/.github/workflows/dockerimage.yml @@ -61,12 +61,13 @@ jobs: run: docker ps - name: Dumping the logs run: docker-compose logs - - name: Security Checks - run: docker-compose exec -T php composer req sensiolabs/security-checker - name: Database Update run: docker-compose exec -T php bin/console doctrine:schema:update --force - name: Database Check run: docker-compose exec -T php bin/console doctrine:schema:validate + - name: Security Checks + run: docker-compose exec -T php composer req sensiolabs/security-checker + - name: Chores run: docker-compose down - name: Login to DockerHub Registry From 97b06876001770fe52fa52efb816ac6611247872 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Fri, 13 Dec 2019 10:35:05 +0100 Subject: [PATCH 12/49] fix on value generation --- api/helm/templates/certificate.yaml | 5 +++++ api/helm/templates/ingress.yaml | 1 + api/helm/templates/php-deployment.yaml | 2 +- api/helm/values.yaml | 14 +++++++------- api/templates/helm/Values.yaml.twig | 2 +- 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/api/helm/templates/certificate.yaml b/api/helm/templates/certificate.yaml index 6d7d47d5..78415e0d 100644 --- a/api/helm/templates/certificate.yaml +++ b/api/helm/templates/certificate.yaml @@ -7,6 +7,11 @@ spec: duration: 24h renewBefore: 12h dnsNames: +# {{- if eq .Values.settings.env "prod" }} +# - {{ .Values.settings.name }}.{{ .Values.settings.domain }} +# {{- else }} +# - {{ .Values.settings.name }}.{{ .Values.settings.env }}.{{ .Values.settings.domain }} +# {{- end }} {{- range .Values.settings.domains }} {{- if eq $.Values.settings.env "prod" }} - {{ $.Values.settings.name }}.{{ . }} diff --git a/api/helm/templates/ingress.yaml b/api/helm/templates/ingress.yaml index 68553258..a684f9fc 100644 --- a/api/helm/templates/ingress.yaml +++ b/api/helm/templates/ingress.yaml @@ -18,6 +18,7 @@ spec: {{- range .Values.settings.domains }} - {{ . }} {{- end }} +# - {{ .Values.settings.domain }} secretName: {{ include "name" . }}-{{ .Values.settings.env }}-cert rules: {{- range .Values.settings.domains }} diff --git a/api/helm/templates/php-deployment.yaml b/api/helm/templates/php-deployment.yaml index 611e5d39..2d5df508 100644 --- a/api/helm/templates/php-deployment.yaml +++ b/api/helm/templates/php-deployment.yaml @@ -9,7 +9,7 @@ metadata: app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/managed-by: {{ .Release.Service }} spec: - replicas: 3 + replicas: 1 template: metadata: labels: diff --git a/api/helm/values.yaml b/api/helm/values.yaml index 93067cb8..78a6fb18 100644 --- a/api/helm/values.yaml +++ b/api/helm/values.yaml @@ -12,12 +12,12 @@ settings: repro: 'https://github.com/ConductionNL/Proto-component-commonground' domain: conduction.nl domains: - - conduction.nl - - zaakonline.nl - - larping.eu - - common-ground.dev - - trouwplanner.online - - huwelijksplanner.online + - domain: conduction.nl + - domain: zaakonline.nl + - domain: larping.eu + - domain: common-ground.dev + - domain: trouwplanner.online + - domain: huwelijksplanner.online organisationName: Conduction email: info@conduction.nl country: Netherlands @@ -29,7 +29,7 @@ settings: debug: 1 replicaCount: 1 corsAllowOrigin: ['*'] - trustedHosts: '^(.+\.)?conduction\.nl$|^(.+\.)?huwelijksplanner\.online$|^(.+\.)?larping\.eu$|^(.+\.)?common-ground\.nl$|^(.+\.)?trouwplanner\.online$|^(.+\.)?zaakonline\.nl$|localhost' + trustedHosts: '^(.+\.)?conduction\.nl$|^(.+\.)?huwelijksplanner\.online$|^(.+\.)?larping\.eu$|^(.+\.)?common-ground\.dev$|^(.+\.)?trouwplanner\.online$|^(.+\.)?zaakonline\.nl$|localhost' pullPolicy: Always # You will need these proxies on kubernetes trustedProxies: diff --git a/api/templates/helm/Values.yaml.twig b/api/templates/helm/Values.yaml.twig index c44953a6..70c4eb77 100644 --- a/api/templates/helm/Values.yaml.twig +++ b/api/templates/helm/Values.yaml.twig @@ -13,7 +13,7 @@ settings: domain: {{ app_domain }} domains: {% for domain in app_domains %} - - domain: {{ domain }} + - { domain }} {% endfor %} organisationName: {{ organization_name }} email: {{ organization_email }} From 96b4a9854d5e1b696683e8b95909b30636fe140d Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Fri, 13 Dec 2019 12:34:11 +0100 Subject: [PATCH 13/49] force deploy build --- api/helm/values.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/api/helm/values.yaml b/api/helm/values.yaml index 78a6fb18..37d92376 100644 --- a/api/helm/values.yaml +++ b/api/helm/values.yaml @@ -12,12 +12,12 @@ settings: repro: 'https://github.com/ConductionNL/Proto-component-commonground' domain: conduction.nl domains: - - domain: conduction.nl - - domain: zaakonline.nl - - domain: larping.eu - - domain: common-ground.dev - - domain: trouwplanner.online - - domain: huwelijksplanner.online + - conduction.nl + - zaakonline.nl + - larping.eu + - common-ground.dev + - trouwplanner.online + - huwelijksplanner.online organisationName: Conduction email: info@conduction.nl country: Netherlands From ab57e4295b1bebe4b9cc12d7eac678b7a7a9a61d Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Fri, 13 Dec 2019 12:36:42 +0100 Subject: [PATCH 14/49] Hot fix on value template --- api/templates/helm/Values.yaml.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/templates/helm/Values.yaml.twig b/api/templates/helm/Values.yaml.twig index 70c4eb77..aade15ab 100644 --- a/api/templates/helm/Values.yaml.twig +++ b/api/templates/helm/Values.yaml.twig @@ -13,7 +13,7 @@ settings: domain: {{ app_domain }} domains: {% for domain in app_domains %} - - { domain }} + - {{ domain }} {% endfor %} organisationName: {{ organization_name }} email: {{ organization_email }} From 5b4671c4375e7d69e20862726ef8590c11e0fafb Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Fri, 13 Dec 2019 13:17:50 +0100 Subject: [PATCH 15/49] Fis op symphony 4.5 compliance --- api/src/Repository/NLXRequestLogRepository.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/api/src/Repository/NLXRequestLogRepository.php b/api/src/Repository/NLXRequestLogRepository.php index bc1dad3c..69add53c 100644 --- a/api/src/Repository/NLXRequestLogRepository.php +++ b/api/src/Repository/NLXRequestLogRepository.php @@ -4,7 +4,8 @@ use App\Entity\NLXRequestLog; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; -use Symfony\Bridge\Doctrine\RegistryInterface; +use Doctrine\Common\Persistence\ManagerRegistry; + /** * @method NLXRequestLog|null find($id, $lockMode = null, $lockVersion = null) @@ -14,10 +15,10 @@ */ class NLXRequestLogRepository extends ServiceEntityRepository { - public function __construct(RegistryInterface $registry) - { - parent::__construct($registry, NLXRequestLog::class); - } + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, ExampleEntity::class); + } /** * @return NLXRequestLog[] Returns an array of NLXRequestLog objects From abc62fd83c1e361bbc70f02b5d1ee0c99f679540 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Fri, 13 Dec 2019 14:39:28 +0100 Subject: [PATCH 16/49] Update on number of pods --- api/helm/templates/php-deployment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/helm/templates/php-deployment.yaml b/api/helm/templates/php-deployment.yaml index 2d5df508..611e5d39 100644 --- a/api/helm/templates/php-deployment.yaml +++ b/api/helm/templates/php-deployment.yaml @@ -9,7 +9,7 @@ metadata: app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/managed-by: {{ .Release.Service }} spec: - replicas: 1 + replicas: 3 template: metadata: labels: From 7847c318c41baaad5c1cacab7de68b5eda54ded1 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Fri, 13 Dec 2019 14:46:02 +0100 Subject: [PATCH 17/49] Wierd bux fix on a missing composer install --- api/docker/php/docker-entrypoint.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/api/docker/php/docker-entrypoint.sh b/api/docker/php/docker-entrypoint.sh index 2f39d520..54b7c9e8 100755 --- a/api/docker/php/docker-entrypoint.sh +++ b/api/docker/php/docker-entrypoint.sh @@ -31,9 +31,10 @@ if [ "$1" = 'php-fpm' ] || [ "$1" = 'php' ] || [ "$1" = 'bin/console' ]; then #fi #fi - if [ "$APP_ENV" != 'prod' ]; then + #wierd bug fix... + #if [ "$APP_ENV" != 'prod' ]; then composer install --prefer-dist --no-progress --no-suggest --no-interaction - fi + #fi # Lets setup an nlx certificate if needed #if [ "$APP_ENV" != 'prod' ]; then From ee51e6b677cd5a289ac220820de06284c0abebb5 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Sat, 14 Dec 2019 01:43:13 +0100 Subject: [PATCH 18/49] Added support for VNG cloud --- .env | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.env b/.env index 1f2db881..48cea8f4 100644 --- a/.env +++ b/.env @@ -25,7 +25,7 @@ APP_DESCRIPTION='Naast deze JSON rest API is er ook een [graphql](/graphql) inte # The urls on wich this api is available TRUSTED_PROXIES=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 -TRUSTED_HOSTS=^(.+\.)?conduction\.nl$|^(.+\.)?huwelijksplanner\.online$|^(.+\.)?larping\.eu$|^(.+\.)?common-ground\.dev$|^(.+\.)?trouwplanner\.online$|^(.+\.)?zaakonline\.nl$|localhost +TRUSTED_HOSTS=^(.+\.)?conduction\.nl$|^(.+\.)?vng\.cloud$|^(.+\.)?huwelijksplanner\.online$|^(.+\.)?larping\.eu$|^(.+\.)?common-ground\.dev$|^(.+\.)?trouwplanner\.online$|^(.+\.)?zaakonline\.nl$|localhost ################################################## # Orgization details @@ -47,7 +47,7 @@ ORGANIZATION_UNIT_NAME=Common-Ground # The primary domain for this API @depracticed APP_DOMAIN=conduction.nl # he domains on wich you want to provide this component, the first wil be used as primary (or common in cert-manger terms) -APP_DOMAINS=["conduction.nl","zaakonline.nl","larping.eu","common-ground.dev","trouwplanner.online","huwelijksplanner.online"] +APP_DOMAINS=["conduction.nl","vng.cloud","zaakonline.nl","larping.eu","common-ground.dev","trouwplanner.online","huwelijksplanner.online"] # If set to true wil provide the component on an {APP_NAME}.{APP_DOMAIN} basis for production enviroment, and {APP_NAME}.{APP_ENV}.{APP_DOMAIN} basis for other enviroments. Wil skipp the {APP_NAME}. on both if set to false APP_USE_NAME_AS_SUBDOMAIN=true # The demo enviroment for this component @depracticed From fb8c1bfde9a378aa21bf25e43844ee4ad5b19ca8 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Tue, 17 Dec 2019 14:56:12 +0100 Subject: [PATCH 19/49] Fix on domains --- .env | 10 +- .github/workflows/dockerimage.yml | 2 +- api/Dockerfile | 3 - api/composer.json | 3 +- api/composer.lock | 1797 +++++++++-------- api/config/bundles.php | 29 +- api/config/packages/twig.yaml | 2 +- api/helm/templates/php-deployment.yaml | 2 +- api/helm/values.yaml | 13 +- ...iber.php => FieldsAndExtendSubscriber.php} | 49 +- api/symfony.lock | 6 +- api/templates/helm/Values.yaml.twig | 2 +- docker-compose.yml | 32 +- 13 files changed, 1013 insertions(+), 937 deletions(-) rename api/src/Subscriber/{FieldsSubscriber.php => FieldsAndExtendSubscriber.php} (53%) diff --git a/.env b/.env index 48cea8f4..f892ecbb 100644 --- a/.env +++ b/.env @@ -44,12 +44,12 @@ ORGANIZATION_UNIT_NAME=Common-Ground # Documentation settings ################################################## -# The primary domain for this API @depracticed -APP_DOMAIN=conduction.nl +# The subdomain for this component (should be www for applications) +APP_SUBDOMAIN=pc # he domains on wich you want to provide this component, the first wil be used as primary (or common in cert-manger terms) -APP_DOMAINS=["conduction.nl","vng.cloud","zaakonline.nl","larping.eu","common-ground.dev","trouwplanner.online","huwelijksplanner.online"] -# If set to true wil provide the component on an {APP_NAME}.{APP_DOMAIN} basis for production enviroment, and {APP_NAME}.{APP_ENV}.{APP_DOMAIN} basis for other enviroments. Wil skipp the {APP_NAME}. on both if set to false -APP_USE_NAME_AS_SUBDOMAIN=true +APP_DOMAINS=["conduction.nl","zaakonline.nl","huwelijksplanner.online","common-ground.dev"] + + # The demo enviroment for this component @depracticed APP_DEMO=pc.zaakonline.nl # he Repository for this component diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml index 091c7edd..763f5ae6 100644 --- a/.github/workflows/dockerimage.yml +++ b/.github/workflows/dockerimage.yml @@ -56,7 +56,7 @@ jobs: - name: Run the docker image run: docker-compose up -d - name: Taking some sleep - run: sleep 100 + run: sleep 200 - name: Check if all containers are running run: docker ps - name: Dumping the logs diff --git a/api/Dockerfile b/api/Dockerfile index df2d1875..a5bfe406 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -125,9 +125,6 @@ CMD ["php-fpm"] # depends on the "php" stage above, and with an litle bit of help from https://github.com/shiphp/nginx-env FROM shiphp/nginx-env AS api_platform_nginx -# We use our own more secure and limited config -#ONBUILD ADD docker/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf - # Due to our config we need a copy of the public folder for serving static content COPY docker/nginx/conf.d/default.conf.template /etc/nginx/conf.d/default.conf WORKDIR /srv/api diff --git a/api/composer.json b/api/composer.json index bc7545a9..0e20ae21 100644 --- a/api/composer.json +++ b/api/composer.json @@ -21,6 +21,7 @@ "symfony/flex": "^1.1", "symfony/framework-bundle": "4.3.*", "symfony/mercure-bundle": "*", + "symfony/property-access": "4.4.*", "symfony/yaml": "4.3.*", "tbbc/money-bundle": "^3.1", "webonyx/graphql-php": "^0.13.8" @@ -60,7 +61,7 @@ "extra" : { "symfony" : { "allow-contrib" : false, - "require" : "4.3.*" + "require" : "4.4.*" } }, "scripts": { diff --git a/api/composer.lock b/api/composer.lock index 3fc1d7d6..10571f7f 100644 --- a/api/composer.lock +++ b/api/composer.lock @@ -4,28 +4,28 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "a5cf6c5b0e2fcb4b7558cd2635260c67", + "content-hash": "6dedf18848d212df8a091e39a77494e7", "packages": [ { "name": "api-platform/api-pack", - "version": "v1.2.0", + "version": "v1.2.1", "source": { "type": "git", "url": "https://github.com/api-platform/api-pack.git", - "reference": "9e3e7421415c747e676778f211434674324dcfa9" + "reference": "41364f8763475d7709c43f790aa77a4157d038e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/api-pack/zipball/9e3e7421415c747e676778f211434674324dcfa9", - "reference": "9e3e7421415c747e676778f211434674324dcfa9", + "url": "https://api.github.com/repos/api-platform/api-pack/zipball/41364f8763475d7709c43f790aa77a4157d038e2", + "reference": "41364f8763475d7709c43f790aa77a4157d038e2", "shasum": "" }, "require": { "api-platform/core": "^2.1", "doctrine/annotations": "^1.0", - "doctrine/doctrine-bundle": "^1.6", + "doctrine/doctrine-bundle": "^1.6 || ^2.0", "doctrine/orm": "^2.4.5", - "nelmio/cors-bundle": "^1.5", + "nelmio/cors-bundle": "^1.5 || ^2.0", "php": "^7.0", "phpdocumentor/reflection-docblock": "^3.0 || ^4.0", "symfony/asset": "*", @@ -40,33 +40,34 @@ "MIT" ], "description": "A pack for API Platform", - "time": "2019-01-12T11:48:48+00:00" + "time": "2019-11-12T17:43:33+00:00" }, { "name": "api-platform/core", - "version": "v2.4.7", + "version": "v2.5.3", "source": { "type": "git", "url": "https://github.com/api-platform/core.git", - "reference": "53793261113b18931ce8a9e2f174f59fdaa0c1c5" + "reference": "2d402688c485457adbc771e347e6498e70c6f232" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/core/zipball/53793261113b18931ce8a9e2f174f59fdaa0c1c5", - "reference": "53793261113b18931ce8a9e2f174f59fdaa0c1c5", + "url": "https://api.github.com/repos/api-platform/core/zipball/2d402688c485457adbc771e347e6498e70c6f232", + "reference": "2d402688c485457adbc771e347e6498e70c6f232", "shasum": "" }, "require": { "doctrine/inflector": "^1.0", + "fig/link-util": "^1.0", "php": ">=7.1", "psr/cache": "^1.0", "psr/container": "^1.0", - "symfony/http-foundation": "^3.4 || ^4.0", - "symfony/http-kernel": "^3.4 || ^4.0", - "symfony/property-access": "^3.4 || ^4.0", - "symfony/property-info": "^3.4 || ^4.0", - "symfony/serializer": "^4.2.6", - "symfony/web-link": "^4.1", + "symfony/http-foundation": "^4.3.6 || ^5.0", + "symfony/http-kernel": "^4.3.7 || ^5.0", + "symfony/property-access": "^3.4 || ^4.0 || ^5.0", + "symfony/property-info": "^3.4 || ^4.0 || ^5.0", + "symfony/serializer": "^4.3 || ^5.0", + "symfony/web-link": "^4.1 || ^5.0", "willdurand/negotiation": "^2.0.3" }, "conflict": { @@ -79,19 +80,20 @@ "behat/mink-browserkit-driver": "^1.3.1", "behat/mink-extension": "^2.2", "behat/symfony2-extension": "^2.1.1", - "behatch/contexts": "3.1.0", + "behatch/contexts": "^3.1.0", "doctrine/annotations": "^1.7", + "doctrine/common": "^2.11", "doctrine/data-fixtures": "^1.2.2", - "doctrine/doctrine-bundle": "^1.8", + "doctrine/doctrine-bundle": "^1.8 || ^2.0", "doctrine/doctrine-cache-bundle": "^1.3.5", - "doctrine/mongodb-odm": "^2.0@beta", - "doctrine/mongodb-odm-bundle": "^4.0@beta", - "doctrine/orm": "^2.6.3", + "doctrine/mongodb-odm": "^2.0", + "doctrine/mongodb-odm-bundle": "^4.0", + "doctrine/orm": "^2.6.4", "elasticsearch/elasticsearch": "^6.0", "friendsofsymfony/user-bundle": "^2.2@dev", "guzzlehttp/guzzle": "^6.0", "jangregor/phpstan-prophecy": "^0.4.2", - "justinrainbow/json-schema": "^5.0", + "justinrainbow/json-schema": "^5.2.1", "nelmio/api-doc-bundle": "^2.13.4", "phpdocumentor/reflection-docblock": "^3.0 || ^4.0", "phpdocumentor/type-resolver": "^0.3 || ^0.4", @@ -106,32 +108,34 @@ "ramsey/uuid": "^3.7", "ramsey/uuid-doctrine": "^1.4", "sebastian/object-enumerator": "^3.0.3", - "symfony/asset": "^3.4 || ^4.0", - "symfony/cache": "^3.4 || ^4.0", - "symfony/config": "^3.4 || ^4.0", - "symfony/console": "^3.4 || ^4.0", - "symfony/css-selector": "^3.4 || ^4.0", + "symfony/asset": "^3.4 || ^4.0 || ^5.0", + "symfony/browser-kit": "^4.3 || ^5.0", + "symfony/cache": "^3.4 || ^4.0 || ^5.0", + "symfony/config": "^3.4 || ^4.0 || ^5.0", + "symfony/console": "^3.4 || ^4.0 || ^5.0", + "symfony/css-selector": "^3.4 || ^4.0 || ^5.0", "symfony/debug": "^3.4 || ^4.0", - "symfony/dependency-injection": "^3.4 || ^4.0", - "symfony/doctrine-bridge": "^3.4 || ^4.0", - "symfony/dom-crawler": "^3.4 || ^4.0", - "symfony/event-dispatcher": "^3.4 || ^4.0", - "symfony/expression-language": "^3.4 || ^4.0", - "symfony/finder": "^3.4 || ^4.0", - "symfony/form": "^3.4 || ^4.0", - "symfony/framework-bundle": "^4.2", + "symfony/dependency-injection": "^3.4 || ^4.0 || ^5.0", + "symfony/doctrine-bridge": "^3.4 || ^4.0 || ^5.0", + "symfony/dom-crawler": "^3.4 || ^4.0 || ^5.0", + "symfony/event-dispatcher": "^3.4 || ^4.0 || ^5.0", + "symfony/expression-language": "^3.4 || ^4.0 || ^5.0", + "symfony/finder": "^3.4 || ^4.0 || ^5.0", + "symfony/form": "^3.4 || ^4.0 || ^5.0", + "symfony/framework-bundle": "^4.3.2 || ^5.0", + "symfony/http-client": "^4.3 || ^5.0", "symfony/mercure-bundle": "*", - "symfony/messenger": "^4.2", - "symfony/phpunit-bridge": "^4.3@dev", - "symfony/routing": "^3.4 || ^4.0", - "symfony/security-bundle": "^3.4 || ^4.0", - "symfony/security-core": "^3.4 || ^4.0", - "symfony/twig-bundle": "^3.4 || ^4.0", - "symfony/validator": "^3.4 || ^4.0", - "symfony/web-profiler-bundle": "^4.2", - "symfony/yaml": "^3.4 || ^4.0", - "twig/twig": "^1.41 || ^2.10", - "webonyx/graphql-php": ">=0.13 <1.0" + "symfony/messenger": "^4.3 || ^5.0", + "symfony/phpunit-bridge": "^4.3 || ^5.0", + "symfony/routing": "^3.4 || ^4.3 || ^5.0", + "symfony/security-bundle": "^3.4 || ^4.0 || ^5.0", + "symfony/security-core": "^4.3 || ^5.0", + "symfony/twig-bundle": "^3.4 || ^4.0 || ^5.0", + "symfony/validator": "^3.4 || ^4.0 || ^5.0", + "symfony/web-profiler-bundle": "^4.2 || ^5.0", + "symfony/yaml": "^3.4 || ^4.0 || ^5.0", + "twig/twig": "^1.42.3 || ^2.12", + "webonyx/graphql-php": ">=0.13.1 <1.0" }, "suggest": { "doctrine/mongodb-odm-bundle": "To support MongoDB. Only versions 4.0 and later are supported.", @@ -184,7 +188,7 @@ "rest", "swagger" ], - "time": "2019-09-17T14:41:55+00:00" + "time": "2019-11-23T11:27:39+00:00" }, { "name": "api-platform/schema-generator", @@ -362,24 +366,24 @@ }, { "name": "composer/xdebug-handler", - "version": "1.3.3", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "46867cbf8ca9fb8d60c506895449eb799db1184f" + "reference": "cbe23383749496fe0f373345208b79568e4bc248" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/46867cbf8ca9fb8d60c506895449eb799db1184f", - "reference": "46867cbf8ca9fb8d60c506895449eb799db1184f", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/cbe23383749496fe0f373345208b79568e4bc248", + "reference": "cbe23383749496fe0f373345208b79568e4bc248", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0", + "php": "^5.3.2 || ^7.0 || ^8.0", "psr/log": "^1.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" }, "type": "library", "autoload": { @@ -397,12 +401,12 @@ "email": "john-stevenson@blueyonder.co.uk" } ], - "description": "Restarts a process without xdebug.", + "description": "Restarts a process without Xdebug.", "keywords": [ "Xdebug", "performance" ], - "time": "2019-05-27T17:52:04+00:00" + "time": "2019-11-06T16:40:04+00:00" }, { "name": "conduction/commongroundbundle", @@ -484,16 +488,16 @@ }, { "name": "doctrine/annotations", - "version": "v1.7.0", + "version": "v1.8.0", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "fa4c4e861e809d6a1103bd620cce63ed91aedfeb" + "reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/fa4c4e861e809d6a1103bd620cce63ed91aedfeb", - "reference": "fa4c4e861e809d6a1103bd620cce63ed91aedfeb", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/904dca4eb10715b92569fbcd79e201d5c349b6bc", + "reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc", "shasum": "" }, "require": { @@ -502,7 +506,7 @@ }, "require-dev": { "doctrine/cache": "1.*", - "phpunit/phpunit": "^7.5@dev" + "phpunit/phpunit": "^7.5" }, "type": "library", "extra": { @@ -548,20 +552,20 @@ "docblock", "parser" ], - "time": "2019-08-08T18:11:40+00:00" + "time": "2019-10-01T18:55:10+00:00" }, { "name": "doctrine/cache", - "version": "v1.8.0", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "d768d58baee9a4862ca783840eca1b9add7a7f57" + "reference": "382e7f4db9a12dc6c19431743a2b096041bcdd62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/d768d58baee9a4862ca783840eca1b9add7a7f57", - "reference": "d768d58baee9a4862ca783840eca1b9add7a7f57", + "url": "https://api.github.com/repos/doctrine/cache/zipball/382e7f4db9a12dc6c19431743a2b096041bcdd62", + "reference": "382e7f4db9a12dc6c19431743a2b096041bcdd62", "shasum": "" }, "require": { @@ -572,7 +576,7 @@ }, "require-dev": { "alcaeus/mongo-php-adapter": "^1.1", - "doctrine/coding-standard": "^4.0", + "doctrine/coding-standard": "^6.0", "mongodb/mongodb": "^1.1", "phpunit/phpunit": "^7.0", "predis/predis": "~1.0" @@ -583,7 +587,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8.x-dev" + "dev-master": "1.9.x-dev" } }, "autoload": { @@ -596,6 +600,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -604,10 +612,6 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" @@ -617,26 +621,33 @@ "email": "schmittjoh@gmail.com" } ], - "description": "Caching library offering an object-oriented API for many cache backends", - "homepage": "https://www.doctrine-project.org", + "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", + "homepage": "https://www.doctrine-project.org/projects/cache.html", "keywords": [ + "abstraction", + "apcu", "cache", - "caching" + "caching", + "couchdb", + "memcached", + "php", + "redis", + "xcache" ], - "time": "2018-08-21T18:01:43+00:00" + "time": "2019-11-29T15:36:20+00:00" }, { "name": "doctrine/collections", - "version": "v1.6.2", + "version": "1.6.4", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "c5e0bc17b1620e97c968ac409acbff28b8b850be" + "reference": "6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/c5e0bc17b1620e97c968ac409acbff28b8b850be", - "reference": "c5e0bc17b1620e97c968ac409acbff28b8b850be", + "url": "https://api.github.com/repos/doctrine/collections/zipball/6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7", + "reference": "6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7", "shasum": "" }, "require": { @@ -664,6 +675,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -672,10 +687,6 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" @@ -693,7 +704,7 @@ "iterators", "php" ], - "time": "2019-06-09T13:48:14+00:00" + "time": "2019-11-13T13:07:11+00:00" }, { "name": "doctrine/common", @@ -780,27 +791,30 @@ }, { "name": "doctrine/data-fixtures", - "version": "v1.3.2", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/doctrine/data-fixtures.git", - "reference": "09b16943b27f3d80d63988d100ff256148c2f78b" + "reference": "608a35a3b5bcc4214d116603095f8b0c51091592" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/09b16943b27f3d80d63988d100ff256148c2f78b", - "reference": "09b16943b27f3d80d63988d100ff256148c2f78b", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/608a35a3b5bcc4214d116603095f8b0c51091592", + "reference": "608a35a3b5bcc4214d116603095f8b0c51091592", "shasum": "" }, "require": { - "doctrine/common": "~2.2", - "php": "^7.1" + "doctrine/common": "^2.11", + "php": "^7.2" }, "conflict": { "doctrine/phpcr-odm": "<1.3.0" }, "require-dev": { + "alcaeus/mongo-php-adapter": "^1.1", + "doctrine/coding-standard": "^6.0", "doctrine/dbal": "^2.5.4", + "doctrine/mongodb-odm": "^1.3.0", "doctrine/orm": "^2.5.4", "phpunit/phpunit": "^7.0" }, @@ -813,7 +827,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "1.4.x-dev" } }, "autoload": { @@ -836,35 +850,34 @@ "keywords": [ "database" ], - "time": "2019-07-10T18:30:35+00:00" + "time": "2019-10-30T20:03:18+00:00" }, { "name": "doctrine/dbal", - "version": "v2.9.2", + "version": "v2.10.0", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9" + "reference": "0c9a646775ef549eb0a213a4f9bd4381d9b4d934" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9", - "reference": "22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/0c9a646775ef549eb0a213a4f9bd4381d9b4d934", + "reference": "0c9a646775ef549eb0a213a4f9bd4381d9b4d934", "shasum": "" }, "require": { "doctrine/cache": "^1.0", "doctrine/event-manager": "^1.0", "ext-pdo": "*", - "php": "^7.1" + "php": "^7.2" }, "require-dev": { - "doctrine/coding-standard": "^5.0", - "jetbrains/phpstorm-stubs": "^2018.1.2", - "phpstan/phpstan": "^0.10.1", - "phpunit/phpunit": "^7.4", - "symfony/console": "^2.0.5|^3.0|^4.0", - "symfony/phpunit-bridge": "^3.4.5|^4.0.5" + "doctrine/coding-standard": "^6.0", + "jetbrains/phpstorm-stubs": "^2019.1", + "phpstan/phpstan": "^0.11.3", + "phpunit/phpunit": "^8.4.1", + "symfony/console": "^2.0.5|^3.0|^4.0|^5.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -875,7 +888,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.9.x-dev", + "dev-master": "2.10.x-dev", "dev-develop": "3.0.x-dev" } }, @@ -889,6 +902,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -897,10 +914,6 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" @@ -911,39 +924,50 @@ "keywords": [ "abstraction", "database", + "db2", "dbal", + "mariadb", + "mssql", "mysql", - "persistence", + "oci8", + "oracle", + "pdo", "pgsql", - "php", - "queryobject" - ], - "time": "2018-12-31T03:27:51+00:00" + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlanywhere", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "time": "2019-11-03T16:50:43+00:00" }, { "name": "doctrine/doctrine-bundle", - "version": "1.11.2", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "28101e20776d8fa20a00b54947fbae2db0d09103" + "reference": "f96fac225563f5b3b4eeb2f80eb982b7f56484d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/28101e20776d8fa20a00b54947fbae2db0d09103", - "reference": "28101e20776d8fa20a00b54947fbae2db0d09103", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/f96fac225563f5b3b4eeb2f80eb982b7f56484d8", + "reference": "f96fac225563f5b3b4eeb2f80eb982b7f56484d8", "shasum": "" }, "require": { - "doctrine/dbal": "^2.5.12", - "doctrine/doctrine-cache-bundle": "~1.2", + "doctrine/dbal": "^2.9.0", "jdorn/sql-formatter": "^1.2.16", "php": "^7.1", - "symfony/config": "^3.4|^4.1", - "symfony/console": "^3.4|^4.1", - "symfony/dependency-injection": "^3.4|^4.1", - "symfony/doctrine-bridge": "^3.4|^4.1", - "symfony/framework-bundle": "^3.4|^4.1" + "symfony/cache": "^4.3.3|^5.0", + "symfony/config": "^4.3.3|^5.0", + "symfony/console": "^3.4.30|^4.3.3|^5.0", + "symfony/dependency-injection": "^4.3.3|^5.0", + "symfony/doctrine-bridge": "^4.3.7|^5.0", + "symfony/framework-bundle": "^3.4.30|^4.3.3|^5.0" }, "conflict": { "doctrine/orm": "<2.6", @@ -952,15 +976,14 @@ "require-dev": { "doctrine/coding-standard": "^6.0", "doctrine/orm": "^2.6", - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "7.0", - "symfony/cache": "^3.4|^4.1", + "phpunit/phpunit": "^7.5", "symfony/phpunit-bridge": "^4.2", - "symfony/property-info": "^3.4|^4.1", - "symfony/validator": "^3.4|^4.1", - "symfony/web-profiler-bundle": "^3.4|^4.1", - "symfony/yaml": "^3.4|^4.1", - "twig/twig": "^1.34|^2.4" + "symfony/property-info": "^4.3.3|^5.0", + "symfony/twig-bridge": "^3.4.30|^4.3.3|^5.0", + "symfony/validator": "^3.4.30|^4.3.3|^5.0", + "symfony/web-profiler-bundle": "^3.4.30|^4.3.3|^5.0", + "symfony/yaml": "^3.4.30|^4.3.3|^5.0", + "twig/twig": "^1.34|^2.12" }, "suggest": { "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", @@ -969,7 +992,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "1.11.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -983,20 +1006,20 @@ ], "authors": [ { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, { - "name": "Doctrine Project", - "homepage": "http://www.doctrine-project.org/" + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" }, { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Doctrine Project", + "homepage": "http://www.doctrine-project.org/" } ], "description": "Symfony DoctrineBundle", @@ -1007,130 +1030,42 @@ "orm", "persistence" ], - "time": "2019-06-04T07:35:05+00:00" - }, - { - "name": "doctrine/doctrine-cache-bundle", - "version": "1.3.5", - "source": { - "type": "git", - "url": "https://github.com/doctrine/DoctrineCacheBundle.git", - "reference": "5514c90d9fb595e1095e6d66ebb98ce9ef049927" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/5514c90d9fb595e1095e6d66ebb98ce9ef049927", - "reference": "5514c90d9fb595e1095e6d66ebb98ce9ef049927", - "shasum": "" - }, - "require": { - "doctrine/cache": "^1.4.2", - "doctrine/inflector": "~1.0", - "php": ">=5.3.2", - "symfony/doctrine-bridge": "~2.7|~3.3|~4.0" - }, - "require-dev": { - "instaclick/coding-standard": "~1.1", - "instaclick/object-calisthenics-sniffs": "dev-master", - "instaclick/symfony2-coding-standard": "dev-remaster", - "phpunit/phpunit": "~4.8.36|~5.6|~6.5|~7.0", - "predis/predis": "~0.8", - "satooshi/php-coveralls": "^1.0", - "squizlabs/php_codesniffer": "~1.5", - "symfony/console": "~2.7|~3.3|~4.0", - "symfony/finder": "~2.7|~3.3|~4.0", - "symfony/framework-bundle": "~2.7|~3.3|~4.0", - "symfony/phpunit-bridge": "~2.7|~3.3|~4.0", - "symfony/security-acl": "~2.7|~3.3", - "symfony/validator": "~2.7|~3.3|~4.0", - "symfony/yaml": "~2.7|~3.3|~4.0" - }, - "suggest": { - "symfony/security-acl": "For using this bundle to cache ACLs" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Bundle\\DoctrineCacheBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Fabio B. Silva", - "email": "fabio.bat.silva@gmail.com" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@hotmail.com" - }, - { - "name": "Doctrine Project", - "homepage": "http://www.doctrine-project.org/" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Symfony Bundle for Doctrine Cache", - "homepage": "https://www.doctrine-project.org", - "keywords": [ - "cache", - "caching" - ], - "time": "2018-11-09T06:25:35+00:00" + "time": "2019-11-28T08:38:10+00:00" }, { "name": "doctrine/doctrine-fixtures-bundle", - "version": "3.2.2", + "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineFixturesBundle.git", - "reference": "90e4a4f968b2dae40e290a6ee516957af043f16c" + "reference": "8f07fcfdac7f3591f3c4bf13a50cbae05f65ed70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/90e4a4f968b2dae40e290a6ee516957af043f16c", - "reference": "90e4a4f968b2dae40e290a6ee516957af043f16c", + "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/8f07fcfdac7f3591f3c4bf13a50cbae05f65ed70", + "reference": "8f07fcfdac7f3591f3c4bf13a50cbae05f65ed70", "shasum": "" }, "require": { "doctrine/data-fixtures": "^1.3", - "doctrine/doctrine-bundle": "^1.6", + "doctrine/doctrine-bundle": "^1.11|^2.0", "doctrine/orm": "^2.6.0", "php": "^7.1", - "symfony/doctrine-bridge": "~3.4|^4.1", - "symfony/framework-bundle": "^3.4|^4.1" + "symfony/config": "^3.4|^4.3|^5.0", + "symfony/console": "^3.4|^4.3|^5.0", + "symfony/dependency-injection": "^3.4|^4.3|^5.0", + "symfony/doctrine-bridge": "^3.4|^4.1|^5.0", + "symfony/http-kernel": "^3.4|^4.3|^5.0" }, "require-dev": { "doctrine/coding-standard": "^6.0", "phpunit/phpunit": "^7.4", - "symfony/phpunit-bridge": "^4.1" + "symfony/phpunit-bridge": "^4.1|^5.0" }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "3.2.x-dev" + "dev-master": "3.3.x-dev" } }, "autoload": { @@ -1144,16 +1079,16 @@ ], "authors": [ { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Doctrine Project", "homepage": "http://www.doctrine-project.org" }, { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" } ], "description": "Symfony DoctrineFixturesBundle", @@ -1162,20 +1097,20 @@ "Fixture", "persistence" ], - "time": "2019-06-12T12:03:37+00:00" + "time": "2019-11-13T15:46:58+00:00" }, { "name": "doctrine/event-manager", - "version": "v1.0.0", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "a520bc093a0170feeb6b14e9d83f3a14452e64b3" + "reference": "629572819973f13486371cb611386eb17851e85c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/a520bc093a0170feeb6b14e9d83f3a14452e64b3", - "reference": "a520bc093a0170feeb6b14e9d83f3a14452e64b3", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/629572819973f13486371cb611386eb17851e85c", + "reference": "629572819973f13486371cb611386eb17851e85c", "shasum": "" }, "require": { @@ -1185,7 +1120,7 @@ "doctrine/common": "<2.9@dev" }, "require-dev": { - "doctrine/coding-standard": "^4.0", + "doctrine/coding-standard": "^6.0", "phpunit/phpunit": "^7.0" }, "type": "library", @@ -1204,6 +1139,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -1212,10 +1151,6 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" @@ -1229,27 +1164,29 @@ "email": "ocramius@gmail.com" } ], - "description": "Doctrine Event Manager component", + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", "homepage": "https://www.doctrine-project.org/projects/event-manager.html", "keywords": [ "event", - "eventdispatcher", - "eventmanager" + "event dispatcher", + "event manager", + "event system", + "events" ], - "time": "2018-06-11T11:59:03+00:00" + "time": "2019-11-10T09:48:07+00:00" }, { "name": "doctrine/inflector", - "version": "v1.3.0", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "5527a48b7313d15261292c149e55e26eae771b0a" + "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", - "reference": "5527a48b7313d15261292c149e55e26eae771b0a", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/ec3a55242203ffa6a4b27c58176da97ff0a7aec1", + "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1", "shasum": "" }, "require": { @@ -1274,6 +1211,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -1282,10 +1223,6 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" @@ -1303,20 +1240,20 @@ "singularize", "string" ], - "time": "2018-01-09T20:05:19+00:00" + "time": "2019-10-30T19:59:35+00:00" }, { "name": "doctrine/instantiator", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "a2c590166b2133a4633738648b6b064edae0814a" + "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", - "reference": "a2c590166b2133a4633738648b6b064edae0814a", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", + "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", "shasum": "" }, "require": { @@ -1359,20 +1296,20 @@ "constructor", "instantiate" ], - "time": "2019-03-17T17:37:11+00:00" + "time": "2019-10-21T16:45:58+00:00" }, { "name": "doctrine/lexer", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "e17f069ede36f7534b95adec71910ed1b49c74ea" + "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/e17f069ede36f7534b95adec71910ed1b49c74ea", - "reference": "e17f069ede36f7534b95adec71910ed1b49c74ea", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", + "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", "shasum": "" }, "require": { @@ -1386,7 +1323,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -1421,38 +1358,39 @@ "parser", "php" ], - "time": "2019-07-30T19:33:28+00:00" + "time": "2019-10-30T14:39:59+00:00" }, { "name": "doctrine/orm", - "version": "v2.6.3", + "version": "v2.7.0", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "434820973cadf2da2d66e7184be370084cc32ca8" + "reference": "4d763ca4c925f647b248b9fa01b5f47aa3685d62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/434820973cadf2da2d66e7184be370084cc32ca8", - "reference": "434820973cadf2da2d66e7184be370084cc32ca8", + "url": "https://api.github.com/repos/doctrine/orm/zipball/4d763ca4c925f647b248b9fa01b5f47aa3685d62", + "reference": "4d763ca4c925f647b248b9fa01b5f47aa3685d62", "shasum": "" }, "require": { - "doctrine/annotations": "~1.5", - "doctrine/cache": "~1.6", - "doctrine/collections": "^1.4", - "doctrine/common": "^2.7.1", - "doctrine/dbal": "^2.6", - "doctrine/instantiator": "~1.1", + "doctrine/annotations": "^1.8", + "doctrine/cache": "^1.9.1", + "doctrine/collections": "^1.5", + "doctrine/common": "^2.11", + "doctrine/dbal": "^2.9.3", + "doctrine/event-manager": "^1.1", + "doctrine/instantiator": "^1.3", + "doctrine/persistence": "^1.2", "ext-pdo": "*", "php": "^7.1", - "symfony/console": "~3.0|~4.0" + "symfony/console": "^3.0|^4.0|^5.0" }, "require-dev": { - "doctrine/coding-standard": "^1.0", - "phpunit/phpunit": "^6.5", - "squizlabs/php_codesniffer": "^3.2", - "symfony/yaml": "~3.4|~4.0" + "doctrine/coding-standard": "^5.0", + "phpunit/phpunit": "^7.5", + "symfony/yaml": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" @@ -1463,7 +1401,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6.x-dev" + "dev-master": "2.7.x-dev" } }, "autoload": { @@ -1476,6 +1414,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -1484,10 +1426,6 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" @@ -1498,25 +1436,25 @@ } ], "description": "Object-Relational-Mapper for PHP", - "homepage": "http://www.doctrine-project.org", + "homepage": "https://www.doctrine-project.org/projects/orm.html", "keywords": [ "database", "orm" ], - "time": "2018-11-20T23:46:46+00:00" + "time": "2019-11-19T08:38:05+00:00" }, { "name": "doctrine/persistence", - "version": "1.1.1", + "version": "1.3.3", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "3da7c9d125591ca83944f477e65ed3d7b4617c48" + "reference": "99b196bbd4715a94fa100fac664a351ffa46d6a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/3da7c9d125591ca83944f477e65ed3d7b4617c48", - "reference": "3da7c9d125591ca83944f477e65ed3d7b4617c48", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/99b196bbd4715a94fa100fac664a351ffa46d6a5", + "reference": "99b196bbd4715a94fa100fac664a351ffa46d6a5", "shasum": "" }, "require": { @@ -1531,19 +1469,20 @@ "doctrine/common": "<2.10@dev" }, "require-dev": { - "doctrine/coding-standard": "^5.0", - "phpstan/phpstan": "^0.8", + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.11", "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" + "Doctrine\\Common\\": "lib/Doctrine/Common", + "Doctrine\\Persistence\\": "lib/Doctrine/Persistence" } }, "notification-url": "https://packagist.org/downloads/", @@ -1551,6 +1490,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -1559,10 +1502,6 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" @@ -1585,7 +1524,7 @@ "orm", "persistence" ], - "time": "2019-04-23T08:28:24+00:00" + "time": "2019-12-13T10:43:02+00:00" }, { "name": "doctrine/reflection", @@ -1780,16 +1719,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v2.15.3", + "version": "v2.16.1", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "705490b0f282f21017d73561e9498d2b622ee34c" + "reference": "c8afb599858876e95e8ebfcd97812d383fa23f02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/705490b0f282f21017d73561e9498d2b622ee34c", - "reference": "705490b0f282f21017d73561e9498d2b622ee34c", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/c8afb599858876e95e8ebfcd97812d383fa23f02", + "reference": "c8afb599858876e95e8ebfcd97812d383fa23f02", "shasum": "" }, "require": { @@ -1800,15 +1739,15 @@ "ext-tokenizer": "*", "php": "^5.6 || ^7.0", "php-cs-fixer/diff": "^1.3", - "symfony/console": "^3.4.17 || ^4.1.6", - "symfony/event-dispatcher": "^3.0 || ^4.0", - "symfony/filesystem": "^3.0 || ^4.0", - "symfony/finder": "^3.0 || ^4.0", - "symfony/options-resolver": "^3.0 || ^4.0", + "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0", + "symfony/event-dispatcher": "^3.0 || ^4.0 || ^5.0", + "symfony/filesystem": "^3.0 || ^4.0 || ^5.0", + "symfony/finder": "^3.0 || ^4.0 || ^5.0", + "symfony/options-resolver": "^3.0 || ^4.0 || ^5.0", "symfony/polyfill-php70": "^1.0", "symfony/polyfill-php72": "^1.4", - "symfony/process": "^3.0 || ^4.0", - "symfony/stopwatch": "^3.0 || ^4.0" + "symfony/process": "^3.0 || ^4.0 || ^5.0", + "symfony/stopwatch": "^3.0 || ^4.0 || ^5.0" }, "require-dev": { "johnkary/phpunit-speedtrap": "^1.1 || ^2.0 || ^3.0", @@ -1821,8 +1760,8 @@ "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.1", "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.1", "phpunitgoodpractices/traits": "^1.8", - "symfony/phpunit-bridge": "^4.3", - "symfony/yaml": "^3.0 || ^4.0" + "symfony/phpunit-bridge": "^4.3 || ^5.0", + "symfony/yaml": "^3.0 || ^4.0 || ^5.0" }, "suggest": { "ext-mbstring": "For handling non-UTF8 characters in cache signature.", @@ -1865,20 +1804,20 @@ } ], "description": "A tool to automatically fix PHP code style", - "time": "2019-08-31T12:51:54+00:00" + "time": "2019-11-25T22:10:32+00:00" }, { "name": "gedmo/doctrine-extensions", - "version": "v2.4.37", + "version": "v2.4.38", "source": { "type": "git", "url": "https://github.com/Atlantic18/DoctrineExtensions.git", - "reference": "5dd471f656e46d815f063bf3f12c667649ec7ffb" + "reference": "81681364331b131518060e4776300a5346df1eb5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Atlantic18/DoctrineExtensions/zipball/5dd471f656e46d815f063bf3f12c667649ec7ffb", - "reference": "5dd471f656e46d815f063bf3f12c667649ec7ffb", + "url": "https://api.github.com/repos/Atlantic18/DoctrineExtensions/zipball/81681364331b131518060e4776300a5346df1eb5", + "reference": "81681364331b131518060e4776300a5346df1eb5", "shasum": "" }, "require": { @@ -1887,14 +1826,15 @@ "php": ">=5.3.2" }, "conflict": { - "doctrine/annotations": "<1.2" + "doctrine/annotations": "<1.2", + "doctrine/mongodb-odm": ">=2.0" }, "require-dev": { "doctrine/common": ">=2.5.0", - "doctrine/mongodb-odm": ">=1.0.2", + "doctrine/mongodb-odm": ">=1.0.2 <2.0", "doctrine/orm": ">=2.5.0", - "phpunit/phpunit": "^4.8.35|^5.7|^6.5", - "symfony/yaml": "~2.6|~3.0|~4.0" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", + "symfony/yaml": "~2.6 || ~3.0 || ~4.0" }, "suggest": { "doctrine/mongodb-odm": "to use the extensions with the MongoDB ODM", @@ -1916,10 +1856,6 @@ "MIT" ], "authors": [ - { - "name": "David Buchmann", - "email": "david@liip.ch" - }, { "name": "Gediminas Morkevicius", "email": "gediminas.morkevicius@gmail.com" @@ -1927,6 +1863,10 @@ { "name": "Gustavo Falco", "email": "comfortablynumb84@gmail.com" + }, + { + "name": "David Buchmann", + "email": "david@liip.ch" } ], "description": "Doctrine2 behavioral extensions", @@ -1946,48 +1886,50 @@ "tree", "uploadable" ], - "time": "2019-03-17T18:16:12+00:00" + "time": "2019-11-08T22:33:07+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "6.3.3", + "version": "6.5.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" + "reference": "dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5", + "reference": "dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5", "shasum": "" }, "require": { + "ext-json": "*", "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", + "guzzlehttp/psr7": "^1.6.1", "php": ">=5.5" }, "require-dev": { "ext-curl": "*", "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.0" + "psr/log": "^1.1" }, "suggest": { + "ext-intl": "Required for Internationalized Domain Name (IDN) support", "psr/log": "Required for using the Log middleware" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.3-dev" + "dev-master": "6.5-dev" } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { "GuzzleHttp\\": "src/" - } + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2011,7 +1953,7 @@ "rest", "web service" ], - "time": "2018-04-22T15:46:56+00:00" + "time": "2019-12-07T18:20:45+00:00" }, { "name": "guzzlehttp/promises", @@ -2242,16 +2184,16 @@ }, { "name": "league/html-to-markdown", - "version": "4.8.2", + "version": "4.9.0", "source": { "type": "git", "url": "https://github.com/thephpleague/html-to-markdown.git", - "reference": "e747489191f8e9144a7270eb61f8b9516e99e413" + "reference": "71319108e3db506250b8987721b13568fd9fa446" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/e747489191f8e9144a7270eb61f8b9516e99e413", - "reference": "e747489191f8e9144a7270eb61f8b9516e99e413", + "url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/71319108e3db506250b8987721b13568fd9fa446", + "reference": "71319108e3db506250b8987721b13568fd9fa446", "shasum": "" }, "require": { @@ -2261,7 +2203,7 @@ }, "require-dev": { "mikehaertl/php-shellcommand": "~1.1.0", - "phpunit/phpunit": "4.*", + "phpunit/phpunit": "^4.8|^5.7", "scrutinizer/ocular": "~1.1" }, "bin": [ @@ -2270,7 +2212,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "4.10-dev" } }, "autoload": { @@ -2302,20 +2244,20 @@ "html", "markdown" ], - "time": "2019-08-02T11:57:39+00:00" + "time": "2019-11-02T14:54:14+00:00" }, { "name": "lexik/jwt-authentication-bundle", - "version": "v2.6.4", + "version": "v2.6.5", "source": { "type": "git", "url": "https://github.com/lexik/LexikJWTAuthenticationBundle.git", - "reference": "f79f20b282834878aab10530ca102a80396624ed" + "reference": "448551fc08c6cff37aad9d8f27f6b9615cd28966" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lexik/LexikJWTAuthenticationBundle/zipball/f79f20b282834878aab10530ca102a80396624ed", - "reference": "f79f20b282834878aab10530ca102a80396624ed", + "url": "https://api.github.com/repos/lexik/LexikJWTAuthenticationBundle/zipball/448551fc08c6cff37aad9d8f27f6b9615cd28966", + "reference": "448551fc08c6cff37aad9d8f27f6b9615cd28966", "shasum": "" }, "require": { @@ -2323,17 +2265,16 @@ "lcobucci/jwt": "^3.2", "namshi/jose": "^7.2", "php": "^5.5|^7.0", - "symfony/framework-bundle": "^3.4|^4.0", - "symfony/security-bundle": "^3.4|^4.0" + "symfony/framework-bundle": "^3.4|^4.0|^5.0", + "symfony/security-bundle": "^3.4|^4.0|^5.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^1.1|^2.8", - "symfony/browser-kit": "^3.4|^4.0", - "symfony/console": "^3.4|^4.0", - "symfony/dom-crawler": "^3.4|^4.0", - "symfony/phpunit-bridge": "^3.4|^4.0", - "symfony/var-dumper": "^3.4|^4.0", - "symfony/yaml": "^3.4|^4.0" + "symfony/browser-kit": "^3.4|^4.0|^5.0", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/dom-crawler": "^3.4|^4.0|^5.0", + "symfony/phpunit-bridge": "^3.4|^4.0|^5.0", + "symfony/var-dumper": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" }, "suggest": { "gesdinet/jwt-refresh-token-bundle": "Implements a refresh token system over Json Web Tokens in Symfony", @@ -2399,7 +2340,7 @@ "rest", "symfony" ], - "time": "2019-07-29T10:02:31+00:00" + "time": "2019-11-22T14:22:26+00:00" }, { "name": "moneyphp/money", @@ -2521,30 +2462,29 @@ }, { "name": "nelmio/cors-bundle", - "version": "1.5.6", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/nelmio/NelmioCorsBundle.git", - "reference": "10a24c10f242440211ed31075e74f81661c690d9" + "reference": "9683e6d30d000ef998919261329d825de7c53499" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/10a24c10f242440211ed31075e74f81661c690d9", - "reference": "10a24c10f242440211ed31075e74f81661c690d9", + "url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/9683e6d30d000ef998919261329d825de7c53499", + "reference": "9683e6d30d000ef998919261329d825de7c53499", "shasum": "" }, "require": { - "symfony/framework-bundle": "^2.7 || ^3.0 || ^4.0" + "symfony/framework-bundle": "^4.3 || ^5.0" }, "require-dev": { - "matthiasnoback/symfony-dependency-injection-test": "^1.0 || ^2.0", - "mockery/mockery": "^0.9 || ^1.0", - "symfony/phpunit-bridge": "^2.7 || ^3.0 || ^4.0" + "mockery/mockery": "^1.2", + "symfony/phpunit-bridge": "^4.3 || ^5.0" }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "1.5.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -2569,26 +2509,26 @@ "homepage": "https://github.com/nelmio/NelmioCorsBundle/contributors" } ], - "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Symfony2 application", + "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Symfony application", "keywords": [ "api", "cors", "crossdomain" ], - "time": "2019-06-17T08:53:14+00:00" + "time": "2019-11-15T08:54:08+00:00" }, { "name": "nikic/php-parser", - "version": "v4.2.4", + "version": "v4.3.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "97e59c7a16464196a8b9c77c47df68e4a39a45c4" + "reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/97e59c7a16464196a8b9c77c47df68e4a39a45c4", - "reference": "97e59c7a16464196a8b9c77c47df68e4a39a45c4", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/9a9981c347c5c49d6dfe5cf826bb882b824080dc", + "reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc", "shasum": "" }, "require": { @@ -2596,6 +2536,7 @@ "php": ">=7.0" }, "require-dev": { + "ircmaxell/php-yacc": "0.0.5", "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0" }, "bin": [ @@ -2604,7 +2545,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2626,7 +2567,7 @@ "parser", "php" ], - "time": "2019-09-01T07:51:21+00:00" + "time": "2019-11-08T13:50:10+00:00" }, { "name": "php-cs-fixer/diff", @@ -3112,44 +3053,46 @@ }, { "name": "ramsey/uuid", - "version": "3.8.0", + "version": "3.9.1", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3" + "reference": "5ac2740e0c8c599d2bbe7f113a939f2b5b216c67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3", - "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/5ac2740e0c8c599d2bbe7f113a939f2b5b216c67", + "reference": "5ac2740e0c8c599d2bbe7f113a939f2b5b216c67", "shasum": "" }, "require": { - "paragonie/random_compat": "^1.0|^2.0|9.99.99", - "php": "^5.4 || ^7.0", + "ext-json": "*", + "paragonie/random_compat": "^1 | ^2 | 9.99.99", + "php": "^5.4 | ^7", "symfony/polyfill-ctype": "^1.8" }, "replace": { "rhumsaa/uuid": "self.version" }, "require-dev": { - "codeception/aspect-mock": "^1.0 | ~2.0.0", - "doctrine/annotations": "~1.2.0", - "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0", - "ircmaxell/random-lib": "^1.1", + "codeception/aspect-mock": "^1 | ^2", + "doctrine/annotations": "^1.2", + "goaop/framework": "1.0.0-alpha.2 | ^1 | ^2.1", "jakub-onderka/php-parallel-lint": "^0.9.0", "mockery/mockery": "^0.9.9", "moontoast/math": "^1.1", - "php-mock/php-mock-phpunit": "^0.3|^1.1", - "phpunit/phpunit": "^4.7|^5.0|^6.5", + "paragonie/random-lib": "^2", + "php-mock/php-mock-phpunit": "^0.3 | ^1.1", + "phpunit/phpunit": "^4.8 | ^5.4 | ^6.5", "squizlabs/php_codesniffer": "^2.3" }, "suggest": { "ext-ctype": "Provides support for PHP Ctype functions", "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", + "ext-openssl": "Provides the OpenSSL extension for use with the OpenSslGenerator", "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", - "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." }, @@ -3162,13 +3105,21 @@ "autoload": { "psr-4": { "Ramsey\\Uuid\\": "src/" - } + }, + "files": [ + "src/functions.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + }, { "name": "Marijn Huizendveld", "email": "marijn.huizendveld@gmail.com" @@ -3176,11 +3127,6 @@ { "name": "Thibaud Fabre", "email": "thibaud@aztech.io" - }, - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" } ], "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", @@ -3190,7 +3136,7 @@ "identifier", "uuid" ], - "time": "2018-07-19T23:38:55+00:00" + "time": "2019-12-01T04:55:27+00:00" }, { "name": "ramsey/uuid-doctrine", @@ -3251,16 +3197,16 @@ }, { "name": "sensio/framework-extra-bundle", - "version": "v5.5.1", + "version": "v5.5.2", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", - "reference": "dfc2c4df9f7d465a65c770e9feb578fe071636f7" + "reference": "92acfcc610e2180c52790ec3ff2e893f67e76b32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/dfc2c4df9f7d465a65c770e9feb578fe071636f7", - "reference": "dfc2c4df9f7d465a65c770e9feb578fe071636f7", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/92acfcc610e2180c52790ec3ff2e893f67e76b32", + "reference": "92acfcc610e2180c52790ec3ff2e893f67e76b32", "shasum": "" }, "require": { @@ -3325,7 +3271,7 @@ "annotations", "controllers" ], - "time": "2019-10-16T18:54:45+00:00" + "time": "2019-12-12T16:21:49+00:00" }, { "name": "sensiolabs/security-checker", @@ -3442,24 +3388,24 @@ }, { "name": "symfony/asset", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", - "reference": "3f97e57596884f7b9158d564a533112a0d19dbdd" + "reference": "7ec5fc653dab63d7519a6f411982ee224a696d66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset/zipball/3f97e57596884f7b9158d564a533112a0d19dbdd", - "reference": "3f97e57596884f7b9158d564a533112a0d19dbdd", + "url": "https://api.github.com/repos/symfony/asset/zipball/7ec5fc653dab63d7519a6f411982ee224a696d66", + "reference": "7ec5fc653dab63d7519a6f411982ee224a696d66", "shasum": "" }, "require": { "php": "^7.1.3" }, "require-dev": { - "symfony/http-foundation": "~3.4|~4.0", - "symfony/http-kernel": "~3.4|~4.0" + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/http-kernel": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/http-foundation": "" @@ -3467,7 +3413,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -3494,34 +3440,35 @@ ], "description": "Symfony Asset Component", "homepage": "https://symfony.com", - "time": "2019-08-03T21:50:52+00:00" + "time": "2019-10-12T00:35:04+00:00" }, { "name": "symfony/cache", - "version": "v4.3.9", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "2a7bcc592adcaab9efc165bbced5a91fe905fad4" + "reference": "de737c81ea95018d11a3ef908ad2ebf203741b96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/2a7bcc592adcaab9efc165bbced5a91fe905fad4", - "reference": "2a7bcc592adcaab9efc165bbced5a91fe905fad4", + "url": "https://api.github.com/repos/symfony/cache/zipball/de737c81ea95018d11a3ef908ad2ebf203741b96", + "reference": "de737c81ea95018d11a3ef908ad2ebf203741b96", "shasum": "" }, "require": { "php": "^7.1.3", "psr/cache": "~1.0", "psr/log": "~1.0", - "symfony/cache-contracts": "^1.1", - "symfony/service-contracts": "^1.1", - "symfony/var-exporter": "^4.2" + "symfony/cache-contracts": "^1.1.7|^2", + "symfony/service-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.2|^5.0" }, "conflict": { "doctrine/dbal": "<2.5", "symfony/dependency-injection": "<3.4", - "symfony/var-dumper": "<3.4" + "symfony/http-kernel": "<4.4", + "symfony/var-dumper": "<4.4" }, "provide": { "psr/cache-implementation": "1.0", @@ -3534,14 +3481,14 @@ "doctrine/dbal": "~2.5", "predis/predis": "~1.1", "psr/simple-cache": "^1.0", - "symfony/config": "~4.2", - "symfony/dependency-injection": "~3.4|~4.1", - "symfony/var-dumper": "^4.1.1" + "symfony/config": "^4.2|^5.0", + "symfony/dependency-injection": "^3.4|^4.1|^5.0", + "symfony/var-dumper": "^4.4|^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -3572,7 +3519,7 @@ "caching", "psr6" ], - "time": "2019-12-01T10:50:31+00:00" + "time": "2019-12-01T10:50:45+00:00" }, { "name": "symfony/cache-contracts", @@ -3634,32 +3581,32 @@ }, { "name": "symfony/config", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "07d49c0f823e0bc367c6d84e35b61419188a5ece" + "reference": "7aa5817f1b7a8ed377752b90fcc47dfb3c67b40c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/07d49c0f823e0bc367c6d84e35b61419188a5ece", - "reference": "07d49c0f823e0bc367c6d84e35b61419188a5ece", + "url": "https://api.github.com/repos/symfony/config/zipball/7aa5817f1b7a8ed377752b90fcc47dfb3c67b40c", + "reference": "7aa5817f1b7a8ed377752b90fcc47dfb3c67b40c", "shasum": "" }, "require": { "php": "^7.1.3", - "symfony/filesystem": "~3.4|~4.0", + "symfony/filesystem": "^3.4|^4.0|^5.0", "symfony/polyfill-ctype": "~1.8" }, "conflict": { "symfony/finder": "<3.4" }, "require-dev": { - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~3.4|~4.0", - "symfony/finder": "~3.4|~4.0", - "symfony/messenger": "~4.1", - "symfony/yaml": "~3.4|~4.0" + "symfony/event-dispatcher": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/messenger": "^4.1|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/yaml": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -3667,7 +3614,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -3694,7 +3641,7 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2019-08-26T08:26:39+00:00" + "time": "2019-12-01T10:50:45+00:00" }, { "name": "symfony/console", @@ -3900,25 +3847,25 @@ }, { "name": "symfony/dependency-injection", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "d3ad14b66ac773ba6123622eb9b5b010165fe3d9" + "reference": "ad46a4def1325befab696b49c839dffea3fc92bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/d3ad14b66ac773ba6123622eb9b5b010165fe3d9", - "reference": "d3ad14b66ac773ba6123622eb9b5b010165fe3d9", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/ad46a4def1325befab696b49c839dffea3fc92bd", + "reference": "ad46a4def1325befab696b49c839dffea3fc92bd", "shasum": "" }, "require": { "php": "^7.1.3", "psr/container": "^1.0", - "symfony/service-contracts": "^1.1.6" + "symfony/service-contracts": "^1.1.6|^2" }, "conflict": { - "symfony/config": "<4.3", + "symfony/config": "<4.3|>=5.0", "symfony/finder": "<3.4", "symfony/proxy-manager-bridge": "<3.4", "symfony/yaml": "<3.4" @@ -3929,8 +3876,8 @@ }, "require-dev": { "symfony/config": "^4.3", - "symfony/expression-language": "~3.4|~4.0", - "symfony/yaml": "~3.4|~4.0" + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/config": "", @@ -3942,7 +3889,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -3969,20 +3916,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2019-08-26T16:27:33+00:00" + "time": "2019-12-01T10:19:36+00:00" }, { "name": "symfony/doctrine-bridge", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "d2967b2b43788bd3a7cddeb8bd4567e142b3821c" + "reference": "31c3d72f9e7a03e1b9d136084a9201c2225ee348" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/d2967b2b43788bd3a7cddeb8bd4567e142b3821c", - "reference": "d2967b2b43788bd3a7cddeb8bd4567e142b3821c", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/31c3d72f9e7a03e1b9d136084a9201c2225ee348", + "reference": "31c3d72f9e7a03e1b9d136084a9201c2225ee348", "shasum": "" }, "require": { @@ -3991,13 +3938,16 @@ "php": "^7.1.3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^1.1" + "symfony/service-contracts": "^1.1|^2" }, "conflict": { "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", "symfony/dependency-injection": "<3.4", - "symfony/form": "<4.3", - "symfony/messenger": "<4.3" + "symfony/form": "<4.4", + "symfony/http-kernel": "<4.3.7", + "symfony/messenger": "<4.3", + "symfony/security-core": "<4.4", + "symfony/validator": "<4.4" }, "require-dev": { "doctrine/annotations": "~1.7", @@ -4007,19 +3957,20 @@ "doctrine/dbal": "~2.4", "doctrine/orm": "^2.6.3", "doctrine/reflection": "~1.0", - "symfony/config": "^4.2", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/form": "~4.3", - "symfony/http-kernel": "~3.4|~4.0", - "symfony/messenger": "~4.3", - "symfony/property-access": "~3.4|~4.0", - "symfony/property-info": "~3.4|~4.0", - "symfony/proxy-manager-bridge": "~3.4|~4.0", - "symfony/security-core": "~3.4|~4.0", - "symfony/stopwatch": "~3.4|~4.0", - "symfony/translation": "~3.4|~4.0", - "symfony/validator": "^3.4.31|^4.3.4" + "symfony/config": "^4.2|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/form": "^4.4|^5.0", + "symfony/http-kernel": "^4.3.7", + "symfony/messenger": "^4.4|^5.0", + "symfony/property-access": "^3.4|^4.0|^5.0", + "symfony/property-info": "^3.4|^4.0|^5.0", + "symfony/proxy-manager-bridge": "^3.4|^4.0|^5.0", + "symfony/security-core": "^4.4|^5.0", + "symfony/stopwatch": "^3.4|^4.0|^5.0", + "symfony/translation": "^3.4|^4.0|^5.0", + "symfony/validator": "^4.4|^5.0", + "symfony/var-dumper": "^3.4|^4.0|^5.0" }, "suggest": { "doctrine/data-fixtures": "", @@ -4032,7 +3983,7 @@ "type": "symfony-bridge", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -4059,20 +4010,20 @@ ], "description": "Symfony Doctrine Bridge", "homepage": "https://symfony.com", - "time": "2019-08-26T11:29:20+00:00" + "time": "2019-12-01T08:39:58+00:00" }, { "name": "symfony/dom-crawler", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "cc686552948d627528c0e2e759186dff67c2610e" + "reference": "36bbcab9369fc2f583220890efd43bf262d563fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/cc686552948d627528c0e2e759186dff67c2610e", - "reference": "cc686552948d627528c0e2e759186dff67c2610e", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/36bbcab9369fc2f583220890efd43bf262d563fd", + "reference": "36bbcab9369fc2f583220890efd43bf262d563fd", "shasum": "" }, "require": { @@ -4085,7 +4036,7 @@ }, "require-dev": { "masterminds/html5": "^2.6", - "symfony/css-selector": "~3.4|~4.0" + "symfony/css-selector": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/css-selector": "" @@ -4093,7 +4044,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -4120,7 +4071,7 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2019-08-26T08:26:39+00:00" + "time": "2019-10-29T11:38:30+00:00" }, { "name": "symfony/dotenv", @@ -4179,6 +4130,62 @@ ], "time": "2019-08-03T21:50:52+00:00" }, + { + "name": "symfony/error-handler", + "version": "v4.4.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "a1ad02d62789efed1d2b2796f1c15e0c6a00fc3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/a1ad02d62789efed1d2b2796f1c15e0c6a00fc3b", + "reference": "a1ad02d62789efed1d2b2796f1c15e0c6a00fc3b", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "psr/log": "~1.0", + "symfony/debug": "^4.4", + "symfony/var-dumper": "^4.4|^5.0" + }, + "require-dev": { + "symfony/http-kernel": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony ErrorHandler Component", + "homepage": "https://symfony.com", + "time": "2019-12-01T08:46:01+00:00" + }, { "name": "symfony/event-dispatcher", "version": "v4.4.1", @@ -4309,27 +4316,27 @@ }, { "name": "symfony/expression-language", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/expression-language.git", - "reference": "c8b47d8820d3bf75f757eec8a2647584c14cf0c6" + "reference": "8a1028a65623a8f7bba582b60e4fd308e6f43001" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/c8b47d8820d3bf75f757eec8a2647584c14cf0c6", - "reference": "c8b47d8820d3bf75f757eec8a2647584c14cf0c6", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/8a1028a65623a8f7bba582b60e4fd308e6f43001", + "reference": "8a1028a65623a8f7bba582b60e4fd308e6f43001", "shasum": "" }, "require": { "php": "^7.1.3", - "symfony/cache": "~3.4|~4.0", - "symfony/service-contracts": "^1.1" + "symfony/cache": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -4356,20 +4363,20 @@ ], "description": "Symfony ExpressionLanguage Component", "homepage": "https://symfony.com", - "time": "2019-08-08T09:29:19+00:00" + "time": "2019-11-12T14:53:53+00:00" }, { "name": "symfony/filesystem", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "9abbb7ef96a51f4d7e69627bc6f63307994e4263" + "reference": "40c2606131d56eff6f193b6e2ceb92414653b591" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/9abbb7ef96a51f4d7e69627bc6f63307994e4263", - "reference": "9abbb7ef96a51f4d7e69627bc6f63307994e4263", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/40c2606131d56eff6f193b6e2ceb92414653b591", + "reference": "40c2606131d56eff6f193b6e2ceb92414653b591", "shasum": "" }, "require": { @@ -4379,7 +4386,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -4406,20 +4413,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2019-08-20T14:07:54+00:00" + "time": "2019-11-26T23:16:41+00:00" }, { "name": "symfony/finder", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "86c1c929f0a4b24812e1eb109262fc3372c8e9f2" + "reference": "ce8743441da64c41e2a667b8eb66070444ed911e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/86c1c929f0a4b24812e1eb109262fc3372c8e9f2", - "reference": "86c1c929f0a4b24812e1eb109262fc3372c8e9f2", + "url": "https://api.github.com/repos/symfony/finder/zipball/ce8743441da64c41e2a667b8eb66070444ed911e", + "reference": "ce8743441da64c41e2a667b8eb66070444ed911e", "shasum": "" }, "require": { @@ -4428,7 +4435,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -4455,20 +4462,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2019-08-14T12:26:46+00:00" + "time": "2019-11-17T21:56:56+00:00" }, { "name": "symfony/flex", - "version": "v1.4.6", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/symfony/flex.git", - "reference": "133e649fdf08aeb8741be1ba955ccbe5cd17c696" + "reference": "952f45d1c5077e658cb16a61d11603bee873f968" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/133e649fdf08aeb8741be1ba955ccbe5cd17c696", - "reference": "133e649fdf08aeb8741be1ba955ccbe5cd17c696", + "url": "https://api.github.com/repos/symfony/flex/zipball/952f45d1c5077e658cb16a61d11603bee873f968", + "reference": "952f45d1c5077e658cb16a61d11603bee873f968", "shasum": "" }, "require": { @@ -4477,14 +4484,14 @@ }, "require-dev": { "composer/composer": "^1.0.2", - "symfony/dotenv": "^3.4|^4.0", - "symfony/phpunit-bridge": "^3.4.19|^4.1.8", - "symfony/process": "^2.7|^3.0|^4.0" + "symfony/dotenv": "^3.4|^4.0|^5.0", + "symfony/phpunit-bridge": "^3.4.19|^4.1.8|^5.0", + "symfony/process": "^2.7|^3.0|^4.0|^5.0" }, "type": "composer-plugin", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.5-dev" }, "class": "Symfony\\Flex\\Flex" }, @@ -4504,31 +4511,31 @@ } ], "description": "Composer plugin for Symfony", - "time": "2019-09-19T14:55:57+00:00" + "time": "2019-12-13T18:05:11+00:00" }, { "name": "symfony/form", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "eba11fd575e791d72030cb59215a9948791f1e74" + "reference": "08dfa1960bbd25caaf979a47e837696bf2ee6d65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/eba11fd575e791d72030cb59215a9948791f1e74", - "reference": "eba11fd575e791d72030cb59215a9948791f1e74", + "url": "https://api.github.com/repos/symfony/form/zipball/08dfa1960bbd25caaf979a47e837696bf2ee6d65", + "reference": "08dfa1960bbd25caaf979a47e837696bf2ee6d65", "shasum": "" }, "require": { "php": "^7.1.3", "symfony/event-dispatcher": "^4.3", - "symfony/intl": "^4.3", - "symfony/options-resolver": "~4.3", + "symfony/intl": "^4.4|^5.0", + "symfony/options-resolver": "~4.3|^5.0", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", - "symfony/property-access": "~3.4|~4.0", - "symfony/service-contracts": "~1.1" + "symfony/property-access": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2" }, "conflict": { "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", @@ -4536,22 +4543,22 @@ "symfony/dependency-injection": "<3.4", "symfony/doctrine-bridge": "<3.4", "symfony/framework-bundle": "<3.4", - "symfony/http-kernel": "<4.3", + "symfony/http-kernel": "<4.4", "symfony/intl": "<4.3", "symfony/translation": "<4.2", "symfony/twig-bridge": "<3.4.5|<4.0.5,>=4.0" }, "require-dev": { "doctrine/collections": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/console": "^4.3", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/http-foundation": "~3.4|~4.0", - "symfony/http-kernel": "~4.3", - "symfony/security-csrf": "~3.4|~4.0", - "symfony/translation": "~4.2", - "symfony/validator": "^3.4.31|^4.3.4", - "symfony/var-dumper": "^4.3" + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/console": "^4.3|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/security-csrf": "^3.4|^4.0|^5.0", + "symfony/translation": "^4.2|^5.0", + "symfony/validator": "^3.4.31|^4.3.4|^5.0", + "symfony/var-dumper": "^4.3|^5.0" }, "suggest": { "symfony/security-csrf": "For protecting forms against CSRF attacks.", @@ -4561,7 +4568,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -4588,7 +4595,7 @@ ], "description": "Symfony Form Component", "homepage": "https://symfony.com", - "time": "2019-08-26T08:55:16+00:00" + "time": "2019-12-01T09:13:30+00:00" }, { "name": "symfony/framework-bundle", @@ -4715,38 +4722,44 @@ }, { "name": "symfony/http-client", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "9a4fa769269ed730196a5c52c742b30600cf1e87" + "reference": "6c235cf15d8b516b41204a28d555685191409729" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/9a4fa769269ed730196a5c52c742b30600cf1e87", - "reference": "9a4fa769269ed730196a5c52c742b30600cf1e87", + "url": "https://api.github.com/repos/symfony/http-client/zipball/6c235cf15d8b516b41204a28d555685191409729", + "reference": "6c235cf15d8b516b41204a28d555685191409729", "shasum": "" }, "require": { "php": "^7.1.3", "psr/log": "^1.0", - "symfony/http-client-contracts": "^1.1.6", - "symfony/polyfill-php73": "^1.11" + "symfony/http-client-contracts": "^1.1.8|^2", + "symfony/polyfill-php73": "^1.11", + "symfony/service-contracts": "^1.0|^2" }, "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", "psr/http-client-implementation": "1.0", "symfony/http-client-implementation": "1.1" }, "require-dev": { + "guzzlehttp/promises": "^1.3.1", "nyholm/psr7": "^1.0", + "php-http/httplug": "^1.0|^2.0", "psr/http-client": "^1.0", - "symfony/http-kernel": "^4.3", - "symfony/process": "^4.2" + "symfony/dependency-injection": "^4.3|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/process": "^4.2|^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -4773,24 +4786,24 @@ ], "description": "Symfony HttpClient component", "homepage": "https://symfony.com", - "time": "2019-08-20T14:27:59+00:00" + "time": "2019-11-29T16:55:58+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v1.1.6", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "6005fe61a33724405d56eb5b055d5d370192a1bd" + "reference": "378868b61b85c5cac6822d4f84e26999c9f2e881" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/6005fe61a33724405d56eb5b055d5d370192a1bd", - "reference": "6005fe61a33724405d56eb5b055d5d370192a1bd", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/378868b61b85c5cac6822d4f84e26999c9f2e881", + "reference": "378868b61b85c5cac6822d4f84e26999c9f2e881", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^7.2.5" }, "suggest": { "symfony/http-client-implementation": "" @@ -4798,7 +4811,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -4830,7 +4843,7 @@ "interoperability", "standards" ], - "time": "2019-08-08T10:05:21+00:00" + "time": "2019-11-26T23:25:11+00:00" }, { "name": "symfony/http-foundation", @@ -4889,33 +4902,33 @@ }, { "name": "symfony/http-kernel", - "version": "v4.3.9", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "3feb99b01560f94173d8fbc5a203ea497d01d499" + "reference": "e4187780ed26129ee86d5234afbebf085e144f88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3feb99b01560f94173d8fbc5a203ea497d01d499", - "reference": "3feb99b01560f94173d8fbc5a203ea497d01d499", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/e4187780ed26129ee86d5234afbebf085e144f88", + "reference": "e4187780ed26129ee86d5234afbebf085e144f88", "shasum": "" }, "require": { "php": "^7.1.3", "psr/log": "~1.0", - "symfony/debug": "~3.4|~4.0", - "symfony/event-dispatcher": "^4.3", - "symfony/http-foundation": "^4.1.1", - "symfony/polyfill-ctype": "~1.8", + "symfony/error-handler": "^4.4", + "symfony/event-dispatcher": "^4.4", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-php73": "^1.9" }, "conflict": { "symfony/browser-kit": "<4.3", "symfony/config": "<3.4", + "symfony/console": ">=5", "symfony/dependency-injection": "<4.3", "symfony/translation": "<4.2", - "symfony/var-dumper": "<4.1.1", "twig/twig": "<1.34|<2.4,>=2" }, "provide": { @@ -4923,34 +4936,32 @@ }, "require-dev": { "psr/cache": "~1.0", - "symfony/browser-kit": "^4.3", - "symfony/config": "~3.4|~4.0", - "symfony/console": "~3.4|~4.0", - "symfony/css-selector": "~3.4|~4.0", - "symfony/dependency-injection": "^4.3", - "symfony/dom-crawler": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/finder": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0", - "symfony/routing": "~3.4|~4.0", - "symfony/stopwatch": "~3.4|~4.0", - "symfony/templating": "~3.4|~4.0", - "symfony/translation": "~4.2", - "symfony/translation-contracts": "^1.1", - "symfony/var-dumper": "^4.1.1", - "twig/twig": "^1.34|^2.4" + "symfony/browser-kit": "^4.3|^5.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/console": "^3.4|^4.0", + "symfony/css-selector": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^4.3|^5.0", + "symfony/dom-crawler": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/routing": "^3.4|^4.0|^5.0", + "symfony/stopwatch": "^3.4|^4.0|^5.0", + "symfony/templating": "^3.4|^4.0|^5.0", + "symfony/translation": "^4.2|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "twig/twig": "^1.34|^2.4|^3.0" }, "suggest": { "symfony/browser-kit": "", "symfony/config": "", "symfony/console": "", - "symfony/dependency-injection": "", - "symfony/var-dumper": "" + "symfony/dependency-injection": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -4977,7 +4988,7 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2019-12-01T14:00:23+00:00" + "time": "2019-12-01T14:06:38+00:00" }, { "name": "symfony/inflector", @@ -5039,16 +5050,16 @@ }, { "name": "symfony/intl", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "8db5505703c5bdb23d524fd994dad2f781966538" + "reference": "727fed5372915b5ea5e8177070f5e7e547063f24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/8db5505703c5bdb23d524fd994dad2f781966538", - "reference": "8db5505703c5bdb23d524fd994dad2f781966538", + "url": "https://api.github.com/repos/symfony/intl/zipball/727fed5372915b5ea5e8177070f5e7e547063f24", + "reference": "727fed5372915b5ea5e8177070f5e7e547063f24", "shasum": "" }, "require": { @@ -5056,7 +5067,7 @@ "symfony/polyfill-intl-icu": "~1.0" }, "require-dev": { - "symfony/filesystem": "~3.4|~4.0" + "symfony/filesystem": "^3.4|^4.0|^5.0" }, "suggest": { "ext-intl": "to use the component with locales other than \"en\"" @@ -5064,7 +5075,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -5110,44 +5121,44 @@ "l10n", "localization" ], - "time": "2019-08-26T08:26:39+00:00" + "time": "2019-11-26T23:16:41+00:00" }, { "name": "symfony/maker-bundle", - "version": "v1.13.0", + "version": "v1.14.3", "source": { "type": "git", "url": "https://github.com/symfony/maker-bundle.git", - "reference": "c4388410e2fb6321e77c5dd6e3cb2dba821f9fe6" + "reference": "c864e7f9b8d1e1f5f60acc3beda11299f637aded" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/c4388410e2fb6321e77c5dd6e3cb2dba821f9fe6", - "reference": "c4388410e2fb6321e77c5dd6e3cb2dba821f9fe6", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/c864e7f9b8d1e1f5f60acc3beda11299f637aded", + "reference": "c864e7f9b8d1e1f5f60acc3beda11299f637aded", "shasum": "" }, "require": { "doctrine/inflector": "^1.2", "nikic/php-parser": "^4.0", "php": "^7.0.8", - "symfony/config": "^3.4|^4.0", - "symfony/console": "^3.4|^4.0", - "symfony/dependency-injection": "^3.4|^4.0", - "symfony/filesystem": "^3.4|^4.0", - "symfony/finder": "^3.4|^4.0", - "symfony/framework-bundle": "^3.4|^4.0", - "symfony/http-kernel": "^3.4|^4.0" + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/filesystem": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/framework-bundle": "^3.4|^4.0|^5.0", + "symfony/http-kernel": "^3.4|^4.0|^5.0" }, "require-dev": { - "doctrine/doctrine-bundle": "^1.8", + "doctrine/doctrine-bundle": "^1.8|^2.0", "doctrine/orm": "^2.3", "friendsofphp/php-cs-fixer": "^2.8", "friendsoftwig/twigcs": "^3.1.2", - "symfony/http-client": "^4.3", - "symfony/phpunit-bridge": "^3.4.19|^4.0", - "symfony/process": "^3.4|^4.0", - "symfony/security-core": "^3.4|^4.0", - "symfony/yaml": "^3.4|^4.0" + "symfony/http-client": "^4.3|^5.0", + "symfony/phpunit-bridge": "^4.3|^5.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/security-core": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" }, "type": "symfony-bundle", "extra": { @@ -5178,33 +5189,37 @@ "scaffold", "scaffolding" ], - "time": "2019-08-18T17:34:03+00:00" + "time": "2019-11-07T00:56:03+00:00" }, { "name": "symfony/mercure", - "version": "v0.2.0", + "version": "v0.3.0", "source": { "type": "git", "url": "https://github.com/symfony/mercure.git", - "reference": "c74981184bf13f225c9a669cf28d06d0f4197593" + "reference": "999c125d3a8f96a2b6e9be3da40ff4c25844d1da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mercure/zipball/c74981184bf13f225c9a669cf28d06d0f4197593", - "reference": "c74981184bf13f225c9a669cf28d06d0f4197593", + "url": "https://api.github.com/repos/symfony/mercure/zipball/999c125d3a8f96a2b6e9be3da40ff4c25844d1da", + "reference": "999c125d3a8f96a2b6e9be3da40ff4c25844d1da", "shasum": "" }, "require": { "php": "^7.1.3", - "symfony/http-client": "^4.3" + "symfony/http-client": "^4.3.5|^5.0" }, "require-dev": { - "symfony/phpunit-bridge": "^4.2.4" + "symfony/phpunit-bridge": "^4.2.4|^5.0", + "symfony/stopwatch": "^4.3|^5.0" + }, + "suggest": { + "symfony/stopwatch": "Integration with the profiler performances" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "0.3.x-dev" }, "thanks": { "name": "dunglas/mercure", @@ -5238,31 +5253,33 @@ "sse", "updates" ], - "time": "2019-06-20T20:34:51+00:00" + "time": "2019-11-08T19:13:31+00:00" }, { "name": "symfony/mercure-bundle", - "version": "v0.1.2", + "version": "0.2.3", "source": { "type": "git", "url": "https://github.com/symfony/mercure-bundle.git", - "reference": "f8b538b94164fa46b80562ed6b0ba121cd3836dd" + "reference": "9c5fe6e761816449d84d5f0429e74415cb0590f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mercure-bundle/zipball/f8b538b94164fa46b80562ed6b0ba121cd3836dd", - "reference": "f8b538b94164fa46b80562ed6b0ba121cd3836dd", + "url": "https://api.github.com/repos/symfony/mercure-bundle/zipball/9c5fe6e761816449d84d5f0429e74415cb0590f2", + "reference": "9c5fe6e761816449d84d5f0429e74415cb0590f2", "shasum": "" }, "require": { "php": "^7.1.3", - "symfony/config": "^3.4|^4.0", - "symfony/dependency-injection": "^3.4|^4.0", - "symfony/http-kernel": "^3.4|^4.0", - "symfony/mercure": "^0.2" + "symfony/config": "^4.3.7|^5.0", + "symfony/dependency-injection": "^4.3.7|^5.0", + "symfony/http-kernel": "^4.3.7|^5.0", + "symfony/mercure": "^0.3" }, "require-dev": { - "symfony/phpunit-bridge": "^4.2.4" + "symfony/phpunit-bridge": "^4.3.7|^5.0", + "symfony/stopwatch": "^4.3.7|^5.0", + "symfony/var-dumper": "^4.3.7|^5.0" }, "suggest": { "symfony/messenger": "To use the Messenger integration" @@ -5270,7 +5287,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "0.2.x-dev" } }, "autoload": { @@ -5300,7 +5317,7 @@ "sse", "updates" ], - "time": "2019-06-24T19:45:57+00:00" + "time": "2019-11-24T10:29:29+00:00" }, { "name": "symfony/mime", @@ -5366,16 +5383,16 @@ }, { "name": "symfony/options-resolver", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "81c2e120522a42f623233968244baebd6b36cb6a" + "reference": "2be23e63f33de16b49294ea6581f462932a77e2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/81c2e120522a42f623233968244baebd6b36cb6a", - "reference": "81c2e120522a42f623233968244baebd6b36cb6a", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/2be23e63f33de16b49294ea6581f462932a77e2f", + "reference": "2be23e63f33de16b49294ea6581f462932a77e2f", "shasum": "" }, "require": { @@ -5384,7 +5401,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -5416,20 +5433,20 @@ "configuration", "options" ], - "time": "2019-08-08T09:29:19+00:00" + "time": "2019-10-28T21:57:16+00:00" }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.12.0", + "version": "v1.13.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "66810b9d6eb4af54d543867909d65ab9af654d7e" + "reference": "b3dffd68afa61ca70f2327f2dd9bbeb6aa53d70b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/66810b9d6eb4af54d543867909d65ab9af654d7e", - "reference": "66810b9d6eb4af54d543867909d65ab9af654d7e", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/b3dffd68afa61ca70f2327f2dd9bbeb6aa53d70b", + "reference": "b3dffd68afa61ca70f2327f2dd9bbeb6aa53d70b", "shasum": "" }, "require": { @@ -5442,7 +5459,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.12-dev" + "dev-master": "1.13-dev" } }, "autoload": { @@ -5474,7 +5491,7 @@ "portable", "shim" ], - "time": "2019-08-06T08:03:45+00:00" + "time": "2019-11-27T13:56:44+00:00" }, { "name": "symfony/polyfill-intl-idn", @@ -5712,16 +5729,16 @@ }, { "name": "symfony/process", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "e89969c00d762349f078db1128506f7f3dcc0d4a" + "reference": "51c0135ef3f44c5803b33dc60e96bf4f77752726" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/e89969c00d762349f078db1128506f7f3dcc0d4a", - "reference": "e89969c00d762349f078db1128506f7f3dcc0d4a", + "url": "https://api.github.com/repos/symfony/process/zipball/51c0135ef3f44c5803b33dc60e96bf4f77752726", + "reference": "51c0135ef3f44c5803b33dc60e96bf4f77752726", "shasum": "" }, "require": { @@ -5730,7 +5747,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -5757,7 +5774,7 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2019-08-26T08:26:39+00:00" + "time": "2019-11-28T13:33:56+00:00" }, { "name": "symfony/property-access", @@ -5828,21 +5845,21 @@ }, { "name": "symfony/property-info", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "29546235b37f7bd279c763314cd4c962aedd1e6d" + "reference": "8afd280f159697177e48eefa89efd4db60a57665" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/29546235b37f7bd279c763314cd4c962aedd1e6d", - "reference": "29546235b37f7bd279c763314cd4c962aedd1e6d", + "url": "https://api.github.com/repos/symfony/property-info/zipball/8afd280f159697177e48eefa89efd4db60a57665", + "reference": "8afd280f159697177e48eefa89efd4db60a57665", "shasum": "" }, "require": { "php": "^7.1.3", - "symfony/inflector": "~3.4|~4.0" + "symfony/inflector": "^3.4|^4.0|^5.0" }, "conflict": { "phpdocumentor/reflection-docblock": "<3.0||>=3.2.0,<3.2.2", @@ -5852,9 +5869,9 @@ "require-dev": { "doctrine/annotations": "~1.7", "phpdocumentor/reflection-docblock": "^3.0|^4.0", - "symfony/cache": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/serializer": "~3.4|~4.0" + "symfony/cache": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/serializer": "^3.4|^4.0|^5.0" }, "suggest": { "phpdocumentor/reflection-docblock": "To use the PHPDoc", @@ -5865,7 +5882,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -5900,20 +5917,20 @@ "type", "validator" ], - "time": "2019-08-26T08:26:39+00:00" + "time": "2019-11-05T16:11:08+00:00" }, { "name": "symfony/routing", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "ff1049f6232dc5b6023b1ff1c6de56f82bcd264f" + "reference": "51f3f20ad29329a0bdf5c0e2f722d3764b065273" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/ff1049f6232dc5b6023b1ff1c6de56f82bcd264f", - "reference": "ff1049f6232dc5b6023b1ff1c6de56f82bcd264f", + "url": "https://api.github.com/repos/symfony/routing/zipball/51f3f20ad29329a0bdf5c0e2f722d3764b065273", + "reference": "51f3f20ad29329a0bdf5c0e2f722d3764b065273", "shasum": "" }, "require": { @@ -5927,11 +5944,11 @@ "require-dev": { "doctrine/annotations": "~1.2", "psr/log": "~1.0", - "symfony/config": "~4.2", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/http-foundation": "~3.4|~4.0", - "symfony/yaml": "~3.4|~4.0" + "symfony/config": "^4.2|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" }, "suggest": { "doctrine/annotations": "For using the annotation loader", @@ -5943,7 +5960,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -5976,7 +5993,7 @@ "uri", "url" ], - "time": "2019-08-26T08:26:39+00:00" + "time": "2019-12-01T08:39:58+00:00" }, { "name": "symfony/security-bundle", @@ -6137,27 +6154,27 @@ }, { "name": "symfony/security-csrf", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/security-csrf.git", - "reference": "d218ba086ef4a68081f3dd5ec11611f5d64d58f3" + "reference": "aeed1a2315019b5a090f5ad34c01f1935ea9b757" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-csrf/zipball/d218ba086ef4a68081f3dd5ec11611f5d64d58f3", - "reference": "d218ba086ef4a68081f3dd5ec11611f5d64d58f3", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/aeed1a2315019b5a090f5ad34c01f1935ea9b757", + "reference": "aeed1a2315019b5a090f5ad34c01f1935ea9b757", "shasum": "" }, "require": { "php": "^7.1.3", - "symfony/security-core": "~3.4|~4.0" + "symfony/security-core": "^3.4|^4.0|^5.0" }, "conflict": { "symfony/http-foundation": "<3.4" }, "require-dev": { - "symfony/http-foundation": "~3.4|~4.0" + "symfony/http-foundation": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/http-foundation": "For using the class SessionTokenStorage." @@ -6165,7 +6182,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -6192,26 +6209,26 @@ ], "description": "Symfony Security Component - CSRF Library", "homepage": "https://symfony.com", - "time": "2019-08-13T06:39:03+00:00" + "time": "2019-10-12T00:35:04+00:00" }, { "name": "symfony/security-guard", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/security-guard.git", - "reference": "cf06aa4f8ea38a769476c4f5989f1dc400a308a1" + "reference": "df82bbbd01486ff21a053d325cf9159b4d70b544" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-guard/zipball/cf06aa4f8ea38a769476c4f5989f1dc400a308a1", - "reference": "cf06aa4f8ea38a769476c4f5989f1dc400a308a1", + "url": "https://api.github.com/repos/symfony/security-guard/zipball/df82bbbd01486ff21a053d325cf9159b4d70b544", + "reference": "df82bbbd01486ff21a053d325cf9159b4d70b544", "shasum": "" }, "require": { "php": "^7.1.3", - "symfony/security-core": "~3.4.22|^4.2.3", - "symfony/security-http": "^4.3" + "symfony/security-core": "^3.4.22|^4.2.3|^5.0", + "symfony/security-http": "^4.4.1" }, "require-dev": { "psr/log": "~1.0" @@ -6219,7 +6236,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -6246,36 +6263,37 @@ ], "description": "Symfony Security Component - Guard", "homepage": "https://symfony.com", - "time": "2019-08-26T08:26:39+00:00" + "time": "2019-11-30T09:49:41+00:00" }, { "name": "symfony/security-http", - "version": "v4.3.9", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "75e96df3a1b9b38c67e2fa208894f72dae5e1147" + "reference": "ff3ab7cda1703195dbe7f97cccaf77478126e0cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/75e96df3a1b9b38c67e2fa208894f72dae5e1147", - "reference": "75e96df3a1b9b38c67e2fa208894f72dae5e1147", + "url": "https://api.github.com/repos/symfony/security-http/zipball/ff3ab7cda1703195dbe7f97cccaf77478126e0cd", + "reference": "ff3ab7cda1703195dbe7f97cccaf77478126e0cd", "shasum": "" }, "require": { "php": "^7.1.3", - "symfony/http-foundation": "~3.4|~4.0", - "symfony/http-kernel": "^4.3", - "symfony/property-access": "~3.4|~4.0", - "symfony/security-core": "^4.3" + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/property-access": "^3.4|^4.0|^5.0", + "symfony/security-core": "^4.4" }, "conflict": { + "symfony/event-dispatcher": ">=5", "symfony/security-csrf": "<3.4.11|~4.0,<4.0.11" }, "require-dev": { "psr/log": "~1.0", - "symfony/routing": "~3.4|~4.0", - "symfony/security-csrf": "^3.4.11|^4.0.11" + "symfony/routing": "^3.4|^4.0|^5.0", + "symfony/security-csrf": "^3.4.11|^4.0.11|^5.0" }, "suggest": { "symfony/routing": "For using the HttpUtils class to create sub-requests, redirect the user, and match URLs", @@ -6284,7 +6302,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -6311,20 +6329,20 @@ ], "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", - "time": "2019-11-30T13:16:45+00:00" + "time": "2019-12-01T08:46:01+00:00" }, { "name": "symfony/serializer", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "702900654e0ceed9ca7a9eccffb1d6ec69d7c8b6" + "reference": "842637bdcbed31c7dc62b3c30dfc8949f6457968" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/702900654e0ceed9ca7a9eccffb1d6ec69d7c8b6", - "reference": "702900654e0ceed9ca7a9eccffb1d6ec69d7c8b6", + "url": "https://api.github.com/repos/symfony/serializer/zipball/842637bdcbed31c7dc62b3c30dfc8949f6457968", + "reference": "842637bdcbed31c7dc62b3c30dfc8949f6457968", "shasum": "" }, "require": { @@ -6341,15 +6359,16 @@ "require-dev": { "doctrine/annotations": "~1.0", "doctrine/cache": "~1.0", - "phpdocumentor/reflection-docblock": "^3.0|^4.0", - "symfony/cache": "~3.4|~4.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/http-foundation": "~3.4|~4.0", - "symfony/property-access": "~3.4|~4.0", - "symfony/property-info": "^3.4.13|~4.0", - "symfony/validator": "~3.4|~4.0", - "symfony/yaml": "~3.4|~4.0" + "phpdocumentor/reflection-docblock": "^3.2|^4.0", + "symfony/cache": "^3.4|^4.0|^5.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/property-access": "^3.4|^4.0|^5.0", + "symfony/property-info": "^3.4.13|~4.0|^5.0", + "symfony/validator": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" }, "suggest": { "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", @@ -6364,7 +6383,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -6391,7 +6410,7 @@ ], "description": "Symfony Serializer Component", "homepage": "https://symfony.com", - "time": "2019-08-26T08:55:16+00:00" + "time": "2019-11-28T13:33:56+00:00" }, { "name": "symfony/service-contracts", @@ -6453,26 +6472,26 @@ }, { "name": "symfony/stopwatch", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "1e4ff456bd625be5032fac9be4294e60442e9b71" + "reference": "5745b514fc56ae1907c6b8ed74f94f90f64694e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/1e4ff456bd625be5032fac9be4294e60442e9b71", - "reference": "1e4ff456bd625be5032fac9be4294e60442e9b71", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5745b514fc56ae1907c6b8ed74f94f90f64694e9", + "reference": "5745b514fc56ae1907c6b8ed74f94f90f64694e9", "shasum": "" }, "require": { "php": "^7.1.3", - "symfony/service-contracts": "^1.0" + "symfony/service-contracts": "^1.0|^2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -6499,24 +6518,24 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2019-08-07T11:52:19+00:00" + "time": "2019-11-05T16:11:08+00:00" }, { "name": "symfony/translation-contracts", - "version": "v1.1.6", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "325b17c24f3ee23cbecfa63ba809c6d89b5fa04a" + "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/325b17c24f3ee23cbecfa63ba809c6d89b5fa04a", - "reference": "325b17c24f3ee23cbecfa63ba809c6d89b5fa04a", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/8cc682ac458d75557203b2f2f14b0b92e1c744ed", + "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^7.2.5" }, "suggest": { "symfony/translation-implementation": "" @@ -6524,7 +6543,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -6556,59 +6575,61 @@ "interoperability", "standards" ], - "time": "2019-08-02T12:15:04+00:00" + "time": "2019-11-18T17:27:11+00:00" }, { "name": "symfony/twig-bridge", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "cd6c551dc5d62b520d1a973fb4cb2c46bfc00b62" + "reference": "6121dd0156649047f38cfc02a5d64091692892f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/cd6c551dc5d62b520d1a973fb4cb2c46bfc00b62", - "reference": "cd6c551dc5d62b520d1a973fb4cb2c46bfc00b62", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/6121dd0156649047f38cfc02a5d64091692892f2", + "reference": "6121dd0156649047f38cfc02a5d64091692892f2", "shasum": "" }, "require": { "php": "^7.1.3", - "symfony/translation-contracts": "^1.1", - "twig/twig": "^1.41|^2.10" + "symfony/translation-contracts": "^1.1|^2", + "twig/twig": "^1.41|^2.10|^3.0" }, "conflict": { "symfony/console": "<3.4", - "symfony/form": "<4.3.4", + "symfony/form": "<4.4", "symfony/http-foundation": "<4.3", "symfony/translation": "<4.2", "symfony/workflow": "<4.3" }, "require-dev": { "egulias/email-validator": "^2.1.10", - "fig/link-util": "^1.0", - "symfony/asset": "~3.4|~4.0", - "symfony/console": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/finder": "~3.4|~4.0", - "symfony/form": "^4.3.4", - "symfony/http-foundation": "~4.3", - "symfony/http-kernel": "~3.4|~4.0", - "symfony/mime": "~4.3", + "symfony/asset": "^3.4|^4.0|^5.0", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "^4.4|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/form": "^4.3.5", + "symfony/http-foundation": "^4.3|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/mime": "^4.3|^5.0", "symfony/polyfill-intl-icu": "~1.0", - "symfony/routing": "~3.4|~4.0", - "symfony/security-acl": "~2.8|~3.0", - "symfony/security-core": "~3.0|~4.0", - "symfony/security-csrf": "~3.4|~4.0", - "symfony/security-http": "~3.4|~4.0", - "symfony/stopwatch": "~3.4|~4.0", - "symfony/templating": "~3.4|~4.0", - "symfony/translation": "^4.2.1", - "symfony/var-dumper": "~3.4|~4.0", - "symfony/web-link": "~3.4|~4.0", - "symfony/workflow": "~4.3", - "symfony/yaml": "~3.4|~4.0" + "symfony/routing": "^3.4|^4.0|^5.0", + "symfony/security-acl": "^2.8|^3.0", + "symfony/security-core": "^3.0|^4.0|^5.0", + "symfony/security-csrf": "^3.4|^4.0|^5.0", + "symfony/security-http": "^3.4|^4.0|^5.0", + "symfony/stopwatch": "^3.4|^4.0|^5.0", + "symfony/templating": "^3.4|^4.0|^5.0", + "symfony/translation": "^4.2.1|^5.0", + "symfony/web-link": "^4.4|^5.0", + "symfony/workflow": "^4.3|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0", + "twig/cssinliner-extra": "^2.12", + "twig/inky-extra": "^2.12", + "twig/markdown-extra": "^2.12" }, "suggest": { "symfony/asset": "For using the AssetExtension", @@ -6630,7 +6651,7 @@ "type": "symfony-bridge", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -6657,7 +6678,7 @@ ], "description": "Symfony Twig Bridge", "homepage": "https://symfony.com", - "time": "2019-08-26T08:26:39+00:00" + "time": "2019-11-30T14:03:57+00:00" }, { "name": "symfony/twig-bundle", @@ -6738,56 +6759,55 @@ }, { "name": "symfony/validator", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "173b483999c2acad8e040633105733318dcc8a83" + "reference": "6b1774cf44c378617af362eaa154105952d488f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/173b483999c2acad8e040633105733318dcc8a83", - "reference": "173b483999c2acad8e040633105733318dcc8a83", + "url": "https://api.github.com/repos/symfony/validator/zipball/6b1774cf44c378617af362eaa154105952d488f8", + "reference": "6b1774cf44c378617af362eaa154105952d488f8", "shasum": "" }, "require": { "php": "^7.1.3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^1.1" + "symfony/translation-contracts": "^1.1|^2" }, "conflict": { "doctrine/lexer": "<1.0.2", "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", "symfony/dependency-injection": "<3.4", - "symfony/http-kernel": "<3.4", + "symfony/http-kernel": "<4.4", "symfony/intl": "<4.3", - "symfony/translation": "<4.2", + "symfony/translation": ">=5.0", "symfony/yaml": "<3.4" }, "require-dev": { "doctrine/annotations": "~1.7", "doctrine/cache": "~1.0", "egulias/email-validator": "^2.1.10", - "symfony/cache": "~3.4|~4.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/http-client": "^4.3", - "symfony/http-foundation": "~4.1", - "symfony/http-kernel": "~3.4|~4.0", - "symfony/intl": "^4.3", - "symfony/property-access": "~3.4|~4.0", - "symfony/property-info": "~3.4|~4.0", - "symfony/translation": "~4.2", - "symfony/var-dumper": "~3.4|~4.0", - "symfony/yaml": "~3.4|~4.0" + "symfony/cache": "^3.4|^4.0|^5.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-client": "^4.3|^5.0", + "symfony/http-foundation": "^4.1|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/intl": "^4.3|^5.0", + "symfony/property-access": "^3.4|^4.0|^5.0", + "symfony/property-info": "^3.4|^4.0|^5.0", + "symfony/translation": "^4.2", + "symfony/yaml": "^3.4|^4.0|^5.0" }, "suggest": { "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", - "doctrine/cache": "For using the default cached annotation reader and metadata cache.", + "doctrine/cache": "For using the default cached annotation reader.", "egulias/email-validator": "Strict (RFC compliant) email validation", - "psr/cache-implementation": "For using the metadata cache.", + "psr/cache-implementation": "For using the mapping cache.", "symfony/config": "", "symfony/expression-language": "For using the Expression validator", "symfony/http-foundation": "", @@ -6800,7 +6820,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -6827,7 +6847,83 @@ ], "description": "Symfony Validator Component", "homepage": "https://symfony.com", - "time": "2019-08-26T09:28:48+00:00" + "time": "2019-11-30T14:03:57+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v4.4.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "0a89a1dbbedd9fb2cfb2336556dec8305273c19a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0a89a1dbbedd9fb2cfb2336556dec8305273c19a", + "reference": "0a89a1dbbedd9fb2cfb2336556dec8305273c19a", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php72": "~1.5" + }, + "conflict": { + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/console": "<3.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/process": "^4.4|^5.0", + "twig/twig": "^1.34|^2.4|^3.0" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony mechanism for exploring and dumping PHP variables", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "time": "2019-11-28T13:33:56+00:00" }, { "name": "symfony/var-exporter", @@ -6891,29 +6987,32 @@ }, { "name": "symfony/web-link", - "version": "v4.3.4", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/symfony/web-link.git", - "reference": "4bd0ce7c54d604300deee8eb1b1beda856fbba20" + "reference": "bc6432b92681b2f28ced2f3bbcf051e75eea569c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-link/zipball/4bd0ce7c54d604300deee8eb1b1beda856fbba20", - "reference": "4bd0ce7c54d604300deee8eb1b1beda856fbba20", + "url": "https://api.github.com/repos/symfony/web-link/zipball/bc6432b92681b2f28ced2f3bbcf051e75eea569c", + "reference": "bc6432b92681b2f28ced2f3bbcf051e75eea569c", "shasum": "" }, "require": { - "fig/link-util": "^1.0", "php": "^7.1.3", - "psr/link": "^1.0" + "psr/link": "^1.0", + "symfony/polyfill-php72": "^1.5" }, "conflict": { "symfony/http-kernel": "<4.3" }, + "provide": { + "psr/link-implementation": "1.0" + }, "require-dev": { - "symfony/http-foundation": "~3.4|~4.0", - "symfony/http-kernel": "^4.3" + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^4.3|^5.0" }, "suggest": { "symfony/http-kernel": "" @@ -6921,7 +7020,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -6960,7 +7059,7 @@ "psr13", "push" ], - "time": "2019-08-08T09:29:19+00:00" + "time": "2019-10-12T00:35:04+00:00" }, { "name": "symfony/yaml", @@ -7096,16 +7195,16 @@ }, { "name": "twig/twig", - "version": "v2.11.3", + "version": "v2.12.2", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "699ed2342557c88789a15402de5eb834dedd6792" + "reference": "d761fd1f1c6b867ae09a7d8119a6d95d06dc44ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/699ed2342557c88789a15402de5eb834dedd6792", - "reference": "699ed2342557c88789a15402de5eb834dedd6792", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/d761fd1f1c6b867ae09a7d8119a6d95d06dc44ed", + "reference": "d761fd1f1c6b867ae09a7d8119a6d95d06dc44ed", "shasum": "" }, "require": { @@ -7115,13 +7214,13 @@ }, "require-dev": { "psr/container": "^1.0", - "symfony/debug": "^2.7", - "symfony/phpunit-bridge": "^3.4.19|^4.1.8|^5.0" + "symfony/debug": "^3.4|^4.2", + "symfony/phpunit-bridge": "^4.4@dev|^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.11-dev" + "dev-master": "2.12-dev" } }, "autoload": { @@ -7143,15 +7242,15 @@ "homepage": "http://fabien.potencier.org", "role": "Lead Developer" }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" - }, { "name": "Twig Team", "homepage": "https://twig.symfony.com/contributors", "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" } ], "description": "Twig, the flexible, fast, and secure template language for PHP", @@ -7159,35 +7258,33 @@ "keywords": [ "templating" ], - "time": "2019-06-18T15:37:11+00:00" + "time": "2019-11-11T16:52:09+00:00" }, { "name": "webmozart/assert", - "version": "1.5.0", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4" + "reference": "573381c0a64f155a0d9a23f4b0c797194805b925" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4", - "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4", + "url": "https://api.github.com/repos/webmozart/assert/zipball/573381c0a64f155a0d9a23f4b0c797194805b925", + "reference": "573381c0a64f155a0d9a23f4b0c797194805b925", "shasum": "" }, "require": { "php": "^5.3.3 || ^7.0", "symfony/polyfill-ctype": "^1.8" }, + "conflict": { + "vimeo/psalm": "<3.6.0" + }, "require-dev": { "phpunit/phpunit": "^4.8.36 || ^7.5.13" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, "autoload": { "psr-4": { "Webmozart\\Assert\\": "src/" @@ -7209,7 +7306,7 @@ "check", "validate" ], - "time": "2019-08-24T08:43:50+00:00" + "time": "2019-11-24T13:36:37+00:00" }, { "name": "webonyx/graphql-php", @@ -7345,82 +7442,6 @@ "description": "A pack for the Symfony web profiler", "time": "2018-12-10T12:11:44+00:00" }, - { - "name": "symfony/var-dumper", - "version": "v4.3.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "641043e0f3e615990a0f29479f9c117e8a6698c6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/641043e0f3e615990a0f29479f9c117e8a6698c6", - "reference": "641043e0f3e615990a0f29479f9c117e8a6698c6", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php72": "~1.5" - }, - "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", - "symfony/console": "<3.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0", - "twig/twig": "~1.34|~2.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" - }, - "bin": [ - "Resources/bin/var-dump-server" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, - "autoload": { - "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony mechanism for exploring and dumping PHP variables", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "time": "2019-08-26T08:26:39+00:00" - }, { "name": "symfony/web-profiler-bundle", "version": "v4.3.4", diff --git a/api/config/bundles.php b/api/config/bundles.php index b3f9617a..aba2fb86 100644 --- a/api/config/bundles.php +++ b/api/config/bundles.php @@ -1,20 +1,19 @@ ['all' => true], - Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], - Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], - Symfony\Bundle\MercureBundle\MercureBundle::class => ['all' => true], - Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], - Doctrine\Bundle\DoctrineCacheBundle\DoctrineCacheBundle::class => ['all' => true], - Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], - ApiPlatform\Core\Bridge\Symfony\Bundle\ApiPlatformBundle::class => ['all' => true], - Nelmio\CorsBundle\NelmioCorsBundle::class => ['all' => true], - Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], - Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], - Conduction\CommonGroundBundle\CommonGroundBundle::class => ['all' => true], - Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle::class => ['all' => true], + Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], + Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], + Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], + Symfony\Bundle\MercureBundle\MercureBundle::class => ['all' => true], + Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], + Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], + ApiPlatform\Core\Bridge\Symfony\Bundle\ApiPlatformBundle::class => ['all' => true], + Nelmio\CorsBundle\NelmioCorsBundle::class => ['all' => true], + Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], + Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], + Conduction\CommonGroundBundle\CommonGroundBundle::class => ['all' => true], + Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle::class => ['all' => true], Lexik\Bundle\JWTAuthenticationBundle\LexikJWTAuthenticationBundle::class => ['all' => true], - Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['all' => true], - Tbbc\MoneyBundle\TbbcMoneyBundle::class => ['all' => true], + Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['all' => true], + Tbbc\MoneyBundle\TbbcMoneyBundle::class => ['all' => true], ]; diff --git a/api/config/packages/twig.yaml b/api/config/packages/twig.yaml index ee6c1853..481428f9 100644 --- a/api/config/packages/twig.yaml +++ b/api/config/packages/twig.yaml @@ -31,7 +31,7 @@ twig: app_version: '%env(APP_VERSION)%' app_env: '%env(APP_ENV)%' app_debug: '%env(APP_DEBUG)%' - app_domain: '%env(APP_DOMAIN)%' + app_subdomain: '%env(APP_SUBDOMAIN)%' app_domains: '%env(json:APP_DOMAINS)%' app_demo: '%env(APP_DEMO)%' app_repro: '%env(APP_REPRO)%' diff --git a/api/helm/templates/php-deployment.yaml b/api/helm/templates/php-deployment.yaml index 611e5d39..2d5df508 100644 --- a/api/helm/templates/php-deployment.yaml +++ b/api/helm/templates/php-deployment.yaml @@ -9,7 +9,7 @@ metadata: app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/managed-by: {{ .Release.Service }} spec: - replicas: 3 + replicas: 1 template: metadata: labels: diff --git a/api/helm/values.yaml b/api/helm/values.yaml index 37d92376..58891e1d 100644 --- a/api/helm/values.yaml +++ b/api/helm/values.yaml @@ -10,13 +10,14 @@ settings: version: V.0.1 description: ''Naast deze JSON rest API is er ook een [graphql](/graphql) interface beschikbaar.'' repro: 'https://github.com/ConductionNL/Proto-component-commonground' - domain: conduction.nl + subdomain: pc domains: - conduction.nl - - zaakonline.nl - - larping.eu - - common-ground.dev - - trouwplanner.online + # - vng.cloud + # - zaakonline.nl + # - larping.eu + # - common-ground.dev + # - trouwplanner.online - huwelijksplanner.online organisationName: Conduction email: info@conduction.nl @@ -29,7 +30,7 @@ settings: debug: 1 replicaCount: 1 corsAllowOrigin: ['*'] - trustedHosts: '^(.+\.)?conduction\.nl$|^(.+\.)?huwelijksplanner\.online$|^(.+\.)?larping\.eu$|^(.+\.)?common-ground\.dev$|^(.+\.)?trouwplanner\.online$|^(.+\.)?zaakonline\.nl$|localhost' + trustedHosts: '^(.+\.)?conduction\.nl$|^(.+\.)?vng\.cloud$|^(.+\.)?huwelijksplanner\.online$|^(.+\.)?larping\.eu$|^(.+\.)?common-ground\.dev$|^(.+\.)?trouwplanner\.online$|^(.+\.)?zaakonline\.nl$|localhost' pullPolicy: Always # You will need these proxies on kubernetes trustedProxies: diff --git a/api/src/Subscriber/FieldsSubscriber.php b/api/src/Subscriber/FieldsAndExtendSubscriber.php similarity index 53% rename from api/src/Subscriber/FieldsSubscriber.php rename to api/src/Subscriber/FieldsAndExtendSubscriber.php index f842a8e2..5b9c7e04 100644 --- a/api/src/Subscriber/FieldsSubscriber.php +++ b/api/src/Subscriber/FieldsAndExtendSubscriber.php @@ -9,16 +9,19 @@ use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent; use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\Serializer\SerializerInterface; +use Symfony\Component\PropertyAccess\PropertyAccess; -class FieldsSubscriber implements EventSubscriberInterface +class FieldsAndExtendSubscriber implements EventSubscriberInterface { private $params; private $serializer; + private $propertyAccessor; public function __construct(ParameterBagInterface $params, SerializerInterface $serializer) { $this->params = $params; $this->serializer = $serializer; + $this->propertyAccessor = PropertyAccess::createPropertyAccessor(); } public static function getSubscribedEvents() @@ -32,9 +35,13 @@ public function FilterFields(GetResponseForControllerResultEvent $event) { $result = $event->getControllerResult(); $fields = $event->getRequest()->query->get('fields'); + $extends = $event->getRequest()->query->get('extend'); + // This needs to be bassed on the content-type + $type = 'jsonhal'; + // Only do somthing if fields is query supplied - if (!$fields) { + if (!$fields && $extends) { return $result; } @@ -42,6 +49,19 @@ public function FilterFields(GetResponseForControllerResultEvent $event) if (!is_array($fields)) { $fields = explode(',', $fields); } + if (!is_array($extends)) { + $extends= explode(',', $extends); + } + + // Its possible to nest fields for filterins + foreach($fields as $key->$value){ + // Lets check if the fields contain one or more .'s + if (strpos($value, '.') !== false) { + // This is where it gets complicated couse it could go on indevinitly + } + } + + // Overwrite maxdepth for extended properties // we always need to return an id and links (in order not to break stuff) if (!in_array('id', $fields)) { @@ -54,8 +74,31 @@ public function FilterFields(GetResponseForControllerResultEvent $event) // now we need to overide the normal subscriber $json = $this->serializer->serialize( $result, - 'jsonhal', ['enable_max_depth' => true, 'attributes'=> $fields] + $type, + ['enable_max_depth' => true, + 'attributes'=> $fields] ); + + + $jsonArray = json_decode($json, true); + + // The we want to extend properties from the extend query + foreach($extends as $extend){ + /* @todo add security checks */ + // Get new object for the extend + $extendObject = $this->propertyAccessor->getValue($result, $extend); + // turn to json + $extendjson = $this->serializer->serialize( + $result, + $type, + ['enable_max_depth' => true, + 'attributes'=> $fields] + ); + // add to the array + $jsonArray[$extend] = json_decode($extendjson, true); + } + + $json = json_encode($jsonArray); $response = new Response( $json, diff --git a/api/symfony.lock b/api/symfony.lock index 4942a3b5..92765b1f 100644 --- a/api/symfony.lock +++ b/api/symfony.lock @@ -73,9 +73,6 @@ "src/Repository/.gitignore" ] }, - "doctrine/doctrine-cache-bundle": { - "version": "1.3.5" - }, "doctrine/doctrine-fixtures-bundle": { "version": "3.0", "recipe": { @@ -305,6 +302,9 @@ "symfony/dotenv": { "version": "v4.3.1" }, + "symfony/error-handler": { + "version": "v4.4.1" + }, "symfony/event-dispatcher": { "version": "v4.3.1" }, diff --git a/api/templates/helm/Values.yaml.twig b/api/templates/helm/Values.yaml.twig index aade15ab..a328bd6b 100644 --- a/api/templates/helm/Values.yaml.twig +++ b/api/templates/helm/Values.yaml.twig @@ -10,7 +10,7 @@ settings: version: {{ app_version }} description: '{{ app_description }}' repro: '{{ app_repro }}' - domain: {{ app_domain }} + subdomain: {{ app_subdomain }} domains: {% for domain in app_domains %} - {{ domain }} diff --git a/docker-compose.yml b/docker-compose.yml index 3c8a82c8..62224f43 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,7 +8,6 @@ x-cache: - ${CONTAINER_REGISTRY_BASE}/${CONTAINER_PROJECT_NAME}-varnish - ${CONTAINER_REGISTRY_BASE}/${CONTAINER_PROJECT_NAME}-admin - ${CONTAINER_REGISTRY_BASE}/${CONTAINER_PROJECT_NAME}-client - - ${CONTAINER_REGISTRY_BASE}/${CONTAINER_PROJECT_NAME}-h2-proxy services: php: @@ -30,13 +29,14 @@ services: - CONTAINER_REGISTRY_BASE=${CONTAINER_REGISTRY_BASE} - CONTAINER_PROJECT_NAME=${CONTAINER_PROJECT_NAME} - CONTAINER_REPRO=${CONTAINER_REPRO} - - DATABASE_URL=postgres://api-platform:!ChangeMe!@db/api?serverVersion=10.1 + #- DATABASE_URL=postgres://api-platform:!ChangeMe!@db/api?serverVersion=10.1 + - DATABASE_URL=mysql://api-platform:!ChangeMe!@db/api?serverVersion=10.1 - APP_ENV=${APP_ENV} - APP_DEBUG=${APP_DEBUG} - APP_VERSION=${APP_VERSION} - APP_NAME=${APP_NAME} - APP_TITLE=${APP_TITLE} - - APP_DOMAIN=${APP_DOMAIN} + - APP_SUBDOMAIN=${APP_SUBDOMAIN} - APP_DOMAINS=${APP_DOMAINS} - APP_DEMO=${APP_DEMO} - APP_REPRO=${APP_REPRO} @@ -167,15 +167,28 @@ services: networks: - nlx + #db: + # image: postgres:10-alpine + # environment: + # - POSTGRES_DB=api + # - POSTGRES_USER=api-platform + # You should definitely change the password in production + # - POSTGRES_PASSWORD=!ChangeMe! + # volumes: + # - db-data:/var/lib/postgresql/data:rw + db: - image: postgres:10-alpine + image: mysql:5.6 + restart: always environment: - - POSTGRES_DB=api - - POSTGRES_USER=api-platform - # You should definitely change the password in production - - POSTGRES_PASSWORD=!ChangeMe! + - MYSQL_ROOT_PASSWORD=example + - MYSQL_DATABASE=api + - MYSQL_USER=api-platform + - MYSQL_PASSWORD=!ChangeMe! volumes: - - db-data:/var/lib/postgresql/data:rw + - db-mysql:/var/lib/mysql:rw + ports: + - "3306:3306" mercure: # In production, you may want to use the managed version of Mercure, https://mercure.rocks @@ -250,4 +263,5 @@ networks: volumes: db-data: {} + db-mysql: {} nlx-data-2: {} From 6a56eae5c07ac921b4bdce5978ede79f6d375db9 Mon Sep 17 00:00:00 2001 From: Barry Date: Wed, 18 Dec 2019 16:33:09 +0100 Subject: [PATCH 20/49] DESIGN.md removed and small fixes applied --- DESIGN.md | 330 --------------------------------- api/src/Entity/Property.php | 3 +- api/src/Entity/RequestType.php | 11 +- 3 files changed, 8 insertions(+), 336 deletions(-) delete mode 100644 DESIGN.md diff --git a/DESIGN.md b/DESIGN.md deleted file mode 100644 index cffb8595..00000000 --- a/DESIGN.md +++ /dev/null @@ -1,330 +0,0 @@ -# Design Considerations as Proposal - -Welcome, you are currently viewing the design decisions for the proto component. The proto component aims to provide a framework for the quick development of production apis for the commonground project. - -*Index* -- [The European factor](#the-european-factor) -- [On standards and standardisation](#on-standards-and-standardization) -- [NL API Strategie](#nl-api-strategie) - -*Design Choices* -- [NLX](#nlx) -- [English](#english) -- [Fields](#fields) -- [Search](#search) -- [Queries](#queries) -- [Extending](#extending) -- [Time travel](#timetravel) -- [Archivation](#archivation) -- [Audit trail](#audittrail) -- [Health checks](#healthchecks) -- [Notifications](#notifications) -- [Authentication](#authentication) -- [Authorization](#authorization) -- [Ordering](#ordering) -- [Translations](#translations) -- [Errors](#errors) -- [Arrays](#arrays) -- [Filtering](#filtering) - -*Implementation choices* -- [Api Versioning](#api-versioning) -- [Environments and name spacing](#environments-and-namespacing) -- [Domain Build-up and routing](#domain-build-up-and-routing) -- [Container Setup](#container-setup) - - -The European factor -------- -The proto-component isn't just a Dutch Component, it is in essence a Dutch translation of European components, nowhere is this more obvious than in the core code. Our component is based on [API Platform](https://api-platform.com/) an API specific version of the symfony framework. This framework is build by the lovely people of [Les Tilleuls](https://les-tilleuls.coop/en) and is build with support of the European Commission trough the [EU-FOSSA Hackathon](https://ec.europa.eu/info/news/first-eu-fossa-hackathon-it-happened-2019-may-03_en) and Digital Ocean trough [Hacktoberfest](https://hacktoberfest.digitalocean.com/). - -But it doesn't just end there. The [varnish container](https://hub.docker.com/r/eeacms/varnish/) that we use to speed up the API response is build and maintained by [EEA]() (The European Environment Agency) and the development team at conduction itself is attached to the [Odyssey program](https://www.odyssey.org/) and originated from the [startupinresidence](https://startupinresidence.com/) program. - -So you could say that both change and a European perspective is in our blood. - -On standards and standardization -------- -The specific goal of the proto component (which this current code base is a version of) is to provide a common architecture for common ground components. As such the common ground principles are leading in design choices, and within those principles international compliancy and technological invocation is deemed most important. **We do not want to make concessions to the current infrastructure.** As such the component might differ on [NL API Strategie](https://docs.geostandaarden.nl/api/API-Strategie), [NORA](https://www.noraonline.nl/wiki/Standaarden), [vng.cloud](https://zaakgerichtwerken.vng.cloud/themas/index) and or other standards if they are deemed incompatible or out of line with (inter)national standards and or good practices. - -Unfortunately (inter)national standards can be conflicting. We therefore prioritize standards on several grounds - -- International is put before local -- Standards carried by a standard organization (like ISO, W3C etc) at put before floating standards (like RFC's) wichs are put before industry standards, good practices and so on. - -So if for instance a **local** standard is out of line with an **international** good practice we follow the international good practice. - -### Commonground specific standards - -This component was designed in line with the [NL API Strategie](https://docs.geostandaarden.nl/api/API-Strategie), [NORA](https://www.noraonline.nl/wiki/Standaarden), [vng.cloud](https://zaakgerichtwerken.vng.cloud/themas/index), [commonground principles](https://vng.nl/onderwerpenindex/bestuur/samen-organiseren-2019/common-ground). - -## NL API Strategie - -The [NL API Strategie](https://docs.geostandaarden.nl/api/API-Strategie) takes a special place in this component, it is designed as a set of guidelines for API's for the Dutch landscape. As such we follow it as close as possible. It dos however contains inconsistencies with both international standards and good practices. On those items we do not follow the norm but consider it our duty to try to change the norm. - -** We implement ** - -api-01, api-02, api-03, api-05, api-06, api-10, api-11, api-12, api-13,api-14, api-16, api-18, api-19, api-20, api-21, api-22, api-23, api-24, api-25, api-26, api-27, api-28, api-29, api-30, api-33, api-34, api-35, api-42 - -** We want to implement ** -- [api-14](https://docs.geostandaarden.nl/api/API-Strategie/#api-14) Use OAuth 2.0 for authorization - -** We do not implement ** - -- [api-04](https://docs.geostandaarden.nl/api/API-Strategie/#api-04) Define interfaces in Dutch unless there is an official English glossary (see [english](#english)) -- [api-09](https://docs.geostandaarden.nl/api/API-Strategie/#api-09) Implement custom representation if supported (see [fields](#fields)) -- [api-17](https://docs.geostandaarden.nl/api/API-Strategie/#api-17) Publish documentation in Dutch unless there is existing documentation in English or there is an official English glossary (see [english](#english)) -- [api-31](https://docs.geostandaarden.nl/api/API-Strategie/#api-31) Use the query parameter sorteer to sort (see [ordering](#ordering)) -- [api-32](https://docs.geostandaarden.nl/api/API-Strategie/#api-32) Use the query parameter zoek for full-text search (see [search](#search)) -- [api-36](https://docs.geostandaarden.nl/api/API-Strategie/#api-36) Provide a POST endpoint for GEO queries (see [queries](#queries)) -- [api-37](https://docs.geostandaarden.nl/api/API-Strategie/#api-37) Support mixed queries at POST endpoints available (see [queries](#queries)) -- [api-38](https://docs.geostandaarden.nl/api/API-Strategie/#api-38) Put results of a global spatial query in the relevant geometric context (see [queries](#queries)) - - -** We doubt or haven’t made a choice yet about** - -- [api-15](https://docs.geostandaarden.nl/api/API-Strategie/#api-15) Use PKI overheid certificates for access-restricted or purpose-limited API authentication -- [api-39](https://docs.geostandaarden.nl/api/API-Strategie/#api-39) Use ETRS89 as the preferred coordinate reference system (CRS) -- [api-40](https://docs.geostandaarden.nl/api/API-Strategie/#api-40) Pass the coordinate reference system (CRS) of the request and the response in the headers -- [api-41](https://docs.geostandaarden.nl/api/API-Strategie/#api-41) Use content negotiation to serve different CRS - -NLX -------- -We implement the [NLX system](https://docs.nlx.io/understanding-the-basics/introduction/) as part of the basic commonground infrastructure, as such nlx headers are used in the internal logging. -The following X-NLX headers have been implemented for that reason `X-NLX-Logrecord-ID`,`X-NLX-Request-Process-Id`,`X-NLX-Request-Data-Elements` and `X-NLX-Request-Data-Subject`, these are tied to the internal audit trail (see audit trail for more information), and `X-Audit-Toelichting` (from the ZGW APIs) is implemented as `X-Audit-Clarification`. We do not use other NLX headers since they (conform to the [NLX schema](https://docs.nlx.io/reference-information/transaction-log-headers/)) wil not reach the provider. - -We strongly discourage the use of the `X-NLX-Request-Data-Subject` header as it might allow private data (such as BSNs) to show up in logging. - -Please note that the use of nlx is optional. The component can be used without NLX. In that case set `X-NLX-Logrecord-ID` to false and provide (the normaly ignored) fields `X-NLX-Requester-User-Id`, `X-NLX-Request-Application-Id`, `X-NLX-Request-Subject-Identifier`, `X-NLX-Requester-Claims` and `X-NLX-Request-User` as if you are making an NLX call. This provides the API with enough credentials to make an complete audit trail. It also provides an easy implementation route to NLX since the only thing that would need to be changed at a later time is making you call to an nlx outway instead of the API directly. - -English -------- -The [NL API Standard](https://geonovum.github.io/KP-APIs/#api-04-define-interfaces-in-dutch-unless-there-is-an-official-english-glossary) describes that there is a preference for Dutch in API documentation. - -> Define resources and the underlying entities, fields and so on (the information model ad the external interface) in Dutch. English is allowed in case there is an official English glossary. - -We view this as a breach with good coding practice and international coding standards, all documentation and code is therefore supplied in English. We do however provide translation (or i18n) support. - -Fields -------- -A part of the [haal centraal](https://raw.githubusercontent.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/master/api-specificatie/Bevraging-Ingeschreven-Persoon/openapi.yaml) the concept of field limitations has been introduced its general purpose being to allow an application to limit the returned fields to prevent the unnecessary transportation of (private) data. In the [NL API Strategie](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/master/features/fields.feature) this has been implemented as a parameter consisting of comma separated values. However the normal web standard for optional lists (conform w3c form standards) is an array. - -Search -------- -As part of [api-32](https://docs.geostandaarden.nl/api/API-Strategie/#api-32) a `zoeken` query has been introduced that can handle wildcards. This breaks best practice, first of allest practice is a `search` query parameter (see also the nodes on [English](#english)). Secondly wildcards are a sql concept, not a webconcept, they are also a rather old concept severely limiting the search options provided. Instead the [regular expression standard](https://en.wikipedia.org/wiki/Regular_expression) should be used. - -__solution__ -We implement a `search` query parameter on resource collections, that filters with regex. - -Queries -------- -In several examples of the nl api strategie we see query parameters being attached to post requests. This is unusual in the sence that sending query strings along with a post is considered bad practice (because query parameters end up as part of an url and are therefore logged by servers). But it is technically possible folowing RFC 3986. The real pain is that in the NL api-stratgie the POST requests seems to be used to search, ot in other words GET data. This is where compliance with HTTP (1.1) breaks. - -__solution__ -We do not implement a query endpoint on post requests. - -Api Versioning -------- -As per [landelijke API-strategie.](https://geonovum.github.io/KP-APIs/#versioning) we provide/ask major versions in the endpoint and minor versions in header, for this the `API-Version` is used (instead of the `api-version` header used in haal centraal) - -__solution__ -We implement both endpoint and header versioning - -Extending -------- -A part of the [haal centraal](https://raw.githubusercontent.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/master/api-specificatie/Bevraging-Ingeschreven-Perso on/openapi.yaml) the concept of extending has been introduced, its general purpose being to allow the inclusion of sub resources at an api level thereby preventing unnecessary API calls. In the [NL API Strategie](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/master/features/expand.feature) this has been implemented as a parameter consisting of comma separated values. However the normal web standard for optional lists (conform w3c form standards) is an array. - -__solution__ -The extend parameter has been implemented as an array - -Archivation -------- -There is a need (by law) for archivation, meaning that we should only keep resources for a fixed amount of time and delete them thereafter. In line with the extending and fields principle whereby we only want resource properties that we need when we needed, it is deemed good practice make a sub resource of the archivation properties. For the archivation properties the [zgw](https://zaken-api.vng.cloud/api/v1/schema/#operation/zaak_list) is followed and translated to englisch. - - -```json -{ - "id": "e2984465-190a-4562-829e-a8cca81aa35d", - "nomination": "destroy", - "action_date": "2019-11-25T07:26:54Z", - "status": "to_be_archived", -} -``` - -This gives us an interesting thought, according to [NL API Strategie](https://docs.geostandaarden.nl/api/API-Strategie/#api-10-implement-operations-that-do-not-fit-the-crud-model-as-sub-resources) sub resources should have their own endpoint. Therefore we could use a archive sub of a different resource for archivation rules e.g. /zaken/{uuid}/archivation for a verzoek. This in itself leads credence to the thought that archivation should have its own central crud api. - - -Audittrail -------- -For audittrail we use the base mechanism as provided by [vng.cloud](https://zaakgerichtwerken.vng.cloud/themas/achtergronddocumentatie/audit-trail), we do however diver on some key point, -- Personal data should never be part of a log, therefore only the user id with the client should be logged (instead of the name) -- Besides an endpoint per resource there should be a general enpoint to search all audit trials of a component -- [Time travel](#timetravel) in combination with objects versioning makes the return of complete objects unnecessary. But an audit rail endpoint should support the [extend](#extending) functionality to provide the option of obtaining complete objects. - - -__solution__ -In compliance with [vng.cloud](https://zaakgerichtwerken.vng.cloud/themas/achtergronddocumentatie/audit-trail) each individual object should support an /audittrail endpoint. You can look into the [tutorial](TUTORIAL.md) for specifications on how to activate an audit trail for a given object. - -Healthchecks -------- -From [issue 154](https://github.com/VNG-Realisatie/huwelijksplanner/issues/154) - -For healthchecks we use the health-json principle (or json-health to stay in line with json-ld and json-hal). This means the any endpoint `should` be capable of providing health information concerning that endpoint and services behind it. - -__solution__ -The use of a `Content-Type: application/health+json` header returns an health json schema. - - -Notifications -------- -For notifications we do not YET use the current [ZGW standard](https://zaakgerichtwerken.vng.cloud/themas/achtergronddocumentatie/notificaties) since there is an [dicusion](https://github.com/VNG-Realisatie/gemma-zaken/issues/1427#issuecomment-549272696) about the possible insecurity of sending properties or data objects along with a notification. It also doesn’t follow the [web standard](https://www.w3.org/TR/websub/). We wait for the conclusion of that discussion before making an implementation. - -__solution__ -In compliance with [w3.org](https://www.w3.org/TR/websub/) each endpoint `should` returns an header containing an subscription url. That can be used in accordance with the application to subscribe to both individual objects as collections whereby collections serve as 'kanalen'. We aim to implement the ZGW notificatie component, but feel that further features on that component would be required to make to be fully supported. We will supply feature requests per issue to support this effort. - -Authentication -------- - -__solution__ - -Authorization -------- -We implement user scopes as per [vng.cloud](https://zaakgerichtwerken.vng.cloud/themas/achtergronddocumentatie/autorisatie-scopes) standard. But see problems with how the scopes are defined and named, and consider the general setup to be to focused on ZGW (including Dutch naming, zgw specific fields like maxVertrouwlijkheid and a lack of CRUD thinking). There is a further document concerning [Authentication and Authorization](https://zaakgerichtwerken.vng.cloud/themas/achtergronddocumentatie/authenticatie-autorisatie) that details how we should authenticate users and give them scopes. We agree with the principles of the document on application based authorization and the use of JWT tokens. But disagree on some key technical aspect. Most important being that the architecture doesn't take into consideration the use of one component by several organizations at once. Or scopes per property. - -__solution__ -No solution as of yet, so there is no implementation of Authorization or Scopes. We aim to implement the ZGW authorisatie component, but feel that further features on that component would be required to make to be fully supported. We will supply feature requests per issue to support this effort. - - -Timetravel -------- -A part of the [haal centraal](https://raw.githubusercontent.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/master/api-specificatie/Bevraging-Ingeschreven-Persoon/openapi.yaml) the concept of timetravel has been introduced, as in getting the version of an object as it was on a given date. For this the `geldigop` [see the docs](file:///C:/Users/ruben/Desktop/doc_gba_historie.html#operation/getBewoningen) header is used. In addition the `geldigvan` and `geldigtot` are introduced as collection filters. - -The commonground proto componant natively supports time traveling on all resources that are annotaded with the @Gedmo\Loggable, this is done by adding the ?validOn=[date] query to a request, date can either be a datetime or datedatime string. Any value supported by php's [strtotime()](https://www.php.net/manual/en/function.strtotime.php) is supported. Keep in mind that this returns the entity a as it was valid on that time or better put, the last changed version BEFORE that moment. To get a complete list of all changes on an item the [/audittrail](#Audittrail -) endpoint can be used. - -__solution__ -In compliance with [schema.org](https://schema.org/validFrom) `geldigop`,`geldigvan` and `geldigtot` are implemented as `validOn`,`validFrom` and `validUntil`. And can be used a query parameters on collection operations/ - -Additionally `validOn` can be used on a single object get request to get the version of that object on a given date, a 404 is returned if no version of that object can be given for the given date - -Ordering -------- -In the [zaak-api](https://zaken-api.vng.cloud/api/v1/schema/#operation/zaak_list) ordering is done in a single field parameter, we however prefer to be able to order on multiple fields in combination of ascending and descending orders. We therefore implement an order parameter as array where they key is the property on wish should be ordered and the value the type of ordering e.g. `?order[name]=desc&order[status]=asc`. The order in which the keys are added to the order array determines the order in which they are applied. - - -Translations -------- -We support translations trough the `Accept-Language` header (read the [docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language)), the fallback language for all messages is English - -Errors -------- -See [jsonapi](https://jsonapi.org/examples/#error-objects) and the [rfc](https://tools.ietf.org/html/rfc7807). - -Arrays -------- -The NL API standard uses comma notation on array's in http requests. E.g. fields=id,name,description however common browsers(based on chromium e.g. chrome and edge) use bracket notation for query style array's e.g. fields[]=id&fields[]=name,&fields[]=description. The difference of course is obvious since comma notation doesn't allow you to index arrays. [Interestingly enough there isn't actually a rfc spec for this](https://stackoverflow.com/questions/15854017/what-rfc-defines-arrays-transmitted-over-http). - -It is perceivable that in future iterations we would like to use indexed array in situations where the index of the array can't be assumed on basis of url notation, when indexes aren�t numerical, when we don�t want an index to start at 0 or when indexes are purpusly missing (comma notation of id,name,description would always refert to the equivalent of fields: [ - 0 => id, - 1 => name, - 2 => description -] - -__solution__ -We support both comma and bracket notation on array's, but only document bracket notation since it is preferred. - - -Container Setup -------- -https://medium.com/shiphp/building-a-custom-nginx-docker-image-with-environment-variables-in-the-config-4a0c36c4a617 - - -Filtering -------- -Because it is based on api-platform de proto component supports filter functions as in [api platform](https://api-platform.com/docs/core/filters/) additionally there are custom filter types available for common ground. - -__Regex Exact__ - -__Regex Contains__ - -__Like___ -The like filters is used to search for resources with the traditional sql LIKE operator. If pattern does not contain percent signs or underscores, then the pattern only represents the string itself; in that case LIKE acts like the equals operator. An underscore (_) in pattern stands for (matches) any single character; a percent sign (%) matches any sequence of zero or more characters. - -Some examples: - -'abc' LIKE 'abc' true -'abc' LIKE 'a%' true -'abc' LIKE '_b_' true -'abc' LIKE 'c' false - -LIKE pattern matching always covers the entire string. Therefore, if it's desired to match a sequence anywhere within a string, the pattern must start and end with a percent sign. - -To match a literal underscore or percent sign without matching other characters, the respective character in pattern must be preceded by a backlash. - -## Kubernetes - -### Loadbalancers -We no longer provide a load balancer per component, since this would require a IP address per component (and ipv 4 addresses are in short supply). Instead we make components available as an internal service. A central load balancer could then be used to provide several api’s in one - -### server naming -A component is (speaking in kubernetes terms) a service that is available at a name corresponding to its designation - -### Domain Build-up and routing -By convention the component assumes that you follow the common ground domain name build up, meaning {environment}.{component}.{rest of domain}. That means that only the first two url parts are used for routing. It is also assumed that when no environment is supplied the production environment should be offered E.g. a proper domain for the production API of the verzoeken registratie component would be prod.vrc.zaakonline.nl but it should also be reachable under vrc.zaakonline.nl. The proper location for the development environment should always be dev.vrc.zaakonlin.nl - -### Environments and namespacing -We assume that for that you want to run several environments for development purposes. We identify the following namespaces for support. -- prod (Production) -- acce (Acceptation) -- stag (Staging) -- test (Testing) -- dev (Development) - -Because we base the common ground infrastructure on kubernetes, and we want to keep a hard separation between environment we also assume that you are using your environment as a namespace - -Symfony library management gives us the option to define the libraries on a per environment base, you can find that definition in the [bundle config](api/config/bundles.php) - -Besides the API environments the component also ships with additional tools/environments but those are not meant to be deployed -- client (An react client frontend) -- admin (An read admin interface) - -On the local development docker deploy the client environment is used as default instead of the production version of the api. - - -## Data types - -| Period Designator | Description | -|-------------------|----------------------------------------------------------------------| -| Y | years | -| M | months | -| D | days | -| W | weeks. These get converted into days, so cannot be combined with D. | -| H | hours | -| M | minutes | -| S | seconds | - -### Types versus formats - -| Type | Format | Example | Source | Description | Documentation | -|---------|-----------|----------|--------|-------------|----------------------------------------------------------------------| -| integer | int32 | | | | | -| integer | int64 | | | | | -| string | float | 0.15625 | | | [wikipedia](https://en.wikipedia.org/wiki/Single-precision_floating-point_format) | -| string | double | 0.15625 | | | [wikipedia](https://en.wikipedia.org/wiki/Double-precision_floating-point_format) | -| integer | byte | | | | | -| integer | binary | | | | | -| string | date | | | | | -| string | date-time | | | | | -| string | duration | P23DT23H | | | [wikipedia](https://en.wikipedia.org/wiki/ISO_8601#Durations) | -| string | password | | | | | -| string | boolean | | | | | -| string | string | | | | | -| string | uuid | | | | | -| string | uri | | | | | -| string | email | | | | | -| string | rsin | | | | | -| string | bag | | | A BAG uuid | | -| string | bsn | | | | | -| string | iban | | | | | -| | | | | | | - - diff --git a/api/src/Entity/Property.php b/api/src/Entity/Property.php index 9b5d3250..80936fa0 100644 --- a/api/src/Entity/Property.php +++ b/api/src/Entity/Property.php @@ -67,9 +67,10 @@ class Property */ private $title; - /** + /** * @var string $name The name of the property as used in api calls, extracted from title on snake_case basis * @example my_property + * * @Assert\Length(min = 15, max = 255) * @Groups({"read"}) */ diff --git a/api/src/Entity/RequestType.php b/api/src/Entity/RequestType.php index 07d8026f..ebf75da4 100644 --- a/api/src/Entity/RequestType.php +++ b/api/src/Entity/RequestType.php @@ -11,6 +11,7 @@ use Doctrine\Common\Collections\Collection; use Gedmo\Mapping\Annotation as Gedmo; use Doctrine\ORM\Mapping as ORM; +use Ramsey\Uuid\UuidInterface; use Symfony\Component\Serializer\Annotation\Groups; use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Serializer\Annotation\MaxDepth; @@ -47,9 +48,9 @@ class RequestType { /** - * @var \Ramsey\Uuid\UuidInterface $id The UUID identifier of this object + * @var UuidInterface $id The UUID identifier of this object * @example e2984465-190a-4562-829e-a8cca81aa35d - * + * * @Groups({"read"}) * @Assert\Uuid * @ORM\Id @@ -136,12 +137,12 @@ public function __construct() $this->extendedBy = new ArrayCollection(); } - public function getId(): Uuid + public function getId(): ?string { return $this->id; } - - public function setId(Uuid $id): self + + public function setId(string $id): self { $this->id = $id; From 57bbb071a5a37b5cf847537edf8d8a9961b78a1d Mon Sep 17 00:00:00 2001 From: Barry Date: Wed, 18 Dec 2019 16:43:16 +0100 Subject: [PATCH 21/49] getId type fixed --- .idea/workspace.xml | 375 --------------------------------- api/src/Entity/RequestType.php | 7 +- 2 files changed, 3 insertions(+), 379 deletions(-) delete mode 100644 .idea/workspace.xml diff --git a/.idea/workspace.xml b/.idea/workspace.xml deleted file mode 100644 index ced0c1eb..00000000 --- a/.idea/workspace.xml +++ /dev/null @@ -1,375 +0,0 @@ - - - - - - - - - - $PROJECT_DIR$/api/composer.json - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1573726460744 - - - 1573726496674 - - - 1573733386819 - - - 1573735733551 - - - 1574770855136 - - - 1575279662940 - - - 1575279748074 - - - 1575280067186 - - - 1575280181182 - - - 1575281141670 - - - 1575282235015 - - - 1575282356507 - - - 1575282386363 - - - 1575282997667 - - - 1575283562491 - - - 1575283747919 - - - 1575283918851 - - - 1575379056373 - - - 1575383847583 - - - 1575386337848 - - - 1575388288073 - - - 1575443809720 - - - 1575443827717 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/api/src/Entity/RequestType.php b/api/src/Entity/RequestType.php index ebf75da4..4f128cc0 100644 --- a/api/src/Entity/RequestType.php +++ b/api/src/Entity/RequestType.php @@ -137,7 +137,7 @@ public function __construct() $this->extendedBy = new ArrayCollection(); } - public function getId(): ?string + public function getId(): string { return $this->id; } @@ -157,7 +157,6 @@ public function getSourceOrganization(): ?string public function setSourceOrganization(string $sourceOrganization): self { $this->sourceOrganization = $sourceOrganization; - return $this; } @@ -166,7 +165,7 @@ public function getName(): ?string return $this->name; } - public function setName(string $name): self + public function setName(?string $name): self { $this->name = $name; @@ -178,7 +177,7 @@ public function getDescription(): ?string return $this->description; } - public function setDescription(string $description): self + public function setDescription(?string $description): self { $this->description = $description; From c0522f9870ac4f461de357ff6e6123d367c84be3 Mon Sep 17 00:00:00 2001 From: Robert Zondervan Date: Fri, 20 Dec 2019 15:07:16 +0100 Subject: [PATCH 22/49] Remove pulling old images from workflow Edited base link to postman scripts to contain component shortcode and .json extension --- .github/workflows/dockerimage.yml | 2 -- api/config/packages/api_platform.yaml | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml index 05dfdb08..7a602d28 100644 --- a/.github/workflows/dockerimage.yml +++ b/.github/workflows/dockerimage.yml @@ -19,8 +19,6 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - - name: Pulling old images, if any - run: docker-compose pull --ignore-pull-failures - name: Setting APP_NAME run: | export NAME=$(grep APP_NAME= .env | cut -d '=' -f2) diff --git a/api/config/packages/api_platform.yaml b/api/config/packages/api_platform.yaml index 11f8555f..6624d8ab 100644 --- a/api/config/packages/api_platform.yaml +++ b/api/config/packages/api_platform.yaml @@ -34,7 +34,7 @@ api_platform: - Version: %env(APP_VERSION)% - Repository: [online](%env(APP_REPRO)%) / [zip](%env(APP_REPRO)%/archive/master.zip) - Docker Image: [online](%env(CONTAINER_REPRO)%) - - Datamodel: [postman](/schema/openapi.postman_collection) / [oas](/schema/openapi.yaml) / [pdf](/schema/datamodel.pdf) / [mwb](/schema/datamodel.mwb) + - Datamodel: [postman](/schema/%env(APP_NAME)%.postman_collection.json) / [oas](/schema/openapi.yaml) / [pdf](/schema/datamodel.pdf) / [mwb](/schema/datamodel.mwb) %env(APP_DESCRIPTION)% From 852abeb48f18418d2163278727aa0a48f18c1f5e Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Sat, 21 Dec 2019 18:18:53 +0100 Subject: [PATCH 23/49] fix --- .../Subscriber/FieldsAndExtendSubscriber.php | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/api/src/Subscriber/FieldsAndExtendSubscriber.php b/api/src/Subscriber/FieldsAndExtendSubscriber.php index 5b9c7e04..22420329 100644 --- a/api/src/Subscriber/FieldsAndExtendSubscriber.php +++ b/api/src/Subscriber/FieldsAndExtendSubscriber.php @@ -36,9 +36,28 @@ public function FilterFields(GetResponseForControllerResultEvent $event) $result = $event->getControllerResult(); $fields = $event->getRequest()->query->get('fields'); $extends = $event->getRequest()->query->get('extend'); + $contentType= $event->getRequest()->headers->get('accept'); + if(!$contentType){ + $contentType= $event->getRequest()->headers->get('Accept'); + } // This needs to be bassed on the content-type - $type = 'jsonhal'; + + // Lets set a return content type + switch ($contentType) { + case 'application/json': + $renderType = "json"; + break; + case 'application/ld+json': + $renderType= "jsonld"; + break; + case 'application/hal+json': + $renderType= "jsonhal"; + break; + default: + $contentType = 'application/json'; + $renderType = "json"; + } // Only do somthing if fields is query supplied if (!$fields && $extends) { @@ -74,7 +93,7 @@ public function FilterFields(GetResponseForControllerResultEvent $event) // now we need to overide the normal subscriber $json = $this->serializer->serialize( $result, - $type, + $renderType, ['enable_max_depth' => true, 'attributes'=> $fields] ); @@ -103,7 +122,7 @@ public function FilterFields(GetResponseForControllerResultEvent $event) $response = new Response( $json, Response::HTTP_OK, - ['content-type' => 'application/json+hal'] + ['content-type' => $contentType] ); $event->setResponse($response); From b1b77c934fd2aeec56649a3a0eeeea198d174169 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Sat, 21 Dec 2019 18:32:36 +0100 Subject: [PATCH 24/49] Composer update and mysql port fix --- api/composer.lock | 310 +++++++++++++++++---------------- api/helm/values.yaml | 7 +- api/public/schema/openapi.yaml | 79 ++++++++- api/symfony.lock | 3 + docker-compose.yml | 2 +- 5 files changed, 234 insertions(+), 167 deletions(-) diff --git a/api/composer.lock b/api/composer.lock index 10571f7f..57e16568 100644 --- a/api/composer.lock +++ b/api/composer.lock @@ -946,20 +946,21 @@ }, { "name": "doctrine/doctrine-bundle", - "version": "2.0.2", + "version": "2.0.6", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "f96fac225563f5b3b4eeb2f80eb982b7f56484d8" + "reference": "0ef972d3b730f975c80db9fffa4b2a0258c91442" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/f96fac225563f5b3b4eeb2f80eb982b7f56484d8", - "reference": "f96fac225563f5b3b4eeb2f80eb982b7f56484d8", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/0ef972d3b730f975c80db9fffa4b2a0258c91442", + "reference": "0ef972d3b730f975c80db9fffa4b2a0258c91442", "shasum": "" }, "require": { "doctrine/dbal": "^2.9.0", + "doctrine/persistence": "^1.3.3", "jdorn/sql-formatter": "^1.2.16", "php": "^7.1", "symfony/cache": "^4.3.3|^5.0", @@ -967,7 +968,8 @@ "symfony/console": "^3.4.30|^4.3.3|^5.0", "symfony/dependency-injection": "^4.3.3|^5.0", "symfony/doctrine-bridge": "^4.3.7|^5.0", - "symfony/framework-bundle": "^3.4.30|^4.3.3|^5.0" + "symfony/framework-bundle": "^3.4.30|^4.3.3|^5.0", + "symfony/service-contracts": "^1.1.1|^2.0" }, "conflict": { "doctrine/orm": "<2.6", @@ -976,6 +978,7 @@ "require-dev": { "doctrine/coding-standard": "^6.0", "doctrine/orm": "^2.6", + "ocramius/proxy-manager": "^2.1", "phpunit/phpunit": "^7.5", "symfony/phpunit-bridge": "^4.2", "symfony/property-info": "^4.3.3|^5.0", @@ -1030,7 +1033,7 @@ "orm", "persistence" ], - "time": "2019-11-28T08:38:10+00:00" + "time": "2019-12-19T13:47:07+00:00" }, { "name": "doctrine/doctrine-fixtures-bundle", @@ -1665,22 +1668,25 @@ }, { "name": "fig/link-util", - "version": "1.0.0", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/link-util.git", - "reference": "1a07821801a148be4add11ab0603e4af55a72fac" + "reference": "47f55860678a9e202206047bc02767556d298106" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/link-util/zipball/1a07821801a148be4add11ab0603e4af55a72fac", - "reference": "1a07821801a148be4add11ab0603e4af55a72fac", + "url": "https://api.github.com/repos/php-fig/link-util/zipball/47f55860678a9e202206047bc02767556d298106", + "reference": "47f55860678a9e202206047bc02767556d298106", "shasum": "" }, "require": { "php": ">=5.5.0", "psr/link": "~1.0@dev" }, + "provide": { + "psr/link-implementation": "1.0" + }, "require-dev": { "phpunit/phpunit": "^5.1", "squizlabs/php_codesniffer": "^2.3.1" @@ -1715,7 +1721,7 @@ "psr-13", "rest" ], - "time": "2016-10-17T18:31:11+00:00" + "time": "2019-12-18T15:40:05+00:00" }, { "name": "friendsofphp/php-cs-fixer", @@ -1890,16 +1896,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.5.0", + "version": "6.5.1", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5" + "reference": "0274c05370a7bc9bb3a33838858253418bd7d14b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5", - "reference": "dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/0274c05370a7bc9bb3a33838858253418bd7d14b", + "reference": "0274c05370a7bc9bb3a33838858253418bd7d14b", "shasum": "" }, "require": { @@ -1953,7 +1959,7 @@ "rest", "web service" ], - "time": "2019-12-07T18:20:45+00:00" + "time": "2019-12-21T08:51:15+00:00" }, { "name": "guzzlehttp/promises", @@ -2674,16 +2680,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.3.2", + "version": "4.3.3", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e" + "reference": "2ecaa9fef01634c83bfa8dc1fe35fb5cef223a62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/b83ff7cfcfee7827e1e78b637a5904fe6a96698e", - "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/2ecaa9fef01634c83bfa8dc1fe35fb5cef223a62", + "reference": "2ecaa9fef01634c83bfa8dc1fe35fb5cef223a62", "shasum": "" }, "require": { @@ -2721,7 +2727,7 @@ } ], "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-09-12T14:27:41+00:00" + "time": "2019-12-20T13:40:23+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -3053,22 +3059,22 @@ }, { "name": "ramsey/uuid", - "version": "3.9.1", + "version": "3.9.2", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "5ac2740e0c8c599d2bbe7f113a939f2b5b216c67" + "reference": "7779489a47d443f845271badbdcedfe4df8e06fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/5ac2740e0c8c599d2bbe7f113a939f2b5b216c67", - "reference": "5ac2740e0c8c599d2bbe7f113a939f2b5b216c67", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/7779489a47d443f845271badbdcedfe4df8e06fb", + "reference": "7779489a47d443f845271badbdcedfe4df8e06fb", "shasum": "" }, "require": { "ext-json": "*", "paragonie/random_compat": "^1 | ^2 | 9.99.99", - "php": "^5.4 | ^7", + "php": "^5.4 | ^7 | ^8", "symfony/polyfill-ctype": "^1.8" }, "replace": { @@ -3078,13 +3084,13 @@ "codeception/aspect-mock": "^1 | ^2", "doctrine/annotations": "^1.2", "goaop/framework": "1.0.0-alpha.2 | ^1 | ^2.1", - "jakub-onderka/php-parallel-lint": "^0.9.0", - "mockery/mockery": "^0.9.9", + "jakub-onderka/php-parallel-lint": "^1", + "mockery/mockery": "^0.9.11 | ^1", "moontoast/math": "^1.1", "paragonie/random-lib": "^2", "php-mock/php-mock-phpunit": "^0.3 | ^1.1", "phpunit/phpunit": "^4.8 | ^5.4 | ^6.5", - "squizlabs/php_codesniffer": "^2.3" + "squizlabs/php_codesniffer": "^3.5" }, "suggest": { "ext-ctype": "Provides support for PHP Ctype functions", @@ -3136,7 +3142,7 @@ "identifier", "uuid" ], - "time": "2019-12-01T04:55:27+00:00" + "time": "2019-12-17T08:18:51+00:00" }, { "name": "ramsey/uuid-doctrine", @@ -3388,7 +3394,7 @@ }, { "name": "symfony/asset", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", @@ -3444,16 +3450,16 @@ }, { "name": "symfony/cache", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "de737c81ea95018d11a3ef908ad2ebf203741b96" + "reference": "6af64bab165e588300378a87bcd2df3c7c31c144" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/de737c81ea95018d11a3ef908ad2ebf203741b96", - "reference": "de737c81ea95018d11a3ef908ad2ebf203741b96", + "url": "https://api.github.com/repos/symfony/cache/zipball/6af64bab165e588300378a87bcd2df3c7c31c144", + "reference": "6af64bab165e588300378a87bcd2df3c7c31c144", "shasum": "" }, "require": { @@ -3519,7 +3525,7 @@ "caching", "psr6" ], - "time": "2019-12-01T10:50:45+00:00" + "time": "2019-12-16T10:45:21+00:00" }, { "name": "symfony/cache-contracts", @@ -3581,16 +3587,16 @@ }, { "name": "symfony/config", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "7aa5817f1b7a8ed377752b90fcc47dfb3c67b40c" + "reference": "6911d432edd5b50822986604fd5a5be3af856d30" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/7aa5817f1b7a8ed377752b90fcc47dfb3c67b40c", - "reference": "7aa5817f1b7a8ed377752b90fcc47dfb3c67b40c", + "url": "https://api.github.com/repos/symfony/config/zipball/6911d432edd5b50822986604fd5a5be3af856d30", + "reference": "6911d432edd5b50822986604fd5a5be3af856d30", "shasum": "" }, "require": { @@ -3641,7 +3647,7 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2019-12-01T10:50:45+00:00" + "time": "2019-12-18T12:00:29+00:00" }, { "name": "symfony/console", @@ -3791,16 +3797,16 @@ }, { "name": "symfony/debug", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "b8600a1d7d20b0e80906398bb1f50612fa074a8e" + "reference": "5c4c1db977dc70bb3250e1308d3e8c6341aa38f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/b8600a1d7d20b0e80906398bb1f50612fa074a8e", - "reference": "b8600a1d7d20b0e80906398bb1f50612fa074a8e", + "url": "https://api.github.com/repos/symfony/debug/zipball/5c4c1db977dc70bb3250e1308d3e8c6341aa38f5", + "reference": "5c4c1db977dc70bb3250e1308d3e8c6341aa38f5", "shasum": "" }, "require": { @@ -3843,20 +3849,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2019-11-28T13:33:56+00:00" + "time": "2019-12-16T14:46:54+00:00" }, { "name": "symfony/dependency-injection", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "ad46a4def1325befab696b49c839dffea3fc92bd" + "reference": "79b0358207a3571cc3af02a57d0321927921f539" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/ad46a4def1325befab696b49c839dffea3fc92bd", - "reference": "ad46a4def1325befab696b49c839dffea3fc92bd", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/79b0358207a3571cc3af02a57d0321927921f539", + "reference": "79b0358207a3571cc3af02a57d0321927921f539", "shasum": "" }, "require": { @@ -3916,25 +3922,25 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2019-12-01T10:19:36+00:00" + "time": "2019-12-19T16:00:02+00:00" }, { "name": "symfony/doctrine-bridge", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "31c3d72f9e7a03e1b9d136084a9201c2225ee348" + "reference": "3e40beb8dbb06d2967e37938f4c3f20f425137a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/31c3d72f9e7a03e1b9d136084a9201c2225ee348", - "reference": "31c3d72f9e7a03e1b9d136084a9201c2225ee348", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/3e40beb8dbb06d2967e37938f4c3f20f425137a6", + "reference": "3e40beb8dbb06d2967e37938f4c3f20f425137a6", "shasum": "" }, "require": { "doctrine/event-manager": "~1.0", - "doctrine/persistence": "~1.0", + "doctrine/persistence": "^1.3", "php": "^7.1.3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", @@ -3947,7 +3953,7 @@ "symfony/http-kernel": "<4.3.7", "symfony/messenger": "<4.3", "symfony/security-core": "<4.4", - "symfony/validator": "<4.4" + "symfony/validator": "<4.4.2|<5.0.2,>=5.0" }, "require-dev": { "doctrine/annotations": "~1.7", @@ -3969,7 +3975,7 @@ "symfony/security-core": "^4.4|^5.0", "symfony/stopwatch": "^3.4|^4.0|^5.0", "symfony/translation": "^3.4|^4.0|^5.0", - "symfony/validator": "^4.4|^5.0", + "symfony/validator": "^4.4.2|^5.0.2", "symfony/var-dumper": "^3.4|^4.0|^5.0" }, "suggest": { @@ -4010,11 +4016,11 @@ ], "description": "Symfony Doctrine Bridge", "homepage": "https://symfony.com", - "time": "2019-12-01T08:39:58+00:00" + "time": "2019-12-17T08:15:02+00:00" }, { "name": "symfony/dom-crawler", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", @@ -4132,16 +4138,16 @@ }, { "name": "symfony/error-handler", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "a1ad02d62789efed1d2b2796f1c15e0c6a00fc3b" + "reference": "6d7d7712a6ff5215ec26215672293b154f1db8c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/a1ad02d62789efed1d2b2796f1c15e0c6a00fc3b", - "reference": "a1ad02d62789efed1d2b2796f1c15e0c6a00fc3b", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/6d7d7712a6ff5215ec26215672293b154f1db8c1", + "reference": "6d7d7712a6ff5215ec26215672293b154f1db8c1", "shasum": "" }, "require": { @@ -4184,11 +4190,11 @@ ], "description": "Symfony ErrorHandler Component", "homepage": "https://symfony.com", - "time": "2019-12-01T08:46:01+00:00" + "time": "2019-12-16T14:46:54+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", @@ -4316,16 +4322,16 @@ }, { "name": "symfony/expression-language", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/expression-language.git", - "reference": "8a1028a65623a8f7bba582b60e4fd308e6f43001" + "reference": "539e7ff0b635c8b90d8127bc929da781a96eab2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/8a1028a65623a8f7bba582b60e4fd308e6f43001", - "reference": "8a1028a65623a8f7bba582b60e4fd308e6f43001", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/539e7ff0b635c8b90d8127bc929da781a96eab2d", + "reference": "539e7ff0b635c8b90d8127bc929da781a96eab2d", "shasum": "" }, "require": { @@ -4363,11 +4369,11 @@ ], "description": "Symfony ExpressionLanguage Component", "homepage": "https://symfony.com", - "time": "2019-11-12T14:53:53+00:00" + "time": "2019-12-10T10:33:21+00:00" }, { "name": "symfony/filesystem", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", @@ -4417,7 +4423,7 @@ }, { "name": "symfony/finder", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", @@ -4515,16 +4521,16 @@ }, { "name": "symfony/form", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "08dfa1960bbd25caaf979a47e837696bf2ee6d65" + "reference": "7ed4441a347fe33299908a9aa24ff8a556848a16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/08dfa1960bbd25caaf979a47e837696bf2ee6d65", - "reference": "08dfa1960bbd25caaf979a47e837696bf2ee6d65", + "url": "https://api.github.com/repos/symfony/form/zipball/7ed4441a347fe33299908a9aa24ff8a556848a16", + "reference": "7ed4441a347fe33299908a9aa24ff8a556848a16", "shasum": "" }, "require": { @@ -4595,7 +4601,7 @@ ], "description": "Symfony Form Component", "homepage": "https://symfony.com", - "time": "2019-12-01T09:13:30+00:00" + "time": "2019-12-16T11:07:37+00:00" }, { "name": "symfony/framework-bundle", @@ -4722,16 +4728,16 @@ }, { "name": "symfony/http-client", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "6c235cf15d8b516b41204a28d555685191409729" + "reference": "9ebfc77b5018a05226b38642def82746f3e2ce0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/6c235cf15d8b516b41204a28d555685191409729", - "reference": "6c235cf15d8b516b41204a28d555685191409729", + "url": "https://api.github.com/repos/symfony/http-client/zipball/9ebfc77b5018a05226b38642def82746f3e2ce0f", + "reference": "9ebfc77b5018a05226b38642def82746f3e2ce0f", "shasum": "" }, "require": { @@ -4786,7 +4792,7 @@ ], "description": "Symfony HttpClient component", "homepage": "https://symfony.com", - "time": "2019-11-29T16:55:58+00:00" + "time": "2019-12-19T15:57:49+00:00" }, { "name": "symfony/http-client-contracts", @@ -4847,16 +4853,16 @@ }, { "name": "symfony/http-foundation", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "8bccc59e61b41963d14c3dbdb23181e5c932a1d5" + "reference": "fcae1cff5b57b2a9c3aabefeb1527678705ddb62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/8bccc59e61b41963d14c3dbdb23181e5c932a1d5", - "reference": "8bccc59e61b41963d14c3dbdb23181e5c932a1d5", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/fcae1cff5b57b2a9c3aabefeb1527678705ddb62", + "reference": "fcae1cff5b57b2a9c3aabefeb1527678705ddb62", "shasum": "" }, "require": { @@ -4898,20 +4904,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2019-11-28T13:33:56+00:00" + "time": "2019-12-19T15:57:49+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "e4187780ed26129ee86d5234afbebf085e144f88" + "reference": "fe310d2e95cd4c356836c8ecb0895a46d97fede2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/e4187780ed26129ee86d5234afbebf085e144f88", - "reference": "e4187780ed26129ee86d5234afbebf085e144f88", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/fe310d2e95cd4c356836c8ecb0895a46d97fede2", + "reference": "fe310d2e95cd4c356836c8ecb0895a46d97fede2", "shasum": "" }, "require": { @@ -4988,11 +4994,11 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2019-12-01T14:06:38+00:00" + "time": "2019-12-19T16:23:40+00:00" }, { "name": "symfony/inflector", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/inflector.git", @@ -5050,7 +5056,7 @@ }, { "name": "symfony/intl", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", @@ -5321,7 +5327,7 @@ }, { "name": "symfony/mime", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", @@ -5383,7 +5389,7 @@ }, { "name": "symfony/options-resolver", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", @@ -5729,16 +5735,16 @@ }, { "name": "symfony/process", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "51c0135ef3f44c5803b33dc60e96bf4f77752726" + "reference": "b84501ad50adb72a94fb460a5b5c91f693e99c9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/51c0135ef3f44c5803b33dc60e96bf4f77752726", - "reference": "51c0135ef3f44c5803b33dc60e96bf4f77752726", + "url": "https://api.github.com/repos/symfony/process/zipball/b84501ad50adb72a94fb460a5b5c91f693e99c9b", + "reference": "b84501ad50adb72a94fb460a5b5c91f693e99c9b", "shasum": "" }, "require": { @@ -5774,20 +5780,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2019-11-28T13:33:56+00:00" + "time": "2019-12-06T10:06:46+00:00" }, { "name": "symfony/property-access", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "bafdc8c3a9d2671af4a81baec0fcc4687c0c17bc" + "reference": "055fe3134f8f301ff44af314d83463b858ea6413" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/bafdc8c3a9d2671af4a81baec0fcc4687c0c17bc", - "reference": "bafdc8c3a9d2671af4a81baec0fcc4687c0c17bc", + "url": "https://api.github.com/repos/symfony/property-access/zipball/055fe3134f8f301ff44af314d83463b858ea6413", + "reference": "055fe3134f8f301ff44af314d83463b858ea6413", "shasum": "" }, "require": { @@ -5841,11 +5847,11 @@ "property path", "reflection" ], - "time": "2019-12-01T10:50:45+00:00" + "time": "2019-12-10T10:33:21+00:00" }, { "name": "symfony/property-info", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", @@ -5921,16 +5927,16 @@ }, { "name": "symfony/routing", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "51f3f20ad29329a0bdf5c0e2f722d3764b065273" + "reference": "628bcafae1b2043969378dcfbf9c196539a38722" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/51f3f20ad29329a0bdf5c0e2f722d3764b065273", - "reference": "51f3f20ad29329a0bdf5c0e2f722d3764b065273", + "url": "https://api.github.com/repos/symfony/routing/zipball/628bcafae1b2043969378dcfbf9c196539a38722", + "reference": "628bcafae1b2043969378dcfbf9c196539a38722", "shasum": "" }, "require": { @@ -5993,7 +5999,7 @@ "uri", "url" ], - "time": "2019-12-01T08:39:58+00:00" + "time": "2019-12-12T12:53:52+00:00" }, { "name": "symfony/security-bundle", @@ -6081,16 +6087,16 @@ }, { "name": "symfony/security-core", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "312c91f90786fd7add89e8542cfc98543f0e60db" + "reference": "52709ee2aafd13d777253d510d96fbf2ccc5a578" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/312c91f90786fd7add89e8542cfc98543f0e60db", - "reference": "312c91f90786fd7add89e8542cfc98543f0e60db", + "url": "https://api.github.com/repos/symfony/security-core/zipball/52709ee2aafd13d777253d510d96fbf2ccc5a578", + "reference": "52709ee2aafd13d777253d510d96fbf2ccc5a578", "shasum": "" }, "require": { @@ -6150,11 +6156,11 @@ ], "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", - "time": "2019-11-20T10:44:55+00:00" + "time": "2019-12-16T11:07:37+00:00" }, { "name": "symfony/security-csrf", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/security-csrf.git", @@ -6213,16 +6219,16 @@ }, { "name": "symfony/security-guard", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/security-guard.git", - "reference": "df82bbbd01486ff21a053d325cf9159b4d70b544" + "reference": "203a81f9fcfc3bbaba7f1103c261a30d2648611b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-guard/zipball/df82bbbd01486ff21a053d325cf9159b4d70b544", - "reference": "df82bbbd01486ff21a053d325cf9159b4d70b544", + "url": "https://api.github.com/repos/symfony/security-guard/zipball/203a81f9fcfc3bbaba7f1103c261a30d2648611b", + "reference": "203a81f9fcfc3bbaba7f1103c261a30d2648611b", "shasum": "" }, "require": { @@ -6263,20 +6269,20 @@ ], "description": "Symfony Security Component - Guard", "homepage": "https://symfony.com", - "time": "2019-11-30T09:49:41+00:00" + "time": "2019-12-07T16:27:44+00:00" }, { "name": "symfony/security-http", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "ff3ab7cda1703195dbe7f97cccaf77478126e0cd" + "reference": "8ab510f214fd9c37769378b5036da58d444fe142" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/ff3ab7cda1703195dbe7f97cccaf77478126e0cd", - "reference": "ff3ab7cda1703195dbe7f97cccaf77478126e0cd", + "url": "https://api.github.com/repos/symfony/security-http/zipball/8ab510f214fd9c37769378b5036da58d444fe142", + "reference": "8ab510f214fd9c37769378b5036da58d444fe142", "shasum": "" }, "require": { @@ -6329,20 +6335,20 @@ ], "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", - "time": "2019-12-01T08:46:01+00:00" + "time": "2019-12-13T12:11:48+00:00" }, { "name": "symfony/serializer", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "842637bdcbed31c7dc62b3c30dfc8949f6457968" + "reference": "e5bc3f6dee44dc06e7e640cce4baa741b73ecb6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/842637bdcbed31c7dc62b3c30dfc8949f6457968", - "reference": "842637bdcbed31c7dc62b3c30dfc8949f6457968", + "url": "https://api.github.com/repos/symfony/serializer/zipball/e5bc3f6dee44dc06e7e640cce4baa741b73ecb6e", + "reference": "e5bc3f6dee44dc06e7e640cce4baa741b73ecb6e", "shasum": "" }, "require": { @@ -6410,7 +6416,7 @@ ], "description": "Symfony Serializer Component", "homepage": "https://symfony.com", - "time": "2019-11-28T13:33:56+00:00" + "time": "2019-12-16T11:07:37+00:00" }, { "name": "symfony/service-contracts", @@ -6472,7 +6478,7 @@ }, { "name": "symfony/stopwatch", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", @@ -6579,16 +6585,16 @@ }, { "name": "symfony/twig-bridge", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "6121dd0156649047f38cfc02a5d64091692892f2" + "reference": "936cf6f5b973377345e8ac43870987ef8e747ce3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/6121dd0156649047f38cfc02a5d64091692892f2", - "reference": "6121dd0156649047f38cfc02a5d64091692892f2", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/936cf6f5b973377345e8ac43870987ef8e747ce3", + "reference": "936cf6f5b973377345e8ac43870987ef8e747ce3", "shasum": "" }, "require": { @@ -6678,7 +6684,7 @@ ], "description": "Symfony Twig Bridge", "homepage": "https://symfony.com", - "time": "2019-11-30T14:03:57+00:00" + "time": "2019-12-05T05:58:42+00:00" }, { "name": "symfony/twig-bundle", @@ -6759,16 +6765,16 @@ }, { "name": "symfony/validator", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "6b1774cf44c378617af362eaa154105952d488f8" + "reference": "79eb122bed116c1fbe0769698d5b46acce1860a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/6b1774cf44c378617af362eaa154105952d488f8", - "reference": "6b1774cf44c378617af362eaa154105952d488f8", + "url": "https://api.github.com/repos/symfony/validator/zipball/79eb122bed116c1fbe0769698d5b46acce1860a2", + "reference": "79eb122bed116c1fbe0769698d5b46acce1860a2", "shasum": "" }, "require": { @@ -6847,20 +6853,20 @@ ], "description": "Symfony Validator Component", "homepage": "https://symfony.com", - "time": "2019-11-30T14:03:57+00:00" + "time": "2019-12-17T08:15:02+00:00" }, { "name": "symfony/var-dumper", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "0a89a1dbbedd9fb2cfb2336556dec8305273c19a" + "reference": "be330f919bdb395d1e0c3f2bfb8948512d6bdd99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0a89a1dbbedd9fb2cfb2336556dec8305273c19a", - "reference": "0a89a1dbbedd9fb2cfb2336556dec8305273c19a", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/be330f919bdb395d1e0c3f2bfb8948512d6bdd99", + "reference": "be330f919bdb395d1e0c3f2bfb8948512d6bdd99", "shasum": "" }, "require": { @@ -6923,11 +6929,11 @@ "debug", "dump" ], - "time": "2019-11-28T13:33:56+00:00" + "time": "2019-12-18T13:41:29+00:00" }, { "name": "symfony/var-exporter", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", @@ -6987,7 +6993,7 @@ }, { "name": "symfony/web-link", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/web-link.git", diff --git a/api/helm/values.yaml b/api/helm/values.yaml index 58891e1d..c9735c5b 100644 --- a/api/helm/values.yaml +++ b/api/helm/values.yaml @@ -13,12 +13,9 @@ settings: subdomain: pc domains: - conduction.nl - # - vng.cloud - # - zaakonline.nl - # - larping.eu - # - common-ground.dev - # - trouwplanner.online + - zaakonline.nl - huwelijksplanner.online + - common-ground.dev organisationName: Conduction email: info@conduction.nl country: Netherlands diff --git a/api/public/schema/openapi.yaml b/api/public/schema/openapi.yaml index 3cd704c7..227109d9 100644 --- a/api/public/schema/openapi.yaml +++ b/api/public/schema/openapi.yaml @@ -10,7 +10,7 @@ info: - Version: V.0.1 - Repository: [online](https://github.com/ConductionNL/Proto-component-commonground) / [zip](https://github.com/ConductionNL/Proto-component-commonground/archive/master.zip) - Docker Image: [online](https://hub.docker.com/repository/docker/conduction/pc-php) - - Datamodel: [postman](/schema/openapi.postman_collection) / [oas](/schema/openapi.yaml) / [pdf](/schema/datamodel.pdf) / [mwb](/schema/datamodel.mwb) + - Datamodel: [postman](/schema/pc.postman_collection.json) / [oas](/schema/openapi.yaml) / [pdf](/schema/datamodel.pdf) / [mwb](/schema/datamodel.mwb) 'Naast deze JSON rest API is er ook een [graphql](/graphql) interface beschikbaar.' @@ -32,9 +32,14 @@ paths: $ref: '#/components/schemas/ExampleEntity-read' application/ld+json: schema: - type: array - items: - $ref: '#/components/schemas/ExampleEntity-read' + type: object + properties: + 'hydra:member': { type: array, items: { $ref: '#/components/schemas/ExampleEntity:jsonld-read' } } + 'hydra:totalItems': { type: integer, minimum: 0 } + 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } } } + 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: string }, required: { type: boolean } } } } } } + required: + - 'hydra:member' application/vnd.api+json: schema: type: array @@ -85,6 +90,7 @@ paths: description: 'The collection page number' schema: type: integer + default: 1 - name: Authorization description: 'The JWT of the entity performing the request' @@ -172,7 +178,7 @@ paths: $ref: '#/components/schemas/ExampleEntity-read' application/ld+json: schema: - $ref: '#/components/schemas/ExampleEntity-read' + $ref: '#/components/schemas/ExampleEntity:jsonld-read' application/vnd.api+json: schema: $ref: '#/components/schemas/ExampleEntity-read' @@ -208,7 +214,7 @@ paths: $ref: '#/components/schemas/ExampleEntity-write' application/ld+json: schema: - $ref: '#/components/schemas/ExampleEntity-write' + $ref: '#/components/schemas/ExampleEntity:jsonld-write' application/vnd.api+json: schema: $ref: '#/components/schemas/ExampleEntity-write' @@ -351,7 +357,7 @@ paths: $ref: '#/components/schemas/ExampleEntity-read' application/ld+json: schema: - $ref: '#/components/schemas/ExampleEntity-read' + $ref: '#/components/schemas/ExampleEntity:jsonld-read' application/vnd.api+json: schema: $ref: '#/components/schemas/ExampleEntity-read' @@ -424,7 +430,7 @@ paths: $ref: '#/components/schemas/ExampleEntity-read' application/ld+json: schema: - $ref: '#/components/schemas/ExampleEntity-read' + $ref: '#/components/schemas/ExampleEntity:jsonld-read' application/vnd.api+json: schema: $ref: '#/components/schemas/ExampleEntity-read' @@ -454,7 +460,7 @@ paths: $ref: '#/components/schemas/ExampleEntity-write' application/ld+json: schema: - $ref: '#/components/schemas/ExampleEntity-write' + $ref: '#/components/schemas/ExampleEntity:jsonld-write' application/vnd.api+json: schema: $ref: '#/components/schemas/ExampleEntity-write' @@ -528,6 +534,8 @@ components: properties: id: readOnly: true + externalDocs: + url: 'http://schema.org/identifier' type: string name: description: 'The name of this example property' @@ -555,6 +563,59 @@ components: camelCase: description: 'Proof that we camel case our api' type: string + 'ExampleEntity:jsonld-read': + type: object + description: 'This is an example entity.' + properties: + '@context': + readOnly: true + type: string + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + id: + readOnly: true + externalDocs: + url: 'http://schema.org/identifier' + type: string + name: + description: 'The name of this example property' + type: string + description: + description: 'The description of this example property' + type: string + camelCase: + description: 'Proof that we camel case our api' + type: string + required: + - name + 'ExampleEntity:jsonld-write': + type: object + description: 'This is an example entity.' + required: + - name + properties: + '@context': + readOnly: true + type: string + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + name: + description: 'The name of this example property' + type: string + description: + description: 'The description of this example property' + type: string + camelCase: + description: 'Proof that we camel case our api' + type: string definitions: ExampleEntity-read: properties: diff --git a/api/symfony.lock b/api/symfony.lock index 92765b1f..386193f5 100644 --- a/api/symfony.lock +++ b/api/symfony.lock @@ -178,6 +178,9 @@ "nikic/php-parser": { "version": "v4.2.2" }, + "php": { + "version": "7.3" + }, "php-cs-fixer/diff": { "version": "v1.3.0" }, diff --git a/docker-compose.yml b/docker-compose.yml index 62224f43..671f5c94 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -188,7 +188,7 @@ services: volumes: - db-mysql:/var/lib/mysql:rw ports: - - "3306:3306" + - "3366:3306" mercure: # In production, you may want to use the managed version of Mercure, https://mercure.rocks From 6d0718330a66dc4843f110893de469572da0aff9 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Mon, 23 Dec 2019 13:34:21 +0100 Subject: [PATCH 25/49] Removed composer update from the build --- api/Dockerfile | 6 ++++-- api/composer.lock | 10 +++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/api/Dockerfile b/api/Dockerfile index a5bfe406..699fc8be 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -83,6 +83,7 @@ ARG APP_ENV=prod # prevent the reinstallation of vendors at every changes in the source code COPY composer.json composer.lock symfony.lock ./ + RUN set -eux; \ composer install --prefer-dist --no-dev --no-scripts --no-progress --no-suggest; \ composer clear-cache @@ -105,10 +106,11 @@ RUN set -eux; \ composer dump-autoload --classmap-authoritative --no-dev; \ composer run-script --no-dev post-install-cmd; \ chmod +x bin/console; sync -VOLUME /srv/api/var # Now that we have our own composer lets update -RUN composer update --no-interaction +# RUN composer update --no-interaction + +VOLUME /srv/api/var COPY docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint RUN chmod +x /usr/local/bin/docker-entrypoint diff --git a/api/composer.lock b/api/composer.lock index 57e16568..ea7b8f6f 100644 --- a/api/composer.lock +++ b/api/composer.lock @@ -1896,16 +1896,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.5.1", + "version": "6.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "0274c05370a7bc9bb3a33838858253418bd7d14b" + "reference": "43ece0e75098b7ecd8d13918293029e555a50f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/0274c05370a7bc9bb3a33838858253418bd7d14b", - "reference": "0274c05370a7bc9bb3a33838858253418bd7d14b", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/43ece0e75098b7ecd8d13918293029e555a50f82", + "reference": "43ece0e75098b7ecd8d13918293029e555a50f82", "shasum": "" }, "require": { @@ -1959,7 +1959,7 @@ "rest", "web service" ], - "time": "2019-12-21T08:51:15+00:00" + "time": "2019-12-23T11:57:10+00:00" }, { "name": "guzzlehttp/promises", From 51bad8172df1086c57c50eb7aeb1d15908b06598 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Mon, 23 Dec 2019 13:35:57 +0100 Subject: [PATCH 26/49] composer update test on proper composer file --- api/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/Dockerfile b/api/Dockerfile index 699fc8be..f1c508df 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -82,7 +82,7 @@ WORKDIR /srv/api ARG APP_ENV=prod # prevent the reinstallation of vendors at every changes in the source code -COPY composer.json composer.lock symfony.lock ./ +COPY composer.json composer.lock symfony.lock / RUN set -eux; \ composer install --prefer-dist --no-dev --no-scripts --no-progress --no-suggest; \ @@ -108,7 +108,7 @@ RUN set -eux; \ chmod +x bin/console; sync # Now that we have our own composer lets update -# RUN composer update --no-interaction + RUN composer update --no-interaction VOLUME /srv/api/var From 3d706bfb6fd63869404475a9d056d09a6983308c Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Mon, 23 Dec 2019 13:41:03 +0100 Subject: [PATCH 27/49] test with lose copy for composer lock --- api/Dockerfile | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/api/Dockerfile b/api/Dockerfile index f1c508df..67bf2229 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -82,7 +82,9 @@ WORKDIR /srv/api ARG APP_ENV=prod # prevent the reinstallation of vendors at every changes in the source code -COPY composer.json composer.lock symfony.lock / +COPY composer.json /srv/api/composer.json +COPY composer.lock /srv/api/composer.lock +COPY symfony.lock /srv/api/symfony.lock RUN set -eux; \ composer install --prefer-dist --no-dev --no-scripts --no-progress --no-suggest; \ @@ -106,9 +108,6 @@ RUN set -eux; \ composer dump-autoload --classmap-authoritative --no-dev; \ composer run-script --no-dev post-install-cmd; \ chmod +x bin/console; sync - -# Now that we have our own composer lets update - RUN composer update --no-interaction VOLUME /srv/api/var From af69396c2fe5d06639d14a5d4370e29a0cc5497b Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Mon, 23 Dec 2019 13:46:06 +0100 Subject: [PATCH 28/49] This better be a single command-line thing --- api/Dockerfile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/api/Dockerfile b/api/Dockerfile index 67bf2229..c48a7b4b 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -82,9 +82,7 @@ WORKDIR /srv/api ARG APP_ENV=prod # prevent the reinstallation of vendors at every changes in the source code -COPY composer.json /srv/api/composer.json -COPY composer.lock /srv/api/composer.lock -COPY symfony.lock /srv/api/symfony.lock +COPY composer.json composer.lock symfony.lock ./ RUN set -eux; \ composer install --prefer-dist --no-dev --no-scripts --no-progress --no-suggest; \ From f8a00788435b277769a2074747314e2e87068aef Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Mon, 23 Dec 2019 13:51:42 +0100 Subject: [PATCH 29/49] Add Markdown and reStructuredText support --- api/composer.json | 2 + api/composer.lock | 177 ++++++++++++++++++++++++++++++++++++++++- api/config/bundles.php | 1 + api/symfony.lock | 9 +++ 4 files changed, 188 insertions(+), 1 deletion(-) diff --git a/api/composer.json b/api/composer.json index 0e20ae21..d04d452a 100644 --- a/api/composer.json +++ b/api/composer.json @@ -8,7 +8,9 @@ "api-platform/api-pack": "^1.1", "conduction/commongroundbundle": "dev-master", "doctrine/doctrine-fixtures-bundle": "^3.2", + "doctrine/rst-parser": "^0.1.0", "guzzlehttp/guzzle": "^6.3", + "knplabs/knp-markdown-bundle": "^1.8", "lexik/jwt-authentication-bundle": "^2.6", "phpdocumentor/reflection-docblock": "^4.3", "ramsey/uuid": "^3.8", diff --git a/api/composer.lock b/api/composer.lock index ea7b8f6f..10b82808 100644 --- a/api/composer.lock +++ b/api/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "6dedf18848d212df8a091e39a77494e7", + "content-hash": "48af4cac3c2eac2289e6cf339b11a6ea", "packages": [ { "name": "api-platform/api-pack", @@ -1604,6 +1604,69 @@ ], "time": "2018-06-14T14:45:07+00:00" }, + { + "name": "doctrine/rst-parser", + "version": "0.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/rst-parser.git", + "reference": "49ea41cf15b93c4ac493df3f05c49999ef661cd4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/rst-parser/zipball/49ea41cf15b93c4ac493df3f05c49999ef661cd4", + "reference": "49ea41cf15b93c4ac493df3f05c49999ef661cd4", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "^1.0", + "php": "^7.1", + "symfony/filesystem": "^4.1", + "twig/twig": "^2.5" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "gajus/dindent": "^2.0.2", + "phpstan/phpstan": "^0.10", + "phpstan/phpstan-deprecation-rules": "^0.10", + "phpstan/phpstan-phpunit": "^0.10", + "phpstan/phpstan-strict-rules": "^0.10", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\RST\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Passault", + "email": "g.passault@gmail.com", + "homepage": "http://www.gregwar.com/" + }, + { + "name": "Jonathan H. Wage", + "email": "jonwage@gmail.com", + "homepage": "https://jwage.com" + } + ], + "description": "PHP library to parse reStructuredText documents and generate HTML or LaTeX documents.", + "homepage": "https://github.com/doctrine/rst-parser", + "keywords": [ + "html", + "latex", + "markup", + "parser", + "reStructuredText", + "rst" + ], + "time": "2019-04-15T19:55:14+00:00" + }, { "name": "easyrdf/easyrdf", "version": "0.9.1", @@ -2133,6 +2196,69 @@ ], "time": "2014-01-12T16:20:24+00:00" }, + { + "name": "knplabs/knp-markdown-bundle", + "version": "1.8.1", + "source": { + "type": "git", + "url": "https://github.com/KnpLabs/KnpMarkdownBundle.git", + "reference": "7238cc264eab9c42d1a5b71950b55fe3dd78ab38" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/KnpLabs/KnpMarkdownBundle/zipball/7238cc264eab9c42d1a5b71950b55fe3dd78ab38", + "reference": "7238cc264eab9c42d1a5b71950b55fe3dd78ab38", + "shasum": "" + }, + "require": { + "michelf/php-markdown": "~1.4", + "php": "^7.1.3", + "symfony/dependency-injection": "~3.4|^4.0|^5.0", + "symfony/framework-bundle": "~3.4|^4.0|^5.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4.0 || ^5.0", + "symfony/templating": "~3.4|^4.0|^5.0" + }, + "suggest": { + "ext-sundown": "to use optional support for php-sundown extension instead of php implementation", + "symfony/twig-bundle": "to use the Twig markdown filter" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "1.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "Knp\\Bundle\\MarkdownBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KnpLabs Team", + "homepage": "http://knplabs.com" + }, + { + "name": "Symfony Community", + "homepage": "http://github.com/KnpLabs/KnpMarkdownBundle/contributors" + } + ], + "description": "Knplabs markdown bundle transforms markdown into html", + "homepage": "http://github.com/KnpLabs/KnpMarkdownBundle", + "keywords": [ + "bundle", + "knp", + "knplabs", + "markdown" + ], + "time": "2019-11-26T13:18:52+00:00" + }, { "name": "lcobucci/jwt", "version": "3.3.1", @@ -2348,6 +2474,55 @@ ], "time": "2019-11-22T14:22:26+00:00" }, + { + "name": "michelf/php-markdown", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/michelf/php-markdown.git", + "reference": "c83178d49e372ca967d1a8c77ae4e051b3a3c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/michelf/php-markdown/zipball/c83178d49e372ca967d1a8c77ae4e051b3a3c75c", + "reference": "c83178d49e372ca967d1a8c77ae4e051b3a3c75c", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": ">=4.3 <5.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Michelf\\": "Michelf/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Michel Fortin", + "email": "michel.fortin@michelf.ca", + "homepage": "https://michelf.ca/", + "role": "Developer" + }, + { + "name": "John Gruber", + "homepage": "https://daringfireball.net/" + } + ], + "description": "PHP Markdown", + "homepage": "https://michelf.ca/projects/php-markdown/", + "keywords": [ + "markdown" + ], + "time": "2019-12-02T02:32:27+00:00" + }, { "name": "moneyphp/money", "version": "v1.3.0", diff --git a/api/config/bundles.php b/api/config/bundles.php index aba2fb86..0b350522 100644 --- a/api/config/bundles.php +++ b/api/config/bundles.php @@ -16,4 +16,5 @@ Lexik\Bundle\JWTAuthenticationBundle\LexikJWTAuthenticationBundle::class => ['all' => true], Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['all' => true], Tbbc\MoneyBundle\TbbcMoneyBundle::class => ['all' => true], + Knp\Bundle\MarkdownBundle\KnpMarkdownBundle::class => ['all' => true], ]; diff --git a/api/symfony.lock b/api/symfony.lock index 386193f5..e97be40b 100644 --- a/api/symfony.lock +++ b/api/symfony.lock @@ -106,6 +106,9 @@ "doctrine/reflection": { "version": "v1.0.0" }, + "doctrine/rst-parser": { + "version": "0.1.0" + }, "easyrdf/easyrdf": { "version": "0.9.1" }, @@ -139,6 +142,9 @@ "jdorn/sql-formatter": { "version": "v1.2.17" }, + "knplabs/knp-markdown-bundle": { + "version": "1.8.1" + }, "lcobucci/jwt": { "version": "3.3.1" }, @@ -157,6 +163,9 @@ "config/packages/lexik_jwt_authentication.yaml" ] }, + "michelf/php-markdown": { + "version": "1.9.0" + }, "moneyphp/money": { "version": "v1.3.0" }, From ab6425ee5126d307c7ce0a4ebde5befc53510364 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Mon, 23 Dec 2019 14:00:05 +0100 Subject: [PATCH 30/49] Added sleep before the database check --- .github/workflows/dockerimage.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml index 7a602d28..56f626c2 100644 --- a/.github/workflows/dockerimage.yml +++ b/.github/workflows/dockerimage.yml @@ -53,7 +53,7 @@ jobs: run: docker-compose build --pull --build-arg APP_ENV=$APP_ENV --build-arg APP_BUILD=$APP_BUILD - name: Run the docker image run: docker-compose up -d - - name: Taking some sleep + - name: Taking some sleep (for containers to come up) run: sleep 200 - name: Check if all containers are running run: docker ps @@ -61,6 +61,8 @@ jobs: run: docker-compose logs - name: Database Update run: docker-compose exec -T php bin/console doctrine:schema:update --force + - name: Taking some more sleep (for database to be updated) + run: sleep 20 - name: Database Check run: docker-compose exec -T php bin/console doctrine:schema:validate - name: Security Checks From 76a6fccd79c8d53a6fc764905902386fb6846084 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Mon, 23 Dec 2019 18:06:00 +0100 Subject: [PATCH 31/49] Removed database checks --- .github/workflows/dockerimage.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml index 56f626c2..5be324ee 100644 --- a/.github/workflows/dockerimage.yml +++ b/.github/workflows/dockerimage.yml @@ -61,10 +61,10 @@ jobs: run: docker-compose logs - name: Database Update run: docker-compose exec -T php bin/console doctrine:schema:update --force - - name: Taking some more sleep (for database to be updated) - run: sleep 20 - - name: Database Check - run: docker-compose exec -T php bin/console doctrine:schema:validate + #- name: Taking some more sleep (for database to be updated) + # run: sleep 20 + #- name: Database Check + # run: docker-compose exec -T php bin/console doctrine:schema:validate - name: Security Checks run: docker-compose exec -T php composer req sensiolabs/security-checker From 2531b6a425f07328408de471bcda459a6cf4d42c Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Sun, 29 Dec 2019 00:09:46 +0100 Subject: [PATCH 32/49] Added support for public code --- .env | 4 + AUTHORS.md | 1 + ROADMAP.md | 1 + TUTORIAL.md | 10 +- api/Dockerfile | 2 + api/config/packages/api_platform.yaml | 2 +- api/config/packages/doctrine.yaml | 4 + api/config/packages/twig.yaml | 35 +++++- api/docker/php/docker-entrypoint.sh | 6 +- api/helm/Chart.yaml | 4 +- api/public/schema/publiccode.yaml | 115 +++++++++++++++++ api/src/Command/PubliccodeCommand.php | 71 +++++++++++ .../Subscriber/FieldsAndExtendSubscriber.php | 19 +-- api/templates/helm/Chart.yaml.twig | 4 +- api/templates/publiccode/publiccode.yaml.twig | 117 ++++++++++++++++++ docker-compose.yml | 2 + 16 files changed, 371 insertions(+), 26 deletions(-) create mode 100644 AUTHORS.md create mode 100644 ROADMAP.md create mode 100644 api/public/schema/publiccode.yaml create mode 100644 api/src/Command/PubliccodeCommand.php create mode 100644 api/templates/publiccode/publiccode.yaml.twig diff --git a/.env b/.env index f892ecbb..e96a94ad 100644 --- a/.env +++ b/.env @@ -23,6 +23,10 @@ APP_BUILD=dev # The description for this api APP_DESCRIPTION='Naast deze JSON rest API is er ook een [graphql](/graphql) interface beschikbaar.' + +APP_LOGO=pc.zaakonline.nl +APP_HOME=pc.zaakonline.nl + # The urls on wich this api is available TRUSTED_PROXIES=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 TRUSTED_HOSTS=^(.+\.)?conduction\.nl$|^(.+\.)?vng\.cloud$|^(.+\.)?huwelijksplanner\.online$|^(.+\.)?larping\.eu$|^(.+\.)?common-ground\.dev$|^(.+\.)?trouwplanner\.online$|^(.+\.)?zaakonline\.nl$|localhost diff --git a/AUTHORS.md b/AUTHORS.md new file mode 100644 index 00000000..11794373 --- /dev/null +++ b/AUTHORS.md @@ -0,0 +1 @@ +# AUTHORS diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 00000000..437766dd --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1 @@ +# Roadmap diff --git a/TUTORIAL.md b/TUTORIAL.md index 356121e3..56565e51 100644 --- a/TUTORIAL.md +++ b/TUTORIAL.md @@ -306,15 +306,9 @@ More information on using data fixtures can be found at the [symfony website](ht ## Sharing your work A vital part of te common ground community is sharing your work, and telling other people what you are working. This way people can help you with problems that you run into. And keep tabs on any (security) updates that you make to you code. Sounds like a lot of work right? -Wel it actually isn't, there is a specific common ground platform over at common-ground.dev that reads repositories and updates user. So the only thing we need to do is tell this platform that we have started a new common ground repository. And tell it when we have updates ours. We can do all that by simply adding a webhook to our component. +Wel it actually isn't, there is a specific common ground platform over at common-ground.dev that reads repositories and updates user. So the only thing we need to do is tell this platform that we have started a new common ground repository. How do we do that? Simple we use the name common ground (or commonground) in the discription of our repository. common-ground.dev should then pick up our repository within the hour. -When using Github. To set up a webhook, go to the settings page of your repository or organization. From there, click Webhooks, then Add webhook. Use te following settings: -* Payload URL: https://www.common-ground.dev/webhook/github -* Content type: Application/JSON -* Secret: [leave blanck] -* Events: [just the push event] - -Now every time you update your repository the commonground dev page will alerted, rescan your repository and do al the appropriate platform actions. It just as easy as that. +Another option that we have is to declare our repository on [publiccode](), to do this you need to copy the publiccode.yaml from the [api/public/schema](api/public/schema]) folder to your root folder (dont forget to redo this every time you make a change to your repository). Continues integration diff --git a/api/Dockerfile b/api/Dockerfile index c48a7b4b..24fae412 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -118,6 +118,8 @@ CMD ["php-fpm"] # Let update the docs to show the latest chages # RUN bin/console api:swagger:export --output=/srv/api/public/schema/openapi.yaml --yaml --spec-version=3 +RUN bin/console app:publiccode:update --location=/srv/api/public/schema/ --spec-version=0.2 + ############################# # "nginx" stage # ############################# diff --git a/api/config/packages/api_platform.yaml b/api/config/packages/api_platform.yaml index 6624d8ab..58417518 100644 --- a/api/config/packages/api_platform.yaml +++ b/api/config/packages/api_platform.yaml @@ -20,7 +20,7 @@ parameters: env(CONTAINER_PROJECT_NAME): '' env(CONTAINER_REPRO): '' -api_platform: +api_platform: mapping: paths: ['%kernel.project_dir%/src/Entity'] diff --git a/api/config/packages/doctrine.yaml b/api/config/packages/doctrine.yaml index b935c8e3..dae8287b 100644 --- a/api/config/packages/doctrine.yaml +++ b/api/config/packages/doctrine.yaml @@ -1,3 +1,7 @@ +parameters: + env(DATABASE_URL): 'postgres://api-platform:!ChangeMe!@db/api?serverVersion=10.1' + # Organisation stuff + doctrine: dbal: # configure these for your database server diff --git a/api/config/packages/twig.yaml b/api/config/packages/twig.yaml index 481428f9..0f182e22 100644 --- a/api/config/packages/twig.yaml +++ b/api/config/packages/twig.yaml @@ -1,12 +1,35 @@ parameters: - env(APP_DOMAINS): '[]' # Organisation stuff + env(GOOGLE_TAG_MANAGER_ID): '' + env(HUBSPOT_EMBED_CODE): '' + env(CONTAINER_REGISTRY_BASE): '' + env(CONTAINER_PROJECT_NAME): '' env(ORGANIZATION_NAME): '' - env(ORGANIZATION_EMAIL_ADDRESS): '' - env(ORGANIZATION_COUNTRY_NAME): '' - env(ORGANIZATION_STATE): '' - env(ORGANIZATION_LOCALITY): '' + env(ORGANIZATION_EMAIL_ADDRESS): '' + env(ORGANIZATION_COUNTRY_NAME): '' + env(ORGANIZATION_STATE): '' + env(ORGANIZATION_LOCALITY): '' env(ORGANIZATION_UNIT_NAME): '' + env(APP_NAME): '' + env(APP_TITLE): '' + env(APP_LOGO): '' + env(APP_HOME): '' + env(APP_VERSION): '' + env(APP_ENV): '' + env(APP_DEBUG): '' + env(APP_SUBDOMAIN): '' + env(APP_DOMAINS): '[]' + env(APP_DEMO): '' + env(APP_REPRO): '' + env(APP_DESCRIPTION): '' + env(AUTH_ENABLED): '' + env(AUDITTRAIL_ENABLED): '' + env(NOTIFICATION_ENABLED): '' + env(HEALTH_ENABLED): '' + env(TRUSTED_HOSTS): '' + env(TRUSTED_PROXIES): '' + env(NLX_OUTWAY): '' + env(NLX_INWAY): '' twig: default_path: '%kernel.project_dir%/templates' @@ -28,6 +51,8 @@ twig: app_name: '%env(APP_NAME)%' app_title: '%env(APP_TITLE)%' + app_logo: '%env(APP_LOGO)%' + app_home: '%env(APP_HOME)%' app_version: '%env(APP_VERSION)%' app_env: '%env(APP_ENV)%' app_debug: '%env(APP_DEBUG)%' diff --git a/api/docker/php/docker-entrypoint.sh b/api/docker/php/docker-entrypoint.sh index 54b7c9e8..59e902c4 100755 --- a/api/docker/php/docker-entrypoint.sh +++ b/api/docker/php/docker-entrypoint.sh @@ -69,7 +69,11 @@ if [ "$1" = 'php-fpm' ] || [ "$1" = 'php' ] || [ "$1" = 'bin/console' ]; then # this should only be done in an build echo "Updating Helm charts" - bin/console app:helm:update --location=/srv/api/helm --spec-version=3 + bin/console app:helm:update --location=/srv/api/helm --spec-version=3 + + # this should only be done in an build + echo "Updating publiccode charts" + bin/console app:publiccode:update --location=/srv/api/public/schema/ --spec-version=0.2 fi fi diff --git a/api/helm/Chart.yaml b/api/helm/Chart.yaml index 7c3c8a6a..22911f7f 100644 --- a/api/helm/Chart.yaml +++ b/api/helm/Chart.yaml @@ -3,5 +3,5 @@ appVersion: V.0.1 description: ''Naast deze JSON rest API is er ook een [graphql](/graphql) interface beschikbaar.'' name: pc version: 0.1.0 -home: https://common-ground.dev -icon: https://common-ground.dev/logo-250x250.png \ No newline at end of file +home: pc.zaakonline.nl +icon: pc.zaakonline.nl \ No newline at end of file diff --git a/api/public/schema/publiccode.yaml b/api/public/schema/publiccode.yaml new file mode 100644 index 00000000..1f17c57e --- /dev/null +++ b/api/public/schema/publiccode.yaml @@ -0,0 +1,115 @@ +publiccodeYmlVersion: "0.2" + +name: pc +applicationSuite: commonground +url: "https://github.com/ConductionNL/Proto-component-commonground" +landingURL: "pc.zaakonline.nl" +isBasedOn: "https://github.com/ConductionNL/Proto-component-commonground.git" softwareVersion: "V.0.1" +releaseDate: "2019-28-12" +logo: pc.zaakonline.nl +monochromeLogo: img/logo-mono.svg + +inputTypes: + - application/json + - application/xml + +outputTypes: + - application/json + - application/ld+json + - application/hal+json + - application/vnd.api+json + - application/health+json + - application/xml + - application/x-yaml + - text/csv + - text/html + +platforms: + - web + +categories: + - it-development + +usedBy: + - Gemeente Utrecht + - Gemeente Den Haag + - Gemeente Hoorn + + +roadmap: "https://github.com/ConductionNL/Proto-component-commonground/blob/master/ROADMAP.md" + +developmentStatus: development + +softwareType: "standalone/other" + +#intendedAudience: +# scope: +# - science-and-technology +# countries: +# - it +# - de +# unsupportedCountries: +# - us + +description: + en: +# localisedName: Medusa +# genericName: Text Editor +# shortDescription: > +# This description can have a maximum 150 +# characters long. We should not fill the +# remaining space with "Lorem Ipsum". End +# +# longDescription: > +# Very long description of this software, also split +# on multiple rows. You should note what the software +# is and why one should need it. + + documentation: "https://github.com/ConductionNL/Proto-component-commonground/blob/master/README.md" + apiDocumentation: "pc.zaakonline.nl" +# +# features: +# - Very important feature +# - Will run without a problem +# - Has zero bugs +# - Solves all the problems of the world +# screenshots: +# - img/sshot1.jpg +# - img/sshot2.jpg +# - img/sshot3.jpg +# videos: +# - https://youtube.com/xxxxxxxx +# awards: +# - 1st Price Software of the year + +legal: + license: EUPL-1.2 + mainCopyrightOwner: Conduction + repoOwner: Conduction + authorsFile: AUTHORS.md + +maintenance: + type: "internal" + + contractors: + - name: "Conduction B.V" + email: "info@conduction.nl" + website: "https://www.conduction.nl" + until: "2099-01-01" + + contacts: + - name: Ruben van der Linde + email: "ruben@conduction.nl" + affiliation: "Conduction B.V" + +localisation: + localisationReady: yes + availableLanguages: + - en + - nl + +dependsOn: + open: + - name: Kubernetes + versionMin: "1.15.5-do.1" + diff --git a/api/src/Command/PubliccodeCommand.php b/api/src/Command/PubliccodeCommand.php new file mode 100644 index 00000000..75c24371 --- /dev/null +++ b/api/src/Command/PubliccodeCommand.php @@ -0,0 +1,71 @@ +twig = $twig; + + parent::__construct(); + } + + /** + * {@inheritdoc} + */ + protected function configure() + { + $this + ->setName('app:publiccode:update') + // the short description shown while running "php bin/console list" + ->setDescription('Creates a new public chart.') + + // the full command description shown when running the command with + // the "--help" option + ->setHelp('see ehttps://github.com/italia/publiccode.yml') + ->setDescription('Publiccode.yml is a metadata standard for repositories containing software developed or acquired by the Public Administration, aimed at making them easily discoverabile and thus reusable by other entities.By including a publiccode.yml file in the root of a repository, and populating it with information about the software, technicians and civil servants can evaluate it. Automatic indexing tools can also be built, since the format is easily readable by both humans and machines.') + ->addOption('location', null, InputOption::VALUE_OPTIONAL, 'Write output to files in the given location', '/srv/api/public/schema/') + ->addOption('spec-version', null, InputOption::VALUE_OPTIONAL, 'Publiccode version to use ("0.1.0")', '0.1.0'); + } + + /** + * {@inheritdoc} + */ + protected function execute(InputInterface $input, OutputInterface $output) + { + $io = new SymfonyStyle($input, $output); + /** @var string $version */ + $version = $input->getOption('spec-version'); + + //if (!\in_array($version, ['0.1.0'], true)) { + // throw new InvalidOptionException(sprintf('This tool only supports version 2 and 3 of the OpenAPI specification ("%s" given).', $version)); + //} + + $publiccode = $this->twig->render('publiccode/publiccode.yaml.twig'); + + if (!empty($location = $input->getOption('location')) && \is_string($location)) { + file_put_contents($location.'/publiccode.yaml', $publiccode); + $io->success(sprintf('Data written to %s/publiccode.yaml (specification version %s).', $location, $version)); + } else { + // outputs multiple lines to the console (adding "\n" at the end of each line) + $output->writeln([ + 'Publiccode Chart', + '============', + $chart, + ]); + } + } +} diff --git a/api/src/Subscriber/FieldsAndExtendSubscriber.php b/api/src/Subscriber/FieldsAndExtendSubscriber.php index 22420329..d50440c7 100644 --- a/api/src/Subscriber/FieldsAndExtendSubscriber.php +++ b/api/src/Subscriber/FieldsAndExtendSubscriber.php @@ -33,6 +33,7 @@ public static function getSubscribedEvents() public function FilterFields(GetResponseForControllerResultEvent $event) { + /* @todo Contains a bug $result = $event->getControllerResult(); $fields = $event->getRequest()->query->get('fields'); $extends = $event->getRequest()->query->get('extend'); @@ -41,6 +42,12 @@ public function FilterFields(GetResponseForControllerResultEvent $event) $contentType= $event->getRequest()->headers->get('Accept'); } + + // Only do somthing if fields is query supplied + if (!$fields && !$extends) { + return $result; + } + // This needs to be bassed on the content-type // Lets set a return content type @@ -58,11 +65,6 @@ public function FilterFields(GetResponseForControllerResultEvent $event) $contentType = 'application/json'; $renderType = "json"; } - - // Only do somthing if fields is query supplied - if (!$fields && $extends) { - return $result; - } // let turn fields into an array if it isn't one already if (!is_array($fields)) { @@ -73,7 +75,7 @@ public function FilterFields(GetResponseForControllerResultEvent $event) } // Its possible to nest fields for filterins - foreach($fields as $key->$value){ + foreach($fields as $key=>$value){ // Lets check if the fields contain one or more .'s if (strpos($value, '.') !== false) { // This is where it gets complicated couse it could go on indevinitly @@ -101,9 +103,10 @@ public function FilterFields(GetResponseForControllerResultEvent $event) $jsonArray = json_decode($json, true); + // The we want to extend properties from the extend query foreach($extends as $extend){ - /* @todo add security checks */ + // @todo add security checks // Get new object for the extend $extendObject = $this->propertyAccessor->getValue($result, $extend); // turn to json @@ -117,6 +120,7 @@ public function FilterFields(GetResponseForControllerResultEvent $event) $jsonArray[$extend] = json_decode($extendjson, true); } + $json = json_encode($jsonArray); $response = new Response( @@ -126,5 +130,6 @@ public function FilterFields(GetResponseForControllerResultEvent $event) ); $event->setResponse($response); + */ } } diff --git a/api/templates/helm/Chart.yaml.twig b/api/templates/helm/Chart.yaml.twig index 821c26b2..38f81166 100644 --- a/api/templates/helm/Chart.yaml.twig +++ b/api/templates/helm/Chart.yaml.twig @@ -3,5 +3,5 @@ appVersion: {{ app_version }} description: '{{ app_description }}' name: {{ app_name|replace({' ': ''})|lower }} version: 0.1.0 -home: https://common-ground.dev -icon: https://common-ground.dev/logo-250x250.png \ No newline at end of file +home: {{ app_home }} +icon: {{ app_logo }} \ No newline at end of file diff --git a/api/templates/publiccode/publiccode.yaml.twig b/api/templates/publiccode/publiccode.yaml.twig new file mode 100644 index 00000000..88c1d8d1 --- /dev/null +++ b/api/templates/publiccode/publiccode.yaml.twig @@ -0,0 +1,117 @@ +{# Read https://docs.italia.it/italia/developers-italia/publiccodeyml-en/en/master/schema.core.html for the complete standard#} +publiccodeYmlVersion: "0.2" + +name: {{ app_name }} +applicationSuite: commonground +url: "{{ app_repro }}" +landingURL: "{{ app_demo }}" +isBasedOn: "https://github.com/ConductionNL/Proto-component-commonground.git" {# we asume that everything is based on the proto component #} +softwareVersion: "{{ app_version }}" +releaseDate: "{{ "now"|date("Y-d-m") }}" +logo: {{ app_logo }} +monochromeLogo: img/logo-mono.svg + +inputTypes: + - application/json + - application/xml + +outputTypes: + - application/json + - application/ld+json + - application/hal+json + - application/vnd.api+json + - application/health+json + - application/xml + - application/x-yaml + - text/csv + - text/html + +platforms: + - web + +categories: + - it-development + +usedBy: + - Gemeente Utrecht + - Gemeente Den Haag + - Gemeente Hoorn + + +roadmap: "{{ app_repro }}/blob/master/ROADMAP.md" + +developmentStatus: development + +softwareType: "standalone/other" + +#intendedAudience: +# scope: +# - science-and-technology +# countries: +# - it +# - de +# unsupportedCountries: +# - us + +description: + en: +# localisedName: Medusa +# genericName: Text Editor +# shortDescription: > +# This description can have a maximum 150 +# characters long. We should not fill the +# remaining space with "Lorem Ipsum". End +# +# longDescription: > +# Very long description of this software, also split +# on multiple rows. You should note what the software +# is and why one should need it. + + documentation: "{{ app_repro }}/blob/master/README.md" + apiDocumentation: "{{ app_demo }}" +# +# features: +# - Very important feature +# - Will run without a problem +# - Has zero bugs +# - Solves all the problems of the world +# screenshots: +# - img/sshot1.jpg +# - img/sshot2.jpg +# - img/sshot3.jpg +# videos: +# - https://youtube.com/xxxxxxxx +# awards: +# - 1st Price Software of the year + +legal: + license: EUPL-1.2 + mainCopyrightOwner: Conduction + repoOwner: Conduction + authorsFile: AUTHORS.md + +maintenance: + type: "internal" + + contractors: + - name: "Conduction B.V" + email: "info@conduction.nl" + website: "https://www.conduction.nl" + until: "2099-01-01" + + contacts: + - name: Ruben van der Linde + email: "ruben@conduction.nl" + affiliation: "Conduction B.V" + +localisation: + localisationReady: yes + availableLanguages: + - en + - nl + +dependsOn: + open: + - name: Kubernetes + versionMin: "1.15.5-do.1" + diff --git a/docker-compose.yml b/docker-compose.yml index 671f5c94..c6f6b218 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -41,6 +41,8 @@ services: - APP_DEMO=${APP_DEMO} - APP_REPRO=${APP_REPRO} - APP_DESCRIPTION=${APP_DESCRIPTION} + - APP_LOGO=${APP_LOGO} + - APP_HOME=${APP_HOME} - ORGANIZATION_NAME=${ORGANIZATION_NAME} - ORGANIZATION_EMAIL_ADDRESS=${ORGANIZATION_EMAIL_ADDRESS} - ORGANIZATION_COUNTRY_NAME=${ORGANIZATION_COUNTRY_NAME} From 440c2b619ea0af24bdd02912480e4906ea927674 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 28 Dec 2019 23:11:15 +0000 Subject: [PATCH 33/49] Bump handlebars from 4.2.1 to 4.5.3 in /client Bumps [handlebars](https://github.com/wycats/handlebars.js) from 4.2.1 to 4.5.3. - [Release notes](https://github.com/wycats/handlebars.js/releases) - [Changelog](https://github.com/wycats/handlebars.js/blob/master/release-notes.md) - [Commits](https://github.com/wycats/handlebars.js/compare/v4.2.1...v4.5.3) Signed-off-by: dependabot[bot] --- client/yarn.lock | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/client/yarn.lock b/client/yarn.lock index bc383045..fa0625a8 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -2452,7 +2452,7 @@ commander@2.17.x: resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== -commander@^2.11.0, commander@^2.19.0, commander@^2.20.0, commander@~2.20.0: +commander@^2.11.0, commander@^2.19.0, commander@^2.20.0: version "2.20.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== @@ -2462,6 +2462,11 @@ commander@~2.19.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== +commander@~2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + common-tags@^1.4.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" @@ -4337,9 +4342,9 @@ handle-thing@^2.0.0: integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ== handlebars@^4.0.3: - version "4.2.1" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.2.1.tgz#dc69c0e61604224f0c23b38b5b6741db210b57da" - integrity sha512-bqPIlDk06UWbVEIFoYj+LVo42WhK96J+b25l7hbFDpxrOXMphFM3fNIm+cluwg4Pk2jiLjWU5nHQY7igGE75NQ== + version "4.5.3" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" + integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== dependencies: neo-async "^2.6.0" optimist "^0.6.1" @@ -9698,11 +9703,11 @@ uglify-js@3.4.x: source-map "~0.6.1" uglify-js@^3.1.4: - version "3.6.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" - integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== + version "3.7.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.3.tgz#f918fce9182f466d5140f24bb0ff35c2d32dcc6a" + integrity sha512-7tINm46/3puUA4hCkKYo4Xdts+JDaVC9ZPRcG8Xw9R4nhO/gZgUM3TENq8IF4Vatk8qCig4MzP/c8G4u2BkVQg== dependencies: - commander "~2.20.0" + commander "~2.20.3" source-map "~0.6.1" unicode-canonical-property-names-ecmascript@^1.0.4: From 6760b7570c5ef212d4ce5d578bed7697cbf59872 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 28 Dec 2019 23:11:15 +0000 Subject: [PATCH 34/49] Bump handlebars from 4.2.1 to 4.5.3 in /admin Bumps [handlebars](https://github.com/wycats/handlebars.js) from 4.2.1 to 4.5.3. - [Release notes](https://github.com/wycats/handlebars.js/releases) - [Changelog](https://github.com/wycats/handlebars.js/blob/master/release-notes.md) - [Commits](https://github.com/wycats/handlebars.js/compare/v4.2.1...v4.5.3) Signed-off-by: dependabot[bot] --- admin/yarn.lock | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/admin/yarn.lock b/admin/yarn.lock index 19be4de9..20e29249 100644 --- a/admin/yarn.lock +++ b/admin/yarn.lock @@ -2602,7 +2602,7 @@ commander@2.17.x: resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== -commander@^2.11.0, commander@^2.19.0, commander@^2.20.0, commander@~2.20.0: +commander@^2.11.0, commander@^2.19.0, commander@^2.20.0: version "2.20.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== @@ -2612,6 +2612,11 @@ commander@~2.19.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== +commander@~2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + common-tags@^1.4.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" @@ -4545,9 +4550,9 @@ handle-thing@^2.0.0: integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ== handlebars@^4.0.3: - version "4.2.1" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.2.1.tgz#dc69c0e61604224f0c23b38b5b6741db210b57da" - integrity sha512-bqPIlDk06UWbVEIFoYj+LVo42WhK96J+b25l7hbFDpxrOXMphFM3fNIm+cluwg4Pk2jiLjWU5nHQY7igGE75NQ== + version "4.5.3" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" + integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== dependencies: neo-async "^2.6.0" optimist "^0.6.1" @@ -10318,11 +10323,11 @@ uglify-js@3.4.x: source-map "~0.6.1" uglify-js@^3.1.4: - version "3.6.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" - integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== + version "3.7.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.3.tgz#f918fce9182f466d5140f24bb0ff35c2d32dcc6a" + integrity sha512-7tINm46/3puUA4hCkKYo4Xdts+JDaVC9ZPRcG8Xw9R4nhO/gZgUM3TENq8IF4Vatk8qCig4MzP/c8G4u2BkVQg== dependencies: - commander "~2.20.0" + commander "~2.20.3" source-map "~0.6.1" unicode-canonical-property-names-ecmascript@^1.0.4: From ee89d3dc1be705525dcd91422277f07995e5b52c Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Mon, 30 Dec 2019 10:53:25 +0100 Subject: [PATCH 35/49] Update on public code --- TUTORIAL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TUTORIAL.md b/TUTORIAL.md index 56565e51..1a5877b0 100644 --- a/TUTORIAL.md +++ b/TUTORIAL.md @@ -308,7 +308,7 @@ A vital part of te common ground community is sharing your work, and telling oth Wel it actually isn't, there is a specific common ground platform over at common-ground.dev that reads repositories and updates user. So the only thing we need to do is tell this platform that we have started a new common ground repository. How do we do that? Simple we use the name common ground (or commonground) in the discription of our repository. common-ground.dev should then pick up our repository within the hour. -Another option that we have is to declare our repository on [publiccode](), to do this you need to copy the publiccode.yaml from the [api/public/schema](api/public/schema]) folder to your root folder (dont forget to redo this every time you make a change to your repository). +Another option that we have is to declare our repository on [publiccode](), to do this you need to copy the publiccode.yaml from the [api/public/schema](api/public/schema]) folder to your root folder (dont forget to redo this every time you make a major change to your repository concerning versioning or licencing). Continues integration From e09711985244bb9f7dd1dd2c7b09767cde62691b Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Mon, 30 Dec 2019 10:55:01 +0100 Subject: [PATCH 36/49] fix on publiccode template --- api/public/schema/publiccode.yaml | 3 ++- api/templates/publiccode/publiccode.yaml.twig | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/api/public/schema/publiccode.yaml b/api/public/schema/publiccode.yaml index 1f17c57e..67ea1827 100644 --- a/api/public/schema/publiccode.yaml +++ b/api/public/schema/publiccode.yaml @@ -4,7 +4,8 @@ name: pc applicationSuite: commonground url: "https://github.com/ConductionNL/Proto-component-commonground" landingURL: "pc.zaakonline.nl" -isBasedOn: "https://github.com/ConductionNL/Proto-component-commonground.git" softwareVersion: "V.0.1" +isBasedOn: "https://github.com/ConductionNL/Proto-component-commonground.git" +softwareVersion: "V.0.1" releaseDate: "2019-28-12" logo: pc.zaakonline.nl monochromeLogo: img/logo-mono.svg diff --git a/api/templates/publiccode/publiccode.yaml.twig b/api/templates/publiccode/publiccode.yaml.twig index 88c1d8d1..0d9dc439 100644 --- a/api/templates/publiccode/publiccode.yaml.twig +++ b/api/templates/publiccode/publiccode.yaml.twig @@ -5,7 +5,8 @@ name: {{ app_name }} applicationSuite: commonground url: "{{ app_repro }}" landingURL: "{{ app_demo }}" -isBasedOn: "https://github.com/ConductionNL/Proto-component-commonground.git" {# we asume that everything is based on the proto component #} +{# we asume that everything is based on the proto component #} +isBasedOn: "https://github.com/ConductionNL/Proto-component-commonground.git" softwareVersion: "{{ app_version }}" releaseDate: "{{ "now"|date("Y-d-m") }}" logo: {{ app_logo }} From 12732fd0538551c39909da97f5979cfd14fab00c Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Wed, 1 Jan 2020 10:31:52 +0100 Subject: [PATCH 37/49] update on dependencies --- api/composer.json | 6 +++--- api/public/schema/publiccode.yaml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/api/composer.json b/api/composer.json index d04d452a..b69f6993 100644 --- a/api/composer.json +++ b/api/composer.json @@ -29,9 +29,9 @@ "webonyx/graphql-php": "^0.13.8" }, "require-dev" : { - "api-platform/schema-generator" : "^2.1", - "symfony/maker-bundle" : "^1.11", - "symfony/profiler-pack" : "^1.0" + "api-platform/schema-generator": "^2.1", + "symfony/maker-bundle": "^1.11", + "symfony/profiler-pack": "^1.0" }, "config" : { "preferred-install" : { diff --git a/api/public/schema/publiccode.yaml b/api/public/schema/publiccode.yaml index 67ea1827..66f44a92 100644 --- a/api/public/schema/publiccode.yaml +++ b/api/public/schema/publiccode.yaml @@ -6,7 +6,7 @@ url: "https://github.com/ConductionNL/Proto-component-commonground" landingURL: "pc.zaakonline.nl" isBasedOn: "https://github.com/ConductionNL/Proto-component-commonground.git" softwareVersion: "V.0.1" -releaseDate: "2019-28-12" +releaseDate: "2020-01-01" logo: pc.zaakonline.nl monochromeLogo: img/logo-mono.svg From 1e09b51a2d6ca17bf882499d0cce099dcaa57992 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Fri, 3 Jan 2020 17:23:38 +0100 Subject: [PATCH 38/49] removed vng.cloud --- .env | 2 +- .github/workflows/dockerimage.yml | 1 + api/src/Entity/ExampleEntity.php | 15 ++++++++++++--- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.env b/.env index e96a94ad..d41ad5c2 100644 --- a/.env +++ b/.env @@ -29,7 +29,7 @@ APP_HOME=pc.zaakonline.nl # The urls on wich this api is available TRUSTED_PROXIES=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 -TRUSTED_HOSTS=^(.+\.)?conduction\.nl$|^(.+\.)?vng\.cloud$|^(.+\.)?huwelijksplanner\.online$|^(.+\.)?larping\.eu$|^(.+\.)?common-ground\.dev$|^(.+\.)?trouwplanner\.online$|^(.+\.)?zaakonline\.nl$|localhost +TRUSTED_HOSTS=^(.+\.)?conduction\.nl$|^(.+\.)?huwelijksplanner\.online$|^(.+\.)?larping\.eu$|^(.+\.)?common-ground\.dev$|^(.+\.)?trouwplanner\.online$|^(.+\.)?zaakonline\.nl$|localhost ################################################## # Orgization details diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml index 5be324ee..96e29ebb 100644 --- a/.github/workflows/dockerimage.yml +++ b/.github/workflows/dockerimage.yml @@ -34,6 +34,7 @@ jobs: if: contains( github.ref, 'master' ) || contains( github.base_ref, 'master' ) run: | echo ::set-env name=APP_ENV::prod + echo ::set-env name=APP_BUILD::prod echo "set APP_ENV to $APP_ENV" - name: Set APP_BUILD to APP_VERSION if: contains( github.ref, 'master' ) diff --git a/api/src/Entity/ExampleEntity.php b/api/src/Entity/ExampleEntity.php index 47705b5c..2e65a2ba 100644 --- a/api/src/Entity/ExampleEntity.php +++ b/api/src/Entity/ExampleEntity.php @@ -11,6 +11,7 @@ use Gedmo\Mapping\Annotation as Gedmo; use Symfony\Component\Serializer\Annotation\Groups; use Symfony\Component\Validator\Constraints as Assert; +use Ramsey\Uuid\Uuid; /** * This is an example entity. @@ -91,10 +92,18 @@ class ExampleEntity * @ORM\Column(type="string", length=255, nullable=true) */ private $camelCase; - - public function getId(): ?int + + + public function getId(): Uuid + { + return $this->id; + } + + public function setId(Uuid $id): self { - return $this->id; + $this->id = $id; + + return $this; } public function getName(): ?string From 518ceb288e190ba3f35f5aa9bb915d4dc6ce3104 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Fri, 3 Jan 2020 18:28:44 +0100 Subject: [PATCH 39/49] Moved public code from dockerfile to entrypoint --- api/Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/api/Dockerfile b/api/Dockerfile index 24fae412..5036a777 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -117,8 +117,7 @@ CMD ["php-fpm"] # Let update the docs to show the latest chages # RUN bin/console api:swagger:export --output=/srv/api/public/schema/openapi.yaml --yaml --spec-version=3 - -RUN bin/console app:publiccode:update --location=/srv/api/public/schema/ --spec-version=0.2 +# RUN bin/console app:publiccode:update --location=/srv/api/public/schema/ --spec-version=0.2 ############################# # "nginx" stage # From c64be66ce1be3fdbc8b4cc0b37d75312fa6a5b10 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Sun, 5 Jan 2020 15:54:12 +0100 Subject: [PATCH 40/49] domain to domains --- api/helm/templates/configmap.yaml | 2 +- api/helm/templates/php-deployment.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/helm/templates/configmap.yaml b/api/helm/templates/configmap.yaml index 41f37e42..dd422b1c 100644 --- a/api/helm/templates/configmap.yaml +++ b/api/helm/templates/configmap.yaml @@ -16,7 +16,7 @@ data: app-version: {{ .Values.settings.version | quote }} app-repro: {{ .Values.settings.repro | quote }} app-demo: {{ .Values.settings.demo | quote }} - app-domain: {{ .Values.settings.domain | quote }} + app-domains: {{ .Values.settings.domains | quote }} app-description: {{ .Values.settings.description | quote }} app-auth: {{ .Values.settings.authorisationEnabled | quote }} diff --git a/api/helm/templates/php-deployment.yaml b/api/helm/templates/php-deployment.yaml index 2d5df508..814d4fc6 100644 --- a/api/helm/templates/php-deployment.yaml +++ b/api/helm/templates/php-deployment.yaml @@ -77,11 +77,11 @@ spec: configMapKeyRef: name: {{ template "fullname" . }} key: app-demo - - name: APP_DOMAIN + - name: APP_DOMAINS valueFrom: configMapKeyRef: name: {{ template "fullname" . }} - key: app-domain + key: app-domains # organization - name: ORGANIZATION_NAME valueFrom: From e6efdbdc8b0bfc4864e285aa9f69655dcb281a5d Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Sun, 5 Jan 2020 16:30:53 +0100 Subject: [PATCH 41/49] included the domains as a json value --- api/config/packages/twig.yaml | 3 ++- api/helm/templates/configmap.yaml | 3 ++- api/helm/templates/php-deployment.yaml | 2 +- api/helm/values.yaml | 1 + api/templates/helm/Values.yaml.twig | 1 + 5 files changed, 7 insertions(+), 3 deletions(-) diff --git a/api/config/packages/twig.yaml b/api/config/packages/twig.yaml index 0f182e22..eaef80d6 100644 --- a/api/config/packages/twig.yaml +++ b/api/config/packages/twig.yaml @@ -57,7 +57,8 @@ twig: app_env: '%env(APP_ENV)%' app_debug: '%env(APP_DEBUG)%' app_subdomain: '%env(APP_SUBDOMAIN)%' - app_domains: '%env(json:APP_DOMAINS)%' + app_domains: '%env(json:APP_DOMAINS)%' + app_domains_json: '%env(APP_DOMAINS)%' app_demo: '%env(APP_DEMO)%' app_repro: '%env(APP_REPRO)%' app_description: '%env(APP_DESCRIPTION)%' diff --git a/api/helm/templates/configmap.yaml b/api/helm/templates/configmap.yaml index dd422b1c..77e68c78 100644 --- a/api/helm/templates/configmap.yaml +++ b/api/helm/templates/configmap.yaml @@ -16,7 +16,8 @@ data: app-version: {{ .Values.settings.version | quote }} app-repro: {{ .Values.settings.repro | quote }} app-demo: {{ .Values.settings.demo | quote }} - app-domains: {{ .Values.settings.domains | quote }} + app-domains: {{ .Values.settings.domains | quote }} + app-domains-json: {{ .Values.settings.domainsJson | quote }} app-description: {{ .Values.settings.description | quote }} app-auth: {{ .Values.settings.authorisationEnabled | quote }} diff --git a/api/helm/templates/php-deployment.yaml b/api/helm/templates/php-deployment.yaml index 814d4fc6..d438ac3e 100644 --- a/api/helm/templates/php-deployment.yaml +++ b/api/helm/templates/php-deployment.yaml @@ -81,7 +81,7 @@ spec: valueFrom: configMapKeyRef: name: {{ template "fullname" . }} - key: app-domains + key: app-domains-json # organization - name: ORGANIZATION_NAME valueFrom: diff --git a/api/helm/values.yaml b/api/helm/values.yaml index c9735c5b..4ebf495f 100644 --- a/api/helm/values.yaml +++ b/api/helm/values.yaml @@ -16,6 +16,7 @@ settings: - zaakonline.nl - huwelijksplanner.online - common-ground.dev + domainsJson: ["conduction.nl","zaakonline.nl","huwelijksplanner.online","common-ground.dev"] organisationName: Conduction email: info@conduction.nl country: Netherlands diff --git a/api/templates/helm/Values.yaml.twig b/api/templates/helm/Values.yaml.twig index a328bd6b..afbd21ad 100644 --- a/api/templates/helm/Values.yaml.twig +++ b/api/templates/helm/Values.yaml.twig @@ -15,6 +15,7 @@ settings: {% for domain in app_domains %} - {{ domain }} {% endfor %} + domains_json: {{ app_domains_json }} organisationName: {{ organization_name }} email: {{ organization_email }} country: {{ organization_country }} From 90f2fc8bf2496d367f5f42dbc223f6d12c1aa276 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Sun, 5 Jan 2020 16:55:55 +0100 Subject: [PATCH 42/49] domains from json --- api/config/packages/twig.yaml | 1 - api/templates/helm/Values.yaml.twig | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/api/config/packages/twig.yaml b/api/config/packages/twig.yaml index eaef80d6..5a403c45 100644 --- a/api/config/packages/twig.yaml +++ b/api/config/packages/twig.yaml @@ -58,7 +58,6 @@ twig: app_debug: '%env(APP_DEBUG)%' app_subdomain: '%env(APP_SUBDOMAIN)%' app_domains: '%env(json:APP_DOMAINS)%' - app_domains_json: '%env(APP_DOMAINS)%' app_demo: '%env(APP_DEMO)%' app_repro: '%env(APP_REPRO)%' app_description: '%env(APP_DESCRIPTION)%' diff --git a/api/templates/helm/Values.yaml.twig b/api/templates/helm/Values.yaml.twig index afbd21ad..25054083 100644 --- a/api/templates/helm/Values.yaml.twig +++ b/api/templates/helm/Values.yaml.twig @@ -15,7 +15,7 @@ settings: {% for domain in app_domains %} - {{ domain }} {% endfor %} - domains_json: {{ app_domains_json }} + domains_json: {{ app_domains_json | json_encode() }} organisationName: {{ organization_name }} email: {{ organization_email }} country: {{ organization_country }} From f8162de61f4b72f353922886a11b83fffb9687f8 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Sun, 5 Jan 2020 17:21:04 +0100 Subject: [PATCH 43/49] fix on non-exisiting variable --- api/templates/helm/Values.yaml.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/templates/helm/Values.yaml.twig b/api/templates/helm/Values.yaml.twig index 25054083..320d577f 100644 --- a/api/templates/helm/Values.yaml.twig +++ b/api/templates/helm/Values.yaml.twig @@ -15,7 +15,7 @@ settings: {% for domain in app_domains %} - {{ domain }} {% endfor %} - domains_json: {{ app_domains_json | json_encode() }} + domains_json: {{ app_domains | json_encode() }} organisationName: {{ organization_name }} email: {{ organization_email }} country: {{ organization_country }} From 4e898db2108495eee2d1d51c12142463cea0e2b3 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Sun, 5 Jan 2020 17:51:39 +0100 Subject: [PATCH 44/49] fix on value file --- api/templates/helm/Values.yaml.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/templates/helm/Values.yaml.twig b/api/templates/helm/Values.yaml.twig index 320d577f..12233fc4 100644 --- a/api/templates/helm/Values.yaml.twig +++ b/api/templates/helm/Values.yaml.twig @@ -15,7 +15,7 @@ settings: {% for domain in app_domains %} - {{ domain }} {% endfor %} - domains_json: {{ app_domains | json_encode() }} + domainsJson: {{ app_domains | json_encode() }} organisationName: {{ organization_name }} email: {{ organization_email }} country: {{ organization_country }} From ead310efecabfcf0cea01a3cbc543378e74d0d20 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Sun, 5 Jan 2020 18:32:57 +0100 Subject: [PATCH 45/49] dump raw unsafe values --- api/templates/helm/Values.yaml.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/templates/helm/Values.yaml.twig b/api/templates/helm/Values.yaml.twig index 12233fc4..ced66e43 100644 --- a/api/templates/helm/Values.yaml.twig +++ b/api/templates/helm/Values.yaml.twig @@ -15,7 +15,7 @@ settings: {% for domain in app_domains %} - {{ domain }} {% endfor %} - domainsJson: {{ app_domains | json_encode() }} + domainsJson: {{ app_domains | json_encode()| e }} organisationName: {{ organization_name }} email: {{ organization_email }} country: {{ organization_country }} From 0fa4c044a75ebcfd3b2016cb0587e78e28c672e0 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Sun, 5 Jan 2020 18:54:38 +0100 Subject: [PATCH 46/49] fixed raw dump --- api/templates/helm/Values.yaml.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/templates/helm/Values.yaml.twig b/api/templates/helm/Values.yaml.twig index ced66e43..10375e26 100644 --- a/api/templates/helm/Values.yaml.twig +++ b/api/templates/helm/Values.yaml.twig @@ -15,7 +15,7 @@ settings: {% for domain in app_domains %} - {{ domain }} {% endfor %} - domainsJson: {{ app_domains | json_encode()| e }} + domainsJson: {{ app_domains | json_encode()|raw }} organisationName: {{ organization_name }} email: {{ organization_email }} country: {{ organization_country }} From cde5820af43970f39e82dd7e4cd6626e039d961e Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Sun, 5 Jan 2020 20:24:34 +0100 Subject: [PATCH 47/49] Test --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index d41ad5c2..dfe3cdd5 100644 --- a/.env +++ b/.env @@ -81,7 +81,7 @@ NOTIFICATION_ENABLED_AUTHORIZATION=sasd ################################################## AUTH_ENABLED=false -AUTH_PROVIDER=sasd +AUTH_PROVIDER=sasdadad AUTH_AUTHORIZATION=sasd ################################################## From 896d8da9cde626a3c39967f3f47f42c2b53ae05f Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Sun, 5 Jan 2020 20:55:18 +0100 Subject: [PATCH 48/49] test --- api/helm/templates/php-deployment.yaml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/api/helm/templates/php-deployment.yaml b/api/helm/templates/php-deployment.yaml index d438ac3e..347f1381 100644 --- a/api/helm/templates/php-deployment.yaml +++ b/api/helm/templates/php-deployment.yaml @@ -77,11 +77,6 @@ spec: configMapKeyRef: name: {{ template "fullname" . }} key: app-demo - - name: APP_DOMAINS - valueFrom: - configMapKeyRef: - name: {{ template "fullname" . }} - key: app-domains-json # organization - name: ORGANIZATION_NAME valueFrom: From af8b7c7327cd7ceb07d612f21d04980cb2e93066 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Tue, 7 Jan 2020 11:00:10 +0100 Subject: [PATCH 49/49] Updated VRC with processes information --- api/helm/values.yaml | 12 +- api/public/schema/openapi.yaml | 606 ++++++++++++++++--- api/public/schema/publiccode.yaml | 14 +- api/src/DataFixtures/AppFixtures.php | 217 ++++--- api/src/Entity/Property.php | 123 +++- api/src/Entity/RequestType.php | 47 +- api/src/Repository/RequestTypeRepository.php | 4 +- 7 files changed, 831 insertions(+), 192 deletions(-) diff --git a/api/helm/values.yaml b/api/helm/values.yaml index 41257fbc..e71766ea 100644 --- a/api/helm/values.yaml +++ b/api/helm/values.yaml @@ -9,8 +9,8 @@ settings: title: Verzoek Type Catalogus version: V.0.1 description: ''Naast deze JSON rest API is er ook een [graphql](/graphql) interface beschikbaar.'' - repro: 'https://github.com/ConductionNL/Proto-component-commonground' - subdomain: pc + repro: 'https://github.com/ConductionNL/verzoektypecatalogus' + subdomain: domains: - conduction.nl - zaakonline.nl @@ -23,12 +23,12 @@ settings: state: Noord-Holland locality: Amsterdam unit: Common-Ground - demo: pc.zaakonline.nl + demo: vtc.zaakonline.nl env: dev debug: 1 replicaCount: 1 corsAllowOrigin: ['*'] - trustedHosts: '^(.+\.)?conduction\.nl$|^(.+\.)?vng\.cloud$|^(.+\.)?huwelijksplanner\.online$|^(.+\.)?larping\.eu$|^(.+\.)?common-ground\.dev$|^(.+\.)?trouwplanner\.online$|^(.+\.)?zaakonline\.nl$|localhost' + trustedHosts: '^(.+\.)?conduction\.nl$|^(.+\.)?huwelijksplanner\.online$|^(.+\.)?larping\.eu$|^(.+\.)?common-ground\.dev$|^(.+\.)?trouwplanner\.online$|^(.+\.)?zaakonline\.nl$|localhost' pullPolicy: Always # You will need these proxies on kubernetes trustedProxies: @@ -48,7 +48,7 @@ settings: php: - repository: docker.io/conduction/vtc-php + repository: docker.io/conduction/protocomponent-php tag: latest mercure: jwtSecret: "" @@ -64,7 +64,7 @@ nginx: varnish: enabled: true #url: https://example.com - repository: docker.io/conduction/vtc-varnish + repository: docker.io/conduction/protocomponent-varnish tag: latest pullPolicy: Always replicaCount: 1 diff --git a/api/public/schema/openapi.yaml b/api/public/schema/openapi.yaml index f694bc26..9b83cb55 100644 --- a/api/public/schema/openapi.yaml +++ b/api/public/schema/openapi.yaml @@ -8,16 +8,11 @@ info: - Reference: vtc - Enviroment: dev - Version: V.0.1 - - Repository: [online](https://github.com/ConductionNL/Proto-component-commonground) / [zip](https://github.com/ConductionNL/Proto-component-commonground/archive/master.zip) - - Docker Image: [online](https://hub.docker.com/repository/docker/conduction/pc-php) - - Datamodel: [postman](/schema/pc.postman_collection.json) / [oas](/schema/openapi.yaml) / [pdf](/schema/datamodel.pdf) / [mwb](/schema/datamodel.mwb) + - Repository: [online](https://github.com/ConductionNL/verzoektypecatalogus) / [zip](https://github.com/ConductionNL/verzoektypecatalogus/archive/master.zip) + - Docker Image: [online](https://hub.docker.com/repository/docker/conduction/vtc-php) + - Datamodel: [postman](/schema/vtc.postman_collection.json) / [oas](/schema/openapi.yaml) / [pdf](/schema/datamodel.pdf) / [mwb](/schema/datamodel.mwb) - Naast deze JSON rest API is er ook een [graphql](/graphql) interface beschikbaar. - - Voor het gebruik van deze applicatie is een JWT Token nodig, deze hangt altijd vast aan een applicatie, ofwel user. Geldige JWT Tokens worden aangemaakt bij het registreren van een applicatie en kennen een beperkte houdbaarheid. - JWT Tokens kunnen zowel worden verlengd, als opnieuw worden aangevraagd, dit aan de hand van de applicatie id en sleutel. - Let er bij het meegeven van JWT tokens op dat deze moet worden voorafgegaan door een Bearer en een spatie, onder de header Authorization. De volledig naam wordt daarmee: 'Authorization: Bearer [TOKEN]'. - + 'Naast deze JSON rest API is er ook een [graphql](/graphql) interface beschikbaar.' paths: /properties: @@ -39,12 +34,139 @@ paths: schema: type: object properties: - 'hydra:member': { type: array, items: { $ref: '#/components/schemas/ExampleEntity:jsonld-read' } } + 'hydra:member': { type: array, items: { $ref: '#/components/schemas/Property:jsonld-read' } } 'hydra:totalItems': { type: integer, minimum: 0 } 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } } } 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: string }, required: { type: boolean } } } } } } required: - 'hydra:member' + application/vnd.api+json: + schema: + type: array + items: + $ref: '#/components/schemas/Property-read' + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Property-read' + application/xml: + schema: + type: array + items: + $ref: '#/components/schemas/Property-read' + application/x-yaml: + schema: + type: array + items: + $ref: '#/components/schemas/Property-read' + text/csv: + schema: + type: array + items: + $ref: '#/components/schemas/Property-read' + text/html: + schema: + type: array + items: + $ref: '#/components/schemas/Property-read' + parameters: + - + name: page + in: query + required: false + description: 'The collection page number' + schema: + type: integer + default: 1 + - + name: Authorization + description: 'The JWT of the entity performing the request' + in: header + - + name: API-Version + description: 'The version of the API conform [Landelijke API-strategie.](https://geonovum.github.io/KP-APIs/#versioning)' + example: 1.0.1 + in: header + - + name: X-NLX-Logrecord-ID + description: 'A globally unique id of the request, which makes a request traceable throughout the network.' + in: header + - + name: X-NLX-Request-Process-Id + description: 'A process id for purpose registration (doelbinding)' + in: header + - + name: X-NLX-Request-Data-Elements + description: 'A list of requested data elements' + in: header + - + name: X-NLX-Request-Data-Subject + description: 'A key-value list of data subjects related to this request. e.g. `bsn=12345678, kenteken=ab-12-fg`' + in: header + - + name: X-NLX-Audit-Clarification + description: 'A clarification as to why a request has been made (doelbinding)' + in: header + - + name: Link + description: 'A [websub](https://www.w3.org/TR/websub/#discovery) header like ; rel="hub"' + in: header + - + name: 'extend[]' + required: false + description: 'An array of nested objects to include in the return object' + in: query + schema: + type: array + - + name: 'fields[]' + required: false + description: 'An array of fields to return in output, wil return all fields is not supplied' + in: query + schema: + type: array + - + name: validOn + required: false + description: 'Returns object as valid on a given date time' + schema: + type: string + format: date-time + in: query + - + name: validFrom + required: false + description: 'Returns objects valid from a given date time' + schema: + type: string + format: date-time + in: query + - + name: validUntil + required: false + description: 'Returns objects valid until a given date time' + schema: + type: string + format: date-time + in: query + produces: + - application/health+json + post: + tags: + - Property + operationId: postPropertyCollection + summary: 'Creates a Property resource.' + responses: + 201: + description: 'Property resource created' + content: + application/hal+json: + schema: + $ref: '#/components/schemas/Property-read' + application/ld+json: + schema: + $ref: '#/components/schemas/Property:jsonld-read' application/vnd.api+json: schema: $ref: '#/components/schemas/Property-read' @@ -528,13 +650,13 @@ paths: $ref: '#/components/schemas/RequestType-read' parameters: - - name: sourceOrganization + name: source_organization in: query required: false schema: type: string - - name: 'sourceOrganization[]' + name: 'source_organization[]' in: query required: false schema: @@ -638,7 +760,7 @@ paths: $ref: '#/components/schemas/RequestType-read' application/ld+json: schema: - $ref: '#/components/schemas/ExampleEntity:jsonld-read' + $ref: '#/components/schemas/RequestType:jsonld-read' application/vnd.api+json: schema: $ref: '#/components/schemas/RequestType-read' @@ -674,7 +796,7 @@ paths: $ref: '#/components/schemas/RequestType-write' application/ld+json: schema: - $ref: '#/components/schemas/ExampleEntity:jsonld-write' + $ref: '#/components/schemas/RequestType:jsonld-write' application/vnd.api+json: schema: $ref: '#/components/schemas/RequestType-write' @@ -817,7 +939,7 @@ paths: $ref: '#/components/schemas/RequestType-read' application/ld+json: schema: - $ref: '#/components/schemas/ExampleEntity:jsonld-read' + $ref: '#/components/schemas/RequestType:jsonld-read' application/vnd.api+json: schema: $ref: '#/components/schemas/RequestType-read' @@ -890,7 +1012,7 @@ paths: $ref: '#/components/schemas/RequestType-read' application/ld+json: schema: - $ref: '#/components/schemas/ExampleEntity:jsonld-read' + $ref: '#/components/schemas/RequestType:jsonld-read' application/vnd.api+json: schema: $ref: '#/components/schemas/RequestType-read' @@ -920,7 +1042,7 @@ paths: $ref: '#/components/schemas/RequestType-write' application/ld+json: schema: - $ref: '#/components/schemas/ExampleEntity:jsonld-write' + $ref: '#/components/schemas/RequestType:jsonld-write' application/vnd.api+json: schema: $ref: '#/components/schemas/RequestType-write' @@ -998,10 +1120,11 @@ components: properties: id: readOnly: true + description: 'The UUID identifier of this object' externalDocs: url: 'http://schema.org/identifier' type: string - requestType: + request_type: description: 'The requestType that this property belongs to' $ref: '#/components/schemas/RequestType-read' title: @@ -1017,46 +1140,46 @@ components: format: description: 'The swagger type of the property as used in api calls' type: string - multipleOf: + multiple_of: description: '*Can only be used in combination with type integer* Specifies a number where the value should be a multiple of, e.g. a multiple of 2 would validate 2,4 and 6 but would prevent 5' type: integer maximum: description: '*Can only be used in combination with type integer* The maximum allowed value' type: integer - exclusiveMaximum: + exclusive_maximum: description: '*Can only be used in combination with type integer* Defines if the maximum is exclusive, e.g. a exclusive maximum of 5 would invalidate 5 but validate 4' type: boolean minimum: description: '*Can only be used in combination with type integer* The minimum allowed value' type: integer - exclusiveMinimum: + exclusive_minimum: description: '*Can only be used in combination with type integer* Defines if the minimum is exclusive, e.g. a exclusive minimum of 5 would invalidate 5 but validate 6' type: boolean - maxLength: + max_length: description: 'The maximum amount of characters in the value' type: integer - minLength: + min_length: description: 'The minimal amount of characters in the value' type: integer pattern: description: 'A [regular expression](https://en.wikipedia.org/wiki/Regular_expression) that the value should comply to' type: string - additionalItems: + additional_items: description: 'Not yet supported by business logic' type: boolean - maxItems: + max_items: description: '*Can only be used in combination with type array* The maximum array length' type: integer - minItems: + min_items: description: '*Can only be used in combination with type array* The minimum allowed value' type: integer - uniqueItems: + unique_items: description: '*Can only be used in combination with type array* Define whether or not values in an array should be unique' type: boolean - maxProperties: + max_properties: description: '*Can only be used in combination with type integer* The maximum amount of properties an object should contain' type: integer - minProperties: + min_properties: description: '*Can only be used in combination with type object* The minimum amount of properties an object should contain' type: integer required: @@ -1065,21 +1188,21 @@ components: properties: description: 'Not yet supported by business logic' type: string - additionalProperties: + additional_properties: description: 'Not yet supported by business logic' type: string object: description: 'Not yet supported by business logic' type: string enum: - description: 'An array of possible values, input is limited to this array' + description: 'An array of possible values, input is limited to this array]' type: array items: type: string description: description: 'An description of the value asked, supports markdown syntax as described by [CommonMark 0.27.](https://spec.commonmark.org/0.27/)' type: string - defaultValue: + default_value: description: 'An default value for this value that will be used if a user doesn''t supply a value' type: string nullable: @@ -1088,16 +1211,16 @@ components: discriminator: description: 'To help API consumers detect the object type, you can add the discriminator/propertyName keyword to model definitions. This keyword points to the property that specifies the data type name' type: string - readOnly: + read_only: description: 'Whether or not this property is read only' type: boolean - writeOnly: + write_only: description: 'Whether or not this property is write only' type: boolean xml: description: 'An XML representation of the swagger docs' type: string - externalDoc: + external_doc: description: 'An link to any external documentation for the value' type: string example: @@ -1106,26 +1229,35 @@ components: deprecated: description: 'Whether or not this property has been deprecated and wil be removed in the future' type: boolean - availableFrom: + available_from: description: 'The moment from which this value is available' externalDocs: url: 'http://schema.org/DateTime' type: string format: date-time - availableUntil: + available_until: description: '*should be used in combination with deprecated* The moment where until this value is available' externalDocs: url: 'http://schema.org/DateTime' type: string format: date-time - minDate: + min_date: description: 'The minimal date for value, either a date, datetime or duration (ISO_8601)' type: string - maxDate: + max_date: description: 'The maximum date for value, either a date, datetime or duration (ISO_8601)' type: string + icon: + description: 'The icon of this property' + type: string + slug: + description: 'The slug of this property' + type: string + start: + description: 'Whether or not this proerty is the starting oint of a process' + type: boolean required: - - requestType + - request_type - title - type - format @@ -1137,12 +1269,12 @@ components: https://tools.ietf.org/html/draft-wright-json-schema-validation-00 http://json-schema.org/ required: - - requestType + - request_type - title - type - format properties: - requestType: + request_type: description: 'The requestType that this property belongs to' $ref: '#/components/schemas/RequestType-write' title: @@ -1154,46 +1286,46 @@ components: format: description: 'The swagger type of the property as used in api calls' type: string - multipleOf: + multiple_of: description: '*Can only be used in combination with type integer* Specifies a number where the value should be a multiple of, e.g. a multiple of 2 would validate 2,4 and 6 but would prevent 5' type: integer maximum: description: '*Can only be used in combination with type integer* The maximum allowed value' type: integer - exclusiveMaximum: + exclusive_maximum: description: '*Can only be used in combination with type integer* Defines if the maximum is exclusive, e.g. a exclusive maximum of 5 would invalidate 5 but validate 4' type: boolean minimum: description: '*Can only be used in combination with type integer* The minimum allowed value' type: integer - exclusiveMinimum: + exclusive_minimum: description: '*Can only be used in combination with type integer* Defines if the minimum is exclusive, e.g. a exclusive minimum of 5 would invalidate 5 but validate 6' type: boolean - maxLength: + max_length: description: 'The maximum amount of characters in the value' type: integer - minLength: + min_length: description: 'The minimal amount of characters in the value' type: integer pattern: description: 'A [regular expression](https://en.wikipedia.org/wiki/Regular_expression) that the value should comply to' type: string - additionalItems: + additional_items: description: 'Not yet supported by business logic' type: boolean - maxItems: + max_items: description: '*Can only be used in combination with type array* The maximum array length' type: integer - minItems: + min_items: description: '*Can only be used in combination with type array* The minimum allowed value' type: integer - uniqueItems: + unique_items: description: '*Can only be used in combination with type array* Define whether or not values in an array should be unique' type: boolean - maxProperties: + max_properties: description: '*Can only be used in combination with type integer* The maximum amount of properties an object should contain' type: integer - minProperties: + min_properties: description: '*Can only be used in combination with type object* The minimum amount of properties an object should contain' type: integer required: @@ -1202,21 +1334,21 @@ components: properties: description: 'Not yet supported by business logic' type: string - additionalProperties: + additional_properties: description: 'Not yet supported by business logic' type: string object: description: 'Not yet supported by business logic' type: string enum: - description: 'An array of possible values, input is limited to this array' + description: 'An array of possible values, input is limited to this array]' type: array items: type: string description: description: 'An description of the value asked, supports markdown syntax as described by [CommonMark 0.27.](https://spec.commonmark.org/0.27/)' type: string - defaultValue: + default_value: description: 'An default value for this value that will be used if a user doesn''t supply a value' type: string nullable: @@ -1225,16 +1357,16 @@ components: discriminator: description: 'To help API consumers detect the object type, you can add the discriminator/propertyName keyword to model definitions. This keyword points to the property that specifies the data type name' type: string - readOnly: + read_only: description: 'Whether or not this property is read only' type: boolean - writeOnly: + write_only: description: 'Whether or not this property is write only' type: boolean xml: description: 'An XML representation of the swagger docs' type: string - externalDoc: + external_doc: description: 'An link to any external documentation for the value' type: string example: @@ -1243,24 +1375,33 @@ components: deprecated: description: 'Whether or not this property has been deprecated and wil be removed in the future' type: boolean - availableFrom: + available_from: description: 'The moment from which this value is available' externalDocs: url: 'http://schema.org/DateTime' type: string format: date-time - availableUntil: + available_until: description: '*should be used in combination with deprecated* The moment where until this value is available' externalDocs: url: 'http://schema.org/DateTime' type: string format: date-time - minDate: + min_date: description: 'The minimal date for value, either a date, datetime or duration (ISO_8601)' type: string - maxDate: + max_date: description: 'The maximum date for value, either a date, datetime or duration (ISO_8601)' type: string + icon: + description: 'The icon of this property' + type: string + slug: + description: 'The slug of this property' + type: string + start: + description: 'Whether or not this proerty is the starting oint of a process' + type: boolean 'Property:jsonld-read': type: object description: | @@ -1284,7 +1425,7 @@ components: externalDocs: url: 'http://schema.org/identifier' type: string - requestType: + request_type: description: 'The requestType that this property belongs to' $ref: '#/components/schemas/RequestType:jsonld-read' title: @@ -1300,46 +1441,46 @@ components: format: description: 'The swagger type of the property as used in api calls' type: string - multipleOf: + multiple_of: description: '*Can only be used in combination with type integer* Specifies a number where the value should be a multiple of, e.g. a multiple of 2 would validate 2,4 and 6 but would prevent 5' type: integer maximum: description: '*Can only be used in combination with type integer* The maximum allowed value' type: integer - exclusiveMaximum: + exclusive_maximum: description: '*Can only be used in combination with type integer* Defines if the maximum is exclusive, e.g. a exclusive maximum of 5 would invalidate 5 but validate 4' type: boolean minimum: description: '*Can only be used in combination with type integer* The minimum allowed value' type: integer - exclusiveMinimum: + exclusive_minimum: description: '*Can only be used in combination with type integer* Defines if the minimum is exclusive, e.g. a exclusive minimum of 5 would invalidate 5 but validate 6' type: boolean - maxLength: + max_length: description: 'The maximum amount of characters in the value' type: integer - minLength: + min_length: description: 'The minimal amount of characters in the value' type: integer pattern: description: 'A [regular expression](https://en.wikipedia.org/wiki/Regular_expression) that the value should comply to' type: string - additionalItems: + additional_items: description: 'Not yet supported by business logic' type: boolean - maxItems: + max_items: description: '*Can only be used in combination with type array* The maximum array length' type: integer - minItems: + min_items: description: '*Can only be used in combination with type array* The minimum allowed value' type: integer - uniqueItems: + unique_items: description: '*Can only be used in combination with type array* Define whether or not values in an array should be unique' type: boolean - maxProperties: + max_properties: description: '*Can only be used in combination with type integer* The maximum amount of properties an object should contain' type: integer - minProperties: + min_properties: description: '*Can only be used in combination with type object* The minimum amount of properties an object should contain' type: integer required: @@ -1348,26 +1489,91 @@ components: properties: description: 'Not yet supported by business logic' type: string - additionalProperties: + additional_properties: description: 'Not yet supported by business logic' type: string object: description: 'Not yet supported by business logic' type: string enum: - description: 'An array of possible values, input is limited to this array' + description: 'An array of possible values, input is limited to this array]' type: array items: type: string description: description: 'An description of the value asked, supports markdown syntax as described by [CommonMark 0.27.](https://spec.commonmark.org/0.27/)' type: string - defaultValue: + default_value: description: 'An default value for this value that will be used if a user doesn''t supply a value' type: string - 'ExampleEntity:jsonld-read': + nullable: + description: 'Whether or not this property can be left empty' + type: boolean + discriminator: + description: 'To help API consumers detect the object type, you can add the discriminator/propertyName keyword to model definitions. This keyword points to the property that specifies the data type name' + type: string + read_only: + description: 'Whether or not this property is read only' + type: boolean + write_only: + description: 'Whether or not this property is write only' + type: boolean + xml: + description: 'An XML representation of the swagger docs' + type: string + external_doc: + description: 'An link to any external documentation for the value' + type: string + example: + description: 'An example of the value that should be supplied' + type: string + deprecated: + description: 'Whether or not this property has been deprecated and wil be removed in the future' + type: boolean + available_from: + description: 'The moment from which this value is available' + externalDocs: + url: 'http://schema.org/DateTime' + type: string + format: date-time + available_until: + description: '*should be used in combination with deprecated* The moment where until this value is available' + externalDocs: + url: 'http://schema.org/DateTime' + type: string + format: date-time + min_date: + description: 'The minimal date for value, either a date, datetime or duration (ISO_8601)' + type: string + max_date: + description: 'The maximum date for value, either a date, datetime or duration (ISO_8601)' + type: string + icon: + description: 'The icon of this property' + type: string + slug: + description: 'The slug of this property' + type: string + start: + description: 'Whether or not this proerty is the starting oint of a process' + type: boolean + required: + - request_type + - title + - type + - format + 'Property:jsonld-write': type: object - description: 'This is an example entity.' + description: | + This property follows the following schemes (in order of importance) + https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md + https://tools.ietf.org/html/draft-wright-json-schema-validation-00 + http://json-schema.org/ + required: + - request_type + - title + - type + - format properties: '@context': readOnly: true @@ -1378,27 +1584,179 @@ components: '@type': readOnly: true type: string + request_type: + description: 'The requestType that this property belongs to' + $ref: '#/components/schemas/RequestType:jsonld-write' + title: + description: 'The title of this property' + type: string + type: + description: 'The type of this property' + type: string + format: + description: 'The swagger type of the property as used in api calls' + type: string + multiple_of: + description: '*Can only be used in combination with type integer* Specifies a number where the value should be a multiple of, e.g. a multiple of 2 would validate 2,4 and 6 but would prevent 5' + type: integer + maximum: + description: '*Can only be used in combination with type integer* The maximum allowed value' + type: integer + exclusive_maximum: + description: '*Can only be used in combination with type integer* Defines if the maximum is exclusive, e.g. a exclusive maximum of 5 would invalidate 5 but validate 4' + type: boolean + minimum: + description: '*Can only be used in combination with type integer* The minimum allowed value' + type: integer + exclusive_minimum: + description: '*Can only be used in combination with type integer* Defines if the minimum is exclusive, e.g. a exclusive minimum of 5 would invalidate 5 but validate 6' + type: boolean + max_length: + description: 'The maximum amount of characters in the value' + type: integer + min_length: + description: 'The minimal amount of characters in the value' + type: integer + pattern: + description: 'A [regular expression](https://en.wikipedia.org/wiki/Regular_expression) that the value should comply to' + type: string + additional_items: + description: 'Not yet supported by business logic' + type: boolean + max_items: + description: '*Can only be used in combination with type array* The maximum array length' + type: integer + min_items: + description: '*Can only be used in combination with type array* The minimum allowed value' + type: integer + unique_items: + description: '*Can only be used in combination with type array* Define whether or not values in an array should be unique' + type: boolean + max_properties: + description: '*Can only be used in combination with type integer* The maximum amount of properties an object should contain' + type: integer + min_properties: + description: '*Can only be used in combination with type object* The minimum amount of properties an object should contain' + type: integer + required: + description: 'Only whether or not this property is required' + type: boolean + properties: + description: 'Not yet supported by business logic' + type: string + additional_properties: + description: 'Not yet supported by business logic' + type: string + object: + description: 'Not yet supported by business logic' + type: string + enum: + description: 'An array of possible values, input is limited to this array]' + type: array + items: + type: string + description: + description: 'An description of the value asked, supports markdown syntax as described by [CommonMark 0.27.](https://spec.commonmark.org/0.27/)' + type: string + default_value: + description: 'An default value for this value that will be used if a user doesn''t supply a value' + type: string + nullable: + description: 'Whether or not this property can be left empty' + type: boolean + discriminator: + description: 'To help API consumers detect the object type, you can add the discriminator/propertyName keyword to model definitions. This keyword points to the property that specifies the data type name' + type: string + read_only: + description: 'Whether or not this property is read only' + type: boolean + write_only: + description: 'Whether or not this property is write only' + type: boolean + xml: + description: 'An XML representation of the swagger docs' + type: string + external_doc: + description: 'An link to any external documentation for the value' + type: string + example: + description: 'An example of the value that should be supplied' + type: string + deprecated: + description: 'Whether or not this property has been deprecated and wil be removed in the future' + type: boolean + available_from: + description: 'The moment from which this value is available' + externalDocs: + url: 'http://schema.org/DateTime' + type: string + format: date-time + available_until: + description: '*should be used in combination with deprecated* The moment where until this value is available' + externalDocs: + url: 'http://schema.org/DateTime' + type: string + format: date-time + min_date: + description: 'The minimal date for value, either a date, datetime or duration (ISO_8601)' + type: string + max_date: + description: 'The maximum date for value, either a date, datetime or duration (ISO_8601)' + type: string + icon: + description: 'The icon of this property' + type: string + slug: + description: 'The slug of this property' + type: string + start: + description: 'Whether or not this proerty is the starting oint of a process' + type: boolean + RequestType-read: + type: object + description: '' + properties: id: readOnly: true + description: 'The UUID identifier of this object' externalDocs: url: 'http://schema.org/identifier' type: string + source_organization: + description: 'The RSIN of the organization that owns this process' + type: string name: - description: 'The name of this example property' + readOnly: true + description: 'The name of this RequestType' type: string description: - description: 'The description of this example property' - type: string - camelCase: - description: 'Proof that we camel case our api' + readOnly: true + description: 'An short description of this RequestType' type: string + properties: + type: array + items: + $ref: '#/components/schemas/Property-read' + stages: + readOnly: true required: - - name - 'ExampleEntity:jsonld-write': + - source_organization + RequestType-write: type: object - description: 'This is an example entity.' + description: '' required: - - name + - source_organization + properties: + source_organization: + description: 'The RSIN of the organization that owns this process' + type: string + properties: + type: array + items: + $ref: '#/components/schemas/Property-write' + 'RequestType:jsonld-read': + type: object + description: '' properties: '@context': readOnly: true @@ -1409,15 +1767,53 @@ components: '@type': readOnly: true type: string + id: + readOnly: true + description: 'The UUID identifier of this object' + externalDocs: + url: 'http://schema.org/identifier' + type: string + source_organization: + description: 'The RSIN of the organization that owns this process' + type: string name: - description: 'The name of this example property' + readOnly: true + description: 'The name of this RequestType' type: string description: - description: 'The description of this example property' + readOnly: true + description: 'An short description of this RequestType' + type: string + properties: + type: array + items: + $ref: '#/components/schemas/Property:jsonld-read' + stages: + readOnly: true + required: + - source_organization + 'RequestType:jsonld-write': + type: object + description: '' + required: + - source_organization + properties: + '@context': + readOnly: true type: string - camelCase: - description: 'Proof that we camel case our api' + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + source_organization: + description: 'The RSIN of the organization that owns this process' type: string + properties: + type: array + items: + $ref: '#/components/schemas/Property:jsonld-write' definitions: Property-read: properties: @@ -1449,7 +1845,7 @@ definitions: minLength: example: '2' pattern: - example: '''[+-]?(\d+(\.\d+)?|\.\d+)([eE][+-]?\d+)?''' + example: regex maxLength: 255 additionalItems: [] maxItems: @@ -1500,6 +1896,16 @@ definitions: example: '2019-09-16T14:26:51+00:00' maxDate: example: '2019-09-16T14:26:51+00:00' + icon: + example: 'My Property' + maxLength: 255 + minLength: 15 + slug: + example: my-slug + maxLength: 255 + minLength: 15 + start: + example: 'true' requestType: [] required: [] Property-write: @@ -1529,7 +1935,7 @@ definitions: minLength: example: '2' pattern: - example: '''[+-]?(\d+(\.\d+)?|\.\d+)([eE][+-]?\d+)?''' + example: regex maxLength: 255 additionalItems: [] maxItems: @@ -1580,6 +1986,16 @@ definitions: example: '2019-09-16T14:26:51+00:00' maxDate: example: '2019-09-16T14:26:51+00:00' + icon: + example: 'My Property' + maxLength: 255 + minLength: 15 + slug: + example: my-slug + maxLength: 255 + minLength: 15 + start: + example: 'true' requestType: [] required: [] RequestType-read: diff --git a/api/public/schema/publiccode.yaml b/api/public/schema/publiccode.yaml index 66f44a92..9a54e0cf 100644 --- a/api/public/schema/publiccode.yaml +++ b/api/public/schema/publiccode.yaml @@ -1,12 +1,12 @@ publiccodeYmlVersion: "0.2" -name: pc +name: vtc applicationSuite: commonground -url: "https://github.com/ConductionNL/Proto-component-commonground" -landingURL: "pc.zaakonline.nl" +url: "https://github.com/ConductionNL/verzoektypecatalogus" +landingURL: "vtc.zaakonline.nl" isBasedOn: "https://github.com/ConductionNL/Proto-component-commonground.git" softwareVersion: "V.0.1" -releaseDate: "2020-01-01" +releaseDate: "2020-07-01" logo: pc.zaakonline.nl monochromeLogo: img/logo-mono.svg @@ -37,7 +37,7 @@ usedBy: - Gemeente Hoorn -roadmap: "https://github.com/ConductionNL/Proto-component-commonground/blob/master/ROADMAP.md" +roadmap: "https://github.com/ConductionNL/verzoektypecatalogus/blob/master/ROADMAP.md" developmentStatus: development @@ -66,8 +66,8 @@ description: # on multiple rows. You should note what the software # is and why one should need it. - documentation: "https://github.com/ConductionNL/Proto-component-commonground/blob/master/README.md" - apiDocumentation: "pc.zaakonline.nl" + documentation: "https://github.com/ConductionNL/verzoektypecatalogus/blob/master/README.md" + apiDocumentation: "vtc.zaakonline.nl" # # features: # - Very important feature diff --git a/api/src/DataFixtures/AppFixtures.php b/api/src/DataFixtures/AppFixtures.php index 55a2d323..3fcd5c4c 100644 --- a/api/src/DataFixtures/AppFixtures.php +++ b/api/src/DataFixtures/AppFixtures.php @@ -179,89 +179,159 @@ public function load(ObjectManager $manager) $property->setRequestType($omzettingNL); $manager->persist($property); + $id = Uuid::fromString('5b10c1d6-7121-4be2-b479-7523f1b625f1'); $trouwenNL = new RequestType(); - //$trouwenNL->setId('2a0efa35-e911-44d9-8cf1-54bea575be81'); $trouwenNL->setSourceOrganization('000'); $trouwenNL->setName('Huwelijk / Partnerschap'); $trouwenNL->setDescription('Huwelijk / Partnerschap'); $manager->persist($trouwenNL); + $trouwenNL->setId($id); + $manager->persist($trouwenNL); + $manager->flush(); + $trouwenNL= $manager->getRepository('App:RequestType')->findOneBy(array('id'=> $id)); - $property= new Property(); - //$verhuizenNL->setId(''); - $property->setTitle('Melding '); - $property->setType('string'); - $property->setFormat('uri'); - $property->setDescription('Onder welke uri kunnen we de bestaande \'melding voorgenomen huwelijk\' terugvinden?'); - $property->setRequestType($trouwenNL); - $manager->persist($property); + $stage1= new Property(); + $stage1->setStart(true); + $stage1->setTitle('Type'); + $stage1->setIcon('fas fa-ring'); + $stage1->setSlug('ceremonies'); + $stage1->setType('string'); + $stage1->setFormat('strin'); + $stage1->setMaxLength('12'); + $stage1->setMinLength('7'); + $stage1->setEnum(['trouwen','partnerschap','omzetten']); + $stage1->setRequired(true); + $stage1->setDescription('Selecteer een huwelijk of partnerschap?'); + $stage1->setRequestType($trouwenNL); + $manager->persist($stage1); - $property= new Property(); - //$property->setId(''); - $property->setTitle('Datum'); - $property->setType('string'); - $property->setFormat('date'); - $property->setDescription('Selecteer een datum voor de omzetting naar huwelijk'); - $property->setRequestType($trouwenNL); - $manager->persist($property); + $stage2= new Property(); + $stage2->addPrevious($stage1); + $stage2->setTitle('Partners'); + $stage2->setIcon('fas fa-user-friends'); + $stage2->setSlug('partners'); + $stage2->setType('arrays'); + $stage2->setFormat('bsn'); + $stage2->setMinProperties(1); + $stage2->setMaxProperties(2); + $stage2->setRequired(true); + $stage2->setDescription('Wie zijn de getuigen van partner 2?'); + $stage2->setRequestType($trouwenNL); + $manager->persist($stage2); + + $stage3= new Property(); + $stage3->addPrevious($stage2); + $stage3->setTitle('Plechtigheid '); + $stage3->setIcon('fas fa-glass-cheers'); + $stage3->setSlug('plechtigheid'); + $stage3->setType('string'); + $stage3->setFormat('uri'); + $stage3->setDescription('Onder welke uri kunnen we de bestaande \'melding voorgenomen huwelijk\' terugvinden?'); + $stage3->setRequestType($trouwenNL); + $manager->persist($stage3); - $property= new Property(); - //$property->setId(''); - $property->setTitle('Type'); - $property->setType('string'); - $property->setFormat('strin'); - $property->setMaxLength('12'); - $property->setMinLength('7'); - $property->setEnum(['trouwen','partnerschap']); - $property->setRequired(true); - $property->setDescription('Selecteer een huwelijk of partnerschap?'); - $property->setRequestType($trouwenNL); - $manager->persist($property); + $stage4= new Property(); + $stage4->addPrevious($stage3); + $stage4->setTitle('Datum'); + $stage4->setIcon('fas fa-calendar-day'); + $stage4->setSlug('datum'); + $stage4->setType('string'); + $stage4->setFormat('date'); + $stage4->setDescription('Selecteer een datum voor de omzetting naar huwelijk'); + $stage4->setRequestType($trouwenNL); + $manager->persist($stage4); - $property= new Property(); - //$property->setId(''); - $property->setTitle('Partner 1'); - $property->setType('string'); - $property->setFormat('bsn'); - $property->setMaxLength('9'); - $property->setMinLength('9'); - $property->setRequired(true); - $property->setDescription('Wie is de eerste partner?'); - $property->setRequestType($trouwenNL); - $manager->persist($property); + $stage5= new Property(); + $stage5->addPrevious($stage4); + $stage5->setTitle('Locatie'); + $stage5->setIcon('fas fa-building'); + $stage5->setSlug('locaties'); + $stage5->setType('string'); + $stage5->setFormat('uri'); + $stage5->setMaxLength('255'); + $stage5->setRequired(true); + $stage5->setDescription('We gebruiken de order om de bestelling (bestaande uit locatie, ambtenaar en eventuele extra\'s) op te slaan'); + $stage5->setRequestType($trouwenNL); + $manager->persist($stage5); - $property= new Property(); - //$property->setId(''); - $property->setTitle('Partner 2'); - $property->setType('string'); - $property->setFormat('bsn'); - $property->setMaxLength('12'); - $property->setMinLength('7'); - $property->setRequired(true); - $property->setDescription('Wie is de tweede partner?'); - $property->setRequestType($trouwenNL); - $manager->persist($property); + $stage6= new Property(); + $stage6->addPrevious($stage5); + $stage6->setTitle('Ambtenaar'); + $stage6->setIcon('fas fa-user-tie'); + $stage6->setSlug('ambtenaren'); + $stage6->setType('string'); + $stage6->setFormat('uri'); + $stage6->setMaxLength('255'); + $stage6->setRequired(true); + $stage6->setDescription('We gebruiken de order om de bestelling (bestaande uit locatie, ambtenaar en eventuele extra\'s) op te slaan'); + $stage6->setRequestType($trouwenNL); + $manager->persist($stage6); - $property= new Property(); - //$property->setId(''); - $property->setTitle('Getuigen van partner 1'); - $property->setType('arrays'); - $property->setFormat('bsn'); - $property->setMaxLength('9'); - $property->setMinLength('9'); - $property->setRequired(true); - $property->setDescription('Wie zijn de getuigen van partner 1?'); - $property->setRequestType($trouwenNL); - $manager->persist($property); + $stage7= new Property(); + $stage7->addPrevious($stage6); + $stage7->setTitle('Getuigen'); + $stage7->setIcon('fas fa-users'); + $stage7->setSlug('getuigen'); + $stage7->setType('arrays'); + $stage7->setFormat('bsn'); + $stage7->setMinProperties(2); + $stage7->setMaxProperties(4); + $stage7->setRequired(true); + $stage7->setDescription('Wie zijn de getuigen van partner?'); + $stage7->setRequestType($trouwenNL); + $manager->persist($stage7); + + $stage8= new Property(); + $stage8->addPrevious($stage7); + $stage8->setTitle('Extras'); + $stage8->setIcon('fas fa-gift'); + $stage8->setSlug('extras'); + $stage8->setType('arrays'); + $stage8->setFormat('bsn'); + $stage8->setRequired(true); + $stage8->setDescription('Wie zijn de getuigen van partner?'); + $stage8->setRequestType($trouwenNL); + $manager->persist($stage8); + + $stage9= new Property(); + $stage9->addPrevious($stage8); + $stage9->setTitle('Melding '); + $stage9->setIcon('fas fa-envelope'); + $stage9->setSlug('melding'); + $stage9->setType('string'); + $stage9->setFormat('uri'); + $stage9->setDescription('Onder welke uri kunnen we de bestaande \'melding voorgenomen huwelijk\' terugvinden?'); + $stage9->setRequestType($trouwenNL); + $manager->persist($stage9); + + $stage10= new Property(); + $stage10->addPrevious($stage9); + $stage10->setTitle('Betalen '); + $stage10->setIcon('fas fa-envelope'); + $stage10->setSlug('betalen'); + $stage10->setType('string'); + $stage10->setFormat('uri'); + $stage10->setDescription('Onder welke uri kunnen we de bestaande \'melding voorgenomen huwelijk\' terugvinden?'); + $stage10->setRequestType($trouwenNL); + $manager->persist($stage10); + + $stage11= new Property(); + $stage11->addPrevious($stage10); + $stage11->setTitle('Reserveren '); + $stage11->setIcon('fas fa-calendar-check'); + $stage11->setSlug('checklist'); + $stage11->setDescription('Onder welke uri kunnen we de bestaande \'melding voorgenomen huwelijk\' terugvinden?'); + $stage11->setRequestType($trouwenNL); + $manager->persist($stage11); $property= new Property(); //$property->setId(''); - $property->setTitle('Getuigen2'); - $property->setType('arrays'); - $property->setFormat('bsn'); - $property->setMinProperties(1); - $property->setMaxProperties(2); + $property->setTitle('Order'); + $property->setType('string'); + $property->setFormat('uri'); + $property->setMaxLength('255'); $property->setRequired(true); - $property->setDescription('Wie zijn de getuigen van partner 2?'); + $property->setDescription('We gebruiken de order om de bestelling (bestaande uit locatie, ambtenaar en eventuele extra\'s) op te slaan'); $property->setRequestType($trouwenNL); $manager->persist($property); @@ -275,17 +345,6 @@ public function load(ObjectManager $manager) $trouwenUtrecht->setId($id); $manager->persist($trouwenUtrecht); - $property= new Property(); - //$property->setId(''); - $property->setTitle('Order'); - $property->setType('string'); - $property->setFormat('uri'); - $property->setMaxLength('255'); - $property->setRequired(true); - $property->setDescription('We gebruiken de order om de bestelling (bestaande uit locatie, ambtenaar en eventuele extra\'s) op te slaan'); - $property->setRequestType($trouwenNL); - $manager->persist($property); - $manager->flush(); } } diff --git a/api/src/Entity/Property.php b/api/src/Entity/Property.php index 9b5d3250..86dd09be 100644 --- a/api/src/Entity/Property.php +++ b/api/src/Entity/Property.php @@ -83,7 +83,7 @@ class Property * @Assert\Length(max = 255) * @Assert\Choice({"string", "integer", "boolean", "number","array"}) * @Groups({"read", "write"}) - * @ORM\Column(type="string", length=255) + * @ORM\Column(type="string", length=255, nullable=true) */ private $type; @@ -95,7 +95,7 @@ class Property * @Assert\Length(max = 255) * @Assert\Choice({"int32","int64","float","double","byte","binary","date","date-time","duration","password","boolean","string","uuid","uri","email","rsin","bag","bsn","iban","challenge","service","assent"}) * @Groups({"read", "write"}) - * @ORM\Column(type="string", length=255) + * @ORM\Column(type="string", length=255, nullable=true) */ private $format; @@ -464,9 +464,49 @@ class Property */ private $maxDate; + /** + * @ORM\ManyToOne(targetEntity="App\Entity\Property", inversedBy="previous") + */ + private $next; + + /** + * @ORM\OneToMany(targetEntity="App\Entity\Property", mappedBy="next") + */ + private $previous; + + /** + * @var string The icon of this property + * @example My Property + * + * @Assert\Length(min = 15, max = 255) + * @Groups({"read", "write"}) + * @ORM\Column(type="string", length=255, nullable=true) + */ + private $icon; + + /** + * @var string The slug of this property + * @example my-slug + * + * @Assert\Length(min = 15, max = 255) + * @Groups({"read", "write"}) + * @ORM\Column(type="string", length=255, nullable=true) + */ + private $slug; + + /** + * @var string Whether or not this proerty is the starting oint of a process + * @example true + * + * @Groups({"read", "write"}) + * @ORM\Column(type="boolean", nullable=true) + */ + private $start = false; + public function __construct() { $this->items = new ArrayCollection(); + $this->previous = new ArrayCollection(); } public function getId() @@ -1009,4 +1049,83 @@ public function setMaxDate(?string $maxDate): self return $this; } + + public function getNext(): ?self + { + return $this->next; + } + + public function setNext(?self $next): self + { + $this->next = $next; + + return $this; + } + + /** + * @return Collection|self[] + */ + public function getPrevious(): Collection + { + return $this->previous; + } + + public function addPrevious(self $previous): self + { + if (!$this->previous->contains($previous)) { + $this->previous[] = $previous; + $previous->setNext($this); + } + + return $this; + } + + public function removePrevious(self $previous): self + { + if ($this->previous->contains($previous)) { + $this->previous->removeElement($previous); + // set the owning side to null (unless already changed) + if ($previous->getNext() === $this) { + $previous->setNext(null); + } + } + + return $this; + } + + public function getIcon(): ?string + { + return $this->icon; + } + + public function setIcon(?string $icon): self + { + $this->icon = $icon; + + return $this; + } + + public function getSlug(): ?string + { + return $this->slug; + } + + public function setSlug(?string $slug): self + { + $this->slug = $slug; + + return $this; + } + + public function getStart(): ?bool + { + return $this->start; + } + + public function setStart(bool $start): self + { + $this->start = $start; + + return $this; + } } diff --git a/api/src/Entity/RequestType.php b/api/src/Entity/RequestType.php index 07d8026f..50a8f3c4 100644 --- a/api/src/Entity/RequestType.php +++ b/api/src/Entity/RequestType.php @@ -9,8 +9,9 @@ use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; -use Gedmo\Mapping\Annotation as Gedmo; +use Doctrine\Common\Collections\Criteria; use Doctrine\ORM\Mapping as ORM; +use Gedmo\Mapping\Annotation as Gedmo; use Symfony\Component\Serializer\Annotation\Groups; use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Serializer\Annotation\MaxDepth; @@ -103,6 +104,12 @@ class RequestType * @Assert\Valid */ private $properties; + + /** + * @Groups({"read"}) + * @MaxDepth(1) + */ + private $stages; /** * @var object $extends The requestType that this requestType extends @@ -293,5 +300,43 @@ public function setAvailableUntil(?\DateTimeInterface $availableUntil): self return $this; } + + + public function getStages() + { + $stages = []; + $stage = $this->getFirstStage(); + while ($stage){ + + $array = [ + "name"=>$stage->getName(), + "description"=>$stage->getDescription(), + "icon"=>$stage->getIcon(), + "slug"=>$stage->getSlug() + ]; + + if($stage->getNext()){ + $array["next"] = $stage->getNext()->getSlug(); + } + + if($stage->getPrevious()->first()){ + $array["previous"] = $stage->getPrevious()->first()->getSlug(); + } + + $stages[] = $array; + + $stage = $stage->getNext(); + } + + return $stages; + } + + public function getFirstStage() + { + $criteria = Criteria::create() + ->andWhere(Criteria::expr()->eq('start', true)); + + return $this->getProperties()->matching($criteria)->first(); + } } diff --git a/api/src/Repository/RequestTypeRepository.php b/api/src/Repository/RequestTypeRepository.php index cc71d1da..514acf73 100644 --- a/api/src/Repository/RequestTypeRepository.php +++ b/api/src/Repository/RequestTypeRepository.php @@ -4,7 +4,7 @@ use App\Entity\RequestType; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; -use Symfony\Bridge\Doctrine\RegistryInterface; +use Doctrine\Persistence\ManagerRegistry; /** * @method RequestType|null find($id, $lockMode = null, $lockVersion = null) @@ -14,7 +14,7 @@ */ class RequestTypeRepository extends ServiceEntityRepository { - public function __construct(RegistryInterface $registry) + public function __construct(ManagerRegistry $registry) { parent::__construct($registry, RequestType::class); }