@@ 48-390 (lines=343) @@ | ||
45 | * @link https://github.com/techdivision/import-cli-simple |
|
46 | * @link http://www.techdivision.com |
|
47 | */ |
|
48 | class ImportCategoriesCommand extends Command |
|
49 | { |
|
50 | ||
51 | /** |
|
52 | * Configures the current command. |
|
53 | * |
|
54 | * @return void |
|
55 | * @see \Symfony\Component\Console\Command\Command::configure() |
|
56 | */ |
|
57 | protected function configure() |
|
58 | { |
|
59 | ||
60 | // initialize the command with the required/optional options |
|
61 | $this->setName('import:categories') |
|
62 | ->setDescription('Imports categories in the configured Magento 2 instance') |
|
63 | ->addArgument( |
|
64 | InputArgumentKeys::OPERATION_NAME, |
|
65 | InputArgument::OPTIONAL, |
|
66 | 'The operation that has to be used for the import, one of "add-update", "replace" or "delete"', |
|
67 | InputArgumentKeys::OPERATION_NAME_ARG_REPLACE |
|
68 | ) |
|
69 | ->addOption( |
|
70 | InputOptionKeys::CONFIGURATION, |
|
71 | null, |
|
72 | InputOption::VALUE_REQUIRED, |
|
73 | 'Specify the pathname to the configuration file to use', |
|
74 | sprintf('%s/techdivision-import.json', getcwd()) |
|
75 | ) |
|
76 | ->addOption( |
|
77 | InputOptionKeys::INSTALLATION_DIR, |
|
78 | null, |
|
79 | InputOption::VALUE_REQUIRED, |
|
80 | 'The Magento installation directory to which the files has to be imported' |
|
81 | ) |
|
82 | ->addOption( |
|
83 | InputOptionKeys::SOURCE_DIR, |
|
84 | null, |
|
85 | InputOption::VALUE_REQUIRED, |
|
86 | 'The directory that has to be watched for new files' |
|
87 | ) |
|
88 | ->addOption( |
|
89 | InputOptionKeys::TARGET_DIR, |
|
90 | null, |
|
91 | InputOption::VALUE_REQUIRED, |
|
92 | 'The target directory with the files that has been imported' |
|
93 | ) |
|
94 | ->addOption( |
|
95 | InputOptionKeys::UTILITY_CLASS_NAME, |
|
96 | null, |
|
97 | InputOption::VALUE_REQUIRED, |
|
98 | 'The utility class name with the SQL statements' |
|
99 | ) |
|
100 | ->addOption( |
|
101 | InputOptionKeys::PREFIX, |
|
102 | null, |
|
103 | InputOption::VALUE_REQUIRED, |
|
104 | 'The prefix of the CSV source file(s) that has/have to be imported' |
|
105 | ) |
|
106 | ->addOption( |
|
107 | InputOptionKeys::MAGENTO_EDITION, |
|
108 | null, |
|
109 | InputOption::VALUE_REQUIRED, |
|
110 | 'The Magento edition to be used, either one of CE or EE' |
|
111 | ) |
|
112 | ->addOption( |
|
113 | InputOptionKeys::MAGENTO_VERSION, |
|
114 | null, |
|
115 | InputOption::VALUE_REQUIRED, |
|
116 | 'The Magento version to be used, e. g. 2.1.2' |
|
117 | ) |
|
118 | ->addOption( |
|
119 | InputOptionKeys::SOURCE_DATE_FORMAT, |
|
120 | null, |
|
121 | InputOption::VALUE_REQUIRED, |
|
122 | 'The date format used in the CSV file(s)' |
|
123 | ) |
|
124 | ->addOption( |
|
125 | InputOptionKeys::USE_DB_ID, |
|
126 | null, |
|
127 | InputOption::VALUE_REQUIRED, |
|
128 | 'The explicit database ID used for the actual import process' |
|
129 | ) |
|
130 | ->addOption( |
|
131 | InputOptionKeys::DB_PDO_DSN, |
|
132 | null, |
|
133 | InputOption::VALUE_REQUIRED, |
|
134 | 'The DSN used to connect to the Magento database where the data has to be imported, e. g. mysql:host=127.0.0.1;dbname=magento' |
|
135 | ) |
|
136 | ->addOption( |
|
137 | InputOptionKeys::DB_USERNAME, |
|
138 | null, |
|
139 | InputOption::VALUE_REQUIRED, |
|
140 | 'The username used to connect to the Magento database' |
|
141 | ) |
|
142 | ->addOption( |
|
143 | InputOptionKeys::DB_PASSWORD, |
|
144 | null, |
|
145 | InputOption::VALUE_REQUIRED, |
|
146 | 'The password used to connect to the Magento database' |
|
147 | ) |
|
148 | ->addOption( |
|
149 | InputOptionKeys::LOG_LEVEL, |
|
150 | null, |
|
151 | InputOption::VALUE_REQUIRED, |
|
152 | 'The log level to use' |
|
153 | ) |
|
154 | ->addOption( |
|
155 | InputOptionKeys::IGNORE_PID, |
|
156 | null, |
|
157 | InputOption::VALUE_REQUIRED, |
|
158 | 'Whether or not an existing PID should be ignored or not' |
|
159 | ) |
|
160 | ->addOption( |
|
161 | InputOptionKeys::DEBUG_MODE, |
|
162 | null, |
|
163 | InputOption::VALUE_REQUIRED, |
|
164 | 'Whether use the debug mode or not' |
|
165 | ) |
|
166 | ->addOption( |
|
167 | InputOptionKeys::PID_FILENAME, |
|
168 | null, |
|
169 | InputOption::VALUE_REQUIRED, |
|
170 | 'The explicit PID filename to use', |
|
171 | sprintf('%s/%s', sys_get_temp_dir(), Configuration::PID_FILENAME) |
|
172 | ); |
|
173 | } |
|
174 | ||
175 | /** |
|
176 | * Factory implementation to create a new initialized configuration instance. |
|
177 | * |
|
178 | * If command line options are specified, they will always override the |
|
179 | * values found in the configuration file. |
|
180 | * |
|
181 | * @param \Symfony\Component\Console\Input\InputInterface $input The Symfony console input instance |
|
182 | * |
|
183 | * @return \TechDivision\Import\Cli\Configuration The configuration instance |
|
184 | * @throws \Exception Is thrown, if the specified configuration file doesn't exist |
|
185 | */ |
|
186 | protected function configurationFactory(InputInterface $input) |
|
187 | { |
|
188 | ||
189 | // load the configuration filename we want to use |
|
190 | $filename = $input->getOption(InputOptionKeys::CONFIGURATION); |
|
191 | ||
192 | // load the JSON data |
|
193 | if (!$jsonData = file_get_contents($filename)) { |
|
194 | throw new \Exception(sprintf('Can\'t load configuration file %s', $filename)); |
|
195 | } |
|
196 | ||
197 | // initialize the JMS serializer and load the configuration |
|
198 | $serializer = SerializerBuilder::create()->build(); |
|
199 | /** @var \TechDivision\Import\Cli\Configuration $instance */ |
|
200 | $instance = $serializer->deserialize($jsonData, 'TechDivision\Import\Cli\Configuration', 'json'); |
|
201 | ||
202 | // query whether or not an operation name has been specified as command line |
|
203 | // option, if yes override the value from the configuration file |
|
204 | if ($input->hasArgument(InputArgumentKeys::OPERATION_NAME)) { |
|
205 | $instance->setOperationName($input->getArgument(InputArgumentKeys::OPERATION_NAME)); |
|
206 | } |
|
207 | ||
208 | // query whether or not a Magento installation directory has been specified as command line |
|
209 | // option, if yes override the value from the configuration file |
|
210 | if ($installationDir = $input->getOption(InputOptionKeys::INSTALLATION_DIR)) { |
|
211 | $instance->setInstallationDir($installationDir); |
|
212 | } |
|
213 | ||
214 | // query whether or not a directory for the source files has been specified as command line |
|
215 | // option, if yes override the value from the configuration file |
|
216 | if ($sourceDir = $input->getOption(InputOptionKeys::SOURCE_DIR)) { |
|
217 | $instance->setSourceDir($sourceDir); |
|
218 | } |
|
219 | ||
220 | // query whether or not a directory containing the imported files has been specified as command line |
|
221 | // option, if yes override the value from the configuration file |
|
222 | if ($targetDir = $input->getOption(InputOptionKeys::TARGET_DIR)) { |
|
223 | $instance->setTargetDir($targetDir); |
|
224 | } |
|
225 | ||
226 | // query whether or not a source date format has been specified as command |
|
227 | // line option, if yes override the value from the configuration file |
|
228 | if ($sourceDateFormat = $input->getOption(InputOptionKeys::SOURCE_DATE_FORMAT)) { |
|
229 | $instance->setSourceDateFormat($sourceDateFormat); |
|
230 | } |
|
231 | ||
232 | // query whether or not a Magento edition has been specified as command line |
|
233 | // option, if yes override the value from the configuration file |
|
234 | if ($magentoEdition = $input->getOption(InputOptionKeys::MAGENTO_EDITION)) { |
|
235 | $instance->setMagentoEdition($magentoEdition); |
|
236 | } |
|
237 | ||
238 | // query whether or not a Magento version has been specified as command line |
|
239 | // option, if yes override the value from the configuration file |
|
240 | if ($magentoVersion = $input->getOption(InputOptionKeys::MAGENTO_VERSION)) { |
|
241 | $instance->setMagentoVersion($magentoVersion); |
|
242 | } |
|
243 | ||
244 | // query whether or not a DB ID has been specified as command line |
|
245 | // option, if yes override the value from the configuration file |
|
246 | if ($useDbId = $input->getOption(InputOptionKeys::USE_DB_ID)) { |
|
247 | $instance->setUseDbId($useDbId); |
|
248 | } else { |
|
249 | // query whether or not a PDO DSN has been specified as command line |
|
250 | // option, if yes override the value from the configuration file |
|
251 | if ($dsn = $input->getOption(InputOptionKeys::DB_PDO_DSN)) { |
|
252 | // first REMOVE all other database configurations |
|
253 | $instance->clearDatabases(); |
|
254 | ||
255 | // initialize a new database configuration |
|
256 | $database = new Database(); |
|
257 | $database->setId(Uuid::uuid4()->__toString()); |
|
258 | $database->setDefault(true); |
|
259 | $database->setDsn($dsn); |
|
260 | ||
261 | // query whether or not a DB username has been specified as command line |
|
262 | // option, if yes override the value from the configuration file |
|
263 | if ($username = $input->getOption(InputOptionKeys::DB_USERNAME)) { |
|
264 | $database->setUsername($username); |
|
265 | } |
|
266 | ||
267 | // query whether or not a DB password has been specified as command line |
|
268 | // option, if yes override the value from the configuration file |
|
269 | if ($password = $input->getOption(InputOptionKeys::DB_PASSWORD)) { |
|
270 | $database->setPassword($password); |
|
271 | } |
|
272 | ||
273 | // add the database configuration |
|
274 | $instance->addDatabase($database); |
|
275 | } |
|
276 | } |
|
277 | ||
278 | // query whether or not the debug mode has been specified as command line |
|
279 | // option, if yes override the value from the configuration file |
|
280 | if ($debugMode = $input->getOption(InputOptionKeys::DEBUG_MODE)) { |
|
281 | $instance->setDebugMode($instance->mapBoolean($debugMode)); |
|
282 | } |
|
283 | ||
284 | // query whether or not the ignore PID flag has been specified as command line |
|
285 | // option, if yes override the value from the configuration file |
|
286 | if ($ignorePid = $input->getOption(InputOptionKeys::IGNORE_PID)) { |
|
287 | $instance->setIgnorePid($instance->mapBoolean($ignorePid)); |
|
288 | } |
|
289 | ||
290 | // query whether or not the log level has been specified as command line |
|
291 | // option, if yes override the value from the configuration file |
|
292 | if ($logLevel = $input->getOption(InputOptionKeys::LOG_LEVEL)) { |
|
293 | $instance->setLogLevel($logLevel); |
|
294 | } |
|
295 | ||
296 | // query whether or not a PID filename has been specified as command line |
|
297 | // option, if yes override the value from the configuration file |
|
298 | if ($pidFilename = $input->getOption(InputOptionKeys::PID_FILENAME)) { |
|
299 | $instance->setPidFilename($pidFilename); |
|
300 | } |
|
301 | ||
302 | // extend the plugins with the main configuration instance |
|
303 | /** @var \TechDivision\Import\Cli\Configuration\Subject $subject */ |
|
304 | foreach ($instance->getPlugins() as $plugin) { |
|
305 | // set the configuration instance on the plugin |
|
306 | $plugin->setConfiguration($instance); |
|
307 | ||
308 | // query whether or not the plugin has subjects configured |
|
309 | if ($subjects = $plugin->getSubjects()) { |
|
310 | // extend the plugin's subjects with the main configuration instance |
|
311 | /** @var \TechDivision\Import\Cli\Configuration\Subject $subject */ |
|
312 | foreach ($subjects as $subject) { |
|
313 | // set the configuration instance on the subject |
|
314 | $subject->setConfiguration($instance); |
|
315 | } |
|
316 | } |
|
317 | } |
|
318 | ||
319 | // query whether or not the debug mode is enabled and log level |
|
320 | // has NOT been overwritten with a commandline option |
|
321 | if ($instance->isDebugMode() && !$input->getOption(InputOptionKeys::LOG_LEVEL)) { |
|
322 | // set debug log level, if log level has NOT been overwritten on command line |
|
323 | $instance->setLogLevel(LogLevel::DEBUG); |
|
324 | } |
|
325 | ||
326 | // return the initialized configuration instance |
|
327 | return $instance; |
|
328 | } |
|
329 | ||
330 | /** |
|
331 | * Executes the current command. |
|
332 | * |
|
333 | * This method is not abstract because you can use this class |
|
334 | * as a concrete class. In this case, instead of defining the |
|
335 | * execute() method, you set the code to execute by passing |
|
336 | * a Closure to the setCode() method. |
|
337 | * |
|
338 | * @param \Symfony\Component\Console\Input\InputInterface $input An InputInterface instance |
|
339 | * @param \Symfony\Component\Console\Output\OutputInterface $output An OutputInterface instance |
|
340 | * |
|
341 | * @return null|int null or 0 if everything went fine, or an error code |
|
342 | * @throws \LogicException When this abstract method is not implemented |
|
343 | * @see \Symfony\Component\Console\Command\Command::execute() |
|
344 | */ |
|
345 | protected function execute(InputInterface $input, OutputInterface $output) |
|
346 | { |
|
347 | ||
348 | // register the JMS Serializer annotations |
|
349 | \Doctrine\Common\Annotations\AnnotationRegistry::registerAutoloadNamespace( |
|
350 | 'JMS\Serializer\Annotation', |
|
351 | dirname(__DIR__).'/../vendor/jms/serializer/src' |
|
352 | ); |
|
353 | ||
354 | // load the specified configuration |
|
355 | $configuration = $this->configurationFactory($input); |
|
356 | ||
357 | // initialize the PDO connection |
|
358 | $dsn = $configuration->getDatabase()->getDsn(); |
|
359 | $username = $configuration->getDatabase()->getUsername(); |
|
360 | $password = $configuration->getDatabase()->getPassword(); |
|
361 | $connection = new \PDO($dsn, $username, $password); |
|
362 | $connection->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); |
|
363 | ||
364 | // initialize the system logger |
|
365 | $systemLogger = new Logger('techdivision/import'); |
|
366 | $systemLogger->pushHandler( |
|
367 | new ErrorLogHandler( |
|
368 | ErrorLogHandler::OPERATING_SYSTEM, |
|
369 | $configuration->getLogLevel() |
|
370 | ) |
|
371 | ); |
|
372 | ||
373 | // initialize the registry/import processor |
|
374 | $registryProcessor = RegistryProcessorFactory::factory($connection, $configuration); |
|
375 | $importProcessor = ImportProcessorFactory::factory($connection, $configuration); |
|
376 | ||
377 | // initialize the importer |
|
378 | $importer = new Simple( |
|
379 | $systemLogger, |
|
380 | $registryProcessor, |
|
381 | $importProcessor, |
|
382 | $configuration, |
|
383 | $input, |
|
384 | $output |
|
385 | ); |
|
386 | ||
387 | // start the process |
|
388 | $importer->process(); |
|
389 | } |
|
390 | } |
|
391 |
@@ 48-390 (lines=343) @@ | ||
45 | * @link https://github.com/techdivision/import-cli-simple |
|
46 | * @link http://www.techdivision.com |
|
47 | */ |
|
48 | class ImportProductsCommand extends Command |
|
49 | { |
|
50 | ||
51 | /** |
|
52 | * Configures the current command. |
|
53 | * |
|
54 | * @return void |
|
55 | * @see \Symfony\Component\Console\Command\Command::configure() |
|
56 | */ |
|
57 | protected function configure() |
|
58 | { |
|
59 | ||
60 | // initialize the command with the required/optional options |
|
61 | $this->setName('import:products') |
|
62 | ->setDescription('Imports products in the configured Magento 2 instance') |
|
63 | ->addArgument( |
|
64 | InputArgumentKeys::OPERATION_NAME, |
|
65 | InputArgument::OPTIONAL, |
|
66 | 'The operation that has to be used for the import, one of "add-update", "replace" or "delete"', |
|
67 | InputArgumentKeys::OPERATION_NAME_ARG_REPLACE |
|
68 | ) |
|
69 | ->addOption( |
|
70 | InputOptionKeys::CONFIGURATION, |
|
71 | null, |
|
72 | InputOption::VALUE_REQUIRED, |
|
73 | 'Specify the pathname to the configuration file to use', |
|
74 | sprintf('%s/techdivision-import.json', getcwd()) |
|
75 | ) |
|
76 | ->addOption( |
|
77 | InputOptionKeys::INSTALLATION_DIR, |
|
78 | null, |
|
79 | InputOption::VALUE_REQUIRED, |
|
80 | 'The Magento installation directory to which the files has to be imported' |
|
81 | ) |
|
82 | ->addOption( |
|
83 | InputOptionKeys::SOURCE_DIR, |
|
84 | null, |
|
85 | InputOption::VALUE_REQUIRED, |
|
86 | 'The directory that has to be watched for new files' |
|
87 | ) |
|
88 | ->addOption( |
|
89 | InputOptionKeys::TARGET_DIR, |
|
90 | null, |
|
91 | InputOption::VALUE_REQUIRED, |
|
92 | 'The target directory with the files that has been imported' |
|
93 | ) |
|
94 | ->addOption( |
|
95 | InputOptionKeys::UTILITY_CLASS_NAME, |
|
96 | null, |
|
97 | InputOption::VALUE_REQUIRED, |
|
98 | 'The utility class name with the SQL statements' |
|
99 | ) |
|
100 | ->addOption( |
|
101 | InputOptionKeys::PREFIX, |
|
102 | null, |
|
103 | InputOption::VALUE_REQUIRED, |
|
104 | 'The prefix of the CSV source file(s) that has/have to be imported' |
|
105 | ) |
|
106 | ->addOption( |
|
107 | InputOptionKeys::MAGENTO_EDITION, |
|
108 | null, |
|
109 | InputOption::VALUE_REQUIRED, |
|
110 | 'The Magento edition to be used, either one of CE or EE' |
|
111 | ) |
|
112 | ->addOption( |
|
113 | InputOptionKeys::MAGENTO_VERSION, |
|
114 | null, |
|
115 | InputOption::VALUE_REQUIRED, |
|
116 | 'The Magento version to be used, e. g. 2.1.2' |
|
117 | ) |
|
118 | ->addOption( |
|
119 | InputOptionKeys::SOURCE_DATE_FORMAT, |
|
120 | null, |
|
121 | InputOption::VALUE_REQUIRED, |
|
122 | 'The date format used in the CSV file(s)' |
|
123 | ) |
|
124 | ->addOption( |
|
125 | InputOptionKeys::USE_DB_ID, |
|
126 | null, |
|
127 | InputOption::VALUE_REQUIRED, |
|
128 | 'The explicit database ID used for the actual import process' |
|
129 | ) |
|
130 | ->addOption( |
|
131 | InputOptionKeys::DB_PDO_DSN, |
|
132 | null, |
|
133 | InputOption::VALUE_REQUIRED, |
|
134 | 'The DSN used to connect to the Magento database where the data has to be imported, e. g. mysql:host=127.0.0.1;dbname=magento' |
|
135 | ) |
|
136 | ->addOption( |
|
137 | InputOptionKeys::DB_USERNAME, |
|
138 | null, |
|
139 | InputOption::VALUE_REQUIRED, |
|
140 | 'The username used to connect to the Magento database' |
|
141 | ) |
|
142 | ->addOption( |
|
143 | InputOptionKeys::DB_PASSWORD, |
|
144 | null, |
|
145 | InputOption::VALUE_REQUIRED, |
|
146 | 'The password used to connect to the Magento database' |
|
147 | ) |
|
148 | ->addOption( |
|
149 | InputOptionKeys::LOG_LEVEL, |
|
150 | null, |
|
151 | InputOption::VALUE_REQUIRED, |
|
152 | 'The log level to use' |
|
153 | ) |
|
154 | ->addOption( |
|
155 | InputOptionKeys::IGNORE_PID, |
|
156 | null, |
|
157 | InputOption::VALUE_REQUIRED, |
|
158 | 'Whether or not an existing PID should be ignored or not' |
|
159 | ) |
|
160 | ->addOption( |
|
161 | InputOptionKeys::DEBUG_MODE, |
|
162 | null, |
|
163 | InputOption::VALUE_REQUIRED, |
|
164 | 'Whether use the debug mode or not' |
|
165 | ) |
|
166 | ->addOption( |
|
167 | InputOptionKeys::PID_FILENAME, |
|
168 | null, |
|
169 | InputOption::VALUE_REQUIRED, |
|
170 | 'The explicit PID filename to use', |
|
171 | sprintf('%s/%s', sys_get_temp_dir(), Configuration::PID_FILENAME) |
|
172 | ); |
|
173 | } |
|
174 | ||
175 | /** |
|
176 | * Factory implementation to create a new initialized configuration instance. |
|
177 | * |
|
178 | * If command line options are specified, they will always override the |
|
179 | * values found in the configuration file. |
|
180 | * |
|
181 | * @param \Symfony\Component\Console\Input\InputInterface $input The Symfony console input instance |
|
182 | * |
|
183 | * @return \TechDivision\Import\Cli\Configuration The configuration instance |
|
184 | * @throws \Exception Is thrown, if the specified configuration file doesn't exist |
|
185 | */ |
|
186 | protected function configurationFactory(InputInterface $input) |
|
187 | { |
|
188 | ||
189 | // load the configuration filename we want to use |
|
190 | $filename = $input->getOption(InputOptionKeys::CONFIGURATION); |
|
191 | ||
192 | // load the JSON data |
|
193 | if (!$jsonData = file_get_contents($filename)) { |
|
194 | throw new \Exception(sprintf('Can\'t load configuration file %s', $filename)); |
|
195 | } |
|
196 | ||
197 | // initialize the JMS serializer and load the configuration |
|
198 | $serializer = SerializerBuilder::create()->build(); |
|
199 | /** @var \TechDivision\Import\Cli\Configuration $instance */ |
|
200 | $instance = $serializer->deserialize($jsonData, 'TechDivision\Import\Cli\Configuration', 'json'); |
|
201 | ||
202 | // query whether or not an operation name has been specified as command line |
|
203 | // option, if yes override the value from the configuration file |
|
204 | if ($input->hasArgument(InputArgumentKeys::OPERATION_NAME)) { |
|
205 | $instance->setOperationName($input->getArgument(InputArgumentKeys::OPERATION_NAME)); |
|
206 | } |
|
207 | ||
208 | // query whether or not a Magento installation directory has been specified as command line |
|
209 | // option, if yes override the value from the configuration file |
|
210 | if ($installationDir = $input->getOption(InputOptionKeys::INSTALLATION_DIR)) { |
|
211 | $instance->setInstallationDir($installationDir); |
|
212 | } |
|
213 | ||
214 | // query whether or not a directory for the source files has been specified as command line |
|
215 | // option, if yes override the value from the configuration file |
|
216 | if ($sourceDir = $input->getOption(InputOptionKeys::SOURCE_DIR)) { |
|
217 | $instance->setSourceDir($sourceDir); |
|
218 | } |
|
219 | ||
220 | // query whether or not a directory containing the imported files has been specified as command line |
|
221 | // option, if yes override the value from the configuration file |
|
222 | if ($targetDir = $input->getOption(InputOptionKeys::TARGET_DIR)) { |
|
223 | $instance->setTargetDir($targetDir); |
|
224 | } |
|
225 | ||
226 | // query whether or not a source date format has been specified as command |
|
227 | // line option, if yes override the value from the configuration file |
|
228 | if ($sourceDateFormat = $input->getOption(InputOptionKeys::SOURCE_DATE_FORMAT)) { |
|
229 | $instance->setSourceDateFormat($sourceDateFormat); |
|
230 | } |
|
231 | ||
232 | // query whether or not a Magento edition has been specified as command line |
|
233 | // option, if yes override the value from the configuration file |
|
234 | if ($magentoEdition = $input->getOption(InputOptionKeys::MAGENTO_EDITION)) { |
|
235 | $instance->setMagentoEdition($magentoEdition); |
|
236 | } |
|
237 | ||
238 | // query whether or not a Magento version has been specified as command line |
|
239 | // option, if yes override the value from the configuration file |
|
240 | if ($magentoVersion = $input->getOption(InputOptionKeys::MAGENTO_VERSION)) { |
|
241 | $instance->setMagentoVersion($magentoVersion); |
|
242 | } |
|
243 | ||
244 | // query whether or not a DB ID has been specified as command line |
|
245 | // option, if yes override the value from the configuration file |
|
246 | if ($useDbId = $input->getOption(InputOptionKeys::USE_DB_ID)) { |
|
247 | $instance->setUseDbId($useDbId); |
|
248 | } else { |
|
249 | // query whether or not a PDO DSN has been specified as command line |
|
250 | // option, if yes override the value from the configuration file |
|
251 | if ($dsn = $input->getOption(InputOptionKeys::DB_PDO_DSN)) { |
|
252 | // first REMOVE all other database configurations |
|
253 | $instance->clearDatabases(); |
|
254 | ||
255 | // initialize a new database configuration |
|
256 | $database = new Database(); |
|
257 | $database->setId(Uuid::uuid4()->__toString()); |
|
258 | $database->setDefault(true); |
|
259 | $database->setDsn($dsn); |
|
260 | ||
261 | // query whether or not a DB username has been specified as command line |
|
262 | // option, if yes override the value from the configuration file |
|
263 | if ($username = $input->getOption(InputOptionKeys::DB_USERNAME)) { |
|
264 | $database->setUsername($username); |
|
265 | } |
|
266 | ||
267 | // query whether or not a DB password has been specified as command line |
|
268 | // option, if yes override the value from the configuration file |
|
269 | if ($password = $input->getOption(InputOptionKeys::DB_PASSWORD)) { |
|
270 | $database->setPassword($password); |
|
271 | } |
|
272 | ||
273 | // add the database configuration |
|
274 | $instance->addDatabase($database); |
|
275 | } |
|
276 | } |
|
277 | ||
278 | // query whether or not the debug mode has been specified as command line |
|
279 | // option, if yes override the value from the configuration file |
|
280 | if ($debugMode = $input->getOption(InputOptionKeys::DEBUG_MODE)) { |
|
281 | $instance->setDebugMode($instance->mapBoolean($debugMode)); |
|
282 | } |
|
283 | ||
284 | // query whether or not the ignore PID flag has been specified as command line |
|
285 | // option, if yes override the value from the configuration file |
|
286 | if ($ignorePid = $input->getOption(InputOptionKeys::IGNORE_PID)) { |
|
287 | $instance->setIgnorePid($instance->mapBoolean($ignorePid)); |
|
288 | } |
|
289 | ||
290 | // query whether or not the log level has been specified as command line |
|
291 | // option, if yes override the value from the configuration file |
|
292 | if ($logLevel = $input->getOption(InputOptionKeys::LOG_LEVEL)) { |
|
293 | $instance->setLogLevel($logLevel); |
|
294 | } |
|
295 | ||
296 | // query whether or not a PID filename has been specified as command line |
|
297 | // option, if yes override the value from the configuration file |
|
298 | if ($pidFilename = $input->getOption(InputOptionKeys::PID_FILENAME)) { |
|
299 | $instance->setPidFilename($pidFilename); |
|
300 | } |
|
301 | ||
302 | // extend the plugins with the main configuration instance |
|
303 | /** @var \TechDivision\Import\Cli\Configuration\Subject $subject */ |
|
304 | foreach ($instance->getPlugins() as $plugin) { |
|
305 | // set the configuration instance on the plugin |
|
306 | $plugin->setConfiguration($instance); |
|
307 | ||
308 | // query whether or not the plugin has subjects configured |
|
309 | if ($subjects = $plugin->getSubjects()) { |
|
310 | // extend the plugin's subjects with the main configuration instance |
|
311 | /** @var \TechDivision\Import\Cli\Configuration\Subject $subject */ |
|
312 | foreach ($subjects as $subject) { |
|
313 | // set the configuration instance on the subject |
|
314 | $subject->setConfiguration($instance); |
|
315 | } |
|
316 | } |
|
317 | } |
|
318 | ||
319 | // query whether or not the debug mode is enabled and log level |
|
320 | // has NOT been overwritten with a commandline option |
|
321 | if ($instance->isDebugMode() && !$input->getOption(InputOptionKeys::LOG_LEVEL)) { |
|
322 | // set debug log level, if log level has NOT been overwritten on command line |
|
323 | $instance->setLogLevel(LogLevel::DEBUG); |
|
324 | } |
|
325 | ||
326 | // return the initialized configuration instance |
|
327 | return $instance; |
|
328 | } |
|
329 | ||
330 | /** |
|
331 | * Executes the current command. |
|
332 | * |
|
333 | * This method is not abstract because you can use this class |
|
334 | * as a concrete class. In this case, instead of defining the |
|
335 | * execute() method, you set the code to execute by passing |
|
336 | * a Closure to the setCode() method. |
|
337 | * |
|
338 | * @param \Symfony\Component\Console\Input\InputInterface $input An InputInterface instance |
|
339 | * @param \Symfony\Component\Console\Output\OutputInterface $output An OutputInterface instance |
|
340 | * |
|
341 | * @return null|int null or 0 if everything went fine, or an error code |
|
342 | * @throws \LogicException When this abstract method is not implemented |
|
343 | * @see \Symfony\Component\Console\Command\Command::execute() |
|
344 | */ |
|
345 | protected function execute(InputInterface $input, OutputInterface $output) |
|
346 | { |
|
347 | ||
348 | // register the JMS Serializer annotations |
|
349 | \Doctrine\Common\Annotations\AnnotationRegistry::registerAutoloadNamespace( |
|
350 | 'JMS\Serializer\Annotation', |
|
351 | dirname(__DIR__).'/../vendor/jms/serializer/src' |
|
352 | ); |
|
353 | ||
354 | // load the specified configuration |
|
355 | $configuration = $this->configurationFactory($input); |
|
356 | ||
357 | // initialize the PDO connection |
|
358 | $dsn = $configuration->getDatabase()->getDsn(); |
|
359 | $username = $configuration->getDatabase()->getUsername(); |
|
360 | $password = $configuration->getDatabase()->getPassword(); |
|
361 | $connection = new \PDO($dsn, $username, $password); |
|
362 | $connection->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); |
|
363 | ||
364 | // initialize the system logger |
|
365 | $systemLogger = new Logger('techdivision/import'); |
|
366 | $systemLogger->pushHandler( |
|
367 | new ErrorLogHandler( |
|
368 | ErrorLogHandler::OPERATING_SYSTEM, |
|
369 | $configuration->getLogLevel() |
|
370 | ) |
|
371 | ); |
|
372 | ||
373 | // initialize the registry/import processor |
|
374 | $registryProcessor = RegistryProcessorFactory::factory($connection, $configuration); |
|
375 | $importProcessor = ImportProcessorFactory::factory($connection, $configuration); |
|
376 | ||
377 | // initialize the importer |
|
378 | $importer = new Simple( |
|
379 | $systemLogger, |
|
380 | $registryProcessor, |
|
381 | $importProcessor, |
|
382 | $configuration, |
|
383 | $input, |
|
384 | $output |
|
385 | ); |
|
386 | ||
387 | // start the process |
|
388 | $importer->process(); |
|
389 | } |
|
390 | } |
|
391 |