Slack notify

This commit is contained in:
Marko 2023-06-14 17:02:24 +02:00
parent 0579a62931
commit 30a8e73f21
No known key found for this signature in database
33 changed files with 1334 additions and 1137 deletions

11
.env
View File

@ -24,16 +24,17 @@ APP_SECRET=e5a2fe31ff8ce325266d52632a0ba5df
# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml
#
# DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
DATABASE_URL="mysql://db:db@db:3306/db?serverVersion=mariadb-10.4.11&charset=utf8mb4"
#DATABASE_URL="postgresql://symfony:ChangeMe@127.0.0.1:5432/app?serverVersion=13&charset=utf8"
# DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=8&charset=utf8mb4"
DATABASE_URL="postgresql://app:!ChangeMe!@127.0.0.1:5432/app?serverVersion=15&charset=utf8"
###< doctrine/doctrine-bundle ###
###> nelmio/cors-bundle ###
CORS_ALLOW_ORIGIN='^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$'
###< nelmio/cors-bundle ###
SHOPWARE_API_URL="ddev-flex-web"
SHOPWARE_API_URL="http://flex.ddev.site/"
SHOPWARE_API_ID="SWIAB21GBEHEU0DLVKNIRE5CDG"
SHOPWARE_API_KEY="NWIwbjRFNWNXU1d0WUtMTUpzRU05OFVIZ1N4MFdwYUdHVjhTdWk"
###> symfony/slack-notifier ###
# SLACK_DSN=slack://TOKEN@default?channel=CHANNEL
###< symfony/slack-notifier ###

View File

@ -1,38 +0,0 @@
# In all environments, the following files are loaded if they exist,
# the latter taking precedence over the former:
#
# * .env contains default values for the environment variables needed by the app
# * .env.local uncommitted file with local overrides
# * .env.$APP_ENV committed environment-specific defaults
# * .env.$APP_ENV.local uncommitted environment-specific overrides
#
# Real environment variables win over .env files.
#
# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES.
# https://symfony.com/doc/current/configuration/secrets.html
#
# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2).
# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration
###> symfony/framework-bundle ###
APP_ENV=dev
APP_SECRET=e5a2fe31ff8ce325266d52632a0ba5df
###< symfony/framework-bundle ###
###> doctrine/doctrine-bundle ###
# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml
#
# DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
DATABASE_URL="mysql://root:root@mysql:3306/cds_connector?serverVersion=5.7&charset=utf8mb4"
#DATABASE_URL="postgresql://symfony:ChangeMe@127.0.0.1:5432/app?serverVersion=13&charset=utf8"
###< doctrine/doctrine-bundle ###
###> nelmio/cors-bundle ###
CORS_ALLOW_ORIGIN='^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$'
###< nelmio/cors-bundle ###
SHOPWARE_API_URL="development.dev.localhost"
SHOPWARE_API_KEY="S2hySDNyZ214dGRVQmFBSURQbkRvajIyZldxOHB4RktZakxaYmo"
SHOPWARE_API_ID="SWUAB1JGAFHTMME5DUGWDWN1EQ"

10
.gitignore vendored
View File

@ -64,3 +64,13 @@
/phpunit.xml
.phpunit.result.cache
###< phpunit/phpunit ###
###> symfony/framework-bundle ###
/.env.local
/.env.local.php
/.env.*.local
/config/secrets/prod/prod.decrypt.private.php
/public/bundles/
/var/
/vendor/
###< symfony/framework-bundle ###

View File

@ -22,32 +22,22 @@
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-timer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpstan/phpdoc-parser" />
<excludeFolder url="file://$MODULE_DIR$/vendor/laminas/laminas-code" />
<excludeFolder url="file://$MODULE_DIR$/vendor/vin-sw/shopware-sdk" />
<excludeFolder url="file://$MODULE_DIR$/vendor/myclabs/deep-copy" />
<excludeFolder url="file://$MODULE_DIR$/vendor/monolog/monolog" />
<excludeFolder url="file://$MODULE_DIR$/vendor/nikic/php-parser" />
<excludeFolder url="file://$MODULE_DIR$/vendor/twig/twig" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sensio/framework-extra-bundle" />
<excludeFolder url="file://$MODULE_DIR$/vendor/nelmio/cors-bundle" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-client" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/link" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-factory" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/log" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/event-dispatcher" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/cache" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/container" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-message" />
<excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/reflection-docblock" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/type-resolver" />
<excludeFolder url="file://$MODULE_DIR$/vendor/api-platform/core" />
<excludeFolder url="file://$MODULE_DIR$/vendor/masterminds/html5" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/reflection-common" />
<excludeFolder url="file://$MODULE_DIR$/vendor/friendsofphp/proxy-manager-lts" />
<excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/psr7" />
<excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/promises" />
<excludeFolder url="file://$MODULE_DIR$/vendor/willdurand/negotiation" />
<excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/guzzle" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/exporter" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/environment" />
<excludeFolder url="file://$MODULE_DIR$/vendor/webmozart/assert" />
@ -67,7 +57,6 @@
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/doctrine-bundle" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/deprecations" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/comparator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/ralouphie/getallheaders" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/event-manager" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/orm" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/sql-formatter" />
@ -110,7 +99,6 @@
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/twig-bundle" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/css-selector" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-intl-normalizer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/web-link" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/event-dispatcher-contracts" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/maker-bundle" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/security-csrf" />
@ -132,6 +120,15 @@
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/monolog-bridge" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/browser-kit" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/asset" />
<excludeFolder url="file://$MODULE_DIR$/.ddev/.dbimageBuild" />
<excludeFolder url="file://$MODULE_DIR$/.ddev/.global_commands" />
<excludeFolder url="file://$MODULE_DIR$/.ddev/.homeadditions" />
<excludeFolder url="file://$MODULE_DIR$/.ddev/.webimageBuild" />
<excludeFolder url="file://$MODULE_DIR$/.ddev/db_snapshots" />
<excludeFolder url="file://$MODULE_DIR$/.idea/dataSources" />
<excludeFolder url="file://$MODULE_DIR$/var/cache/dev" />
<excludeFolder url="file://$MODULE_DIR$/var/cache/prod" />
<excludeFolder url="file://$MODULE_DIR$/vendor" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />

