1 <?php
2
3 4 5 6 7 8 9 10 11
12
13 14 15 16 17 18 19
20 class ProductServiceFactory extends AbstractProductServiceFactory
21 {
22 23 24 25 26
27 protected $db;
28
29
30 31 32 33 34
35 public function __construct(CI_DB_query_builder $db)
36 {
37 $this->db = $db;
38 }
39
40
41 42 43 44 45
46 public function createProductObjectService()
47 {
48 $productFactory = MainFactory::create('ProductFactory');
49
50 return MainFactory::create('ProductObjectService', $productFactory);
51 }
52
53
54 55 56 57 58
59 public function createProductReadService()
60 {
61 $productRepository = $this->_getProductRepository();
62
63 $productListProviderFactory = MainFactory::create('ProductListProviderFactory', $productRepository, $this->db);
64
65 $productCategoryLinker = MainFactory::create('ProductCategoryLinker', $this->db);
66
67 return MainFactory::create('ProductReadService', $productRepository, $productListProviderFactory,
68 $productCategoryLinker);
69 }
70
71
72 73 74 75 76
77 public function createProductWriteService()
78 {
79 $productRepository = $this->_getProductRepository();
80
81 $productImageFileStorage = $this->_getProductImageFileStorage();
82
83 $productCategoryLinker = MainFactory::create('ProductCategoryLinker', $this->db);
84
85 $envProductImagePathsSettings = MainFactory::create('EnvProductImageFileStorageSettings');
86
87 $languageProvider = MainFactory::create('YetAnotherLanguageProvider', StaticGXCoreLoader::getDatabaseQueryBuilder());
88
89 return MainFactory::create('ProductWriteService', $productRepository, $productImageFileStorage,
90 $productCategoryLinker, $envProductImagePathsSettings, $languageProvider);
91 }
92
93
94 95 96 97 98
99 protected function _getProductRepository()
100 {
101 $productFactory = MainFactory::create('ProductFactory');
102
103 $customerStatusProvider = MainFactory::create('CustomerStatusProvider', $this->db);
104
105 $languageProvider = MainFactory::create('YetAnotherLanguageProvider', StaticGXCoreLoader::getDatabaseQueryBuilder());
106 $productRepoReader = MainFactory::create('ProductRepositoryReader', $this->db, $productFactory,
107 $customerStatusProvider);
108 $productRepoWriter = MainFactory::create('ProductRepositoryWriter', $this->db, $languageProvider);
109 $productRepoDeleter = MainFactory::create('ProductRepositoryDeleter', $this->db);
110
111 $productSettingsRepoReader = MainFactory::create('ProductSettingsRepositoryReader', $this->db, $productFactory,
112 $customerStatusProvider);
113 $productSettingsRepoWriter = MainFactory::create('ProductSettingsRepositoryWriter', $this->db,
114 $customerStatusProvider);
115
116 $productSettingsRepo = MainFactory::create('ProductSettingsRepository', $productSettingsRepoReader,
117 $productSettingsRepoWriter);
118
119 $addonValueStorageFactory = MainFactory::create('AddonValueStorageFactory', $this->db);
120
121 $addonValueService = MainFactory::create('AddonValueService', $addonValueStorageFactory);
122
123 $imageContainerRepo = MainFactory::create('ProductImageContainerRepository', $this->db);
124
125 $productRepo = MainFactory::create('ProductRepository', $productRepoReader, $productRepoWriter,
126 $productRepoDeleter, $productSettingsRepo, $addonValueService,
127 $imageContainerRepo);
128
129 return $productRepo;
130 }
131
132
133 134 135 136 137
138 protected function _getProductImageFileStorage()
139 {
140 $productImageFileSettings = MainFactory::create('EnvProductImageFileStorageSettings');
141 $productImageProcessing = MainFactory::create('LegacyProductImageProcessing');
142 $productImageFileStorage = MainFactory::create('ProductImageFileStorage', $productImageFileSettings,
143 $productImageProcessing);
144
145 return $productImageFileStorage;
146 }
147 }