Commit 26f202db authored by Sebastian Castro's avatar Sebastian Castro

Adds new options to Import

needToHaveOptionsOtherThanTheOnesAddedToEachElements
fieldToCheckElementHaveBeenUpdated
parent 78103308
......@@ -31,7 +31,7 @@ class ImportAbstractAdmin extends AbstractAdmin
<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>Noms des autres champs déjà présent dans vos données : <b>" . $propertiesText . "</b></br><hr>";
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>Noms des autres champs déjà présent dans vos données : <b>" . $propertiesText . "</b>";
return $instructions;
}
}
\ No newline at end of file
......@@ -23,11 +23,17 @@ class ImportDynamicAdmin extends ImportAbstractAdmin
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->with("Import Dynamique, pour afficher des données gérées par quelqu'un d'autre", ["description" => $this->getInstructions()])
->with("Import Dynamique, pour afficher des données gérées par quelqu'un d'autre", ['box_class' => 'box box-default', "description" => $this->getInstructions()])
->end()
->with('Configuration principale', ['class' => 'col-md-6'])
->add('sourceName', 'text', array('required' => true, 'label' => 'Nom de la source '))
->add('url', 'text', array('label' => "Url de l'api Json", 'required' => true))
->add('refreshFrequencyInDays', null, array('required' => false, 'label' => "Fréquence de mise à jours des données en jours (laisser vide pour ne jamais mettre à jour automatiquement"))
->add('idsToIgnore', 'text', array('required' => false, 'attr' => ['class' => 'gogo-display-array'], 'label' => "Liste des IDs qui seront ignorées lors de l'import", 'label_attr' => ['title' => "Pour ignorer un élément, supprimer le (définitivement) et il ne sera plus jamais importé. Si vous supprimez un élément dynamiquement importé juste en changeant son status (soft delete), l'élément sera quand meme importé mais conservera son status supprimé. Vous pourrez donc à tout moment restaurer cet élement pour le voir apparaitre de nouveau"]))
->end()
->with("Autres options", ['box_class' => 'box box-default', 'class' => 'col-md-6'])
->add('geocodeIfNecessary', null, array('required' => false, 'label' => 'Géocoder les élements sans latitude ni longitude à partir de leur adresse'))
->add('createMissingOptions', null, array('required' => false, 'label' => 'Créer les catégories manquantes', 'label_attr' => ['title' => "Si un élément importé a une catégorie qui n'existe pas encore sur votre carte, elle sera automatiquement crée"]))
->add('createMissingOptions', null, array('required' => false, 'label' => 'Créer les catégories manquantes', 'label_attr' => ['title' => "Si un élément importé a une catégorie qui n'existe pas encore sur votre carte, elle sera automatiquement crée"]))
->add('optionsToAddToEachElement', 'sonata_type_model', array(
'class'=> 'Biopen\GeoDirectoryBundle\Document\Option',
'required' => false,
......@@ -35,8 +41,8 @@ class ImportDynamicAdmin extends ImportAbstractAdmin
'multiple' => true,
'btn_add' => false,
'label' => 'Catégories à ajouter à chaque élément importé'), array('admin_code' => 'admin.option'))
->add('refreshFrequencyInDays', null, array('required' => false, 'label' => "Fréquence de mise à jours des données en jours (laisser vide pour ne jamais mettre à jour automatiquement"))
->add('idsToIgnore', 'text', array('required' => false, 'attr' => ['class' => 'gogo-display-array'], 'label' => "Liste des IDs à ignorer lors de l'import", 'label_attr' => ['title' => "Pour ignorer un élément, supprimer le (définitivement) et il ne sera plus jamais importé. Si vous supprimez un élément dynamiquement importé juste en changeant son status (soft delete), l'élément sera quand meme importé mais conservera son status supprimé. Vous pourrez donc à tout moment restaurer cet élement pour le voir apparaitre de nouveau"]))
->add('needToHaveOptionsOtherThanTheOnesAddedToEachElements', null, array('required' => false, 'label' => 'Les éléments importés doivent contenir au moins une catégorie en dehors de celles ajoutées manuellement ci-dessus', 'label_attr' => ['title' => "Sans prendre en compte les catégories ajoutés via le champs \"Catégories à ajouter à chaque élément importé\", si les éléments importés n'ont pas de catégories, ils seront marqués comme \"Modération aucune catégorie renseignée\""]))
->add('fieldToCheckElementHaveBeenUpdated', null, array('required' => false, 'label' => "Nom de l'attribut à comparer pour la mise à jour", 'label_attr' => ['title' => "Lorsqu'on met à jour une source, certains des éléments à importer existent déjà dans notre base de donnée. Vous pouvez renseigner ici un champs qui permettra de comparer si l'élément à été mis à jour au sein de la source depuis le dernier import. Exple de champ: updatedAt, date_maj etc... (laisser vide pour mettre à jour les éléments à chaque fois)"]))
->end()
->with('Historique', array('class' => 'col-sm-12'))
->add('logs', 'hidden', array('attr' => ['class' => 'gogo-display-logs'], 'mapped' => false))
......
......@@ -475,7 +475,7 @@ class Element
if (!$this->isPending()) $needed = false;
break;
case ModerationState::NoOptionProvided:
if ($this->countOptionsValues() > 0)
if (!$this->isDynamicImported() && $this->$this->countOptionsValues() > 0)
$needed = false;
break;
case ModerationState::GeolocError:
......
......@@ -65,6 +65,17 @@ class Import extends AbstractFile
*/
private $createMissingOptions = false;
/**
* @MongoDB\Field(type="bool")
*/
private $needToHaveOptionsOtherThanTheOnesAddedToEachElements = false;
/**
* @var string
* @MongoDB\Field(type="string")
*/
public $fieldToCheckElementHaveBeenUpdated;
/**
* @MongoDB\Field(type="bool")
*/
......@@ -358,4 +369,48 @@ class Import extends AbstractFile
{
return $this->idsToIgnore;
}
/**
* Set needToHaveOptionsOtherThanTheOnesAddedToEachElements
*
* @param bool $needToHaveOptionsOtherThanTheOnesAddedToEachElements
* @return $this
*/
public function setNeedToHaveOptionsOtherThanTheOnesAddedToEachElements($needToHaveOptionsOtherThanTheOnesAddedToEachElements)
{
$this->needToHaveOptionsOtherThanTheOnesAddedToEachElements = $needToHaveOptionsOtherThanTheOnesAddedToEachElements;
return $this;
}
/**
* Get needToHaveOptionsOtherThanTheOnesAddedToEachElements
*
* @return bool $needToHaveOptionsOtherThanTheOnesAddedToEachElements
*/
public function getNeedToHaveOptionsOtherThanTheOnesAddedToEachElements()
{
return $this->needToHaveOptionsOtherThanTheOnesAddedToEachElements;
}
/**
* Set fieldToCheckElementHaveBeenUpdated
*
* @param string $fieldToCheckElementHaveBeenUpdated
* @return $this
*/
public function setFieldToCheckElementHaveBeenUpdated($fieldToCheckElementHaveBeenUpdated)
{
$this->fieldToCheckElementHaveBeenUpdated = $fieldToCheckElementHaveBeenUpdated;
return $this;
}
/**
* Get fieldToCheckElementHaveBeenUpdated
*
* @return string $fieldToCheckElementHaveBeenUpdated
*/
public function getFieldToCheckElementHaveBeenUpdated()
{
return $this->fieldToCheckElementHaveBeenUpdated;
}
}
......@@ -2,7 +2,7 @@
{% block field %}
{% spaceless %}
{% set deletedCount = field_description.options.choices[object.id] %}
{% set deletedCount = field_description.options.choices[object.id] is defined ? field_description.options.choices[object.id] : 0 %}
{% if deletedCount > 0 %}
<span class="label label-danger log-label">{{ deletedCount }} localement supprimés</span>
{% endif %}
......
......@@ -275,16 +275,17 @@ class ElementImportService
if ($element) // if element with this Id already exists
{
$updatedAtField = $import->getFieldToCheckElementHaveBeenUpdated();
// if updated date hasn't change, nothing to do
if ((array_key_exists('updatedAt', $row) && $row['updatedAt'] == $element->getCustomProperty('updatedAt'))) {
$element->setPreventJsonUpdate(true);
$element->setModerationState(ModerationState::NotNeeded); // restting the modearation state so it will be calculated again
if ($updatedAtField && (array_key_exists($updatedAtField, $row) && $row[$updatedAtField] == $element->getCustomProperty($updatedAtField))) {
$element->setPreventJsonUpdate(true);
if ($element->getStatus() == ElementStatus::DynamicImportTemp) $element->setStatus(ElementStatus::DynamicImport);
$this->em->persist($element);
$this->countElementNothingToDo++;
return;
}
$updateExisting = true;
$element->setModerationState(ModerationState::NotNeeded); // restting the modearation state so it will be calculated again
}
else
{
......@@ -304,8 +305,8 @@ class ElementImportService
if (array_key_exists('owner', $row)) $element->setUserOwnerEmail($row['owner']);
$lat = 0;$lng = 0;
if (!is_string($row['latitude']) || strlen($row['latitude']) == 0 || !is_string($row['longitude']) || strlen($row['longitude']) == 0 || $row['latitude'] == 'null' || $row['latitude'] == null)
$lat = $row['latitude']; $lng = $row['longitude'];
if (is_object($lat) || strlen($lat) == 0 || is_object($lng) || strlen($lng) == 0 || $lat == 'null' || $lat == null)
{
if ($import->getGeocodeIfNecessary())
{
......@@ -318,11 +319,6 @@ class ElementImportService
catch (\Exception $error) { }
}
}
else
{
$lat = $row['latitude'];
$lng = $row['longitude'];
}
if ($lat == 0 || $lng == 0) $element->setModerationState(ModerationState::GeolocError);
$element->setGeo(new Coordinates((float)$lat, (float)$lng));
......@@ -455,6 +451,11 @@ class ElementImportService
}
}
if ($import->getNeedToHaveOptionsOtherThanTheOnesAddedToEachElements()) {
// checking option number before adding optionIdsToAddToEachElement
if (count($element->getOptionValues()) == 0) $element->setModerationState(ModerationState::NoOptionProvided);
}
// Manually add some options to each element imported
foreach ($this->optionIdsToAddToEachElement as $optionId) {
if (!in_array($optionId, $optionsIdAdded)) $optionsIdAdded[] = $this->AddOptionValue($element, $optionId);
......
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