示例#1
0
 private function data_qualities_upload()
 {
     // get correct description
     if (isset($_FILES['description']) == false || check_uploaded_file($_FILES['description']) == false) {
         $this->returnError(382, $this->version);
         return;
     }
     // get description from string upload
     $description = $_FILES['description'];
     if (validateXml($description['tmp_name'], xsd('openml.data.qualities', $this->controller, $this->version), $xmlErrors) == false) {
         $this->returnError(383, $this->version, $this->openmlGeneralErrorCode, $xmlErrors);
         return;
     }
     if (!$this->ion_auth->in_group($this->groups_upload_rights, $this->user_id)) {
         $this->returnError(104, $this->version);
         return;
     }
     $xml = simplexml_load_file($description['tmp_name']);
     $did = '' . $xml->children('oml', true)->{'did'};
     $dataset = $this->Dataset->getById($did);
     if ($dataset == false) {
         $this->returnError(384, $this->version);
         return;
     }
     // prepare array for updating data object
     $data = array('processed' => now());
     if ($xml->children('oml', true)->{'error'}) {
         $data['error'] = "true";
     }
     $this->Dataset->update($did, $data);
     $all_qualities = $this->Quality->getColumnWhere('name', '`type` = "DataQuality"');
     $qualities = $this->Data_quality->getAssociativeArray('quality', 'value', '`data` = "' . $dataset->did . '"');
     // check and collect the qualities
     $newQualities = array();
     foreach ($xml->children('oml', true)->{'quality'} as $q) {
         $quality = xml2object($q, true);
         /*if( array_key_exists( $quality->name, $newQualities ) ) { // quality calculated twice
             $this->returnError( 385, $this->openmlGeneralErrorCode, $quality->name );
             return;
           } elseif( $qualities != false && array_key_exists( $quality->name, $qualities ) ) { // prior to this run, we already got this quality
             if( abs( $qualities[$quality->name] - $quality->value ) > $this->config->item('double_epsilon') ) {
               $this->returnError( 386, $this->openmlGeneralErrorCode, $quality->name );
               return;
             }
           } else*/
         if (is_array($all_qualities) == false || in_array($quality->name, $all_qualities) == false) {
             $this->returnError(387, $this->version, $this->openmlGeneralErrorCode, $quality->name);
             return;
         } else {
             $newQualities[] = $quality;
         }
         if (property_exists($quality, 'interval_start')) {
         } else {
         }
     }
     if (count($newQualities) == 0) {
         $this->returnError(388, $this->version);
         return;
     }
     $success = true;
     $this->db->trans_start();
     foreach ($newQualities as $index => $quality) {
         if (property_exists($quality, 'interval_start')) {
             $data = array('data' => $dataset->did, 'quality' => $quality->name, 'interval_start' => $quality->interval_start, 'interval_end' => $quality->interval_end, 'value' => $quality->value);
             $this->Data_quality_interval->insert_ignore($data);
         } else {
             $data = array('data' => $dataset->did, 'quality' => $quality->name, 'value' => $quality->value);
             $this->Data_quality->insert_ignore($data);
         }
     }
     $this->db->trans_complete();
     // add to elastic search index.
     $this->elasticsearch->index('data', $dataset->did);
     if ($success) {
         $this->xmlContents('data-qualities-upload', $this->version, array('did' => $dataset->did));
     } else {
         $this->returnError(389, $this->version);
         return;
     }
 }
示例#2
0
文件: shim.php 项目: dopecode/retro
 /**
  * 
  * @param type $xml
  * @return type
  */
 function xml2array($xml)
 {
     return obj2arr(xml2object($xml));
 }
示例#3
0
function xml2assoc($xmlObject, $attributes = false)
{
    $out = array();
    foreach ((array) $xmlObject as $index => $node) {
        $out[$index] = is_object($node) ? xml2object($node) : $node;
    }
    if ($attributes) {
        foreach ($xmlObject->attributes() as $index => $node) {
            $out[$index] = '' . $node;
        }
    }
    return $out;
}