diff --git a/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php b/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php index 1eb2810372..9fbcdb91cb 100644 --- a/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php +++ b/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php @@ -2588,8 +2588,18 @@ class V1Controller extends Controller foreach ($recordsData as $data) { $records[] = $this->addOrDelStoryRecord($story, $data, $action); if($action === 'ADD' && !$cover_set && isset($data->{'use_as_cover'}) && $data->{'use_as_cover'} === true) { + $coverSource = []; + + if (isset($data->{'thumbnail_cover_source'})) { + $coverSource['thumbnail_cover_source'] = $data->{'thumbnail_cover_source'}; + } + + if (isset($data->{'preview_cover_source'})) { + $coverSource['preview_cover_source'] = $data->{'preview_cover_source'}; + } + // because we can try many records as cover source, we let it fail - $cover_set = ($this->setStoryCover($story, $data->{'record_id'}, true) !== false); + $cover_set = ($this->setStoryCover($story, $data->{'record_id'}, true, $coverSource) !== false); } } @@ -2643,14 +2653,26 @@ class V1Controller extends Controller $story = new \record_adapter($this->app, $databox_id, $story_id); + $coverSource = []; + + if (isset($data->{'thumbnail_cover_source'})) { + $coverSource['thumbnail_cover_source'] = $data->{'thumbnail_cover_source'}; + } + + if (isset($data->{'preview_cover_source'})) { + $coverSource['preview_cover_source'] = $data->{'preview_cover_source'}; + } + // we do NOT let "setStoryCover()" fail : pass false as last arg - $record_key = $this->setStoryCover($story, $data->{'record_id'}, false); + $record_key = $this->setStoryCover($story, $data->{'record_id'}, false, $coverSource); return Result::create($request, array($record_key))->createResponse(); } - protected function setStoryCover(\record_adapter $story, $record_id, $can_fail=false) + protected function setStoryCover(\record_adapter $story, $record_id, $can_fail=false, $coverSource = []) { + $coverSource = array_merge(['thumbnail_cover_source' => 'thumbnail', 'preview_cover_source' => 'preview'], $coverSource); + try { $record = new \record_adapter($this->app, $story->getDataboxId(), $record_id); } catch (\Exception_Record_AdapterNotFound $e) { @@ -2671,9 +2693,12 @@ class V1Controller extends Controller } foreach ($record->get_subdefs() as $name => $value) { - if (!in_array($name, array('thumbnail', 'preview'))) { + if (!($key = array_search($name, $coverSource))) { continue; } + + $name = ($key == 'thumbnail_cover_source') ? 'thumbnail': 'preview'; + $media = $this->app->getMediaFromUri($value->getRealPath()); $this->getSubdefSubstituer()->substituteSubdef($story, $name, $media); // name = thumbnail | preview $this->getDataboxLogger($story->getDatabox())->log(