/**
  * Short description of method prepare
  *
  * @access public
  * @author Joel Bout, <*****@*****.**>
  * @param array resources results
  * @param array columns variables
  * @return mixed
  */
 public function prepare($resources, $columns)
 {
     $resultsService = ResultsService::singleton();
     /**
      * @var \taoDelivery_models_classes_execution_DeliveryExecution $result
      */
     foreach ($resources as $result) {
         $itemresults = $resultsService->getVariables($result, false);
         foreach ($itemresults as $itemResultUri => $vars) {
             // cache the item information pertaining to a given itemResult (stable over time)
             if (common_cache_FileCache::singleton()->has('itemResultItemCache' . $itemResultUri)) {
                 $itemUri = common_cache_FileCache::singleton()->get('itemResultItemCache' . $itemResultUri);
                 $object = new core_kernel_classes_Resource($itemUri);
             } else {
                 $object = $resultsService->getItemFromItemResult($itemResultUri);
                 if (is_null($object)) {
                     $object = $resultsService->getVariableFromTest($itemResultUri);
                 }
                 if (!is_null($object)) {
                     common_cache_FileCache::singleton()->put($object->getUri(), 'itemResultItemCache' . $itemResultUri);
                 }
             }
             if (get_class($object) == "core_kernel_classes_Resource") {
                 $contextIdentifier = (string) $object->getUri();
             } else {
                 if (!is_null($object)) {
                     $contextIdentifier = (string) $object->__toString();
                 }
             }
             foreach ($vars as $var) {
                 $var = $var[0];
                 // cache the variable data
                 /**
                  * @var \taoResultServer_models_classes_Variable $varData
                  */
                 $varData = $var->variable;
                 if (common_cache_FileCache::singleton()->has('variableDataCache' . $var->uri . '_' . $varData->getIdentifier())) {
                     $varData = common_cache_FileCache::singleton()->get('variableDataCache' . $var->uri . '_' . $varData->getIdentifier());
                 } else {
                     common_cache_FileCache::singleton()->put($varData, 'variableDataCache' . $var->uri . '_' . $varData->getIdentifier());
                 }
                 if ($varData->getBaseType() === 'file') {
                     $decodedFile = Datatypes::decodeFile($varData->getValue());
                     $varData->setValue($decodedFile['name']);
                 }
                 $variableIdentifier = (string) $varData->getIdentifier();
                 foreach ($columns as $column) {
                     if ($variableIdentifier == $column->getIdentifier() and $contextIdentifier == $column->getContextIdentifier()) {
                         $epoch = $varData->getEpoch();
                         $readableTime = "";
                         if ($epoch != "") {
                             $readableTime = "@" . tao_helpers_Date::displayeDate(tao_helpers_Date::getTimeStamp($epoch), tao_helpers_Date::FORMAT_VERBOSE);
                         }
                         $this->cache[get_class($varData)][$result][$column->getContextIdentifier() . $variableIdentifier][(string) $epoch] = array($varData->getValue(), $readableTime);
                     }
                 }
             }
         }
     }
 }
 private function getIrregularities($delivery, $from = '', $to = '')
 {
     $export = array(array(__('date'), __('author'), __('test taker'), __('category'), __('subcategory'), __('comment')));
     $deliveryLog = ServiceManager::getServiceManager()->get(DeliveryLog::SERVICE_ID);
     $service = ResultsService::singleton();
     $implementation = $service->getReadableImplementation($delivery);
     $service->setImplementation($implementation);
     $results = $service->getImplementation()->getResultByDelivery(array($delivery->getUri()));
     foreach ($results as $res) {
         $deliveryExecution = \taoDelivery_models_classes_execution_ServiceProxy::singleton()->getDeliveryExecution($res['deliveryResultIdentifier']);
         $logs = $deliveryLog->get($deliveryExecution->getIdentifier(), 'TEST_IRREGULARITY');
         foreach ($logs as $data) {
             $exportable = array();
             if ((empty($from) || $data['created_at'] > $from) && (empty($to) || $data['created_at'] < $to)) {
                 $testTaker = new \core_kernel_classes_Resource($res['testTakerIdentifier']);
                 $author = new \core_kernel_classes_Resource($data['created_by']);
                 $exportable[] = \tao_helpers_Date::displayeDate($data['created_at']);
                 $exportable[] = $author->getLabel();
                 $exportable[] = $testTaker->getLabel();
                 $exportable[] = $data['data']['reason']['reasons']['category'];
                 $exportable[] = isset($data['data']['reason']['reasons']['subCategory']) ? $data['data']['reason']['reasons']['subCategory'] : '';
                 $exportable[] = $data['data']['reason']['comment'];
                 $export[] = $exportable;
             }
         }
     }
     return $export;
 }
 /**
  * constructor: initialize the service and the default data
  * @return Results
  */
 public function __construct()
 {
     parent::__construct();
     $this->service = ResultsService::singleton();
     $this->deliveryService = DeliveryAssemblyService::singleton();
     $this->defaultData();
 }
 public function __construct()
 {
     parent::__construct();
     $this->service = ResultsService::singleton();
 }
 /**
  * @return array
  */
 private function getData()
 {
     $delivery = new \core_kernel_classes_Resource($this->params[0]);
     $resultsService = ResultsService::singleton();
     $filter = 'lastSubmitted';
     $columns = [];
     $testtaker = new \tao_models_classes_table_PropertyColumn(new \core_kernel_classes_Property(PROPERTY_RESULT_OF_SUBJECT));
     $testTakerColumn[] = $testtaker->toArray();
     $cols = array_merge($testTakerColumn, $resultsService->getVariableColumns($delivery, CLASS_OUTCOME_VARIABLE, $filter), $resultsService->getVariableColumns($delivery, CLASS_RESPONSE_VARIABLE, $filter));
     $dataProvider = new VariableDataProvider();
     foreach ($cols as $col) {
         $column = \tao_models_classes_table_Column::buildColumnFromArray($col);
         if (!is_null($column)) {
             if ($column instanceof VariableColumn) {
                 $column->setDataProvider($dataProvider);
             }
             $columns[] = $column;
         }
     }
     $columns[0]->label = __("Test taker");
     $rows = $resultsService->getResultsByDelivery($delivery, $columns, $filter);
     $columnNames = array_reduce($columns, function ($carry, $item) {
         $carry[] = $item->label;
         return $carry;
     });
     $result = [];
     foreach ($rows as $row) {
         $rowResult = [];
         foreach ($row['cell'] as $rowKey => $rowVal) {
             $rowResult[$columnNames[$rowKey]] = $rowVal[0];
         }
         $result[] = $rowResult;
     }
     //If there are no executions yet, the file is exported but contains only the header
     if (empty($result)) {
         $result = [array_fill_keys($columnNames, '')];
     }
     return $result;
 }
 /**
  * @return ResultsService
  */
 protected function getClassService()
 {
     return ResultsService::singleton();
 }
 public function __construct()
 {
     parent::__construct();
     $this->resultClass = new \core_kernel_classes_Class(TAO_DELIVERY_RESULT);
     $this->resultService = ResultsService::singleton();
 }
 /**
  * 
  * @see PHPUnit_Framework_TestCase::setUp()
  */
 public function setUp()
 {
     TaoPhpUnitTestRunner::initTest();
     common_ext_ExtensionsManager::singleton()->getExtensionById('taoOutcomeUi');
     $this->service = ResultsService::singleton();
 }
 /**
  * Get result service instance.
  * @return \oat\taoOutcomeUi\model\ResultsService;
  */
 protected function getResultService(\core_kernel_classes_Resource $delivery)
 {
     $resultsService = ResultsService::singleton();
     $implementation = $resultsService->getReadableImplementation($delivery);
     $resultsService->setImplementation($implementation);
     return $resultsService;
 }
 /**
  * Short description of method prepare
  *
  * @access public
  * @author Joel Bout, <*****@*****.**>
  * @param  array resources  results
  * @param  array columns    variables
  * @return mixed
  */
 public function prepare($resources, $columns)
 {
     $resultsService = ResultsService::singleton();
     foreach ($resources as $result) {
         $itemresults = $resultsService->getVariables($result, false);
         $cellData = array();
         foreach ($itemresults as $itemResultUri => $vars) {
             //cache the item information pertaining to a given itemResult (stable over time)
             if (common_cache_FileCache::singleton()->has('itemResultItemCache' . tao_helpers_Uri::encode($itemResultUri))) {
                 $itemUri = common_cache_FileCache::singleton()->get('itemResultItemCache' . tao_helpers_Uri::encode($itemResultUri));
                 $object = new core_kernel_classes_Resource($itemUri);
             } else {
                 $object = $resultsService->getItemFromItemResult($itemResultUri);
                 if (is_null($object)) {
                     $object = $resultsService->getVariableFromTest($itemResultUri);
                 }
                 if (!is_null($object)) {
                     common_cache_FileCache::singleton()->put($object->getUri(), 'itemResultItemCache' . tao_helpers_Uri::encode($itemResultUri));
                 }
             }
             if (get_class($object) == "core_kernel_classes_Resource") {
                 $contextIdentifier = (string) $object->getUri();
             } else {
                 if (!is_null($object)) {
                     $contextIdentifier = (string) $object->__toString();
                 }
             }
             foreach ($vars as $var) {
                 $var = $var[0];
                 //cache the variable data
                 $varData = (array) $var->variable;
                 if (common_cache_FileCache::singleton()->has('variableDataCache' . $var->uri . '_' . $varData["identifier"])) {
                     $varData = common_cache_FileCache::singleton()->get('variableDataCache' . $var->uri . '_' . $varData["identifier"]);
                 } else {
                     $varData["class"] = $var->class;
                     common_cache_FileCache::singleton()->put($varData, 'variableDataCache' . $var->uri . '_' . $varData["identifier"]);
                 }
                 $type = $varData["class"];
                 if (isset($varData["value"])) {
                     if (is_array($varData["value"])) {
                         $varData["value"] = json_encode($varData["value"]);
                     }
                 } else {
                     $varData["value"] = $varData["candidateResponse"];
                 }
                 $varData["value"] = base64_decode($varData["value"]);
                 if ($varData["baseType"] === 'file') {
                     $decodedFile = Datatypes::decodeFile($varData['value']);
                     $varData['value'] = $decodedFile['name'];
                 }
                 $variableIdentifier = (string) $varData["identifier"];
                 foreach ($columns as $column) {
                     if ($variableIdentifier == $column->getIdentifier() and $contextIdentifier == $column->getContextIdentifier()) {
                         $value = (string) $varData["value"];
                         $epoch = $varData["epoch"];
                         $readableTime = "";
                         if ($epoch != "") {
                             $readableTime = "@" . tao_helpers_Date::displayeDate(tao_helpers_Date::getTimeStamp($epoch), tao_helpers_Date::FORMAT_VERBOSE);
                         }
                         $this->cache[$type][$result->getUri()][$column->getContextIdentifier() . $variableIdentifier][(string) $epoch] = array($value, $readableTime);
                     }
                 }
             }
         }
     }
 }