コード例 #1
0
 /**
  *  prepare a data set as an associative array, service intended to populate gui controller
  *  
  *  @param string $filter 'lastSubmitted', 'firstSubmitted'
  */
 public function getItemVariableDataFromDeliveryResult(core_kernel_classes_Resource $deliveryResult, $filter)
 {
     $undefinedStr = __('unknown');
     //some data may have not been submitted
     $itemResults = $this->getItemResultsFromDeliveryResult($deliveryResult);
     $variablesByItem = array();
     foreach ($itemResults as $itemResult) {
         try {
             common_Logger::d("Retrieving related Item for itemResult " . $itemResult->getUri() . "");
             $relatedItem = $this->getItemFromItemResult($itemResult);
         } catch (common_Exception $e) {
             common_Logger::w("The itemResult " . $itemResult->getUri() . " is not linked to a valid item. (deleted item ?)");
             $relatedItem = null;
         }
         if (get_class($relatedItem) == "core_kernel_classes_Literal") {
             $itemIdentifier = $relatedItem->__toString();
             $itemLabel = $relatedItem->__toString();
             $itemModel = $undefinedStr;
         } elseif (get_class($relatedItem) == "core_kernel_classes_Resource") {
             $itemIdentifier = $relatedItem->getUri();
             $itemLabel = $relatedItem->getLabel();
             try {
                 common_Logger::d("Retrieving related Item model for item " . $relatedItem->getUri() . "");
                 $itemModel = $relatedItem->getUniquePropertyValue(new core_kernel_classes_Property(TAO_ITEM_MODEL_PROPERTY));
                 $variablesByItem[$itemIdentifier]['itemModel'] = $itemModel->getLabel();
             } catch (common_Exception $e) {
                 //a resource but unknown
                 $variablesByItem[$itemIdentifier]['itemModel'] = 'unknown';
             }
         } else {
             $itemIdentifier = $undefinedStr;
             $itemLabel = $undefinedStr;
             $variablesByItem[$itemIdentifier]['itemModel'] = $undefinedStr;
         }
         foreach ($this->getVariablesFromItemResult($itemResult) as $variable) {
             //retrieve the type of the variable
             $class = current($variable->getTypes());
             $type = $class->getUri();
             //common properties to all variables
             $properties = array(PROPERTY_IDENTIFIER, PROPERTY_VARIABLE_BASETYPE, PROPERTY_VARIABLE_CARDINALITY, PROPERTY_VARIABLE_EPOCH);
             //specific property Response Variable
             if ($type == TAO_RESULT_RESPONSE) {
                 $properties[] = PROPERTY_RESPONSE_VARIABLE_CORRECTRESPONSE;
             }
             $baseTypes = $variable->getPropertyValues(new core_kernel_classes_Property(PROPERTY_VARIABLE_BASETYPE));
             $baseType = current($baseTypes);
             if ($baseType != "file") {
                 $properties[] = RDF_VALUE;
                 $variableDescription = $variable->getPropertiesValues($properties);
                 $variableDescription[RDF_VALUE] = array(base64_decode(current($variableDescription[RDF_VALUE])));
             } else {
                 $variableDescription = $variable->getPropertiesValues($properties);
             }
             try {
                 common_Logger::d("Retrieving related Item for itemResult " . $itemResult->getUri() . "");
                 $relatedItem = $this->getItemFromVariable($variable);
             } catch (common_Exception $e) {
                 common_Logger::w("The variable " . $variable->getUri() . " is not linked to a valid item. (deleted item ?)");
                 $relatedItem = null;
             }
             if (get_class($relatedItem) == "core_kernel_classes_Literal") {
                 $itemIdentifier = $relatedItem->__toString();
                 $itemLabel = $relatedItem->__toString();
                 $variablesByItem[$itemIdentifier]['itemModel'] = $undefinedStr;
             } elseif (get_class($relatedItem) == "core_kernel_classes_Resource") {
                 $itemIdentifier = $relatedItem->getUri();
                 $itemLabel = $relatedItem->getLabel();
                 try {
                     $itemModel = $relatedItem->getUniquePropertyValue(new core_kernel_classes_Property(TAO_ITEM_MODEL_PROPERTY));
                     $variablesByItem[$itemIdentifier]['itemModel'] = $itemModel->getLabel();
                 } catch (common_Exception $e) {
                     //a resource but unknown
                     $variablesByItem[$itemIdentifier]['itemModel'] = $undefinedStr;
                 }
             } else {
                 $itemIdentifier = $undefinedStr;
                 $itemLabel = $undefinedStr;
                 $variablesByItem[$itemIdentifier]['itemModel'] = $undefinedStr;
             }
             $variableIdentifier = current($variableDescription[PROPERTY_IDENTIFIER])->__toString();
             $epoch = current($variableDescription[PROPERTY_VARIABLE_EPOCH])->__toString();
             $variableDescription["uri"] = $variable->getUri();
             $variableDescription["epoch"] = array(tao_helpers_Date::displayeDate(tao_helpers_Date::getTimeStamp($epoch), tao_helpers_Date::FORMAT_VERBOSE));
             if (isset($variableDescription[PROPERTY_RESPONSE_VARIABLE_CORRECTRESPONSE])) {
                 $correctResponse = current($variableDescription[PROPERTY_RESPONSE_VARIABLE_CORRECTRESPONSE]);
             } else {
                 $correctResponse = false;
             }
             if ($correctResponse and get_class($correctResponse) == 'core_kernel_classes_Resource') {
                 if ($correctResponse->getUri() == GENERIS_TRUE) {
                     $variableDescription["isCorrect"] = "correct";
                 } else {
                     if ($correctResponse->getUri() == GENERIS_FALSE) {
                         $variableDescription["isCorrect"] = "incorrect";
                     } else {
                         //an unknown core_kernel_classes_Resource
                         $variableDescription["isCorrect"] = "unscored";
                     }
                 }
             } else {
                 $variableDescription["isCorrect"] = "unscored";
             }
             $variablesByItem[$itemIdentifier]['sortedVars'][$type][$variableIdentifier][$epoch] = $variableDescription;
             $variablesByItem[$itemIdentifier]['label'] = $itemLabel;
         }
     }
     //sort by epoch and filter
     foreach ($variablesByItem as $itemIdentifier => $itemVariables) {
         foreach ($itemVariables['sortedVars'] as $variableType => $variables) {
             foreach ($variables as $variableIdentifier => $observation) {
                 uksort($variablesByItem[$itemIdentifier]['sortedVars'][$variableType][$variableIdentifier], "self::sortTimeStamps");
                 //print_r($observation);
                 switch ($filter) {
                     case "lastSubmitted":
                         $variablesByItem[$itemIdentifier]['sortedVars'][$variableType][$variableIdentifier] = array(array_pop($variablesByItem[$itemIdentifier]['sortedVars'][$variableType][$variableIdentifier]));
                         break;
                     case "firstSubmitted":
                         $variablesByItem[$itemIdentifier]['sortedVars'][$variableType][$variableIdentifier] = array(array_shift($variablesByItem[$itemIdentifier]['sortedVars'][$variableType][$variableIdentifier]));
                         break;
                 }
             }
         }
     }
     return $variablesByItem;
 }