View File

@ -8,13 +8,13 @@
<jdbc-url>jdbc:mysql://127.0.0.1:3306</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
<data-source source="LOCAL" name="DDEV" uuid="096edb5d-73f9-4ef4-b462-f3f8e939a139">
<data-source source="LOCAL" name="DDEV" uuid="8ac40044-b481-45b8-bfa3-0285dc801252">
<driver-ref>mariadb</driver-ref>
<synchronize>true</synchronize>
<configured-by-url>true</configured-by-url>
<remarks>DDEV generated data source</remarks>
<jdbc-driver>org.mariadb.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mariadb://127.0.0.1:32836/db?user=db&amp;password=db</jdbc-url>
<jdbc-url>jdbc:mariadb://127.0.0.1:51951/db?user=db&amp;password=db</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
</component>

View File

@ -28,32 +28,22 @@
<path value="$PROJECT_DIR$/vendor/phpunit/php-timer" />
<path value="$PROJECT_DIR$/vendor/phpstan/phpdoc-parser" />
<path value="$PROJECT_DIR$/vendor/laminas/laminas-code" />
<path value="$PROJECT_DIR$/vendor/vin-sw/shopware-sdk" />
<path value="$PROJECT_DIR$/vendor/myclabs/deep-copy" />
<path value="$PROJECT_DIR$/vendor/monolog/monolog" />
<path value="$PROJECT_DIR$/vendor/nikic/php-parser" />
<path value="$PROJECT_DIR$/vendor/twig/twig" />
<path value="$PROJECT_DIR$/vendor/sensio/framework-extra-bundle" />
<path value="$PROJECT_DIR$/vendor/nelmio/cors-bundle" />
<path value="$PROJECT_DIR$/vendor/psr/http-client" />
<path value="$PROJECT_DIR$/vendor/psr/link" />
<path value="$PROJECT_DIR$/vendor/psr/http-factory" />
<path value="$PROJECT_DIR$/vendor/psr/log" />
<path value="$PROJECT_DIR$/vendor/psr/event-dispatcher" />
<path value="$PROJECT_DIR$/vendor/psr/cache" />
<path value="$PROJECT_DIR$/vendor/psr/container" />
<path value="$PROJECT_DIR$/vendor/psr/http-message" />
<path value="$PROJECT_DIR$/vendor/composer" />
<path value="$PROJECT_DIR$/vendor/phpdocumentor/reflection-docblock" />
<path value="$PROJECT_DIR$/vendor/phpdocumentor/type-resolver" />
<path value="$PROJECT_DIR$/vendor/api-platform/core" />
<path value="$PROJECT_DIR$/vendor/masterminds/html5" />
<path value="$PROJECT_DIR$/vendor/phpdocumentor/reflection-common" />
<path value="$PROJECT_DIR$/vendor/friendsofphp/proxy-manager-lts" />
<path value="$PROJECT_DIR$/vendor/guzzlehttp/psr7" />
<path value="$PROJECT_DIR$/vendor/guzzlehttp/promises" />
<path value="$PROJECT_DIR$/vendor/willdurand/negotiation" />
<path value="$PROJECT_DIR$/vendor/guzzlehttp/guzzle" />
<path value="$PROJECT_DIR$/vendor/sebastian/exporter" />
<path value="$PROJECT_DIR$/vendor/sebastian/environment" />
<path value="$PROJECT_DIR$/vendor/webmozart/assert" />
@ -73,7 +63,6 @@
<path value="$PROJECT_DIR$/vendor/doctrine/doctrine-bundle" />
<path value="$PROJECT_DIR$/vendor/doctrine/deprecations" />
<path value="$PROJECT_DIR$/vendor/sebastian/comparator" />
<path value="$PROJECT_DIR$/vendor/ralouphie/getallheaders" />
<path value="$PROJECT_DIR$/vendor/doctrine/event-manager" />
<path value="$PROJECT_DIR$/vendor/doctrine/orm" />
<path value="$PROJECT_DIR$/vendor/doctrine/sql-formatter" />
@ -116,7 +105,6 @@
<path value="$PROJECT_DIR$/vendor/symfony/twig-bundle" />
<path value="$PROJECT_DIR$/vendor/symfony/css-selector" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-intl-normalizer" />
<path value="$PROJECT_DIR$/vendor/symfony/web-link" />
<path value="$PROJECT_DIR$/vendor/symfony/event-dispatcher-contracts" />
<path value="$PROJECT_DIR$/vendor/symfony/maker-bundle" />
<path value="$PROJECT_DIR$/vendor/symfony/security-csrf" />
@ -138,12 +126,22 @@
<path value="$PROJECT_DIR$/vendor/symfony/monolog-bridge" />
<path value="$PROJECT_DIR$/vendor/symfony/browser-kit" />
<path value="$PROJECT_DIR$/vendor/symfony/asset" />
<path value="$PROJECT_DIR$/vendor/symfony/notifier" />
<path value="$PROJECT_DIR$/vendor/league/csv" />
<path value="$PROJECT_DIR$/vendor/symfony/process" />
<path value="$PROJECT_DIR$/vendor/api-platform/core" />
<path value="$PROJECT_DIR$/vendor/symfony/web-link" />
<path value="$PROJECT_DIR$/vendor/willdurand/negotiation" />
<path value="$PROJECT_DIR$/vendor/psr/link" />
<path value="$PROJECT_DIR$/vendor/symfony/http-client-contracts" />
<path value="$PROJECT_DIR$/vendor/symfony/slack-notifier" />
<path value="$PROJECT_DIR$/vendor/symfony/http-client" />
</include_path>
</component>
<component name="PhpInterpreters">
<interpreters>
<interpreter id="64ff8bd0-da32-4db6-9020-b3f9551fc212" name="DDEV" home="docker-compose://DATA" debugger_id="php.debugger.XDebug">
<remote_data INTERPRETER_PATH="php8.2" HELPERS_PATH="/opt/.phpstorm_helpers" INITIALIZED="false" VALID="true" RUN_AS_ROOT_VIA_SUDO="false" DOCKER_ACCOUNT_NAME="Docker" DOCKER_COMPOSE_SERVICE_NAME="web" DOCKER_REMOTE_PROJECT_PATH="/opt/project">
<interpreter id="64ff8bd0-da32-4db6-9020-b3f9551fc212" name="DDEV" home="docker-compose://DATA" false="false" debugger_id="php.debugger.XDebug">
<remote_data INTERPRETER_PATH="php8.2" HELPERS_PATH="/opt/.phpstorm_helpers" VALID="true" RUN_AS_ROOT_VIA_SUDO="false" DOCKER_ACCOUNT_NAME="Docker" DOCKER_COMPOSE_SERVICE_NAME="web" DOCKER_REMOTE_PROJECT_PATH="/opt/project">
<PathMappingSettings>
<option name="pathMappings">
<list>

