pruvodce/db/import.php

75 lines
1.8 KiB
PHP

<?php
if (php_sapi_name()!='cli') {
die('ERROR: This script is only for command line.');
}
if (!file_exists(__DIR__ . '/../config.php')) {
die("ERROR \nKyselo not installed.\n");
}
$config = require __DIR__ . '/../config.php';
if (empty($argv[1])) {
die("ERROR \nBad import parameters. \nPlease specifiy: \n- GEOJSON file\n");
}
if (!file_exists($argv[1])) {
die("ERROR \nCannot open file: " . $argv[1] . "\n");
}
$json = file_get_contents($argv[1]);
$data = json_decode($json, true);
spl_autoload_register(function ($class){
require __DIR__ . '/../lib/' . str_replace('\\', '/', $class) . '.php';
});
$rows = new \severak\database\rows(new PDO('sqlite:' . __DIR__ . '/../' . $config['database']));
if ($data['type']=='FeatureCollection') {
foreach ($data['features'] as $feat) {
$poi = [
'slug' => slugify($feat['properties']['name']),
'name' => $feat['properties']['name'],
'description' => '',
'internal' => '',
'cheatsheet' => $feat['properties']['description'],
'lon' => $feat['geometry']['coordinates'][0],
'lat' => $feat['geometry']['coordinates'][1],
];
$rows->insert('poi', $poi);
}
}
echo 'OK';
function slugify($text, $divider = '-')
{
// replace non letter or digits by divider
$text = preg_replace('~[^\pL\d]+~u', $divider, $text);
// transliterate
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
// remove unwanted characters
$text = preg_replace('~[^-\w]+~', '', $text);
// trim
$text = trim($text, $divider);
// remove duplicate divider
$text = preg_replace('~-+~', $divider, $text);
// lowercase
$text = strtolower($text);
if (empty($text)) {
return 'n-a';
}
return $text;
}