コード例 #2
0
 /**
  * @param $options
  * @return null|number timestamp
  */
 private function getPeriodEnd(array $options)
 {
     $periodEnd = null;
     if (!empty($options['periodEnd'])) {
         $periodEnd = new DateTime($options['periodEnd']);
         $periodEnd->setTime(23, 59, 59);
         $periodEnd = DateHelper::getTimeStamp($periodEnd->getTimestamp());
     }
     return $periodEnd;
 }
コード例 #3
0
 /**
  * Gets the list of assessment reports related to a test site
  *
  * @param $testCenter
  * @param array [$options]
  * @return array
  */
 public static function getReports($testCenter, $options = array())
 {
     $periodStart = null;
     $periodEnd = null;
     if (isset($options['periodStart'])) {
         $periodStart = new DateTime($options['periodStart']);
         $periodStart->setTime(0, 0, 0);
         $periodStart = DateHelper::getTimeStamp($periodStart->getTimestamp());
     }
     if (isset($options['periodEnd'])) {
         $periodEnd = new DateTime($options['periodEnd']);
         $periodEnd->setTime(23, 59, 59);
         $periodEnd = DateHelper::getTimeStamp($periodEnd->getTimestamp());
     }
     $deliveryService = ServiceManager::getServiceManager()->get(DeliveryService::CONFIG_ID);
     $deliveries = EligibilityService::singleton()->getEligibleDeliveries($testCenter);
     $filteredExecutions = array();
     foreach ($deliveries as $delivery) {
         if ($delivery->exists()) {
             $deliveryExecutions = $deliveryService->getDeliveryExecutions($delivery->getUri());
             foreach ($deliveryExecutions as $deliveryExecution) {
                 $startTime = $deliveryExecution->getStartTime();
                 $finishTime = $deliveryExecution->getFinishTime();
                 if ($finishTime && $periodStart && $periodStart > DateHelper::getTimeStamp($finishTime)) {
                     continue;
                 }
                 if (!$finishTime && $periodStart && $periodEnd && (DateHelper::getTimeStamp($startTime) > $periodEnd || DateHelper::getTimeStamp($startTime) < $periodStart)) {
                     continue;
                 }
                 if ($startTime && $periodEnd && $periodEnd < DateHelper::getTimeStamp($startTime)) {
                     continue;
                 }
                 $filteredExecutions[] = $deliveryExecution;
             }
         }
     }
     $deliveryExecutionStateService = ServiceManager::getServiceManager()->get(DeliveryExecutionStateService::SERVICE_ID);
     return DataTableHelper::paginate($filteredExecutions, $options, function ($deliveryExecutions) use($deliveryExecutionStateService) {
         $reports = [];
         foreach ($deliveryExecutions as $deliveryExecution) {
             /* @var $deliveryExecution DeliveryExecution */
             $startTime = $deliveryExecution->getStartTime();
             $finishTime = $deliveryExecution->getFinishTime();
             $userId = $deliveryExecution->getUserIdentifier();
             $user = UserHelper::getUser($userId);
             $authorizationData = self::getDeliveryLog()->get($deliveryExecution->getIdentifier(), 'TEST_AUTHORISE');
             $proctor = empty($authorizationData) ? '' : UserHelper::getUser($authorizationData[0][DeliveryLog::DATA]['proctorUri']);
             $procActions = self::getProctorActions($deliveryExecution);
             $reports[] = array('id' => $deliveryExecution->getIdentifier(), 'delivery' => $deliveryExecution->getDelivery()->getLabel(), 'testtaker' => $user ? UserHelper::getUserName($user, true) : '', 'proctor' => $proctor ? UserHelper::getUserName($proctor, true) : '', 'status' => $deliveryExecutionStateService->getState($deliveryExecution), 'start' => $startTime ? DateHelper::displayeDate($startTime) : '', 'end' => $finishTime ? DateHelper::displayeDate($finishTime) : '', 'pause' => $procActions['pause'], 'resume' => $procActions['resume'], 'irregularities' => $procActions['irregularities']);
         }
         return $reports;
     });
 }
