widgetFactories[] = $factory; } /** * @return \Chill\MainBundle\DependencyInjection\Configuration|object|\Symfony\Component\Config\Definition\ConfigurationInterface|null */ public function getConfiguration(array $config, ContainerBuilder $container) { return new Configuration($this->widgetFactories, $container); } /** * @return WidgetFactoryInterface[] */ public function getWidgetFactories() { return $this->widgetFactories; } /** * @throws Exception */ public function load(array $configs, ContainerBuilder $container) { // configuration for main bundle $configuration = $this->getConfiguration($configs, $container); $config = $this->processConfiguration($configuration, $configs); // replace all config with a main key: $container->setParameter('chill_main', $config); // legacy config $container->setParameter( 'chill_main.installation_name', $config['installation_name'] ); $container->setParameter( 'chill_main.available_languages', $config['available_languages'] ); $container->setParameter( 'chill_main.available_countries', $config['available_countries'] ); $container->setParameter( 'chill_main.access_global_history', $config['access_global_history'] ); $container->setParameter( 'chill_main.access_user_change_password', $config['access_user_change_password'] ); $container->setParameter( 'chill_main.access_permissions_group_list', $config['access_permissions_group_list'] ); $container->setParameter( 'chill_main.routing.resources', $config['routing']['resources'] ); $container->setParameter( 'chill_main.pagination.item_per_page', $config['pagination']['item_per_page'] ); $container->setParameter( 'chill_main.notifications', $config['notifications'] ); $container->setParameter( 'chill_main.redis', $config['redis'] ); $container->setParameter( 'chill_main.phone_helper', $config['phone_helper'] ?? [] ); // add the key 'widget' without the key 'enable' $container->setParameter( 'chill_main.widgets', isset($config['widgets']['homepage']) ? ['homepage' => $config['widgets']['homepage']] : [] ); $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../config')); $loader->load('services.yaml'); $loader->load('services/doctrine.yaml'); $loader->load('services/logger.yaml'); $loader->load('services/pagination.yaml'); $loader->load('services/export.yaml'); $loader->load('services/form.yaml'); $loader->load('services/validator.yaml'); $loader->load('services/widget.yaml'); $loader->load('services/controller.yaml'); $loader->load('services/routing.yaml'); $loader->load('services/fixtures.yaml'); $loader->load('services/menu.yaml'); $loader->load('services/security.yaml'); $loader->load('services/notification.yaml'); $loader->load('services/redis.yaml'); $loader->load('services/command.yaml'); $loader->load('services/phonenumber.yaml'); $loader->load('services/cache.yaml'); $loader->load('services/templating.yaml'); $loader->load('services/timeline.yaml'); $loader->load('services/search.yaml'); $loader->load('services/serializer.yaml'); $loader->load('services/mailer.yaml'); $this->configureCruds($container, $config['cruds'], $config['apis'], $loader); } public function prepend(ContainerBuilder $container) { //add installation_name and date_format to globals $chillMainConfig = $container->getExtensionConfig($this->getAlias()); $config = $this->processConfiguration($this ->getConfiguration($chillMainConfig, $container), $chillMainConfig); $twigConfig = [ 'globals' => [ 'installation' => [ 'name' => $config['installation_name'], ], 'available_languages' => $config['available_languages'], ], 'form_themes' => ['@ChillMain/Form/fields.html.twig'], ]; $container->prependExtensionConfig('twig', $twigConfig); //add DQL function to ORM (default entity_manager) $container ->prependExtensionConfig( 'doctrine', [ 'orm' => [ 'dql' => [ 'string_functions' => [ 'unaccent' => Unaccent::class, 'GET_JSON_FIELD_BY_KEY' => GetJsonFieldByKey::class, 'AGGREGATE' => JsonAggregate::class, 'REPLACE' => Replace::class, ], 'numeric_functions' => [ 'JSONB_EXISTS_IN_ARRAY' => JsonbExistsInArray::class, 'SIMILARITY' => Similarity::class, 'OVERLAPSI' => OverlapsI::class, 'STRICT_WORD_SIMILARITY_OPS' => StrictWordSimilarityOPS::class, 'ST_CONTAINS' => STContains::class, 'JSONB_ARRAY_LENGTH' => JsonbArrayLength::class, ], ], 'hydrators' => [ 'chill_flat_hierarchy_list' => FlatHierarchyEntityHydrator::class, ], ], ], ); //add dbal types (default entity_manager) $container ->prependExtensionConfig( 'doctrine', [ 'dbal' => [ // ignore views: 'schema_filter' => '~^(?!view_)~', // This is mandatory since we are using postgis as database. 'mapping_types' => [ 'geometry' => 'string', ], 'types' => [ 'dateinterval' => NativeDateIntervalType::class, 'point' => PointType::class, 'uuid' => UuidType::class, 'phone_number' => PhoneNumberType::class, ], ], ] ); //add current route to chill main $container->prependExtensionConfig('chill_main', [ 'routing' => [ 'resources' => [ '@ChillMainBundle/config/routes.yaml', ], ], ]); //add a channel to log app events $container->prependExtensionConfig('monolog', [ 'channels' => ['chill'], ]); $container->prependExtensionConfig('security', [ 'access_decision_manager' => [ 'strategy' => 'unanimous', 'allow_if_all_abstain' => false, ], ]); //add crud api $this->prependCruds($container); } /** * Load parameter for configuration and set parameters for api. */ protected function configureCruds( ContainerBuilder $container, array $crudConfig, array $apiConfig, Loader\YamlFileLoader $loader ): void { if (count($crudConfig) === 0) { return; } $loader->load('services/crud.yaml'); $container->setParameter('chill_main_crud_route_loader_config', $crudConfig); $container->setParameter('chill_main_api_route_loader_config', $apiConfig); // Note: the controller are loaded inside compiler pass } protected function prependCruds(ContainerBuilder $container) { $container->prependExtensionConfig('chill_main', [ 'cruds' => [ [ 'class' => UserJob::class, 'controller' => UserJobController::class, 'name' => 'admin_user_job', 'base_path' => '/admin/main/user-job', 'base_role' => 'ROLE_ADMIN', 'form_class' => UserJobType::class, 'actions' => [ 'index' => [ 'role' => 'ROLE_ADMIN', 'template' => '@ChillMain/UserJob/index.html.twig', ], 'new' => [ 'role' => 'ROLE_ADMIN', 'template' => '@ChillMain/UserJob/new.html.twig', ], 'edit' => [ 'role' => 'ROLE_ADMIN', 'template' => '@ChillMain/UserJob/edit.html.twig', ], ], ], [ 'class' => User::class, 'controller' => UserController::class, 'name' => 'admin_user', 'base_path' => '/admin/main/user', 'base_role' => 'ROLE_ADMIN', 'form_class' => UserType::class, 'actions' => [ 'index' => [ 'role' => 'ROLE_ADMIN', 'template' => '@ChillMain/User/index.html.twig', ], 'new' => [ 'role' => 'ROLE_ADMIN', 'template' => '@ChillMain/User/new.html.twig', ], 'edit' => [ 'role' => 'ROLE_ADMIN', 'template' => '@ChillMain/User/edit.html.twig', ], ], ], [ 'class' => Location::class, 'name' => 'main_location', 'base_path' => '/admin/main/location', 'base_role' => 'ROLE_ADMIN', 'form_class' => LocationFormType::class, 'controller' => LocationController::class, 'actions' => [ 'index' => [ 'role' => 'ROLE_ADMIN', 'template' => '@ChillMain/Location/index.html.twig', ], 'new' => [ 'role' => 'ROLE_ADMIN', 'template' => '@ChillMain/Location/new.html.twig', ], 'edit' => [ 'role' => 'ROLE_ADMIN', 'template' => '@ChillMain/Location/edit.html.twig', ], ], ], [ 'class' => LocationType::class, 'name' => 'main_location_type', 'base_path' => '/admin/main/location-type', 'base_role' => 'ROLE_ADMIN', 'form_class' => LocationTypeType::class, 'controller' => LocationTypeController::class, 'actions' => [ 'index' => [ 'role' => 'ROLE_ADMIN', 'template' => '@ChillMain/LocationType/index.html.twig', ], 'new' => [ 'role' => 'ROLE_ADMIN', 'template' => '@ChillMain/LocationType/new.html.twig', ], 'edit' => [ 'role' => 'ROLE_ADMIN', 'template' => '@ChillMain/LocationType/edit.html.twig', ], ], ], [ 'class' => Country::class, 'name' => 'main_country', 'base_path' => '/admin/main/country', 'base_role' => 'ROLE_ADMIN', 'form_class' => CountryType::class, 'controller' => CountryController::class, 'actions' => [ 'index' => [ 'role' => 'ROLE_ADMIN', 'template' => '@ChillMain/Country/index.html.twig', ], 'new' => [ 'role' => 'ROLE_ADMIN', 'template' => '@ChillMain/Country/new.html.twig', ], 'edit' => [ 'role' => 'ROLE_ADMIN', 'template' => '@ChillMain/Country/edit.html.twig', ], ], ], [ 'class' => Civility::class, 'name' => 'main_civility', 'base_path' => '/admin/main/civility', 'base_role' => 'ROLE_ADMIN', 'form_class' => CivilityType::class, 'controller' => CivilityController::class, 'actions' => [ 'index' => [ 'role' => 'ROLE_ADMIN', 'template' => '@ChillMain/Civility/index.html.twig', ], 'new' => [ 'role' => 'ROLE_ADMIN', 'template' => '@ChillMain/Civility/new.html.twig', ], 'edit' => [ 'role' => 'ROLE_ADMIN', 'template' => '@ChillMain/Civility/edit.html.twig', ], ], ], [ 'class' => Language::class, 'name' => 'main_language', 'base_path' => '/admin/main/language', 'base_role' => 'ROLE_ADMIN', 'form_class' => LanguageType::class, 'controller' => LanguageController::class, 'actions' => [ 'index' => [ 'role' => 'ROLE_ADMIN', 'template' => '@ChillMain/Language/index.html.twig', ], 'new' => [ 'role' => 'ROLE_ADMIN', 'template' => '@ChillMain/Language/new.html.twig', ], 'edit' => [ 'role' => 'ROLE_ADMIN', 'template' => '@ChillMain/Language/edit.html.twig', ], ], ], ], 'apis' => [ [ 'class' => \Chill\MainBundle\Entity\Address::class, 'controller' => AddressApiController::class, 'name' => 'address', 'base_path' => '/api/1.0/main/address', 'base_role' => 'ROLE_USER', 'actions' => [ '_index' => [ 'methods' => [ Request::METHOD_GET => true, Request::METHOD_HEAD => true, ], ], '_entity' => [ 'methods' => [ Request::METHOD_GET => true, Request::METHOD_POST => true, Request::METHOD_HEAD => true, Request::METHOD_PATCH => true, ], ], ], ], [ 'class' => \Chill\MainBundle\Entity\UserJob::class, 'name' => 'user_job', 'base_path' => '/api/1.0/main/user-job', 'base_role' => 'ROLE_USER', 'actions' => [ '_index' => [ 'methods' => [ Request::METHOD_GET => true, Request::METHOD_HEAD => true, ], ], '_entity' => [ 'methods' => [ Request::METHOD_GET => true, Request::METHOD_HEAD => true, ], ], ], ], [ 'controller' => \Chill\MainBundle\Controller\AddressReferenceAPIController::class, 'class' => \Chill\MainBundle\Entity\AddressReference::class, 'name' => 'address_reference', 'base_path' => '/api/1.0/main/address-reference', 'base_role' => 'ROLE_USER', 'actions' => [ '_index' => [ 'methods' => [ Request::METHOD_GET => true, Request::METHOD_HEAD => true, ], ], '_entity' => [ 'methods' => [ Request::METHOD_GET => true, Request::METHOD_HEAD => true, ], ], ], ], [ 'controller' => \Chill\MainBundle\Controller\PostalCodeAPIController::class, 'class' => \Chill\MainBundle\Entity\PostalCode::class, 'name' => 'postal_code', 'base_path' => '/api/1.0/main/postal-code', 'base_role' => 'ROLE_USER', 'actions' => [ '_index' => [ 'methods' => [ Request::METHOD_GET => true, Request::METHOD_HEAD => true, ], ], '_entity' => [ 'methods' => [ Request::METHOD_GET => true, Request::METHOD_HEAD => true, Request::METHOD_POST => true, ], ], ], ], [ 'class' => \Chill\MainBundle\Entity\Country::class, 'name' => 'country', 'base_path' => '/api/1.0/main/country', 'base_role' => 'ROLE_USER', 'actions' => [ '_index' => [ 'methods' => [ Request::METHOD_GET => true, Request::METHOD_HEAD => true, ], ], '_entity' => [ 'methods' => [ Request::METHOD_GET => true, Request::METHOD_HEAD => true, ], ], ], ], [ 'class' => \Chill\MainBundle\Entity\User::class, 'controller' => \Chill\MainBundle\Controller\UserApiController::class, 'name' => 'user', 'base_path' => '/api/1.0/main/user', 'base_role' => 'ROLE_USER', 'actions' => [ '_index' => [ 'methods' => [ Request::METHOD_GET => true, Request::METHOD_HEAD => true, ], ], '_entity' => [ 'methods' => [ Request::METHOD_GET => true, Request::METHOD_HEAD => true, ], ], ], ], [ 'class' => \Chill\MainBundle\Entity\Scope::class, 'name' => 'scope', 'base_path' => '/api/1.0/main/scope', 'base_role' => 'ROLE_USER', 'actions' => [ '_index' => [ 'methods' => [ Request::METHOD_GET => true, Request::METHOD_HEAD => true, ], ], '_entity' => [ 'methods' => [ Request::METHOD_GET => true, Request::METHOD_HEAD => true, ], ], ], ], [ 'class' => \Chill\MainBundle\Entity\Location::class, 'controller' => \Chill\MainBundle\Controller\LocationApiController::class, 'name' => 'location', 'base_path' => '/api/1.0/main/location', 'base_role' => 'ROLE_USER', 'actions' => [ '_index' => [ 'methods' => [ Request::METHOD_GET => true, Request::METHOD_HEAD => true, ], ], '_entity' => [ 'methods' => [ Request::METHOD_GET => true, Request::METHOD_HEAD => true, Request::METHOD_POST => true, ], ], ], ], [ 'class' => \Chill\MainBundle\Entity\LocationType::class, 'controller' => \Chill\MainBundle\Controller\LocationTypeApiController::class, 'name' => 'location_type', 'base_path' => '/api/1.0/main/location-type', 'base_role' => 'ROLE_USER', 'actions' => [ '_index' => [ 'methods' => [ Request::METHOD_GET => true, Request::METHOD_HEAD => true, ], ], '_entity' => [ 'methods' => [ Request::METHOD_GET => true, Request::METHOD_HEAD => true, ], ], ], ], [ 'class' => \Chill\MainBundle\Entity\Civility::class, 'name' => 'civility', 'base_path' => '/api/1.0/main/civility', 'base_role' => 'ROLE_USER', 'controller' => CivilityApiController::class, 'actions' => [ '_index' => [ 'methods' => [ Request::METHOD_GET => true, Request::METHOD_HEAD => true, ], ], ], ], ], ]); } }