View File

@ -15,6 +15,9 @@ Connector zwischen Hiltes und Shopware 6
Installiere Abhängigkeiten
> make install
Erstelle .env.local Datei und füge folgendes ein:
> DATABASE_URL=mysql://root:root@mysql:3306/cds_connector
Starte MySQL-Server:
> docker compose up

View File

@ -7,11 +7,12 @@
"php": ">=8.1",
"ext-ctype": "*",
"ext-iconv": "*",
"api-platform/core": "^2.6",
"api-platform/core": "^3.1",
"doctrine/annotations": "^1.0",
"doctrine/doctrine-bundle": "^2.7",
"doctrine/doctrine-migrations-bundle": "^3.2",
"doctrine/orm": "^2.12",
"league/csv": "^9.0",
"nelmio/cors-bundle": "^2.2",
"phpdocumentor/reflection-docblock": "^5.3",
"phpstan/phpdoc-parser": "^1.6",
@ -24,23 +25,24 @@
"symfony/flex": "^2",
"symfony/form": "6.1.*",
"symfony/framework-bundle": "6.1.*",
"symfony/notifier": "6.1.*",
"symfony/property-access": "6.1.*",
"symfony/property-info": "6.1.*",
"symfony/proxy-manager-bridge": "6.1.*",
"symfony/runtime": "6.1.*",
"symfony/security-bundle": "6.1.*",
"symfony/serializer": "6.1.*",
"symfony/slack-notifier": "6.1.*",
"symfony/twig-bundle": "6.1.*",
"symfony/validator": "6.1.*",
"symfony/yaml": "6.1.*",
"vin-sw/shopware-sdk": "^1.4"
"symfony/yaml": "6.1.*"
},
"require-dev": {
"phpunit/phpunit": "^9",
"symfony/browser-kit": "6.1.*",
"symfony/css-selector": "6.1.*",
"symfony/debug-bundle": "6.1.*",
"symfony/maker-bundle": "^1.43",
"symfony/maker-bundle": "^1.48",
"symfony/monolog-bundle": "^3.0",
"symfony/phpunit-bridge": "^6.1",
"symfony/stopwatch": "6.1.*",

1626
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -11,6 +11,6 @@ return [
Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true],
Nelmio\CorsBundle\NelmioCorsBundle::class => ['all' => true],
ApiPlatform\Core\Bridge\Symfony\Bundle\ApiPlatformBundle::class => ['all' => true],
Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true],
ApiPlatform\Symfony\Bundle\ApiPlatformBundle::class => ['all' => true],
];

