/** * 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'); }