Stabilize legacy Steven API endpoints and add OpenAPI spec
This commit is contained in:
390
steven/API/willy_manageJadwal.php
Normal file
390
steven/API/willy_manageJadwal.php
Normal file
@@ -0,0 +1,390 @@
|
||||
<?php
|
||||
|
||||
include '../conf/class.server.php';
|
||||
include '../conf/koneksiPDO.php';
|
||||
include '../conf/function.php';
|
||||
|
||||
header('Content-Type: application/json');
|
||||
|
||||
$conn = new createCon();
|
||||
$dbh = $conn->connect();
|
||||
|
||||
requireRobotSecret();
|
||||
|
||||
$jsonData = getRequestJson();
|
||||
$act = isset($jsonData['act']) ? trim((string) $jsonData['act']) : '';
|
||||
|
||||
if ($act === '') {
|
||||
jsonResponse([
|
||||
'status' => false,
|
||||
'msg' => 'Parameter act tidak lengkap',
|
||||
], 422);
|
||||
}
|
||||
|
||||
function getManageJadwalTitle($jenis, $namaMahasiswa, $nimMahasiswa)
|
||||
{
|
||||
$judulSeminar = '';
|
||||
switch ($jenis) {
|
||||
case 'Outline':
|
||||
$judulSeminar = 'Seminar Outline';
|
||||
break;
|
||||
case 'SidHas':
|
||||
$judulSeminar = 'Sidang Hasil';
|
||||
break;
|
||||
case 'Sidang':
|
||||
$judulSeminar = 'Sidang Terbuka';
|
||||
break;
|
||||
}
|
||||
|
||||
if ($judulSeminar === '') {
|
||||
return '';
|
||||
}
|
||||
|
||||
return $judulSeminar.' '.$namaMahasiswa.' / '.$nimMahasiswa;
|
||||
}
|
||||
|
||||
function loadMahasiswaByNim($dbh, $nim)
|
||||
{
|
||||
$sql = 'SELECT * FROM tbmhs WHERE nim = :nim';
|
||||
$stmt = $dbh->prepare($sql);
|
||||
$stmt->bindParam(':nim', $nim);
|
||||
$stmt->execute();
|
||||
|
||||
$mahasiswa = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
if (!$mahasiswa) {
|
||||
jsonResponse([
|
||||
'status' => false,
|
||||
'msg' => 'NIM mahasiswa tidak dikenali',
|
||||
], 404);
|
||||
}
|
||||
|
||||
return $mahasiswa;
|
||||
}
|
||||
|
||||
function loadDosenMeta($dbh, $namaPemb1, $namaPemb2, $namaPeng1, $namaPeng2)
|
||||
{
|
||||
$namaList = [$namaPemb1, $namaPemb2, $namaPeng1, $namaPeng2];
|
||||
$placeholders = [];
|
||||
$params = [];
|
||||
|
||||
foreach ($namaList as $index => $nama) {
|
||||
$key = ':nama'.$index;
|
||||
$placeholders[] = $key;
|
||||
$params[$key] = $nama;
|
||||
}
|
||||
|
||||
$sql = 'SELECT * FROM tbdosen WHERE nmLengkap IN ('.implode(', ', $placeholders).')';
|
||||
$stmt = $dbh->prepare($sql);
|
||||
$stmt->execute($params);
|
||||
|
||||
$result = [
|
||||
'listEmail' => [],
|
||||
'idPemb1' => 0,
|
||||
'idPemb2' => 0,
|
||||
'idPeng1' => 0,
|
||||
'idPeng2' => 0,
|
||||
];
|
||||
|
||||
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
|
||||
if (!empty($row['email'])) {
|
||||
$result['listEmail'][] = $row['email'];
|
||||
}
|
||||
|
||||
if ($namaPemb1 === $row['nmLengkap']) {
|
||||
$result['idPemb1'] = (int) $row['iddosen'];
|
||||
}
|
||||
|
||||
if ($namaPemb2 === $row['nmLengkap']) {
|
||||
$result['idPemb2'] = (int) $row['iddosen'];
|
||||
}
|
||||
|
||||
if ($namaPeng1 === $row['nmLengkap']) {
|
||||
$result['idPeng1'] = (int) $row['iddosen'];
|
||||
}
|
||||
|
||||
if ($namaPeng2 === $row['nmLengkap']) {
|
||||
$result['idPeng2'] = (int) $row['iddosen'];
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
function callCalendarApi($endpoint, $payload)
|
||||
{
|
||||
$url = 'http://203.24.50.140:8086/'.$endpoint;
|
||||
$postData = json_encode($payload);
|
||||
$opts = [
|
||||
'http' => [
|
||||
'method' => 'POST',
|
||||
'ignore_errors' => true,
|
||||
'header' => 'Content-Type: application/json',
|
||||
'content' => $postData,
|
||||
'timeout' => 20,
|
||||
],
|
||||
];
|
||||
|
||||
$context = stream_context_create($opts);
|
||||
$response = @file_get_contents($url, false, $context);
|
||||
if ($response === false || trim($response) === '') {
|
||||
return [];
|
||||
}
|
||||
|
||||
$decoded = json_decode($response, true);
|
||||
|
||||
return is_array($decoded) ? $decoded : [];
|
||||
}
|
||||
|
||||
function buildCalendarPayload($jenis, $namaMahasiswa, $nimMahasiswa, $ruangan, $waktuSidang, $listEmail, $calendarId = null)
|
||||
{
|
||||
$timestampStartSeminar = strtotime($waktuSidang);
|
||||
if ($timestampStartSeminar === false) {
|
||||
jsonResponse([
|
||||
'status' => false,
|
||||
'msg' => 'Format waktuSidang tidak valid',
|
||||
], 422);
|
||||
}
|
||||
|
||||
$timestampEndSeminar = strtotime('+2 hours', $timestampStartSeminar);
|
||||
$payload = [
|
||||
'judul' => getManageJadwalTitle($jenis, $namaMahasiswa, $nimMahasiswa),
|
||||
'ruangan' => $ruangan,
|
||||
'start' => date('Y-m-d\TH:i:s', $timestampStartSeminar),
|
||||
'end' => date('Y-m-d\TH:i:s', $timestampEndSeminar),
|
||||
'emailUser' => array_values(array_unique(array_filter($listEmail))),
|
||||
];
|
||||
|
||||
if ($calendarId !== null && $calendarId !== '') {
|
||||
$payload['id'] = $calendarId;
|
||||
}
|
||||
|
||||
return $payload;
|
||||
}
|
||||
|
||||
function getManageJadwalParams($jsonData, $needsId)
|
||||
{
|
||||
$required = [
|
||||
'nim',
|
||||
'judul',
|
||||
'ruangan',
|
||||
'jenis',
|
||||
'waktuSidang',
|
||||
'namaPemb1',
|
||||
'namaPemb2',
|
||||
'namaPeng1',
|
||||
'namaPeng2',
|
||||
];
|
||||
|
||||
if ($needsId) {
|
||||
$required[] = 'id';
|
||||
}
|
||||
|
||||
foreach ($required as $field) {
|
||||
if (!isset($jsonData[$field]) || trim((string) $jsonData[$field]) === '') {
|
||||
jsonResponse([
|
||||
'status' => false,
|
||||
'msg' => 'Parameter tidak lengkap',
|
||||
], 422);
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'id' => $needsId ? (int) $jsonData['id'] : 0,
|
||||
'nim' => trim((string) $jsonData['nim']),
|
||||
'judul' => trim((string) $jsonData['judul']),
|
||||
'ruangan' => trim((string) $jsonData['ruangan']),
|
||||
'jenis' => trim((string) $jsonData['jenis']),
|
||||
'waktuSidang' => trim((string) $jsonData['waktuSidang']),
|
||||
'namaPemb1' => trim((string) $jsonData['namaPemb1']),
|
||||
'namaPemb2' => trim((string) $jsonData['namaPemb2']),
|
||||
'namaPeng1' => trim((string) $jsonData['namaPeng1']),
|
||||
'namaPeng2' => trim((string) $jsonData['namaPeng2']),
|
||||
];
|
||||
}
|
||||
|
||||
switch ($act) {
|
||||
case 'add':
|
||||
$params = getManageJadwalParams($jsonData, false);
|
||||
$mahasiswa = loadMahasiswaByNim($dbh, $params['nim']);
|
||||
$dosenMeta = loadDosenMeta(
|
||||
$dbh,
|
||||
$params['namaPemb1'],
|
||||
$params['namaPemb2'],
|
||||
$params['namaPeng1'],
|
||||
$params['namaPeng2']
|
||||
);
|
||||
|
||||
$listEmail = $dosenMeta['listEmail'];
|
||||
if (!empty($mahasiswa['email'])) {
|
||||
$listEmail[] = $mahasiswa['email'];
|
||||
}
|
||||
|
||||
$calendarPayload = buildCalendarPayload(
|
||||
$params['jenis'],
|
||||
$mahasiswa['nmLengkap'],
|
||||
$mahasiswa['nim'],
|
||||
$params['ruangan'],
|
||||
$params['waktuSidang'],
|
||||
$listEmail
|
||||
);
|
||||
$calendarResponse = callCalendarApi('insertJadwal', $calendarPayload);
|
||||
$calendarId = isset($calendarResponse['id']) ? $calendarResponse['id'] : null;
|
||||
$calendarLink = isset($calendarResponse['link']) ? $calendarResponse['link'] : null;
|
||||
|
||||
$sql = "INSERT INTO tbjadwal(idMhs, judul, ruangan, jenis, start, pemb1, pemb2, peng1, peng2, end, idProdi, calendarId, calendarLink, idPemb1, idPemb2, idPeng1, idPeng2) VALUES(:idMhs, :judul, :ruangan, :jenis, :waktuSidang, :namaPemb1, :namaPemb2, :namaPeng1, :namaPeng2, '2000-01-01 00:00:00', '2', :calendarId, :calendarLink, :idPemb1, :idPemb2, :idPeng1, :idPeng2)";
|
||||
$stmt = $dbh->prepare($sql);
|
||||
$stmt->bindValue(':idMhs', $mahasiswa['idmhs']);
|
||||
$stmt->bindValue(':judul', $params['judul']);
|
||||
$stmt->bindValue(':ruangan', $params['ruangan']);
|
||||
$stmt->bindValue(':jenis', $params['jenis']);
|
||||
$stmt->bindValue(':waktuSidang', $params['waktuSidang']);
|
||||
$stmt->bindValue(':namaPemb1', $params['namaPemb1']);
|
||||
$stmt->bindValue(':namaPemb2', $params['namaPemb2']);
|
||||
$stmt->bindValue(':namaPeng1', $params['namaPeng1']);
|
||||
$stmt->bindValue(':namaPeng2', $params['namaPeng2']);
|
||||
$stmt->bindValue(':calendarId', $calendarId);
|
||||
$stmt->bindValue(':calendarLink', $calendarLink);
|
||||
$stmt->bindValue(':idPemb1', $dosenMeta['idPemb1']);
|
||||
$stmt->bindValue(':idPemb2', $dosenMeta['idPemb2']);
|
||||
$stmt->bindValue(':idPeng1', $dosenMeta['idPeng1']);
|
||||
$stmt->bindValue(':idPeng2', $dosenMeta['idPeng2']);
|
||||
$stmt->execute();
|
||||
|
||||
$error = $stmt->errorInfo();
|
||||
if ($error[0] !== '00000') {
|
||||
jsonResponse([
|
||||
'status' => false,
|
||||
'msg' => 'Terjadi kesalahan teknis!!!',
|
||||
'error' => $error,
|
||||
], 500);
|
||||
}
|
||||
|
||||
jsonResponse([
|
||||
'status' => true,
|
||||
'msg' => 'Berhasil menambah data jadwal!!!',
|
||||
'id' => $dbh->lastInsertId(),
|
||||
'link' => $calendarLink,
|
||||
]);
|
||||
break;
|
||||
|
||||
case 'update':
|
||||
$params = getManageJadwalParams($jsonData, true);
|
||||
$mahasiswa = loadMahasiswaByNim($dbh, $params['nim']);
|
||||
$dosenMeta = loadDosenMeta(
|
||||
$dbh,
|
||||
$params['namaPemb1'],
|
||||
$params['namaPemb2'],
|
||||
$params['namaPeng1'],
|
||||
$params['namaPeng2']
|
||||
);
|
||||
|
||||
$listEmail = $dosenMeta['listEmail'];
|
||||
if (!empty($mahasiswa['email'])) {
|
||||
$listEmail[] = $mahasiswa['email'];
|
||||
}
|
||||
|
||||
$sql = 'SELECT calendarId FROM tbjadwal WHERE id = :id';
|
||||
$stmt = $dbh->prepare($sql);
|
||||
$stmt->bindValue(':id', $params['id']);
|
||||
$stmt->execute();
|
||||
$jadwal = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
$calendarId = $jadwal ? $jadwal['calendarId'] : null;
|
||||
|
||||
$sql = 'UPDATE tbjadwal SET idMhs = :idMhs, judul = :judul, ruangan = :ruangan, jenis = :jenis, start = :waktuSidang, pemb1 = :namaPemb1, pemb2 = :namaPemb2, peng1 = :namaPeng1, peng2 = :namaPeng2, idPemb1 = :idPemb1, idPemb2 = :idPemb2, idPeng1 = :idPeng1, idPeng2 = :idPeng2 WHERE id = :id';
|
||||
$stmt = $dbh->prepare($sql);
|
||||
$stmt->bindValue(':id', $params['id']);
|
||||
$stmt->bindValue(':idMhs', $mahasiswa['idmhs']);
|
||||
$stmt->bindValue(':judul', $params['judul']);
|
||||
$stmt->bindValue(':ruangan', $params['ruangan']);
|
||||
$stmt->bindValue(':jenis', $params['jenis']);
|
||||
$stmt->bindValue(':waktuSidang', $params['waktuSidang']);
|
||||
$stmt->bindValue(':namaPemb1', $params['namaPemb1']);
|
||||
$stmt->bindValue(':namaPemb2', $params['namaPemb2']);
|
||||
$stmt->bindValue(':namaPeng1', $params['namaPeng1']);
|
||||
$stmt->bindValue(':namaPeng2', $params['namaPeng2']);
|
||||
$stmt->bindValue(':idPemb1', $dosenMeta['idPemb1']);
|
||||
$stmt->bindValue(':idPemb2', $dosenMeta['idPemb2']);
|
||||
$stmt->bindValue(':idPeng1', $dosenMeta['idPeng1']);
|
||||
$stmt->bindValue(':idPeng2', $dosenMeta['idPeng2']);
|
||||
$stmt->execute();
|
||||
|
||||
$error = $stmt->errorInfo();
|
||||
if ($error[0] !== '00000') {
|
||||
jsonResponse([
|
||||
'status' => false,
|
||||
'msg' => 'Terjadi kesalahan teknis!!!',
|
||||
'error' => $error,
|
||||
], 500);
|
||||
}
|
||||
|
||||
if (!empty($calendarId)) {
|
||||
$calendarPayload = buildCalendarPayload(
|
||||
$params['jenis'],
|
||||
$mahasiswa['nmLengkap'],
|
||||
$mahasiswa['nim'],
|
||||
$params['ruangan'],
|
||||
$params['waktuSidang'],
|
||||
$listEmail,
|
||||
$calendarId
|
||||
);
|
||||
callCalendarApi('updateJadwal', $calendarPayload);
|
||||
}
|
||||
|
||||
jsonResponse([
|
||||
'status' => true,
|
||||
'msg' => 'Berhasil mengubah data jadwal!!!',
|
||||
]);
|
||||
break;
|
||||
|
||||
case 'delete':
|
||||
if (!isset($jsonData['id'], $jsonData['nim']) || trim((string) $jsonData['id']) === '' || trim((string) $jsonData['nim']) === '') {
|
||||
jsonResponse([
|
||||
'status' => false,
|
||||
'msg' => 'Parameter tidak lengkap',
|
||||
], 422);
|
||||
}
|
||||
|
||||
$id = (int) $jsonData['id'];
|
||||
$nim = trim((string) $jsonData['nim']);
|
||||
$mahasiswa = loadMahasiswaByNim($dbh, $nim);
|
||||
|
||||
$sql = 'SELECT calendarId FROM tbjadwal WHERE id = :id';
|
||||
$stmt = $dbh->prepare($sql);
|
||||
$stmt->bindValue(':id', $id);
|
||||
$stmt->execute();
|
||||
$jadwal = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
$calendarId = $jadwal ? $jadwal['calendarId'] : null;
|
||||
|
||||
$sql = 'DELETE FROM tbjadwal WHERE id = :id AND idMhs = :idMhs';
|
||||
$stmt = $dbh->prepare($sql);
|
||||
$stmt->bindValue(':id', $id);
|
||||
$stmt->bindValue(':idMhs', $mahasiswa['idmhs']);
|
||||
$stmt->execute();
|
||||
|
||||
$error = $stmt->errorInfo();
|
||||
if ($error[0] !== '00000') {
|
||||
jsonResponse([
|
||||
'status' => false,
|
||||
'msg' => 'Terjadi kesalahan teknis!!!',
|
||||
'error' => $error,
|
||||
], 500);
|
||||
}
|
||||
|
||||
if (!empty($calendarId)) {
|
||||
callCalendarApi('deleteJadwal', [
|
||||
'id' => $calendarId,
|
||||
]);
|
||||
}
|
||||
|
||||
jsonResponse([
|
||||
'status' => true,
|
||||
'msg' => 'Berhasil menghapus data jadwal!!!',
|
||||
]);
|
||||
break;
|
||||
|
||||
default:
|
||||
jsonResponse([
|
||||
'status' => false,
|
||||
'msg' => 'act tidak dikenali',
|
||||
], 422);
|
||||
}
|
||||
Reference in New Issue
Block a user