View File

@ -1,39 +0,0 @@
api_platform:
title: CDS Connector API
version: 1.0.0
mapping:
paths: ['%kernel.project_dir%/src/Entity']
patch_formats:
json: ['application/merge-patch+json']
swagger:
versions: [3]
formats:
json: [ 'application/json' ]
jsonld: [ 'application/ld+json' ]
html: [ 'text/html' ]
multipart: [ 'multipart/form-data' ]
allow_plain_identifiers: true
oauth:
# To enable or disable OAuth.
enabled: false
# The OAuth client ID.
clientId: 'cycro'
# The OAuth client secret.
clientSecret: 'cycro123'
# The OAuth type.
type: 'oauth2'
# The OAuth flow grant type.
flow: 'application'
# The OAuth token URL.
tokenUrl: '/oauth/v2/token'
# The OAuth authentication URL.
authorizationUrl: '/oauth/v2/auth'
# The OAuth scopes.
scopes: []

View File

@ -1,9 +1,6 @@
# see https://symfony.com/doc/current/reference/configuration/framework.html
framework:
secret: '%env(APP_SECRET)%'
# SHOPWARE_API_URL: '%env(string:SHOPWARE_API_URL)%'
# SHOPWARE_API_KEY: '%env(string:SHOPWARE_API_KEY)%'
# SHOPWARE_API_ID: '%env(string:SHOPWARE_API_ID)%'
#csrf_protection: true
http_method_override: false

View File

@ -0,0 +1,16 @@
framework:
notifier:
chatter_transports:
slack: '%env(SLACK_DSN)%'
# telegram: '%env(TELEGRAM_DSN)%'
#texter_transports:
# twilio: '%env(TWILIO_DSN)%'
# nexmo: '%env(NEXMO_DSN)%'
channel_policy:
# use chat/slack, chat/telegram, sms/twilio or sms/nexmo
urgent: ['slack']
high: ['slack']
medium: ['email']
low: ['email']
admin_recipients:
- { email: admin@example.com }

View File

@ -4,15 +4,6 @@
# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices.html#use-parameters-for-application-configuration
parameters:
# the secret key used to generate tokens
# you should change it to a secret key that is not public
# see https://symfony.com/doc/current/security/token_storage.html#secrets-in-symfony-secrets-v3
# the url of the shopware api
SHOPWARE_API_URL: '%env(SHOPWARE_API_URL)%'
# the api key of the shopware api
SHOPWARE_API_KEY: '%env(SHOPWARE_API_KEY)%'
# the api id of the shopware api
SHOPWARE_API_ID: '%env(SHOPWARE_API_ID)%'
services:
# default configuration for services in *this* file

View File

@ -2,7 +2,7 @@ version: '3'
services:
###> doctrine/doctrine-bundle ###
# database:
# ports:
# - "5432"
database:
ports:
- "5432"
###< doctrine/doctrine-bundle ###

View File

@ -18,3 +18,22 @@ services:
restart: always
ports:
- 8080:8080
###> doctrine/doctrine-bundle ###
database:
image: postgres:${POSTGRES_VERSION:-15}-alpine
environment:
POSTGRES_DB: ${POSTGRES_DB:-app}
# You should definitely change the password in production
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-!ChangeMe!}
POSTGRES_USER: ${POSTGRES_USER:-app}
volumes:
- database_data:/var/lib/postgresql/data:rw
# You may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data!
# - ./docker/db/data:/var/lib/postgresql/data:rw
###< doctrine/doctrine-bundle ###
volumes:
###> doctrine/doctrine-bundle ###
database_data:
###< doctrine/doctrine-bundle ###

View File

