Commit 82f05481 authored by Sebastian Castro's avatar Sebastian Castro

Import: some fixs and improvements. Add also new helper videos

parent 63cd1239
<?php
namespace Biopen\GeoDirectoryBundle\Admin;
use Sonata\AdminBundle\Admin\AbstractAdmin;
class ImportAbstractAdmin extends AbstractAdmin
{
protected function getInstructions($video_id)
{
$dm = $this->getConfigurationPool()->getContainer()->get('doctrine_mongodb');
$apiProperties = $dm->getRepository('BiopenGeoDirectoryBundle:Element')->findAllCustomProperties();
$propertiesText = count($apiProperties) > 0 ? implode($apiProperties, ', ') : "Aucun !";
$instructions = "
<div class='text-and-iframe-container'>
<div class='iframe-container-aside' style='margin-right: 40px'><iframe height='200' sandbox='allow-same-origin allow-scripts' src='https://video.colibris-outilslibres.org/videos/embed/" . $video_id . "' frameborder='0' allowfullscreen></iframe></div>
<p>
Les colonnes/propriétés importantes sont les suivantes :
<ul style='margin-left: 20px'>
<li><b>name</b> Le titre de la fiche</li>
<li><b>categories</b> la liste des catégories séparées par des virgules. Exple: Alimentation, Restaurant
<li><b>address</b> L'adresse de l'élément. Si vous disposez d'une adresse plus précise vous pouvez plutot utiliser les colonnes/propriétés suivantes : <b>streetAddress, addressLocality, postalCode, addressCountry</b></li>
<li><b>latitude</b> (Sinon, elle peut être calculée à partir de l'adresse)</li>
<li><b>longitude</b> (Sinon, elle peut être calculée à partir de l'adresse)</li>
</ul>
</p>
</div>
<p>D'autres colonnes/propriété intéressantes sont:</p>
<ul>
<li><b>id</b> L'id de cet élément dans son ancienne base de donnée. Permet notamment de ne pas re importé un même élément pour les import dynamiques</li>
<li><b>updatedAt</b> Date de la dernière mise à jour, permet de savoir lors d'un import dynamique si cet élément doit être mis à jour ou pas</li>
<li><b>source</b> Nom de la source des données. Si ce champ est vide (ce qui est le cas le plus courant) le nom de la source sera celui renseigné ci après. Mais il est pratique d'utiliser ce champ lorsque l'on importe des données venant de plusieurs sources via un seul fichier ou une seule API</li>
<li><b>email</b> L'email à utiliser pour contacter cet élément</li>
<li><b>owner</b> L'email du propriétaire de cet élément. Si un utilisateur avec le même email existe sur votre carte, alors il pourra éditer comme bon lui semble cet élement</li>
<li><b>images</b> Des urls vers des images, sous forme de tableau ou séparées par des virgules. Si le champ 'images' n'existe pas, toutes les colonnes/propriétés commançant par le mot 'image' seront utilisée (par example: image_logo, image, imageCouverture ...)</li>
</ul>
Vous pouvez ensuite avoir n'importe quelles autres colonnes/propriété, elles seront importées. Veillez à faire concorder le nom des colonnes avec le nom des champs de votre formulaire. </br></br>
Noms des autres champs déjà présent dans vos données : <b>" . $propertiesText . "</b>";
return $instructions;
}
}
\ No newline at end of file
......@@ -36,6 +36,7 @@ class ImportAdmin extends AbstractAdmin
$isDynamic = $this->getSubject()->isDynamicImport();
$title = $isDynamic ? "Import Dynamique, pour afficher des données gérées par quelqu'un d'autre" : "Importer des données en dur, depuis un fichier CSV ou une API Json";
$formMapper
->tab('Général')
->with($title, ['class' => 'col-md-6'])
......@@ -72,7 +73,7 @@ class ImportAdmin extends AbstractAdmin
$formMapper->end();
$formMapper->tab('Modifier les données en exécutant du code')
->with('Entrez du code qui sera exécuté à la reception des données, avant leur traitement par GoGoCarto', ["description" => "La variable <b>\$data</b> représente le tableau PHP créé à partir des données Csv ou Json. Quelques examples de transformations simple:
<pre>&lt;?php</br>\$data = \$data['elements']</pre>
<pre>&lt;?php</br>\$data = \$data['elements'];</pre>
<pre>&lt;?php</br>foreach(\$data as \$key => \$row) {
\$data[\$key]['source'] = \"MySource\";
}</pre>
......
......@@ -44,9 +44,9 @@ class ImportAdminController extends Controller
$em->persist($object);
$em->flush();
// $this->get('biopen.async')->callCommand('app:elements:importSource', [$object->getId()]);
$this->get('biopen.async')->callCommand('app:elements:importSource', [$object->getId()]);
$result = $this->get('biopen.element_import')->startImport($object);
// $result = $this->get('biopen.element_import')->startImport($object);
$redirectionUrl = $this->admin->generateUrl('edit', ['id' => $object->getId()]);
$stateUrl = $this->generateUrl('biopen_import_state', ['id' => $object->getId()]);
......
......@@ -82,8 +82,11 @@ class DatabaseIntegrityWatcher
if (array_key_exists("name", $changeset)) {
$query = $dm->createQueryBuilder('BiopenGeoDirectoryBundle:Element')->field('optionValues.optionId')->in([$document->getId()]);
$elementIds = array_keys($query->select('id')->hydrate(false)->getQuery()->execute()->toArray());
$elementIdsString = '"' . implode(',',$elementIds) . '"';
$this->asyncService->callCommand('app:elements:updateJson', ['ids' => $elementIdsString]);
if (count($elementIds))
{
$elementIdsString = '"' . implode(',',$elementIds) . '"';
$this->asyncService->callCommand('app:elements:updateJson', ['ids' => $elementIdsString]);
}
}
}
}
......
......@@ -2,16 +2,21 @@
{# the following code works great, except when creating new file, then an error in thrwn during the template render #}
{% set file = form.vars.sonata_admin.admin.subject is defined ? form.vars.sonata_admin.admin.subject : null %}
{% if file %}
{% set imagePath = file.fileUrl is defined ? file.fileUrl : file.externalImageUrl is defined ? file.externalImageUrl : null %}
{% if imagePath %}
<img src="{{ imagePath }}" class="thumbnail"/>
{% set filePath = file.fileUrl is defined ? file.fileUrl : file.externalImageUrl is defined ? file.externalImageUrl : null %}
{% set extension = filePath|split('.')|last|lower %}
{% if filePath %}
{% if extension in ['jpg', 'jpeg', 'png', 'gif', 'svg'] %}
<img src="{{ filePath }}" class="thumbnail"/>
{% else %}
Fichier actuel: <i>{{ filePath|split('/')|last }}</i>
{% endif %}
{% endif %}
{% endif %}
<style>
.thumbnail {
.thumbnail {
width: 100px;
display: inline-block;
display: inline-block;
margin-right: 10px;
}
</style>
\ No newline at end of file
......@@ -25,7 +25,7 @@
</table>
{% else %}
<div class="alert alert-info">Veuillez d'abords sélectionner le champs correspondant aux catégories dans l'onglet 'Table de correspondance des champs' puis cliquer sur 'Sauvegarder'</div>
<div class="alert alert-info">Veuillez d'abords sélectionner le champs correspondant aux catégories dans l'onglet 'Table de correspondance des champs' puis cliquer sur 'Lire les données'</div>
{% endif %}
......
......@@ -2,6 +2,8 @@
{% block list_header %}
<p>
<h4 style="margin: 0 0 20px 10px">Liste des imports "en dur" (les données importées seront gérées par ce site)</h3>
<h4 style="margin: 0 0 20px 10px">Liste des imports "en dur" (les données importées seront gérées par ce site)</h4>
<div style="float: left;margin-right: 30px;"><iframe height="150" sandbox="allow-same-origin allow-scripts" src="https://video.colibris-outilslibres.org/videos/embed/835f2bfc-2c44-4f0d-ba56-bae25bf444d9" frameborder="0" allowfullscreen></iframe></div>
<div><iframe height="150" sandbox="allow-same-origin allow-scripts" src="https://video.colibris-outilslibres.org/videos/embed/c74fc469-c822-4ab8-82a7-a2555e49e576" frameborder="0" allowfullscreen></iframe></div>
</p>
{% endblock %}
\ No newline at end of file
......@@ -2,6 +2,8 @@
{% block list_header %}
<p>
<h4 style="margin: 0 0 20px 10px">Liste des imports dynamiques (les données importées seront en lecture seule car elles sont gérées par un autre site)</h3>
<h4 style="margin: 0 0 20px 10px">Liste des imports dynamiques (les données importées seront en lecture seule car elles sont gérées par un autre site)</h4>
<div style="float: left;margin-right: 30px;"><iframe height="150" sandbox="allow-same-origin allow-scripts" src="https://video.colibris-outilslibres.org/videos/embed/835f2bfc-2c44-4f0d-ba56-bae25bf444d9" frameborder="0" allowfullscreen></iframe></div>
<div><iframe height="150" sandbox="allow-same-origin allow-scripts" src="https://video.colibris-outilslibres.org/videos/embed/c74fc469-c822-4ab8-82a7-a2555e49e576" frameborder="0" allowfullscreen></iframe></div>
</p>
{% endblock %}
\ No newline at end of file
......@@ -159,6 +159,7 @@ class ElementImportMappingService
$categories = is_array($categories) ? $categories : explode(',', $categories);
foreach($categories as $category) {
if (is_array($category)) $category = $category['name'];
$category = ltrim(rtrim($category));
if (!in_array($category, $allNewCategories)) $allNewCategories[] = $category;
if ($category && !array_key_exists($category, $taxonomyMapping))
{
......
{
"licence": "https://opendatacommons.org/licenses/odbl/summary/",
"ontology":"gogofull",
"bala":[{
"source": "Cap ou pas Cap",
"graph":[{
"id":"Rhm",
"newfields": "balam",
"name":"Entropie",
"coord":{"latitude":45.18679,"longitude":5.70548},
"address": "rue Georges Jacquet, Grenoble",
"sourceKey":"CapOuPasCap",
"addresses":{"street_num": "5", "streetAddress":"rue Georges Jacquet Grenoble"},
"createdAt":"21/12/2018 à 18:26",
"updatedAt":"17/03/2019 à 13:38",
"taxonomy": ["vert foncé", "tandem"],
"categories": ["Habitat"],
"categoriesFull": [
{
"id": 2,
"name": "boum",
"description": "un bel habitat",
"index": 5
},
{
"id": 8,
"name": "Couveuse",
"description": null,
"index": 1
}
"categories": [
{ "name": "Nature", "index": 5, "description": "balade en forêt"},
{ "name": "Numérique", "index": 1}
],
"abstract": "Ateliers bricole",
"openHoursString": "",
"openHours": null,
"descriptionMore": null,
"phone": "",
"tags": ["Atelier DIY"],
"website": "https:\/\/www.asso-entropie.fr\/",
"showUrl": "https:\/\/www.capoupascap.info\/capalts_alt\/entropie\/",
"editUrl": null,
"updatedAt": "2018-12-11 13:54:14",
"email": "entropie@gresille.org",
"images": ["https:\/\/www.capoupascap.info\/wp-content\/uploads\/2018\/12\/entropie.png"]
},
{
"otherobject": "blim"
"id":"Ki",
"name":"Foot",
"coord":{"latitude":45.18679,"longitude":5.70548},
"address": "rue Bernard, Tours",
"sourceKey":"CapOuPasCap",
"categories": [6]
},
{
"id":"sa",
"name":"tata",
"coord":{"latitude":46.18679,"longitude":5.70548},
"address": "rue Jacquet, Labrit",
"sourceKey":"CapOuPasCap",
"categories": [2],
"website": "https:\/\/www.asso-cala.fr\/"
}
]
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment