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.
150 lines
5.3 KiB
150 lines
5.3 KiB
<?php |
|
|
|
namespace common\bootstrap; |
|
|
|
//use Elasticsearch\Client; |
|
//use Elasticsearch\ClientBuilder; |
|
//use core\components\modules\ModuleInterface; |
|
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\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\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'] |
|
); |
|
}); |
|
|
|
/*$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); |
|
*/ |
|
|
|
// Connect common modules |
|
if (Yii::$app->db->schema->getTableSchema('{{%modules}}') !== null) { |
|
$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); |
|
} |
|
} |
|
} |
|
} |