Skip to content
Snippets Groups Projects
Commit 4174454c authored by Laurent's avatar Laurent
Browse files

dev #140256 External agenda : fix duplication of event timings after import

parent fd0d10c1
Branches
Tags
3 merge requests!4186Master,!4185Hotline,!4178dev #140256 External agenda : fix duplication of event timings after import
Pipeline #14510 passed with stage
in 1 hour, 39 minutes, and 45 seconds
- ticket #140256 : Agenda externe : correction de la duplication des horaires à l'import
\ No newline at end of file
......@@ -84,22 +84,40 @@ class Class_ExternalAgenda extends Storm_Model_Abstract {
$created = $events->select('isNew');
$updated = $events->reject('isNew');
// must be after updated detection
$created->eachDo(function($model)
$this
->_saveCreatedEvents($created)
->_saveUpdatedEvents($updated)
->_deleteOrphanEvents($events);
if ($after_import)
$after_import($created, $updated);
return $this;
}
protected function _saveCreatedEvents($created) {
$created->eachDo(function($article)
{
$model
->setDateCreation(date('Y-m-d H:i:s', $this->getCurrentTime()))
$article
->setDateCreation(date('Y-m-d H:i:s',
$this->getCurrentTime()))
->save();
});
return $this;
}
if (!Class_AdminVar::get('AGENDA_KEEP_LOCAL_CONTENT'))
$updated->eachDo(function ($model) { $model->updateDateMaj()->save(); });
if ($this->getDeleteOrphanEvents())
$this->_deleteOrphanEvents($events);
protected function _saveUpdatedEvents($updated) {
if (Class_AdminVar::get('AGENDA_KEEP_LOCAL_CONTENT'))
return $this;
if ($after_import)
$after_import($created, $updated);
$updated->eachDo(function($article)
{
Class_Article_EventTiming::basicDeleteBy(['article_id' => $article->getId()]);
$article->updateDateMaj()->save();
});
return $this;
}
......@@ -116,8 +134,9 @@ class Class_ExternalAgenda extends Storm_Model_Abstract {
public function deduplicateEvent($event){
if ($existing_event = $this->findEventByUID($event->getIdOrigine()))
if ($existing_event = $this->findEventByUID($event->getIdOrigine())) {
$event->setId($existing_event->getId());
}
}
......@@ -132,12 +151,16 @@ class Class_ExternalAgenda extends Storm_Model_Abstract {
protected function _deleteOrphanEvents($updated_events) {
if (!$this->getDeleteOrphanEvents())
return $this;
$delete_params = ['repository_origine' => $this->getRepositoryKey()];
if (!$updated_events->isEmpty())
$delete_params['ID_ARTICLE not'] = $updated_events->collect('id')->getArrayCopy();
Class_Article::deleteBy($delete_params);
return $this;
}
......
......@@ -72,10 +72,14 @@ class ArticlesMultipleTimingsOpenAgendaImportTest extends ExternalAgendasOpenAge
}
protected function _dumpArticleTimings($id) {
return array_map(function($timing) { return $timing->getRawAttributes(); },
Class_Article::find($id)->getEventTimings());
}
/** @test */
public function firstArticleShouldHaveThreeTimings() {
$timings = array_map(function($timing) { return $timing->getRawAttributes(); },
Class_Article::find(1)->getEventTimings());
$this->assertEquals([
['start' => '2019-11-25 09:30',
'end' => '2019-11-25 11:30',
......@@ -92,7 +96,31 @@ class ArticlesMultipleTimingsOpenAgendaImportTest extends ExternalAgendasOpenAge
'article_id' => 1,
'id' => 3]],
$timings);
$this->_dumpArticleTimings(1));
}
/** @test */
public function onSecondImportArticleShouldStillHaveThreeTimings() {
Class_ExternalAgenda::find(12)->import();
$this->assertEquals([
['start' => '2019-11-25 09:30',
'end' => '2019-11-25 11:30',
'article_id' => 1,
'id' => 9],
['start' => '2019-11-29 09:00',
'end' => '2019-11-29 11:00',
'article_id' => 1,
'id' => 10],
['start' => '2019-12-01 09:30',
'end' => '2019-12-01 10:30',
'article_id' => 1,
'id' => 11]],
$this->_dumpArticleTimings(1));
}
......@@ -105,8 +133,6 @@ class ArticlesMultipleTimingsOpenAgendaImportTest extends ExternalAgendasOpenAge
/** @test */
public function articleTwoShouldHaveTimingsSameAsOrigine() {
$timings = array_map(function($timing) { return $timing->getRawAttributes(); },
Class_Article::find(2)->getEventTimings());
$this->assertEquals([
['start' => '2019-11-25 10:00',
'end' => '2019-11-25 10:30',
......@@ -117,7 +143,7 @@ class ArticlesMultipleTimingsOpenAgendaImportTest extends ExternalAgendasOpenAge
'article_id' => 2,
'id' => 5]
],
$timings);
$this->_dumpArticleTimings(2));
}
}
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