/**
  * Function for receiving Ephorus reports
  *
  * @param object $report - the object containing the report
  * @return void
  */
 function reportingService($report)
 {
     $this->log('Received report for document (' . $report->document_guid . ')');
     if (DLEApi::checkDocumentExists($report->document_guid) == false) {
         $this->log('Report has unknown guid (' . $report->document_guid . ')');
         $this->log('Report finished processing');
         return new SoapFault('SOAP-ENV:Client', 'Unknown guid received');
     }
     // Create Eph_document representation.
     $document = new stdClass();
     $document->guid = $report->document_guid;
     $document->status = $report->status;
     $document->student_name = $report->student_name;
     $document->student_number = substr($report->student_number, 0, 25);
     $document->date_created = $report->document_date;
     $document->percentage = 0;
     $document->summary = NULL;
     $document->duplicate_guid = NULL;
     $document->duplicate_student_name = NULL;
     $document->duplicate_student_number = NULL;
     switch ($report->status) {
         case 1:
             $document->percentage = $report->document_percentage;
             // Get summary...
             $document->summary = $report->summary->any;
             // When only one result, $report->results->result is not an array (as expected) but an object
             $result_list = is_array($report->results->result) ? $report->results->result : $report->results;
             $results = array();
             foreach ($result_list as $result_item) {
                 $result = new stdClass();
                 $result->guid = $result_item->result_guid;
                 $result->document_guid = $report->document_guid;
                 $result->percentage = $result_item->percent;
                 $result->type = $result_item->type;
                 $result->url = $result_item->url;
                 $result->original_guid = $result_item->type == 'local' ? $result_item->original_guid : NULL;
                 $result->student_name = $result_item->type == 'local' ? $result_item->student_name : NULL;
                 $result->student_number = $result_item->type == 'local' ? substr($result_item->student_number, 0, 25) : NULL;
                 $result->comparison = $result_item->diff->any;
                 $results[] = $result;
             }
             unset($result);
             break;
         case 2:
             // Duplicate document
             $this->log('Report returned a duplicate');
             $document->duplicate_guid = $report->duplicate_original_guid;
             $document->duplicate_student_name = $report->duplicate_student_name;
             $document->duplicate_student_number = substr($report->duplicate_student_number, 0, 25);
             break;
         default:
             // Nothing extra needs to happen if the status is 3 - 6.
             break;
     }
     DLEApi::saveReport($document, isset($results) ? $results : array());
     $this->log('Report finished processing');
 }