391 lines
12 KiB
PHP
391 lines
12 KiB
PHP
<?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);
|
|
}
|