Spaces:
No application file
No application file
use Doctrine\DBAL\Types\Types; | |
use Mautic\CoreBundle\Doctrine\Type; | |
use Mautic\CoreBundle\EventListener\ConsoleErrorListener; | |
use Mautic\CoreBundle\EventListener\ConsoleTerminateListener; | |
use Symfony\Component\DependencyInjection\Definition; | |
use Symfony\Component\DependencyInjection\Reference; | |
/** @var Symfony\Component\DependencyInjection\ContainerBuilder $container */ | |
// Include path settings | |
$root = $container->getParameter('mautic.application_dir').'/app'; | |
$projectRoot = $container->getParameter('kernel.project_dir'); | |
include __DIR__.'/paths_helper.php'; | |
// Load extra annotations | |
$container->loadFromExtension('sensio_framework_extra', [ | |
'router' => ['annotations' => false], | |
'request' => ['converters' => false], | |
'view' => ['annotations' => true], | |
'cache' => ['annotations' => false], | |
]); | |
// Build and store Mautic bundle metadata | |
$symfonyBundles = $container->getParameter('kernel.bundles'); | |
$bundleMetadataBuilder = new Mautic\CoreBundle\DependencyInjection\Builder\BundleMetadataBuilder($symfonyBundles, $paths); | |
$container->setParameter('mautic.bundles', $bundleMetadataBuilder->getCoreBundleMetadata()); | |
$container->setParameter('mautic.plugin.bundles', $bundleMetadataBuilder->getPluginMetadata()); | |
// Set IP lookup services | |
$container->setParameter('mautic.ip_lookup_services', $bundleMetadataBuilder->getIpLookupServices()); | |
// Load parameters | |
include __DIR__.'/parameters.php'; | |
$container->loadFromExtension('mautic_core'); | |
$parameterLoader = new Mautic\CoreBundle\Loader\ParameterLoader(); | |
$configParameterBag = $parameterLoader->getParameterBag(); | |
$localConfigParameterBag = $parameterLoader->getLocalParameterBag(); | |
// Decide on secure cookie based on site_url setting or the request if in installer | |
// This cannot be set dynamically | |
if (defined('MAUTIC_INSTALLER')) { | |
$request = Symfony\Component\HttpFoundation\Request::createFromGlobals(); | |
$secureCookie = $request->isSecure(); | |
} else { | |
$siteUrl = $configParameterBag->get('site_url'); | |
$secureCookie = ($siteUrl && str_starts_with($siteUrl, 'https')); | |
} | |
$container->loadFromExtension('framework', [ | |
'secret' => '%mautic.secret_key%', | |
'router' => [ | |
'resource' => '%mautic.application_dir%/app/config/routing.php', | |
'strict_requirements' => null, | |
], | |
'form' => null, | |
'csrf_protection' => true, | |
'validation' => [ | |
'enable_annotations' => false, | |
], | |
'default_locale' => '%mautic.locale%', | |
'translator' => [ | |
'enabled' => true, | |
'fallback' => 'en_US', | |
], | |
'session' => [ // handler_id set to null will use default session handler from php.ini | |
'handler_id' => null, | |
'name' => '%env(MAUTIC_SESSION_NAME)%', | |
'cookie_secure' => $secureCookie, | |
'cookie_samesite' => 'lax', | |
], | |
'fragments' => null, | |
'http_method_override' => true, | |
'mailer' => [ | |
'dsn' => '%env(urlencoded-dsn:MAUTIC_MAILER_DSN)%', | |
], | |
'messenger' => [ | |
'failure_transport' => 'failed', | |
'transports' => [ | |
'email' => [ | |
'dsn' => '%env(urlencoded-dsn:MAUTIC_MESSENGER_DSN_EMAIL)%', | |
'retry_strategy' => [ | |
'service' => Mautic\MessengerBundle\Retry\RetryStrategy::class, | |
], | |
], | |
'hit' => [ | |
'dsn' => '%env(urlencoded-dsn:MAUTIC_MESSENGER_DSN_HIT)%', | |
'retry_strategy' => [ | |
'service' => Mautic\MessengerBundle\Retry\RetryStrategy::class, | |
], | |
], | |
'failed' => '%env(messenger-nullable:MAUTIC_MESSENGER_DSN_FAILED)%', | |
], | |
'routing' => [ | |
Symfony\Component\Mailer\Messenger\SendEmailMessage::class => 'email', | |
Mautic\MessengerBundle\Message\TestEmail::class => 'email', | |
Mautic\MessengerBundle\Message\TestHit::class => 'hit', | |
Mautic\MessengerBundle\Message\TestFailed::class => 'failed', | |
Mautic\MessengerBundle\Message\PageHitNotification::class => 'hit', | |
Mautic\MessengerBundle\Message\EmailHitNotification::class => 'hit', | |
], | |
], | |
/*'validation' => array( | |
'static_method' => array('loadValidatorMetadata') | |
)*/ | |
]); | |
$container->setParameter('mautic.famework.csrf_protection', true); | |
// Doctrine Configuration | |
$connectionSettings = [ | |
'driver' => '%mautic.db_driver%', | |
'host' => '%mautic.db_host%', | |
'port' => '%mautic.db_port%', | |
'dbname' => '%mautic.db_name%', | |
'user' => '%mautic.db_user%', | |
'password' => '%mautic.db_password%', | |
'charset' => 'utf8mb4', | |
'default_table_options' => [ | |
'charset' => 'utf8mb4', | |
'collate' => 'utf8mb4_unicode_ci', | |
'row_format' => 'DYNAMIC', | |
], | |
// Prevent Doctrine from crapping out with "unsupported type" errors due to it examining all tables in the database and not just Mautic's | |
'mapping_types' => [ | |
'enum' => 'string', | |
'point' => 'string', | |
'bit' => 'string', | |
], | |
'server_version' => '%env(mauticconst:MAUTIC_DB_SERVER_VERSION)%', | |
'wrapper_class' => Mautic\CoreBundle\Doctrine\Connection\ConnectionWrapper::class, | |
'options' => [PDO::ATTR_STRINGIFY_FETCHES => true], // @see https://www.php.net/manual/en/migration81.incompatible.php#migration81.incompatible.pdo.mysql | |
]; | |
if (!empty($localConfigParameterBag->get('db_host_ro'))) { | |
$connectionSettings['wrapper_class'] = Mautic\CoreBundle\Doctrine\Connection\PrimaryReadReplicaConnectionWrapper::class; | |
$connectionSettings['keep_replica'] = true; | |
$connectionSettings['replicas'] = [ | |
'replica1' => [ | |
'host' => '%mautic.db_host_ro%', | |
'port' => '%mautic.db_port%', | |
'dbname' => '%mautic.db_name%', | |
'user' => '%mautic.db_user%', | |
'password' => '%mautic.db_password%', | |
'charset' => 'utf8mb4', | |
], | |
]; | |
} | |
$container->loadFromExtension('doctrine', [ | |
'dbal' => [ | |
'default_connection' => 'default', | |
'connections' => [ | |
'default' => $connectionSettings, | |
'unbuffered' => array_merge($connectionSettings, [ | |
'options' => [ | |
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => false, | |
PDO::ATTR_STRINGIFY_FETCHES => true, // @see https://www.php.net/manual/en/migration81.incompatible.php#migration81.incompatible.pdo.mysql | |
], | |
]), | |
], | |
'types' => [ | |
Types::ARRAY => Type\ArrayType::class, | |
Types::DATETIME_MUTABLE => Type\UTCDateTimeType::class, | |
Types::DATETIME_IMMUTABLE => Type\UTCDateTimeImmutableType::class, | |
Type\GeneratedType::GENERATED => Type\GeneratedType::class, | |
], | |
], | |
'orm' => [ | |
'auto_generate_proxy_classes' => '%kernel.debug%', | |
'auto_mapping' => true, | |
'mappings' => $bundleMetadataBuilder->getOrmConfig(), | |
'dql' => [ | |
'string_functions' => [ | |
'match' => DoctrineExtensions\Query\Mysql\MatchAgainst::class, | |
], | |
], | |
'result_cache_driver' => [ | |
'type' => 'pool', | |
'pool' => 'doctrine_result_cache', | |
], | |
], | |
]); | |
// MigrationsBundle Configuration | |
$container->loadFromExtension('doctrine_migrations', [ | |
'migrations_paths' => [ | |
'Mautic\\Migrations' => '%mautic.application_dir%/app/migrations', | |
], | |
'storage' => [ | |
'table_storage' => [ | |
'table_name' => '%env(MAUTIC_MIGRATIONS_TABLE_NAME)%', | |
], | |
], | |
'custom_template' => '%mautic.application_dir%/app/migrations/Migration.template', | |
]); | |
// KnpMenu Configuration | |
$container->loadFromExtension('knp_menu', [ | |
'default_renderer' => 'mautic', | |
]); | |
// OneupUploader Configuration | |
$container->loadFromExtension('oneup_uploader', [ | |
// 'orphanage' => array( | |
// 'maxage' => 86400, | |
// 'directory' => $uploadDir . '/orphanage' | |
// ), | |
'mappings' => [ | |
'asset' => [ | |
'error_handler' => 'mautic.asset.upload.error.handler', | |
'frontend' => 'custom', | |
'custom_frontend' => [ | |
'class' => 'Mautic\AssetBundle\Controller\UploadController', | |
'name' => 'mautic', | |
], | |
// 'max_size' => ($maxSize * 1000000), | |
// 'use_orphanage' => true, | |
'storage' => [ | |
'directory' => '%mautic.upload_dir%', | |
], | |
], | |
], | |
]); | |
// FOS Rest for API | |
$container->loadFromExtension('fos_rest', [ | |
'routing_loader' => false, | |
'body_listener' => true, | |
'view' => [ | |
'formats' => [ | |
'json' => true, | |
'xml' => false, | |
'html' => false, | |
], | |
], | |
'disable_csrf_role' => 'ROLE_API', | |
]); | |
// JMS Serializer for API and Webhooks | |
$container->loadFromExtension('jms_serializer', [ | |
'handlers' => [ | |
'datetime' => [ | |
'default_format' => 'c', | |
'default_timezone' => 'UTC', | |
], | |
], | |
'property_naming' => [ | |
'separator' => '', | |
'lower_case' => false, | |
], | |
'metadata' => [ | |
'cache' => 'file', | |
'auto_detection' => false, | |
'directories' => $bundleMetadataBuilder->getSerializerConfig(), | |
], | |
'visitors' => [ | |
'json_deserialization' => [ | |
'options' => JSON_PRETTY_PRINT, | |
], | |
], | |
]); | |
$container->loadFromExtension('framework', [ | |
'cache' => [ | |
'pools' => [ | |
'api_rate_limiter_cache' => $configParameterBag->get('api_rate_limiter_cache'), | |
'doctrine_result_cache' => [ | |
'adapter' => 'cache.adapter.array', | |
], | |
], | |
], | |
]); | |
// Twig Configuration | |
$container->loadFromExtension('twig', [ | |
'exception_controller' => null, | |
]); | |
$rateLimit = (int) $configParameterBag->get('api_rate_limiter_limit'); | |
$container->loadFromExtension('noxlogic_rate_limit', [ | |
'enabled' => 0 === $rateLimit ? false : true, | |
'storage_engine' => 'cache', | |
'cache_service' => 'api_rate_limiter_cache', | |
'path_limits' => [ | |
[ | |
'path' => '/api', | |
'limit' => $rateLimit, | |
'period' => 3600, | |
], | |
], | |
'fos_oauth_key_listener' => true, | |
'display_headers' => true, | |
'rate_response_message' => '{ "errors": [ { "code": 429, "message": "You exceeded the rate limit of '.$rateLimit.' API calls per hour.", "details": [] } ]}', | |
]); | |
$container->setParameter( | |
'jms_serializer.camel_case_naming_strategy.class', | |
'JMS\Serializer\Naming\IdenticalPropertyNamingStrategy' | |
); | |
// Monolog formatter | |
$container->register('mautic.monolog.fulltrace.formatter', 'Monolog\Formatter\LineFormatter') | |
->addMethodCall('includeStacktraces', [true]) | |
->addMethodCall('ignoreEmptyContextAndExtra', [true]); | |
// Register command line logging | |
$container->setParameter( | |
'console_error_listener.class', | |
ConsoleErrorListener::class | |
); | |
$definitionConsoleErrorListener = new Definition( | |
'%console_error_listener.class%', | |
[new Reference('monolog.logger.mautic')] | |
); | |
$definitionConsoleErrorListener->addTag( | |
'kernel.event_listener', | |
['event' => 'console.error'] | |
); | |
$container->setDefinition( | |
'mautic.kernel.listener.command_exception', | |
$definitionConsoleErrorListener | |
); | |
$container->setParameter( | |
'console_terminate_listener.class', | |
ConsoleTerminateListener::class | |
); | |
$definitionConsoleErrorListener = new Definition( | |
'%console_terminate_listener.class%', | |
[new Reference('monolog.logger.mautic')] | |
); | |
$definitionConsoleErrorListener->addTag( | |
'kernel.event_listener', | |
['event' => 'console.terminate'] | |
); | |
$container->setDefinition( | |
'mautic.kernel.listener.command_terminate', | |
$definitionConsoleErrorListener | |
); | |
// ElFinder File Manager | |
$container->loadFromExtension('fm_elfinder', [ | |
'assets_path' => 'media/assets', | |
'instances' => [ | |
'default' => [ | |
'locale' => '%mautic.locale%', | |
'cors_support' => true, | |
'editor' => 'custom', | |
'editor_template' => '@bundles/CoreBundle/Assets/js/libraries/filemanager/index.html.twig', | |
'fullscreen' => true, | |
// 'include_assets' => true, | |
'relative_path' => false, | |
'connector' => [ | |
'debug' => '%kernel.debug%', | |
'binds' => [ | |
'upload.pre mkdir.pre mkfile.pre rename.pre archive.pre ls.pre' => [ | |
'Plugin.Sanitizer.cmdPreprocess', | |
], | |
'upload.presave paste.copyfrom' => [ | |
'Plugin.Sanitizer.onUpLoadPreSave', | |
], | |
], | |
'plugins' => [ | |
'Sanitizer' => [ | |
'enable' => true, | |
'callBack' => '\Mautic\CoreBundle\Helper\InputHelper::transliterateFilename', | |
], | |
], | |
'roots' => [ | |
'local' => [ | |
'driver' => 'Flysystem', | |
'path' => '', | |
'flysystem' => [ | |
'type' => 'custom', | |
'adapter_service' => 'mautic.core.service.local_file_adapter', | |
'options' => [], | |
], | |
'upload_allow' => ['image/png', 'image/jpg', 'image/jpeg', 'image/gif'], | |
'upload_deny' => ['all'], | |
'accepted_name' => '/^[\w\x{0300}-\x{036F}][\w\x{0300}-\x{036F}\s\.\%\-]*$/u', // Supports diacritic symbols | |
'url' => '%env(resolve:MAUTIC_EL_FINDER_URL)%', // We need to specify URL in case mod_rewrite is disabled | |
'tmb_path' => '%env(resolve:MAUTIC_EL_FINDER_PATH)%/.tmb/', | |
'tmb_url' => '%env(resolve:MAUTIC_EL_FINDER_URL)%/.tmb/', | |
], | |
], | |
], | |
], | |
], | |
]); | |