/**
  * allow client to store information about the test, the section or the item
  */
 public function storeTraceData()
 {
     $code = 200;
     $itemRef = $this->hasRequestParameter('itemDefinition') ? $this->getRequestParameter('itemDefinition') : null;
     $traceData = json_decode(html_entity_decode($this->getRequestParameter('traceData')), true);
     try {
         $serviceContext = $this->getServiceContext(false);
         $stored = 0;
         $size = count($traceData);
         foreach ($traceData as $variableIdentifier => $variableValue) {
             if ($this->runnerService->storeTraceVariable($serviceContext, $itemRef, $variableIdentifier, json_encode($variableValue))) {
                 $stored++;
             }
         }
         $response = ['success' => $stored == $size];
         common_Logger::d("Stored {$stored}/{$size} trace variables");
         $eventManager = $this->getServiceManager()->get(\oat\oatbox\event\EventManager::CONFIG_ID);
         $event = new TraceVariableStored($serviceContext->getTestSession()->getSessionId(), $traceData);
         $eventManager->trigger($event);
     } catch (common_Exception $e) {
         $response = $this->getErrorResponse($e);
         $code = $this->getErrorCode($e);
     }
     $this->returnJson($response, $code);
 }