You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							188 lines
						
					
					
						
							7.1 KiB
						
					
					
				
			
		
		
	
	
							188 lines
						
					
					
						
							7.1 KiB
						
					
					
				| <?php | |
|  | |
| namespace common\bootstrap; | |
|  | |
| //use Elasticsearch\Client; | |
| //use Elasticsearch\ClientBuilder; | |
| //use core\components\modules\ModuleInterface; | |
| use common\modules\languages\entities\Language; | |
| use core\entities\ModuleRecord; | |
|  | |
| //use League\Flysystem\Adapter\Ftp; | |
| //use League\Flysystem\Filesystem; | |
| //use shop\cart\Cart; | |
| //use shop\cart\cost\calculator\DynamicCost; | |
| //use shop\cart\cost\calculator\SimpleCost; | |
| //use shop\cart\storage\HybridStorage; | |
| use core\dispatchers\AsyncEventDispatcher; | |
| use core\dispatchers\DeferredEventDispatcher; | |
| use core\dispatchers\EventDispatcher; | |
| use core\dispatchers\SimpleEventDispatcher; | |
|  | |
| //use core\entities\behaviors\FlySystemImageUploadBehavior; | |
| //use shop\entities\Shop\Product\events\ProductAppearedInStock; | |
| use core\jobs\AsyncEventJobHandler; | |
| use core\listeners\user\UserSignupConfirmedListener; | |
| use core\listeners\user\UserSignupRequestedListener; | |
|  | |
| //use shop\repositories\events\EntityPersisted; | |
| //use shop\repositories\events\EntityRemoved; | |
| use core\services\newsletter\FakeSubscribe; | |
| use core\services\newsletter\MailChimp; | |
| use core\services\newsletter\Newsletter; | |
|  | |
| //use shop\services\sms\LoggedSender; | |
| //use shop\services\sms\SmsRu; | |
| //use shop\services\sms\SmsSender; | |
| //use shop\services\yandex\ShopInfo; | |
| //use shop\services\yandex\YandexMarket; | |
| use core\events\user\UserSignUpConfirmed; | |
| use core\events\user\UserSignUpRequested; | |
| use core\services\ContactService; | |
| use yii\base\BootstrapInterface; | |
| use yii\base\ErrorHandler; | |
| use yii\caching\Cache; | |
| use yii\di\Container; | |
| use yii\di\Instance; | |
| use yii\helpers\ArrayHelper; | |
| use yii\mail\MailerInterface; | |
| use yii\rbac\ManagerInterface; | |
| use yii\queue\Queue; | |
| use Yii; | |
|  | |
| class SetUp implements BootstrapInterface | |
| { | |
|     public function bootstrap($app): void | |
|     { | |
|         $container = \Yii::$container; | |
|  | |
|         /*$container->setSingleton(Client::class, function () { | |
|             return ClientBuilder::create()->build(); | |
|         });*/ | |
|  | |
|         $container->setSingleton(MailerInterface::class, function () use ($app) { | |
|             return $app->mailer; | |
|         }); | |
|  | |
|         $container->setSingleton(ErrorHandler::class, function () use ($app) { | |
|             return $app->errorHandler; | |
|         }); | |
|  | |
|         $container->setSingleton(Queue::class, function () use ($app) { | |
|             return $app->get('queue'); | |
|         }); | |
|  | |
|         $container->setSingleton(Cache::class, function () use ($app) { | |
|             return $app->cache; | |
|         }); | |
|  | |
|         $container->setSingleton(ManagerInterface::class, function () use ($app) { | |
|             return $app->authManager; | |
|         }); | |
|  | |
|         $container->setSingleton(ContactService::class, [], [ | |
|             $app->params['adminEmail'] | |
|         ]); | |
|  | |
|         /*$container->setSingleton(Cart::class, function () use ($app) { | |
|             return new Cart( | |
|                 new HybridStorage($app->get('user'), 'cart', 3600 * 24, $app->db), | |
|                 new DynamicCost(new SimpleCost()) | |
|             ); | |
|         }); | |
|  | |
|         $container->setSingleton(YandexMarket::class, [], [ | |
|             new ShopInfo($app->name, $app->name, $app->params['frontendHostInfo']), | |
|         ]);*/ | |
|  | |
|         $container->setSingleton(Newsletter::class, function () use ($app) { | |
|             //return new MailChimp( | |
|             //    new \DrewM\MailChimp\MailChimp($app->params['mailChimpKey']), | |
|             //    $app->params['mailChimpListId'] | |
|             //); | |
|             return new FakeSubscribe(); | |
|         }); | |
|  | |
|         /*$container->setSingleton(SmsSender::class, function () use ($app) { | |
|             return new LoggedSender( | |
|                 new SmsRu($app->params['smsRuKey']), | |
|                 \Yii::getLogger() | |
|             ); | |
|         });*/ | |
|  | |
|         $container->setSingleton(EventDispatcher::class, DeferredEventDispatcher::class); | |
|  | |
|         $container->setSingleton(DeferredEventDispatcher::class, function (Container $container) { | |
|             return new DeferredEventDispatcher(new AsyncEventDispatcher($container->get(Queue::class))); | |
|         }); | |
|  | |
|         $container->setSingleton(SimpleEventDispatcher::class, function (Container $container) { | |
|             return new SimpleEventDispatcher($container, [ | |
|                 UserSignUpRequested::class => [UserSignupRequestedListener::class], | |
|                 UserSignUpConfirmed::class => [UserSignupConfirmedListener::class], | |
|                 //ProductAppearedInStock::class => [ProductAppearedInStockListener::class], | |
|                 //EntityPersisted::class => [ | |
|                 //    ProductSearchPersistListener::class, | |
|                 //    CategoryPersistenceListener::class, | |
|                 //], | |
|                 //EntityRemoved::class => [ | |
|                 //    ProductSearchRemoveListener::class, | |
|                 //    CategoryPersistenceListener::class, | |
|                 //], | |
|             ]); | |
|         }); | |
|  | |
|         $container->setSingleton(AsyncEventJobHandler::class, [], [ | |
|             Instance::of(SimpleEventDispatcher::class) | |
|         ]); | |
|  | |
|         /* | |
|         $container->setSingleton(Filesystem::class, function () use ($app) { | |
|             return new Filesystem(new Ftp($app->params['ftp'])); | |
|         }); | |
|  | |
|         $container->set(ImageUploadBehavior::class, FlySystemImageUploadBehavior::class); | |
|         */ | |
|  | |
|         // Set frontend languages | |
|         if (\Yii::$app->moduleManager->isTableExist('{{%languages}}') && file_exists(Yii::getAlias('@common/modules/languages/LanguagesModule.php'))) { | |
|             $language                                = Language::find()->active()->default()->one(); | |
|             Yii::$app->params['defaultLanguage']     = $language ? $language->name : 'ru'; | |
|             Yii::$app->params['translatedLanguages'] = ArrayHelper::map(Language::find()->active()->all(), 'name', 'title'); | |
|         } else { | |
|             Yii::$app->params['defaultLanguage']     = 'en'; | |
|             Yii::$app->params['translatedLanguages'] = ['en']; | |
|         } | |
|  | |
|         // Set backend languages | |
|         if (basename($app->getBasePath()) === 'backend') { | |
|             $app->language                   = !$app->user->isGuest && $app->user->identity->user->backend_language ? $app->user->identity->user->backend_language : Yii::$app->params['defaultLanguage']; | |
|             $app->params['frontendLanguage'] = Yii::$app->session->get('frontendLanguage', Yii::$app->params['defaultLanguage']); | |
|         } | |
|  | |
|         // Connect common modules | |
|         if (\Yii::$app->moduleManager->isTableExist('{{%modules}}')) { | |
|             $modules = ModuleRecord::find()->andWhere(['type' => 'common'])->andWhere(['active' => 1])->all(); | |
|             foreach ($modules as $module) { | |
|                 Yii::$app->setModule($module->name, [ | |
|                     'class' => $module->class, | |
|                 ]); | |
|                 Yii::$app->getModule($module->name)->bootstrap(Yii::$app); | |
|             } | |
|         } else { // connect all existing modules | |
|             $this->connectExistingModules(); | |
|         } | |
|     } | |
|  | |
|     private function connectExistingModules(): void | |
|     { | |
|         $modules = Yii::$app->moduleManager->getLocalModules(); | |
|         //print_r($modules); die; | |
|         foreach ($modules as $module) { | |
|             Yii::$app->setModule($module['name'], [ | |
|                 'class' => 'common\modules\\' . $module['name'] . '\\' . $module['module'], | |
|             ]); | |
|             Yii::$app->getModule($module['name'])->bootstrap(Yii::$app); | |
|         } | |
|     } | |
| } |