@ -1,72 +1,79 @@
/* open-sans-cyrillic-ext-400-normal*/
/* open-sans-cyrillic-ext-400-normal */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-display: swap;
font-display: var(--fontsource-display, swap);
font-weight: 400;
src: url('./files/open-sans-cyrillic-ext-400-normal.woff2') format('woff2'), url('./files/open-sans-all-400-normal.woff') format('woff');
src: url(./files/open-sans-cyrillic-ext-400-normal.woff2) format('woff2'), url(./files/open-sans-cyrillic-ext-400-normal.woff) format('woff');
unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
}
/* open-sans-cyrillic-400-normal*/
/* open-sans-cyrillic-400-normal */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-display: swap;
font-display: var(--fontsource-display, swap);
font-weight: 400;
src: url('./files/open-sans-cyrillic-400-normal.woff2') format('woff2'), url('./files/open-sans-all-400-normal.woff') format('woff');
src: url(./files/open-sans-cyrillic-400-normal.woff2) format('woff2'), url(./files/open-sans-cyrillic-400-normal.woff) format('woff');
unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}
/* open-sans-greek-ext-400-normal*/
/* open-sans-greek-ext-400-normal */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-display: swap;
font-display: var(--fontsource-display, swap);
font-weight: 400;
src: url('./files/open-sans-greek-ext-400-normal.woff2') format('woff2'), url('./files/open-sans-all-400-normal.woff') format('woff');
src: url(./files/open-sans-greek-ext-400-normal.woff2) format('woff2'), url(./files/open-sans-greek-ext-400-normal.woff) format('woff');
unicode-range: U+1F00-1FFF;
}
/* open-sans-greek-400-normal*/
/* open-sans-greek-400-normal */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-display: swap;
font-display: var(--fontsource-display, swap);
font-weight: 400;
src: url('./files/open-sans-greek-400-normal.woff2') format('woff2'), url('./files/open-sans-all-400-normal.woff') format('woff');
src: url(./files/open-sans-greek-400-normal.woff2) format('woff2'), url(./files/open-sans-greek-400-normal.woff) format('woff');
unicode-range: U+0370-03FF;
}
/* open-sans-hebrew-400-normal*/
/* open-sans-hebrew-400-normal */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-display: swap;
font-display: var(--fontsource-display, swap);
font-weight: 400;
src: url('./files/open-sans-hebrew-400-normal.woff2') format('woff2'), url('./files/open-sans-all-400-normal.woff') format('woff');
src: url(./files/open-sans-hebrew-400-normal.woff2) format('woff2'), url(./files/open-sans-hebrew-400-normal.woff) format('woff');
unicode-range: U+0590-05FF,U+200C-2010,U+20AA,U+25CC,U+FB1D-FB4F;
}
/* open-sans-vietnamese-400-normal*/
/* open-sans-vietnamese-400-normal */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-display: swap;
font-display: var(--fontsource-display, swap);
font-weight: 400;
src: url('./files/open-sans-vietnamese-400-normal.woff2') format('woff2'), url('./files/open-sans-all-400-normal.woff') format('woff');
unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB;
src: url(./files/open-sans-vietnamese-400-normal.woff2) format('woff2'), url(./files/open-sans-vietnamese-400-normal.woff) format('woff');
unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}
/* open-sans-latin-ext-400-normal*/
/* open-sans-latin-ext-400-normal */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-display: swap;
font-display: var(--fontsource-display, swap);
font-weight: 400;
src: url('./files/open-sans-latin-ext-400-normal.woff2') format('woff2'), url('./files/open-sans-all-400-normal.woff') format('woff');
unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
src: url(./files/open-sans-latin-ext-400-normal.woff2) format('woff2'), url(./files/open-sans-latin-ext-400-normal.woff) format('woff');
unicode-range: U+0100-02AF,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
/* open-sans-latin-400-normal*/
/* open-sans-latin-400-normal */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-display: swap;
font-display: var(--fontsource-display, swap);
font-weight: 400;
src: url('./files/open-sans-latin-400-normal.woff2') format('woff2'), url('./files/open-sans-all-400-normal.woff') format('woff');
unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
src: url(./files/open-sans-latin-400-normal.woff2) format('woff2'), url(./files/open-sans-latin-400-normal.woff) format('woff');
unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}

View File

