|
|
|
<?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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// todo move that to pages module
|
|
|
|
// pages search
|
|
|
|
$app->params['search_rules'][] = "SELECT title, content, CONCAT('/page/', id) AS url FROM {{pages}}";
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|