'16 век и ранее', 'r1675' => '17 век', 'r1740' => '18 век', 'r1781' => '19 век', 'r1858' => '1901-1920', 'r1900' => '1921-1940', 'r1926' => '1941-1960', 'r1936' => '1961-1980', 'r1946' => '1981-2000', 'r200-now' => '2000 и н.в.' ]; $get_fs = null; $get_fs = recovery(function (string $path) use (&$get_fs) { $result = (object) ['files' => (object)[]]; $dirs = array_filter(scandir($path), function ($dir) { return $dir !== '.' && $dir !== '..'; }); foreach($dirs as $dir) { $new_path = $path . DIRECTORY_SEPARATOR . $dir; if(is_dir($new_path)) $result->$dir = $get_fs($new_path); else if(is_file($new_path)) { $filename = pathinfo($new_path, PATHINFO_FILENAME); $result->files->$filename = $new_path; } } return $result; }, function($e) { throw $e; }); $main = recovery(function (object $period_view) use (&$get_fs,&$db_manager) { $db_manager->delete_table(); $db_manager->create_table(); $fs = $get_fs('.' . DIRECTORY_SEPARATOR . 'data'); $removeLeadingDot = function(?string $path): ?string { if ($path === null) return null; return preg_replace('#^\.(?=[/\\\\])#', '', $path); }; $removeLeadingDotFromJsonArray = function(?string $json): ?string { if ($json === null) return null; $arr = json_decode($json); if (!is_array($arr)) return $json; $arr = array_map(fn($p) => preg_replace('#^\.(?=.*)#', '', $p), $arr); return json_encode($arr, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); }; $settlements_data = []; $material_path = $fs->material; foreach ($fs->geojson->files as $geojson_path) { if (!file_exists($geojson_path)) { echo 'Невалидный geojson-path : ' . $geojson_path; continue; } $geojson = json_decode(file_get_contents($geojson_path)); $features = $geojson->features; $basename = pathinfo($geojson_path, PATHINFO_FILENAME); $period = $period_view->$basename; foreach($features as $feature) { $properties = $feature->properties; $coordinates = $feature->geometry->coordinates; $en = $properties->en; $info_exist = 0; $background = null; $images = null; $slider = null; $video = null; if(!empty($en) && isset($material_path->$en)) { $material = $material_path->$en; $tmp = array_values((array)$material->background->files); $background = end($tmp); if (!empty($material->image) && isset($material->image)) { $tmp = array_values((array)$material->image->files); $images = json_encode($tmp, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) ?: null; } if (!empty($material->slider) && isset($material->slider)) { $tmp = array_values((array)$material->slider->files); $slider = json_encode($tmp, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) ?: null; } if (!empty($material->video) && isset($material->video)) { $tmp = array_values((array)$material->video->files); $video = end($tmp); } $info_exist = 1; } switch (mb_strtolower($properties->Tupe)) { case 'археология': $type = 'археообъект'; break; case 'юрты': $type = 'юрта'; break; default: $type = $properties->Tupe; } // Убираем точку в путях перед записью в массив $background = $removeLeadingDot($background); $images = $removeLeadingDotFromJsonArray($images); $slider = $removeLeadingDotFromJsonArray($slider); $video = $removeLeadingDot($video); array_push($settlements_data, [ 'name' => $properties->Name, 'type' => $type, 'period' => $period, 'longitude' => $coordinates[0], 'latitude' => $coordinates[1], 'info_exist' => $info_exist, 'slider' => $slider, 'images' => $images, 'video' => $video, 'background' => $background ]); } } $settlements_arg = array_map( fn($settlements) => array_values((array) $settlements), $settlements_data ); $db_manager->create_all($settlements_arg); }, function($e) { throw $e; }); $main($period_view); ?>