@ -1,72 +1,79 @@
/* open-sans-cyrillic-ext-700-normal*/
/* open-sans-cyrillic-ext-700-normal */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-display: swap;
font-display: var(--fontsource-display, swap);
font-weight: 700;
src: url('./files/open-sans-cyrillic-ext-700-normal.woff2') format('woff2'), url('./files/open-sans-all-700-normal.woff') format('woff');
src: url(./files/open-sans-cyrillic-ext-700-normal.woff2) format('woff2'), url(./files/open-sans-cyrillic-ext-700-normal.woff) format('woff');
unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
}
/* open-sans-cyrillic-700-normal*/
/* open-sans-cyrillic-700-normal */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-display: swap;
font-display: var(--fontsource-display, swap);
font-weight: 700;
src: url('./files/open-sans-cyrillic-700-normal.woff2') format('woff2'), url('./files/open-sans-all-700-normal.woff') format('woff');
src: url(./files/open-sans-cyrillic-700-normal.woff2) format('woff2'), url(./files/open-sans-cyrillic-700-normal.woff) format('woff');
unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}
/* open-sans-greek-ext-700-normal*/
/* open-sans-greek-ext-700-normal */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-display: swap;
font-display: var(--fontsource-display, swap);
font-weight: 700;
src: url('./files/open-sans-greek-ext-700-normal.woff2') format('woff2'), url('./files/open-sans-all-700-normal.woff') format('woff');
src: url(./files/open-sans-greek-ext-700-normal.woff2) format('woff2'), url(./files/open-sans-greek-ext-700-normal.woff) format('woff');
unicode-range: U+1F00-1FFF;
}
/* open-sans-greek-700-normal*/
/* open-sans-greek-700-normal */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-display: swap;
font-display: var(--fontsource-display, swap);
font-weight: 700;
src: url('./files/open-sans-greek-700-normal.woff2') format('woff2'), url('./files/open-sans-all-700-normal.woff') format('woff');
src: url(./files/open-sans-greek-700-normal.woff2) format('woff2'), url(./files/open-sans-greek-700-normal.woff) format('woff');
unicode-range: U+0370-03FF;
}
/* open-sans-hebrew-700-normal*/
/* open-sans-hebrew-700-normal */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-display: swap;
font-display: var(--fontsource-display, swap);
font-weight: 700;
src: url('./files/open-sans-hebrew-700-normal.woff2') format('woff2'), url('./files/open-sans-all-700-normal.woff') format('woff');
src: url(./files/open-sans-hebrew-700-normal.woff2) format('woff2'), url(./files/open-sans-hebrew-700-normal.woff) format('woff');
unicode-range: U+0590-05FF,U+200C-2010,U+20AA,U+25CC,U+FB1D-FB4F;
}
/* open-sans-vietnamese-700-normal*/
/* open-sans-vietnamese-700-normal */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-display: swap;
font-display: var(--fontsource-display, swap);
font-weight: 700;
src: url('./files/open-sans-vietnamese-700-normal.woff2') format('woff2'), url('./files/open-sans-all-700-normal.woff') format('woff');
unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB;
src: url(./files/open-sans-vietnamese-700-normal.woff2) format('woff2'), url(./files/open-sans-vietnamese-700-normal.woff) format('woff');
unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}
/* open-sans-latin-ext-700-normal*/
/* open-sans-latin-ext-700-normal */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-display: swap;
font-display: var(--fontsource-display, swap);
font-weight: 700;
src: url('./files/open-sans-latin-ext-700-normal.woff2') format('woff2'), url('./files/open-sans-all-700-normal.woff') format('woff');
unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
src: url(./files/open-sans-latin-ext-700-normal.woff2) format('woff2'), url(./files/open-sans-latin-ext-700-normal.woff) format('woff');
unicode-range: U+0100-02AF,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
/* open-sans-latin-700-normal*/
/* open-sans-latin-700-normal */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-display: swap;
font-display: var(--fontsource-display, swap);
font-weight: 700;
src: url('./files/open-sans-latin-700-normal.woff2') format('woff2'), url('./files/open-sans-all-700-normal.woff') format('woff');
unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
src: url(./files/open-sans-latin-700-normal.woff2) format('woff2'), url(./files/open-sans-latin-700-normal.woff) format('woff');
unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -25,12 +25,13 @@ function updateURL() {
history.replaceState(null, null, newSearch);
}
function graphQLFetcher(graphQLParams) {
function graphQLFetcher(graphQLParams, {headers}) {
return fetch(entrypoint, {
method: 'post',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
'Content-Type': 'application/json',
...headers
},
body: JSON.stringify(graphQLParams),
credentials: 'include'

View File

@ -42,6 +42,10 @@ header #logo img {
background-color: rgba(40, 134, 144, .4)
}
.svg-icons {
position:absolute;width:0;height:0
}
/** WEBBY AND WEB **/
.web, .webby {

View File

@ -0,0 +1,82 @@
<?php
namespace App\Command;
use App\Helper\HiltesImport;
use App\Helper\Jtl;
use App\Repository\ProductRepository;
use App\Repository\StockRepository;
use App\Repository\WarehouseRepository;
use Psr\Log\LoggerInterface;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
#[AsCommand(
name: 'jtl:export',
description: 'Create a export file for JTL Ameise',
)]
class JtlExportCommand extends Command
{
private $stockRepository;
private $warehouseRepository;
private $productRepository;
private $logger;
public function __construct(
ProductRepository $productRepository,
StockRepository $stockRepository,
WarehouseRepository $warehouseRepository,
LoggerInterface $logger
)
{
$this->productRepository = $productRepository;
$this->stockRepository = $stockRepository;
$this->warehouseRepository = $warehouseRepository;
$this->logger = $logger;
parent::__construct();
}
protected function configure(): void
{
$this
->addArgument('arg1', InputArgument::OPTIONAL, 'Argument description')
->addOption('option1', null, InputOption::VALUE_NONE, 'Option description')
;
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
// $arg1 = $input->getArgument('arg1');
//
// if ($arg1) {
// $io->note(sprintf('You passed an argument: %s', $arg1));
// }
//
// if ($input->getOption('option1')) {
// // ...
// }
$io = new SymfonyStyle($input, $output);
$io->success('Start JTL Export');
/**
* @var HiltesImport
*/
$jtl = new Jtl($this->productRepository,$this->warehouseRepository,$this->stockRepository,$this->logger);
$data = $jtl->getProducts();
$jtl->createExportFile($data);
$io->success('Ende JTL Export');
return Command::SUCCESS;
}
}

View File

@ -0,0 +1,60 @@
<?php
namespace App\Command;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use Symfony\Component\Notifier\Chatter;
use Symfony\Component\Notifier\Message\ChatMessage;
use Symfony\Component\Notifier\ChatterInterface;
use Symfony\Component\Notifier\Transport;
#[AsCommand(
name: 'jtl:import',
description: 'Add a short description for your command',
)]
class JtlImportCommand extends Command
{
protected function configure(): void
{
$this
->addArgument('arg1', InputArgument::OPTIONAL, 'Argument description')
->addOption('option1', null, InputOption::VALUE_NONE, 'Option description')
;
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$arg1 = $input->getArgument('arg1');
if ($arg1) {
$io->note(sprintf('You passed an argument: %s', $arg1));
}
if ($input->getOption('option1')) {
// ...
}
$chatter = new Chatter(new Transport('xoxb-1234-56789abcdefghijklmnopqrstuv'));
$message = (new ChatMessage('You got a new invoice for 15 EUR.'))
// if not set explicitly, the message is sent to the
// default transport (the first one configured)
->transport('slack');
$sentMessage = $chatter->send($message);
$io->success('You have a new command! Now make it your own! Pass --help to see your options.');
return Command::SUCCESS;
}
}

