-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.php
71 lines (57 loc) · 2.91 KB
/
main.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?php
namespace Bnm\Importer {
use \Bnm\Importer\ImportDefinitions\ImportDefinitionFactory;
use \Bnm\Importer\ImportValidationStatus;
use \Bnm\Importer\Importer;
use \Bnm\Importer\Utility\ConsoleLogger as Logger;
use \Bnm\Importer\Utility\Messenger;
require __DIR__ . '/vendor/autoload.php';
const INCOMING_DIR = __DIR__ . '/incoming_data';
const BACKUP_DIR = __DIR__ . '/backup';
$logger = new Logger();
$messenger = new Messenger();
// files in the incoming directory are broken out into sub directories for each import definition
foreach (new \DirectoryIterator(INCOMING_DIR) as $dir_info) {
if (!$dir_info->isDir() || $dir_info->isDot()) {
continue;
}
foreach (new \DirectoryIterator($dir_info->getPathname()) as $file_info) {
if (!$file_info->isFile() || $file_info->isDot() || $file_info->getExtension() !== 'xlsx') {
continue;
}
$full_path_to_folder = $dir_info->getPathname();
$folder_name = $dir_info->getBasename();
$full_path_to_file = $file_info->getPathname();
$file_name = $file_info->getFilename();
$excel_parser = new ExcelParser($full_path_to_file);
$import_data = $excel_parser->parse();
$import_definition = ImportDefinitionFactory::getImportDefinitionByLocation($folder_name);
if ($import_definition == null) {
$messenger->send_message("Could not locate an import definition for {$file_name}");
$logger->writeLine("Could not locate an import definition for {$file_name}");
continue;
}
$import_context = new ImportContext();
$importer = new Importer($import_context, $import_data, $import_definition);
$import_validation_result = $importer->validate();
if ($import_validation_result->status == ImportValidationStatus::Error) {
$messenger->send_message("Import for file {$folder_name}/{$file_name} did not pass validation: " . implode(" ", $import_validation_result->errors));
$logger->writeLine("Errors:", $import_validation_result->errors);
continue;
}
try {
$import_success = $importer->import();
if ($import_success) {
rename($file_info->getRealPath(), "{$full_path_to_folder}/backup/{$import_context->getImportId()}-{$file_name}");
}
$messenger->send_message("File {$folder_name}/{$file_name} imported successfully.");
} catch (\Exception $ex) {
$messenger->send_message("Import for file {$folder_name}/{$file_name} failed: {$ex->getMessage()}");
$logger->writeLine($ex->getMessage());
continue;
} finally {
$excel_parser->cleanupTempImages();
}
}
}
}