mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-24 02:13:15 +00:00
Merge pull request #1442 from jygaulier/PHRAS-608_use-as-cover-story-api
#PHRAS-603
This commit is contained in:
@@ -854,7 +854,7 @@ class V1Controller extends Controller
|
|||||||
if ($output instanceof \record_adapter) {
|
if ($output instanceof \record_adapter) {
|
||||||
$ret['entity'] = '0';
|
$ret['entity'] = '0';
|
||||||
$ret['url'] = '/records/' . $output->getDataboxId() . '/' . $output->getRecordId() . '/';
|
$ret['url'] = '/records/' . $output->getDataboxId() . '/' . $output->getRecordId() . '/';
|
||||||
$this->getDispatcher()->dispatch(PhraseaEvents::RECORD_UPLOAD, new RecordEdit($output));
|
$this->dispatch(PhraseaEvents::RECORD_UPLOAD, new RecordEdit($output));
|
||||||
}
|
}
|
||||||
if ($output instanceof LazaretFile) {
|
if ($output instanceof LazaretFile) {
|
||||||
$ret['entity'] = '1';
|
$ret['entity'] = '1';
|
||||||
@@ -1524,7 +1524,7 @@ class V1Controller extends Controller
|
|||||||
$record->set_binary_status(strrev($datas));
|
$record->set_binary_status(strrev($datas));
|
||||||
|
|
||||||
// @todo Move event dispatch inside record_adapter class (keeps things encapsulated)
|
// @todo Move event dispatch inside record_adapter class (keeps things encapsulated)
|
||||||
$this->getDispatcher()->dispatch(PhraseaEvents::RECORD_EDIT, new RecordEdit($record));
|
$this->dispatch(PhraseaEvents::RECORD_EDIT, new RecordEdit($record));
|
||||||
|
|
||||||
$ret = ["status" => $this->listRecordStatus($record)];
|
$ret = ["status" => $this->listRecordStatus($record)];
|
||||||
|
|
||||||
@@ -2115,14 +2115,60 @@ class V1Controller extends Controller
|
|||||||
|
|
||||||
if (isset($data->{'story_records'})) {
|
if (isset($data->{'story_records'})) {
|
||||||
$recordsData = (array) $data->{'story_records'};
|
$recordsData = (array) $data->{'story_records'};
|
||||||
foreach ($recordsData as $data) {
|
$this->addOrDelStoryRecordsFromData($story, $recordsData, 'ADD');
|
||||||
$this->addOrDelStoryRecord($story, $data, $schemaRecordStory, 'ADD');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $story;
|
return $story;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function addOrDelStoryRecordsFromRequest(Request $request, $databox_id, $story_id, $action)
|
||||||
|
{
|
||||||
|
$content = $request->getContent();
|
||||||
|
|
||||||
|
$data = @json_decode($content);
|
||||||
|
|
||||||
|
if (JSON_ERROR_NONE !== json_last_error()) {
|
||||||
|
$this->app->abort(400, 'Json response cannot be decoded or the encoded data is deeper than the recursion limit');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset($data->{'story_records'})) {
|
||||||
|
$this->app->abort(400, 'Missing "story_records" property');
|
||||||
|
}
|
||||||
|
|
||||||
|
$recordsData = $data->{'story_records'};
|
||||||
|
|
||||||
|
if (!is_array($recordsData)) {
|
||||||
|
$recordsData = array($recordsData);
|
||||||
|
}
|
||||||
|
|
||||||
|
$story = new \record_adapter($this->app, $databox_id, $story_id);
|
||||||
|
|
||||||
|
$records = $this->addOrDelStoryRecordsFromData($story, $recordsData, $action);
|
||||||
|
$result = Result::create($request, array('records' => $records));
|
||||||
|
|
||||||
|
$this->dispatch(PhraseaEvents::RECORD_EDIT, new RecordEdit($story));
|
||||||
|
|
||||||
|
return $result->createResponse();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function addOrDelStoryRecordsFromData(\record_adapter $story, array $recordsData, $action)
|
||||||
|
{
|
||||||
|
$records = array();
|
||||||
|
$schema = $this->getJsonSchemaRetriever()
|
||||||
|
->retrieve('file://'.$this->app['root.path'].'/lib/conf.d/json_schema/story_record.json');
|
||||||
|
$cover_set = false;
|
||||||
|
|
||||||
|
foreach ($recordsData as $data) {
|
||||||
|
$records[] = $this->addOrDelStoryRecord($story, $data, $schema, $action);
|
||||||
|
if($action === 'ADD' && !$cover_set && isset($data->{'use_as_cover'}) && $data->{'use_as_cover'} === true) {
|
||||||
|
// because we can try many records as cover source, we let it fail
|
||||||
|
$cover_set = ($this->setStoryCover($story, $data->{'record_id'}, true) !== false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $records;
|
||||||
|
}
|
||||||
|
|
||||||
private function addOrDelStoryRecord(\record_adapter $story, $data, $jsonSchema, $action)
|
private function addOrDelStoryRecord(\record_adapter $story, $data, $jsonSchema, $action)
|
||||||
{
|
{
|
||||||
$validator = $this->getJsonSchemaValidator();
|
$validator = $this->getJsonSchemaValidator();
|
||||||
@@ -2160,50 +2206,14 @@ class V1Controller extends Controller
|
|||||||
return $record->get_serialize_key();
|
return $record->get_serialize_key();
|
||||||
}
|
}
|
||||||
|
|
||||||
private function addOrDelStoryRecords(Request $request, $databox_id, $story_id, $action)
|
|
||||||
{
|
|
||||||
$content = $request->getContent();
|
|
||||||
|
|
||||||
$data = @json_decode($content);
|
|
||||||
|
|
||||||
if (JSON_ERROR_NONE !== json_last_error()) {
|
|
||||||
$this->app->abort(400, 'Json response cannot be decoded or the encoded data is deeper than the recursion limit');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($data->{'story_records'})) {
|
|
||||||
$this->app->abort(400, 'Missing "story_records" property');
|
|
||||||
}
|
|
||||||
|
|
||||||
$recordsData = $data->{'story_records'};
|
|
||||||
|
|
||||||
if (!is_array($recordsData)) {
|
|
||||||
$recordsData = array($recordsData);
|
|
||||||
}
|
|
||||||
|
|
||||||
$story = new \record_adapter($this->app, $databox_id, $story_id);
|
|
||||||
|
|
||||||
$schema = $this->getJsonSchemaRetriever()
|
|
||||||
->retrieve('file://'.$this->app['root.path'].'/lib/conf.d/json_schema/story_record.json');
|
|
||||||
|
|
||||||
$records = array();
|
|
||||||
foreach ($recordsData as $data) {
|
|
||||||
$records[] = $this->addOrDelStoryRecord($story, $data, $schema, $action);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->getDispatcher()->dispatch(PhraseaEvents::RECORD_EDIT, new RecordEdit($story));
|
|
||||||
|
|
||||||
$result = Result::create($request, array('records' => $records));
|
|
||||||
return $result->createResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function addRecordsToStoryAction(Request $request, $databox_id, $story_id)
|
public function addRecordsToStoryAction(Request $request, $databox_id, $story_id)
|
||||||
{
|
{
|
||||||
return $this->addOrDelStoryRecords($request, $databox_id, $story_id, 'ADD');
|
return $this->addOrDelStoryRecordsFromRequest($request, $databox_id, $story_id, 'ADD');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function delRecordsFromStoryAction(Request $request, $databox_id, $story_id)
|
public function delRecordsFromStoryAction(Request $request, $databox_id, $story_id)
|
||||||
{
|
{
|
||||||
return $this->addOrDelStoryRecords($request, $databox_id, $story_id, 'DEL');
|
return $this->addOrDelStoryRecordsFromRequest($request, $databox_id, $story_id, 'DEL');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setStoryCoverAction(Request $request, $databox_id, $story_id)
|
public function setStoryCoverAction(Request $request, $databox_id, $story_id)
|
||||||
@@ -2228,7 +2238,7 @@ class V1Controller extends Controller
|
|||||||
|
|
||||||
$story = new \record_adapter($this->app, $databox_id, $story_id);
|
$story = new \record_adapter($this->app, $databox_id, $story_id);
|
||||||
|
|
||||||
// we do NOT let "set_story_cover()" fail : pass false as last arg
|
// 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);
|
||||||
|
|
||||||
$result = Result::create($request, array($record_key));
|
$result = Result::create($request, array($record_key));
|
||||||
@@ -2270,7 +2280,7 @@ class V1Controller extends Controller
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->getDispatcher()->dispatch(PhraseaEvents::RECORD_EDIT, new RecordEdit($story));
|
$this->dispatch(PhraseaEvents::RECORD_EDIT, new RecordEdit($story));
|
||||||
|
|
||||||
return $record->get_serialize_key();
|
return $record->get_serialize_key();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user