View File

@ -3,7 +3,7 @@
namespace App\Command;
use App\Controller\ShopwareController;
use App\Entity\Orders;
use App\Entity\Order;
use App\Helper\Shopware;
use App\Repository\OrdersRepository;
@ -32,17 +32,17 @@ use Vin\ShopwareSdk\Factory\RepositoryFactory;
)]
class SwGetOrdersCommand extends Command
{
private $ordersRepository;
private $orderRepository;
private $logger;
private $sw;
private $orderData;
public function __construct(OrdersRepository $ordersRepository, LoggerInterface $logger)
public function __construct(OrdersRepository $orderRepository, LoggerInterface $logger)
{
$this->ordersRepository = $ordersRepository;
$this->orderRepository = $orderRepository;
$this->logger = $logger;
$this->sw = new Shopware();
$this->sw = new Shopware($logger);
parent::__construct();
}
@ -82,7 +82,7 @@ class SwGetOrdersCommand extends Command
*/
private function getOrders():array
{
return $this->ordersRepository->findAll();
return $this->orderRepository->findAll();
}
/**

View File

@ -4,6 +4,7 @@ namespace App\Entity;
use ApiPlatform\Metadata\ApiResource;
use App\Repository\ProductRepository;
use App\Repository\StockRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
@ -93,4 +94,11 @@ class Product
return $this;
}
public function setStock(Stock $stock): self
{
$this->stock = $stock;
return $this;
}
}

View File

@ -0,0 +1,52 @@
<?php
namespace App\EventSubscriber;
use ApiPlatform\Symfony\EventListener\EventPriorities;
use App\Helper\Slack;
use App\Entity\Order;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Notifier\ChatterInterface;
class SlackNotifySubscriber implements EventSubscriberInterface
{
/**
* @var Slack
*/
public $slack;
public function __construct(ChatterInterface $chatter)
{
$this->slack = new Slack($chatter);
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::VIEW => ['sendSlack', EventPriorities::POST_WRITE],
];
}
/**
* @param ViewEvent $event
* @return void
*/
public function sendSlack(ViewEvent $event): void
{
$order = $event->getControllerResult();
$method = $event->getRequest()->getMethod();
//wenn es keine Bestellung ist oder es kein POST Request ist, dann return
if (!$order instanceof Order || Request::METHOD_POST !== $method) {
return;
}
$msg = "Order {$order->getId()} has been created: {$order->getStatus()}";
$this->slack->sendMessage($msg);
}
}

85
src/Helper/Jtl.php Normal file
View File

@ -0,0 +1,85 @@
<?php
namespace App\Helper;
use App\Repository\ProductRepository;
use App\Repository\StockRepository;
use App\Repository\WarehouseRepository;
use Psr\Log\LoggerInterface;
use League\Csv\Writer;
class Jtl
{
private $productRepository;
private $stockRepository;
private $warehouseRepository;
private $logger;
public function __construct(ProductRepository $productRepository,WarehouseRepository $warehouseRepository,StockRepository $stockRepository, LoggerInterface $logger)
{
$this->productRepository = $productRepository;
$this->warehouseRepository = $warehouseRepository;
$this->stockRepository = $stockRepository;
$this->logger = $logger;
}
/**
* Holt alle Produkte und deren Lagerbestände
* @return array
*/
public function getProducts(): array
{
$r = $this->productRepository->findAll();
$data = array();
foreach($r as $product){
$stock = $this->stockRepository->findBy(['product_id'=>$product->getId()]);
if($stock){
foreach($stock as $s){
$warehouse = $s->getWarehouse();
$warehouseId = $warehouse->getId();
$data[$product->getId().$warehouseId] = [
'gtin' => $product->getGtin(),
'stock' => $s->getInstock(),
'warehouse' => $warehouseId
];
}
}else{
$data[$product->getId()] = [
'gtin' => $product->getGtin(),
'stock' => 0,
'warehouse' => 0
];
$this->logger->info('No stock for product '.$product->getId());
}
// dump($data);
}
return $data;
}
/**
* @param $data
* @return void
*/
public function createExportFile($data): void
{
try {
$writer = Writer::createFromPath('./jtl/cds-export.csv', 'x');
$writer->insertAll(new \ArrayIterator($data));
}catch (\Exception $e){
$this->logger->error($e->getMessage());
}
}
}

