/** * @param RequestInterface $wiziqRequest * * @return \SimpleXMLElement * * @throws CallException If Wiziq declined the request */ public function sendRequest(RequestInterface $wiziqRequest) { $url = sprintf('%s?method=%s', $this->endpointUrl, $wiziqRequest->getMethod()); $params = $this->auth->preparePayload($wiziqRequest->getMethod(), $wiziqRequest->getParams()); $rawResponse = $this->client->getResponse($url, $params); $xmlObject = simplexml_load_string($rawResponse); $response = new Response($xmlObject); if (!$response->isSuccess()) { throw CallException::from($response); } return $response->getResponse(); }
public static function from(Response $response) { return new self($response->getErrorMessage(), $response->getErrorCode()); }
/** * @see http://developer.wiziq.com/class/status-ping * @param Request $request request comming from wiziq as POST * @return void */ public function statusPing(Request $request) { $input = $request->all(); // \Log::info($input); // \Log::info('status ping received'); // \Log::info($input); if (empty($input)) { return response()->json("ACCEPT POST ONLY"); } $session = DB::table('classroom_sessions')->where('wiziq_id', $input['class_id'])->first(); if ($session) { if (!empty($input['class_status'])) { DB::table('classroom_sessions')->where('id', $session->id)->update(['wiziq_status' => $input['class_status']]); // $session->save(); } if (!empty($input['recording_status'])) { DB::table('classroom_sessions')->where('id', $session->id)->update(['wiziq_recording_status' => $input['recording_status']]); // $session->wiziq_recording_status = $input['recording_status']; // $session->save(); if ($input['recording_status'] == 'available') { //$this->generateReport($session); } } exit; if (!empty($input['attendance_report_status']) and $input['attendance_report_status'] == 'available' && isset($input['attendance_report_file'])) { if (ClassroomSessionAttendance::where('classroom_session_id', $session->id)->count()) { exit; } // $client = new CurlClient(); // $rawResponse = $client->getResponse($input['attendance_report_file'], []); $file = $request->file('attendance_report_file'); $xmlObject = simplexml_load_string(File::get($file->getRealPath())); $response = new WiziqResponse($xmlObject); if (!$response->isSuccess()) { throw mikemix\Wiziq\Common\Api\Exception\CallException::from($response); } $response = $response->getResponse(); $student_ids = []; if ((int) $response->class_id == $session->wiziq_id) { // Log::info($response->attendee_list[0]); foreach ($response->attendee_list[0] as $attendee) { $student_id = null; $teacher_id = null; if (isset($attendee['presenter']) and $attendee['presenter'] == true && !empty((int) $attendee->attendee_id)) { $teacher_id = (int) $attendee->attendee_id; } elseif (!empty((int) $attendee->attendee_id)) { $student_id = (int) $attendee->attendee_id; } else { continue; } $data = ['entry_time' => Date::parse((string) $attendee->entry_time)->format('Y-m-d H:i:s'), 'exit_time' => Date::parse((string) $attendee->exit_time)->format('Y-m-d H:i:s'), 'classroom_session_id' => $session->id, 'teacher_id' => $teacher_id, 'student_id' => $student_id, 'attended_minutes' => (int) $attendee->attended_minutes]; if ($teacher_id) { TeacherFund::create(['teacher_id' => $teacher_id, 'amount' => config('classrooms.payment_per_session'), 'reference_key' => 'session', 'reference_id' => $session->id, 'semester_id' => semester()->id]); } elseif ($student_id) { $student_ids[] = $student_id; } $attendance = ClassroomSessionAttendance::create($data); if ($student_id) { $grade_data = ['student_id' => $student_id, 'subject_id' => $session->subject_subject_id, 'value' => $session->subject->hours == 2 ? 2.5 : 2, 'ref_key' => 'attendance', 'notes' => trans('classrooms::attendances.attended_for', ['attended_minutes' => (int) $attendee->attended_minutes, 'session' => $session->title, 'subject' => $session->subject->name]), 'ref_value' => $attendance->id]; StudentGrade::create($grade_data); } } $students = Student::whereHas('classrooms', function ($query) use($session) { return $query->where('classrooms.id', $session->classroom_id); })->whereNotIn('id', $student_ids)->get(); foreach ($students as $student) { $data = ['teacher_id' => NULL, 'student_id' => $student->id, 'classroom_session_id' => $session->id, 'entry_time' => NULL, 'exit_time' => NULL, 'attended_minutes' => 0, 'manual' => 0, 'valid' => 0]; event(new StudentAbsentSession($student, $session, $session->subject)); ClassroomSessionAttendance::create($data); } } } } }