コード例 #4
0
 /**
  * Compare two deliveryExecution by their start timestamp.
  * CAUTION: getStartTime() is not cached at this moment, so it request the DB on each call
  * @param DeliveryExecution $a
  * @param DeliveryExecution $b
  * @return int
  */
 public function cmpDeliveryExecution($a, $b)
 {
     return DateHelper::getTimeStamp($b->getStartTime()) - DateHelper::getTimeStamp($a->getStartTime());
 }
コード例 #5
0
 /**
  * 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 = taoResults_models_classes_ResultsService::singleton();
     foreach ($resources as $result) {
         $itemresults = $resultsService->getVariables($result, new core_kernel_classes_Class(TAO_RESULT_VARIABLE), 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' . $itemResultUri)) {
                 $itemUri = common_cache_FileCache::singleton()->get('itemResultItemCache' . $itemResultUri);
                 $item = new core_kernel_classes_Resource($itemUri);
             } else {
                 $item = $resultsService->getItemFromItemResult(new core_kernel_classes_Resource($itemResultUri));
                 common_cache_FileCache::singleton()->put($item->getUri(), 'itemResultItemCache' . $itemResultUri);
             }
             if (get_class($item) == "core_kernel_classes_Resource") {
                 $contextIdentifier = (string) $item->getUri();
             } else {
                 $contextIdentifier = (string) $item->__toString();
             }
             foreach ($vars as $var) {
                 //cache the variable data
                 if (common_cache_FileCache::singleton()->has('variableDataCache' . $var->getUri())) {
                     $varData = common_cache_FileCache::singleton()->get('variableDataCache' . $var->getUri());
                 } else {
                     $varData = $resultsService->getVariableData($var);
                     common_cache_FileCache::singleton()->put($varData, 'variableDataCache' . $var->getUri());
                 }
                 if (is_array($varData["value"])) {
                     $varData["value"] = json_encode($varData["value"]);
                 }
                 $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[$varData["type"]->getUri()][$result->getUri()][$contextIdentifier . $variableIdentifier][(string) $epoch] = array($value, $readableTime);
                     }
                 }
             }
         }
     }
 }