32
src/Helper/Slack.php Normal file
View File

@ -0,0 +1,32 @@
<?php
namespace App\Helper;
use Symfony\Component\Notifier\Chatter;
use Symfony\Component\Notifier\ChatterInterface;
use Symfony\Component\Notifier\Exception\TransportExceptionInterface;
use Symfony\Component\Notifier\Message\ChatMessage;
class Slack
{
private $chatter;
public function __construct(ChatterInterface $chatter)
{
$this->chatter = $chatter;
}
public function sendMessage(String $message): void
{
$message = (new ChatMessage($message))
->transport('slack');
try {
$sentMessage = $this->chatter->send($message);
dump($sentMessage);
} catch (TransportExceptionInterface $e) {
}
}
}

View File

@ -1,20 +1,19 @@
{
"api-platform/core": {
"version": "2.6",
"version": "3.1",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "2.5",
"ref": "05b57782a78c21a664a42055dc11cf1954ca36bb"
"version": "3.0",
"ref": "0330386d716d3eecc52ee5ac66976e733eb8f961"
},
"files": [
"config/packages/api_platform.yaml",
"config/routes/api_platform.yaml",
"src/Entity/.gitignore"
"src/ApiResource/.gitignore"
]
},
"doctrine/annotations": {
"version": "1.13",
"version": "1.14",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
@ -23,7 +22,7 @@
}
},
"doctrine/doctrine-bundle": {
"version": "2.8",
"version": "2.9",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
@ -50,7 +49,7 @@
]
},
"nelmio/cors-bundle": {
"version": "2.2",
"version": "2.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
@ -62,7 +61,7 @@
]
},
"phpunit/phpunit": {
"version": "9.5",
"version": "9.6",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
@ -112,7 +111,7 @@
]
},
"symfony/flex": {
"version": "2.2",
"version": "2.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
@ -143,7 +142,7 @@
]
},
"symfony/maker-bundle": {
"version": "1.43",
"version": "1.48",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
@ -163,8 +162,20 @@
"config/packages/monolog.yaml"
]
},
"symfony/notifier": {
"version": "6.1",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "5.0",
"ref": "c31585e252b32fe0e1f30b1f256af553f4a06eb9"
},
"files": [
"config/packages/notifier.yaml"
]
},
"symfony/phpunit-bridge": {
"version": "6.2",
"version": "6.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
@ -203,6 +214,15 @@
"config/packages/security.yaml"
]
},
"symfony/slack-notifier": {
"version": "6.1",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "5.2",
"ref": "192bc241a3095c6861353e5a7a652ad35659ca92"
}
},
"symfony/twig-bundle": {
"version": "6.1",
"recipe": {

View File

@ -0,0 +1,20 @@
{% extends 'base.html.twig' %}
{% block title %}Hello SlackController!{% endblock %}
{% block body %}
<style>
.example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
.example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
</style>
<div class="example-wrapper">
<h1>Hello {{ controller_name }}! ✅</h1>
This friendly message is coming from:
<ul>
<li>Your controller at <code><a href="{{ '/Users/markomoller/code/CdsConnector/src/Controller/SlackController.php'|file_link(0) }}">src/Controller/SlackController.php</a></code></li>
<li>Your template at <code><a href="{{ '/Users/markomoller/code/CdsConnector/templates/slack/index.html.twig'|file_link(0) }}">templates/slack/index.html.twig</a></code></li>
</ul>
</div>
{% endblock %}

View File

@ -0,0 +1,15 @@
<?php
namespace App\Tests\EventSubscriber;
use App\EventSubscriber\SlackNotifySubscriber;
use PHPUnit\Framework\TestCase;
class SlackNotifySubscriberTest extends TestCase
{
public function testSendSlack()
{
}
}

View File

@ -9,7 +9,3 @@ if (file_exists(dirname(__DIR__).'/config/bootstrap.php')) {
} elseif (method_exists(Dotenv::class, 'bootEnv')) {
(new Dotenv())->bootEnv(dirname(__DIR__).'/.env');
}
if ($_SERVER['APP_DEBUG']) {
umask(0000);
}