Add Shopware 6 example (#61)

This commit is contained in:
Cynthia Ebert
2025-12-13 20:06:52 +01:00
committed by GitHub
parent 0cd6ace70a
commit 569b86f260
35 changed files with 12770 additions and 0 deletions

40
shopware6/.env Normal file
View File

@@ -0,0 +1,40 @@
###> shopware/core ###
APP_ENV=prod
APP_URL=http://127.0.0.1:8000
APP_SECRET=b15bed7d8d3ccecf7b13fb0822f4fc6d
INSTANCE_ID=a44644b8d3e364706622673027fce5a9
BLUE_GREEN_DEPLOYMENT=0
DATABASE_URL=mysql://root:root@localhost/shopware
###< shopware/core ###
###> symfony/messenger ###
# Choose one of the transports below
# MESSENGER_TRANSPORT_DSN=amqp://guest:guest@localhost:5672/%2f/messages
# MESSENGER_TRANSPORT_DSN=redis://localhost:6379/messages
# doctrine://default?auto_setup=0
###< symfony/messenger ###
###> symfony/mailer ###
# MAILER_DSN=null://null
###< symfony/mailer ###
###> symfony/lock ###
# Choose one of the stores below
# postgresql+advisory://db_user:db_password@localhost/db_name
LOCK_DSN=flock
###< symfony/lock ###
###> shopware/elasticsearch ###
OPENSEARCH_URL=http://localhost:9200
SHOPWARE_ES_ENABLED=0
SHOPWARE_ES_INDEXING_ENABLED=0
SHOPWARE_ES_INDEX_PREFIX=sw
SHOPWARE_ES_THROW_EXCEPTION=1
###< shopware/elasticsearch ###
###> shopware/storefront ###
PROXY_URL=http://localhost
SHOPWARE_HTTP_CACHE_ENABLED=1
SHOPWARE_HTTP_DEFAULT_TTL=7200
###< shopware/storefront ###

20
shopware6/.gitignore vendored Normal file
View File

@@ -0,0 +1,20 @@
/.idea
/vendor/
###> shopware/core ###
.env.local
.env.local.php
.env.*.local
/public/bundles/*
/public/media/*
/public/theme/*
/public/thumbnail/*
/public/sitemap/*
/files/*
!/files/.htaccess
/var/*
!/var/.htaccess
/auth.json
/install.lock
/public/asset-manifest.json
###< shopware/core ###

14
shopware6/.htaccess Normal file
View File

@@ -0,0 +1,14 @@
DirectoryIndex index.html index.php
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
<IfModule mod_alias.c>
# Restrict access to VCS directories
RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$)
# Restrict access to root folder files
RedirectMatch 404 /(composer\.(json|lock|phar)|README\.md|\.gitignore|.*\.dist|\.env.*)$
</IfModule>

27
shopware6/Dockerfile Normal file
View File

@@ -0,0 +1,27 @@
#syntax=docker/dockerfile:1.4
ARG BASE_IMAGE=shopware/docker-base:8.3
# pin versions
FROM ghcr.io/shopware/docker-base:8.3 as base-image
FROM ghcr.io/shopware/shopware-cli:latest-php-8.3 AS shopware-cli
# build
FROM shopware-cli as build
ARG SHOPWARE_PACKAGES_TOKEN
ADD . /src
WORKDIR /src
RUN --mount=type=secret,id=composer_auth,dst=/src/auth.json \
--mount=type=cache,target=/root/.composer \
--mount=type=cache,target=/root/.npm \
/usr/local/bin/entrypoint.sh shopware-cli project ci /src
FROM base-image
COPY --from=build --chown=82 --link /src /var/www/html
EXPOSE 8000

9
shopware6/LICENSE Normal file
View File

@@ -0,0 +1,9 @@
MIT License
Copyright (c) 2025 shopware AG
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

11
shopware6/bin/.htaccess Normal file
View File

@@ -0,0 +1,11 @@
<Files ~ ".*">
# Deny all requests from Apache 2.4+.
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
# Deny all requests from Apache 2.0-2.2.
<IfModule !mod_authz_core.c>
Deny from all
</IfModule>
</Files>

View File

@@ -0,0 +1,112 @@
#!/usr/bin/env bash
unset CDPATH
CWD="$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
export PROJECT_ROOT="${PROJECT_ROOT:-"$(dirname "$CWD")"}"
export ENV_FILE=${ENV_FILE:-"${PROJECT_ROOT}/.env"}
export NPM_CONFIG_FUND=false
export NPM_CONFIG_AUDIT=false
export NPM_CONFIG_UPDATE_NOTIFIER=false
# shellcheck source=functions.sh
source "${PROJECT_ROOT}/bin/functions.sh"
curenv=$(declare -p -x)
load_dotenv "$ENV_FILE"
# Restore environment variables set globally
set -o allexport
eval "$curenv"
set +o allexport
set -euo pipefail
export APP_URL
export PROJECT_ROOT
export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
if [[ -e "${PROJECT_ROOT}/vendor/shopware/platform" ]]; then
ADMIN_ROOT="${ADMIN_ROOT:-"${PROJECT_ROOT}/vendor/shopware/platform/src/Administration"}"
else
ADMIN_ROOT="${ADMIN_ROOT:-"${PROJECT_ROOT}/vendor/shopware/administration"}"
fi
export ADMIN_ROOT
BIN_TOOL="${CWD}/console"
if [[ ${CI:-""} ]]; then
BIN_TOOL="${CWD}/ci"
if [[ ! -x "$BIN_TOOL" ]]; then
chmod +x "$BIN_TOOL"
fi
fi
# build admin
[[ ${SHOPWARE_SKIP_BUNDLE_DUMP:-""} ]] || "${BIN_TOOL}" bundle:dump
"${BIN_TOOL}" feature:dump || true
if [[ $(command -v jq) ]]; then
OLDPWD=$(pwd)
cd "$PROJECT_ROOT" || exit
basePaths=()
while read -r config; do
srcPath=$(echo "$config" | jq -r '(.basePath + .administration.path)')
basePath=$(echo "$config" | jq -r '.basePath')
# the package.json files are always one upper
path=$(dirname "$srcPath")
name=$(echo "$config" | jq -r '.technicalName' )
skippingEnvVarName="SKIP_$(echo "$name" | sed -e 's/\([a-z]\)/\U\1/g' -e 's/-/_/g')"
if [[ ${!skippingEnvVarName:-""} ]]; then
continue
fi
if [[ -n $srcPath && ! " ${basePaths[*]:-} " =~ " ${basePath} " ]]; then
basePaths+=("$basePath")
fi
if [[ -f "$path/package.json" && ! -d "$path/node_modules" && $name != "administration" ]]; then
echo "=> Installing npm dependencies for ${name}"
(cd "$path" && npm install --omit=dev --no-audit --prefer-offline)
fi
done < <(jq -c '.[]' "var/plugins.json")
for basePath in "${basePaths[@]:-}"; do
if [[ -z $basePath ]]; then
continue
fi
if [[ -r "${basePath}/package.json" ]]; then
echo "=> Installing npm dependencies for ${basePath}"
(cd "${basePath}" && npm ci --omit=dev --no-audit --prefer-offline)
fi
if [[ -r "${basePath}/../package.json" ]]; then
echo "=> Installing npm dependencies for ${basePath}/.."
(cd "${basePath}/.." && npm ci --omit=dev --no-audit --prefer-offline)
fi
done
cd "$OLDPWD" || exit
else
echo "Cannot check extensions for required npm installations as jq is not installed"
fi
(cd "${ADMIN_ROOT}"/Resources/app/administration && npm install --prefer-offline --omit=dev)
# Dump entity schema
if [[ -z "${SHOPWARE_SKIP_ENTITY_SCHEMA_DUMP:-""}" ]] && [[ -f "${ADMIN_ROOT}"/Resources/app/administration/scripts/entitySchemaConverter/entity-schema-converter.ts ]]; then
mkdir -p "${ADMIN_ROOT}"/Resources/app/administration/test/_mocks_
"${BIN_TOOL}" -e prod framework:schema -s 'entity-schema' "${ADMIN_ROOT}"/Resources/app/administration/test/_mocks_/entity-schema.json
(cd "${ADMIN_ROOT}"/Resources/app/administration && npm run convert-entity-schema)
fi
(cd "${ADMIN_ROOT}"/Resources/app/administration && npm run build)
[[ ${SHOPWARE_SKIP_ASSET_COPY:-""} ]] ||"${BIN_TOOL}" assets:install

14
shopware6/bin/build-js.sh Normal file
View File

@@ -0,0 +1,14 @@
#!/usr/bin/env bash
BIN_DIR="$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
set -euo pipefail
if [[ -e "${BIN_DIR}/build-administration.sh" ]]; then
"${BIN_DIR}/build-administration.sh"
fi
if [[ -e "${BIN_DIR}/build-storefront.sh" ]]; then
"${BIN_DIR}/build-storefront.sh"
fi

View File

@@ -0,0 +1,93 @@
#!/usr/bin/env bash
unset CDPATH
CWD="$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
set -euo pipefail
export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
export PROJECT_ROOT="${PROJECT_ROOT:-"$(dirname "$CWD")"}"
export NPM_CONFIG_FUND=false
export NPM_CONFIG_AUDIT=false
export NPM_CONFIG_UPDATE_NOTIFIER=false
if [[ -e "${PROJECT_ROOT}/vendor/shopware/platform" ]]; then
STOREFRONT_ROOT="${STOREFRONT_ROOT:-"${PROJECT_ROOT}/vendor/shopware/platform/src/Storefront"}"
else
STOREFRONT_ROOT="${STOREFRONT_ROOT:-"${PROJECT_ROOT}/vendor/shopware/storefront"}"
fi
BIN_TOOL="${CWD}/console"
if [[ ${CI:-""} ]]; then
BIN_TOOL="${CWD}/ci"
if [[ ! -x "$BIN_TOOL" ]]; then
chmod +x "$BIN_TOOL"
fi
fi
# build storefront
[[ ${SHOPWARE_SKIP_BUNDLE_DUMP:-""} ]] || "${BIN_TOOL}" bundle:dump
[[ ${SHOPWARE_SKIP_FEATURE_DUMP:-""} ]] || "${BIN_TOOL}" feature:dump
if [[ $(command -v jq) ]]; then
OLDPWD=$(pwd)
cd "$PROJECT_ROOT" || exit
basePaths=()
while read -r config; do
srcPath=$(echo "$config" | jq -r '(.basePath + .storefront.path)')
basePath=$(echo "$config" | jq -r '.basePath')
# the package.json files are always one upper
path=$(dirname "$srcPath")
name=$(echo "$config" | jq -r '.technicalName' )
skippingEnvVarName="SKIP_$(echo "$name" | sed -e 's/\([a-z]\)/\U\1/g' -e 's/-/_/g')"
if [[ ${!skippingEnvVarName:-""} ]]; then
continue
fi
if [[ -n $srcPath && ! " ${basePaths[*]:-} " =~ " ${basePath} " ]]; then
basePaths+=("$basePath")
fi
if [[ -f "$path/package.json" && ! -d "$path/node_modules" && $name != "storefront" ]]; then
echo "=> Installing npm dependencies for ${name}"
(cd "$path" && npm install --prefer-offline)
fi
done < <(jq -c '.[]' "var/plugins.json")
for basePath in "${basePaths[@]:-}"; do
if [[ -z $basePath ]]; then
continue
fi
if [[ -r "${basePath}/package.json" ]]; then
echo "=> Installing npm dependencies for ${basePath}"
(cd "${basePath}" && npm ci --omit=dev --no-audit --prefer-offline)
fi
if [[ -r "${basePath}/../package.json" ]]; then
echo "=> Installing npm dependencies for ${basePath}/.."
(cd "${basePath}/.." && npm ci --omit=dev --no-audit --prefer-offline)
fi
done
cd "$OLDPWD" || exit
else
echo "Cannot check extensions for required npm installations as jq is not installed"
fi
npm --prefix "${STOREFRONT_ROOT}"/Resources/app/storefront install --prefer-offline --omit=dev
node "${STOREFRONT_ROOT}"/Resources/app/storefront/copy-to-vendor.js
npm --prefix "${STOREFRONT_ROOT}"/Resources/app/storefront run production
[[ ${SHOPWARE_SKIP_ASSET_COPY:-""} ]] ||"${BIN_TOOL}" assets:install
[[ ${SHOPWARE_SKIP_THEME_COMPILE:-""} ]] || "${BIN_TOOL}" theme:compile --active-only
if ! [ "${1:-default}" = "--keep-cache" ]; then
"${BIN_TOOL}" cache:clear
fi

55
shopware6/bin/ci Normal file
View File

@@ -0,0 +1,55 @@
#!/usr/bin/env php
<?php
use Shopware\Core\Framework\Adapter\Kernel\KernelFactory;
use Shopware\Core\Framework\Plugin\KernelPluginLoader\ComposerPluginLoader;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Component\Console\Input\ArgvInput;
if (!file_exists(__DIR__ . '/../.env') && !file_exists(__DIR__ . '/../.env.dist') && !file_exists(__DIR__ . '/../.env.local.php')) {
$_SERVER['APP_RUNTIME_OPTIONS']['disable_dotenv'] = true;
}
require_once __DIR__ . '/../vendor/autoload_runtime.php';
return static function (array &$context) {
set_time_limit(0);
$classLoader = require __DIR__ . '/../vendor/autoload.php';
if (!class_exists(Application::class)) {
throw new RuntimeException('You need to add "symfony/framework-bundle" as a Composer dependency.');
}
if (!isset($context['PROJECT_ROOT'])) {
$context['PROJECT_ROOT'] = dirname(__DIR__);
}
$input = new ArgvInput();
$env = $input->getParameterOption(['--env', '-e'], $context['APP_ENV'] ?? 'prod', true);
$debug = ($context['APP_DEBUG'] ?? ($env !== 'prod')) && !$input->hasParameterOption('--no-debug', true);
if ($input->getFirstArgument() === 'system:install') {
$context['INSTALL'] = true;
}
if (trim($context['DATABASE_URL'] ?? '') === '') {
// fake DATABASE_URL
$_SERVER['DATABASE_URL'] = 'mysql://_placeholder.test';
}
$kernel = KernelFactory::create(
environment: $env,
debug: $debug,
classLoader: $classLoader,
pluginLoader: new ComposerPluginLoader($classLoader, null),
);
$application = new Application($kernel);
$kernel->boot();
$application->setName('Shopware');
$application->setVersion($kernel->getContainer()->getParameter('kernel.shopware_version'));
return $application;
};

66
shopware6/bin/console Normal file
View File

@@ -0,0 +1,66 @@
#!/usr/bin/env php
<?php
use Shopware\Core\Framework\Adapter\Kernel\KernelFactory;
use Shopware\Core\Framework\Plugin\KernelPluginLoader\ComposerPluginLoader;
use Shopware\Core\Framework\Plugin\KernelPluginLoader\DbalKernelPluginLoader;
use Shopware\Core\Framework\Plugin\KernelPluginLoader\StaticKernelPluginLoader;
use Shopware\Core\Kernel;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Component\Console\Input\ArgvInput;
$envFile = __DIR__ . '/../.env';
if (!file_exists(__DIR__ . '/../.env') && !file_exists(__DIR__ . '/../.env.dist') && !file_exists(__DIR__ . '/../.env.local.php')) {
$_SERVER['APP_RUNTIME_OPTIONS']['disable_dotenv'] = true;
}
require_once __DIR__ . '/../vendor/autoload_runtime.php';
return static function (array &$context) {
set_time_limit(0);
$classLoader = require __DIR__ . '/../vendor/autoload.php';
if (!class_exists(Application::class)) {
throw new RuntimeException('You need to add "symfony/framework-bundle" as a Composer dependency.');
}
if (!isset($context['PROJECT_ROOT'])) {
$context['PROJECT_ROOT'] = dirname(__DIR__);
}
$input = new ArgvInput();
$env = $input->getParameterOption(['--env', '-e'], $context['APP_ENV'] ?? 'prod', true);
$debug = ($context['APP_DEBUG'] ?? ($env !== 'prod')) && !$input->hasParameterOption('--no-debug', true);
$pluginLoader = new StaticKernelPluginLoader($classLoader, null);
if ($input->getFirstArgument() === 'system:install') {
$context['INSTALL'] = true;
}
if (!isset($context['INSTALL'])) {
$useComposerPluginLoader = (bool) ($context['COMPOSER_PLUGIN_LOADER'] ?? false);
if ($useComposerPluginLoader) {
$pluginLoader = new ComposerPluginLoader($classLoader, null);
} elseif (trim($context['DATABASE_URL'] ?? '') !== '') {
$pluginLoader = new DbalKernelPluginLoader($classLoader, null, Kernel::getConnection());
}
}
$kernel = KernelFactory::create(
environment: $env,
debug: $debug,
classLoader: $classLoader,
pluginLoader: $pluginLoader,
);
$application = new Application($kernel);
$kernel->boot();
$application->setName('Shopware');
$application->setVersion($kernel->getContainer()->getParameter('kernel.shopware_version'));
return $application;
};

View File

@@ -0,0 +1,39 @@
#!/usr/bin/env bash
load_dotenv() {
LOAD_DOTENV=${LOAD_DOTENV:-"1"}
if [[ "$LOAD_DOTENV" == "0" ]]; then
return
fi
CURRENT_ENV=${APP_ENV:-"dev"}
env_file="$1"
# If we have an actual .env file load it
if [[ -e "$env_file" ]]; then
# shellcheck source=/dev/null
source "$env_file"
elif [[ -e "$env_file.dist" ]]; then
# shellcheck source=/dev/null
source "$env_file.dist"
fi
# If we have an local env file load it
if [[ -e "$env_file.local" ]]; then
# shellcheck source=/dev/null
source "$env_file.local"
fi
# If we have an env file for the current env load it
if [[ -e "$env_file.$CURRENT_ENV" ]]; then
# shellcheck source=/dev/null
source "$env_file.$CURRENT_ENV"
fi
# If we have an env file for the current env load it'
if [[ -e "$env_file.$CURRENT_ENV.local" ]]; then
# shellcheck source=/dev/null
source "$env_file.$CURRENT_ENV.local"
fi
}

View File

@@ -0,0 +1,78 @@
#!/usr/bin/env bash
CWD="$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
export PROJECT_ROOT="${PROJECT_ROOT:-"$(dirname "$CWD")"}"
export ENV_FILE=${ENV_FILE:-"${PROJECT_ROOT}/.env"}
# shellcheck source=functions.sh
source "${PROJECT_ROOT}/bin/functions.sh"
curenv=$(declare -p -x)
load_dotenv "$ENV_FILE"
# Restore environment variables set globally
set -o allexport
eval "$curenv"
set +o allexport
export HOST=${HOST:-"localhost"}
export VITE_HOST
export ADMIN_PORT
export APP_URL
export SHOPWARE_ADMIN_SKIP_SOURCEMAP_GENERATION
export DISABLE_DEVSERVER_OPEN
export DDEV_PRIMARY_URL
if [[ -e "${PROJECT_ROOT}/vendor/shopware/platform" ]]; then
ADMIN_ROOT="${ADMIN_ROOT:-"${PROJECT_ROOT}/vendor/shopware/platform/src/Administration"}"
else
ADMIN_ROOT="${ADMIN_ROOT:-"${PROJECT_ROOT}/vendor/shopware/administration"}"
fi
export ADMIN_ROOT
BIN_TOOL="${CWD}/console"
[[ ${SHOPWARE_SKIP_BUNDLE_DUMP:-""} ]] || "${BIN_TOOL}" bundle:dump
"${BIN_TOOL}" feature:dump || true
if [[ $(command -v jq) ]]; then
OLDPWD=$(pwd)
cd "$PROJECT_ROOT" || exit
jq -c '.[]' "var/plugins.json" | while read -r config; do
srcPath=$(echo "$config" | jq -r '(.basePath + .administration.path)')
# the package.json files are always one upper
path=$(dirname "$srcPath")
name=$(echo "$config" | jq -r '.technicalName' )
skippingEnvVarName="SKIP_$(echo "$name" | sed -e 's/\([a-z]\)/\U\1/g' -e 's/-/_/g')"
if [[ ${!skippingEnvVarName:-""} ]]; then
continue
fi
if [[ -f "$path/package.json" && ! -d "$path/node_modules" && $name != "administration" ]]; then
echo "=> Installing npm dependencies for ${name}"
(cd "$path" && npm install --omit=dev)
fi
done
cd "$OLDPWD" || exit
else
echo "Cannot check extensions for required npm installations as jq is not installed"
fi
(cd "${ADMIN_ROOT}"/Resources/app/administration && npm install --prefer-offline)
# Dump entity schema
if [[ -z "${SHOPWARE_SKIP_ENTITY_SCHEMA_DUMP:-""}" ]] && [[ -f "${ADMIN_ROOT}"/Resources/app/administration/scripts/entitySchemaConverter/entity-schema-converter.ts ]]; then
mkdir -p "${ADMIN_ROOT}"/Resources/app/administration/test/_mocks_
"${BIN_TOOL}" -e prod framework:schema -s 'entity-schema' "${ADMIN_ROOT}"/Resources/app/administration/test/_mocks_/entity-schema.json
(cd "${ADMIN_ROOT}"/Resources/app/administration && npm run convert-entity-schema)
fi
(cd "${ADMIN_ROOT}"/Resources/app/administration && npm run dev)

View File

@@ -0,0 +1,78 @@
#!/usr/bin/env bash
CWD="$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
export PROJECT_ROOT="${PROJECT_ROOT:-"$(dirname "$CWD")"}"
export ENV_FILE=${ENV_FILE:-"${PROJECT_ROOT}/.env"}
export NPM_CONFIG_FUND=false
export NPM_CONFIG_AUDIT=false
export NPM_CONFIG_UPDATE_NOTIFIER=false
# shellcheck source=functions.sh
source "${PROJECT_ROOT}/bin/functions.sh"
curenv=$(declare -p -x)
load_dotenv "$ENV_FILE"
# Restore environment variables set globally
set -o allexport
eval "$curenv"
set +o allexport
export APP_URL
export PROXY_URL
export STOREFRONT_ASSETS_PORT
export STOREFRONT_PROXY_PORT
export STOREFRONT_HTTPS_KEY_FILE
export STOREFRONT_HTTPS_CERTIFICATE_FILE
export STOREFRONT_SKIP_SSL_CERT
if [[ -e "${PROJECT_ROOT}/vendor/shopware/platform" ]]; then
STOREFRONT_ROOT="${STOREFRONT_ROOT:-"${PROJECT_ROOT}/vendor/shopware/platform/src/Storefront"}"
else
STOREFRONT_ROOT="${STOREFRONT_ROOT:-"${PROJECT_ROOT}/vendor/shopware/storefront"}"
fi
if [[ ! -d "${STOREFRONT_ROOT}"/Resources/app/storefront/node_modules/webpack-dev-server ]]; then
npm --prefix "${STOREFRONT_ROOT}"/Resources/app/storefront install --prefer-offline
fi
"${CWD}"/console bundle:dump
"${CWD}"/console feature:dump
"${CWD}"/console theme:compile --active-only
if [[ -n "$1" ]]; then
"${CWD}"/console theme:dump --theme-name="$1"
else
"${CWD}"/console theme:dump
fi
if [[ $(command -v jq) ]]; then
OLDPWD=$(pwd)
cd "$PROJECT_ROOT" || exit
jq -c '.[]' "var/plugins.json" | while read -r config; do
srcPath=$(echo "$config" | jq -r '(.basePath + .storefront.path)')
# the package.json files are always one upper
path=$(dirname "$srcPath")
name=$(echo "$config" | jq -r '.technicalName' )
skippingEnvVarName="SKIP_$(echo "$name" | sed -e 's/\([a-z]\)/\U\1/g' -e 's/-/_/g')"
if [[ ${!skippingEnvVarName:-""} ]]; then
continue
fi
if [[ -f "$path/package.json" && ! -d "$path/node_modules" && $name != "storefront" ]]; then
echo "=> Installing npm dependencies for ${name}"
(cd "$path" && npm install)
fi
done
cd "$OLDPWD" || exit
else
echo "Cannot check extensions for required npm installations as jq is not installed"
fi
npm --prefix "${STOREFRONT_ROOT}"/Resources/app/storefront run-script hot-proxy

72
shopware6/composer.json Normal file
View File

@@ -0,0 +1,72 @@
{
"name": "shopware/production",
"license": "MIT",
"type": "project",
"require": {
"composer-runtime-api": "^2.0",
"shopware/administration": "*",
"shopware/core": "v6.7.5.0",
"shopware/elasticsearch": "*",
"shopware/storefront": "*",
"shopware/deployment-helper": "^0.0.12",
"symfony/flex": "~2"
},
"repositories": [
{
"type": "path",
"url": "custom/plugins/*",
"options": {
"symlink": true
}
},
{
"type": "path",
"url": "custom/plugins/*/packages/*",
"options": {
"symlink": true
}
},
{
"type": "path",
"url": "custom/static-plugins/*",
"options": {
"symlink": true
}
}
],
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"minimum-stability": "stable",
"prefer-stable": true,
"config": {
"allow-plugins": {
"symfony/flex": true,
"symfony/runtime": true
},
"optimize-autoloader": true,
"sort-packages": true
},
"scripts": {
"auto-scripts": {
"assets:install": "symfony-cmd"
},
"post-install-cmd": [
"@auto-scripts"
],
"post-update-cmd": [
"@auto-scripts"
]
},
"extra": {
"symfony": {
"allow-contrib": true,
"endpoint": [
"https://raw.githubusercontent.com/shopware/recipes/flex/main/index.json",
"flex://defaults"
]
}
}
}

11316
shopware6/composer.lock generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,20 @@
<?php
return [
Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
Shopware\Core\Framework\Framework::class => ['all' => true],
Shopware\Core\System\System::class => ['all' => true],
Shopware\Core\Content\Content::class => ['all' => true],
Shopware\Core\Checkout\Checkout::class => ['all' => true],
Shopware\Core\Maintenance\Maintenance::class => ['all' => true],
Shopware\Core\DevOps\DevOps::class => ['e2e' => true],
Shopware\Core\Profiling\Profiling::class => ['all' => true],
Shopware\Core\Service\Service::class => ['all' => true],
Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true],
Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true],
Pentatrion\ViteBundle\PentatrionViteBundle::class => ['all' => true],
Shopware\Administration\Administration::class => ['all' => true],
Shopware\Elasticsearch\Elasticsearch::class => ['all' => true],
Shopware\Storefront\Storefront::class => ['all' => true],
];

3
shopware6/config/jwt/.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
*
!.gitignore

View File

@@ -0,0 +1,2 @@
framework:
lock: '%env(LOCK_DSN)%'

View File

@@ -0,0 +1,11 @@
services:
# Register nyholm/psr7 services for autowiring with PSR-17 (HTTP factories)
Psr\Http\Message\RequestFactoryInterface: '@nyholm.psr7.psr17_factory'
Psr\Http\Message\ResponseFactoryInterface: '@nyholm.psr7.psr17_factory'
Psr\Http\Message\ServerRequestFactoryInterface: '@nyholm.psr7.psr17_factory'
Psr\Http\Message\StreamFactoryInterface: '@nyholm.psr7.psr17_factory'
Psr\Http\Message\UploadedFileFactoryInterface: '@nyholm.psr7.psr17_factory'
Psr\Http\Message\UriFactoryInterface: '@nyholm.psr7.psr17_factory'
nyholm.psr7.psr17_factory:
class: Nyholm\Psr7\Factory\Psr17Factory

View File

@@ -0,0 +1,5 @@
controllers:
resource:
path: ../src/Controller/
namespace: App\Controller
type: attribute

View File

@@ -0,0 +1,27 @@
# This file is the entry point to configure your own services.
# Files in the packages/ subdirectory configure your dependencies.
# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices.html#use-parameters-for-application-configuration
parameters:
shopware.store.frw: '1'
default_cdn_strategy: 'physical_filename'
shopware.cdn.strategy: '%env(default:default_cdn_strategy:SHOPWARE_CDN_STRATEGY_DEFAULT)%'
env(OPENSEARCH_URL): 'http://localhost:9200'
services:
# default configuration for services in *this* file
_defaults:
autowire: true # Automatically injects dependencies in your services.
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
# Binding arguments by name or type
# https://symfony.com/doc/current/service_container.html#binding-arguments-by-name-or-type
#bind:
# 'bool $isDebug': '%kernel.debug%'
App\:
resource: '../src/'
exclude:
- '../src/DependencyInjection/'
- '../src/Entity/'
- '../src/Kernel.php'

View File

@@ -0,0 +1,11 @@
<Files ~ ".*">
# Deny all requests from Apache 2.4+.
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
# Deny all requests from Apache 2.0-2.2.
<IfModule !mod_authz_core.c>
Deny from all
</IfModule>
</Files>

0
shopware6/custom/apps/.gitignore vendored Normal file
View File

0
shopware6/custom/plugins/.gitignore vendored Normal file
View File

View File

View File

@@ -0,0 +1,118 @@
x-environment: &shopware
environment:
APP_ENV: "${APP_ENV}"
DATABASE_URL: "${DATABASE_URL}"
DATABASE_HOST: "${DATABASE_HOST}"
APP_URL: "${APP_URL}"
APP_SECRET: "${APP_SECRET}"
JWT_PRIVATE_KEY: "${JWT_PRIVATE_KEY}"
JWT_PUBLIC_KEY: "${JWT_PUBLIC_KEY}"
PHP_SESSION_HANDLER: "${PHP_SESSION_HANDLER}"
PHP_SESSION_SAVE_PATH: "${PHP_SESSION_SAVE_PATH}"
volumes:
- files:/var/www/html/files
- theme:/var/www/html/public/theme
- media:/var/www/html/public/media
- thumbnail:/var/www/html/public/thumbnail
- sitemap:/var/www/html/public/sitemap
services:
web:
image: shopware6
<<: *shopware
build:
context: .
depends_on:
init:
condition: service_completed_successfully
environment:
SERVICE_URL_WEB_8000:
APP_ENV: "${APP_ENV:-prod}"
DATABASE_URL: "${DATABASE_URL:-mysql://shopware:shopware@database/shopware}"
DATABASE_HOST: "${DATABASE_HOST:-database}"
APP_URL: "${APP_URL:-$SERVICE_URL_WEB}"
APP_SECRET: "${APP_SECRET:-b15bed7d8d3ccecf7b13fb0822f4fc6d}"
JWT_PRIVATE_KEY: "${JWT_PRIVATE_KEY:-LS0tLS1CRUdJTiBFTkNSWVBURUQgUFJJVkFURSBLRVktLS0tLQpNSUlGSERCT0Jna3Foa2lHOXcwQkJRMHdRVEFwQmdrcWhraUc5dzBCQlF3d0hBUUlFOE5rWmE0ck1PVUNBZ2dBCk1Bd0dDQ3FHU0liM0RRSUpCUUF3RkFZSUtvWklodmNOQXdjRUNQeHVabVIrWWV6QUJJSUV5QVVPM0pBcjV5K0QKTDRvTzRGM0JlL1Z1Slp5QlRPRFdQcU1BNzZ2SUF4K3lDUmZBTVIxRWw4MlNwRUdiSUZVSTA0VTRqUERTeER6aAoxd2dkemQyZHJSMjl2UCtKdjl3ekhjbDBib3g1dnd0ZmFxdEdFcjg0UnQ5aTl5aHpINkJ3MnZMQ21NQVNac0pPCjVrNEdERnhSTDhudWxTVXZtcjA1RUNnVEdQMndraXMzRThtRTU0Q3UrSlpLVzFwN0lkcmdJd3BSSWwwNUhLWVAKSFRGbGJaNURpb3dFelF3Qm42K25TbE40OUJneE1ZM1cxdkhrWTRDaVdZNUJTOENYcHoweGRvNnBzSTRuZ2dpLwpId2xBTVpDVGQvdFZnMW5VMkdRcGNRTkpPZm1TSW0xcWlNeGpSbE5iV2tIbmMvMkwya3AveWs5cFo4aTIwTFhrCnYxZHVHNUZvclRsL1JyNnE0SWtBV1FNbUZUcDdNanpzbmozMDB3SkcwTDREUDFXQTN4VVNKbDQ2SlRVZU9IcncKbEJxZ2xZQ0tPaFVWMFRmdW9scGNrYjcwQXduZm9wSXV0eXpuS0FJYjRFMUJXY25mN3U0K0VrME5pbEdlbXdodQorWmlSaDZGakptM3ROQ0VBWFhVbGVVRVV2eUFpK1VqQXlUMXh0VFFURTdaaXpoa3JBSHlFbHEvR0ZFQ0JOOHVlCjFSV05IYW5zbEl5RnlySk5XcGw3S0lFM09NMnZTbERaRkx3cUVIbkZnYTZza05pZEVtTW1EL2o1Ny9kMkJNeDAKWFVJRXNadFY4S2Q5aDJ0eFdwR0Y4MEZqNHF0cDVud0s3ajd4MUtxa1cwM041aGtrZVZzSm5DRko2U3ZnS0x1ZAp2ZnV3bjVoc3NBZlhLK0tQU1NJYlNaMSs4V0c3dm5MbDVqZ0NuMUVuVHBLVDFPNGRoMXBRVE1hR0EvU0FyVFJxCldTcUZqbFZkbjdaNEVnckVuN0p4bTQxNGptenJCMVBFNUhrYVZnWWs2S3ByNk8yWW9TVDUvSlJhU1ZQVHpJeGYKNit6R09ONk5NMXdzbHRXQk5zUUxWc3NoWHNVVXlzeWtCZXN0b0RWRGtYdE1ZS1dmdlorVFRndzlQUVNzQVU5cQo4dlZvMXZNNXpIV1VuWVhlZitJbmJHcEdpOEJ4cmlKMkVhNFN3YjBUWEJITngvZDR1U281c2dXVXFvcVRRTENsCjNNS1Q3aWpGRFZJQ3VkelI2elU4cDJhbWdjU3RBQlAwbWpsQ2ZrckhtRGFOdExYdEJ0ZWJVK0VPYzVFSHRTTlkKZ0lWSStORUl1bjlRVllaYm1RbGRhU3lhTGpkWi92cndhdWcvV1FmZjVuS2NnanhOd2N4Nlc4UXNyajBOWFVmUgpWTGQ4NzZPRDdnT3hRVElMdGF1cW5DYkxDcWlLN2YrUWRuM0M3ekhuL2t2SEdZWVIvcTZXOWF6MVZ2NC9YMDRqCjFLRDVZazRWa2ZEVVZEdjZIVXRZR2ZJeCt3SWllS1NKMFhRbnh5MGJPb0FrbGRyRkxmazhCL1lEVlRaZ3ZoMzEKSUF6VzV2WXczaVM3ZTZ1a0RYNEdoYldEQVg4cDJ0VmRyUGZiWklLMC9zSlFwOUMxbU1uMDI4d3VFUm1vOURHeQpPNnNHN1phdjhJKytkMktrcWYvbzMzU2VIYVVCN2dvRlZtaS9jSGprQngzVVplQ1ByNDRvNENZTjg1RzdJSWFFCmxVa2NqNmFwN2lZUXFOOFVXMC9Rb1NoUXVxK1NZdnRjRWNXY0VUYlBCOElPZXUxa1BvTExPYzdPQ3ZRMlBqcXoKSkpWUGdIRWZJYzVJWldWMXg0MUplMXZWYmM1dGlhNUY2eFB3cWNteDJROEhMOWJiUDc5NHJUU3I5NkZBTnJXbwowMjZaV1VHMlNxbHZWTll4WjkzUWxka2pSaGM2Nm5obEFrdHBlYnJ4N05JQXgxaFhsRHpDaDRvOTF2M3pFUXZtClFQbUVodHZUNTZDZWNaTGprWTdaNVNteTgvbkJPUUdidS9HSjRlcnZqL0M1dzJ2ZlZlL3AzcGo2K3lXeldtZkoKTm5ZL09mMkVlYmlhMmpIcVlpdHlwWEtZSWREclErZVVJQzI2VG1LRkRXKzBMcndOc0gwRFBWOTFWQm5Bd0pQZwpBTnEwdVBGMUlkSUszcjdUMGp2L1RnPT0KLS0tLS1FTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0K}"
JWT_PUBLIC_KEY: "${JWT_PUBLIC_KEY:-LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF1NWR5RTFPSzc3V3ZJUnIxcWd5MQpUbjJ3ZVFNREhxSHZqV0JGeE1XbEV6eW14YmpVZzYyT1hpL01SditCRnp0a2JCTVQ3aWtpOHdPdXlJZFBCTVBHCmkrcm15anhIT2I0WEJXdTAyNTdxOWg0UTJYemdyUVZsYjY5MG04SVRTY2hKUVBCc2Z6NnVIWjd3b1VQYXZXTG4KMldybHNIUmQ0S2wwNnpIdzVNelE2bVlqeDI5L2NINkNrbjNNcXVNQW9qTEE4alJLSGVxQ05OSUh2cnkwRnByUQoyaG5VUDdMZThlbU1FeUJtTzBGeHoyYVdsVEo4d3FmVDdMRUYyNVJOaERoNyswc3JJSC9RcnlpRHhVZnBvZTBpCkNLNUVpZVdHMXloeXhMMUZJU2JTVmIvRGZaWHo3NGYzMWp0VWpEaVJuWjF2U0UxNDNGKzdUaFV3alBra0pYcVEKQlFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==}"
PHP_SESSION_HANDLER: "${PHP_SESSION_HANDLER:-redis}"
PHP_SESSION_SAVE_PATH: "${PHP_SESSION_SAVE_PATH:-tcp://cache:6379/1}"
healthcheck:
test:
["CMD", "curl", "-f", "http://localhost:8000/api/_info/health-check"]
interval: 30s
timeout: 10s
retries: 5
database:
image: mariadb:11.4
environment:
MARIADB_ROOT_PASSWORD: "${MARIADB_ROOT_PASSWORD:-shopware}"
MARIADB_USER: "${MARIADB_USER:-shopware}"
MARIADB_PASSWORD: "${MARIADB_PASSWORD:-shopware}"
MARIADB_DATABASE: "${MARIADB_DATABASE:-shopware}"
tmpfs:
- /var/lib/mysql
healthcheck:
test: ["CMD", "mariadb-admin", "ping", "-h", "localhost", "-pshopware"]
timeout: 20s
retries: 10
init-perm:
image: alpine
<<: *shopware
command: chown 82:82 /var/www/html/files /var/www/html/public/theme /var/www/html/public/media /var/www/html/public/thumbnail /var/www/html/public/sitemap
restart: "no"
exclude_from_hc: true
init:
image: shopware6
<<: *shopware
build:
context: .
entrypoint: ["php", "vendor/bin/shopware-deployment-helper", "run"]
restart: "no"
exclude_from_hc: true
depends_on:
database:
condition: service_healthy
init-perm:
condition: service_completed_successfully
worker-1: &worker
image: shopware6
<<: *shopware
build:
context: .
exclude_from_hc: true
volumes_from:
- init
depends_on:
init:
condition: service_completed_successfully
entrypoint:
[
"php",
"bin/console",
"messenger:consume",
"async",
"low_priority",
"--time-limit=300",
"--memory-limit=512M",
]
worker-2: *worker
scheduled-task:
image: shopware6
<<: *shopware
build:
context: .
volumes_from:
- init
depends_on:
init:
condition: service_completed_successfully
entrypoint: ["php", "bin/console", "scheduled-task:run"]
exclude_from_hc: true
cache:
image: valkey/valkey:latest

11
shopware6/files/.htaccess Normal file
View File

@@ -0,0 +1,11 @@
<Files ~ ".*">
# Deny all requests from Apache 2.4+.
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
# Deny all requests from Apache 2.0-2.2.
<IfModule !mod_authz_core.c>
Deny from all
</IfModule>
</Files>

View File

@@ -0,0 +1,45 @@
# BEGIN Shopware
# The directives (lines) between "# BEGIN Shopware" and "# END Shopware" are dynamically generated. Any changes to the directives between these markers will be overwritten.
DirectoryIndex index.php
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
# Sets the HTTP_AUTHORIZATION header removed by Apache
RewriteCond %{HTTP:Authorization} .
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
# If the requested filename exists, simply serve it.
# We only want to let Apache serve files and not directories.
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
# Rewrite all other queries to the front controller.
RewriteCond %{REQUEST_URI} !^/(theme|media|thumbnail|bundles|css|fonts|js|recovery)/ [NC]
RewriteRule ^ %{ENV:BASE}/index.php [L]
</IfModule>
<IfModule !mod_rewrite.c>
<IfModule mod_alias.c>
RedirectMatch 302 ^/$ /index.php/
</IfModule>
</IfModule>
<IfModule mod_headers.c>
<FilesMatch "\.(?i:svg)$">
Header set Content-Security-Policy "script-src 'none'"
</FilesMatch>
</IfModule>
# END Shopware

View File

@@ -0,0 +1,45 @@
# BEGIN Shopware
# The directives (lines) between "# BEGIN Shopware" and "# END Shopware" are dynamically generated. Any changes to the directives between these markers will be overwritten.
DirectoryIndex index.php
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
# Sets the HTTP_AUTHORIZATION header removed by Apache
RewriteCond %{HTTP:Authorization} .
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
# If the requested filename exists, simply serve it.
# We only want to let Apache serve files and not directories.
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
# Rewrite all other queries to the front controller.
RewriteCond %{REQUEST_URI} !^/(theme|media|thumbnail|bundles|css|fonts|js|recovery)/ [NC]
RewriteRule ^ %{ENV:BASE}/index.php [L]
</IfModule>
<IfModule !mod_rewrite.c>
<IfModule mod_alias.c>
RedirectMatch 302 ^/$ /index.php/
</IfModule>
</IfModule>
<IfModule mod_headers.c>
<FilesMatch "\.(?i:svg)$">
Header set Content-Security-Policy "script-src 'none'"
</FilesMatch>
</IfModule>
# END Shopware

View File

@@ -0,0 +1,48 @@
<?php declare(strict_types=1);
use Shopware\Core\DevOps\Environment\EnvironmentHelper;
use Shopware\Core\Framework\Plugin\KernelPluginLoader\ComposerPluginLoader;
use Shopware\Core\Installer\InstallerKernel;
use Shopware\Core\Framework\Adapter\Kernel\KernelFactory;
$_SERVER['SCRIPT_FILENAME'] = __FILE__;
require_once __DIR__ . '/../vendor/autoload_runtime.php';
if (!file_exists(__DIR__ . '/../.env') && !file_exists(__DIR__ . '/../.env.dist') && !file_exists(__DIR__ . '/../.env.local.php')) {
$_SERVER['APP_RUNTIME_OPTIONS']['disable_dotenv'] = true;
}
return function (array $context) {
$classLoader = require __DIR__ . '/../vendor/autoload.php';
if (!EnvironmentHelper::getVariable('SHOPWARE_SKIP_WEBINSTALLER', false) && !file_exists(dirname(__DIR__) . '/install.lock')) {
$baseURL = str_replace(basename(__FILE__), '', $_SERVER['SCRIPT_NAME']);
$baseURL = rtrim($baseURL, '/');
if (strpos($_SERVER['REQUEST_URI'], '/installer') === false) {
header('Location: ' . $baseURL . '/installer');
exit;
}
}
$appEnv = $context['APP_ENV'] ?? 'dev';
$debug = (bool) ($context['APP_DEBUG'] ?? ($appEnv !== 'prod'));
if (!EnvironmentHelper::getVariable('SHOPWARE_SKIP_WEBINSTALLER', false) && !file_exists(dirname(__DIR__) . '/install.lock')) {
return new InstallerKernel($appEnv, $debug);
}
$pluginLoader = null;
if (EnvironmentHelper::getVariable('COMPOSER_PLUGIN_LOADER', false)) {
$pluginLoader = new ComposerPluginLoader($classLoader, null);
}
return KernelFactory::create(
environment: $appEnv,
debug: $debug,
classLoader: $classLoader,
pluginLoader: $pluginLoader,
);
};

View File

@@ -0,0 +1,131 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Wartungsmodus</title>
<style>
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font:1em monospace,serif}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}
body, html { min-height: 100%; background: #e9ebed; }
.maintenance-container {
position: relative;
background: #fff;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
margin: 50px auto;
width: 475px;
padding: 30px;
text-align: center;
-webkit-box-shadow: 0px 1px 3px rgba(0, 0, 0, .5);
-moz-box-shadow: 0px 1px 3px rgba(0, 0, 0, .5);
-ms-box-shadow: 0px 1px 3px rgba(0, 0, 0, .5);
box-shadow: 0px 1px 3px rgba(0, 0, 0, .5);
}
.maintenance-headline {
font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
font-weight: 300;
margin: 0 0 .8em;
}
.maintenance-text { font-size: 13px }
.maintenance-progress {
border-top: 1px solid #529e52;
height: 4px; width: 100%;
position: absolute;
bottom: 0; left: 0;
background-color: #5eb95e;
-webkit-background-size: 40px 40px;
-moz-background-size: 40px 40px;
-o-background-size: 40px 40px;
background-size: 40px 40px;
-webkit-animation: progress-bar-stripes 2s linear infinite;
-moz-animation: progress-bar-stripes 2s linear infinite;
-ms-animation: progress-bar-stripes 2s linear infinite;
-o-animation: progress-bar-stripes 2s linear infinite;
animation: progress-bar-stripes 2s linear infinite;
background-color: #62C462;
background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, rgba(0, 0, 0, 0)), color-stop(0.5, rgba(0, 0, 0, 0)), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0)));
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, rgba(0, 0, 0, 0) 25%, rgba(0, 0, 0, 0) 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, rgba(0, 0, 0, 0) 75%, rgba(0, 0, 0, 0));
background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, rgba(0, 0, 0, 0) 25%, rgba(0, 0, 0, 0) 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, rgba(0, 0, 0, 0) 75%, rgba(0, 0, 0, 0));
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, rgba(0, 0, 0, 0) 25%, rgba(0, 0, 0, 0) 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, rgba(0, 0, 0, 0) 75%, rgba(0, 0, 0, 0));
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, rgba(0, 0, 0, 0) 25%, rgba(0, 0, 0, 0) 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, rgba(0, 0, 0, 0) 75%, rgba(0, 0, 0, 0));
}
hr {
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAECAYAAACtBE5DAAAAHUlEQVR42q3IoREAAACCQHdy/91IFrLcfSGqc5wAdFYCZQo/LFUAAAAASUVORK5CYII=") repeat-x;
border: 0 none;
color: #CCC;
height: 4px;
padding: 0;
margin: 30px 0;
}
@-webkit-keyframes progress-bar-stripes {
from {
background-position: 40px 0;
}
to {
background-position: 0 0;
}
}
@-moz-keyframes progress-bar-stripes {
from {
background-position: 40px 0;
}
to {
background-position: 0 0;
}
}
@-ms-keyframes progress-bar-stripes {
from {
background-position: 40px 0;
}
to {
background-position: 0 0;
}
}
@-o-keyframes progress-bar-stripes {
from {
background-position: 0 0;
}
to {
background-position: 40px 0;
}
}
@keyframes progress-bar-stripes {
from {
background-position: 40px 0;
}
to {
background-position: 0 0;
}
}
</style>
</head>
<body>
<div class="maintenance-container">
<h1 class="maintenance-headline">Unsere Website befindet sich gerade in der Wartung.</h1>
<p class="maintenance-text">
Wir stehen Ihnen bald wieder zur Verfügung. Entschuldigen Sie etwaige Unannehmlichkeiten.
</p>
<hr />
<h1 class="maintenance-headline">Our website is currently undergoing maintenance.</h1>
<p class="maintenance-text">
We'll be back very soon. Sorry for any inconvenience.
</p>
<div class="maintenance-progress"></div>
</div>
</body>
</html>

0
shopware6/src/Controller/.gitignore vendored Normal file
View File

238
shopware6/symfony.lock Normal file
View File

@@ -0,0 +1,238 @@
{
"doctrine/deprecations": {
"version": "1.1",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "1.0",
"ref": "87424683adc81d7dc305eefec1fced883084aab9"
}
},
"nyholm/psr7": {
"version": "1.8",
"recipe": {
"repo": "github.com/shopware/recipes",
"branch": "main",
"version": "1.0",
"ref": "4a8c0345442dcca1d8a2c65633dcf0285dd5a5a2"
},
"files": [
"./config/packages/nyholm_psr7.yaml"
]
},
"pentatrion/vite-bundle": {
"version": "8.2",
"recipe": {
"repo": "github.com/shopware/recipes",
"branch": "main",
"version": "6.5",
"ref": "8cc0e41387cb37cb65cc9a1ce8bac7eed899687a"
}
},
"shopware/administration": {
"version": "6.7",
"recipe": {
"repo": "github.com/shopware/recipes",
"branch": "main",
"version": "6.7",
"ref": "00b75c7833e0004ef4591b40905afb08d8a83d38"
},
"files": [
"./bin/build-administration.sh",
"./bin/watch-administration.sh"
]
},
"shopware/core": {
"version": "6.7",
"recipe": {
"repo": "github.com/shopware/recipes",
"branch": "main",
"version": "6.7",
"ref": "469075e215817ebc0a52d1dcc77a60a226a2b312"
},
"files": [
"./bin/.htaccess",
"./bin/build-js.sh",
"./bin/ci",
"./bin/console",
"./bin/functions.sh",
"./config/jwt/.gitignore",
"./custom/.htaccess",
"./custom/apps/.gitignore",
"./custom/plugins/.gitignore",
"./custom/static-plugins/.gitignore",
"./files/.htaccess",
"./public/.htaccess.dist",
"./public/index.php",
"./public/maintenance.html",
"./var/.htaccess",
"./.htaccess"
]
},
"shopware/elasticsearch": {
"version": "6.7",
"recipe": {
"repo": "github.com/shopware/recipes",
"branch": "main",
"version": "6.7",
"ref": "fe34e39dbf21eec276589a9c8857084ea33918f9"
},
"files": []
},
"shopware/storefront": {
"version": "6.7",
"recipe": {
"repo": "github.com/shopware/recipes",
"branch": "main",
"version": "6.7",
"ref": "3a3eed555ad8d8d66bae908239b877f14c7f5654"
},
"files": [
"./bin/build-storefront.sh",
"./bin/watch-storefront.sh"
]
},
"symfony/console": {
"version": "7.3",
"recipe": {
"repo": "github.com/shopware/recipes",
"branch": "main",
"version": "5.4",
"ref": "d7afb8d11ee0e18f644cc77c2df9b372e89cb3a9"
}
},
"symfony/debug-bundle": {
"version": "7.3",
"recipe": {
"repo": "github.com/shopware/recipes",
"branch": "main",
"version": "5.3",
"ref": "b94f2fa443280f1befe3093f1c7135cbece45be2"
}
},
"symfony/flex": {
"version": "2.10",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "2.4",
"ref": "52e9754527a15e2b79d9a610f98185a1fe46622a"
},
"files": [
"./.env",
"./.env.dev"
]
},
"symfony/framework-bundle": {
"version": "7.3",
"recipe": {
"repo": "github.com/shopware/recipes",
"branch": "main",
"version": "6.4",
"ref": "50944a1fe41e7bcbca2e33ec196e1084772633f7"
},
"files": [
"./config/services.yaml",
"./src/Controller/.gitignore"
]
},
"symfony/lock": {
"version": "7.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "5.2",
"ref": "8e937ff2b4735d110af1770f242c1107fdab4c8e"
},
"files": [
"./config/packages/lock.yaml"
]
},
"symfony/mailer": {
"version": "7.3",
"recipe": {
"repo": "github.com/shopware/recipes",
"branch": "main",
"version": "4.3",
"ref": "7c4b09065438b4fbe2baaf7838347090efffafac"
}
},
"symfony/messenger": {
"version": "7.3",
"recipe": {
"repo": "github.com/shopware/recipes",
"branch": "main",
"version": "6.0",
"ref": "34c68db62fc2e3f66c944e7195fea5367c68823d"
},
"files": []
},
"symfony/monolog-bundle": {
"version": "3.10",
"recipe": {
"repo": "github.com/shopware/recipes",
"branch": "main",
"version": "3.3",
"ref": "5ccbcb35c970d021327d54358e748c6962a39ed8"
},
"files": []
},
"symfony/property-info": {
"version": "7.3",
"recipe": {
"repo": "github.com/shopware/recipes",
"branch": "main",
"version": "7.3",
"ref": "d7afb8d11ee0e18f644cc77c2df9b372e89cb3a9"
}
},
"symfony/routing": {
"version": "7.3",
"recipe": {
"repo": "github.com/shopware/recipes",
"branch": "main",
"version": "6.4",
"ref": "f4aa893f09086b4e9bfbeaebb2a1f2a24f979367"
},
"files": [
"./config/routes.yaml"
]
},
"symfony/scheduler": {
"version": "7.3",
"recipe": {
"repo": "github.com/shopware/recipes",
"branch": "main",
"version": "7.2",
"ref": "88069c76a8133d37a373b1299fb3ab927f252c45"
},
"files": []
},
"symfony/translation": {
"version": "7.3",
"recipe": {
"repo": "github.com/shopware/recipes",
"branch": "main",
"version": "5.4",
"ref": "d7afb8d11ee0e18f644cc77c2df9b372e89cb3a9"
}
},
"symfony/twig-bundle": {
"version": "7.3",
"recipe": {
"repo": "github.com/shopware/recipes",
"branch": "main",
"version": "5.4",
"ref": "99277800a8f532fc369df7148804ed3d257c69c0"
}
},
"symfony/validator": {
"version": "7.3",
"recipe": {
"repo": "github.com/shopware/recipes",
"branch": "main",
"version": "5.3",
"ref": "cdb029c79a301f7404e20b1f7031710959420019"
}
}
}

11
shopware6/var/.htaccess Normal file
View File

@@ -0,0 +1,11 @@
<Files ~ ".*">
# Deny all requests from Apache 2.4+.
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
# Deny all requests from Apache 2.0-2.2.
<IfModule !mod_authz_core.c>
Deny from all
</IfModule>
</Files>