26, 'sections' => 'https://docs.google.com/spreadsheets/d/17uSZJgHL_V3f-1MwosdH4JVt21BBXdchTsscDrJqdOg/export?format=csv&gid=1378451953', 'mapping' => 'https://docs.google.com/spreadsheets/d/17uSZJgHL_V3f-1MwosdH4JVt21BBXdchTsscDrJqdOg/export?format=csv&gid=1395428523', ]; protected function run(array $arguments) { $sectionTree = ServiceContainer::getService(SectionTree::class); $znzUtil = ServiceContainer::getService(ZNZUtil::class); $sections = []; foreach (FileUtil::loadCSV($arguments['sections']) as $key => $item) { if ($key == 0) { continue; } $sectionNames = array_filter([$item[6], $item[7], $item[8], $item[9]]); $sectionName = end($sectionNames); if (empty($sectionName)) { continue; } $parents = array_filter([$item[1], $item[2], $item[3], $item[4], $item[5]]); $uniqueId = implode('-', $parents); $parentUniqueId = null; if (count($parents) > 2) { array_pop($parents); $parentUniqueId = implode('-', $parents); } $sections[$uniqueId] = [ 'name' => $sectionName, 'parent' => $parentUniqueId, 'position' => $key, ]; } $sectionParameters = []; foreach (FileUtil::loadCSV($arguments['mapping']) as $key => $item) { if ($key == 0) { continue; } $uniqueId = implode('-', array_filter([$item[2], $item[3], $item[4], $item[5], $item[6]])); $znzValueId = $item[7]; if (!($valueId = $znzUtil->getParameterValueMapping($arguments['parameterId'], $znzValueId))) { continue; } $sectionParameters[$uniqueId][] = $valueId; } sqlQueryBuilder() ->delete('sections') ->where('id > 0') ->execute(); sqlQuery('ALTER TABLE sections AUTO_INCREMENT=1'); $sectionsMap = []; foreach ($sections as $uid => $section) { $virtualParameterValueId = array_unique($sectionParameters[$uid] ?? []); $sectionsMap[$uid] = sqlGetConnection()->transactional(function () use ($section, $virtualParameterValueId) { sqlQueryBuilder() ->insert('sections') ->directValues( [ 'name' => $section['name'], 'virtual' => !empty($virtualParameterValueId) ? 'Y' : 'N', 'data' => json_encode( [ 'virtual_settings' => [ 'figure' => ['Y'], 'parameters' => $virtualParameterValueId, 'parametersValuesOperator' => 'OR', 'inStore' => ['InStore'], ], ] ), ] ) ->execute(); return (int) sqlInsertId(); }); sqlQueryBuilder() ->insert('sections_relation') ->directValues( [ 'id_section' => $sectionsMap[$uid], 'id_topsection' => $section['parent'] ? $sectionsMap[$section['parent']] : null, 'position' => $section['position'], ] )->execute(); } $sectionTree->clearCache(); } } return ImportSectionsScript::class;