<?php
namespace App\Controller;
use Pimcore\Controller\FrontendController;
use Pimcore\Log\ApplicationLogger;
use Pimcore\Model\DataObject\CarCutterImage;
use Pimcore\Model\DataObject\CarCutterImageset;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class ResultController extends FrontendController
{
/**
* @param Request $request
* @return Response
*/
public function result(Request $request, ApplicationLogger $logger, string $id): Response
{
if($task = CarCutterImage::getByIdentifier($id, 1)) {
$payload = $request->toArray();
if(isset($payload["event_type"]) && isset($payload["images"])) {
if(count($payload["images"]) > 0) {
$resultImage = $payload["images"][0];
$status = $this->getStatus($resultImage);
$task->setStatus($status);
$logger->info("ResultController: Received Sync ID [$id] Item was set to $status state");
}
} else {
$task->setStatus('error');
$logger->error("ResultController: Received Sync ID [$id] Item was set to ERROR state");
}
$task->save();
} else {
$logger->warning("ResultController: Received unknown Sync ID [$id]");
}
return new Response();
}
/**
* @param Request $request
* @return Response
*/
public function isresult(Request $request, ApplicationLogger $logger, string $id): Response
{
if($task = CarCutterImageset::getByKey($id, 1)) {
$payload = $request->toArray();
if(isset($payload["event_type"]) && isset($payload["images"])) {
$images = $payload["images"]; // array
if(count($images) > 0) {
foreach($images as $image) {
$url = $image['image_url'];
$resUrl = $image['result_url'];
$status = $this->getStatus($image);
$taskImages = $task->getImages();
$newImages = array();
foreach($taskImages as $taskImage) {
if($taskImage['url'] === $url) {
$taskImage['status'] = $status;
$taskImage['resultUrl'] = $resUrl;
}
$newImages[] = $taskImage;
}
$task->setImages($newImages);
}
}
// Check if all are completed
$complete = true;
foreach($newImages as $newImage) {
if($newImage['status'] != 'done' || $newImage['status'] != 'retake') {
$complete = false;
break;
}
}
if($complete) {
$task->setStatus('done');
}
} else {
$task->setStatus('error');
$logger->error("ResultController/Imageset: Received Sync ID [$id], Event Type/Image payload missing. Item was set to ERROR state.");
}
$task->save();
} else {
$logger->warning("ResultController/Imageset: Received unknown Sync ID [$id]");
}
return new Response();
}
private function getStatus(array $image)
{
$phase = $image['phase'];
$quality = $image['quality'];
$status = $image['status'];
if($status == 'error') {
return 'error';
}
if($status == 'raw' && $phase == 'ready') {
return 'done';
}
if($phase == 'quaing' || $phase == 'retouching') {
return $phase;
}
// TODO: Check if this is "done"
if($quality == 'retake') {
return $quality;
}
return 'done';
}
}