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