SISTEM INFORMASI PENJADWALAN MATA KULIAH PADA INTERNATIONAL PROGRAMS FAKULTAS SAINS DAN TEKNOLOGI UIN SYARIF HIDAYATULLAH JAKARTA BERBASIS WEBSITE
Disusun Oleh : FAHRUROZI 104093002992
PROGRAM STUDI SISTEM INFORMASI FAKULTAS SAINS DAN TEKNOLOGI UNIVERSITAS ISLAM NEGERI SYARIF HIDAYATULLAH JAKARTA 2011M / 1432 H
SISTEM INFORMASI PENJADWALAN MATA KULIAH PADA INTERNATIONAL PROGRAMS FAKULTAS SAINS DAN TEKNOLOGI UIN SYARIF HIDAYATULLAH JAKARTA BERBASIS WEBSITE
Skripsi Diajukan untuk Memenuhi Persyaratan Memperoleh Gelar Sarjana Komputer
Disusun Oleh : FAHRUROZI 104093002992
PROGRAM STUDI SISTEM INFORMASI FAKULTAS SAINS DAN TEKNOLOGI UNIVERSITAS ISLAM NEGERI SYARIF HIDAYATULLAH JAKARTA 2011M / 1432 H
ii
SISTEM INFORMASI PENJADWALAN MATA KULIAH PADA INTERNATIONAL PROGRAMS FAKULTAS SAINS DAN TEKNOLOGI UIN SYARIF HIDAYATULLAH JAKARTA BERBASIS WEBSITE
Skripsi Diajukan untuk Memenuhi Persyaratan Memperoleh Gelar Sarjana Komputer
Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah Jakarta
Disusun Oleh : FAHRUROZI 104093002992
PROGRAM STUDI SISTEM INFORMASI FAKULTAS SAINS DAN TEKNOLOGI UNIVERSITAS ISLAM NEGERI SYARIF HIDAYATULLAH JAKARTA 2011M / 1432 H
iii
Sistem Informasi Penjadwalan Mata Kuliah pada International Programs
Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah
Jakarta Berbasis Website
Skripsi Sebagai Salah Satu Syarat untuk Memperoleh Gelar Sarjana Komputer Pada Fakultas Sains dan Teknologi
UIN Syarif Hidayatullah Jakarta
Oleh:
Fahrurozi 104093002992
Menyetujui,
embimbing
I
Pembimbing
NIP.
Mengetahui, Ketua Program Studi Sistem Informasi
IV
II
PROGRAM STUDI SISTEM INFORMASI FAKULTAS SAINS DAN TEKNOLOGI UNIVERSITAS ISLAM NEGERI SYARIF HIDYATULLAII JAKARTA
PENGESAHAN UJIAN
Skripsi berjudul "Sistem Informasi Penjadwalan Mata Kuliah pada International Programs Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah Jakarta Berbasis Website" yang ditulis oleh Fahrurozi, 104093002992 telah druji dan dinyatakan LULUS dalam sidang munaqosah Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah Jakarta pada tanggal 29 Juli 2011. Skripsi ini telah diterima sebagai salah satu syarat untuk memperoleh gelar sarjana Strata Satu (Sl) Program Studi Sistern Informasi.
Menyetujui, Penguji
Herlino Nanang" MT NrP. 19731209 200501 1 002
II
Bakri La Katjone. MT. M.Kom NIP. 470033764 Pembimbing II
Fakultas
Ketua Program Studi Sistem Informasi
Dr. Svoniailsvah Ja
4Nrp. 196801t7 2oort2
NrP. 19750818 200501 2 008
PERNYATAAN DENGAN INI SAYA MENYATAKAN BAHWA SKRIPSI INI BENARBENAR HASIL KARYA SENDIRI YANG BELUM PERNAH DIAJUKAN SEBAGAI SKRIPSI ATAU KARYA ILMIAH PADA PERGURUAN TINGGI ATAU LEMBAGA MANAPUN.
Jakarta,
Juli 2011
Fahrurozi 104093002992
vi
ABSTRAKSI
Fahrurozi, Sistem Informasi Penjadwalan Mata Kuliah pada International Programs Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah Jakarta Berbasis Website. (Dibawah Bimbingan ZAINUDDIN BEY FANANIE dan JOKO ADIANTO)
Universitas Islam Negeri (UIN) Syarif Hidayatullah Jakarta merupakan salah satu universitas negeri yang telah menerapkan sistem informasi dalam beberapa aktivitasnya terutama pada pelaksanaannya di International Program Fakultas Sains dan Teknologi (FST). Sistem informasi diharapkan dapat terus digunakan menyeluruh diberbagai aktivitas dalam penyelenggaraan kegiatan yang berhubungan dengan belajar mengajar yang merupakan aktivitas utama di institusi tersebut, salah satunya dalam hal aktivitas pembuatan jadwal kuliah. Terdapat beberapa kendala yang menjadi masalah dalam pembuatan jadwal kuliah, di antaranya adalah sulitnya membuat jadwal berdasarkan kesediaan mengajar, sulitnya mengatur jadwal agar tidak bersamaan dalam satu ruang dengan hari dan sesi yang sama, sulitnya membuat jadwal penggunaan laboratorium yang digunakan bersama-sama, sulitnya mengecek pemenuhan kewajiban SKS yang harus dipenuhi Dosen sesuai dengan status kerja Dosen tersebut. Berdasarkan kendala-kendala tersebut, penulis mengembangkan Sistem Informasi Penjadwalan Mata Kuliah yang dapat digunakan untuk mengatur hari, sesi dan ruang bagi setiap proses kegiatan belajar mengajar berdasarkan matakuliah dan dosen pengajarnya, serta membantu untuk mengetahui jumlah pemenuhan SKS oleh Dosen berdasarkan status kerjanya. Selain itu sistem yang dikembangkan dapat mengorganisir dalam pembuatan jadwal perkuliahan. Sistem Informasi Penjadwalan Mata Kuliah dikembangkan dengan menggunakan strategi Rapid Application Development (RAD) yang merujuk pada teori Jeffrey L. Whitten (2004) dengan sistem menggunakan Unified Modelling Language (UML). Teknologi yang digunakan dalam pengembangan perangkat lunak sistem menggunakan PHP 5.2.9 sebagai bahasa pemrograman, Apache 2.2 sebagai web server, dan MySQL 5.0 sebagai database. Pengembangan Sistem Informasi Penjadwalan Kuliah yang dikembangkan telah membuat batasan waktu pengumpulan kesediaan mengajar, membantu mengorganisir, melakukan pengecekan dan verifikasi kesediaan mengajar, membantu penentuan hari, sesi, lokal dan kelas untuk setiap kesediaan mengajar tervalidasi, membantu penentuan penggunaan laboratorium, mengurangi penggunaan resource kertas dan menghilangkan resiko tercecernya informasi dalam bentuk kertas, meminimalisasi terjadinya human error, membantu mempercepat pembuatan laporan jadwal perkuliahan dan menegaskan informasi penjadwalan kuliah. Kata Kunci : Penjadwalan Mata Kuliah, Rapid Application Development (RAD), Pemodelan berorientasi objek, Unified Modelling Language (UML). V Bab + xxiii Halaman + 141 Halaman + 15 Daftar Pustaka + 20 Gambar + 35 Tabel + 5 Daftar Simbol + 5 Lampiran. Pustaka Acuan : 15 Buku (2000-2009)
vii
KATA PENGANTAR
ﺑﺴﻢ اﷲ اﻟﺮﺣﻤﻦ اﻟﺮﺣﯿﻢ Puji dan syukur penulis panjatkan ke hadirat Allah SWT karena atas berkat rahmat dan hidayah-Nya penulis dapat menyelesaikan penulisan skripsi sebagai salah satu syarat dalam menyelesaikan program Stara Satu (S1) pada Program Studi Sistem Informasi di Universitas Islam Negeri Syarif Hidayatullah Jakarta. Judul penelitian skripsi ini adalah “Sistem Informasi Penjadwalan Mata Kuliah pada International Programs Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah Jakarta Berbasis Website”. Tidak lupa, shalawat serta salam kepada Rasulullah SAW, keluarga, sahabat beserta seluruh pengikutnya dari awal hingga akhir zaman. Pada kesempatan ini, penulis ingin menyampaikan ucapan terima kasih kepada pihak-pihak yang telah mendukung atas terselesaikannya skripsi ini, karena tanpa dukungan dari mereka, penulis tidak akan mampu menyelesaikan skripsi ini tanpa dukungan dari mereka, penulis tidak akan mampu menyelesaikan skripsi ini dengan baik. Mereka yang telah mendukung penulis adalah : 1. Bapak DR. Syopiansyah Jaya Putra, M.SIS, selaku Dekan Fakultas Sains dan Teknologi UIN Syarif Hidayatullah Jakarta. 2. Ibu Nur’aeni Hidayah, MMSI selaku Ketua Program Studi Sistem Informasi 3. Bapak Zainul Arham, Msc selaku Sekretaris Program Studi Sistem Informasi 4. Bapak Zainuddin Bey Fananie, Msc selaku Dosen Pembimbing I yang selalu membimbing dan membantu penulis dalam menyelesaikan penulisan ini. 5. Bapak Joko Adianto, M.InfSys selaku Dosen Pembimbing II yang selalu membimbing dan membantu penulis dalam menyelesaikan penulisan ini. 6. Seluruh staff International Program Fakultas Sains dan teknologi 7. Orangtuaku tercinta, Nasir (alm) dan Mutiah yang selalu mencurahkan rasa cinta dan sayangnya, kakakku Ahmad Jajuli yang selalu memberikan dorongan, motivasi dan doanya untuk penulis, serta adikku tersayang Lailatus Sa’adah dan Nida Khirunnisa yang selalu memberikan cinta, kasih sayang, motivasi, hiburan dan doanya untuk penulis. 8. Umiku terchayank Jumrotun Azizah yang selalu memberikan cinta, dukungan, motivasi, omelan, canda dan tawa yang selalu memberikan semangat dan bantuan untuk segera menyelesaikan skripsi ini. 9. Sahabat-sahabatku, es-ice04 yang sudah menemani penulis selama kuliah dan terus memberikan motivasi dan dukungan yang membangun, terutama sahabatku : Afrialdi Syahputra Butar Butar, Sigit Prasetiyo, Sahrul dan Toni Kurniawan.
viii
Penulis juga ingin mengucapkan permohonan maaf kepada semua pihak yang terkait, apabila selama ini ada hal-hal yang kurang berkenan. Penulis mengharapkan saran serta kritik dari pembaca dan semua pihak agar penulisan laporan selanjutnya menjadi lebih baik lagi. Akhir kata, penulis berharap agar laporan skripsi ini dapat berguna bagi penulis dan juga pembaca sekalian. Amiiin.
Jakarta,
Juli 2011
Fahrurozi 104093002992
ix
DAFTAR ISI HALAMAN JUDUL
ii
HALAMAN SAMPUL
iii
LEMBAR PERSETUJUAN PEMBIMBING
iv
LEMBAR PENGESAHAN UJIAN
v
HALAMAN PERNYATAAN
vi
ABSTRAK
vii
KATA PENGANTAR
viii
DAFTAR ISI
x
DAFTAR GAMBAR
xvi
DAFTAR TABEL
xvii
DAFTAR SIMBOL
xix
Simbol Usecase Model Diagrams
xix
Simbol Activity Diagrams
xx
Simbol Class Diagrams
xxi
Simbol Sequence Diagrams
xxii
Simbol Statechart Diagrams
xxiii
BAB I
PENDAHULUAN 1.1 Latar Belakang Masalah
1
1.2 Perumusan Masalah
2
1.3 Batasan Masalah
3
1.4 Tujuan Penelitian
3
1.5 Manfaat Penelitian
4
1.6 Metodologi Penelitian
5 x
1.7 Sistematika Penulisan
8
BAB II LANDASAN TEORI 2.1 Konsep Dasar Sistem
11
2.1.1 Definisi Sistem
11
2.2 Konsep Dasar Data dan Informasi
18
2.2.1 Definisi Data dan Informasi
18
2.2.2 Siklus Informasi
20
2.2.3 Kualitas Informasi
20
2.3 Konsep Dasar Sistem Informasi
21
2.3.1 Definisi Sistem Informasi
21
2.4 Konsep Penjadwalan
24
2.4.1 Definisi Penjadwalan
24
2.4.2 Aktifitas Penjadwalan
24
2.4.3 Performasi Penjadwalan
25
2.5 Metodologi Penelitian
26
2.5.1 Metode Pengumpulan Data
26
2.5.1.1 Studi Pustaka
26
2.5.1.2 Studi Lapangan
27
2.5.1.2.1 Observasi
27
2.5.1.2.1.1 Definisi Observasi
27
2.5.1.2.1.2 Kebaikan Observasi
27
2.5.1.2.1.3 Petunjuk Melakukan Observasi
28
2.5.1.2.2 Wawancara
29
2.5.1.2.2.1 Definisi Wawancara xi
29
2.5.1.2.2.2 Kebaikan Wawancara
29
2.5.1.2.2.3 Petunjuk Wawancara
30
2.5.1.3 Studi Literatur
32
2.6 Metode Pengembangan Sistem
32
2.7 Metode Pengembangan RAD (Rapid Application Development)
35
2.7.1 Keunggulan RAD (Rapid Application Development)
37
2.8 Unified Modeling Language (UML)
38
2.8.1 Definisi UML
38
2.8.2 Diagram UML
38
2.8.2.1 UseCase Diagram
38
2.8.2.2 Activity Diagram
41
2.8.2.3 Class Diagram
41
2.8.2.4 Statechart Diagram
41
2.8.2.5 Sequence Diagram
41
2.8.3 Keunggulan UML
42
2.9 Alat Pengembangan Aplikasi Sistem 2.9.1 PHP (PHP Hypertext Preprocessor)
43 43
2.9.1.1 Definisi PHP
43
2.9.1.2 Sejarah PHP
44
2.9.1.3 Keuntungan Penggunaan PHP
44
2.9.1.4 Tipe Data
45
2.9.2 MySQL
46
2.9.2.1 Definisi MySQL
46
2.9.2.2 Sejarah MySQL
47
2.9.2.3 Fitur MySQL
48 xii
2.9.2.4 Keistimewaan MySQL
49
2.9.3 phpMyAdmin
52
2.9.4 Apache
53
2.9.5 Web Browser
54
2.10 Literatur Sejenis
54
BAB III METODOLOGI PENELITIAN 3.1 Metodologi Pengumpulan Data
57
3.1.1 Studi Pustaka
57
3.1.2 Studi Lapangan
57
3.1.2.1 Observasi
57
3.1.2.2 Wawancara
58
3.1.3 Studi Literatur Sejenis
60
3.2 Metode Pengembangan Sistem
60
3.3 Kerangka Berfikir
62
BAB IV ANALISA DAN PERNCANGAN SISTEM 4.1 Mendefinisikan Lingkup (Scope Definition)
64
4.1.1 Indentifikasi Masalah
64
4.1.2 Penetapan Lingkup Sistem
66
4.1.3 Penetapan Tujuan Pengembangan Sistem
67
4.2 Analisa Sistem (Analysis)
68
4.2.1 Analisa Gambaran Umum Prodi SI dan TI 4.2.1.1 Prodi SI dan TI
68 68
1. Visi dan Misi
68 xiii
a. Visi
68
b. Misi
69
2. Tujuan
69
a. Tujuan Umum
69
b. Tujuan Khusus
70
4.2.2 Definisi Sistem Berjalan International Program
71
4.2.3 Analisa Sistem Berjalan
72
4.2.4 Analisa Permasalahan
74
4.2.4.1 Analisa Kelebihan dan Kekurangan Sistem Berjalan
75
1. Kelebihan Sistem
75
2. Kekurangan Sistem
75
4.2.4.2 Analisis Persyaratan Sistem
84
4.2.4.2.1 Functional Requirement (Persyaratan Fungsional)
84
4.2.4.2.2 Nonfunctional Requirement (Persyaratan Nonfungsional)
85
4.2.5 Analisa Sistem Usulan
86
4.2.5.1 Analisis Kebaikan Sistem yang Diusulkan
88
4.2.5.2 Analisa Perbandingan Sistem
90
4.3 Perancangan Sistem (Design)
91
4.3.1 Usecase Diagrams
91
4.3.1.1 Identifikasi Pelaku (Actor) Bisnis
91
4.3.2 Pembuatan Usecase Model Diagram
92
4.3.3 Narative Usecase Diagram
94
4.3.4 Activity Diagram
100
4.3.5 Class Diagram
103
4.3.5.1 Sfesifikasi Database
110 xiv
4.3.6 Statechart Diagram
115
4.3.7 Sequence Diagram
117
4.3.8 Design Interface
130
4.4 Implementasi Sistem (Implementation)
130
4.4.1 Kontruksi perangkat Lunak
130
4.4.2 Pengujian Perangkat Lunak
133
4.4.3 Implementasi Perangkat Lunak
135
4.4.3.1 Penyiapan Rencana Implementasi Jaringan
135
4.4.3.2 Spesifikasi Hardware dan Kebutuhan Software
136
BAB V PENUTUP 5.1 Kesimpulan
138
5.2 Saran
139
DAFTAR PUSTAKA
141
LAMPIRAN
xv
DAFTAR GAMBAR Gambar 2.1 Karakteristik Suatu Sistem
15
Gambar 2.2 Siklus Informasi
20
Gambar 2.3 Strategi Rapid Application Development
37
Gambar 4.1 Standard Operation Prosedure (SOP) yang sedang berjalan
72
Gambar 4.2 Standard Operation Prosedure (SOP) yang diusulkan
87
Gambar 4.3 UseCase Diagram
94
Gambar 4.4 Activity Diagram
101
Gambar 4.5 Class Diagram
108
Gambar 4.6 Statechart Diagram
116
Gambar 4.7 Sequence Diagram Usecase Login
117
Gambar 4.8 Sequence Diagram Usecase Membuat Pengaturan Penjadwalan 118 Gambar 4.9 Sequence Diagram Usecase Mengelola Berita
118
Gambar 4.10 Sequence Diagram Usecase Mengelola Daftar Mata Kuliah
119
Gambar 4.11 Sequence Diagram Usecase Mengelola Penawaran Mata Kuliah 119 Gambar 4.12 Sequence Diagram Usecase Mengelola Kesediaan Mengajar
120
Gambar 4.13 Sequence Diagram Usecase Melihat Penawaran Mata Kuliah
120
Gambar 4.14 Sequence Diagram Usecase Melihat Pemenuhan SKS Dosen
121
Gambar 4.15 Sequence Diagram Usecase Membuat Jadwal
121
Gambar 4.16 Sequence Diagram Usecase Melihat Jadwal
122
Gambar 4.17 Gambaran Implementasi Jaringan untuk Sistem Informasi Penjadwalan Kuliah
135
xvi
DAFTAR TABEL Tabel 2.1 Metode Pengembangan Sistem
34
Tabel 4.1 Analisa Sebab Akibat
77
Tabel 4.2 Analisa Perbandingan Sistem
90
Tabel 4.3 Identifikasi Pelaku (Actor)
91
Tabel 4.4 Identifikasi UseCase
92
Tabel 4.5 Narasi Usecase Diagram Login
95
Tabel 4.6 Narasi Usecase Membuat Pengaturan Penjadwalan
95
Tabel 4.7 Narasi Usecase Mengelola Berita
96
Tabel 4.8 Narasi Usecase Mengelola Daftar Mata Kuliah
96
Tabel 4.9 Narasi Usecase Mengelola Penawaran Mata Kuliah
97
Tabel 4.10 Narasi Usecase Mengelola Kesediaan Mengajar
97
Tabel 4.11 Narasi Usecase Melihat Penawaran Mata Kuliah
98
Tabel 4.12 Narasi Usecase Melihat Pemenuhan SKS Dosen
98
Tabel 4.13 Narasi Usecase Membuat Jadwal Perkuliahan
99
Tabel 4.14 Narasi Usecase Melihat Jadwal Perkuliahan
99
Tabel 4.15 Daftar Potencial Object
103
Tabel 4.16 Penyeleksian Object
104
Tabel 4.17 Daftar Object
106
Tabel 4.19 Struktur Tabel Dosen
110
Tabel 4.20 Struktur Tabel Matakuliah
111
Tabel 4.21 Struktur Tabel Peminatan
111
Tabel 4.22 Struktur Tabel Program Studi
111
Tabel 4.23 Struktur Tabel Ruang
112
Tabel 4.24 Struktur Tabel Jadwal Perkuliahan
112
Tabel 4.25 Struktur Tabel Kesediaan Mengajar
112
Tabel 4.26 Struktur Tabel Penawaran Matakuliah
113
Tabel 4.27 Struktur Tabel News
113
Tabel 4.28 Struktur Tabel Role
114
Tabel 4.29 Struktur Tabel Setting
114
Tabel 4.30 Struktur Tabel User
114
xvii
Tabel 4.31 Daftar Tools Pengembangan Perangkat Lunak Sistem
131
Tabel 4.32 Pengujian Perangkat Lunak
133
Tabel 4.32 Spesifikasi Hardware untuk Implementasi Perangkat Lunak Sistem Untuk Server
136
Tabel 4.33 Spesifikasi Hardware untuk Implementasi Perangkat Lunak Sistem Untuk Client
137
xviii
DAFTAR SIMBOL
SIMBOL USE-CASE DIAGRAM Simbol
Keterangan Actor Use case Association Extends
Uses (includes)
Inheritance System Boundary
(Sumber: Whitten, 2004)
xix
SIMBOL ACTIVITY DIAGRAM Simbol
Keterangan State Control Flow
Initial State
Final State
Transition
Decision
Swimlane
Partition1
(Sumber: Whitten, 2004)
xx
SIMBOL CLASS DIAGRAM Simbol
Keterangan Class 1. class name
1 2 3
2. attributes 3. behaviors Association
Agregation (composite) Agregation (shared) Generalization
(Sumber: Whitten, 2004)
xxi
SIMBOL SEQUENCE DIAGRAM Simbol
Keterangan Object Actor
Lifeline
Message
Message (return) Message (call)
Activation
(Sumber: Whitten, 2004)
xxii
SIMBOL STATECHART DIAGRAM Simbol
Keterangan State
Transition
Initial State
Final State
(Sumber: Whitten, 2004)
xxiii
BAB I PENDAHULUAN 1.1
Latar Belakang Masalah Penjadwalan merupakan kegiatan yang harus dimiliki oleh setiap orang
agar dapat membantu dalam melakukan aktivitasnya sehari-hari. Terlebih lagi sebuah instansi atau lembaga yang memiliki agenda-agenda penting yang harus diselesaikan secara teratur dan rapi. Begitu pentingnya penjadwalan ini agar kegiatan dapat berjalan sesuai dengan yang telah direncanakan. International Programs adalah bagian dari Fakultas Sains dan Teknologi UIN Syarif Hidayatullah Jakarta yang dalam melaksanakan agendanya membutuhkan penjadwalan terutama dalam penjadwalan kuliah, dan mengingat banyaknya dosen-dosen di fakultas tersebut yang masih berstatus honorer, dimana mereka juga memiliki kegiatan di luar Fakultas Sains dan Teknologi. Berhubung sangat pentingnya penjadwalan ini, proses pembuatan jadwal ini merupakan proses yang menyulitkan, karena proses ini membutuhkan ketelitian dan waktu yang cukup banyak agar tidak terjadi adanya tumpang tindih antara kegiatan yang satu dengan kegiatan yang lain. Sedangkan di bagian Koordinator Teknis International Programs (Kortek IP), pengaksesan ini belum memiliki suatu sistem informasi penjadwalan yang baik. Semua hal tersebut sering mengakibatkan hasil yang kurang teliti dan memakan waktu yang lama. Masalah yang utama yang timbul dikarenakan adanya faktor yang tidak sinkronnya antara jam mata kuliah, lokal kelas sampai dengan jadwal Dosen, juga proses penjadwalan yang ada di
1
2
International Programs dapat dikatakan baik, karena sudah menggunakan komputerisasi. Namun masih belum teraplikatif. Dalam kajian ini penulis memberikan suatu solusi yang merupakan tema penulisan skripsi yang berjudul : “Sistem Informasi Penjadwalan Mata Kuliah pada International Programs Fakultas Sains dan Teknologi UIN Syarif Hidayatullah Jakarta Berbasis Website”. Sehingga ini akan memudahkan dalam proses penjadwalan kuliah lebih efektif dan efisien karena setiap mata kuliah dan dosen masuk pada database. 1.2
Perumusan Masalah Dalam penulisan skripsi ini penulis merumuskan masalah-masalah yang ada yaitu : 1. Bagaimana sistem penjadwalan ini dapat membantu proses penentuan lokal kelas, jam mengajar maupun jadwal dosen? 2. Bagaimana memberikan report penjadwalan yang teraplikatif? 3. Adanya kendala dalam mengetahui jumlah SKS yang dipenuhi oleh dosen berdasarkan status kerjanya. 4. Adanya kendala di bagian Kortek IP dalam memproses jadwal kuliah antara program studi SI dan TI selama ini, dikarenakan kesamaan dosen pengajar dan penggunaan ruangan dalam Kegiatan Belajar Mengajar (KBM) serta tidak adanya suatu sistem yang dapat mengorganisir kedua program studi tersebut dalam pembuatan jadwal.
3
1.3
Batasan Masalah Karena kompleknya masalah yang ada di lapangan, maka penulis perlu
membatasi masalah dalam penelitian ini. Adapun batasan masalah dalam penelitian ini meliputi : a.
Variabel yang digunakan adalah program studi, dosen, mata kuliah, hari, jam, semester dan lokal
b.
Bahasa pemrograman yang digunakan adalah PHP dan basis data yang digunakan adalah MySQL.
c.
Pembuatan database untuk digunakan pada aplikasi Sistem Informasi Penjadwalan Kuliah Program Studi SI dan TI International Programs.
d.
Pembuatan interface aplikasi bagi Dosen Program Studi SI dan TI International Programs guna memasukkan kesediaan mengajar ke dalam sistem sebagai bahan pembuatan jadwal perkuliahan.
Sistem ini akan dijalankan pada web browser dengan server Apache, development tool menggunakan PHP, dan database menggunakan MySql. Pada pembuatan aplikasi sistem informasi penjadwalan kuliah ini, tidak dibahas mengenai jaringan dan keamanan jaringan dalam pengimplementasian aplikasi ini ke PC ataupun notebook pengguna. 1.4
Tujuan Penelitian Tujuan dari diadakannya penelitian, perancangan, dan pembuatan Sistem
penjadwalan mata kuliah dan dosen dalam menunjang penulisan skripsi ini adalah untuk :
4
a.
Memenuhi salah satu syarat kelulusan strata satu (S1) Program Studi Sistem Informasi Fakultas Sains dan Teknologi UIN Syarif Hidayatullah Jakarta.
b.
Menerapkan ilmu-ilmu yang diperoleh selama kuliah.
c.
Agar dapat membantu Kortek IP membuat Sistem penjadwalan penentuan lokal kelas, jam maupun jadwal dosen.
d.
Agar dapat memberikan report penjadwalan yang teraplikatif.
1.5 Manfaat Penelitian Manfaat yang akan didapat dari penulisan skripsi dalam pembuatan dan pengaplikasian sistem penjadwalan mata kuliah dan dosen ini adalah sebagai berikut : a.
Bagi Kortek IP 1) Dapat membantu memecahkan kesulitan yang dihadapi dalam pembuatan jadwal kuliah. 2) Dapat memberikan report penjadwalan mata kuliah dan dosen yang teraplikatif 3) Pembuatan jadwal kuliah yang tepat waktu. 4) Penggunaan lokal yang optimal.
b.
Bagi Dosen Memudahkan dosen khusunya dosen honorer dalam mengoptimalkan waktu dan agendanya.
5
c.
Bagi Mahasiswa Dengan
penjadwalan
tersebut
mahasiswa
tidak
lagi
mempermasalahkan tidak adanya lokal kelas yang terisi dengan mahasiswa lain. d.
Bagi Penulis 1) Menerapkan ilmu-ilmu yang diperoleh selama kuliah ke dunia nyata. 2) Membandingkan teori-teori yang ada dengan masalah sebenarnya.
1.6
Metodologi Penelitian Adapun metodologi yang digunakan dalam penelitian ini meliputi dua
bagian pokok, yaitu: a. Teknik Pengumpulan Data Metode-metode yang digunakan dalam pengumpulan data antara lain : 1) Studi Pustaka Pengumpulan data dan informasi dengan cara membaca buku-buku dan website referensi yang dapat dijadikan acuan pembahasan masalah dalam penelitian ini. Tujuan dari penelitian kepustakaan ini untuk melatih penulis membaca secara kritis segala bahan yang dijumpai. 2) Studi Lapangan Terdiri dari : a) Metode Observasi
6
Observasi merupakan pengamatan langsung kepada suatu objek yang akan diteliti dengan tujuan mendapatkan gambaran yang tepat mengenai objek penelitian dan mengecek kebenaran data serta informasi yang telah dikumpulkan. b) Metode Wawancara Wawancara merupakan salah satu teknik pengumpulan data dengan mengajukan pertanyaan langsung kepada informan. Pertanyaan-pertanyaan yang diajukan biasanya dipersiapkan terlebih dahulu yang diarahkan kepada informasi-informasi untuk topik yang digarap. 3) Studi Literatur Sejenis Merupakan suatu tujuan untuk memdapatkan sebuah topik tentang penelitian yang akan dilaksanakan dengan memahami suatu perbedaan-perbedaan dengan penelitian yang lain. b. Metode Pengembangan Sistem Metodologi pengembangan sistem yang akan digunakan dalam mengembangkan sistem ini yaitu Rapid Application Development (RAD). RAD merupakan sebuah strategi pengembangan sistem yang menekankan kecepatan pengembangan melalui keterlibatan pengguna yang ekstensif dalam konstruksi, cepat, berulang dan bertambah serangkaian prototipe bekerja sebuah sistem yang pada akhirnya berkembang ke dalam sistem final. RAD dibagi dalam beberapa tahapan, diantaranya : Scope Definition,
7
Analisis, Design, implementation. (Jeffrey L. Whitten, Lonnie D. Bentley and Kevin C. Dittman, 2004). Tahapan Scope Definition akan menggambarkan pandangan umum yang diungkapkan dengan jelas dan singkat tentang masalah-masalah yang ada di dalam instansi atau lembaga, serta menentukan batasan-batasan dalam proyek sistem ini. Tahapan Analisis, akan dilakukan analisa lingkungan instansi atau lembaga serta analisa berdasarkan dari hasil wawancara sehingga dapat memahami alur dari sistem
yang sedang berjalan pada International
Programs Fakultas Sains dan Teknologi UIN Syarif Hidayatullah Jakarta. Setelah itu dilakukan analisa dengan pendekatan Object Oriented Analisis (OOA). Serta memahami permasalahan-permasalahan yang ada sampai dengan analisa kebutuhan sistem. Tahapan Design (perancangan), akan mengidentifikasi solusi yang didapatkan dari hasil analisa, kemudian membuat desain proses bisnis dan desain pemrograman untuk data-data yang telah didapatkan dan dimodelkan. Tools yang akan digunakan dalam pemodelan sistem ini adalah UML (Unified Modeling Language). Setelah melakukan analisis sistem dan perancangan sistem secara rinci, maka selanjutnya sistem siap di implementasikan dan di uji. Pada tahap ini terdapat beberapa aktivitas yang dilakukan oleh penulis. Aktivitasaktivitas yang dimaksud berupa : pemrograman dan pengujian.
8
Dalam aktifitas Pemrograman, penulis menggunakan software pendukung seperti XAMPP versi 1.7.1 yang mencakup : Apache versi 2.2.11 untuk web server, PHP versi 5.2.9 untuk bahasa pemrograman dan MySQL versi 5.0.51a untuk database-nya. Selain itu, penulis juga menggunakan Editplus 2 dan Macromedia Dreamweaver 8 sebagai software editor dan Adobe Photoshop CS2 untuk mengolah gambar. Aktifitas Pemrograman selesai maka sistem akan dilakukan pengujian Setiap program menjalani pengujian secara sendiri untuk memastikan bahwa program yang telah kita buat bisa bebas dari kesalahan (bug), walaupun tidak menutup kemungkinan masih terjadi sedikit bug atau tidak 100%
bebas
dari
bug,
namun
pengujian
ini
setidaknya
bisa
meminimalisasi kesalahan yang akan terjadi. Pada tahap ini, penulis menggunakan metode pengujian unit dengan pendekatan black-box testing. 1.7.
Sistematika Penulisan Penyusunan penulisan skripsi ini dilaksanakan dengan beberapa metode
dan format susunan yang terbagi ke dalam beberapa bab, yang terdiri dari :
BAB I : PENDAHULUAN Dalam bab ini, penulis mengemukakan tentang latar belakang penelitian, tujuan penelitian, perumusan masalah, batasan masalah, manfaat penelitian, metodologi penelitian, sistematika penulisan.
9
BAB II : LANDASAN TEORI Bab ini akan menguraikan teori-teori yang terkait dengan konsep dalam penulisan penelitian ini. Seperti konsep dasar sistem, konsep dasar data dan informasi, konsep dasar sistem informasi, konsep penjadwalan, metodologi penelitian, metode pengumpulan data dan metode pengembangan sistem yang menggunakan Rapid Application Development (RAD), MySQL, dan PHP. BAB III : METODOLOGI PENELITIAN Bab ini akan menguraikan tentang metodologi penelitian yang dilakukan
penulis
pada
Pengembangan
Sistem
Informasi
Penjadwalan Mata Kuliah pada International Programs Fakultas Sains dan Teknologi UIN Syarif Hidayatullah Jakarta Berbasis Website.
Langkah-langkah
dalam
pengumpulan
data
dari
merumuskan masalah sampai laporan analisis dan langkahlangkah pengembangan sistem yang ada dalam Rapid Application Development (RAD). BAB IV : ANALISA DAN PERANCANGAN Bab ini akan membahas tentang analisa dan perancangan Sistem Informasi Penjadwalan Mata Kuliah pada International Programs Fakultas Sains dan Teknologi UIN Syarif Hidayatullah Jakarta Berbasis Website dan dimodelkan dalam UML (Unified Model Language).
10
BAB V : PENUTUP Bab ini merupakan bab terakhir dari penulisan penelitian yang terdiri dari kesimpulan dan saran dari apa yang telah diuraikan pada bab-bab sebelumnya. 1. Daftar Pustaka 2. Lampiran-Lampiran
BAB II LANDASAN TEORI 2.1 Konsep Dasar Sistem 2.1.1 Definisi Sistem Dalam mendefinisikan sistem terdapat dua kelompok pendekatan sistem yaitu : 1. Pendekatan sistem yang lebih menekankan pada prosedur mendefinisikan sistem sebagai berikut : Suatu sistem adalah suatu jaringan kerja dari prosedurprosedur yang saling berhubungan, berkumpul bersama-sama untuk melakukan suatu kegiatan atau untuk menyelesaikan suatu sasaran tertentu ( Jogiyanto, 2005 ) 2. Pendekatan sistem yang lebih menekankan pada elemen atau komponennya mendefinisikan sistem sebagai berikut : Jerry F. Gerald (1981) dalam buku Jogiyanto Hartono (2005) mendefinisikan sistem yaitu suatu jaringan kerja dari prosedur-prosedur bersama-sama
yang
untuk
saling
berhubungan,
melakukan
suatu
berkumpul
kegiatan
atau
menyelesaikan suatu sasaran tertentu. Sistem sebagai sekumpulan elemen yang saling terkait atau terpadu yang dimaksudkan untuk mencapai suatu tujuan (Kadir, 2003).
11
12
Suatu sistem mempunyai karakteristik atau sifat-sifat tertentu yaitu : (Jogiyanto, 2005) 1. Mempunyai komponen-komponen sistem (Components) Suatu sistem terdiri dari komponen yang saling berinteraksi, artinya saling bekerja sama membentuk satu kesatuan. Komponen-komponen dari suatu sistem biasanya dikenal dengan subsistem. Subsistem ini mempunyai sifat-sifat dari sistem itu sendiri dalam menjalankan suatu fungsi tertentu dan mempengaruhi proses sistem secara keseluruhan. Suatu sistem juga mempunyai sistem yang lebih besar yang dikenal dengan Suprasistem. Contoh : Jika suatu perusahaan dipandang sebagai suatu sistem, maka
industri
akan
dipandang
sebagai
Suprasistem. 2. Mempunyai batasan sistem (Boundary) Batasan sistem merupakan daerah yang membatasi antara sistem yang satu dengan sistem lainnya atau dengan
lingkungan
sistem
ini
maka
luarnya. sistem
Dengan dapat
adanya
batas
membentuk
suatu
kesatuan, karena dengan batas sistem ini fungsi dan tugas dari subsistem yang satu dengan lainnya berbeda tetapi
13
tetap saling berinteraksi. Dengan kata lain batas sistem ini
merupakan
ruang
lingkup
atau batasan dari
sistem/subsistem itu sendiri. Contoh : Sistem Keuangan - Sistem Akuntansi - Kasir - Administrasi Keuangan - Personalia 3. Mempunyai lingkungan luar sistem (Environments) Segala
sesuatu
mempengaruhi
diluar
operasi
dari
dari
batas
suatu
sistem
sistem
yg
disebut
Lingkungan luar sistem (environment). Lingkungan luar sistem
ini
dapat
bersifat
menguntungkan
atau
merugikan. Lingkungan harus
luar
dipelihara
yang
bersifat
dan dijaga
pengaruhnya, sedangkan
agar
lingkungan
menguntungkan tidak yang
hilang bersifat
merugikan harus dimusnahkan dan dikendalikan agar tidak mengganggu operasi dari sistem. 4. Mempunyai penghubung sistem (Interface) Penghubung Sistem
merupakan
suatu
media
penghubung antara satu subsistem dengan subsistem lainnya
untuk
membentuk
satu
kesatuan, sehingga
14
sumber-sumber daya mengalir dari subsistem yang satu ke subsistem penghubung
lainnya. Dengan ini
output
dari
kata suatu
lain
melalui
subsistem
akan
menjadi input dari subsistem lainnya. 5. Mempunyai masukan sistem (Input) Energi yang dimasukkan ke dalam suatu sistem disebut Input. Masukan ini dapat berupa : - Masukan Perawatan (Maintenance Input ) Yaitu energi yang dimasukkan supaya sistem itu dapat beroperasi. Contoh : Program untuk mengoperasikan komputer. - Masukan Sinyal (Signal Input) Yaitu energi yang diproses untuk diperolehnya suatu keluaran. Contoh : Data 6. Mempunyai pengolahan sistem (Process) Suatu sistem mempunyai bagian pengolah yang akan mengubah input menjadi output. Contoh : - CPU pada komputer - Bagian produksi yang mengubah bahan baku menjadi barang jadi. - Bagian
akuntansi
yang
mengolah
data
transaksi menjadi laporan-laporan Keuangan.
15
7. Mempunyai keluaran sistem (Output) Keluaran adalah hasil dari energi yang diolah. Keluaran ini dapat diklasifikasikan sebagai : - Keluaran yang berguna Contoh :
Informasi
yang
dikeluarkan
oleh
komputer - Keluaran
yang
tidak
berguna
yang
dikenal
sebagai sisa pembuangan Contoh : panas yang dikeluarkan oleh komputer. 8. Mempunyai sasaran sistem (Objectives) dan tujuan sistem (Goal) Setiap sistem pasti mempunyai tujuan
ataupun
sasaran yang mempengaruhi input yang dibutuhkan dan output yang akan dihasilkan. Dengan kata lain, suatu sistem akan dikatakan berhasil kalau pengoperasian sistem itu mengenai sasaran atau tujuannya. Karakteristik sistem ini dapat dilihat pada Gambar 2.1
Gambar 2.1 Karakteristik Suatu Sistem ( Sumber Jogiyanto, 2005 )
16
Suatu sistem dapat diklasifikasikan sebagai : (Jogiyanto, 2005) 1. Sistem Abstrak (Abstract system) Sistem ini merupakan sistem yang tidak tampak secara fisik, karena hanya berupa pemikiran atau ide-ide. Contoh : Sistem Teologi yang merupakan suatu sistem yang menggambarkan hubungan Tuhan dengan manusia. 2. Sistem Fisik (Physical system) Sistem fisik merupakan sistem yang tampak secara fisik sehingga setiap mahluk dapat melihatnya. Contoh : - Sistem Komputer -
Sistem Akuntansi
-
Sistem Produksi
3. Sistem Alamiah (Natural system) Sistem alamiah ini adalah sistem yang terjadi dari proses-proses alam dalam arti tidak dibuat oleh manusia. Contoh : Sistem Geologi seperti sungai, pegunungan Sistem Solar seperti galaxy, tata surya 4. Sistem Buatan Manusia (Human Made System) Sistem ini merupakan sistem yang dirancang dan didisain oleh manusia. Contoh : Sistem Informasi-manusia-komputer
17
Man-machine system/human-machine system
Interaksi
antara manusia dan mesin 5. Sistem Deterministik (Deterministic System) Sistem yang beroperasi dengan tingkah laku yang dapat diramalkan disebut sistem deterministik. Interaksi antar tiaptiap bagian dapat dideteksi, sehingga outputnya juga dapat diramalkan. Contoh : Sistem Komputer 6. Sistem Tak Tentu (Probabilistic System) Sistem ini adalah sistem dimana kondisi masa depannya tak dapat diramalkan karena mengandung probabilitas. Contoh : Sistem Manusia 7. Sistem Tertutup (Closed System) Sistem tertutup adalah sistem yang tidak berhubungan dan tidak dipengaruhi oleh lingkungan luarnya. Sebenarnya didunia ini tidak ada sistem yang benar-benar tertutup. Yang ada hanyalah sistem yang secara relatif tertutup (relatively closed system) 8. Sistem Terbuka (Open System) Sistem ini kebalikan dari sistem tertutup, karena sistem terbuka adalah sistem yang berhubungan dan dipengaruhi oleh lingkungannya. Oleh sebab itu sistem ini harus mempunyai suatu sistem pengendalian (control system) yang
18
baik, agar yang masuk hanya pengaruh-pengaruh yang baik saja. Contoh : Sistem Kebudayaan Indonesia 2.2 Konsep Dasar Data dan Informasi 2.2.1
Definisi Data dan Informasi Menurut Teguh Wahyono data adalah bahan baku informasi,
didefinisikan sebagai kelompok teratur simbol-simbol yang mewakili kuantitas, tindakan, benda dan sebagainya. Data terbentuk dari karakter dapat berupa alfabet, angka, maupun simbol khusus. Sedangkan informasi merupakan hasil dari pengolahan data menjadi bentuk yang lebih berguna bagi yang menerimanya yang menggambarkan suatu kejadian-kejadian nyata dan dapat digunakan sebagai alat bantu untuk pengambilan suatu keputusan. (Teguh Wahyono, 2004) Informasi adalah data yang diolah menjadi bentuk yang lebih berguna dan lebih berarti bagi yang menerimanya (Jogiyanto, 2005) Sumber informasi adalah data. Data adalah kenyataan yang menggambarkan kejadian-kejadian dan kesatuan nyata. Kejadian-kejadian (Event) adalah sesuatu yang terjadi pada saat tertentu. Menurut Davis (Kadir, 2003) informasi adalah data yang telah diolah menjadi sebuah bentuk yang berarti bagi penerimanya dan bermanfaat dalam pengambilan keputusan saat ini atau saat mendatang. Definisi tersebut merupakan definisi informasi dalam pemakaian sistem informasi.
19
Dus, Wersig, dan Neveling (Pendit, 2003) melihat informasi sebagai struktur, proses, pesan, pengetahuan, makna dan efek. Buckland (Pendit, 2003) mambagi informasi menjadi sesuatu (a thing) dalam bentuk pengetahuan yang terekam, selain pengetahuan yang secara pribadi dipegang oleh seseorang dan sebagai proses, yaitu ketika seseorang menjadi terinformasi (being informed) dan mengalami perubahan dalam pengetahuannya. Informasi adalah hasil pengolahan data sehingga menjadi bentuk yang penting bagi penerimanya dan mempunyai kegunaan sebagian besar dalam pengambilan keputusan. (Sutanta, 2004) Ada tiga pilar yang menentukan kualitas dari suatu informasi, yaitu : (Jogiyanto, 2005) 1. Keakuratannya (Accurate) Yaitu Informasi harus bebas dari suatu kesalahan-kesalahan 2. Ketepatan pada waktunya (Timeline) Yaitu Informasi yang datang pada penerima tidak boleh terlambat 3. Relevansinya (Relevant) Yaitu
berarti
Informasi
tersebut
mempunyai
manfaat
untuk
pemakainya. Karakteristik dari Informasi yang baik ada lima, yaitu : (David Kroenke, 2002)
20
1. Partinent yaitu informasi yang disediakan harus berhubungan dengan bisnis yang sedang ditangani dan apa-apa yang penting dari orang yang membutuhkan informasi tersebut. 2. Timely yaitu tepat pada waktunya. 3. Accurate yaitu bebas dari kesalahan dan tidak bisa atau menyesatkan. 4. Reduce Uncertainty yaitu meminimalisir adanya ketidakpastian. 5. Element of surprised yaitu Informasi berisikan sesuatu hal yang orangorang tidah tahu atau belum mengetahuinya. 2.2.2 Siklus Informasi Pengolahan data menjadi suatu informasi pada Gambar 2.2 DATA PROSES INFORMASI KEPUTUSAN TINDAKAN HASIL TINDAKAN
Gambar 2.2 Siklus Informasi (Sumber Teguh Wahyono, 2004) 2.2.3 Kualitas Informasi Secara sederhana dapat dikatakan bahwa data diolah menjadi suatu informasi. Dan pada tahapan selanjutnya sebuah informasi akan manjadi data untuk terciptanya informasi lain. Dalam suatu sistem, informasi yang beredar di dalamnya harus merupakan informasi yang berkualitas agar sistem tersebut dapat berjalan
21
dengan baik. Kualitas dari suatu informasi tergantung dari tiga hal (Hartono, 2005), yaitu: 1. Akurat, berarti informasi harus bebas dari kesalahan-kesalahan yang tidak bias atau menyesatkan. Ketidak akuratan sebuah informasi dapat terjadi karena sumber informasi mengalami gangguan atau kesengajaan sehingga merusak data-data yang asli. 2. Tepat pada waktunya, berarti informasi yang datang pada penerima tidak boleh terlambat. 3. Relevan, berarti informasi tersebut mempunyai manfaat untuk pemakainya. Relevansi informasi untuk tiap-tiap orang satu dengan yang lainnya berbeda. 2.3 Konsep Dasar Sistem Informasi 2.3.1 Definisi Sistem Informasi Definisi atau Pengertian Sistem Informasi Secara umum merupakan kegiatan atau aktifitas yang melibatkan serangkaian proses, berisi informasi-informasi yang digunakan untuk mencapai tujuan. Pengertian Sistem Informasi menurut Robert dalam Jogiyanto (2000) adalah informasi yang diorganisasikan untuk mencapai tujuan dalam sebuah organisasi. Sistem informasi adalah suatu sistem didalam suatu organisasi yang mempertemukan kebutuhan pengolahan transaksi harian, mendukung operasi, bersifat menejerial dan kegiatan strategi dalam suatu organisasi
22
dan menyediakan pihak luar tertentu laporan-laporan yang diperlukan. (Jogiyanto, 1999) Ada beberapa sifat informasi yang harus dipahami, yaitu (Jogiyanto, 2005): 1. Mudah dicapai merupakan sifat yang menunjukkan mudahnya, cepatnya informasi dapat diperoleh, kecepatan memperoleh dapat diukur misalnya satu menit versus 24 jam 2. Mudah dan lengkap merupakan sifat yang menunjukkan lengkapnya informasi. 3. ketepatan merupakan sifat yang berhubungan dengan waktu yang dilalui yang lebih pendek dari pada siklus untuk mendapatkan informasi. Sistem informasi sebagai berikut : “Sebuah rangkaiasn prosedur formal dimana data dikumpulkan, diproses menjadi informasi, dan didistribusikan kepada pemakai”. (Hall, James A, 2001) Sistem informasi terdiri dari komponen-komponen yang saling berinteraksi satu dengan yang lainnya membentuk satu kesatuan untuk mencapai sasarannya. Adapun komponen-komponen sistem informasi meliputi ( Jogiyanto, 2005 ) : a.
Blok Masukan ( input block)
23
Masukan mewakili data yang masuk ke dalam sistem informasi. Masukan disini termasuk metode-metode dan media untuk menangkap data yang akan dimasukan, yang dapat berupa dokumendokumen dasar. b.
Blok Model (model block) Blok ini terdiri dari kombinasi prosedur, logika dari model
matematika yang akan memanipulasi data input dan data yang tersimpan di basis data dengan cara yang sudah ditentukan untuk menghasilkan keluaran yang diinginkan. c.
Blok Keluaran (output block) Produk dari Sistem Informasi adalah keluaran yang merupakan
informasi yang berkualitas dan dokumentasi yang berguna untuk semua tingkatan manajemen dan semua pemakai sistem. d.
Blok Teknologi (technology block) Teknologi merupakan kotak alat dalam suatu informasi.
Teknologi digunakan untuk menerima input, menjalankan model, menyimpan dan mengakses data, menghasilkan dan mengirimkan keluaran
serta
membantu
pengendalian
dari
sistem
secara
keseluruhan. Teknologi terdiri dari 3 bagian utama, yaitu teknisi, perangkat lunak dan perangkat keras. e.
Blok Basis Data (database block) Basis data merupakan kumpulan dari data yang saling
berhubungan satu dengan yang lainnya. Data perlu disimpan di
24
dalam basis data dan diorganisasikan supaya informasi yang dihasilkan berkualitas. f.
Blok Kendali (controls block) Pengendalian
perlu
dirancang
dan
diterapkan
untuk
meyakinkan bahwa hal-hal yang dapat merusak sistem dapat dicegah atau kesalahan yang telah terjadi dapat diatasi.
2.4 Konsep Penjadwalan 2.4.1
Definisi Penjadwalan Penjadwalan sebagai kumpulan kebijaksanaan dan mekanisme di
setiap operasi yang berkaitan dengan urutan kerja yang dilakukan sistem komputer. Penjadwalan memutuskan proses yang harus berjalan dan kapan dan selama berapa lama proses itu berjalan. (Bambang Hariyanto, 1997) 2.4.2 Aktifitas Penjadwalan Aktifitas penjadwalan pada dasarnya dapat dibedakan menjadi lima tingkatan, yaitu (Wahyuni, 2009): a. Long-range planning (waktu 2 sampai 5 tahun). b. Middle-range planning (waktu 1 sampai 2 tahun). c. Short-range planning (waktu 3 sampai 6 bulan). d. Penjadwalan (waktu 2 sampai 6 minggu). e. Penjadwalan reaktif atau control (waktu 1 sampai 3 hari).
25
2.4.3 Performasi Penjadwalan Terdapat tiga tujuan pembuatan keputusan yang umum dalam penjadwalan dan ketiganya menunjukkan ukuran dasar performansi jadwal, yaitu (Wahyuni, 2009): a. Pemanfaatan sumber daya yang efisien : minimum maksimum saat selesai (makespan). b. Respon yang cepat terhadap permintaan konsumen : minimum rata-rata saat selesai (completion time), minimum rata-rata waktu tinggal (flow time), atau minimum rata-rata waktu tunggu (waiting time). c. Sesuai dengan batas waktu yang ditentukan : minimum rata-rata keterlambatan (tardiness), minimum maksimum keterlambatan, dan minimum jumlah job yang terlambat (the number of tardy jobs). Definisi ukuran-ukuran performansi tersebut adalah (Wahyuni, 2009): a. Saat selesai (completion time) : menunjukkan saat selesai pemrosesan. b. Waktu tinggal (flow time) : menunjukkan lamanya job berada dalam sistem. c. Lateness : menunjukkan perbedaan antara saat selesai dengan due date (mengukur kesesuaian antara jadwal dengan due date yang diberikan) . d. Tardiness atau positive lateness : menunjukkan keterlambatan yang terjadi. e. Earliness atau negative lateness : menunjukkan kondisi job selesai lebih awal dari due date
26
2.5 Metodologi Penelitian
2.5.1 Metode Pengumpulan Data Pengumpulan data atau penemuan fakta adalah sebuah teknik yang dikembangkan pada semua siklus pengembangan, tapi sangat penting dalam fase persyaratan atau kebutuhan. (Whitten, 2004). Berikut ini akan dijabarkan beberapa metode pengumpulan data yang digunakan dalam pengembangan sistem ini. 2.5.1.1
Studi Pustaka Studi pustaka adalah segala usaha yang dilakukan oleh
peneliti utnuk menghimpun informasi yang relevan dengan topik atau masalah yang akan atau sedang diteliti. Informasi itu dapat diperoleh dari buku-buku ilmiah, laporan penelitian, karangan-karangan ilmiah, tesis dan disertasi, peraturan-peraturan, ketetapan-ketetapan, buku tahunan, ensiklopedia, dan sumber-sumber tertulis baik tercetak maupun elektronik lain. (purwono, 2009). Cara penelitian yang dilakukan dengan membaca dan mempelajari buku-buku pustaka, dan website tertentu yang dijadikan pendukung dalam penelitian yang dilakukan. (Jogiyanto, 2005). Definisi studi pustaka adalah penelitian yang bertujuan untuk
membuat
scientific
law.
Pembuat
model
atau
ingin
membandingkan apa yang seharusnya terjadi dengan kejadian yang sbenarnya maka digunakanlah teori mengacu pada teori-teori yang berlaku dan dapat dicari pada buku-buku teks ataupun hasil dari
27
penelitian orang lain baik yang sudah dipublikasikan maupun belum merupakan suatu factor dari keilmiahan penelitian yang dilakukan. (Umar, 2007). 2.5.1.2
Studi Lapangan 2.5.1.2.1 Observasi 2.5.1.2.1.1
Definisi Observasi Observasi sebagai pengamatan langsung
suatu kegiatan yang sedang dilakukan. Observasi atau pengamatan (observation) merupakan salah satu teknik pengumpulan fakta/data (fact finding technique) yang cukup efektif untuk mempelajari suatu sistem. (Jogiyanto Hartono, 2005) 2.5.1.2.1.2
Kebaikan Observasi Observasi mempunyai beberapa kebaikan
dibandingkan dengan teknik pengumpulan data yang lainnya, yaitu (Hartono, 2005): a.
Data
yang
dikumpulkan
melalui
observasi
cenderung mempunyai keandalan yang tinggi. b.
Analisa sistem melalui observasi dapat melihat langsung apa yang sedang dikerjakan.
c.
Dengan
observasi,
analisa
sistem
dapat
menggambarkan lingkungan fisik dari kegiatan-
28
kegiatan seperti misalnya tata letak fisik peralatan, penerangan, gangguan suara dan lain sebagainya. d.
Dengan observasi, analisa sistem dapat mengukur tingkat suatu pekerjaan (work measurement).
2.5.1.2.1.3
Petunjuk Melakukan Observasi (Hartono, 2005)
1.
Hal-hal yang Perlu Dilakukan a. Merencanakan terlebih dahulu observasi yang akan dilakukan, meliputi: a)
apa yang akan diobservasi;
b)
dimana letak observasi;
c)
kapan observasi akan dilakukan;
d)
siapa yang akan melaksanakan observasi ini;
e)
siapa yang akan diobservasi;
f)
bagaimana melaksanakan observasi;
b. Mintalah ijin terlebih dahulu dari manajer atau pejabat setempat. c. Bertindaklah dengan rendah hati (low profile). d. Lengkapilah
catatan
selama
observasi
berlangsung. e. Kaji ulang hasil observasi dengan individuindividu yang terlibat.
29
2.
Hal-hal yang Tidak Perlu Dilakukan a.
Mengganggu kerja individu yang diobservasi
b.
Tidak menekankan pekerjaan yang tidak penting jangan membuat asumsi sendiri
2.5.1.2.2 Wawancara 2.5.1.2.2.1
Definisi Wawancara Wawancara sebagai teknik pengumpulan
data
yang
memungkinkan
analisa
sistem
sebagai
pewawancara (interviewer) untuk mengumpulkan data secara
tatap
muka
langsung
dengan
orang
yang
diwawancarai (interviewee). Wawancara (interview) telah diakui sebagai teknik pengumpulan data/fakta (fact finding technique) yang penting dan banyak dilakukan dalam pengembangan sistem. (Jogiyanto Hartono, 2005) 2.5.1.2.2.2
Kebaikan Wawancara Kebaikan dari wawancara adalah sebagai
berikut (Jogiyanto Hartono, 2005): a.
Wawancara pewawancara
memberikan untuk
kesempatan
memotivasi
orang
kepada yang
diwawancarai untuk menjawab dengan bebas dan terbuka diajukan.
terhadap
pertanyaan-pertanyaan
yang
30
b.
Memungkinkan
pewawancara
untuk
mengembangkan
pertanyaan-pertanyaan
sesuai
dengan situasi yang berkembang. c.
Pewawancara dapat menilai kebenaran jawaban yang diberikan dari gerak-gerik dan raut wajah orang yang diwawancarai.
d.
Pewawancara dapat menanyakan kegiatan-kegiatan khusus yang tidak selalu terjadi.
2.5.1.2.2.3
Petunjuk Wawancara Berikut ini adalah hal-hal yang perlu
diperhatikan dalam melakukan wawancara (Hartono, 2005) : 1.
Pertanyaan untuk wawancara : a.
Gunakan bahasa yang baik, sopan dan jelas.
b.
Jangan memasukan pendapat pribadi sebagai bagian dari pertanyaan.
c.
Hindari pertanyaan yang panjang dan berbelitbelit.
d.
Hindari pertanyaan yang menakutkan atau membuat khawatir orang yang diwawancarai.
e.
Hindari pertanyaan yang sifatnya mengkritik.
31
2.
Mempersiapkan wawancara : a.
Aturlah
pertemuan
dengan
orang
yang
diwawancarai terlebih dahulu. b.
Utarakan maksud dari wawancara.
c.
Atur waktu untuk wawancara yang paling tepat supaya tidak mengganggu kerja dari orang yang diwawancarai.
3.
d.
Buat jadwal wawancara terlebih dahulu.
e.
Buatlah panduan wawancara (interview guide).
Melakukan wawancara : a.
Mengenalkan diri terlebih dahulu.
b.
Menjelaskan
tujuan
wawancara
dan
hubungannya dengan pembuatan aplikasi. c.
Menjelaskan peranan yang akan diberikan oleh orang yang akan diwawancarai.
d.
Hilangkan kesan menginterogasi.
e.
Pewawancara harus mendengarkan dengan teliti dan jangan terlalu banyak berbicara daripada mendengarkannya.
f.
Jagalah agar wawancara tetap santai, tetapi terarah dan menyenangkan.
g.
Jangan memotong omongan orang sebelum selesai.
32
h.
Mintalah
ide-ide
tambahan
yang
belum
diungkapkan. i.
Jangan membuat asumsi jawaban yang tidak mendasar.
j.
Jangan menggunakan kata-kata yang sulit dimengerti.
k.
Di akhir wawancara, bacakanlah rangkuman dari hasil wawancara.
l.
Ucapkanlah terima kasih jika wawancara telah selesai.
2.5.1.3
Studi Literatur Mempelajari buku hasil penelitian sejenis sebelumnya yang
pernah dilakukan orang lain. tujuannya ialah untuk mendapatkan landasan teori mengenai masalah yang akan diteliti. Teori ini merupakan pijakan bagi peneliti untuk memahami persoalan yang diteliti dengan benar dan sesuai dengan kerangka berfikir ilmiah. (Jomathan, 2006). 2.6 Metode Pengembangan Sistem Dalam jurnal Wahid metode pengembangan sistem informasi atau yang lebih dikenal dengan information systems development methods (ISDM) yang dikutip dari Avison dan Fitzgerald (2003) didefinisikan sebagai ”Suatu koleksi prosedur, teknik, alat, dan bantuan dokumentasi yang akan membantu pengembang sistem didalam usaha mereka untuk
33
menerapkan suatu sistem informasi baru. Suatu metodologi akan terdiri dari tahapan-tahapan, diri mereka termasuk dari subfase, yang akan memandu pengembang sistem di dalam memilih teknik yang boleh jadi sesuai pada setiap langkah proyek dan juga membantu merencanakan, mengatur, mengendalikan dan mengevaluasi proyek sistem informasi”. Pada literatur sistem informasi ada yang mendukung penggunaan ISDM dan ada pula yang menolaknya, dengan mempunyai alasan masingmasing. Penggunaan ISDM dikelompokan menjadi beberapa kelompok dengan suatu dasar pendekatan. Menurut Avison dan Fitzgerald (2003) dalam jurnal Wahid, ISDM dikelompokan menjadi 6 kelompok yaitu : a.
Metodologi berorientasi proses (processoriented methodologies) seperti Structured Analysis, Design, and Implementation of Information Systems (STRADIS) dan Yourdon Systems Method (YSM).
b.
Metodologi berorientasi obyek (object-oriented methodologies) seperti Object Oriented Analysis dan Rational Unified Process (RUP).
c.
Metodologi
pengembangan
cepat
(rapid
development
methodologies) seperti Extrem eProgramming (XP) dan Dynamic Systems Development Method (DSDM). d.
Metodologi berorientasi orang (people-oriented methodologies) seperti Effective Technical and Human Implementation of Computer-Based Systems (ETHICS).
34
e.
Metodologi
berorientasi
organisasi
(organizational-oriented
methodologies) seperti Soft Systems Methodology (SSM) dan Information Systems Work and Analysis Changes (ISAC). f.
Metodologi campuran (blended methodologies) seperti Merise dan Information Engineering (IE).
Sedangkan menurut Beynon-Davies dan Williams (2003) dalam jurnal Wahid, ISDM dibagi menjadi tiga kelompok utama yaitu metode terstruktur, metode Rapid Aplication Development (RAD), dan metode berorientasi obyek. Metode terstruktur diperkenalkan pertama kali pada tahun 1980an dan menggunakan model linier dalam proses pengembangan. Metode RAD menggunakan model iterasi proses pengembangan dan secara umum menspesifikasikan tahap berdasar beberapa bentuk prototype. Metode berorientasi-obyek merupakan metode yang relatif baru dan sekarang menjadi cukup populer di kalangan pengembang sistem informasi. Metode ini berfokus pada obyek yang konsisten mulai tahap analisis, perancangan, dan implementasi sistem informasi. Dari semua penjelasan diatas maka dapat dilihat kelebihan dan kekurangan
dari
masing-masing
metodologi
pengembangan
sistem
informasi pada Tabel 2.1. Tabel 2.1 Metode Pengembangan Sistem metode
Waterfall
Keunggulan -
sederhana dan mudah untuk diterapkan tahapan-tahapannya yang sangat terstruktur lebih disiplin dan berkembang secara linier dan sistematis lebih berhati-hati sehingga meminimalisir resiko kegagalan
kekurangan - suatu perubahan dalam pengembangan sistem dapat menyebabkan kebingungan tim proyek. - sering terjadi penundaan karena anggota tim proyek harus menunggu tim lain menyelesaikan tugasnya - permasalahan tidak ditemukan sampai sistem diuji - kebutuhan tidak konsisten, hilangnya komponen sistem, dan kebutuhan pengembangan yang tidak terduga selama desain dan pembuatan kode program
35
Prototype
-
Spiral
-
Adanya komunikasi yang baik antara pengembang dan pelanggan Pengembang dapat bekerja lebih baik dalam menentukan kebutuhan pelanggan Pelanggan berperan aktif dalam pengembangan sistem Lebih menghemat waktu dalam pengembangan sistem Penerapan menjadi lebih mudah karena pemakai mengetahui apa yang diharapkannya Dapat disesuaikan agar perangkat lunak bisa dipakai selama hidup perangkat lunak komputer Lebih cocok untuk pengembangan sistem dan perangkat lunak skala besar Pengembang dan pemakai dapat lebih mudah memahami dan bereaksi terhadap resiko setiap tingkat evolusi Tetap mengikuti langkah-langkah dalam siklus kehidupan klasik dan memasukkannya ke dalam kerangka kerja iteratif waktu pembangunan singkat menghemat biaya pembangunan gambaran produk dapat dilihat lebih awal
RAD
-
object oriented
-
Uniformity : Pengembang cukup menggunakan satu metodelogi dari tahap analisis hingga perancangan. Dengan adanya perkembangan ke arah aplikasi GUI (graphical User interface) OMT (Object Modelling Technique) memungkinkan merancangn user interface secara terintegrasi bersama dengan perancangan perangkat lunak sekaligus dengan perancangan basis data Understandability : Kode-kode yang dihasilkan dapat diorganisasi ke dalam kelas-kels yang berhubungan dengan masalah sesungguhnya sehingga lebih mudah dipahami Stability : Kode program yang dihasilkan relatif stabil sebab mendekati permasalahn sesungguhnya dilapangan Reusability : Dimungkinkan penggunaan kembali kode-kode sehingga akan mempercepat waktu pengembangan perangkat lunak
- Pelanggan kadang tidak melihat atau menyadari bahwa perangkat lunak yang ada belum mencantumkan kualitas perangkat lunak secara keseluruhan dan juga belum memikirkan kemampuan pemeliharaan untuk jangja waktu lama - pengembang biasanya ingin cepat menyelesaikan proyek. Sehingga menggunakan algoritma dan bahasa pemrograman yang sederhana untuk membuat prototyping - Sulit untuk menyakinkan pelanggan bahwa pendekatan evolusioner ini bisa dikontrol - Butuh waktu lama untuk menerapkan paradigma ini menuju kepastian yang absolut - Memerlukan penaksiran resiko yang masuk akal dan akan menjadi masalah yang serius jika resiko mayor tidak ditemukan - Proyek yang besar dan berskala, RAD memerlukan sumer daya manusia yang memadai untuk menciptakan jumlah tim yang baik - RAD menuntut pengembang dan pelanggan memiliki komitmen dalam aktivitas rapid fire yang diperlukan untuk melengkapi sebuah sistem dlam waktu yang singkat. Jika komitmen tersebut tidak ada maka proyek RAD akan gagal - Metode berorientasi objek merupakan konsep yang relatif baru sehingga belum ada standar yang diterima semua pihak dalam menentukan tool apa yang digunakan sebagai dasar analisi serat perancangan perangkat lunak
(Sumber Pressman, 2001) 2.7
Metode Pengembangan RAD RAD (Rapid Application Development) adalah sebuah strategi pengembangan sistem yang menekankan kecepatan pengembangan melalui keterlibatan pengguna yang ekstensif dalam konstruksi, cepat, berulang dan bertambah serangkaian prototype bekerja sebuah sistem yang pada akhirnya berkembanag kedalam sistem final (Whitten, 2004). Jeffrey L. Whitten menambahkan bahwa RAD (Rapid Application Development) adalah suatu pendekatan desain sistem yang menggunakan teknik terstruktur, prototiping,
36
dan JAD (Joint Application Development) untuk mengembangkan sistem secara cepat (Whitten, 2004). Sebagai respon pada kemajuan ekonomi pada umumnya, rapid application development (RAD) / pengembangan aplikasi cepat telah menjadi rute yang populer untuk mengakselerasi pengembangan sistem. Gagasan-gagasan RAD adalah (Whitten, 2004): 1. Lebih aktif melibatkan para pengguna sistem dalam aktifitas analisis, desain, konstruksi. 2. Mengorganisasikan pengembangan sistem ke dalam rangkaian seminar yang intensif dan berfokus dengan para pemilik, pengguna, analis, desainer dan pembangun sistem. 3. Mengakselerasi fase-fase analisis dan desain persyaratan melalui pendekatan konstruksi berulang. 4. memperpendek waktu yang diperlukan sebelum para pengguna mulai melihat sebuah sistem yang bekerja. Adapun strategi dari RAD dapat dilihat pada gambar pada halaman berikutnya:
37
Gambar 2.3 Strategi Rapid Application Development (Whitten, 2004) 2.7.1
Keunggulan RAD (Rapid Application Development) Model RAD mempunyai beberapa keunggulan sebagai berikut (Whitten, 2004): 1. Mendorong pengguna aktif dan partisipasi manajemen (berkebalikan dengan reaksi pasif pada model-model sistem yang tidak bekerja). Hal ini meningkatkan antusiasme pengguna akhir proyek. 2. Proyek-proyek memiliki visibilitas dan dukungan lebih tinggi karena keterlibatan pengguna yang ekstensif selama proses. 3. Para pengguna dan manajemen melihat solusi-solusi yang berbasis perangkat lunak dan bekerja lebih cepat dari pada pengembangan model-driven.
38
4. Error dan penghilangan cenderung untuk dideteksi lebih awal dalam prototipe dari pada model sistem. 5. Pengujian dan pelatihan adalah produk tambahan alami dari pendekatan prototyping yang mendasar. Pendekatan berulang adalah proses yang lebih “alami” karena perubahan adalah faktor yang diharapkan selama pengembangan. 2.8 Unified Modeling Language (UML) 2.8.1
Definisi UML UML adalah keluarga notasi grafis yang didukung oleh modelmodel tunggal, yang membantu pendeskripsian dan desain sistem perangkat lunak, khususnya sistem yang dibangun menggunakan pemrograman berorientasi obyek (Fowler, 2004) UML merupakan satu kumpulan konvensi pemodelan yang digunakan untuk menentukan atau menggambarkan sebuah sistem software yang terkait dengan obyek (Whitten, 2004). Jeffrey L. Whitten menambahkan bahwa UML menawarkan diagram yang dikelompokkan
menjadi
beberapa
perspektif
berbeda
untuk
memodelkan suatu sistem, seperti satu set cetak biru (blueprint) yang digunakan untuk membangun sebuah rumah (Whitten, 2004). 2.8.2 Diagram UML 2.8.2.1 UseCase Diagram Diagram yang menggambarkan interaksi antara sistem dengan eksternal sistem dan pengguna. Dengan kata lain, secara grafis menggambarkan siapa yang akan menggunakan
39
sistem dan dengan cara apa pengguna mengharapkan untuk berinteraksi dengan sistem (Whitten, 2004). Adapun simbolsimbol dari use case diagram terdapat pada daftar simbol. Dalam use case diagram memiliki pemodelan sebagai berikut (Whitten, 2004): 1. Use case Use case merupakan urutan langkah-langkah yang secara tindakan saling terkait (scenario), baik otomatis maupun secara manual. 2. Actor (Pelaku) Actor
merupakan
segala
sesuatu
yang
perlu
berinteraksi dengan sistem untuk pertukaran informasi. 3. Relationship (Hubungan) Pada diagram use case, relationship digambarkan sebagai sebuah garis antara dua simbol. Pemaknaan relationship berbeda-beda tergantung bagaimana garis tersebut digambar dan tipe simbol apa yang digunakan untuk menghubungkan garis tersebut. Berikut ini adalah perbedaan di antara relationship yang ada pada sebuah diagram use case:
40
a. Association Association merupakan relationship antara actor dengan use case dimana terjadi interaksi di antara mereka. b. Extends Extends use case merupakan use case yang terdiri dari langkah yang terekstraksi dari use case yang lebih kompleks untuk menyederhanakan masalah dan karena itu memperluas fungsinya. c. Uses (includes) Hubungan uses menggambarkan bahwa satu use case seluruhnya meliputi fungsionalitas dari use case lainnya. d. Depends on Terkadang
suatu
use
case
memiliki
ketergantungan pada use case yang lainnya yang bertujuan
untuk
pengembangan
use
menentukan case.
urutan
dalam
Ketergantungan
ini
dimodelkan menggunakan depends on relationship. e. Inheritance Hubungan inheritance terjadi ketika dua atau lebih actor menggunakan use case yang sama.
41
2.8.2.2 Activity Diagram Activity
diagram
secara
grafis
digunakan
untuk
menggambarkan rangkaian aliran aktifitas baik proses bisnis atau usecase (Whitten, 2004). Adapun simbol-simbol dari activity diagram terdapat pada daftar simbol. 2.8.2.3 Class Diagram Class diagram gambar grafis mengenai struktur obyek statis dari suatu sistem, menunjukkan kelas-kelas obyek yang menyusun sebuah sistem dan juga hubungan antara kelas obyek tersebut (Whitten, 2004). Adapun simbol-simbol dari class diagram terdapat pada daftar simbol. 2.8.2.4 Statechart Diagram Statechart diagram mengilustrasikan siklus hidup object dan keadaan yang dapat diasumsikan oleh object dan events yang menyebabkan object beralih dari satu state ke state yang lain (Whitten, 2004). Adapun simbol-simbol dari statechart diagram terdapat pada daftar simbol. 2.8.2.5 Sequence Diagram Sequence
diagram
secara
grafis
menggambarkan
bagaimana object berinteraksi dengan satu sama lain melalui pesan pada eksekusi sebuah usecase atau operasi. Diagram ini mengilustrasikan bagaimana pesan terkirim dan diterima di antara object dan sequence (ruang waktu) (Whitten, 2004).
42
Adapun simbol-simbol dari sequence diagram terdapat pada daftar simbol. 2.8.3 Keunggulan UML Adi Nugroho mengemukakan bahwa secara umum UML diterapkan dalam pengembangan sistem/perangkat lunak berorientasi obyek sebab metodologi UML ini umumnya memiliki keunggulankeunggulan sebagai berikut (Nugroho, 2005): a. Uniformity. Dengan metodologi UML, para pengembang cukup menggunakan
1
metodologi
dari
tahap
analisis
hingga
perancangan. Hal ini tidak bisa dilakukan dalam metodologi pengembangan terstruktur. Dengan perkembangan masa kini ke arah aplikasi GUI (Graphical User Interface), UML juga memungkinkan kita merancang komponen antarmuka pengguna (user interface) secara integrasi bersama dengan perancangan perangkat lunak sekaligus dengan perancangan basis data. b. Understandability. Dengan metodologi ini kode yang dihasilkan dapat diorganisasi ke dalam kelas-kelas yang berhubungan dengan masalah sesungguhnya sehingga lebih mudah dipahami siapapun juga. c. Stability. Kode program yang dihasilkan relatif stabil ssepanjang waktu sebab sangat mendekati permasalahan sesungguhnya di lapangan. Reusability.
Dengan
metodologi
berorientasi
obyek,
43
dimungkinkan penggunaan ulang kode, sehingga pada gilirannya akan sangat mempercepat waktu pengembangan perangkat lunak.
2.9
Alat Pengembangan Aplikasi Sistem Dalam pengembangan Sistem Informasi Penjadwalan Program Studi SI dan
TI ini, digunakan beberapa alat pengembangan aplikasi sistem yaitu development tool menggunakan PHP, database menggunakan MySQL dengan pengaksesan database menggunakan phpMyAdmin, server Apache, dan web browser. 2.9.1 PHP (PHP Hypertext Preprocessor) 2.9.1.1 Definisi PHP PHP singkatan dari PHP Hypertext Preprocessor yang digunakan sebagai bahasa script server-side dalam pengembangan Web yang disisipkan pada dokumen HTML. Penggunaan PHP memungkinkan Web dapat dibuat dinamis sehingga maintenance situs Web tersebut menjadi lebih mudah dan efisien. PHP merupakan Software Open-Source yang disebarkan dan di lisensikan secara gratis serta dapat di download secara bebas dari situs resminya http://www.php.net. PHP ditulis menggunakan bahasa C (Peranginangin, 2006).
44
2.9.1.2 Sejarah PHP Berikut ini adalah ringkasan sejarah perkembangan PHP : 1994
diperkenalkan oleh Rasmus Lerdorf. Beberapa versi awal yang tidak dipublikasikan digunakan pada situs pribadinya
1995
Versi pertama digunakan oleh pihak lain dan dikenal sebagai ( Personal Home Page Tools ) Implementasi C Source code PHP/FI disebarkan
1997
PHP/FI 2.0 digunakan di 50.000 situs web di seluruh dunia PHP 3.0 diciptakan oleh Andi Gutmans dan Zeev Suraski hampir merupakan versi pertama yang menyerupai PHP seperti yang kita ketahui saat ini
1998
PHP/FI maupun PHP 3 dikemas bersama dengan produkproduk komersial seperti server web StrongHold buatan C2 dan Linux RedHat
1999
PHP 4.0 yang didasarkan pada ‘Zend Engine’ mesin baru kembangan Zeev dan Andi diluncurkan yang meningkatkan performa PHP 3.0
2004
PHP 5.0 diluncurkan.
2.9.1.3 Keuntungan Penggunaan PHP PHP memiliki banyak kelebihan yang tidak dimiliki oleh bahasa script sejenis, sehingga terdapat beberapa keuntungan dari
45
penggunaan PHP sebagai development tool, yaitu (Peranginangin, 2006): a. PHP adalah teknologi yang paling superior. Teknologi lain yaitu PERL, Phyton, Tcl, VB script, ASP merupakan teknologi yang lebih rendah dan lebih tua. Bahkan Java/Jsp lebih rendah dari PHP. b. Open source. c. Sintaks-sintaksnya lebih mudah dipelajari, sangat menyerupai C dan Perl. d. Integrasi yang sangat luas ke berbagai server database. Menulis web yang terhubung ke database menjadi sangat sederhana. Database yang didukung oleh PHP : Oracle, Sybase, mSQL, MySQL, Solid, ODBC, PostgreSQL, Adabas D, FilePro, Velocis, Informix, dBase, UNIX dbm. e. Script (kode program) terintegrasi dengan file HTML, sehingga developer
bisa
berkonsentrasi
langsung
pada
penampilan
dokumen webnya. f. Tidak ada proses compiling dan linking. g. Berorientasi obyek (object oriented). 2.9.1.4 Tipe Data PHP menyediakan delapan jenis nilai-nilai, atau tipe data. Empat adalah skalar (single-value) : integer, floating-point number,
46
string dan booleans. Dua adalah campuran (koleksi) : array dan object. Sisanya adalah jenis khusus : resource dan NULL. 2.9.2 MySQL 2.9.2.1 Definisi MySQL Abdul Kadir (2008) berpendapat bahwa MySQL merupakan salah
satu
jenis
database
server
yang
sangat
terkenal.
Kepopulerannya disebabkan MySQL menggunakan SQL sebagai bahasa dasar untuk mengakses database-nya. MySQL adalah Relational Database Management Sistem (RDBMS) yang didistribusikan secara gratis di bawah lisensi GPL (General Public License). Dimana setiap orang bebas untuk menggunakan MySQL, namun tidak boleh dijadikan produk turunan yang bersifat closed source atau komersial (Prasetyo, 2003) MySQL
adalah
sebuah
perangkat
lunak
sistem
manajemen basis data SQL (bahasa Inggris: basis data management system) atau DBMS yang multithread, multi-user, dengan sekitar 6 juta instalasi di seluruh dunia. MySQL AB membuat MySQL tersedia sebagai perangkat lunak gratis di bawah lisensi GNU General Public License (GPL), tetapi mereka juga menjual di bawah lisensi komersial untuk kasus-kasus dimana penggunaannya tidak cocok dengan penggunaan GPL. Tidak sama dengan proyek-proyek seperti Apache, dimana perangkat lunak dikembangkan oleh komunitas umum, dan hak
47
cipta untuk kode sumber dimiliki oleh penulisnya masing-masing, MySQL
dimiliki
dan
disponsori
oleh
sebuah
perusahaan
komersial Swedia MySQL AB, dimana memegang hak cipta hampir atas semua kode sumbernya. Kedua orang Swedia dan satu orang Finlandia yang
mendirikan
MySQL
AB
adalah: David
Axmark, Allan Larsson, dan Michael "Monty" Widenius. 2.9.2.2 Sejarah MySQL (Prasetyo, 2003). 1994-My
SQL
pertama
kali
dikembangkan
oleh
pengembang software dan konsultan database bernama MySQL AB (yang dulunya bernama TcX DataKonsult AB) yang bertempat di swedia. Awalnya Michael Widenius ”Monty”, pengembang satusatunya di TCX, memiliki sebuah aplikasi UNIREG dan rutin ISAM buatannya sendiri dan sedang mencari antarmuka SQL yang cocok untuk diimplementasikan ke dalamnya. Mula-mula Monty memakai miniSQL (mSQL) pada eksperimennya itu, namun mSQL dirasa kurang sesuai, karena terlalu lambat dalam pemrosesan query. Akhirnya Monty menghubungi David Hughes, pembuat mSQL yang sedang merilis versi kedua dari mSQL. Kemudian Monty mencoba membuat sendiri mesin SQL yang memiliki antarmuka mirip dengan SQL, tetapi dengan kemampuan yang lebih sesuai, dan lahirlah MySQL.
48
Tentang pengambilan nama MySQL, sampai saat ini masih belum jelas asal usulnya. Ada yang berpendapat nama My diambil dari huruf depan dan belakang Monty, tetapi versi lain mengatakan itu diambil dari nama putri Monty yang kebetulan bernama My. 2.9.2.3 Fitur MySQL Sebagai software DBMS, MySQL memiliki sejumlah fitur seperti berikut (Kadir, 2008): a.
Multiplatform MySQL tersedia pada beberapa platform seperti : Windows, Linux, Unix, dan lain-lain.
b.
Andal, cepat dan mudah digunakan MySQL tergolong sebagai database server (server yang melayani permintaan terhadap database) yang andal, dapat menangani database besar dengan kecepatan tinggi, mendukung
banyak
sekali
fungsi
untuk
mengakses
database, sekaligus mudah untuk digunakan. c.
Jaminan keamanan akses MySQL berbagai
mendukung kriteria
pengamanan
pengaksesan.
database Sebagai
dengan
gambaran,
dimungkinkan untuk mengatur user tertentu agar bisa mengakses data yang bersifat rahasia (misalnya gaji pegawai), sedangkan user lain tidak boleh. MySQL juga mendukung konektivitas ke berbagai software. Sebagai
49
contoh, dengan menggunakan ODBC (Open Database Connectivity), database yang ditangani MySQL dapat diakses melalui program yang dibuat dengan Visual Basic. MySQL juga dapat mendukung program klien yang berbasis Java untuk berkomunikasi dengan database MySQL melalui JDBC (Java Database Connectivity). MySQL juga bisa diakses melalui aplikasi berbasis Web, misalnya dengan menggunakan PHP. d.
Dukungan SQL Seperti tersirat dalam namanya, MySQL mendukung perintah SQL (Structured Query Language). Sebagaimana diketahui, SQL merupakan standar dalam pengaksesan database relasional.
2.9.2.4 Keistimewaan MySQL Sebagai database server yang memiliki konsep database modern, MySQL memiliki banyak sekali keistimewaan. Berikut ini beberapa keistimewaan yang dimiliki MySQL (Prasetyo, 2003): 1.
Portability MySQL dapat berjalan stabil pada berbagai sistem operasi seperti Windows, Linux, FreeBSD, Mac Os X Server, Solaris, Amiga, dan masih banyak lagi.
2.
Open Source
50
MySQL didistribusikan secara open source, dibawah lisensi GPL sehingga dapat digunakan secara cuma-cuma. 3.
Multiuser MySQL dapat digunakan oleh beberapa user dalam waktu yang bersamaan tanpa mengalami masalah atau konflik.
4.
Performance tuning MySQL memiliki kecepatan yang menakjubkan dalam menangani query sederhana, dengan kata lain dapat memproses lebih banyak SQL per satuan waktu.
5.
Column types MySQL memiliki tipe kolom yang sangat kompleks, seperti signed/unsigned integer, float, double, char, text, date, timestamp, dan lain-lain.
6.
Command dan functions MySQL memiliki operator dan fungsi secara penuh yang mendukung perintah Select dan Where dalam query .
7.
Security MySQL memiliki beberapa lapisan sekuritas seperti level subnetmask, nama host, dan izin akses user dengan sistem perizinan yang mendetail serta password terenkripsi.
8.
Scalability dan limits MySQL mampu menangani database dalam skala besar, dengan jumlah records lebih dari 50 juta dan 60 ribu tabel
51
serta 5 milyar baris. Selain itu batas indeks yang dapat ditampung mencapai 32 indeks pada tiap tabelnya. 9.
Connectivity MySQL
dapat
melakukan
koneksi
dengan
client
menggunakan protokol TCP/IP, Unix soket (UNIX), atau Named Pipes (NT). 10. Localisation MySQL dapat mendeteksi pesan kesalahan pada client dengan menggunakan lebih dari dua puluh bahasa. Meskipun demikian, bahasa Indonesia belum termasuk didalamnya. 11. Interface MySQL memiliki interface terhadap berbagai aplikasi dan bahasa pemrograman dengan menggunakan fungsi API (Application Programming Interface). 12. Clients dan tools MySQL dilengkapi dengan berbagai tool yang dapat digunakan untuk administrasi database, dan pada setiap tool yang ada disertakan petunjuk online. 13. Struktur tabel MySQL memiliki struktur tabel yang lebih fleksibel dalam menangani ALTER TABLE, dibandingkan database lainnya semacam PostgreSQL ataupun Oracle.
52
2.9.3 phpMyAdmin phpMyAdmin adalah sebuah free software yang ditulis dengan PHP yang digunakan untuk menangani administrasi MySQL di World Wide Web seperti
yang
dituliskan
dalam
website
resminya
http://www.phpmyadmin.net/home_page/index.php. Aplikasi phpMyAdmin dapat mengatur sebuah server MySQL (membutuhkan sebuah super-user) sama sepeti sebuah database tunggal. Untuk menjalankan script MySQL anda perlu mengatur privilege bagi user yang
menggunakan
aplikasi
ini,
agar
user
tersebut
dapat
membaca/mengubah hanya database tertentu. Cara pengaturan tersebut terdapat pada manual MySQL. phpMyAdmin dapat melakukan kegiatan berikut: a.
Membuat dan menghapus database
b.
Membuat, mengkopi, menghapus, menganti nama dan mengubah tabel
c.
Melakukan pemeliharaan tabel
d.
Menghapus, mengubah dan menambahkan field
e.
Mengeksekusi berbagai SQL-statement, bahkan batch-queries
f.
Mengatur key pada field
g.
Memproses file teks ke dalam tabel
h.
Membuat dan membaca tabel
i.
Mengeksport data menjadi format CSV, XML dan Latex
j.
Memungkinkan penggunaan multipel server
k.
Mengatur user dan privilege MySQL
53
l.
Mengecek referensi penggabungan dalam tabel MyISAM
m.
Menggunakan Query-by-example (QBE), membuat query yang kompleks secara otomatis terkoneksi dengan table yang diinginkan
n.
Membuat grafik PDF dari layout database
o.
Melakukan pencarian secara global dalam sebuah database
p.
Mentransformasi data yang disimpan ke dalam berbagai format menggunakan seperangkat fungsi, seperti menampilkan BLOB-data se bagai gambar atau download link
q.
Support tabel InnoDB dan foreign key
r.
Support mysqli, pengembangan ekstensi MySQL
s.
Dapat digunakan pada 50 bahasa berbeda
2.9.4
Apache Web server Apache berbasiskan Open Source dan mulai populer di
Internet sejak tahun 1996 karena open source, Apache bebas didistribusikan oleh siapa saja dan kepada siapa saja. Software ini dapat diunduh pada situs http://www.apache.org dan tersedia untuk berbagai platform (Windows, Linux, dan UNIX). Supaya dokumen-dokumen web baik berupa HTML ataupun PHP bisa diakses oleh browser maka dokumen-dokumen tersebut perlu diletakkan dalam direktori khusus yang diatur oleh Apache. Oleh karena itu, semua script PHP yang digunakan perlu diletakkan di dalamnya (Kadir, 2008).
54
2.9.5
Web Browser Web browser sebagai perangkat lunak yang berguna untuk
mengakses informasi web ataupun untuk melakukan transaksi via web. Beberapa contoh browser yang ada saat ini seperti : Internet Explorer, Mozilla Firefox, Opera, Netscape, dan Safari. (Abdul Kadir, 2003) 2.10 Literatur Sejenis Abdul Mutholib (2007), Pengembangan Aplikasi Penjadwalan Kuliah Menggunakan Metode tabu search : dari banyak pendekatan yang dipakai dalam optimalisasi, seperti schedulling khususnya untuk permasalahan penjadwalan kuliah, terbukti bahwa algoritma heuristik lebih efektif untuk menyelesaikan permasalahan yang lebih kompleks. Algoritma tabu search merupakan salah satu algoritma heuristik yang memiliki kelebihan dalam hal menyimpan solusi-solusi yang telah didapatkan sebelumnya. Penelitian ini bertujuan untuk mengaplikasikan algoritma tabu search dalam pembuatan jadwal kuliah di Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah Jakarta. Pengaplikasian
tabu
search
yang
telah
dibahasakan
ke
bahasa
pemrograman PHP mampu mengoptimalkan jumlah lokal yang terbatas dan kesiapan mengajar dosen yang terbatas. Annisa Primasari (2010), Sistem Informasi Penjadwalan Kuliah pada Program Studi Sistem Informasi dan Teknik Informatika Fakultas Sains dan teknologi UIN Syarif Hidayatullah Jakarta : Universitas Islam Negeri (UIN) Syarif Hidayatullah Jakarta merupakan salah satu universitas negeri yang telah menerapkan sistem informasi dalam beberapa
55
aktivitasnya terutama pada pelaksanaannya di Fakultas Sains dan Teknologi (FST) Program Studi Sistem Informasi dan Teknik informatika (Prodi SI dan TI). Sistem informasi diharapkan dapat terus digunakan menyeluruh diberbagai aktivitas dalam penyelenggaraan kegiatan yang berhubungan dengan belajar mengajar yang merupakan aktivitas utama di institusi tersebut, salah satunya dalam hal aktivitas pembuatan jadwal kuliah. Terdapat beberapa kendala yang menjadi masalah dalam pembuatan jadwal kuliah, di antaranya adalah sulitnya membuat jadwal berdasarkan kesediaan mengajar, sulitnya mengatur jadwal agar tidak bersamaan dalam satu ruang dengan hari dan sesi yang sama, sulitnya membuat jadwal penggunaan laboratorium yang digunakan bersama-sama antara Prodi SI dan TI, sulitnya mengecek pemenuhan kewajiban SKS yang harus dipenuhi Dosen sesuai dengan status kerja Dosen tersebut. Berdasarkan kendala-kendala tersebut, penulis mengembangkan Sistem Informasi Penjadwalan Kuliah yang dapat digunakan untuk mengatur hari, sesi dan ruang bagi setiap proses kegiatan belajar mengajar berdasarkan matakuliah dan dosen pengajarnya, serta membantu untuk mengetahui jumlah pemenuhan SKS oleh Dosen berdasarkan status kerjanya. Selain itu sistem yang dikembangkan dapat mengorganisir Prodi SI dan TI dalam pembuatan jadwal perkuliahan. Sistem Informasi Penjadwalan Kuliah dikembangkan dengan menggunakan strategi iteration waterfall yang merujuk pada teori Jeffrey L. Whitten (2004) dengan pemodelan blueprint (cetak biru) sistem menggunakan Unified Modelling Language (UML).
56
Teknologi yang digunakan dalam pengembangan perangkat lunak sistem menggunakan PHP 5.2.9 sebagai bahasa pemrograman, Apache 2.2 sebagai web server, dan MySQL 5.0 sebagai database. Pengembangan Sistem Informasi Penjadwalan Kuliah yang dikembangkan telah membuat batasan
waktu
pengumpulan
kesediaan
mengajar,
membantu
mengorganisir, melakukan pengecekan dan verifikasi kesediaan mengajar, membantu penentuan hari, sesi, lokal dan kelas untuk setiap kesediaan mengajar tervalidasi, membantu penentuan penggunaan laboratorium, mengurangi penggunaan resource kertas dan menghilangkan resiko tercecernya informsi dalam bentuk kertas, meminimalisasi terjadinya human error, membantu mempercepat pembuatan laporan jadwal perkuliahan dan menegaskan informasi penjadwalan kuliah.
BAB III METODOLOGI PENELITIAN 3.1
Metodologi Pengumpulan Data Dalam pelaksanaan penelitian ini diperlukan data dan informasi terkait
yang nantinya digunakan sebagai bahan rujukan untuk pengembangan sistem yang ada serta mendukung keabsahan pembahasan pada laporan penelitian. Adapun metodologi pengumpulan data yang digunakan dalam penelitian ini adalah Studi Pustaka, Studi Lapangan yang terdiri dari observasi dan wawancara, Studi Literatur. 3.1.1 Studi Pustaka Metode ini dilakukan dengan mempelajari teori-teori terkait dan hasil penelitian sebelumnya yang mendukung pemecahan masalah bagi penelitian yang terdiri dari 17 buku teks dan 2 hasil penelitian sejenis. Daftar buku dan jurnal yang digunakan sebagai bahan studi penelitian ini dapat dilihat pada halaman daftar pustaka dari laporan penelitian ini. 3.1.2 Studi Lapangan 3.1.2.1 Observasi Observasi dilakukan langsung ke International Programs Fakultas Sains dan Teknologi Universitas Islam Negeri (UIN) Syarif Hidayatullah Jakarta. Tujuan dilakukannya observasi guna mengetahui bagaimana jalannya sistem manual dan mengetahui masalah-masalah apa saja yang timbul jika masih digunakannya sistem manual. Kemudian,
57
58
dari masalah-masalah yang telah didapat bisa dianalisis sistem seperti apa yang akan dikembangkan guna membantu proses pembuatan jadwal kuliah pada International Programs tersebut. Dari hasil pengamatan, diketahui bahwa dalam pembuatan jadwal kuliah International program saat ini masih menggunakan software Microsoft Excel yang menjadi alat bantu. Sementara, pengorganisasian jadwal masih bergantung pada kapasitas pembuat jadwal sendiri dalam hal ini bagian Kortek IP. Selain itu, data yang didapatkan dari Dosen sebagai kesediaan mengajar masih didapat dengan pengisian form kertas yang dibagikan kepada seluruh Dosen guna mengetahui apa mata kuliah yang ingin Dosen ajarkan sesuai spealisasi keilmuannya dan kapan waktu dimana Dosen tersebut dapat mengajar. Adapun surat izin penelitian sebagai bukti dilaksanakannya penelitian dan observasi dapat dilihat pada lampiran 1. 3.1.2.2 Wawancara Wawancara dilakukan secara langsung dengan pihak-pihak terkait dalam pembuatan penjadwalan kuliah yaitu Mamitha selaku bagian Staff Akademik IP dan Ibu Ria Hari Gusmita, M.Kom selaku Kortek IP. Beberapa masalah yang ada di sistem berjalan dapat disimpulkan dari hasil wawancara dengan pihak-pihak yang tersebut di atas, sebagai berikut:
59
a.
Selama ini Kortek IP masih memproses pembuatan jadwal secara manual dengan bantuan Microsoft Excel untuk menulis jadwal, sementara pembuatan jadwal sendiri mengandalkan kapasitas pembuatnya.
b.
Pengisian kesediaan mengajar masih dilakukan secara manual yaitu dengan mengisi form dalam bentuk kertas yang dibagikan kepada Dosen IP beserta penawaran matakuliah yang diajarkan pada semester tertentu.
c.
Penerbitan jadwal perkuliahan sering mengalami keterlambatan sehingga membingungkan mahasiswa dalam mengikuti kegiatan belajar mengajar.
Guna memecahkan masalah tersebut di atas, diajukan rancangan pengembangan sistem yang diinginkan oleh pihak terkait, sehingga sistem tersebut tepat guna. Berikut kesimpulan hasil wawancara tentang pembuatan sistem penjadwalan kuliah yang diinginkan : a.
Sistem diharapkan mempermudah Kortek IP untuk membuat jadwal perkuliahan sehingga mengurangi human error dalam memvalidasi kesediaan mengajar yang telah diberikan Dosen. Tidak terjadi benturan kesamaan penggunaan hari, sesi dan ruang dalam pembuatan jadwal. Kemudahan dalam penghitungan jumlah SKS
yang telah dipenuhi oleh Dosen.
60
Kemudahan
pembuatan
laporan
berupa
jadwal
perkuliahan bagi pihak Mahasiswa dan Dosen. b.
Sistem
diharapkan
mempermudah
Dosen
untuk
mengetahui mata kuliah yang ditawarkan pada semester tertentu dan mengisi kesediaan mengajar sesuai dengan keahlian yang dimilikinya baik itu di Program Studi SI ataupun TI International Program. c.
Sistem diharapkan mempermudah mahasiswa untuk mengetahui jadwal perkuliahan secara tepat dan cepat.
Adapun kutipan wawancara secara lengkap dapat dilihat pada lembar lampiran 2. 3.1.3 Studi Literatur Sejenis Pada tahapan ini penulis membandingkan penelitian sebelumnya untuk membuat usulan sistem lebih baik. Sebagai referensi literatur sejenis atau penelitian sebelumnya ada di akhir BAB II.
3.2
Metode Pengembangan Sistem Penelitian ini menggunakan Metodologi Rapid Application Development
(RAD). RAD merupakan sebuah strategi pengembangan sistem yang menekankan kecepatan pengembangan melalui keterlibatan pengguna yang ekstensif dalam konstruksi, cepat, berulang dan bertambah serangkaian prototipe bekerja sebuah sistem yang pada akhirnya berkembang ke dalam sistem final. RAD dibagi dalam beberapa tahapan, diantaranya : Scope Definition, Analisis, Design, Construction
61
and Testing, Delivery of a version , dan System operation and maintenance. (Jeffrey L. Whitten, Lonnie D. Bentley and Kevin C. Dittman, 2004). Tahapan Scope Definition akan menggambarkan pandangan umum yang diungkapkan dengan jelas dan singkat tentang masalah-masalah yang ada di dalam perusahaan, serta menentukan batasan-batasan dalam proyek sistem ini. Tahapan Analisis, akan dilakukan analisa lingkungan perusahaan serta analisa berdasarkan dari hasil wawancara sehingga dapat memahami alur dari sistem yang sedang berjalan pada Penjadwalan International Program. Setelah itu dilakukan analisa dengan pendekatan Object Oriented Analisis (OOA). Serta memahami permasalahan-permasalahan yang ada sampai dengan analisa kebutuhan sistem. Tahapan Design (perancangan), akan mengidentifikasi solusi yang didapatkan dari hasil analisa, kemudian membuat desain proses bisnis dan desain pemrograman untuk data-data yang telah didapatkan dan dimodelkan dalam arsitektur aplikasi Penjadwalan. Tools yang akan digunakan dalam pemodelan sistem ini adalah UML (Unified Modeling Language). Setelah melakukan analisis sistem dan perancangan sistem secara rinci, maka selanjutnya sistem siap di implementasikan dan di uji. Pada tahap ini terdapat beberapa aktivitas yang dilakukan oleh penulis. Aktivitas-aktivitas yang dimaksud berupa: pemrograman dan pengujian. Dalam aktifitas Pemrograman, penulis menggunakan software pendukung seperti XAMPP versi 1.6.2 yang mencakup: Apache versi 2.2.4 untuk web server, PHP versi 5.2.2 untuk bahasa pemrograman dan MySQL versi 5.0.41 untuk
62
database-nya. Selain itu, penulis juga menggunakan Notepad++ dan Macromedia Dreamweaver 8 sebagai software editor dan Adobe Photoshop CS2 untuk mengolah gambar. Aktifitas Pemrograman selesai maka sistem akan dilakukan pengujian Setiap program menjalani pengujian secara sendiri untuk memastikan bahwa program yang telah kita buat bisa bebas dari kesalahan (bug), walaupun tidak menutup kemungkinan masih terjadi sedikit bug atau tidak 100% bebas dari bug, namun pengujian ini setidaknya bisa meminimalisasi kesalahan yang akan terjadi. Pada tahap ini, penulis menggunakan metode pengujian unit dengan pendekatan black-box testing. 3.3
Kerangka Berfikir Pada perancangan Sistem Informasi Penjadwalan Mata Kuliah pada
International Programs Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah Jakarta Berbasis Website dibutuhkan beberapa tahapan yang harus dilalui untuk dapat menghasilkan sistem informasi yang berguna bagi International Program. Beberapa tahapan tersebut antara lain seperti awalnya memilih tempat penelitian untuk meneliti proses alur Penjadwalan Mata Kuliah dan membuat tugas akhir, lalu melakukan pengumpulan data dengan observasi, studi pustaka dan interview. Kemudian dengan merumuskan masalah dan ruang lingkup untuk menentukan konsep dan hipotesis penelitian. Yang terakhir menentukan pengembangan sistemnya dari tahap Scope Definition, Analisis, Design dan implementasikan sistemnya untuk International Program.
63
Start
Studi Pustaka
Mengumpulkan Data
Observasi Studi Lapangan Wawancara Studi Literatur Sejenis
Scope Definition
Mengembangkan Sistem
RAD ( Rapid Application Development) Jeffrey L. Whitten, Lonnie D. Bentley and Kevin C. Dittman, (2004)
Analisis
Design
Implementasi
End
Gambar 3.1 Kerangka Berfikir
BAB IV ANALISA DAN PERANCANGAN SISTEM 4.1
Mendefinisikan Lingkup (Scope Definition) 4.1.1
Identifikasi Masalah Sistem penjadwalan kuliah yang sedang berjalan saat ini pada
Programs Studi Sistem Informasi dan Teknik Informatika (Prodi SI dan TI) International Programs, terdapat beberapa kekurangan dan kemungkinan terjadinya human error dalam pelaksanaannya seperti kesalahan input oleh bagian Kortek IP. Hal ini dikarenakan banyaknya kesediaan mengajar Dosen yang perlu dimasukkan kedalam aplikasi Microsoft Excel guna diproses secara manual. Oleh karena itu diperlukan suatu sistem Penjadwalan Kuliah yang dapat meminimalisasi beberapa kekurangan dan kemungkinan terjadinya human error seperti yang telah disebutkan diatas, dapat memudahkan bagian Kortek IP dalam proses pembuatan jadwal kuliah, dapat memudahkan Dosen meng-input sendiri kesediaan mengajarnya, serta memudahkan pelaporan hasil jadwal kuliah kepada pihak Staf Akademik IP, Kortek IP dan Mahasiswa. Adapun masalah yang ditemukan sebagai hasil identifikasi, yaitu : a. Pengumpulan kesediaan mengajar yang sering tidak tepat waktu karena
terdapat
pengumpulan
kendala
kesediaan
dalam mengajar
menginformasikan serta
matakuliah yang ditawarkan untuk diajarkan.
64
waktu
menginformasikan
65
b. Banyaknya Dosen yang mengajukan kesediaan mengajarnya dengan pemilihan waktu mengajar yang sama dan perlu dilakukan pengecekan beberapa kali dan pemverifikasian kesediaan mengajar. c. Adanya kendala dalam penentuan lokal sesuai dengan hari dan sesi pada kesediaan mengajar Dosen. d. Adanya kendala dalam penggunaan laboratorium yang digunakan secara bersama-sama oleh Mahasiswa. e. Adanya kendala dalam mengetahui jumlah SKS yang dipenuhi oleh Dosen berdasarkan status kerjanya, sehingga jumlah SKS yang ada menyalahi ketentuan yang telah ditetapkan. f. Adanya kendala dalam pembuatan jadwal matakuliah untuk satu angkatan dengan angkatan lain, karena perbedaan kurikulum yang digunakan. g. Adanya kendala bagi Kortek IP dalam memproses jadwal kuliah antara Prodi SI dan TI selama ini, dikarenakan kesamaan Dosen pengajar dan tidak adanya suatu sistem yang dapat mengorganisir kedua Program studi tersebut dalam pembuatan jadwal. h. Adanya kendala dalam memproses kesediaan mengajar Dosen agar menghasilkan penjadwalan kuliah yang terorganisir dengan baik tanpa adanya bentrokan satu sama lain dalam hal penentuan hari, sesi, dan lokal yang dapat mengakibatkan keterlambatan pembuatan jadwal dan mengakibatkan terganggunya proses kegiatan belajar mengajar (KBM).
66
i. Kurang efisiennya resource dalam hal ini kertas yang digunakan untuk
form
kesediaan
mengajar
Dosen
dan
pemberitahuan
penawaran matakuliah, serta menyita waktu bagian Kortek IP yang harus memproses sendiri jadwal perkuliahan dari masing-masing Program Studi. j. Kemungkinan terjadinya human error karena seluruh proses dalam pembuatan jadwal masih dilakukan secara manual. k. Informasi Penjadwalan Kuliah yang terkadang sering berubah-ubah sehingga membingungkan mahasiswa dalam mengikuti KBM. 4.1.2
Penetapan Lingkup Sistem Berdasarkan identifikasi masalah yang telah dilakukan, maka akan
dikembangkan suatu Sistem Informasi Penjadwalan Mata Kuliah pada International Programs Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah Jakarta dengan batasan-batasan pengembangan seperti dijelaskan di bawah ini. 1. Proses-proses yang dilakukan dalam sistem, mencakup kegiatankegiatan berikut ini : a. Pengaturan waktu pengisian kesediaan mengajar b. Penawaran matakuliah c. Pengisian kesediaan mengajar d. Pembuatan jadwal kuliah e. Pembuatan laporan jadwal kuliah.
67
Sistem tidak dikembangkan untuk kegiatan absensi Dosen dan penghitungan honor Dosen 2. Pengguna sistem : a. Staf Akademik IP b. Kortek IP c. Dosen IP d. Mahasiswa 3. Data master yang dibutuhkan sistem : a. Dosen b. Matakuliah c. Peminatan d. Programs Studi e. Ruang Lokal dan Laboratorium 4. Tools dan Resource yang dibutuhkan sistem Sistem ini akan dikembangkan menggunakan server Apache, bahasa pemrograman PHP, database MySQL, dijalankan melalui browser dan memerlukan sambungan internet. Selain itu, penelitian ini tidak akan membahas jaringan komunikasi serta keamanan data yang terkait dengan sistem ini secara terinci. 4.1.3
Penetapan Tujuan Pengembangan Sistem Sistem Informasi Penjadwalan Kuliah ini bertujuan untuk memberikan
jalan keluar dari beberapa permasalahan yang telah diidentifikasikan sebelumnya dan meminimalisasi kemungkinan terjadinya human error serta
68
memperlancar kegiatan pembuatan jadwal kuliah. Selain itu, pengembangan sistem ini dimaksudkan guna membantu bagian Kortek IP dalam pembuatan jadwal perkuliahan yang selama ini masih menggunakan sistem manual dengan bantuan aplikasi Microsoft Excel sebagai perangkat penyimpanan data dan mengandalkan kapasitas bagian Kortek IP untuk membuat jadwal kuliah. Pengembangan Sistem Informasi Penjadwalan Kuliah ini ditujukan untuk bagian Kortek IP sebagai pengguna utama dalam sistem ini. Pengguna lain yang terkait dalam penggunaan sistem ini adalah Staf Akademik sebagai pembuat pengatur penjadwalan bagi para Dosen, Dosen untuk memberikan kesediaan mengajar sebagai data dalam pembuatan jadwal kuliah. Mahasiswa sebagai pengguna jadwal kuliah dalam hal pelaksanaan Kegiatan Belajar Mengajar (KBM). 4.2
Analisa Sistem (Analysis) 4.2.1
Analisa Gambaran Umum Prodi SI dan TI 4.2.1.1
Prodi SI dan TI 1. Visi dan Misi a. Visi Memposisikan International Programs Jurusan Teknik Informatika dan Sistem Informasi sebagai lembaga terkemuka dalam pengembangan teknik informatika dan sistem informasi yang terintegrasi pada nilai ke-Islaman.
69
b. Misi 1) Menghasilkan lulusan yang profesional dalam bidang teknik informatika dan sistem informasi dan memiliki keunggulan kompetitif dalam persaingan global 2) Memberikan landasan moral dan pencerahan dalam pembinaan iman dan taqwa 3) Memberikan
kontribusi
dalam
penerapan
teknik
informatika dan sistem informasi terhadap peningkatan kualitas hidup masyarakat 4) Mengadakan penelitian dan pengembangan di bidang teknik informatika dan sistem informasi. 2. Tujuan a. Tujuan Umum Tujuan umum Jurusan Tehnik Informatika dan Sistem Informasi ini adalah menghasilkan sarjana komputer yang menguasai konsep pengembangan perangkat lunak dan penerapan
teknologi
informasi,
menguasai
konsep
dan
memiliki keahlian dalam teknik perancangan sistem informasi secara sistematis, mampu mengelola dan mengembangkan teknologi informasi yang menjadi salah satu kebutuhan utama di lingkungan organisasi atau perusahaan saat ini, sehingga terciptalah sarjana muslim yang kompeten dalam keilmuan dan teknologi secara profesional dan global.
70
b. Tujuan Khusus Tujuan khusus Jurusan Tehnik Informasi dan Sistem Informasi ini adalah menghasilkan lulusan yang : 1) Memiliki pemahaman yang tinggi tentang konsep ilmu komputer, pengembangan perangkat lunak dan perangkat keras, serta teknologi informasi 2) Memiliki
wawasan
pemanfaatan
komputer
dalam
berbagai bidang aplikasi yang berhubungan dengan perangkat lunak, serta menguasai metode dan teknik menyelesaikan masalah dengan bantuan komputer 3) Mampu menghasilkan rancang bangun sistem perangkat lunak berbasis komputer, serta mampu melakukan dan mengembangkan kegiatan penelitian dalam berbagai bidang sistem informasi 4) Memiliki daya analisis dan kreativitas yang tinggi dalam memecahkan permasalahan-permasalahan di bidang ilmu komputer, informasi, serta teknologi informasi sehingga mampu bersaing di pasar kerja global 5) Memiliki kemampuan bekerja, mampu mengembangkan diri, baik sebagai “policy maker” yang handal maupun sebagai wirausaha yang mumpuni, berakhlak dan berbudi luhur
71
6) Mampu menghadapi situasi-situasi baru dalam profesinya sebagai sarjana komputer yang dilandasi prinsip – prinsip fundamental secara mandiri, disertai rasa percaya diri dan pertimbangan yang mantap 7) Mempunyai motivasi untuk mengikuti perkembangan ilmu pengetahuan dan teknologi secara intelektual, sosial dan cultural 8) Memberikan pelayanan sosial kepada masyarakat agar peran UIN Syarif Hidayatullah Jakarta dapat dirasakan oleh masyarakat luas dengan memberikan berbagai macam variasi pilihan program studi yang ditawarkan UIN Syarif Hidayatullah Jakarta 4.2.2
Definisi Sistem Berjalan International Program Penjadwalan yang ada di International Program dapat dikatakan baik,
karena sudah menggunakan komputerisasi. Namun masih belum teraplikatif, juga dalam proses penjadwalan kuliah belum begitu efektif dan efisien karena setiap mata kuliah dan dosen belum mempunyai database. Sehingga data-data mata kuliah terkadang masih banyak yang redudancy, terkadang masih ada kesamaan dosen pengajar dan penggunaan ruangan dalam Kegiatan Belajar Mengajar (KBM) serta tidak adanya suatu sistem yang dapat mengorganisir kedua program studi tersebut dalam pembuatan jadwal.
72
4.2.3
Analisa Sistem Berjalan Analisis dan pemahaman sistem yang berjalan merujuk pada manual
Standard Operating Procedur (SOP) penjadwalan kuliah yang menjadi pedoman bagi Kortek IP dalam melakukan penjadwalan perkuliahan. prosedur penjadwalan ini harus dikoordinasikan dengan bagian Akademik Fakultas Sains dan Teknologi. Pihak yang terkait dalam pembuatan jadwal kuliah di Program studi SI dan TI sebagai berikut: 1. Kortek IP 2. Dosen IP 3. Akademik Fakultas Sains dan Teknologi 4. Mahasiswa SOP Penjadwalan kuliah pada sistem yang berjalan di International Program, digambarkan sebagai berikut:
Gambar 4.1 Standard Operation Prosedure (SOP) yang sedang berjalan.
73
Berikut ini
adalah penjelasan sistem
penjadwalan kuliah sedang
berjalan seperti yang sudah digambarkan sebelumnya. 1. Kortek IP membuat daftar penawaran matakuliah dalam semester tertentu pada International Program. 2. Staf Akademik IP membuat form kesediaan mengajar Dosen IP dan menduplikasikan daftar matakuliah yang ditawarkan dalam satu semester dan pemberitahuan jangka waktu pengumpulan kesediaan mengajar, kemudian membagikan pada dosen. 3. Dosen IP membaca daftar mata kuliah yang ditawarkan dan memilih mata kuliah yang diajarkan sesuai dengan keahliannya, dan mengisi form kesediaan mengajar, kemudian menyerahkan kembali kepada Staf Akademik IP. 4. Kortek IP menerima dan mengumpulkan semua
form kesediaan
mengajar yang telah diisi oleh Dosen IP. 5. Staf Akademik IP memeriksa kesediaan mengajar dosen yang disetujui kedalam software Microsoft Excel dan memberikan ruang yang masih kosong untuk dipergunakan dalam satu sesi kegiatan belajar mengajar. 6. Kortek IP menghitung jumlah SKS yang telah dipenuhi oleh setiap Dosen IP berdasarkan jabatan struktural dosen dan matakuliah yang diajarkannya.
74
7. Staf Akademik IP memberikan hasil validasi kesediaan mengajar dan keterangan jumlah SKS yang telah dipenuhi Dosen IP. Terdapat dua keadaan dalam hal ini: 7.a. Jika kesediaan mengajar telah divalidasi seluruhnya dan jumlah SKS telah dipenuhi oleh Dosen IP, maka nantinya Kortek IP akan memberikan jadwal perkuliahan sesuai dengan kesediaan mengajar yang telah dipilih. 7.b. Jika terdapat kesediaan mengajar yang tidak tervalidasi dan jumlah SKS
Dosen
tidak
terpenuhi,
maka
nantinya,
Kortek
IP
memberitahukan kondisi tersebut sehingga Dosen IP dapat kembali mengajukan kesediaan mengajarnya. 8. Kortek IP mengecek kembali jadwal perkuliahan yang telah dibuatnya di software Microsoft Excel 9. Staff Akademik IP melakukan pencetakan jadwal perkuliahan yang telah dibuat. 10. Kortek IP kemudian menyerahkan kepada Akademik Fakultas Sains dan Teknologi untuk dipublikasikan kepada mahasiswa. 11. Staf Akademik IP menempelkan jadwal perkuliahan di papan pengumuman. 4.2.4
Analisa Permasalahan Analisis masalah dilakukan untuk mencari penyebab dan akibat dari
masalah yang ada. Dengan analisis sebab akibat (cause and effect analysis) dapat memahami masalah sehingga mengarah pada solusi-solusi kreatif dan
75
bernilai. Input informasi pada tahapan ini adalah hasil identifikasi masalah yang terdapat pada tahap Scope Definition. Berikut ini adalah tabel yang menguraikan tentang hasil analisis masalah dan kesempatan serta tujuan dan batasan perbaikan sistem. 4.2.4.1
Analisis Kelebihan dan Kekurangan Sistem Berjalan Berdasarkan analisis sistem yang berjalan pada sistem
penjadwalan kuliah pada prodi SI dan TI, dapat diuraikan beberapa kelebihan dan kekurangan pada proses sistem yang berjalan. 1. Kelebihan Sistem a. Pendokumentasian data kesediaan mengajar tersimpan secara lengkap, karena form kesediaan mengajar dibuat diatas kertas. b. Pembuatan jadwal sudah menggunakan komputer, hanya saja penggunaan komputer tersebut sebatas penyimpanan data dan pencetakan data. 2. Kekurangan Sistem a. Jangka waktu pengumpulan kesediaan mengajar yang telah ditetapkan oleh Kortek IP tidak terlalu mengekang Dosen IP, sehingga walaupun batas waktu pengumpulan
form
kesediaan mengajar sudah lewat, masih ada saja dosen yang baru mengumpulkannya, selain itu juga , terkadang dosen yang telah menyediakan mengajar merubah data yang telah
76
diberikannya setelah jangka waktu pengumpulan kesediaan mengajar berakhir. b. Dalam menentukan penawaran matakuliah. Kortek IP mengalami kesulitan untuk mencari mata kuliah
mana
yang akan ditawarkan karena banyaknya matakuliah pada SI dan TI. c. Banyaknya penggunaan kertas untuk pendistribusian penawaran matakuliah dan form kesediaan mengajar. Penggunaan kertas juga mengakibatkan hilangnya data karena terselip, terbuang dan apabila penyimpanan kertas terlalu lama maka akan mengakibatkan kertas rapuh sehingga mudah sobek. d. Pembuatan jadwal masih dilakukan secara manual dengan memasukan data kesediaan mengajar kemudian dimasukan kedalam software Microsoft Excel, sehingga pembuatan jadwal masih mengandalkan kapasitas pembuat jadwal, yaitu Kortek IP. e. Perhitungan pemenuhan kewajiban SKS Dosen masih dilakukan secara manual, sehingga bepeluang terjadinya kesalahan menghitung. f. Karena dilakukan secara manual, maka laporan hasil pemrosesan jadwal berupa jadwal kuliah dan revisi sering kali terlambat disampaikan kepada Akademik Fakultas
77
Sains dan Teknologi, sehingga mengganggu kegiatan belajar dan mengajar mahasiswa. Tabel 4.1 Analisa Sebab Akibat Analisis Sebab dan Akibat Masalah atau
Sebab dan Akibat
Tujuan-tujuan Perbaikan Sistem Tujuan Sistem
Batasan Sistem
Kesempatan Informasi
1. Pembuatan
1. Pembuatan
1. Berita
tentang
jadwal
informasi Berita
digunakan
pengumpulan
perkuliahan
agar
untuk
kesediaan
menjadi
mengetahui
menyampaikan
mengajar dan
terhambat
informasi terbaru
informasi
matakuliah
karena
dan terkini
tentang
yang
menghubungi
ditawarkan
Dosen satu per
secara
otomatis
sulit
satu
kepada
seluruh
diberitahukan
mengetahui
Dosen
sesuai
berkaitan
kepada Dosen
informasi
dengan
Prodi
dengan
tersebut
tentang
waktu
kegiatan
harus
untuk
Dosen
2. Pengiriman email
penjadwalan kuliah ataupun hal-hal
pengumpulan
akademik
kesediaan
Prodi
mengajar
yang
untuk 2. Pengiriman
mengingatkan
email
Dosen
berdasarkan
di
78
Prodi masingmasing karena waktu pengumpulan kesediaan dan informasi matakuliah yang ditawarkan berbeda untuk setiap Prodi Waktu
1. Pembuatan
1. Pembatasan
1. Jika
dalam
pengumpulan
jadwal
waktu
keadaan
kesediaan
perkuliahan
pengumpulan
darurat
mengajar
menjadi
kesediaan
dapat mengisi
seringkali
lama
mengajar dengan
kesediaan
tidak dipatuhi
keterlambatan
tepat dan tegas
mengajar pada
lebih karena
pengumpulan
2. Pengumpulan perubahan
tidak
waktunya.
kesediaan
atau
Kortek IP yang
mengajar
kesediaan
2. Perubahan
mengajar
yang
memasukkan
kesediaan
melewati
batas
data kesediaan
mengajar yang
waktu tidak dapat
akan
mengajar
ke
79
melewati batas
diterima
dalam sistem
waktu pengumpulan kesediaan mengajar mengakibatkan terganggunya pembuatan jadwal perkuliahan Sulitnya
1. Pembuatan
1. Pembuatan
pencarian
penwaran
fasilitas
keterangan
matakuliah
pencarian
untuk
mengalami
matakuliah
matakuliah
kesulitan karena
berdasarkan kode
tertentu guna
banyaknya
matakuliah
membuat
matakuliah
nama matakuliah
penawaran
dengan
atau kurikulum
matakuliah
kurikulum berbeda
data
atau
-
80
Sulitnya
1. Validasi
1. Pembuatan
pencarian
kesediaan
fasilitan
informasi
mengajar akan
pencarian
profil
lebih
Dosen
Dosen
mudah
untuk
dilakukan
menghubungi
Dosen
Dosen apabila
dengan mudah
ada
dihubungi
yang
jika dapat
profil
berdasarkan NIDN atau NIP atau Nama
-
perlu ditanyakan tentang pengisian kesediaan mengajar Pemilihan
1. Pemilihan
1. Pembatasan
1. Jika
ada
matakuliah,
matakuliah,
jumlah
matakuliah
hari, dan sesi
hari, dan sesi
matakuliah
tertentu
pengajaran
yang lebih dari
maksimum
pada
batasan
matakuliah, hari,
oleh
satu
pengisian
mengakibatkan
dan maksimum 2
Dosen
saja,
kesediaan
sulitnya Kortek
jumlah sesi yang
maka
mengajar
IP
dapat dipilih saat
IP yang akan
yang
memvalidasi
mengisi
megisikan
dalam
2
hanya
yang diajar
Kortek
81
melampaui
kesediaan
kesediaan
kesediaan
batas pilihan
mengajar
mengajar
mengajar
2. Pembatasan hari Rabu yang tidak dapat dipilih oleh Dosen
dengan
status
kerja
pegawai tetap Pembuatan
1. Banyaknya
1. Otomatisasi
1. Pencarian
jadwal sering
jumlah
penetapan
kali
kesediaan
untuk
mengalami
mengajar yang
kesediaan
kesalahan
harus divalidasi
mengajar
dalam
menjadikan
telah tervalidasi
pemilihan
Kortek
lokal
membuat
Programs
kesalahan
Studi
IP
dalam
lokal setiap
kesediaan lokal
hanya
akan dilakukan yang
terhadap lokal yang
sesuai
dengan
2. Pencarian
penempatan
kesediaan
lokal
lokal
bagi
kesediaan
dilakukan
mengajar
berdasarkan
tertentu
kapasitas kelas
82
Validasi
1. Jika
kurang 1. Penghitungan
kesediaan
atau lebih dari
jumlah
mengajar
batasan,
pemenuhan
dosen dengan
mengakibatkan
kewajiban
status
Dosen tersebut
berdasarkan
pegawai
tidak mematuhi
jabatan struktural
tetap/kontrak
kewajibannya
yang diampu dan
yang dari
kerja
kurang 2. Jika lebih dari batas
SKS
jumlah
batas
matakuliah pada
minimum
maksimum,
kesediaan
atau lebih dari
maka
mengajar
batas
tersebut
maksimalnya
saja
Dosen dapat
telah divalidasi 2. Alert
mengurangi
kesediaan
kesempatan
mengajar
Dosen
lain
yang
apabila
yang
divalidasi
untuk
membuat jumlah
memenuhi
pemenuhan SKS
kewajiban
melampaui batas
pemenuhan SKS-nya
3. Pemberitahuan jumlah pemenuhan SKS Dosen
agar
-
83
Koordinator Teknis
Prodi
dapat mengontrol pemenuhan kewajiban
SKS
Dosen Validasi
1. Jika
melebihi 1. Penghitungan
kesediaan
batasan
jumlah
mengajar
kewajiban
pemenuhan
dosen dengan
pemenuhan
kewajiban
status
SKS,
berdasarkan
kerja
maka
SKS
pegawai tidak
Dosen tersebut
jabatan struktural
tetap
yang
menyalahi
yang diampu dan
lebih
dari
peraturan yang
jumlah
telah ditetapkan
matakuliah pada
batas maksimalnya
kesediaan mengajar
yang
telah divalidasi 2. Alert
apabila
kesediaan mengajar
yang
divalidasi membuat jumlah
-
84
pemenuhan SKS melampaui batas 3. Jika
sudah
melampaui batas kesediaan mengajar
yang
belum tervalidasi tidak akan dapat divalidasi lagi
4.2.4.2
Analisis Persyaratan system Dari hasil analisis masalah yang telah diuraikan maka dapat
dirumuskan kebutuhan dari sistem yang akan dibangun berupa pemenuhan kebutuhan sistem baik secara functional maupun non functional.
4.2.4.2.1 Functional Requirement (Persyaratan Fungsional) Beberapa kebutuhan fungsional yang digunakan dalam sistem. a. Pengembangan perangkat lunak, sistem menggunakan PHP dan dijalankan menggunakan server apache. b. Menggunakan cara penginputan yang mudah dilakukan yaitu karena menggunakan keyboard dan mouse.
85
c. Penginputan khususnya untuk penetapan jangka waktu pengisian kesediaan mengajar, penawaran matakuliah, kesediaan mengajar, dan pembuatan jadwal kuliah menggunakan form yang terdapat pada sistem. d. Metode pemrosesan data yang diterapkan adalah dengan menggunakan hubungan client-server melalui layanan internet. e. Software database menggunakan
MySQL. Untuk
pengaksesan data digunakan software phpMyAdmin dan navicat premium. f. Data akan disimpan dalam database sistem diantaranya: 1. Data Master, seperti: dosen, matakuliah, peminatan, Programs studi, ruang. 2. Data penawaran Matakuliah 3. Data kesediaan mengajar 4. Data jadwal.
4.2.4.2.2 Nonfunctional
Requirement
(Persyaratan
Nonfungsional) Beberapa kebutuhan nonfungsional yang dibutuhkan oleh sistem, yaitu : a. Mempermudah Kortek IP untuk memberitahukan matakuliah yang ditawarkan kepada Dosen IP.
86
b. Mempermudah Dosen IP untuk mengetahui mata kuliah yang ditawarkan untuk semester tertentu. c. Mempermudah Dosen untuk melakukan pengisian kesediaan mengajar dosen sehingga meminimalisir penggunaan kertas yang digunakan sebagai form kesediaan mengajar. d. Mempermudah Kortek IP memvalidasi kesediaan mengajar dosen. e. Mempermudah Kortek IP melakukan penghitungan jumlah SKS yang telah dipenuhi oleh Dosen. f. Mempermudah Kortek IP membuat jadwal perkuliahan dengan otomatisasi sistem dalam hal pengecekan benturan hari, sesi, dan lokal/laboratorium. g. Mempercepat pembuatan laporan jadwal kuliah sebagai hasil dari
proses
pembuatan
jadwal
yang
nantinya
akan
diberitahukan kepada Mahasiswa 4.2.5
Analisa Sistem Usulan Mereferensi dari kelebihan dan kekurangan sistem yang saat ini sedang
berjalan pada International Programs serta kebutuhan sistem yang akan dikembangkan, berikut ini digambarkan SOP sistem yang diusulkan.
87
Gambar 4.2 Standard Operation Prosedure (SOP) yang diusulkan Berikut ini adalah penjelasan tentang SOP Sistem Informasi Penjadwalan Kuliah yang diusulkan 1. Staf Akademik IP melakukan pengaturan waktu pengumpulan kesediaan
mengajar
dan
mengirimkan
informasi
waktu
pengumpulan kesediaan mengajar melalui email juga memilih mata kuliah yang akan ditawarkan dalam satu semester tertentu, berdasarkan kurikulum tertentu. Pemilihan mata kuliah diambil dari data yang terdapat dalam database master mata kuliah. 2. Dosen IP melihat mata kuliah apa saja yang ditawarkan dalam satu semester dalam tahun ajaran yang sedang aktif juga mengisi kesediaan mengajar dosen ke system. 3. Kortek IP melakukan pengecekan terhadap kesediaan mengajar yang telah dimasukkan Dosen IP, kemudian kesediaan mengajar yang disetujui divalidasi. a. Jika Kesediaan mengajar dosen tervalidasi atau kewajiban pemenuhan SKS Dosen sesuai, maka dapat dibuat jadwalnya.
88
b. Jika kesediaan mengajar dosen tidak divalidasi atau kewajiban pemenuhan SKS Dosen belum terpenuhi, maka tidak dapat dibuat jadwalnya. 4. Kortek IP memeriksa jumlah pemenuhan kewajiban SKS Dosen. Apabila masih ada Dosen yang pemenuhan kewajiban SKS-nya masih kurang maka Kortek IP dapat memvalidasi kesediaan mengajar Dosen tersebut yang belum divalidasi. 5. Kemudian Staf Akademik IP membuat jadwal perkuliahan 6. Setelah itu Mahasiswa melihat jadwal perkuliahan yang telah dibuat 4.2.5.1 Analisis Kebaikan Sistem yang Diusulkan Berdasarkan SOP yang diusulkan berikut ini dilakukan analisis terhadap kebaikan usulan sistem tersebut secara lebih detail, yaitu: a. Sudut Pandang Bisnis Ruang lingkup bisnis Sistem Informasi Penjadwalan Kuliah adalah mendukung seluruh kegiatan dalam pembuatan penjadwalan kuliah Program SI dan TI. b. Sudut Pandang Operasional 1. Ketersediaan dan Kehandalan Sistem informasi penjadwalan kuliah tersedia bagi pengguna selama 24 jam 7 hari kerja untuk mendukung fungsi-fungsi di dalamnya, khusus untuk pengisian kesediaan mengajar bagi Dosen
89
hanya difungsikan selama jangka waktu pengisian kesediaan mengajar yang telah ditentukan oleh Kortek IP. 2. Reformasi Sistem Informasi Penjadwalan kuliah menyediakan pemakaian multi-user dan tetap digunakan dalam kondisi yang melibatkan jumlah kegiatan dalam sistem dalam jumlah yang banyak tanpa mengganggu stabilitas sistem. 3. Pelatihan Pengguna Sistem Informasi Penjadwalan Kuliah dapat digunakan oleh seluruh pengguna dengan melalui pelatihan menggunakan user manual. c. Sudut Pandang Pengguna 1. Akses Pengguna Sistem informasi penjadwalan kuliah merupakan sebuah sistem yang berjalan pada jaringan komputer dengan memanfaatkan internet. 2. Mudah untuk digunakan oleh pengguna sistem informasi penjadwalan produksi mudah digunakan dan user friendly. d. Sudut pandang keamanan Kebutuhan akses kontrol dari sistem informasi penjadwalan kuliah meliputi:
90
1. Seluruh pengguna yang dapat login kedalam sistem informasi penjadwalan kuliah harus didaftar oleh Staf Akademik IP. 2. Akses pengguna untuk setiap fungsi didalam sistem informasi penjadwalan kuliah akan ditentukan oleh Kortek IP. 3. Jika pengguna gagal dalam memasukan password yang benar, maka pengguna tidak dapat menggunakan sistem. 4.2.5.2 Analisa Perbandingan Sistem Tabel 4.2 Analisa Perbandingan Sistem Sistem Berjalan
Kekurangan
Sistem dari Literatur Sejenis
- Redudansi data
- Sistem belum
- Masih menggunakan
teraplikatif
banyak kertas
- Sudah terkomputerisasi
- Sudah terkomputerisasi
Sistem yang diusulkan
-
- Sudah terkomputerisasi dan sudah teraplikatif - Sudah tidak ada
Kelebihan
Redudansi data - Sudah tidak menggunakan kertas lagi untuk mengatur penjadwalan
91
4.3
Perancangan Sistem (Design) 4.3.1
UseCase Diagram 4.3.1.1 Identifikasi Pelaku (actor) Bisnis Pada tabel berikut ini akan dijabarkan daftar pelaku yang terlibat dalam Sistem Informasi Penjadwalan Kuliah beserta deskripsi tentang masing-masing pelaku yang ada. Tabel 4.3 Identifikasi Pelaku (Actor)
No 1
Pelaku (Actor) Staf Subbag Akademik
Deskripsi Orang yang mengontrol pengaturan sistem dan mengisi berita Orang yang membuat penawaran mata kuliah, memvalidasi kesediaan mengajar
2
Koordinator Teknis IS/CS
dosen, melakukan pengecekan terhadap pemenuhan SKS dosen dan membuat jadwal perkuliahan serta merupakan super user pada sistem
3
4
Dosen SI/TI
Mahasiswa
Orang-orang
yang
meng-input
data
kesediaan mengajar ke dalam sistem Orang yang menerima laporan jadwal perkuliahan
92
4.3.2 Pembuatan Usecase Model Diagram Setelah usecase dan actor teridentifikasi, usecase model diagram digunakan untuk menggambarkan secara grafis lingkup dan batasan sistem Tabel 4.4 Identifikasi UseCase No
Nama Usecase
Deskripsi
Pelaku yang berpartisipasi
Usecase menggambarkan 1
Login
kegiatan login ke dalam sistem
Staf Subbag
dengan memasukkan data
Akademik, Kortek
pengguna untuk diverifikasi
IP, Dosen IP
oleh sistem Membuat 2
Pengaturan Penjadwalan
Usecase menggambarkan kegiatan membuat pengaturan
Staf Subbag
jangka waktu pengumpulan
Akademik
kesediaan mengajar dosen Usecase menggambarkan
3
Mengelola
kegiatan membuat berita
Staf Subbag
Berita
sebagai media informasi kepada
Akademik
pengguna sistem Mengelola 4
Daftar Mata Kuliah Mengelola
5
Penawaran Mata Kuliah Melihat
6
Pemenuhan SKS Dosen
Usecase menggambarkan kegiatan memasukkan Daftar Mata Kuliah
Kortek IP
Usecase menggambarkan kegiatan memasukkan daftar matakuliah yang ditawarkan untuk semester tertentu sesuai Prodi masing-masing
Kortek IP
Usecase menggambarkan kegiatan melihat jumlah pemenuhan kewajiban SKS yang telah dipenuhi
Kortek IP
93
Membuat 7
Jadwal Perkuliahan Mengelola
8
Kesediaan Mengajar Melihat
9
Penawaran Mata Kuliah
10
Melihat Jadwal Perkuliahan
Usecase menggambarkan kegiatan membuat jadwal Kortek IP perkuliahan dalam satu semester tertentu Usecase menggambarkan kegiatan memasukkan data kesediaan mengajar ke dalam sistem
Kortek IP dan Dosen IP
Usecase menggambarkan kegiatan melihat Penawaran Daftar Mata Kuliah yang ditawarkan untuk semester tertentu bagi masing-masing Prodi
Kortek IP, Mahasiswa, Dosen IP dan Staf Akademik IP
Usecase menggambarkan kegiatan melihat jadwal perkuliahan semester tertentu
Kortek IP, Dosen IP dan Mahasiswa
Berikut ini adalah gambaran dari usecase model diagram Sistem Informasi Penjadwalan Kuliah.
94
Penjadwalan IP login
membuat pengaturan penjadwalan
Staff Akademik IP
mengelola berita
mengelola daftar mata kuliah
mengelola penawaran mata kuliah
Dosen IP
Pegawai International Program
mengelola kesediaan mengajar
Kortek IP
melihat penawaran mata kuliah
melihat pemenuhan sks dosen
membuat jadwal perkuliahan
mahasiswa
melihat jadwal perkuliahan
Gambar 4.3 UseCase Diagram 4.3.3
Narative Use Case Diagram Narasi usecase merupakan pemaparan naratif penjelasan tentang
kegiatan yang dilakukan oleh actor dan respon yang diberikan oleh sistem sesuai dengan yang terjadi pada perangkat lunak Sistem Informasi Penjadwalan Kuliah Berikut ini adalah narasi usecase dari Sistem Informasi Penjadwalan Kuliah
95
Tabel 4.5 Narasi Usecase Diagram Login Use Case Name Use Case ID Actor Description Precondition Trigger
Typical Course of Events
Alternate Course Conclusion Post Condition
Login 1 Staf Akademik IP, Kortek IP, Dosen IP Usecase menggambarkan kegiatan login ke dalam sistem dengan memasukkan data pengguna untuk diverifikasi oleh system Seorang Staf Akademik IP, Kortek IP dan Dosen IP ingin melakukan login ke sistem harus mengakses terlebih dahulu url sistem tersebut Usecase ini dilakukan setelah actor membuka url http://localhost/ pada browser Actor Action System Response 1. Klik menu "Login" 2. Menampilkan halaman Login 3. Input Username, Password, dan program studi 5. Sistem mengecek apakah username, password, 4. Klik tombol "Login" dan program studi telah dimasukkan 6. Verifikasi data pengguna dan cek role pengguna ke tabel sys_user 7. Jika data pengguna terdapat dalam database maka sistem akan menampilkan alert, Login berhasil 9. Menampilkan halaman home dengan tampilan 8. Klik tombol "OK" menu sesuai role pengguna 4. Klik tombol "Reset" 5. Sistem menghapus nama pengguna dan password yang telah diketikkan di form Login 7. Jika nama pengguna dan password tidak terdapat dalam database, sistem menampilkan alert, Username dan/atau password salah Actor berhasil login ke dalam system Actor telah berada pada halaman Utama
Tabel 4.6 Narasi Usecase Membuat Pengaturan Penjadwalan Use Case Name Use Case ID Actor Description Precondition Trigger Typical Course of Events
Membuat Pengaturan Penjadwalan 2 Staf Akademik IP Usecase menggambarkan kegiatan membuat pengaturan jangka waktu pengumpulan kesediaan mengajar dosen Seorang Staf Akademik IP ingin melakukan pengaturan waktu pengumpulan kesediaan mengajar harus login terlebih dahulu ke dalam system Melakukan login Actor Action System Response 1. Klik menu "Pengaturan 2. Menampilkan sub menu "Membuat Pengaturan Penjadwalan" Penjadwalan Baru" 3. Klik sub menu "Membuat Pengaturan Penjadwalan 4. Menampilkan halaman Pengaturan Aplikasi Baru" Penjadwalan
96
Alternate Course Conclusion Post Condition
5. Kemudian memasukkan tahun akademik, semester akademik, tanggal buka dan tutup kesediaan mengajar, status 6. Kemudian klik simpan 5. Jika terdapat kesalahan pengisian data pengaturan waktu pengumpulan kesediaan mengajar, maka data tersebut tidak dapat tersimpan ke dalam database Data pengaturan waktu pengumpulan kesediaan mengajar telah berhasil dimasukkan kedalam database sys_setting Data pengaturan telah bertambah pada list pengaturan pengumpulan kesediaan mengajar
Tabel 4.7 Narasi Usecase Mengelola Berita Use Case Name Use Case ID Actor Description Precondition Trigger
Typical Course of Events
Alternate Course Conclusion Post Condition
Mengelola berita 3 Staf Akademik IP Usecase menggambarkan kegiatan membuat berita sebagai media informasi kepada pengguna system Seorang Staf Akademik IP ingin membuat berita harus login terlebih dahulu ke dalam system Usecase ini dilakukan setelah melakukan login ke dalam system Actor Action System Response 1. Usecase terinisiasi saat actor 2. Untuk setiap data berita, cek kebenaran memasukkan detail informasi berita pengisian data tersebut 3. Jika seluruh data berita yang baru telah diisi dengan benar, simpan data berita ke dalam database 4. Usecase berakhir saat actor telah berhasil membuat berita baru ke dalam system 3. Jika terdapat data berita yang belum diisi dengan benar, tidak dapat menyimpan ke dalam database Data berita baru telah berhasil dibuat dan disimpan ke dalam tabel sys_news Data berita baru ditampilkan pada list berita
Tabel 4.8 Narasi Usecase Mengelola Daftar Mata Kuliah Use Case Name Use Case ID Actor Description Precondition Trigger Typical Course of Events
Mengelola Daftar Mata Kuliah 4 Kortek IP Usecase menggambarkan kegiatan memasukkan Daftar Mata Kuliah Usecase ini bisa dilakukan setelah Kortek IP melakukan login terlebih dahulu Usecase ini bisa digunakan setelah login untuk bisa mengelola Daftar Mata Kuliah Actor Action System Response 1. Klik Menu "Daftar Mata 2. Kemudian sistem akan menampilkan sub menu Kuliah" "Tambah Data Mata Kuliah" 3. Klik sub menu "Tambah
4. Kemudian Isi Data Mata Kuliah
97
Data Mata Kuliah" Alternate Course Conclusion Post Condition
5. Kemudian klik tombol "Simpan" 5. Jika banyak kesalahan pada saat memasukkan Data Mata Kuliah klik tombol "Reset" Daftar Mata Kuliah telah berhasil dibuat dan disimpan ke dalam database Daftar Mata Kuliah akan ditampilkan pada daftar list Daftar Mata Kuliah
Tabel 4.9 Narasi Usecase Mengelola Penawaran Mata Kuliah Use Case Name Use Case ID Actor Description Precondition Trigger
Typical Course of Events
Alternate Course Conclusion Post Condition
Mengelola Penawaran Matakuliah 5 Kortek IP Usecase menggambarkan kegiatan memasukkan daftar matakuliah yang ditawarkan untuk semester tertentu sesuai Prodi masing-masing Seorang Kortek IP ingin membuat daftar matakuliah yang ditawarkan harus login terlebih dahulu ke dalam system Usecase ini dilakukan setelah pengaturan pengumpulan kesediaan mengajar dibuat Actor Action System Response 2. Maka akan muncul list 1. Klik menu "Penawaran Mata Kuliah" penawaran mata kuliah 3. Pilih semester akademik yang aktif Gasal atau Genap 4. Isi Data Mata Kuliah yang ditawarkan setiap semester 4. Usecase berakhir saat actor telah berhasil memilih matakuliah yang ditawarkan 4. Jika terdapat kesalahan pengisian data matakuliah yang ditawarkan, maka data tersebut tidak dapat tersimpan ke dalam database Matakuliah yang ditawarkan telah berhasil dipilih Data matakuliah yang ditawarkan sudah bertambah pada list penawaran matakuliah
Tabel 4.10 Narasi Usecase Mengelola Kesediaan Mengajar Use Case Name Use Case ID Actor Description Precondition Trigger Typical Course of Events
Mengelola Kesediaan Mengajar 6 Kortek IP dan Dosen IP Usecase menggambarkan kegiatan memasukkan data kesediaan mengajar ke dalam system Seorang Kortek IP dan Dosen IP ingin mengisi kesediaan mengajar sesuai penawaran matakuliah Usecase ini dilakukan setelah melihat penawaran matakuliah Actor Action System Response 1. Klik menu "Kesediaan 2. Kemudian akan muncul sub menu "Isi Form Mengajar" Kesediaan Mengajar" 3. Klik sub menu "Isi Form 4. Maka akan muncul list mata kuliah yang Kesediaan Mengajar" ditawarkan 5. Untuk setiap kesediaan mengajar yang dimasukkan, cek kebenaran pengisian data tersebut
98
6. Jika seluruh data kesediaan mengajar yang dipilih benar, simpan data penawaran matakuliah ke dalam database
7. Usecase berakhir saat actor telah berhasil memilih kesediaan mengajar 5. Jika terdapat kesalahan pengisian data kesediaan mengajar, maka data tersebut tidak dapat tersimpan ke dalam database Data kesediaan mengajar telah berhasil di-input-kan
Alternate Course Conclusion Post Condition
Data kesediaan mengajar telah bertambah pada list kesediaan mengajar
Tabel 4.11 Narasi Usecase Melihat Penawaran Mata Kuliah Use Case Name Use Case ID Actor Description Precondition Trigger
Typical Course of Events
Alternate Course Conclusion Post Condition
Melihat Penawaran Matakuliah 7 Kortek IP, Mahasiswa, Dosen IP dan Staf Akademik IP Usecase menggambarkan kegiatan melihat Penawaran Daftar Mata Kuliah yang ditawarkan untuk semester tertentu bagi masing-masing Prodi Seorang Actor yang ingin melihat Penawaran Mata Kuliah yang ditawarkan dengan mengakses url system Usecase ini dilakukan setelah Daftar Mata Kuliah yang ditawarkan telah dipilih dan dimasukkan ke dalam database Actor Action System Response 1. Usecase terinisiasi saat actor 2. Kemudian akan muncul tampilan list mengakses menu penawaran matakuliah pencarian 3. Untuk melakukan pencarian bisa melakukan kata kunci seperti Tahun Akdemik dan Semester Akademik 4. Usecase selesai saat list penawaran matakuliah telah ditampilkan dan dapat dilihat oleh actor Actor telah berhasil melihat penawaran matakuliah List penawaran matakuliah dapat ditampilkan
Tabel 4.12 Narasi Usecase Melihat Pemenuhan SKS Dosen Use Case Name Use Case ID Actor Description Precondition Trigger
Melihat Pemenuhan SKS Dosen 8 Kortek IP Usecase menggambarkan kegiatan melihat jumlah pemenuhan kewajiban SKS yang telah dipenuhi Seorang Kortek IP ingin melihat jumlah pemenuhan SKS dengan mengakses url sistem telebih dahulu Usecase ini dilakukan setelah jadwal perkuliahan dibuat
99
Typical Course of Events Alternate Course Conclusion Post Condition
Actor Action 1. Usecase terinisiasi saat actor mengakses menu lihat pemenuhan SKS 3. Usecase selesai saat jumlah atau list pemenuhan SKS telah ditampilkan dan dapat dilihat oleh actor
System Response 2. Menampilkan jumlah atau list pemenuhan SKS
Actor telah berhasil melihat jumlah atau list pemenuhan SKS Jumlah atau list pemenuhan SKS dapat ditampilkan
Tabel 4.13 Narasi Usecase Membuat Jadwal Perkuliahan Use Case Name Use Case ID Actor Description Precondition Trigger
Typical Course of Events
Alternate Course Conclusion Post Condition
Membuat Jadwal Perkuliahan 9 Kortek IP Usecase menggambarkan kegiatan membuat jadwal perkuliahan dalam satu semester tertentu Seorang Kortek IP ingin membuat jadwal perkuliahan harus login terlebih dahulu ke dalam sistem Usecase ini dilakukan setelah seluruh kesediaan mengajar dimasukkan, dan waktu pengumpulan kesediaan mengajar telah berkahir Actor Action System Response 1. Usecase terinisiasi saat actor memilih 2. Jika terdapat Dosen yang memilih semester dan matakuliah yang akan dibuat matakuliah tersebut, maka menampilkan jadwalnya kesediaan mengajar 3. Validasi kesediaan mengajar 4. Mengecek kesediaan hari, sesi dan kelas 5. Jika kesediaan hari, sesi dan kelas ditemukan, maka kesediaan mengajar dibuat jadwalnya 6. Usecase berakhir saat actor telah berhasil memvalidasi kesediaan mengajar dan membuat jadwal 2. Jika terdapat Dosen yang memilih matakuliah tersebut, maka kesediaan mengajar tidak ditampilkan 5. Jika kesediaan hari, sesi dan kelas tidak ditemukan, tidak dapat dibuat jadwalnya Data kesediaan mengajar telah berhasil divalidasi dan jadwal telah berhasil dibuat Data kesediaan mengajar yang tervalidasi telah berubah statusnya
Tabel 4.14 Narasi Usecase Melihat Jadwal Perkuliahan Use Case Name Use Case ID Actor Description
Melihat Jadwal Perkuliahan 10 Kortek IP, Dosen IP dan Mahasiswa Usecase menggambarkan kegiatan melihat jadwal perkuliahan semester tertentu
100
Precondition Trigger Typical Course of Events Alternate Course Conclusion Post Condition
4.3.4
Seorang Akd. International Programs Prodi SI/TI ingin melihat daftar matakuliah yang ditawarkan dengan mengakses url sistem terlebih dahulu Usecase ini dilakukan setelah jadwal perkuliahan dibuat Actor Action System Response 1. Usecase terinisiasi saat actor mengakses menu lihat jadwal 2. Menampilkan list jadwal perkuliahan 3. Usecase selesai saat list jadwal perkuliahan telah ditampilkan dan dapat dilihat oleh actor Actor telah berhasil melihat jadwal perkuliahan List jadwal perkuliahan dapat ditampilkan
Activity Diagram Berikut ini digambarkan activity diagram yang memperlihatkan alur
jalannya Sistem Informasi Penjadwalan Kuliah dan memperlihatkan siapa saja yang bertanggung jawab terhadap setiap tahap yang dilakukan
101
Gambar 4.4 Activity Diagram
102
Proses selanjutnya yang dilakukan adalah input penawaran matakuliah, dimana Kortek IP memasukkan daftar matakuliah yang akan ditawarkan untuk diajarkan pada tahun ajaran dan semester tertentu berdasarkan kurikulum tertentu untuk masing-masing angkatan. Setelah penawaran matakuliah tersebut dibuat, maka penawaran tersebut dapat dilihat oleh seluruh actor pengguna sistem dengan kegunaan masing-masing. Bagi Kortek IP melihat penawaran matakuliah dilakukan untuk mengawasi pengisian kesediaan mengajar dan pemilihan matakuliah yang akan diajarkan dalam KBM. Bagi Dosen IP melihat penawaran matakuliah dilakukan untuk mengetahui matakuliah apa saja yang dapat diajarkannya. Bagi Mahasiswa melihat penawaran matakuliah digunakan untuk mengetahui matakuliah apa saja yang akan dilakukan dalam proses KBM. Proses selanjutnya adalah input kesediaan mengajar. Proses ini seharusnya dilakukan oleh Dosen IP setelah melakukan login terlebih dahulu. Namun, apabila terdapat Dosen IP yang mempunyai alasan darurat sehingga tidak dapat mengisi sendiri kesediaan mengajarnya, maka Kortek IP dapat melakukan input kesediaan mengajar untuk Dosen IP tersebut. Setelah batas akhir pengumpulan kesediaan mengajar berakhir, Kortek IP akan melakukan create jadwal perkuliahan. Hal yang perlu dilakukan oleh Kortek IP hanyalah memvalidasi kesediaan mengajar Dosen IP. Kemudian jika kesediaan mengajar tersebut telah tervalidasi hal yang perlu dilakukan adalah memilih kelas yang akan diajarkan Dosen IP tersebut dan kapasitas
103
jumlah siswa dari kelas tersebut, maka dengan sendirinya sistem akan mengecek ketersediaan mengajar seperti yang diajukan Dosen IP dan mengecek lokal yang dapat ditempati. Jika seluruh matakuliah yang ditawarkan telah dibuatkan jadwalnya, maka jadwal kuliah dapat dilihat oleh seluruh actor. Jadwal yang telah dibuat digunakan sebagai dasar penghitungan kewajiban pemenuhan SKS yang telah dipenuhi Dosen IP berdasarkan kesediaan mengajar yang tervalidasi dan jabatan strutktural Dosen IP tersebut. Kortek IP akan memeriksa pemenuhan kewajiban SKS tersebut dan apabila terdapat Dosen IP yang masih belum memenuhi kewajibannya, maka Kortek IP akan menghubingi Dosen IP tersebut untuk membuatkan jadwal perkuliahan tambahan bagi Dosen IP tersebut. 4.3.5
Class Diagram Visualisasi dari struktur object sistem yang diajukan, digambarkan
dalam class diagram. Adapun langkah-langkah untuk menentukan object yang terlibat adalah sebagai berikut : a. Menemukan Potencial Object Dari narasi usecase analysis, didapatkan sejumlah potencial object berikut : Tabel 4.15 Daftar Potencial Object Login Kortek IP Dosen Dosen IP Username Password
Penawaran matakuliah Matakuliah List penawaran matakuliah Tahun Akademik Semester Akademik Sch_penawaran_matakuliah
104
Core_matakuliah Pengguna Hari Sesi Sch_kesediaan_mengajar Jadwal perkuliahan Jadwal Semester Kelas Kapasitas Sch_jadwal Status kesediaan mengajar List jadwal perkuliahan Pemenuhan SKS Status dosen Total pemenuhan SKS
Program Studi List matakuliah yang telah dipilih Role Pengguna Sys_User Kesediaan mengajar Setting Site Setting Tahun Akademik Aktif Semester Akademik Aktif Tanggal Buka Kesediaan Mengajar Tanggal Tutp Kesediaan Mengajar Bahasa Status Sys_Setting Daftar Site Setting Mahasiswa Akademik Fakultas Sains dan Teknologi b. Menyeleksi Object yang diusulkan
Dari daftar potencial object diatas, maka dilakukan analisa untuk memilih object Tabel 4.16 Penyeleksian Object Potencial Object
#
Reason
Login
X
Tidak sesuai
Kortek IP
X
Jenis role user
Dosen
Tabel DOSEN
Dosen IP
X
Jenis role user
Username
X
Atribut Tabel USER
Password
X
Atribut Tabel USER
Program Studi
Tabel PROGRAM STUDI
Pengguna
Tabel USER
Role Pengguna
Tabel ROLE
Sys_User
X
Tabel USER
105
Kesediaan Mengajar
Tabel KESEDIAAN MENGAJAR
Setting
Tabel SETTING
Site Setting
X
Tabel SETTING
Tahun Akademik Aktif
X
Atribut Tabel SETTING
Semester Akademik Aktif
X
Atribut Tabel SETTING
Tanggal Buka Kesediaan Mengajar
X
Atribut Tabel SETTING
Tanggal Tutup Kesediaan Mengajar
X
Atribut Tabel SETTING
Bahasa
X
Atribut Tabel SETTING
Status
X
Atribut Tabel SETTING
Sys_setting
X
Tabel SETTING
Daftar Site Setting
X
Tidak Sesuai
Mahasiswa
X
Tidak Sesuai
Akademik Fakultas Sains dan Teknologi
X
Tidak Sesuai
Penawaran Matakuliah
Tabel PENAWARAN MATAKULIAH
Matakuliah
Tabel MATAKULIAH
List penawaran matakuliah
X
Tidak Sesuai
Tahun Akademik
X
Atribut Tabel PENAWARAN MATAKULIAH
Semester Akademik
X
Atribut Tabel PENAWARAN MATAKULIAH
Sch_penawaran_matakuliah
X
Tabel PENAWARAN MATAKULIAH
Core_matakuliah
X
Tabel MATAKULIAH
List matakuliah yang telah dipilih
X
Tidak Sesuai
Hari
X
Atribut Tabel KESEDIAAN MENGAJAR
Sesi
X
Atribut Tabel KESEDIAAN MENGAJAR
Sch_kesediaan_mengajar
X
Tabel KESEDIAAN MENGAJAR
Jadwal perkuliahan
Tabel JADWAL PERKULIAHAN
Jadwal
X
Tabel JADWAL PERKULIAHAN
Semester
X
Atribut Tabel JADWAL PERKULIAHAN
106
Kelas
X
Atribut Tabel JADWAL PERKULIAHAN
Kapasitas
X
Atribut Tabel JADWAL PERKULIAHAN
Sch_jadwal
X
Tabel JADWAL PERKULIAHAN
Status kesediaan mengajar
X
Atribut Tabel KESEDIAAN MENGAJAR
List jadwal perkuliahan
X
Tidak Sesuai
Pemenuhan SKS
X
Tidak Sesuai
Status Dosen
X
Atribut Tabel DOSEN
Total Pemenuhan SKS
X
Tidak Sesuai
Dari analisa di atas, didapatkan object yang terkait dengan sistem yang diajukan Tabel 4.17 Daftar Object Daftar Proposed Object Dosen Program Studi Pengguna Role Pengguna Kesediaan Mengajar Setting Penawaran Matakuliah Matakuliah Jadwal Perkuliahan
Daftar Object Tambahan Peminatan Ruang News
c. Membuat Class Diagram Dari daftar object di atas dibuat struktur object sistem dengan penggambaran class diagram. Penulis melakukan perubahan namanama obyek tersebut pada class diagram tanpa merubah hal lain pada obyek tersebut demi kerapihan dan ketidak ambiguan nama tabel dalam database yang akan di-generate dari class diagram. Berikut adalah perubahan nama tersebut :
107
1) Dosen menjadi core_dosen 2) Program studi menjadi core_program_studi 3) Pengguna menjadi sys_user 4) Role pengguna menjadi sys_role 5) Kesediaan mengajar menjadi sch_kesediaan_mengajar 6) Setting menjadi sys_setting 7) Penawaran matakuliah menjadi sch_penawaran_matakuliah 8) Matakuliah menjadi core_matakuliah 9) Jadwal perkuliahan menjadi sch_jadwal_perkuliahan 10) Peminatan menjadi core_peminatan 11) Ruang menjadi core_ruang 12) News menjadi sys_news Pemodelan class diagram dapat dilihat pada gambar berikut :
108
Gambar 4.5 Class Diagram
109
Pemodelan class diagram di atas memperlihatkan hubungan yang terjadi antar class yang terdapat pada Sistem Informasi Penjadwalan Kuliah. Class sys_user berhubungan dengan sys_role, dan sys_role berhubungan dengan core_program_studi yang berguna untuk memverifikasi data pengguna dalam proses login. Class sys_setting berhubungan dengan class core_program_studi yang berguna untuk memfilter
data
berdasarkan
sch_penawaran_matakuliah
program
berhubungan
studi.
Class
dengan
class
core_program studi dan berhubungan dengan core_matakuliah yang berguna dalam proses peng-input-an dan lihat penawaran matakuliah. Class
sch_kesediaan_mengajar
berhubungan
dengan
class
sch_penawaran_matakuliah dan berhubungan dengan class sys_user yang berguna dalam proses Input kesediaan mengajar. Class sch_jadwal_perkuliahan
berhubungan
dengan
class
sch_kesediaan_mengajar dan berhubungan dengan class core_ruang yang berguna dalam proses create jadwal perkuliahan. Class sys_user berhubungan dengan class sys_role, kemudian class sch_kesediaan_mengajar
berhubungan
dengan
sys_user
dan
berhubungan dengan sch_penjadwalan_kuliah yang berguna dalam proses penghitungan pemenuhan kewajiban SKS dosen. Class news berhubungan dengan class core_program_studi dan sys_user yang berguna dalam proses pembuatan news sebagai informasi akademik yang disampaikan kepada pengguna sistem.
110
Class diagram tersebut akan digunaka nantinya untuk generate menjadi physical data model untuk memodelkan database pada Sistem Informasi Penjadwalan Kuliah. 4.3.5.1
Spesifikasi Database Spesifikasi database dari class diagram yang telah diajukan
adalah sebagai berikut: 1. Tabel Dosen Nama Tabel
: core_dosen
Tipe File
: master file
Primary Key
: NIDN
Tabel 4.19 Struktur Tabel Dosen
2. Tabel Matakuliah Nama Tabel
: core_matakuliah
Tipe File
: master file
Primary Key
: idMataKuliah
111
Tabel 4.20 Struktur Tabel Matakuliah
3. Tabel Peminatan Nama Tabel
: core_peminatan
Tipe File
: master file
Primary Key
: idPeminatan
Tabel 4.21 Struktur Tabel Peminatan
4. Tabel Program Studi Nama Tabel
: core_program_studi
Tipe File
: master file
Primary Key
: idProgramStudi
Tabel 4.22 Struktur Tabel Program Studi
5. Tabel Ruang Nama Tabel
: core_ruang
112
Tipe File
: master file
Primary Key
: idRuang
Tabel 4.23 Struktur Tabel Ruang
6. Tabel Jadwal Perkuliahan Nama Tabel
: sch_jadwal_perkuliahan
Tipe File
: report file
Primary Key
: idJadwalPerkuliahan
Tabel 4.24 Struktur Tabel Jadwal Perkuliahan
7. Tabel Kesediaan Mengajar Nama Tabel
: sch_kesediaan_mengajar
Tipe File
: work file
Primary Key
: idKesediaanMengajar
Tabel 4.25 Struktur Tabel Kesediaan Mengajar
113
8. Tabel Penawaran Matakuliah Nama Tabel
: sch_penawaran_matakuliah
Tipe File
: work file
Primary Key
: idPenawaranMataKuliah
Tabel 4.26 Struktur Tabel Penawaran Matakuliah
9. Tabel News Nama Tabel
: sys_news
Tipe File
: program file
Primary Key
: newsId
Tabel 4.27 Struktur Tabel News
10. Tabel Role Nama Tabel
: sys_role
Tipe File
: security file
Primary Key
: systemRoleId
114
Tabel 4.28 Struktur Tabel Role
11. Tabel Setting Nama Tabel
: sys_setting
Tipe File
: security file
Primary Key
: idSetting
Tabel 4.29 Struktur Tabel Setting
12. Tabel User Nama Tabel
: sys_user
Tipe File
: security file
Primary Key
: systemUserId
Tabel 4.30 Struktur Tabel User
115
4.3.6
Statechart Diagram State diagram memperlihatkan siklus hidup suatu obyek pada Sistem
Informasi Penjadwalan Kuliah, sejak obyek tersebut mulai dibuat hingga obyek tersebut menghilang. Namun, tidak semua obyek yang terdapat pada sistem akan dibuat state diagram-nya, hanya obyek yang memiliki perubahan status yang akan dibuat state-nya Berikut ini adalah gambaran state diagram pada Sistem Informasi Penjadwalan Kuliah.
116
Create Kesediaan Mengajar
NEWKesediaan Mengajar entry / entry do / save
NewKesediaan Mengajar
REVISED
Need Revised
NOT_VERIFIEDKesediaan Mengajar
Kesediaan Canceled
Canceled
entry / change Kesjar State into Not Verified
Kesediaan Mengajar Verified by Dosen SI/TI
VERIFIEDKesediaan Mengajar entry / change Kesjar State into Verified
Kesediaan Mengajar Not Validated
NOT_VALIDATEDKesediaan Mengajar entry / change Kesjar State into Not Validate
Kesediaan Mengajar Validated by Sek. Prodi SI/TI
VALIDATEDKesediaan Mengajar entry / change Kesjar State into Validate
Kesediaan Mengajar Turned into Jadwal Perkuliahan
FINISHED
Kesediaan Mengajar Finished
Gambar 4.6 Statechart Diagram
Kesediaan Mengajar Destroyed
117
State diagram tersebut menggambarkan perubahan status yang terjadi pada obyek kesediaan mengajar mulai dari kesediaan mengajar tersebut dibuat sebagai obyek baru New Kesediaan Mengajar dengan cara di-entry ataupun disave. Kesediaan mengajar yang baru dibuat tersebut memiliki status not verifed yang dapat di-revised ataupun di-canceled oleh Dosen IP. Kesediaan mengajar tersebut diverifikasi oleh Dosen IP yang kemudian statusnya menjadi not validated, dan berubah menjadi validated setelah di validasi oleh Kortek IP, tervalidasinya kesediaan mengajar berarti kesediaan mengajar tersebut berubah menjadi jadwal perkuliahan, maka dapat dinyatakan bahwa kesediaan mengajar telah finished. 4.3.7
Sequence Diagram Sequence
diagram
digunakan
untuk
memperlihatkan
aliran
fungsionalitas dan kontrol yang melalui tiap obyek pada Sistem Informasi Penjadwalan Kuliah. Berikut ini adalah gambaran sequence diagram Sistem Infromasi Penjadwalan Kuliah
Gambar 4.7 Sequence Diagram Usecase Login
118
Gambar 4.8 Sequence Diagram Usecase Membuat Pengaturan Penjadwalan
Gambar 4.9 Sequence Diagram Usecase Mengelola Berita
119
Gambar 4.10 Sequence Diagram Usecase Mengelola Daftar Mata Kuliah
Gambar 4.11 Sequence Diagram Usecase Mengelola Penawaran Mata Kuliah
120
Gambar 4.12 Sequence Diagram Usecase Mengelola Kesediaan Mengajar
Gambar 4.13 Sequence Diagram Usecase Melihat Penawaran Mata Kuliah
121
Gambar 4.14 Sequence Diagram Usecase Melihat Pemenuhan SKS Dosen
Gambar 4.15 Sequence Diagram Usecase Membuat Jadwal
122
Gambar 4.16 Sequence Diagram Usecase Melihat Jadwal Berikut ini adalah penjelasan dari masing-masing sequence diagram yang terdapat pada Sistem Informasi Penjadwalan Mata Kuliah pada International Programs Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah. 1. Sequence diagram usecase login Actor yaitu Staf Akademik IP, Kortek IP dan Dosen IP melakukan input data login ke dalam login form, kemudian data login diautentikasi oleh login processor dengan mengambil username dan password yang merupakan data login untuk dicocokkan dengan tabel sys_user. Dari tabel sys_user
diambil
foreign
key
systemRoleId
yang
menyambungkan dengan tabel sys_role untuk mengetahui
123
role pengguna yang akan dimanfaatkan untuk menampilkan fitur-fitur sistem sesuai role pengguna. Dari tabel sys_role juga juga diketahui idProgramsStudi yang menyambungkan dengan tabel core_program_studi yang dibutuhkan guna memfilter data-data
yang digunakan dalam pemrosesan
sistem hanya untuk program studi tertentu. Dari tabel sys_user juga dapat diambil NIDN yang merupakan foreign key dan menyambungkan ke tabel core_dosen yang berguna untuk memfilter tampilan profil pengguna dan kesediaan mengajar hanya untuk dosen bersangkutan, kecuali jika actor merupakan Kortek IP dan Staf Akademik IP, maka data-data yang dapat dilihat actor tersebut hanya akan difilter berdasarkan program studi. Jika proses login berhasil, maka akan ditampilkan halaman home dengan menu-menu dan fitur-fitur sesuai role actor. Apabila, proses login tidak berhasil, maka sistem akan tetap berada pada halaman login dengan tampilan alert memberitahukan kesalahan yang terjadi dalam proses login 2. Sequence diagram usecase Membuat Pengaturan Penjadwalan Actor yaitu Staf Akademik IP melakukan input data pengaturan ke dalam form pengaturan waktu pengumpulan
124
kesediaan mengajar yang kemudian akan dilakukan proses penyimpanan (save) oleh site setting processor ke dalam tabel sys_setting. Jika proses pengaturan waktu pengumpulan kesediaan mengajar berhasil, maka akan ditampilkan tambahan pengaturan tersebut di dalam daftar site setting (pengaturan situs). Apabila pengaturan waktu pengumpulan kesediaan mengajar tidak berhasil, maka sistem akan tetap berada pada halaman pengaturan waktu pengumpulan kesediaan mengajar form dengan alert memberitahukan kesalahan yang terjadi dalam proses pengaturan. 3. Sequence diagram usecase Mengelola Berita Actor yaitu Staf Akademik IP melakukan create data news ke dalam tambah berita form yang kemudian akan dilakukan proses penyimpanan (save) oleh berita processor ke dalam tabel sys_news. Jika
proses
create
news
berhasil,
maka
akan
ditampilkan tambahan news tersebut di dalam daftar news. Apabila create news tidak berhasil, maka sistem akan tetap berada pada halaman tambah berita form dengan alert memberitahukan kesalahan yang terjadi dalam proses create news.
125
4. Sequence diagram usecase Mengelola Daftar Mata Kuliah Actor yaitu Kortek IP melakukan create daftar mata kuliah ke dalam tambah daftar mata kuliah yang kemudian akan dilakukan proses penyimpanan (save) oleh mata kuliah processor ke dalam tabel core_mata kuliah. Jika proses create daftar mata kuliah berhasil, maka akan ditampilkan tambahan daftar mata kuliah tersebut di dalam daftar mata kuliah. Apabila create daftar mata kuliah tidak berhasil, maka sistem akan tetap berada pada halaman tambah daftar mata kuliah dengan alert memberitahukan kesalahan yang terjadi dalam proses create daftar mata kuliah. 5. Sequence diagram usecase Mengelola Penawaran Mata Kuliah Actor yaitu Kortek IP memilih parameter yang digunakan untuk memfilter matakuliah yang akan dipilih oleh Kortek IP untuk dijadikan penawaran matakuliah processor guna mengecek apakah matakuliah
yang
ditawarkan ke dalam tabel sch_penawaran_matakuliah yang mengambil matakuliah ke tabel core_matakuliah dengan foreign
key
idMatakuliah.
Matakuliah
akan
difilter
berdasarkan program studi dengan mengambil data dari
126
tabel
core_program_studi
foreign
dengan
key
idProgramStudi yang menyambungkannya dan mengambil data peminatan yang memfilterasi matakuliah berdasarkan peminatan yang terdapat pada program studi masingmasing. Kemudian akan ditampilkan penawaran matakuliah yang telah difilter pada list penawaran matakuliah. Actor memilih matakuliah yang akan ditawarkan, kemudian matakuliah tersebut akan diproses berdasarkan kurikulum dan semester yang di filter berdasarkan program studi dan peminatan.
Seluruh
matakuliah
yang
dipilih
untuk
ditawarkan ditampilkan pada list matakuliah yang dipilih dan memberikan kesempatan Kortek IP untuk mengecek kembali penawaran matakuliah yang telah dipilihnya, kemudian menyetujuinya dengan menyimpan data tersebut yang diproses oleh penawaran matakuliah processor ke dalam tabel sch_penawaran_matakuliah. Jika proses Input penawaran matakuliah berhasil, maka akan ditampilkan daftar penawaran matakuliah pada list penawaran
matakuliah.
Apabila
Input
penawaran
matakuliah tidak berhasil, maka sistem akan menampilkan list penawaran matakuliah tanpa tampilan penawaran matakuliah yang dipilih dengan alert memberitahukan
127
kesalahan yang etrjadi dalam proses pemilihan matakuliah yang ditawarkan. 6. Sequence diagram usecase Mengelola Kesediaan Mengajar Actor yaitu Dosen IP dan Kortek IP memilih parameter untuk menampilkan list penawaran matakuliah yang diproses oleh penawaran matakuliah processor dan diambil dari
tabel
sch_penawaran_matakuliah,
kemudian
penawaran matakuliah di tampilkan pada list penawaran matakuliah. Actor memilih matakuliah yang bersedia diajarkan yang diproses oleh penawaran matakuliah processor untuk kembali menampilkan matakuliah yang dipilih pada kesediaan mengajar form. Kemudian, actor memasukkan data kesediaan mengajar berupa hari dan sesi yang diproses oleh kesediaan mengajar processor untuk disimpan ke dalam tabel sch_kesediaan_mengajar Jika proses Input kesediaan mengajar berhasil, maka akan ditampilkan daftar kesediaan mengajar pada list kesediaan mengajar. Apabila Input kesediaan mengajar tidak berhasil, maka sistem akan menampilkan list kesediaan mengajar tanpa tampilan kesediaan mengajar yang dipilih dengan alert memberitahukan kesalahan yang
128
terjadi
dalam
proses
pemilihan
matakuliah
yang
ditawarkan. 7. Sequence diagram usecase Melihat Penawaran Mata Kuliah Actor yaitu Staf Akademik IP, Kortek IP, Dosen IP dan Mahasiswa memilih parameter pada list penawaran matakuliah untuk menampilkan informasi penawaran matakuliah yang akan diproses oleh penawaran matakuliah processor, yang kemudian akan mengambil data yang terdapat
pada
penawaran
matakuliah
dan
difilter
berdasarkan program studi. Hasilnya
akan
ditampilkan
informasi
penawaran
matakuliah yang telah difilter 8. Sequence diagram usecase Melihat Pemenuhan SKS Dosen Actor
yaitu Kortek
IP ingin menampilkan list
pemenuhan SKS yang ditampilkan sistem dengan diproses oleh pemenuhan SKS processor untuk mengambil jumlah SKS matakuliah berdasarkan kesediaan mengajar dosen yang telah divalidasi dari tabel sch_jadwal_perkuliahan dan mengambil SKS berdasarkan status kerja dosen yang diambil dari tabel sys_user untuk mendapatkan NIDN dan
129
tersambung ke tabel core_dosen. Kemudian, menghitung jumlah SKS yang sudah dipenuhi. Hasilnya akan ditampilkan informasi pemenuhan kewajiban SKS dosen IP yang telah dihitung. 9. Sequence
diagram
usecase
Membuat
Jadwal
Perkuliah Actor yaitu Kortek IP memilih parameter berdasarkan semester dan matakuliah yang diproses oleh kesediaan mengajar
processor
sch_kesediaan_mengajar,
dan
diambil
kemudian
ke
ditampilkan
tabel pada
daftar kesediaan mengajar. Actor memvalidasi kesediaan mengajar dan memasukkan pilihan kelas dan kapasitas kelas untuk kesediaan mengajar tervalidasi tersebut. Hasil validasi dan input-an actor tersebut akan diproses oleh jadwal processor untuk dicek ketersediaan data kesediaan mengajarnya dan kemudian akan disimpan pada tabel sch_kesediaan _mengajar Jika proses pembuatan jadwal berhasil, maka akan ditampilkan perubahan status kesediaan mengajar menjadi tervalidasi pada daftar kesediaan mengajar. Apabila pembuatan jadwal tidak berhasil, maka sistem akan menampilkan perubahan status kesediaan mengajar menjadi tidak tervalidasi pada daftar kesediaan mengajar dengan
130
alert memberitahukan bentrokan yang terjadi pada data didalam tabel sch_kesediaan_mengajar. 10. Sequence
diagram
usecase
Melihat
Jadwal
Perkuliahan Actor yaitu Staf Akademik IP, Kortek IP, Dosen IP dan Mahasiswa memilih parameter untuk menampilkan jadwal perkuliahan yang akan diproses oleh jadwal processor untuk
diambil
dari
tabel
sch_jadwal_perkuliahan
berdasarkan program studi. Hasilnya
akan
ditampilkan
informasi
jadwal
perkuliahan yang telah difilter. 4.3.8
Design Interface Dalam
mengembangkan
perangkat
lunak
Sistem
Informasi
Penjadwalan Kuliah diperlukan gambaran desain antarmuka sebagai petunjuk pembuatan antarmuka perangkat lunak. Gambaran antarmuka Sistem Informasi Penjadwalan Kuliah tersebut dapat dilihat pada lampiran 3. 4.4
Implementasi Sistem (Implementation) 4.4.1
Konstruksi Perangkat Lunak Blueprint (cetak biru) sistem yang telah dimodelkan dan dirancang
sebelumnya
dieksekusi
menjadi
sebuah
set
kode
program
dengan
menggunakan bahasa pemrograman PHP guna mengimplementasikan Sistem Informasi Penjadwalan Kuliah.
131
Sejumlah tools digunakan untuk mengembangkan perangkat lunak Sistem Informasi Penjadwalan Kuliah. Pada tabel berikut ditunjukkan daftar tools yang digunakan dalam pengembangan Sistem Informasi Penjadwalan Kuliah. Tabel 4.31 Daftar Tools Pengembangan Perangkat Lunak Sistem
No. 1
Kegunaan
Tool Power Designer 12
Menggambarkan pemodelan berorientsi obyek Bahasa pengembangan untuk mengembangkan
2
PHP 5.2.9
3
MySQL 5.0.51
Database yang digunakan dalam sistem
4
Eclipse Galileo
Perangkat editor pembuatan program
5
XAMPP Apache HTTP Server
Web server
Sistem Informasi Produksi Percetakan
Perangkat untuk mengakses database yang
6
phpMyAdmin
7
Navicat Premium 8.2
Perangkat untuk mengakses database
8
Mozilla Firefox 3.6.13
Web browser
terdapat pada XAMPP Apache
Terdapat beberapa modul yang utama untuk dikonstruksi pada perangkat lunak Sistem Informasi Penjadwalan Kuliah, yaitu : a. Modul data master yang terdiri dari master dosen, master matakuliah, master peminatan, master program studi, dan master ruang b. Modul site setting dan pemberitahuan pengumpulan kesediaan mengajar melaui email
132
c. Modul penawaran matakuliah d. Modul kesediaan mengajar e. Modul jadwal f. Modul profil g. Modul news Berikut ini adalah merupakan fitur-fitur yang diunggulkan pada perangkat lunak yang dikembangkan untuk Sistem Informasi Penjadwalan Kuliah : a. Fitur pengaturan waktu pengumpulan kesediaan mengajar b. Fitur pengiriman email untuk memberitahukan waktu pengumpulan kesediaan mengajar c. Fitur pembedaan role pengguna sesuai kewenangan pengguna d. Fitur lupa password e. Fitur history login f. Fitur berita (news) atau informasi g. Fitur tampilan detail profil dosen h. Fitur pencarian profil dosen dan matakuliah i. Fitur input penawaran matakuliah j. Fitur validasi kesediaan mengejar dan pengecekan bentrokan data dalam database k. Fitur laporan jadwal perkuliahan berdasarkan kelas dan berdasarkan ruangan baik lokal maupun laboratorium yang dapat dilihat dan dicetak melalui format file (.htm) ataupun (.xls).
133
l. Fitur penghitungan dan pengecekan kewajiban pemenuhan SKS dosen 4.4.2
Pengujian Perangkat Lunak Pengujian sistem atau aplikasi sistem dilakukan dengan menggunakan
metode black-box testing. Pengujian ini dimaksudkan untuk mengetahui apakah output yang dihasilkan dari pengolahan sistem benar-benar sesuai dengan output yang diharapkan oleh pengguna sistem informasi penjadwalan Mata Kuliah pada International Programs. Tabel 4.32 Pengujian Perangkat Lunak No 1
Rancangan Proses
Hasil yang Diharapkan
Input Address aplikasi
Menampilkan halaman form
http://localhost/penjadw
login
Hasil
Keterangan
OK
-
OK
-
OK
-
OK
Data tersimpan
alan-int-app 2
Mengisi Username,
Masuk halaman utama
Password dan
authentic user
Departement 3
4
Pilih Menu Pengaturan
Menampilkan halaman buat
Situs Buat
pengaturan aplikasi
Pengaturan Baru
penjadwalan baru
Isi kan data pengaturan
Menampilkan alert verifikasi
situs di form pengaturan
sukses
di database,
penjadwalan kemudian
kemudian data
pilih tombol “Simpan”
ditampilkan di pengaturan
5 6
Pilih Menu Berita
Menampilkan halaman untuk
Tambah Berita
menambahkan berita terbaru
Isi kan data berita
Menampilkan halaman alert
terbaru kemudian pilih
bahwa verifikasi sukses
tombol “Simpan”
OK
-
OK
Data berita telah tersimpan ke database, kemudian data
134
ditampilkan di lihat berita 7 8
Pilih Menu Dosen
Menampilkan halaman untuk
Tambah Dosen
menambahkan Dosen
Isi kan data dosen
Menampilkan alert verifikasi
kemudian pilih tombol
sukses
OK
-
OK
Data dosen telah
“Simpan”
tersimpan ke database, kemudian data ditampilkan di lihat data dosen
9
Pilih Menu Mata Kuliah
Menampilkan halaman untuk
Tambah Data Mata
menambahkan Mata Kuliah
OK
-
OK
Data mata
Kuliah 10
Isi kan data Mata Kuliah
Menampilkan alert verifikasi
kemudian pilih tombol
sukses
kuliah telah
“Simpan”
tersimpan ke database, kemudian data ditampilkan di lihat data mata kuliah
11 12
Pilih Menu Jadwal
Menampilkan halaman untuk
Buat Jadwal
membuat jadwal perkuliahan
Isi kan jadwal yang
Menampilkan alert verifikasi
ingin di buat
sukses
OK
-
OK
Data jadwal telah tersimpan ke database, kemudian data ditampilkan di lihat jadwal
13
Pilih Menu Penawaran
Menampilkan halaman untuk
OK
-
135
Mata Kuliah
4.4.3
menawarkan mata kuliah
Implementasi Perangkat Lunak 4.4.3.1
Penyiapan Rencana Implementasi Jaringan Sistem Informasi Penjadwalan Kuliah yang telah dibuat akan
diimplementasikan melalui jaringan Internet. Gambaran implementasi jaringan yang diterapkan menggunakan jaringan internet dapat dilihat pada gambar berikut ini.
Gambar 4.17 Gambaran Implementasi Jaringan untuk Sistem Informasi Penjadwalan Kuliah
136
4.4.3.2
Spesifikasi Hardware dan Kebutuhan Software Dalam pengimplementasian Sistem Informasi Penjadwalan
Kuliah, penulis mengusulkan penggunaan hardware dan software dengan spesifikasi dan kebutuhan sebagai berikut : a. Hardware Pada tabel berikut ini dapat dilihat seperti apa spesifikasi hardware untuk menjalankan perangkat lunak Sistem Informasi Penjadwalan Kuliah secara online.
Tabel 4.32 Spesifikasi Hardware untuk Implementasi Perangkat Lunak Sistem Untuk Server SERVER ENVIRONMENT
EQUIPMENT
DESCRIPTION Processor Intel Core 2 Duo 2,5GHz
PC
Desktop/Workstation
Memory 4GB DR2 PC5300 (2x2GB) Hard-disk 250 GB SATA 7200rpm
Network
Internet
Input Devices
Keyboard, Mouse
Output Devices
Monitor LCD Flat 17 inch, Printer
137
Tabel 4.33 Spesifikasi Hardware untuk Implementasi Perangkat Lunak Sistem Untuk Client CLIENT ENVIRONMENT
EQUIPMENT Desktop/Workstation/
PC/Laptop
Laptop
Network
Internet
Input Devices
Keyboard, Mouse
Output Devices
Monitor, Printer
DESCRIPTION Processor Intel Pentium 4 2,0GHz Memory 2GB DR2 PC5300 Wifi + network LAN
b. Software Berikut ini merupakan software yang dibutuhkan dalam menjalankan Sistem Informasi Penjadwalan Kuliah : 1) Operating System : Windows XP SP2 or above 2) Apache HTTP Server 2.2.9 3) MySQL Server 5.0 or above 4) Mozilla Firefox 3.6.13 (or above) atau Opera 10.0 (or above)
BAB V PENUTUP 5.1
Kesimpulan Berdasarkan paparan pada bab-bab sebelumnya, maka peneliti dapat
mengambil kesimpulan dari penelitian tentang pengembangan Sistem Informasi Penjadwalan Mata Kuliah pada International Programs Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah ini, sebagai berikut : 1.
Sistem Informasi Penjadwalan Mata Kuliah pada International Programs Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah telah berhasil membuat pembatasan waktu pengumpulan kesediaan mengajar bagi Dosen, guna menghilangkan keterlambatan pengumpulan kesediaan mengajar
yang dapat
mengganggu proses pembuatan jadwal perkuliahan. 2.
Sistem Informasi Penjadwalan Mata Kuliah pada International Programs Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah telah berhasil membantu mengorganisir, melakukan pengecekan dan verifikasi kesediaan mengajar yang dimasukkan oleh Dosen, serta telah berhasil membantu penentuan hari, sesi, lokal, dan kelas untuk setiap kesediaan mengajar yang tervalidasi.
3.
Sistem Informasi Penjadwalan Mata Kuliah pada International Programs Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah telah berhasil membantu penentuan penggunaan
138
139
laboratorium yang digunakan oleh Prodi SI dan TI International Program secara bersama-sama sekaligus mengorganisir pembuatan jadwalnya. 4.
Sistem Informasi Penjadwalan Mata Kuliah pada International Programs Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah telah berhasil membantu menghitung dan mengetahui jumlah SKS yang dipenuhi oleh Dosen berdasarkan status kerjanya.
5.
Sistem Informasi Penjadwalan Mata Kuliah pada International Programs Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah telah berhasil mengurangi pengunaan resource kertas dan menghilangkan resiko tercecernya informasi kesediaan mengajar Dosen dalam bentuk kertas.
6.
Sistem Informasi Penjadwalan Mata Kuliah pada International Programs Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah telah berhasil meminimalisasi terjadinya human error.
7.
Sistem Informasi Penjadwalan Mata Kuliah pada International Programs Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif
Hidayatullah
telah
berhasil
membantu
mempercepat
pembuatan laporan jadwal perkuliahan dan menegaskan informasi penjadwalan kuliah sehingga tidak membingungkan lagi
140
5.2
Saran Pada pengembangan Sistem Informasi Penjadwalan Mata Kuliah pada
International Programs Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah ini, masih terdapat kekurangan-kekurangan yang dapat dikembangkan pada penelitian selanjutnya. Saran pengembangan yang perlu dilakukan adalah sebagai berikut : a. Pengembangan sistem dilakukan tidak hanya untuk International Program saja, pengembangan sistem dapat dilakukan untuk seluruh Fakultas Sains dan Teknologi, bahkan dapat diperluas untuk digunakan di seluruh fakultas yang terdapat di Universitas Islam Negeri syarif Hidayatullah Jakarta. b. Penambahan modul absensi dosen untuk mengetahui kehadiran dosen dalam kegiatan belajar mengajar (KBM). c. Penambahan modul team teaching pada sistem. d. Pengembangan keamanan jaringan pada jaringan internet dalam pengimplementasian sistem e. Penggabungan Sistem Informasi Penjadwalan Kuliah dengan Sistem Akademik yang terintegrasi.
DAFTAR PUSTAKA
Abdul Kadir, 2003, Pengenalan Sistem Informasi, Andi, Yogyakarta Edhy Sutanta. 2004. Sistem Basis Data. Graha Ilmu. Yogyakarta
Hall, James A, 2001, Sistem Informasi Akuntansi, Edisi 4, Thomson. Hartono, Jogiyanto. 2000. Pengenalan Komputer : Dasar Ilmu Komputer, Pemograman, Sistem Informasi, dan Intelegensi Buatan.. Edisi 3. Cet. Kedua. Andi. Yogyakarta
Hariyanto, Bambang : Sistem Operasi. Ed. 2. Bandung : Informatika. 1997 Jeffery L. Whitten, Lonnie D. Bentley, Kevin C. Dittman, 2004. Metode Desain dan Analisis Sistem Edisi 6. McGraw-Hill dan Andi, Yogyakarta. Jogiyanto, 2005. Analisis dan Desain Sistem Informasi, Andi, Yogyakarta Jogiyanto, Hartono, 2005. Analisis & Desain Sistem Informasi Pendekatan Terstruktur Teori dan Praktek Aplikasi Bisnis. Andi Yogyakarta Nazir, Moh.Ph.D, 2005. Metode Penelitian. Ghalia Indonesia. Bogor Nugroho,
Eko.
Sistem
Informasi
Manajemen
Konsep,
Aplikasi,
dan
Perkembangan. Yogyakarta : Andi. 2008 Pendit, Putu Laxman. 2003. Penelitian Ilmu Perpustakaan dan Informasi: Suatu Pengantar Diskusi Epistemologi dan Matodologi. Jakarta: JIP-FSUI Suryadi. Seri Diktat Kuliah : Pengelolaan Instalasi Komputer. Depok : Gunadarma. 2009 Teguh Wahyono, (2004), Sistem Informasi : Konsep Dasar, Analisis Desain dan Implementasi, Graha Ilmu, Yogyakarta
Umar, Husaein. 2007. Metode Penelitian. Jakarta : Raja Grafindo
141
LAMPIRAN 1 SURAT PENELITIAN
-----
KEMENTERIAN AGAMA UI\IVERSITAS ISLAM NEGERI (UIN) SYARIF HIDAYAT ULLAH JAICARTA FAKULTAS SAINS DAN TEKNOLOGI Email
Jl. Ir. H. Juanda No. 95 Ciputat 15412 Indonesia T elp. : (62 -21) 7 493 606, 7 49 3 5 47 F ax. : (62-21) 7 49 33 I 5
Nomor Lampiran Perihal
:
Un.01/F9 lTL.}Jlry2L
:
[email protected]
Website : http:/www.fst.uinjkt.ac.id
l20ll
Jakarta, Maret
2011
: Permohonan Penelitian /Riset Kepada Yth" Kordinator Teknis International Programs Fakultas Sains dan Teknologi
UIN Syarif Hidayatullah Jakarta Di Temp4t
Assalamualaikum Wr. Wb
Dengan hormat kami sampaikan bahwa dalam rangka penyelesaian tugas skripsi mahasiswa kami berikut ini : Nama
NIM Prodi/Semester Tahun Akademik Program Alamat
Telp.
Fahrurozi 104093002992 Sistem Informaasi / Vm (Delapan) 20r012011 s-1 Jl. Peta Utara Kp. Wadas RT. 004/06 No.17 Kel. Pegadungan Kec. Kalideres JakafiaBarat 021 - 95693352
bermaksud melakukan penelitian/riset dengan judul : Sistem Informasi Penjadwalan Mata Kuliah Pada International Programs Fakultas Sains dan Teknologi UIN Syarif Hidayatullah Jakarta,di instansi yang Ibu pimpin. Oleh karena itu kami mohon kesediaan Ibu untuk menerima mahasiswa kami dan memberikan informasi secukupnya. Demikian, atas perhatian dan kesediaan Ibu kami ucapkan terima kasih. Was s alamualaikum'tltr. Wb.
ida
tf' ot.
Akademik
Salim, M.Si NIP. t97208r6 199903 10034
Tembusan:
LAMPIRAN 2 WAWANCARA
LAMPIRAN 3 DESIGN INTERFACE
Tampilan Login Halaman Utama Berita Dosen Mata Kuliah Penawaran Mata Kuliah
Jadwal
Sign In
BANNER Berita Berita
Selamat Datang
dsjhgsh gdcjfhja jhdhhc
Foother
Halaman Home Staff Halaman Utama Profil
Ubah Password
Keluar
BANNER Pengaturan Situs
Berita
Selamat Datang
Berita Dosen Mata Kuliah Jadwal
Foother
Halaman Tambah Dosen Halaman Utama Profil
Ubah Password
Keluar
BANNER Berita
Pengaturan Situs Berita Dosen Mata Kuliah Jadwal
Foother
Halaman Tambah Mata Kuliah Halaman Utama Profil
Ubah Password
Keluar
BANNER Berita
Pengaturan Situs Berita Dosen Mata Kuliah Jadwal
Foother
Halaman Penawaran Mata Kuliah Halaman Utama Profil
Ubah Password
Keluar
BANNER Berita
Pengaturan Situs Berita Dosen Mata Kuliah Jadwal
Foother Kesediaan Mengajar Halaman Utama Profil
Ubah Password
Keluar
BANNER Berita
Pengaturan Situs Berita Dosen Mata Kuliah Jadwal
Foother
LAMPIRAN 4 INTERFACE SISTEM
Tampilan Login
Halaman Home Staff
Halaman Buat Pengaturan Baru
Halaman Tambah Berita
Halaman Lihat Berita
Halaman Tambah Dosen
Lihat Data Dosen
Halaman Tambah Mata Kuliah
Halaman Lihat Mata Kuliah
Halaman Buat Jadwal
Halaman Lihat Jadwal
Halaman Lihat Pemenuhan SKS
Halaman Lihat Ruang
Halaman Penawaran Mata Kuliah
Halaman Lihat Kesediaan Mengajar
LAMPIRAN 5 CODING
Init.inc.php * @version 1.0 * @revision $Revision: 208 $ * * @package * @subpackage * * PHP Ver : 5.2.9 */ ?>
$objSql = new sql_db_mysql(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE, true); $config = new Config($objSql); $tlUser = new tlUser($objSql); $tlSystemRole = new tlSystemRole($objSql); $tlMataKuliah = new tlMataKuliah($objSql); $tlProgramStudi = new tlProgramStudi($objSql); $tlRuang = new tlRuang($objSql); $tlPeminatan = new tlPeminatan($objSql); $tlSiteSetting = new tlSiteSetting($objSql); $tlMail = new tlMail($objSql); $tlPenawaran = new tlPenawaran($objSql); $tlKesediaanMengajar = new tlKesediaanMengajar($objSql); $tlJadwal = new tlJadwal($objSql); $tlNews = new tlNews($objSql); ?> init.auth.inc.php * @version 1.0 * @revision $Revision: 208 $ * * @package * @subpackage * * PHP Ver : 5.2.9 */ ?> init.check.inc.php
* @author afrialdi.syahputra
* @version 1.0 * @revision $Revision: 208 $ * * @package * @subpackage * * PHP Ver : 5.2.9 */ session_start(); if ($tlUser->checkSession() === false) { // $url = $config->get_url(); // $url = $config->selfURL(); // header('Location: '.ADMIN_URL.'login/index.php?action=flogin&referer='.u rlencode( $url )); header('Location: ' . HOME_URL . '?err=invalid'); exit(); } if($_SESSION['BAHASA'] != "") { require_once (dirname(__FILE__) . "/language/lang." . $_SESSION['BAHASA'] . ".php"); } else { require_once (dirname(__FILE__) . "/language/lang.id.php"); } ?> init.noauth.inc.php * @version 1.0 * @revision $Revision: 208 $ * * @package * @subpackage * * PHP Ver : 5.2.9 */ ?> index.php
getAllNews(4, 0, "", $order=''); $home = $tlNews->getNewsByProdiAndType("", 0); $settingSI = $tlSiteSetting->getActiveSiteSetting(1, 1); $settingTI = $tlSiteSetting->getActiveSiteSetting(2, 1); $config->show_header_public(); ?> show_footer(); ?> config.inc.php
# doesn't necessary need to change if using standard deployment. # define ("HOME_DIR", dirname(__FILE__) . '/../'); define ("PUBLIC_DIR", HOME_DIR . 'public/'); define ("ADMIN_DIR", HOME_DIR . 'pages/'); define ("CONFIG_DIR", HOME_DIR . 'config/'); define ("INCLUDES_DIR", HOME_DIR . 'includes/'); define ("COMPONENTS_DIR", HOME_DIR . 'components/'); define ("LANGUAGES_DIR", HOME_DIR . 'language/'); define ("LIBRARIES_DIR", HOME_DIR . 'libs/'); define ("THEMES_DIR", HOME_DIR . 'themes/' . THEMES_NAME . '/'); define ("WEBINF_DIR", HOME_DIR . 'WEB-INF/'); # ========================================== ==================================== # URLs # ========================================== ==================================== if (!defined("PUBLIC_URL")) define ("PUBLIC_URL", HOME_URL . "public/"); if (!defined("ADMIN_URL")) define ("ADMIN_URL", HOME_URL . "pages/"); if (!defined("CONFIG_URL")) define ("CONFIG_URL", HOME_URL . "config/"); if (!defined("LIBRARIES_URL")) define ("LIBRARIES_URL",HOME_URL . "libs/"); if (!defined("THEMES_URL")) define ("THEMES_URL", HOME_URL . "themes/" . THEMES_NAME . "/"); if (!defined("CSS_URL")) define ("CSS_URL", THEMES_URL . "css/"); if (!defined("IMAGES_URL")) define ("IMAGES_URL", THEMES_URL . "images/"); if (!defined("SCRIPT_URL")) define ("SCRIPT_URL", THEMES_URL . "js/"); if (!defined("ADMIN_IMAGES_URL")) define ("ADMIN_IMAGES_URL", ADMIN_URL . "images/"); # ========================================== ==================================== # LOG CONFIGURATION # ========================================== ==================================== define ("LOG4PHP_DIR", LIBRARIES_DIR . "Log4Php"); define ("LOG4PHP_CONF", WEBINF_DIR. "log4php.properties"); // /log4php.xml //require_once (LOG4PHP_DIR . '/LoggerManager.php'); # ========================================== ==================================== # UPLOAD CONFIGURATION # ========================================== ==================================== $GLOBALS['MAX_SIZE'] = 5242880; //5MB
$GLOBALS['FILE_MIMES'] = array('image/jpeg','image/jpg','image/gif','image/png'); $GLOBALS['FILE_EXTS'] = array('.jpg', '.png', '.gif', '.jpeg'); $GLOBALS['DELETABLE'] = true; define ("UPLOAD_DIR", HOME_DIR . 'pages/dosen/photos/'); if (!defined("UPLOAD_URL")) define ("UPLOAD_URL", ADMIN_URL . "/dosen/photos/"); # ========================================== ==================================== # DATABASE CONFIGURATION # ========================================== ==================================== define('DB_SERVER', 'localhost'); define('DB_PORT', '3306'); define('DB_USERNAME', 'root'); define('DB_PASSWORD', 'root'); define('DB_DATABASE', 'penjadwalan-int-app'); // User level declaration define('LEVEL_PUBLIC', '0'); define('LEVEL_DOSEN', '1'); define('LEVEL_SEKPROD_SI', '2'); define('LEVEL_SEKPROD_TI', '3'); define('LEVEL_STAFF_AKADEMIK', '4'); // table define('TBL_DOSEN','core_dosen'); // table user, holds all the user account define('TBL_SYSTEM_ROLE','sys_role'); // role table, holds all role definition define('TBL_USER','sys_user'); // user table, holds all user definition define('TBL_MATAKULIAH','core_matakuliah'); define('TBL_PEMINATAN','core_peminatan'); define('TBL_PRODI','core_program_studi'); define('TBL_RUANG','core_ruang'); define('TBL_WAKTU','core_waktu_kuliah'); define('TBL_PENAWARAN','sch_penawaran_matakuliah' ); define('TBL_KESEDIAAN','sch_kesediaan_mengajar'); define('TBL_JADWAL','sch_jadwal_perkuliahan'); define('TBL_SITESETTING','sys_setting'); define('TBL_NEWS','sys_news'); ?> MySql.php
*********************************************** ****************************/ /*********************************************** **************************** * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * *********************************************** ****************************/ if (eregi("Mysql.php",$_SERVER['PHP_SELF'])) { Header("Location: ../index.php"); } if(!defined("SQL_LAYER")) { define("SQL_LAYER","mysql"); class sql_db_mysql { var $db_connect_id; var $query_result; var $row = array(); var $rowset = array(); var $num_queries = 0; // // Constructor // function sql_db_mysql($sqlserver, $sqluser, $sqlpassword, $database, $persistency = false) { $this->persistency = $persistency; $this->user = $sqluser; $this->password = $sqlpassword; $this->server = $sqlserver; $this->dbname = $database; if($this->persistency) { $this->db_connect_id = @mysql_pconnect($this->server, $this->user, $this>password); } else { $this->db_connect_id = @mysql_connect($this->server, $this->user, $this>password); } if($this->db_connect_id) { if($database != "") { $this>dbname = $database; $dbselect = mysql_select_db($this->dbname);
if(!$dbselect) { mysql_close($this->db_connect_id); $this->db_connect_id = $dbselect; } } return $this->db_connect_id; } else { print ''; print 'Oops, Can not connect to database...
'; print '[reason: ' . mysql_error() . ']
'; print '
'; exit; return false; } } // // Other base methods // function sql_close() { if($this->db_connect_id) { if($this->query_result) { @mysql_free_result($this->query_result); } $result = @mysql_close($this->db_connect_id); return $result; } else { return false; } }
FALSE)
// // Base query method // function sql_query($query = "", $transaction = {
{
// Remove any pre-existing queries unset($this->query_result); if($query != "")
$this->query_result = @mysql_query($query,$this->db_connect_id);
Query failed");
if (!$this->query_result) { //echo $query; //die($query."
} //echo $query; //echo "
SQL Error Report : ".mysql_errno() . ": " . mysql_error() . "\n"; } if($this->query_result)
{ >query_result]); >rowset[$this->query_result]); >query_result;
unset($this->row[$thisunset($thisreturn $this-
} else {
return ( $transaction == END_TRANSACTION ) ? true : false; } } function sql_fetchrow($query_id = 0) { if(!$query_id) { $query_id = $this>query_result; } if($query_id) { $this->row[$query_id] = @mysql_fetch_array($query_id); return $this>row[$query_id]; } else { return false; } } function sql_createArray() { $result = array(); while(($row = $this>sql_fetchrow()) != false) { array_push($result,$row); } return $result; } function query($query) { $this->sql_query($query); //echo $query; $array = $this->sql_createArray(); return $array; } // // Other query methods // function sql_numrows($query_id = 0) { if(!$query_id) { $query_id = $this>query_result; } if($query_id) { $result = @mysql_num_rows($query_id); return $result; }
else { }
return false;
} function sql_affectedrows() { if($this->db_connect_id) { $result = @mysql_affected_rows($this->db_connect_id); return $result; } else { return false; } } function sql_numfields($query_id = 0) { if(!$query_id) { $query_id = $this>query_result; } if($query_id) { $result = @mysql_num_fields($query_id); return $result; } else { return false; } } function sql_fieldname($offset, $query_id = 0) { if(!$query_id) { $query_id = $this>query_result; } if($query_id) { $result = @mysql_field_name($query_id, $offset); return $result; } else { return false; } } function sql_fieldtype($offset, $query_id = 0) { if(!$query_id) { $query_id = $this>query_result; } if($query_id) { $result = @mysql_field_type($query_id, $offset); return $result; } else {
}
}
return false;
function sql_fetchrowset($query_id = 0) { if(!$query_id) { $query_id = $this>query_result; } if($query_id) { unset($this>rowset[$query_id]); unset($this>row[$query_id]); while($this>rowset[$query_id] = @mysql_fetch_array($query_id)) { $result[] = $this->rowset[$query_id]; } return $result; } else { return false; } } function sql_fetchfield($field, $rownum = -1, $query_id = 0) { if(!$query_id) { $query_id = $this>query_result; } if($query_id) { if($rownum > -1) { $result = @mysql_result($query_id, $rownum, $field); } else { if(empty($this->row[$query_id]) && empty($this->rowset[$query_id])) { if($this->sql_fetchrow())
{
$result = $this->row[$query_id][$field]; } else { if($this->rowset[$query_id]) $result = $this->rowset[$query_id][$field]; else if($this->row[$query_id])
}
{ } {
$result = $this->row[$query_id][$field]; }
} else {
0){
}
} return $result;
return false;
} } function sql_rowseek($rownum, $query_id =
>query_result;
if(!$query_id) { $query_id = $this-
} if($query_id) { $result = @mysql_data_seek($query_id, $rownum); return $result; } else { return false; } } function sql_nextid(){ if($this->db_connect_id) { $result = @mysql_insert_id($this->db_connect_id); return $result; } else { return false; } } function sql_freeresult($query_id = 0){ if(!$query_id) { $query_id = $this>query_result; }
>row[$query_id]);
if ( $query_id ) { unset($thisunset($this-
>rowset[$query_id]);
@mysql_free_result($query_id); } else { }
return true;
return false;
} function sql_error($query_id = 0) {
$result["message"] = @mysql_error($this->db_connect_id); $result["code"] = @mysql_errno($this->db_connect_id); }
return $result;
} // class sql_db } // if ... define ?> config.class.php * @version 1.0 * @revision $Revision: 232 $ * * @package * @subpackage */ class Config { function show_header() { include_once (THEMES_DIR . "inc_header.php"); } function show_header_public() { include_once (THEMES_DIR . "inc_header_public.php"); } function show_footer() { include_once (THEMES_DIR . "inc_footer.php"); } function show_conf( $conf_name ) { echo site_conf_get( $conf_name ); } function site_conf_get( $conf_name ) { return $GLOBALS[$conf_name]; } function show_component( $com_type = '') { require_once COMPONENTS_DIR . $com_type . ".php";
} // ========================================== =============================== // Utilities // ========================================== =============================== public static function hasParameter($parameterName) { return self::hasGetParameter($parameterName) || self::hasPostParameter($parameterName); } public static function hasGetParameter($parameterName) { return isset($_GET[$parameterName]) && strlen($_GET[$parameterName]) > 0; } public static function hasPostParameter($parameterName) { return isset($_POST[$parameterName]) && strlen($_POST[$parameterName]) > 0; } public static function toIndonesianDate( $t ) { $d = date("d ", $t) . Config::getIndonesianMonth(date("n", $t)) . date(" Y", $t); return $d; } public static function toEnglishDate( $t ) { $d = date("d ", $t) . Config::getEnglishMonth(date("n", $t)) . date(" Y", $t); return $d; } public static function toIndonesianFullDate( $t ) { $d = Config::getIndonesianDay(date("N", $t)) . ', ' . date("d ", $t) . Config::getIndonesianMonth(date("n", $t)) . date(" Y H:i", $t) . ' WIB'; return $d; } public static function toEnglishFullDate( $t ) { $d = Config::getEnglishDayDay(date("N", $t)) . ', ' . date("d ", $t) . Config::getEnglishMonth(date("n", $t)) . date(" Y H:i", $t) . ' WIB'; return $d; } public static function toIndonesianTime( $t ) { $d = date("H:i", $t) . ''; return $d; }
public static function toEnglishTime( $t ) { $d = date("H:i", $t) . ''; return $d; } public static function getIndonesianMonth($month) { switch( $month ) { case 1: return "Januari"; case 2: return "Februari"; case 3: return "Maret"; case 4: return "April"; case 5: return "Mei"; case 6: return "Juni"; case 7: return "Juli"; case 8: return "Agustus"; case 9: return "September"; case 10: return "Oktober"; case 11: return "November"; case 12: return "Desember"; } } public static function getEnglishMonth($month) { switch( $month ) { case 1: return "January"; case 2: return "February"; case 3: return "March"; case 4: return "April"; case 5: return "May"; case 6: return "June"; case 7: return "July"; case 8: return "August"; case 9: return "September"; case 10: return "October"; case 11: return "November"; case 12: return "December"; } } public static function getIndonesianDay($day) { switch( $day ) { case 1: return "Senin"; case 2: return "Selasa"; case 3: return "Rabu"; case 4: return "Kamis"; case 5: return "Jumat"; case 6: return "Sabtu"; case 7: return "Minggu"; } } public static function getEnglishDay($day) { switch( $day ) { case 1: return "Monday"; case 2: return "Tuesday"; case 3: return "Wednesday"; case 4: return "Thursday"; case 5: return "Friday"; case 6: return "Saturday";
}
}
case 7: return "Sunday";
{
/** * @desc Get server current date as valid SQL date format. * @return server current date in SQL format */ function getCurrentDate() { return date("Y-m-d") . 'T' . date("H:i:s"); } /** * @desc Get User Religion * @return array */ function getReligion( $lang ) { if($lang == 'id'){ $religion_array = array( "0" => "", "1" => "Islam", "2" => "Kristen katolik", "3" => "Kristen Protestan", "4" => "Hindu", "5" => "Buddha", "6" => "Lainnya"); } elseif($lang == 'en'){ $religion_array = array( "0" => "", "1" => "Islam", "2" => "Kristen katolik", "3" => "Kristen Protestan", "4" => "Hindu", "5" => "Buddha", "6" => "Lainnya"); } return $religion_array; } /** * @desc Get User Sex * @return array */ function getSex( $lang ) { if($lang == 'id'){ $sex_array = array( "0" => "", "1" => "Laki-Laki", "2" => "Perempuan"); } elseif($lang == 'en'){ $sex_array = array( "0" => "", "1" => "Male", "2" => "Female"); } return $sex_array; } /** * @desc Get User Pangkat Fungsional * @return array */ function getPangkatFungsional( $lang )
}
if($lang == 'id'){ $pangkatFungsional_array = array( "0" => "Belum Ada", "1" => "Asisten Ahli", "2" => "Lektor", "3" => "Lektor Kepala", "4" => "Guru Besar"); } elseif($lang == 'en'){ $pangkatFungsional_array = array( "0" => "Belum Ada", "1" => "Asisten Ahli", "2" => "Lektor", "3" => "Lektor Kepala", "4" => "Professor"); } return $pangkatFungsional_array;
/** * @desc Get User Jabatan Struktural * @return array */ function getJabatanStruktural( $lang ) { if($lang == 'id'){ $jabatanStruktural_array = array( "0" => "Dosen", "1" => "Pembimbing Akademik", "2" => "Sekprodi", "3" => "Kaprodi", "4" => "Pudek", "5" => "Dekan"); } elseif($lang == 'en'){ $jabatanStruktural_array = array( "0" => "Dosen", "1" => "Pembimbing Akademik", "2" => "Sekprodi", "3" => "Kaprodi", "4" => "Pudek", "5" => "Dekan"); } return $jabatanStruktural_array; } /** * @desc Get User Status Kerja * @return array */ function getStatusKerja( $lang ) { if($lang == 'id'){ $statusKerja_array = array( "0" => "Tidak Tetap", "1" => "Tetap/Kontrak"); } elseif($lang == 'en'){ $statusKerja_array = array( "0" => "Tidak Tetap", "1" => "Tetap/Kontrak"); } return $statusKerja_array; } /** * @desc Get Jenis Program * @return array
*/ function getJenisProgram( $lang ) { if($lang == 'id'){ $jenisProgram_array = array( "0" => "REGULER", "1" => "INTERNASIONAL"); } elseif($lang == 'en'){ $jenisProgram_array = array( "0" => "REGULER", "1" => "INTERNATIONAL"); } return $jenisProgram_array; } /** * @desc getSemesterAkademik * @return array */ function getSemesterAkademik( $lang ) { if($lang == 'id'){ $semesterAkademik_array = array( "0" => "GASAL", "1" => "GENAP"); } elseif($lang == 'en'){ $semesterAkademik_array = array( "0" => "ODD", "1" => "EVEN"); } return $semesterAkademik_array; } /** * @desc getSemester * @return array */ function getSemester() { $semester_array = array( "0" => "1", "1" => "2", "2" => "3", "3" => "4", "4" => "5", "5" => "6", "6" => "7", "7" => "8"); return $semester_array; } /** * @desc getJenisAjar * @return array */ function getJenisAjar( $lang ) { if($lang == 'id'){ $jenisAjar_array = array( "0" => "TEORI", "1" => "PRAKTIKUM"); } elseif($lang == 'en'){ $jenisAjar_array = array( "0" => "THEORY", "1" => "LAB"); }
}
return $jenisAjar_array;
/** * @desc getTahunAkademik * @return array */ function getTahunAkademik() { $sekarang = (integer) date("Y"); $tahunAkademik_array = array(); $index = 0; for($i = 2010; $i <= $sekarang; $i++) { $TA = ($i) . "/" . ($i+1); $tahunAkademik_array[$index] = $TA; $index++; } return $tahunAkademik_array; } /** * @desc getHariKerja * @return array */ function getHariKerja( $lang ) { if($lang == 'id'){ $hariKerja_array = array( "0" => "SENIN", "1" => "SELASA", "2" => "RABU", "3" => "KAMIS", "4" => "JUMAT", "5" => "SABTU"); } elseif($lang == 'en'){ $hariKerja_array = array( "0" => "MONDAY", "1" => "TUESDAY", "2" => "WEDNESDAY", "3" => "THURSDAY", "4" => "FRIDAY", "5" => "SATURDAY"); } return $hariKerja_array; } /** * Get Sesi Kuliah * @return array */ function getSesiKuliah() { $sesiKuliah_array = array( "0" => "1", "1" => "2", "2" => "3", "3" => "4"); return $sesiKuliah_array; } /** * @desc getKelas * @return array */ function getKelas() { $kelas_array = array(
}
"0" => "A", "1" => "B", "2" => "C", "3" => "D"); return $kelas_array;
/** * @desc getKapasitasRuang * @return array */ function getKapasitasRuang( $lang ) { if($lang == 'id'){ $kapasitas_array = array( "B" => "Besar", "S" => "Kecil"); } elseif($lang == 'en'){ $kapasitas_array = array( "B" => "Big", "S" => "Small"); } return $kapasitas_array; } /** * @desc getLanguage * @return array */ function getLanguage() { $language_array = array( "id" => "Bahasa Indonesia", "en" => "Inggris"); return $language_array; }
$URL = preg_replace("/\?".preg_quote($_SERVER['QUERY_STRI NG'])."/", "", $URL); //remove query string if found in url $URL .= (($query == true && $_SERVER['QUERY_STRING'] != '') ? "?".$_SERVER['QUERY_STRING'] : ""); //add query string
}
function selfURL(){ if(!isset($_SERVER['REQUEST_URI'])){ $serverrequri = $_SERVER['PHP_SELF']; } else { $serverrequri = $_SERVER['REQUEST_URI']; } $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : ""; $protocol = $this>strleft(strtolower($_SERVER["SERVER_PROTOCOL"]) , "/").$s; $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]); return $protocol."://".$_SERVER['SERVER_NAME'].$port.$serv errequri; }
/* Simple function to get current page URL using comman PHP variables Function inputs: $base if set to true will add the basename to the URL $www if set to true will add www. to host if not found $query if set to true will add the query string to the URL $echo if set to true will echo the URL instead of just returning it */ function get_url($base = true, $www = false, $query = true, $echo = false){ $URL = ''; //open return variable $URL .= (($_SERVER['HTTPS'] != '') ? "https://" : "http://"); //get protocol $URL .= (($www == true && !preg_match("/^www\./", $_SERVER['HTTP_HOST'])) ? 'www.'.$_SERVER['HTTP_HOST'] : $_SERVER['HTTP_HOST']); //get host $path = (($_SERVER['REQUEST_URI'] != '') ? $_SERVER['REQUEST_URI'] : $_SERVER['PHP_SELF']); //tell the function what path variable to use $URL .= ((pathinfo($path, PATHINFO_DIRNAME) != '/') ? pathinfo($path, PATHINFO_DIRNAME).'/' : pathinfo($path, PATHINFO_DIRNAME)); //set up directory $URL .= (($base == true) ? pathinfo($path, PATHINFO_BASENAME) : ""); //add basename
if($echo == true) { echo $URL; } else { return $URL; }
function strleft($s1, $s2) { return substr($s1, 0, strpos($s1, $s2)); } } ?> ConnectionManager.class.php * @version 1.0 * @revision $Revision: 208 $ * * @package
* @subpackage */ class ConnectionManager { const DATABASE_TYPE = "database.type"; const DATABASE_PORT = "database.port"; const DATABASE_SERVER = "database.server"; const DATABASE_NAME = "database.name"; const DATABASE_USERNAME = "database.username"; const DATABASE_PASSWORD = "database.password"; /** * Constructors */ function __construct() { } /** * Open connection to database. * * @return an open database-connection object */ public static function getConnection() { try { self::ensurePdoLoaded(); $con = new PDO( DATABASE_TYPE . ":host=" . DATABASE_SERVER . ";dbname=" . DATABASE_NAME, DATABASE_USERNAME, DATABASE_PASSWORD ); return $con; } catch (PDOException $e) { print ''; print 'Oops, database is not available...
'; print '[reason: ' . $e->getMessage() . ']
'; print '
'; //die(); } } /** * Ensure that the PDO extension is loaded to the system. */ private static function ensurePdoLoaded() { if (!extension_loaded('pdo')) { if( !(bool)ini_get( "enable_dl" ) || (bool)ini_get( "safe_mode" ) ) { die( "ensurePdoLoaded(): Loading PDO extensions is not permitted.\n" ); } if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { dl('php_pdo.dll'); dl('php_pdo_' . DATABASE_TYPE . '.dll'); }
}
}
}
else { dl('pdo.so'); dl('pdo_' . DATABASE_TYPE. '.so'); }
/** * Destructor. */ function __destruct() { }
?> RFC822.php
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | // | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // | | // +----------------------------------------------------------------------+ // | Authors: Richard Heyes | // | Chuck Hagenbuch | // +----------------------------------------------------------------------+ /** * RFC 822 Email address list validation Utility * * What is it? * * This class will take an address string, and parse it into it's consituent * parts, be that either addresses, groups, or combinations. Nested groups * are not supported. The structure it returns is pretty straight forward, * and is similar to that provided by the imap_rfc822_parse_adrlist(). Use * print_r() to view the structure. * * How do I use it? * * $address_string = 'My Group: "Richard" (A comment), [email protected] (Ted Bloggs), Barney;'; * $structure = Mail_RFC822::parseAddressList($address_string, 'example.com', true) * print_r($structure); * * @author Richard Heyes * @author Chuck Hagenbuch * @version $Revision: 176 $ * @license BSD * @package Mail */ class Mail_RFC822 { /** * The address being parsed by the RFC822 object. * @var string $address */ var $address = ''; /** * The default domain to use for unqualified addresses. * @var string $default_domain */ var $default_domain = 'localhost'; /** * Should we return a nested array showing groups, or flatten everything? * @var boolean $nestGroups */ var $nestGroups = true; /** * Whether or not to validate atoms for non-ascii characters.
* @var boolean $validate */ var $validate = true; /** * The array of raw addresses built up as we parse. * @var array $addresses */ var $addresses = array(); /** * The final array of parsed address information that we build up. * @var array $structure */ var $structure = array(); /** * The current error message, if any. * @var string $error */ var $error = null; /** * An internal counter/pointer. * @var integer $index */ var $index = null; /** * The number of groups that have been found in the address list. * @var integer $num_groups * @access public */ var $num_groups = 0; /** * A variable so that we can tell whether or not we're inside a * Mail_RFC822 object. * @var boolean $mailRFC822 */ var $mailRFC822 = true; /** * A limit after which processing stops * @var int $limit */ var $limit = null; /** * Sets up the object. The address must either be set here or when * calling parseAddressList(). One or the other. * * @access public * @param string $address The address(es) to validate. * @param string $default_domain Default domain/host etc. If not supplied, will be set to localhost. * @param boolean $nest_groups Whether to return the structure with groups nested for easier viewing. * @param boolean $validate Whether to validate atoms. Turn this off if you need to run addresses through before encoding the personal names, for instance. * * @return object Mail_RFC822 A new Mail_RFC822 object.
*/ function Mail_RFC822($address = null, $default_domain = null, $nest_groups = null, $validate = null, $limit = null) { if (isset($address)) $this->address = $address; if (isset($default_domain)) $this->default_domain = $default_domain; if (isset($nest_groups)) $this->nestGroups = $nest_groups; if (isset($validate)) $this->validate = $validate; if (isset($limit)) $this->limit = $limit; } /** * Starts the whole process. The address must either be set here * or when creating the object. One or the other. * * @access public * @param string $address The address(es) to validate. * @param string $default_domain Default domain/host etc. * @param boolean $nest_groups Whether to return the structure with groups nested for easier viewing. * @param boolean $validate Whether to validate atoms. Turn this off if you need to run addresses through before encoding the personal names, for instance. * * @return array A structured array of addresses. */ function parseAddressList($address = null, $default_domain = null, $nest_groups = null, $validate = null, $limit = null) { if (!isset($this) || !isset($this->mailRFC822)) { $obj = new Mail_RFC822($address, $default_domain, $nest_groups, $validate, $limit); return $obj->parseAddressList(); } if (isset($address)) $this->address = $address; if (isset($default_domain)) $this->default_domain = $default_domain; if (isset($nest_groups)) $this->nestGroups = $nest_groups; if (isset($validate)) $this->validate = $validate; if (isset($limit)) $this->limit = $limit; $this->structure = array(); $this->addresses = array(); $this->error = null; $this->index = null; while ($this->address = $this->_splitAddresses($this>address)) { continue; } if ($this->address === false || isset($this->error)) { require_once 'PEAR.php'; return PEAR::raiseError($this->error); } // Validate each address individually. If we encounter an invalid // address, stop iterating and return an error immediately.
foreach ($this->addresses as $address) { $valid = $this->_validateAddress($address); if ($valid === false || isset($this->error)) { require_once 'PEAR.php'; return PEAR::raiseError($this->error); } if (!$this->nestGroups) { $this->structure = array_merge($this->structure, $valid); } else { $this->structure[] = $valid; } } }
return $this->structure;
/** * Splits an address into separate addresses. * * @access private * @param string $address The addresses to split. * @return boolean Success or failure. */ function _splitAddresses($address) { if (!empty($this->limit) && count($this->addresses) == $this->limit) { return ''; } {
if ($this->_isGroup($address) && !isset($this->error)) $split_char = ';'; $is_group = true; } elseif (!isset($this->error)) { $split_char = ','; $is_group = false; } elseif (isset($this->error)) { return false; } // Split the string based on the above ten or so lines. $parts = explode($split_char, $address); $string = $this->_splitCheck($parts, $split_char); // If a group... if ($is_group) { // If $string does not contain a colon outside of // brackets/quotes etc then something's fubar. // First check there's a colon at all: if (strpos($string, ':') === false) { $this->error = 'Invalid address: ' . $string; return false; } // Now check it's outside of brackets/quotes: if (!$this->_splitCheck(explode(':', $string), ':')) { return false; }
// We must have a group at this point, so increase the counter: $this->num_groups++; }
// $string now contains the first full address/group. // Add to the addresses array. $this->addresses[] = array( 'address' => trim($string), 'group' => $is_group ); // Remove the now stored address from the initial line, the +1 // is to account for the explode character. $address = trim(substr($address, strlen($string) + 1)); then
// If the next char is a comma and this was a group,
// there are more addresses, otherwise, if there are any more // chars, then there is another address. if ($is_group && substr($address, 0, 1) == ','){ $address = trim(substr($address, 1)); return $address; } elseif (strlen($address) > 0) { return $address; } else { return ''; }
}
// If you got here then something's off return false;
/** * Checks for a group at the start of the string. * * @access private * @param string $address The address to check. * @return boolean Whether or not there is a group at the start of the string. */ function _isGroup($address) { // First comma not in quotes, angles or escaped: $parts = explode(',', $address); $string = $this->_splitCheck($parts, ','); // Now we have the first address, we can reliably check for a // group by searching for a colon that's not escaped or in // quotes or angle brackets. if (count($parts = explode(':', $string)) > 1) { $string2 = $this->_splitCheck($parts, ':'); return ($string2 !== $string); } else { return false; } } /** * A common function that will check an exploded string. * * @access private * @param array $parts The exloded string. * @param string $char The char that was exploded on. * @return mixed False if the string contains unclosed quotes/brackets, or the string on success. */
function _splitCheck($parts, $char) { $string = $parts[0]; for ($i = 0; $i < count($parts); $i++) { if ($this->_hasUnclosedQuotes($string) || $this->_hasUnclosedBrackets($string, '<>') || $this->_hasUnclosedBrackets($string, '[]') || $this->_hasUnclosedBrackets($string, '()') || substr($string, -1) == '\\') { if (isset($parts[$i + 1])) { $string = $string . $char . $parts[$i + 1]; } else { $this->error = 'Invalid address spec. Unclosed bracket or quotes'; return false; } } else { $this->index = $i; break; } } }
return $string;
/** * Checks if a string has an unclosed quotes or not. * * @access private * @param string $string The string to check. * @return boolean True if there are unclosed quotes inside the string, false otherwise. */ function _hasUnclosedQuotes($string) { $string = explode('"', $string); $string_cnt = count($string); for ($i = 0; $i < (count($string) - 1); $i++) if (substr($string[$i], -1) == '\\') $string_cnt--; }
return ($string_cnt % 2 === 0);
/** * Checks if a string has an unclosed brackets or not. IMPORTANT: * This function handles both angle brackets and square brackets; * * @access private * @param string $string The string to check. * @param string $chars The characters to check for. * @return boolean True if there are unclosed brackets inside the string, false otherwise. */ function _hasUnclosedBrackets($string, $chars) { $num_angle_start = substr_count($string, $chars[0]); $num_angle_end = substr_count($string, $chars[1]); $this->_hasUnclosedBracketsSub($string, $num_angle_start, $chars[0]); $this->_hasUnclosedBracketsSub($string, $num_angle_end, $chars[1]); if ($num_angle_start < $num_angle_end) {
$this->error = 'Invalid address spec. Unmatched quote or bracket (' . $chars . ')'; return false; } else { return ($num_angle_start > $num_angle_end); } } /** * Sub function that is used only by hasUnclosedBrackets(). * * @access private * @param string $string The string to check. * @param integer &$num The number of occurences. * @param string $char The character to count. * @return integer The number of occurences of $char in $string, adjusted for backslashes. */ function _hasUnclosedBracketsSub($string, &$num, $char) { $parts = explode($char, $string); for ($i = 0; $i < count($parts); $i++){ if (substr($parts[$i], -1) == '\\' || $this>_hasUnclosedQuotes($parts[$i])) $num--; if (isset($parts[$i + 1])) $parts[$i + 1] = $parts[$i] . $char . $parts[$i + 1]; } }
return $num;
/** * Function to begin checking the address. * * @access private * @param string $address The address to validate. * @return mixed False on failure, or a structured array of address information on success. */ function _validateAddress($address) { $is_group = false; $addresses = array();
$address['address'] = ltrim(substr($address['address'], strlen($groupname . ':'))); } // If a group then split on comma and put into an array. // Otherwise, Just put the whole address in an array. if ($is_group) { while (strlen($address['address']) > 0) { $parts = explode(',', $address['address']); $addresses[] = $this->_splitCheck($parts, ','); $address['address'] = trim(substr($address['address'], strlen(end($addresses) . ','))); } } else { $addresses[] = $address['address']; } // Check that $addresses is set, if address like this: // Groupname:; // Then errors were appearing. if (!count($addresses)){ $this->error = 'Empty group.'; return false; } // Trim the whitespace from all of the address strings. array_map('trim', $addresses); // Validate each mailbox. // Format could be one of: name // [email protected] // geezer // ... or any other format valid by RFC 822. for ($i = 0; $i < count($addresses); $i++) { if (!$this->validateMailbox($addresses[$i])) { if (empty($this->error)) { $this->error = 'Validation failed for "' . $addresses[$i] . '"'; } return false; } } // Nested format if ($this->nestGroups) { if ($is_group) { $structure->addresses = $addresses; } else { $structure = $addresses[0]; }
if ($address['group']) { $is_group = true; // Get the group part of the name $parts = explode(':', $address['address']); $groupname = $this->_splitCheck($parts, ':'); $structure = array(); // And validate the group part of the name. if (!$this->_validatePhrase($groupname)){ $this->error = 'Group name did not validate.'; return false; } else { // Don't include groups if we are not nesting // them. This avoids returning invalid addresses. if ($this->nestGroups) { $structure = new stdClass; $structure->groupname = $groupname; } }
// Flat format } else { if ($is_group) { $structure = array_merge($structure, $addresses); } else { $structure = $addresses; } } }
return $structure;
/** * Function to validate a phrase. * * @access private
* @param string $phrase The phrase to check. * @return boolean Success or failure. */ function _validatePhrase($phrase) { // Splits on one or more Tab or space. $parts = preg_split('/[ \\x09]+/', $phrase, -1, PREG_SPLIT_NO_EMPTY); $phrase_parts = array(); while (count($parts) > 0){ $phrase_parts[] = $this->_splitCheck($parts, ' '); for ($i = 0; $i < $this->index + 1; $i++) array_shift($parts); } foreach ($phrase_parts as $part) { // If quoted string: if (substr($part, 0, 1) == '"') { if (!$this->_validateQuotedString($part)) { return false; } continue; }
} }
// Otherwise it's an atom: if (!$this->_validateAtom($part)) return false;
return true;
/** * Function to validate an atom which from rfc822 is: * atom = 1* * * If validation ($this->validate) has been turned off, then * validateAtom() doesn't actually check anything. This is so that you * can split a list of addresses up before encoding personal names * (umlauts, etc.), for example. * * @access private * @param string $atom The string to check. * @return boolean Success or failure. */ function _validateAtom($atom) { if (!$this->validate) { // Validation has been turned off; assume the atom is okay. return true; } // Check for any char from ASCII 0 - ASCII 127 if (!preg_match('/^[\\x00-\\x7E]+$/i', $atom, $matches)) { return false; } // Check for specials: if (preg_match('/[][()<>@,;\\:". ]/', $atom)) { return false; } // Check for control characters (ASCII 0-31):
if (preg_match('/[\\x00-\\x1F]+/', $atom)) { return false; } }
return true;
/** * Function to validate quoted string, which is: * quoted-string = <"> *(qtext/quoted-pair) <"> * * @access private * @param string $qstring The string to check * @return boolean Success or failure. */ function _validateQuotedString($qstring) { // Leading and trailing " $qstring = substr($qstring, 1, -1); // Perform check. return !(preg_match('/(.)[\x0D\\\\"]/', $qstring, $matches) && $matches[1] != '\\'); } /** * Function to validate a mailbox, which is: * mailbox = addr-spec ; simple address * / phrase route-addr ; name and route-addr * * @access public * @param string &$mailbox The string to check. * @return boolean Success or failure. */ function validateMailbox(&$mailbox) { // A couple of defaults. $phrase = ''; $comment = ''; $comments = array(); // Catch any RFC822 comments and store them separately. $_mailbox = $mailbox; while (strlen(trim($_mailbox)) > 0) { $parts = explode('(', $_mailbox); $before_comment = $this->_splitCheck($parts, '('); if ($before_comment != $_mailbox) { // First char should be a (. $comment = substr(str_replace($before_comment, '', $_mailbox), 1); $parts = explode(')', $comment); $comment = $this->_splitCheck($parts, ')'); $comments[] = $comment; // +1 is for the trailing ) $_mailbox = substr($_mailbox, strpos($_mailbox, $comment)+strlen($comment)+1); } else { break; } } foreach ($comments as $comment) { $mailbox = str_replace("($comment)", '', $mailbox); } $mailbox = trim($mailbox);
{
// Check for name + route-addr if (substr($mailbox, -1) == '>' && substr($mailbox, 0, 1) != '<') { $parts = explode('<', $mailbox); $name = $this->_splitCheck($parts, '<'); $phrase = trim($name); $route_addr = trim(substr($mailbox, strlen($name.'<'), -1)); if ($this->_validatePhrase($phrase) === false || ($route_addr = $this->_validateRouteAddr($route_addr)) === false) { return false; } // Only got addr-spec } else { // First snip angle brackets if present. if (substr($mailbox, 0, 1) == '<' && substr($mailbox, -1) == '>') { $addr_spec = substr($mailbox, 1, -1); } else { $addr_spec = $mailbox; } if (($addr_spec = $this>_validateAddrSpec($addr_spec)) === false) { return false; } } // Construct the object that will be returned. $mbox = new stdClass();
// If $route is same as $route_addr then the colon was
in
// quotes or brackets or, of course, non existent. if ($route === $route_addr){ unset($route); $addr_spec = $route_addr; if (($addr_spec = $this>_validateAddrSpec($addr_spec)) === false) { return false; } } else { // Validate route part. if (($route = $this->_validateRoute($route)) === false) { return false; }
}
$mailbox = $mbox; return true;
/** * This function validates a route-addr which is: * route-addr = "<" [route] addr-spec ">" * * Angle brackets have already been removed at the point of * getting to this function. * * @access private * @param string $route_addr The string to check. * @return mixed False on failure, or an array containing validated address/route information on success. */ function _validateRouteAddr($route_addr)
$addr_spec = substr($route_addr, strlen($route .
':'));
// Validate addr-spec part. if (($addr_spec = $this>_validateAddrSpec($addr_spec)) === false) { return false; } }
// Add the phrase (even if empty) and comments $mbox->personal = $phrase; $mbox->comment = isset($comments) ? $comments : array(); if (isset($route_addr)) { $mbox->mailbox = $route_addr['local_part']; $mbox->host = $route_addr['domain']; $route_addr['adl'] !== '' ? $mbox->adl = $route_addr['adl'] : ''; } else { $mbox->mailbox = $addr_spec['local_part']; $mbox->host = $addr_spec['domain']; }
// Check for colon. if (strpos($route_addr, ':') !== false) { $parts = explode(':', $route_addr); $route = $this->_splitCheck($parts, ':'); } else { $route = $route_addr; }
if (isset($route)) { $return['adl'] = $route; } else { $return['adl'] = ''; }
}
$return = array_merge($return, $addr_spec); return $return;
/** * Function to validate a route, which is: * route = 1#("@" domain) ":" * * @access private * @param string $route The string to check. * @return mixed False on failure, or the validated $route on success. */ function _validateRoute($route) { // Split on comma. $domains = explode(',', trim($route)); foreach ($domains as $domain) { $domain = str_replace('@', '', trim($domain)); if (!$this->_validateDomain($domain)) return false; } }
return $route;
/**
* Function to validate a domain, though this is not quite what * you expect of a strict internet domain. * * domain = sub-domain *("." sub-domain) * * @access private * @param string $domain The string to check. * @return mixed False on failure, or the validated domain on success. */ function _validateDomain($domain) { // Note the different use of $subdomains and $sub_domains $subdomains = explode('.', $domain); while (count($subdomains) > 0) { $sub_domains[] = $this>_splitCheck($subdomains, '.'); for ($i = 0; $i < $this->index + 1; $i++) array_shift($subdomains); } foreach ($sub_domains as $sub_domain) { if (!$this>_validateSubdomain(trim($sub_domain))) return false; }
}
// Managed to get here, so return input. return $domain;
/** * Function to validate a subdomain: * subdomain = domain-ref / domain-literal * * @access private * @param string $subdomain The string to check. * @return boolean Success or failure. */ function _validateSubdomain($subdomain) { if (preg_match('|^\[(.*)]$|', $subdomain, $arr)){ if (!$this->_validateDliteral($arr[1])) return false; } else { if (!$this->_validateAtom($subdomain)) return false; }
}
// Got here, so return successful. return true;
/** * Function to validate a domain literal: * domain-literal = "[" *(dtext / quoted-pair) "]" * * @access private * @param string $dliteral The string to check. * @return boolean Success or failure. */ function _validateDliteral($dliteral) { return !preg_match('/(.)[][\x0D\\\\]/', $dliteral, $matches) && $matches[1] != '\\'; }
/** * Function to validate an addr-spec. * * addr-spec = local-part "@" domain * * @access private * @param string $addr_spec The string to check. * @return mixed False on failure, or the validated addrspec on success. */ function _validateAddrSpec($addr_spec) { $addr_spec = trim($addr_spec); // Split on @ sign if there is one. if (strpos($addr_spec, '@') !== false) { $parts = explode('@', $addr_spec); $local_part = $this->_splitCheck($parts, '@'); $domain = substr($addr_spec, strlen($local_part . '@')); // No @ sign so assume the default domain. } else { $local_part = $addr_spec; $domain = $this->default_domain; } if (($local_part = $this>_validateLocalPart($local_part)) === false) return false; if (($domain = $this->_validateDomain($domain)) === false) return false; // Got here so return successful. return array('local_part' => $local_part, 'domain' => $domain); } /** * Function to validate the local part of an address: * local-part = word *("." word) * * @access private * @param string $local_part * @return mixed False on failure, or the validated local part on success. */ function _validateLocalPart($local_part) { $parts = explode('.', $local_part); $words = array(); // Split the local_part into words. while (count($parts) > 0){ $words[] = $this->_splitCheck($parts, '.'); for ($i = 0; $i < $this->index + 1; $i++) { array_shift($parts); } } // Validate each word. foreach ($words as $word) { // If this word contains an unquoted space, it is invalid. (6.2.4) if (strpos($word, ' ') && $word[0] !== '"') { return false; }
if ($this->_validatePhrase(trim($word)) === false) return false; }
}
// Managed to get here, so return the input. return $local_part;
/** * Returns an approximate count of how many addresses are in the * given string. This is APPROXIMATE as it only splits based on a * comma which has no preceding backslash. Could be useful as * large amounts of addresses will end up producing *large* * structures when used with parseAddressList(). * * @param string $data Addresses to count * @return int Approximate count */ function approximateCount($data) { return count(preg_split('/(?@<domain>. This can be sufficient for most * people. Optional stricter mode can be utilised which restricts * mailbox characters allowed to alphanumeric, full stop, hyphen * and underscore. * * @param string $data Address to check * @param boolean $strict Optional stricter mode * @return mixed False if it fails, an indexed array * username/domain if it matches */ function isValidInetAddress($data, $strict = false) { $regex = $strict ? '/^([.0-9a-z_-]+)@(([0-9a-z]+\.)+[0-9a-z]{2,4})$/i' : '/^([*+!.$|\'\\%\/0-9az^_`{}=?~:-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,4})$/i'; if (preg_match($regex, trim($data), $matches)) { return array($matches[1], $matches[2]); } else { return false; } } } tlJadwal.class.php
*/ /** * tlJadwal * * @author afrialdi.syahputra * @version 1.0 * @revision $Revision: 209 $ * * @package * @subpackage * * PHP Ver : 5.2.9 */ class tlJadwal { var $db; function tlJadwal($db_object) { $this->db = $db_object;
}
$this->config = new Config($db_object); $this->setting = new tlSiteSetting($db_object); $this->ruang = new tlRuang($db_object); $this->matakuliah = new tlMataKuliah($db_object);
/** * @desc getJadwalByIdKesediaan * @param from $idKesediaanMengajar * @var * @return Array **/ function getJadwalByIdKesediaan ( $idKesediaanMengajar ) { if ($this->db) { $query = "SELECT * FROM " . TBL_JADWAL . " AS a LEFT JOIN (" . TBL_KESEDIAAN . " AS b, " . TBL_RUANG . " AS c) ON (a.idKesediaanMengajar = b.idKesediaanMengajar AND a.idRuang = c.idRuang) WHERE a.idKesediaanMengajar = '" . $idKesediaanMengajar . "' "; $result = $this->db->query($query); // print "<pre>"; // print $query ."
"; // print_r ($result); // exit; return $result; } else { echo 'Error line 43 tlJadwal.class.php'; return; } } /** * @desc getAllJadwalByParameter * @param from $_GET * @var * @return Array **/ function getAllJadwalByParameter ( $_GET )
{
if ($this->db) { $query = "SELECT * FROM " . TBL_JADWAL . " AS a LEFT JOIN (" . TBL_KESEDIAAN . " AS b, " . TBL_PENAWARAN . " AS c, " . TBL_PRODI . " AS d, " . TBL_USER . " AS e) ON (a.idKesediaanMengajar=b.idKesediaanMengajar AND a.idPenawaranMataKuliah = c.idPenawaranMataKuliah AND c.idProgramStudi = d.idProgramStudi AND b.systemUserId = e.systemUserId) LEFT JOIN (" . TBL_MATAKULIAH . " AS f) ON (c.idMataKuliah = f.idMataKuliah) LEFT JOIN (" . TBL_DOSEN . " AS g) ON (e.NIDN = g.NIDN) WHERE c.idProgramStudi = '" . $_GET['idProgramStudi'] . "' AND c.jenisProgram = '" . $_GET['jenisProgram'] . "' AND c.tahunAkademik = '" . $_GET['tahunAkademik'] . "' AND c.semesterAkademik = '" . $_GET['semesterAkademik'] . "' AND c.semesterPenawaran = '" . $_GET['semesterPenawaran'] . "' AND AND a.kelas = '" . $_GET['kelas'] . "'"; // print "<pre>"; // print $query ."
"; // print_r ($_GET); // exit; $result = $this->db->query($query); return $result; } else { echo 'Error line 59 tlKesediaanMengajar.class.php'; return; } } /** * @desc getAllJadwalBySemesterHaridanSesi * @param from $_GET * @var * @return Array **/ function getJadwalByHariSesiRuang ( $_GET, $hariKesediaanMengajar, $sesiKesediaanMengajar, $idRuang ) { if ($this->db) { $query = "SELECT * FROM " . TBL_JADWAL . " AS a LEFT JOIN (" . TBL_KESEDIAAN . " AS b, " . TBL_PENAWARAN . " AS c, " . TBL_PRODI . " AS d, " . TBL_USER . " AS e, " . TBL_RUANG . " AS h) ON (a.idKesediaanMengajar=b.idKesediaanMengajar AND b.idPenawaranMataKuliah = c.idPenawaranMataKuliah AND c.idProgramStudi = d.idProgramStudi AND b.systemUserId=e.systemUserId AND a.idRuang=h.idRuang) LEFT JOIN (" . TBL_MATAKULIAH . " AS f) ON (c.idMataKuliah = f.idMataKuliah) LEFT JOIN (" . TBL_DOSEN . " AS g) ON (e.NIDN = g.NIDN) WHERE c.idProgramStudi = '" . $_GET['idProgramStudi'] . "' AND c.jenisProgram = '" . $_GET['jenisProgram'] . "'
AND c.tahunAkademik = '" . $_GET['tahunAkademik'] . "' AND c.semesterAkademik = '" . $_GET['semesterAkademik'] . "' "; if($_GET['semesterPenawaran'] > 0) { $query .= " AND c.semesterPenawaran = '" . $_GET['semesterPenawaran'] . "' "; } if($_GET['kelas'] != "") { $query .= " AND a.kelas = '" . $_GET['kelas'] . "' "; } if($hariKesediaanMengajar >= 0) { $query .= " AND b.hariKesediaanMengajar = '" . $hariKesediaanMengajar . "' "; } if($sesiKesediaanMengajar > 0) { $query .= " AND b.sesiKesediaanMengajar = '" . $sesiKesediaanMengajar . "' "; } if($idRuang != "") { $query .= " AND h.idRuang = '" . $idRuang . "'"; } $result = $this->db->query($query); print "<pre>"; print $query ."
"; print_r ($_GET); print_r ($result); exit; return $result;
// // // // //
}
} else { echo 'Error line 59 tlKesediaanMengajar.class.php'; return; }
/** * @desc getAllKesediaandataByParameter * @param from $_GET * @var * @return Array **/ function getAllKesediaanByParameter ( $_GET, $status=0 ) { if ($this->db) { $query = "SELECT * FROM " . TBL_JADWAL . " AS a LEFT JOIN (" . TBL_PENAWARAN . " AS b, " . TBL_PRODI . " AS c, " . TBL_USER . " AS d) ON (a.idPenawaranMataKuliah = b.idPenawaranMataKuliah AND b.idProgramStudi = c.idProgramStudi AND a.systemUserId = d.systemUserId AND a.systemUserId = d.systemUserId) LEFT JOIN (" . TBL_MATAKULIAH . " AS e) ON (b.idMataKuliah = e.idMataKuliah) LEFT JOIN (" . TBL_DOSEN . " AS f) ON (d.NIDN = f.NIDN) WHERE b.idProgramStudi = '" . $_GET['idProgramStudi'] . "' AND b.jenisProgram = '" . $_GET['jenisProgram'] . "'
AND b.tahunAkademik = '" . $_GET['tahunAkademik'] . "' AND b.semesterAkademik = '" . $_GET['semesterAkademik'] . "' "; if($_GET['semesterPenawaran'] > 0){ $query .= " AND b.semesterPenawaran = '" . $_GET['semesterPenawaran'] . "' "; } if($status > 0){ $query .= " AND status = 1 "; } else{ $query .= "AND status = 0 "; } $query .= "ORDER BY e.namaMataKuliah ASC, f.statusKerja ASC, f.jabatanStruktural DESC, a.tanggalPerbaharui ASC, a.sesiKesediaanMengajar ASC"; // print "<pre>"; // print $query ."
"; // print_r ($_GET); // exit; $result = $this->db->query($query); return $result; } else { echo 'Error line 59 tlKesediaanMengajar.class.php'; return; } } /** * @desc Save an instance of $_POST to database. * @param $_POST * @var * @return Array */ function save( $_POST ) { if ($this->db) { /* * KesediaanMengajar Exist * do: Update Data */ if ( $this>isExist($_POST['idKesediaanMengajar'])) { $jadwal = $this>getJadwalByIdKesediaan($_POST['idKesediaanMengajar ']); /* * Kondisi 1 : Kelas POST == kelas dalam database, sesuai dengan idKesediaanMengajar */ if($jadwal[0]['kelas'] == $_POST['kelas']) { /* * Cek Jenis Ajar * Kondisi 1 " jenisAjar = THEORY */ if($_POST['jenisAjar'] == "0") { /* * Don't cek Kelas * Check Available Ruang */
//$allRuang = $this->ruang>getRuangByProgramStudi($_POST['idProgramStudi'], $_POST['kapasitasRuang']); $allRuang = $this->ruang->getAllClass(); for($i=0; $iisExistRuang($_POST, $allRuang[$i]['idRuang']); if($ruang) { continue; } else { /* * UPDATE TABLE JADWAL DATA */ $sql = "UPDATE " . TBL_JADWAL . " SET "; $sql .= "idRuang='" . $allRuang[$i]['idRuang'] . "', "; $sql .= "kelas='" . $this->escape( $_POST['kelas'] ) . "' "; $sql .= "WHERE idKesediaanMengajar='" . $_POST['idKesediaanMengajar'] . "'"; $result = $this->db->query($sql); return $result;
} } //$result['ruang'] = "Ruang dengan kapasitas " . $_POST['kapasitasRuang'] ." untuk hari " . $_POST['hariKesediaanMengajar'] . " sesi " . $_POST['sesiKesediaanMengajar'] . " sudah tidak tersedia."; $result['ruang'] = "Class Room for " . $_POST['hariKesediaanMengajar'] . " session " . $_POST['sesiKesediaanMengajar'] . " is not available."; return $result; } /* * Kondisi 2 : jenisAjar = LAB */ else { /* * getRuangByMataKuliah */ $lab = $this->matakuliah>getMataKuliahByID($_POST['idMataKuliah']); /* * Check isExist Ruang in TBL_JADWAL */ $ruang = $this->isExistRuang($_POST, $lab[0]['idRuang']); if($ruang) { $result['ruang'] = $lab[0]['namaRuang'] . " for " . $_POST['hariKesediaanMengajar'] . " session " . $_POST['sesiKesediaanMengajar'] . " is not available."; return $result;
} else { /* * UPDATE TABLE JADWAL DATA */ $sql = "UPDATE " . TBL_JADWAL . "
SET ";
$sql .= "idRuang='" . $lab[0]['idRuang'] .
"', ";
$sql .= "kelas='" . $this->escape( $_POST['kelas'] ) . "' "; $sql .= "WHERE idKesediaanMengajar='" . $_POST['idKesediaanMengajar'] . "'";
}
}
$result = $this->db->query($sql); return $result;
} /* * Kondisi 2 : Kelas POST != kelas dalam Jadwal, sesuai dengan idKesediaanMengajar */ else { /* * Cek Jenis Ajar * Kondisi 1 " jenisAjar = THEORY */ if($_POST['jenisAjar'] == "0") { /* * Cek Kelas at spesific hari and Sesi */ $kelas = $this->cekKelas( $_POST ); if(!$kelas) { /* * Check Available Ruang */ //$allRuang = $this->ruang>getRuangByProgramStudi($_POST['idProgramStudi'], $_POST['kapasitasRuang']); $allRuang = $this->ruang->getAllClass(); for($i=0; $iisExistRuang($_POST, $allRuang[$i]['idRuang']); if($ruang) { continue; } else { //UPDATE TABLE JADWAL DATA $sql = "UPDATE " . TBL_JADWAL . " SET "; $sql .= "idRuang='" . $allRuang[$i]['idRuang'] . "', ";
$sql .= "kelas='" . $this->escape( $_POST['kelas'] ) . "' "; $sql .= "WHERE idKesediaanMengajar='" . $_POST['idKesediaanMengajar'] . "'"; $result = $this->db->query($sql); return $result; }
} $result['ruang'] = "Class Room for " . $_POST['hariKesediaanMengajar'] . " session " . $_POST['sesiKesediaanMengajar'] . " is not available."; return $result; } else { $result['kelas'] = "Students for " . $_POST['hariKesediaanMengajar'] . " session " . $_POST['sesiKesediaanMengajar'] . " is not available."; return $result; } } /* * Kondisi 2 : jenisAjar = LAB */ else { /* * getRuangByMataKuliah */ $lab = $this->matakuliah>getMataKuliahByID($_POST['idMataKuliah']); /* * Deprecated * Check isExist Ruang in TBL_JADWAL * lab allready taken by this jadwal */ //$ruang = $this->isExistRuang($_POST, $lab[0]['idRuang']); //if($ruang) //{ // $result['ruang'] = $lab[0]['namaRuang'] . " untuk hari " . $_POST['hariKesediaanMengajar'] . " sesi " . $_POST['sesiKesediaanMengajar'] . " sudah tidak tersedia."; // return $result; //} //else //{ /* * UPDATE TABLE JADWAL DATA */ $sql = "UPDATE " . TBL_JADWAL . " SET "; "', ";
$sql .= "idRuang='" . $lab[0]['idRuang'] .
$sql .= "kelas='" . $this->escape( $_POST['kelas'] ) . "' "; $sql .= "WHERE idKesediaanMengajar='" . $_POST['idKesediaanMengajar'] . "'"; $result = $this->db->query($sql);
}
}
return $result; //}
} /* * Kesediaan Mengajar doesn't exist * Insert new Data */ else { /* * Cek Total Pemenuhan SKS */ $totalPemenuhanSKS = $this>cekTotalPemenuhanSKS( $_POST ); if($totalPemenuhanSKS) { /* * Cek Kelas at spesific hari and Sesi */ $kelas = $this->cekKelas( $_POST ); if(!$kelas) { /* * Jenis Ajar == "THEORY" */ if($_POST['jenisAjar'] == "0") { /* * Check Available Ruang */ //$allRuang = $this->ruang>getRuangByProgramStudi($_POST['idProgramStudi'], $_POST['kapasitasRuang']); $allRuang = $this->ruang->getAllClass(); for($i=0; $iisExistRuang($_POST, $allRuang[$i]['idRuang']); if($ruang) { continue; } else { //INSERT NEW DATA INTO DATABASE $sql = "INSERT INTO " . TBL_JADWAL . " "; $sql .= "(idJadwalPerkuliahan, idkesediaanMengajar, idRuang, kelas) "; $sql .= "VALUES ("; $sql .= "'', "; $sql .= "'" . $this->escape( $_POST['idKesediaanMengajar'] ) . "', "; $sql .= "'" . $allRuang[$i]['idRuang'] . "', "; $sql .= "'" . $this->escape( $_POST['kelas'] ) . "'"; $sql .= ") "; $result = $this->db->query($sql); /*
* UPDATE KESEDIAAN
STATUS
*/ $qrUpdate = "UPDATE ".TBL_KESEDIAAN." SET status='1' WHERE idKesediaanMengajar='".$_POST['idKesediaanMengajar']. "'"; $resultUpdate = $this->db>query($qrUpdate); }
return $result;
} $result['ruang'] = "Class Room with for " . $_POST['hariKesediaanMengajar'] . " session " . $_POST['sesiKesediaanMengajar'] . " is not available."; return $result; } /* * Jenis Ajar == "LAB" */ else { /* * getRuangByMataKuliah */ $lab = $this->matakuliah>getMataKuliahByID($_POST['idMataKuliah']);
TBL_JADWAL
/* * Check isExist Ruang in
*/ $ruang = $this->isExistRuang($_POST, $lab[0]['idRuang']); if($ruang) { $result['ruang'] = $lab[0]['namaRuang'] . " for " . $_POST['hariKesediaanMengajar'] . " session " . $_POST['sesiKesediaanMengajar'] . " is not available."; return $result; } else { //INSERT NEW DATA INTO DATABASE $sql = "INSERT INTO " . TBL_JADWAL . " "; $sql .= "(idJadwalPerkuliahan, idkesediaanMengajar, idRuang, kelas) "; $sql .= "VALUES ("; $sql .= "'', "; $sql .= "'" . $this->escape( $_POST['idKesediaanMengajar'] ) . "', "; $sql .= "'" . $lab[0]['idRuang'] . "', "; $sql .= "'" . $this->escape( $_POST['kelas'] ) . "'"; $sql .= ") "; $result = $this->db->query($sql); /* * UPDATE KESEDIAAN STATUS */ $qrUpdate = "UPDATE ".TBL_KESEDIAAN." SET status='1' WHERE idKesediaanMengajar='".$_POST['idKesediaanMengajar']. "'"; $resultUpdate = $this->db>query($qrUpdate);
}
}
return $result;
} else { $result['kelas'] = "Students for " . $_POST['hariKesediaanMengajar'] . " session " . $_POST['sesiKesediaanMengajar'] . " is not available."; return $result; } } else { $result['pemenuhanSKS'] = "Too Many Credit Hours Taken."; return $result; } } } else { echo 'Error line 82 tlKesediaanMengajar.class.php > Insert/Update Failed!'; return; } } /** * @desc getTotalPemenuhanSKS based on User on JADWAL * * @param $_POST * @return true if available otherwise false */ function cekTotalPemenuhanSKS ( $_POST ) { $query = "SELECT *, SUM(sks) AS totalSKS FROM " . TBL_JADWAL . " AS a LEFT JOIN (" . TBL_KESEDIAAN . " AS b, " . TBL_PENAWARAN . " AS c, " . TBL_PRODI . " AS d, " . TBL_USER . " AS e) ON (a.idkesediaanMengajar = b.idKesediaanMengajar AND b.idPenawaranMataKuliah = c.idPenawaranMataKuliah AND c.idProgramStudi = d.idProgramStudi AND b.systemUserId = e.systemUserId) LEFT JOIN (" . TBL_MATAKULIAH . " AS f) ON (c.idMataKuliah = f.idMataKuliah) LEFT JOIN (" . TBL_DOSEN . " AS g) ON (e.NIDN = g.NIDN) WHERE c.jenisProgram = '" . $_POST['jenisProgram'] . "' AND c.tahunAkademik = '" . $_POST['tahunAkademik'] . "' AND c.semesterAkademik = '" . $_POST['semesterAkademik'] . "' AND b.systemUserID = '" . $_POST['systemUserId'] . "'"; $result = $this->db->query($query); //Kalo STATUS KERJA TETAP/KONTRAK if($result[0]['statusKerja'] = "1") { //Kalo DEKAN dan PUDEK dan KAPROG if($result[0]['jabatanStruktural'] > 2) { $result[0]['totalSKS'] += 6;
} //Kalo SEKPROG dan PA elseif($result[0]['jabatanStruktural'] > 0) { $result[0]['totalSKS'] += 4; } else { $result[0]['totalSKS'] = 0; } //Kalo lebih dari 12 return false if(($result[0]['totalSKS'] + $_POST['sks']) > 12) { // print "<pre>"; // print_r($result); // print $query ."
"; // print ($result[0]['totalSKS'] + $_POST['sks']) ." False
"; // exit; return false; } else { // print "<pre>"; // print_r($result); // print $query ."
"; // print ($result[0]['totalSKS'] + $_POST['sks']) ." True
"; // exit; return true; } } //Kalo STATUS KERJA TIDAK TETAP if($result[0]['statusKerja'] = "0") { //Kalo lebih dari 8 return false if(($result[0]['totalSKS'] + $_POST['sks']) > 8) { // print "<pre>"; // print_r($result); // print $query ."
"; // print ($result[0]['totalSKS'] + $_POST['sks']) ." False
"; // exit; return false; } else { // print "<pre>"; // print_r($result); // print $query ."
"; // print ($result[0]['totalSKS'] + $_POST['sks']) ." True
"; // exit; return true; } } } /** * @desc cekKelas based on TIME JADWAL * * @param $_POST * @return true if available */ function cekKelas ( $_POST ) {
$query = "SELECT COUNT(a.idKesediaanMengajar) AS found FROM " . TBL_JADWAL . " AS a LEFT JOIN (" . TBL_KESEDIAAN . " AS b, " . TBL_PENAWARAN . " AS c, " . TBL_PRODI . " AS d) ON (a.idkesediaanMengajar = b.idKesediaanMengajar AND b.idPenawaranMataKuliah = c.idPenawaranMataKuliah AND c.idProgramStudi = d.idProgramStudi) WHERE c.jenisProgram = '" . $_POST['jenisProgram'] . "' AND c.tahunAkademik = '" . $_POST['tahunAkademik'] . "' AND c.semesterAkademik = '" . $_POST['semesterAkademik'] . "' AND c.semesterPenawaran = '" . $_POST['semesterPenawaran'] . "' AND b.hariKesediaanMengajar = '" . $_POST['hariKesediaanMengajar'] . "' AND b.sesiKesediaanMengajar = '" . $_POST['sesiKesediaanMengajar'] . "' AND a.kelas = '" . $_POST['kelas'] . "'";
// // // //
}
if ($this->db) { $result = $this->db->query($query); print "<pre>"; print_r($result); print $query ."
"; exit; } if ($result) { $count = 0; if (is_array($result)) { $count = $result[0][0]; } return $count > 0; } return false;
/** * getTotalPemenuhanSKS based on JADWAL * * @param $_GET, $systemUserID * @return totalPemenuhanSKS */ function getTotalPemenuhanSKS ( $_GET, $systemUserId ) { $query = "SELECT g.statusKerja, g.jabatanStruktural, SUM(f.sks) AS totalSKS FROM " . TBL_JADWAL . " AS a LEFT JOIN (" . TBL_KESEDIAAN . " AS b, " . TBL_PENAWARAN . " AS c, " . TBL_PRODI . " AS d, " . TBL_USER . " AS e) ON (a.idkesediaanMengajar = b.idKesediaanMengajar AND b.idPenawaranMataKuliah = c.idPenawaranMataKuliah AND c.idProgramStudi = d.idProgramStudi AND b.systemUserId = e.systemUserId) LEFT JOIN (" . TBL_MATAKULIAH . " AS f) ON (c.idMataKuliah = f.idMataKuliah) LEFT JOIN (" . TBL_DOSEN . " AS g) ON (e.NIDN = g.NIDN) WHERE c.idProgramStudi = '" . $_GET['idProgramStudi'] . "' AND c.jenisProgram = '" . $_GET['jenisProgram'] . "'
AND c.tahunAkademik = '" . $_GET['tahunAkademik'] . "' AND c.semesterAkademik = '" . $_GET['semesterAkademik'] . "' AND b.systemUserID = '" . $systemUserId . "'"; $result = $this->db->query($query); //Kalo STATUS KERJA TETAP/KONTRAK if($result[0][0] = "1") { //Kalo DEKAN dan PUDEK dan KAPROG if($result[0][1] > 2) { $result[0][2] += 6; } //Kalo SEKPROG dan PA elseif($result[0][1] > 0) { $result[0][2] += 4; } } // // // // // }
print "<pre>"; print_r($result); print $query ."
"; print $result[0][2] ."
"; exit; return $result[0][2];
/** * @desc getAllDosenMengajar * Ambil semua dosen yang sudah dibuat jadwal mengajar * * @param $_GET * @return array */ function getAllDosenMengajar ( $_GET ) { $query = "SELECT DISTINCT(e.systemUserId), g.name, g.statusKerja, g.jabatanStruktural, g.mobile, g.phone FROM " . TBL_JADWAL . " AS a LEFT JOIN (" . TBL_KESEDIAAN . " AS b, " . TBL_PENAWARAN . " AS c, " . TBL_PRODI . " AS d, " . TBL_USER . " AS e) ON (a.idkesediaanMengajar = b.idKesediaanMengajar AND b.idPenawaranMataKuliah = c.idPenawaranMataKuliah AND c.idProgramStudi = d.idProgramStudi AND b.systemUserId = e.systemUserId) LEFT JOIN (" . TBL_MATAKULIAH . " AS f) ON (c.idMataKuliah = f.idMataKuliah) LEFT JOIN (" . TBL_DOSEN . " AS g) ON (e.NIDN = g.NIDN) WHERE c.idProgramStudi = '" . $_GET['idProgramStudi'] . "' AND c.jenisProgram = '" . $_GET['jenisProgram'] . "' AND c.tahunAkademik = '" . $_GET['tahunAkademik'] . "' AND c.semesterAkademik = '" . $_GET['semesterAkademik'] . "'"; $result = $this->db->query($query); // print "<pre>"; // print_r($result); // print $query ."
"; // exit; return $result; }
/** * @desc getJadwalMengajarDosen * Ambil dosen yang sudah dibuat jadwal mengajar * * @param $_GET * @return array */ function getJadwalMengajarDosen ( $_GET ) { $query = "SELECT * FROM " . TBL_JADWAL . " AS a LEFT JOIN (" . TBL_KESEDIAAN . " AS b, " . TBL_PENAWARAN . " AS c, " . TBL_PRODI . " AS d, " . TBL_USER . " AS e, " . TBL_RUANG . " AS h) ON (a.idkesediaanMengajar = b.idKesediaanMengajar AND b.idPenawaranMataKuliah = c.idPenawaranMataKuliah AND c.idProgramStudi = d.idProgramStudi AND b.systemUserId = e.systemUserId AND a.idRuang = h.idRuang) LEFT JOIN (" . TBL_MATAKULIAH . " AS f) ON (c.idMataKuliah = f.idMataKuliah) LEFT JOIN (" . TBL_DOSEN . " AS g) ON (e.NIDN = g.NIDN) WHERE c.idProgramStudi = '" . $_GET['idProgramStudi'] . "' AND c.jenisProgram = '" . $_GET['jenisProgram'] . "' AND c.tahunAkademik = '" . $_GET['tahunAkademik'] . "' AND c.semesterAkademik = '" . $_GET['semesterAkademik'] . "' "; if($_GET['find'] == "dosen" AND $_GET['systemUserId'] != '') { $query .= " AND e.systemUserId = '" . $_GET['systemUserId'] . "' ORDER BY g.name ASC, c.semesterPenawaran ASC"; } elseif($_GET['find'] == "dosen" AND $_GET['name'] != '') { $query .= " AND g.name LIKE '%" . trim($_GET['name']) . "%' ORDER BY g.name ASC, c.semesterPenawaran ASC"; } elseif($_GET['find'] == "matakuliah" AND $_GET['namaMataKuliah'] != '') { $query .= " AND f.namaMataKuliah LIKE '%" . trim($_GET['namaMataKuliah']) . "%' ORDER BY f.namaMataKuliah ASC, c.semesterPenawaran ASC"; } $result = $this->db->query($query); // print "<pre>"; // print $query ."
"; // print_r($result); // exit; return $result; } /** * @desc getTopDosen * Ambil dosen yang sudah dibuat jadwal mengajar * * @param $_GET * @return array */ function getTopDosen ( $_GET ) {
$query = "SELECT g.name, COUNT(b.idKesediaanMengajar) AS totalCount FROM " . TBL_JADWAL . " AS a LEFT JOIN (" . TBL_KESEDIAAN . " AS b, " . TBL_PENAWARAN . " AS c, " . TBL_PRODI . " AS d, " . TBL_USER . " AS e, " . TBL_RUANG . " AS h) ON (a.idkesediaanMengajar = b.idKesediaanMengajar AND b.idPenawaranMataKuliah = c.idPenawaranMataKuliah AND c.idProgramStudi = d.idProgramStudi AND b.systemUserId = e.systemUserId AND a.idRuang = h.idRuang) LEFT JOIN (" . TBL_MATAKULIAH . " AS f) ON (c.idMataKuliah = f.idMataKuliah) LEFT JOIN (" . TBL_DOSEN . " AS g) ON (e.NIDN = g.NIDN) WHERE c.idProgramStudi = '" . $_GET['idProgramStudi'] . "' AND c.jenisProgram = '" . $_GET['jenisProgram'] . "' AND c.tahunAkademik = '" . $_GET['tahunAkademik'] . "' AND c.semesterAkademik = '" . $_GET['semesterAkademik'] . "' GROUP BY b.systemUserId ORDER BY totalCount "; if($_GET['filter'] == 1) { $query .= "DESC"; } elseif($_GET['filter'] == 2) { $query .= "ASC"; } $result = $this->db->query($query); // print "<pre>"; // print $query ."
"; // print_r($result); // exit; return $result; } /** * @desc getTopRuang * Ambil ruang yang sudah dibuat jadwal mengajar * * @param $_GET * @return array */ function getTopRuang ( $_GET ) { $query = "SELECT h.namaRuang, COUNT(a.idRuang) AS totalCount FROM " . TBL_JADWAL . " AS a LEFT JOIN (" . TBL_KESEDIAAN . " AS b, " . TBL_PENAWARAN . " AS c, " . TBL_PRODI . " AS d, " . TBL_USER . " AS e, " . TBL_RUANG . " AS h) ON (a.idkesediaanMengajar = b.idKesediaanMengajar AND b.idPenawaranMataKuliah = c.idPenawaranMataKuliah AND c.idProgramStudi = d.idProgramStudi AND b.systemUserId = e.systemUserId AND a.idRuang = h.idRuang) LEFT JOIN (" . TBL_MATAKULIAH . " AS f) ON (c.idMataKuliah = f.idMataKuliah) LEFT JOIN (" . TBL_DOSEN . " AS g) ON (e.NIDN = g.NIDN) WHERE c.idProgramStudi = '" . $_GET['idProgramStudi'] . "' AND c.jenisProgram = '" . $_GET['jenisProgram'] . "'
AND c.tahunAkademik = '" . $_GET['tahunAkademik'] . "' AND c.semesterAkademik = '" . $_GET['semesterAkademik'] . "' GROUP BY a.idRuang ORDER BY totalCount "; if($_GET['filter'] == 4) { $query .= "DESC"; } elseif($_GET['filter'] == 5) { $query .= "ASC"; } $result = $this->db->query($query); // print "<pre>"; // print $query ."
"; // print_r($result); // exit; return $result; } /** * @desc Check whether Ruang with specific idRuang exist in database * * @param $idRuang * @return true if exist false otherwise */ function isExistRuang( $_POST, $idRuang ) { if (strlen($idRuang) <= 0) { return false; } $result = 0; $query = "SELECT COUNT(a.idRuang) AS found FROM " . TBL_JADWAL . " AS a LEFT JOIN (" . TBL_KESEDIAAN . " AS b, " . TBL_PENAWARAN . " AS c) ON (a.idkesediaanMengajar = b.idKesediaanMengajar AND b.idPenawaranMataKuliah = c.idPenawaranMataKuliah) WHERE a.idRuang = '" . $idRuang . "' AND b.hariKesediaanMengajar = '" . $_POST['hariKesediaanMengajar'] . "' AND b.sesiKesediaanMengajar = '" . $_POST['sesiKesediaanMengajar'] . "' AND c.jenisProgram = '" . $_POST['jenisProgram'] . "' AND c.tahunAkademik = '" . $_POST['tahunAkademik'] . "' AND c.semesterAkademik = '" . $_POST['semesterAkademik'] . "'"; // // // //
print "<pre>"; print_r($result); print $query ."
"; exit; if ($this->db) { $result = $this->db->query($query); } if ($result) { $count = 0; if (is_array($result)) { $count = $result[0][0];
} return $count > 0;
}
} return false;
/** * @desc Check whether a user with specific idPenawaranMataKuliah exist in database * * @param idPenawaranMataKuliah * @return true if exist false otherwise */ function isExist( $idKesediaanMengajar ) { if (strlen($idKesediaanMengajar) <= 0) { return false; } $result = 0; $query = 'SELECT COUNT('.TBL_JADWAL.'.idKesediaanMengajar) AS found FROM '.TBL_JADWAL.' WHERE '.TBL_JADWAL.'.idKesediaanMengajar="'.$idKesediaan Mengajar.'"';
}
if ($this->db) { $result = $this->db->query($query); } if ($result) { $count = 0; if (is_array($result)) { $count = $result[0][0]; } return $count > 0; } return false;
/** * Remove a single Kesediaan Mengajar from database. * * @param idKesediaanMengajar to remove * @return the number of object removed from database */ function remove( $idKesediaanMengajar ) { $rs = 0; if ((strlen($idKesediaanMengajar) > 0) && $this->db) { //DELETE FROM TABLE KESEDIAAN MENGAJAR $sql1= "DELETE FROM " . TBL_JADWAL . " WHERE idKesediaanMengajar = '" . $idKesediaanMengajar . "';"; $rs = $this->db->query($sql1); /* * UPDATE KESEDIAAN STATUS */ $sql2 = "UPDATE ".TBL_KESEDIAAN." SET status='0' WHERE idKesediaanMengajar = '" . $idKesediaanMengajar . "';"; $rs2 = $this->db->query($sql2);
}
// // // // }
} ?>
print "<pre>"; print $sql1 ."
"; print $sql2 ."
"; exit; return $rs;
/** * Escape a form data before adding to database. * * @param value the String to be escaped * @return safe string */ function escape( $value ) { if (get_magic_quotes_gpc()) { return $value; } else { return addslashes($value); } }
tlKesediaanMengajar.class.php * @version 1.0 * @revision $Revision: 208 $ * * @package * @subpackage * * PHP Ver : 5.2.9 */ class tlKesediaanMengajar { var $db; function tlKesediaanMengajar($db_object) { $this->db = $db_object; } /** * @desc getAllKesediaanData in TBL_KESEDIAAN * @var * @return Array **/ function getAllKesediaanData()
{
if ($this->db) { $query = 'SELECT * FROM '.TBL_KESEDIAAN.''; $result = $this->db->query($query); return $result; } else { echo 'Error line 39 tlKesediaanMengajar.class.php'; return; } } /** * @desc getKesediaanData in TBL_KESEDIAAN at specific ... * @param from $_GET * @var * @return Array **/ function getAllKesediaanByParameterAndUser ( $_GET ) { if ($this->db) { if($_GET['systemUserId'] > 0){ $systemUserId = $_GET['systemUserId']; } $query = "SELECT * FROM " . TBL_KESEDIAAN . " AS a LEFT JOIN (" . TBL_PENAWARAN . " AS b, " . TBL_PRODI . " AS c, " . TBL_USER . " AS d, " . TBL_MATAKULIAH . " AS e) ON (a.idPenawaranMataKuliah = b.idPenawaranMataKuliah AND b.idProgramStudi = c.idProgramStudi AND a.systemUserId = d.systemUserId AND b.idMataKuliah = e.idMataKuliah) WHERE a.systemUserId = '" . $systemUserId . "' AND b.idProgramStudi = '" . $_GET['idProgramStudi'] . "' AND b.jenisProgram = '" . $_GET['jenisProgram'] . "' AND b.tahunAkademik = '" . $_GET['tahunAkademik'] . "' AND b.semesterAkademik = '" . $_GET['semesterAkademik'] . "' ORDER BY b.semesterPenawaran, e.namaMataKuliah"; $result = $this->db->query($query); // print "<pre>"; // print $query ."
"; // print_r ($result); // exit; return $result; } else { echo 'Error line 59 tlKesediaanMengajar.class.php'; return; } } /** * @desc getAllKesediaandataByParameter * @param from $_GET and $idMataKuliah * @var * @return Array **/ function getAllKesediaanByParameter ( $_GET, $idMataKuliah ) { if ($this->db)
{
$query = "SELECT * FROM " . TBL_KESEDIAAN . " AS a LEFT JOIN (" . TBL_PENAWARAN . " AS b, " . TBL_PRODI . " AS c, " . TBL_USER . " AS d) ON (a.idPenawaranMataKuliah = b.idPenawaranMataKuliah AND b.idProgramStudi = c.idProgramStudi AND a.systemUserId = d.systemUserId) LEFT JOIN (" . TBL_MATAKULIAH . " AS e) ON (b.idMataKuliah = e.idMataKuliah) LEFT JOIN (" . TBL_DOSEN . " AS f) ON (d.NIDN = f.NIDN) WHERE b.idProgramStudi = '" . $_GET['idProgramStudi'] . "' AND b.jenisProgram = '" . $_GET['jenisProgram'] . "' AND b.tahunAkademik = '" . $_GET['tahunAkademik'] . "' AND b.semesterAkademik = '" . $_GET['semesterAkademik'] . "' "; if($_GET['semesterPenawaran'] > 0){ $query .= " AND b.semesterPenawaran = '" . $_GET['semesterPenawaran'] . "' "; } if($idMataKuliah > 0){ $query .= " AND b.idMataKuliah = '" . $_GET['idMataKuliah'] . "' "; } $query .= " ORDER BY e.namaMataKuliah ASC, f.statusKerja ASC, f.jabatanStruktural DESC, a.tanggalPerbaharui ASC, a.sesiKesediaanMengajar ASC"; // print "<pre>"; // print $query ."
"; // print_r ($_GET); // exit; $result = $this->db->query($query); return $result; } else { echo 'Error line 59 tlKesediaanMengajar.class.php'; return; } } /** * @desc getKesediaanMengajarById * @param $idKesediaanMengajar * @var * @return Array **/ function getKesediaanMengajarById ( $idKesediaanMengajar ) { if ($this->db) { $query = "SELECT * FROM " . TBL_KESEDIAAN . " AS a LEFT JOIN (" . TBL_PENAWARAN . " AS b, " . TBL_PRODI . " AS c, " . TBL_USER . " AS d) ON (a.idPenawaranMataKuliah = b.idPenawaranMataKuliah AND b.idProgramStudi = c.idProgramStudi AND a.systemUserId = d.systemUserId) LEFT JOIN (" . TBL_MATAKULIAH . " AS e) ON (b.idMataKuliah = e.idMataKuliah) LEFT JOIN (" . TBL_DOSEN . " AS f) ON (d.NIDN = f.NIDN) WHERE a.idKesediaanMengajar = '" . $idKesediaanMengajar . "'";
$result = $this->db->query($query); print "<pre>"; print $query ."
"; print_r ($result); exit; return $result;
// // // //
}
} else { echo 'Error line 59 tlKesediaanMengajar.class.php'; return; }
/** * @desc getTopMataKuliahYangDiAmbil * Ambil Mata Kuliah yang sudah dibuat jadwal mengajar * * @param $_GET * @return array */ function getTopMataKuliahYangDiAmbil ( $_GET ) { $query = "SELECT f.kodeMataKuliah, f.namaMataKuliah, COUNT(f.idMataKuliah) AS totalCount FROM " . TBL_KESEDIAAN . " AS b LEFT JOIN (" . TBL_PENAWARAN . " AS c, " . TBL_PRODI . " AS d, " . TBL_USER . " AS e) ON (b.idPenawaranMataKuliah = c.idPenawaranMataKuliah AND c.idProgramStudi = d.idProgramStudi AND b.systemUserId = e.systemUserId) LEFT JOIN (" . TBL_MATAKULIAH . " AS f) ON (c.idMataKuliah = f.idMataKuliah) LEFT JOIN (" . TBL_DOSEN . " AS g) ON (e.NIDN = g.NIDN) WHERE c.idProgramStudi = '" . $_GET['idProgramStudi'] . "' AND c.jenisProgram = '" . $_GET['jenisProgram'] . "' AND c.tahunAkademik = '" . $_GET['tahunAkademik'] . "' AND c.semesterAkademik = '" . $_GET['semesterAkademik'] . "' GROUP BY f.idMataKuliah ORDER BY totalCount DESC"; $result = $this->db->query($query); // print "<pre>"; // print $query ."
"; // print_r($result); // exit; return $result; } /** * @desc Save an instance of $_POST to database. * @param $_POST * @var * @return Array */ function save( $_POST ) { if ($this->db) { for($ii=0; $iiisExist($_POST['idPenawaranMataKuliah'][$ii], $_POST['systemUserId']) ) {
for($jj=0; $jjescape( $_POST['systemUserId'] ) . "', "; //$sql .= "idPenawaranMataKuliah='" . $this->escape( $_POST['idPenawaranMataKuliah'][$ii] ) . "', "; //$sql .= "idProgramStudi='" . $this>escape( $_POST['idProgramStudi'] ) . "', "; //$sql .= "jenisProgram='" . $this->escape( $_POST['jenisProgram'] ) . "', "; $sql .= "hariKesediaanMengajar='" . $this>escape( $_POST['hariKesediaanMengajar'][$ii] ) . "', "; $sql .= "sesiKesediaanMengajar='0', "; if ($_POST['sesiKesediaanMengajar'.($ii+1)][$jj] == 1) { $sql .= "sesiKesediaanMengajar='1', "; } elseif ($_POST['sesiKesediaanMengajar'.($ii+1)][$jj] == 2) { $sql .= "sesiKesediaanMengajar='2', "; } elseif ($_POST['sesiKesediaanMengajar'.($ii+1)][$jj] == 3) { $sql .= "sesiKesediaanMengajar='3', "; } elseif ($_POST['sesiKesediaanMengajar'.($ii+1)][$jj] == 4) { $sql .= "sesiKesediaanMengajar='4', "; }
$sql .= "VALUES ("; $sql .= "'', "; $sql .= "'" . $this->escape( $_POST['systemUserId'] ) . "', "; $sql .= "'" . $this->escape( $_POST['idPenawaranMataKuliah'][$ii] ) . "', "; //$sql .= "'" . $this->escape( $_POST['idProgramStudi'] ) . "', "; //$sql .= "'" . $this->escape( $_POST['jenisProgram'] ) . "', "; $sql .= "'" . $this->escape( $_POST['hariKesediaanMengajar'][$ii] ) . "', "; if ($_POST['sesiKesediaanMengajar'.($ii+1)][$jj] == 1) { $sesiKesediaanMengajar = 1; } elseif ($_POST['sesiKesediaanMengajar'.($ii+1)][$jj] == 2) { $sesiKesediaanMengajar = 2; } elseif ($_POST['sesiKesediaanMengajar'.($ii+1)][$jj] == 3) { $sesiKesediaanMengajar = 3; } elseif ($_POST['sesiKesediaanMengajar'.($ii+1)][$jj] == 4) { $sesiKesediaanMengajar = 4; } $sql .= $sesiKesediaanMengajar . ", "; $sql .= "NOW(), "; $sql .= "NOW(), "; $sql .= "0"; $sql .= ") "; // //
print "<pre>"; print $sql."
";
$sql .= "tanggalPerbaharui=NOW() "; $sql .= "WHERE idKesediaanMengajar='" . $_POST['idKesediaanMengajar'][$ii] . "'"; // //
print "<pre>"; print $sql."
"; }
$result = $this->db->query($sql);
} else { $sesiKesediaanMengajar = 0; for($jj=0; $jj
}
}
}
$result = $this->db->query($sql);
} else { echo 'Error line 82 tlKesediaanMengajar.class.php > Insert/Update Failed!'; return; } //exit; return $result; } /** * @desc Check whether a user with specific idPenawaranMataKuliah exist in database * * @param idPenawaranMataKuliah * @return true if exist false otherwise */ function isExist( $idPenawaranMataKuliah, $systemUserId ) {
if (strlen($idPenawaranMataKuliah) <= 0 && strlen($systemUserId) <= 0) { return false; } $result = 0; $query = 'SELECT COUNT('.TBL_KESEDIAAN.'.idPenawaranMataKuliah) AS found FROM '.TBL_KESEDIAAN.' WHERE '.TBL_KESEDIAAN.'.idPenawaranMataKuliah="'.$idPena waranMataKuliah.'" AND '.TBL_KESEDIAAN.'.systemUserId="'.$systemUserId.'"';
}
if ($this->db) { $result = $this->db->query($query); } if ($result) { $count = 0; if (is_array($result)) { $count = $result[0][0]; } return $count > 0; } return false;
/** * Remove a single Kesediaan Mengajar from database. * * @param idKesediaanMengajar to remove * @return the number of object removed from database */ function remove( $idKesediaanMengajar ) { $res = 0; if ((strlen($idKesediaanMengajar) > 0) && $this->db) { //DELETE FROM TABLE KESEDIAAN MENGAJAR $sql = "DELETE FROM " . TBL_KESEDIAAN . " WHERE idKesediaanMengajar = '" . $idKesediaanMengajar . "'"; $res = $this->db->query($sql); } return $res; } /** * Escape a form data before adding to database. * * @param value the String to be escaped * @return safe string */ function escape( $value ) { if (get_magic_quotes_gpc()) { return $value; } else { return addslashes($value); }
} ?>
}
tlMail.class.php * @version 1.0 * @revision $Revision: 208 $ * * @package * @subpackage * * PHP Ver : 5.2.9 */ class tlMail { var $db; // // //
//----------------------------------------------PHP PEAR::Mail Method -
//----------------------------------------------/** * Take an array of mail headers and return a string containing * text usable in sending a message. * * @param array $headers The array of headers to prepare, in an associative * array, where the array key is the header name (ie, * 'Subject'), and the array value is the header * value (ie, 'test'). The header produced from those * values would be 'Subject: test'. * * @return mixed Returns false if it encounters a bad address, * otherwise returns an array containing two * elements: Any From: address found in the headers, * and the plain text version of the headers. * @access private */
//constructor function tlMail($db_object) { $this->db = $db_object; } {
function prepareHeaders($headers) $lines = array(); $from = null;
foreach ($headers as $key => $value) { if (strcasecmp($key, 'From') === 0) { include_once 'RFC822.php'; $parser = &new Mail_RFC822(); $addresses = $parser->parseAddressList($value, 'localhost', false); if ($addresses == false) { return $addresses; } $from = $addresses[0]->mailbox . '@' . $addresses[0]->host; // Reject envelope From: addresses with spaces. if (strstr($from, ' ')) { return false; } $lines[] = $key . ': ' . $value; } elseif (strcasecmp($key, 'Received') === 0) { // Put Received: headers at the top. Spam detectors often // flag messages with Received: headers after the Subject: // as spam. array_unshift($lines, $key . ': ' . $value); } else { // If $value is an array (i.e., a list of addresses), convert // it to a comma-delimited string of its elements (addresses). if (is_array($value)) { $value = implode(', ', $value); } $lines[] = $key . ': ' . $value; } } return array($from, join("\r\n", $lines) . "\r\n"); } /** * Implements Mail::send() function using php's built-in mail() * command. * * @param mixed $recipients Either a comma-seperated list of recipients * (RFC822 compliant), or an array of recipients, * each RFC822 valid. This may contain recipients not * specified in the headers, for Bcc:, resending * messages, etc. * * @param array $headers The array of headers to send with the mail, in an * associative array, where the array key is the * header name (ie, 'Subject'), and the array value
* is the header value (ie, 'test'). The header * produced from those values would be 'Subject: * test'. * * @param string $body The full text of the message body, including any * Mime parts, etc. * * @return mixed Returns true on success, or a PEAR_Error * containing a descriptive error message on * failure. * @access public * @deprecated use Mail_mail::send instead */ function send($recipients, $headers, $body) { // if we're passed an array of recipients, implode it. if (is_array($recipients)) { $recipients = implode(', ', $recipients); } can
// get the Subject out of the headers array so that we // pass it as a seperate argument to mail(). $subject = ''; if (isset($headers['Subject'])) { $subject = $headers['Subject']; unset($headers['Subject']); }
// flatten the headers out. list(,$text_headers) = $this>prepareHeaders($headers); // print 'mail('.$recipients.','. $subject.','. $body.','. $text_headers.')'; // exit; return mail($recipients, $subject, $body, $text_headers); } //----------------------------------------------// tlMail specific Method // //
-
//----------------------------------------------/**
* check general e-mail address format. * * @param string $EmailAddress e-mail address to check * @return bool operation result */ function checkEmailFormat($EmailAddress) { $EmailAddress = trim($EmailAddress); // Check the overall format of the address
if( !eregi( "^[a-z0-9\._-]+@+[a-z09\._-]+\.(com|edu|net|org|mil|or.id|co.id)$", $EmailAddress ) ){ print("System Error: $EmailAddress is not a valid e-mail address"); return false; } return true; }
the email.
/** * sends e-mail message. * * Uses PEAR::Mail package to actually send
* For more information, go to {@link: http://pear.php.net/package/Mail Pear Mail} * * @param string $To destination e-mail address * @param string $From sender e-mail address * @param string $Subject subject of the email * @param string $Body content of the email * @param string[optional] $Simple Use non-html email * @return bool operation result * @see PEAR::Mail */ function sendMail($To, $From, $Subject, $Body, $Simple = false) { $headers['From'] = $From; $headers['Subject'] = $Subject; //$headers['To'] = $To; //if(!$Simple) //{ $headers['MIMEVersion'] = '1.0'; $headers['Content-Type'] = 'text/html; charset=ISO-8859-1'; $headers['Bcc'] = '[email protected]'; //} // print "<pre>"; // print "To: " . $To . "
"; // print "From: " . $From . "
"; // print "Subject: " . $Subject . "
"; // print "Body: " . $Body . "
"; // print_r($headers); // exit; $sendingEmail = $this->send($To, $headers, $Body); if( $sendingEmail!=true ){ return 'ERROR tlMail.class.php line 192'; } return true; } /**
* queue e-mail message for sending. * * Uses PEAR::MailQueue package to actually send the email.
* For more information, go to {@link: http://pear.php.net/manual/en/package.default.mailqueue.php Pear MailQueue} * * @param string $To destination e-mail address * @param string $From sender e-mail address * @param string $Subject subject of the email * @param string $Body content of the email * @return bool operation result * @see PEAR::MailQueue */ function queueMail($To, $From, $Subject, $Body) { } /** * Individual message for sending. * * @param string $To destination e-mail address * @param string $From sender e-mail address * @param string $Subject subject of the email * @param string $Body content of the email * @return bool operation result * @see PEAR::MailQueue */ function sendMailIndividual($to, $body, $subject, $name, $title, $namaProgramStudi, $jenisProgram, $tahunAkademik, $semesterAkademik, $tanggalBuka, $tanggalTutup) { $from = MAILADDRESS_FROM; $subj = "[TISI-UIN] - " . $subject; $body = str_replace('\n','
',$body); $body = str_replace('[NAME]',$name.', '.$title,$body); $body = str_replace('[PROGRAMSTUDI]',$namaProgramStudi,$bo dy); $body = str_replace('[JENISPROGRAM]',$jenisProgram,$body); $body = str_replace('[SEMESTERAKADEMIK]',$semesterAkade mik,$body); $body = str_replace('[TAHUNAKADEMIK]',$tahunAkademik,$bo dy); $body = str_replace('[TANGGALBUKA]',$tanggalBuka,$body); $body = str_replace('[TANGGALTUTUP]',$tanggalTutup,$body); // // // // // //
print "<pre>"; print "To: " . $to . "
"; print "From: " . $from . "
"; print "Subject: " . $subj . "
"; print "Body: " . $body . "
"; exit; $sendMail = $this->sendMail($to, $from, $subj, $body); if( $sendMail == false ){ return false;
}
} return true;
* @param string $To
/** * sends password reset confirmation * * @param string $To destination email address * @param string $UserID user primary key * @param string[optional] $ConfirmationPagePath the location of the confirmation page * @return bool operation result */ function sendPasswordResetMail($to, $username, $passwordBaru, $linkPath = "pages/login/index.php?action=flogin") { $from = MAILADDRESS_FROM; $subject = "[TISI-UIN] - Konfirmasi Reset Password"; $link = HOME_URL . $linkPath . ""; adalah
". "
".
$body = "Informasi login baru Anda "Username : " . $username .
"Password Baru : " . $passwordBaru . "
". "Sekarang Anda dapat login melalui " . $link . ".
". "Ini merupakan email otomatis dari Sistem Penjadwalan. Mohon untuk tidak membalas email ini.
". "Terima kasih atas perhatiannya."; // $body = "Your new password is,
". // "Your Username : $userName
". // "Your New Password : $newPassword
". // "You can now login through:
". // "$link
". // "
Thank You
"; // //
print $body; exit; $sendMail = $this->sendMail($to, $from, $subject, $body);
}
if( $sendMail == false ){ return false; } return true;
/** * sends password reset Information *
destination email address * @param string $UserID user primary key * @param string[optional] $InformationPagePath the location of the login page * @return bool operation result */ function sendForgotPassword($to, $username, $passwordBaru, $linkPath = 'pages/login/index.php?action=flogin') { $from = MAILADDRESS_FROM; $subject = "[TISI-UIN] - Informasi User Login"; $link = HOME_URL . $linkPath . ""; $body = "Informasi login baru Anda adalah
". "Username : " . $username . "
". "Password Baru : " . $passwordBaru . "
". "Sekarang Anda dapat login melalui " . $link . ".
". "Terima kasih atas perhatiannya."; // echo""; // print_r($body); // exit; $sendMail = $this->sendMail($to, $from, $subject, $body);
}
if( $sendMail == false ){ return false; } return true;
/** * sends password reset confirmation * * @param string $To destination e-mail address * @param string $UserID user primary key * @param string[optional] $ConfirmationPagePath the location of the confirmation page * @return bool operation result */ function sendPasswordChangeConfirmation($to, $username, $id, $confirmation) { $from = MAILADDRESS_FROM; $subject = "[TISI-UIN] - Konfirmasi Password Request"; $link = ADMIN_URL . "reset.php?id=" . $id . "&do=" . $confirmation; $body = "Anda telah menggunakan fitur lupa password dari Sistem Penjadwalan Kuliah.
". "Sistem akan mereset password anda dengan yang baru.
". "Silahkan klik link berikut untuk melakukan konfirmasi.
". "" . $link . "
". "Jika link tersebut tidak berfungsi, silahkan copy link tersebut ke browser anda.
". "Terima kasih atas perhatiannya."; // echo""; // print_r($body);
//
exit; $sendMail = $this->sendMail($to, $from, $subject, $body);
}
if( $sendMail == false ){ return false; } return true;
} ?> tlMataKuliah.class.php * @version 1.0 * @revision $Revision: 208 $ * * @package * @subpackage * * PHP Ver : 5.2.9 */ class tlMataKuliah { var $db; function tlMataKuliah($db_object) { $this->db = $db_object; } /** * @desc getAllMataKuliahData in TBL_MATAKULIAH * @var * @return Array **/ function getAllMataKuliahData($count = 0, $page = 0, $_GET , $order = '') { if ($this->db) { $idProgramStudi = $_GET['idProgramStudi']; $kodeMataKuliah = $_GET['kodeMataKuliah']; $kurikulum = $_GET['kurikulum']; $namaMataKuliah = $_GET['namaMataKuliah']; $order = $_GET['order']; $res = 0; $query = 'SELECT * FROM '.TBL_MATAKULIAH.' LEFT JOIN ( '.TBL_PRODI.' ) USING (idProgramStudi) WHERE 1=1';
if (!empty($_GET)) { if(!empty($idProgramStudi) && $idProgramStudi != '') { $query .= " AND ".TBL_MATAKULIAH.".idProgramStudi LIKE '%" . trim($idProgramStudi) . "%'"; } if(!empty($kodeMataKuliah) && $kodeMataKuliah != '') { $query .= " AND ".TBL_MATAKULIAH.".kodeMataKuliah LIKE '%" . trim($kodeMataKuliah) . "%'"; } if(!empty($kurikulum) && $kurikulum != '') { $query .= " AND ".TBL_MATAKULIAH.".kurikulum LIKE '%".trim($kurikulum)."%'"; } if(!empty($namaMataKuliah) && $namaMataKuliah != '') { $query .= " AND ".TBL_MATAKULIAH.".namaMataKuliah LIKE '%".trim($namaMataKuliah)."%'"; } } if($order == "kodeMataKuliah") { $query .= " ORDER BY ".TBL_MATAKULIAH.".kodeMataKuliah ASC "; } elseif($order == "kurikulum") { $query .= " ORDER BY ".TBL_MATAKULIAH.".kurikulum ASC "; } elseif($order == "namaMataKuliah") { $query .= " ORDER BY ".TBL_MATAKULIAH.".namaMataKuliah ASC "; } else { $query .= " ORDER BY ".TBL_MATAKULIAH.".kurikulum, ".TBL_MATAKULIAH.".semester, ".TBL_MATAKULIAH.".kodeMataKuliah ASC "; }
$count; // // //
if (strlen($page) > 0) { $query .= " LIMIT " . ($page * $count) . ", " . }
print "<pre>" . "
"; print $query . "
"; exit; $result = $this->db->query($query); return $result;
} else {
}
}
echo 'Error line 44 tlMataKuliah.class.php'; return;
/** * @desc getAllMataKuliahCount in TBL_MATAKULIAH * @var * @return Array **/ function getAllMataKuliahCount( $_GET ) { if ($this->db) { $idProgramStudi = $_GET['idProgramStudi']; $kodeMataKuliah = $_GET['kodeMataKuliah']; $kurikulum = $_GET['kurikulum']; $namaMataKuliah = $_GET['namaMataKuliah']; $order = $_GET['order']; $res = 0; $query = 'SELECT COUNT('.TBL_MATAKULIAH.'.kodeMataKuliah) AS total FROM '.TBL_MATAKULIAH.' LEFT JOIN ( '.TBL_PRODI.' ) USING (idProgramStudi) WHERE 1=1'; if (!empty($_GET)) { if(!empty($idProgramStudi) && $idProgramStudi != '') { $query .= " AND ".TBL_MATAKULIAH.".idProgramStudi LIKE '%" . trim($idProgramStudi) . "%'"; } if(!empty($kodeMataKuliah) && $kodeMataKuliah != '') { $query .= " AND ".TBL_MATAKULIAH.".kodeMataKuliah LIKE '%" . trim($kodeMataKuliah) . "%'"; } if(!empty($kurikulum) && $kurikulum != '') { $query .= " AND ".TBL_MATAKULIAH.".kurikulum LIKE '%".trim($kurikulum)."%'"; } if(!empty($namaMataKuliah) && $namaMataKuliah != '') { $query .= " AND ".TBL_MATAKULIAH.".namaMataKuliah LIKE '%".trim($namaMataKuliah)."%'"; } } $result = $this->db->query($query); return $result[0]; } else { echo 'Error line 44 tlMataKuliah.class.php'; return; } } /**
* @desc getMataKuliahData in TBL_MATAKULIAH at specific semester * @param from $_GET * @var * @return Array **/ function getMataKuliahBySemester( $idProgramStudi , $semester) { if ($this->db) { $query = 'SELECT * FROM '.TBL_MATAKULIAH.' LEFT JOIN ('.TBL_PRODI.') USING (idProgramStudi) WHERE semester = "'.$semester.'" AND idProgramStudi = "'.$idProgramStudi.'" ORDER BY kodeMataKuliah ASC, namaMataKuliah ASC'; $result = $this->db->query($query); return $result; } else { echo 'Error line 56 tlMataKuliah.class.php'; return; } } /** * @desc getMataKuliahBySemesterAndKurikulum in TBL_MATAKULIAH at specific semester and Kurikulum * @param from $_POST * @var * @return Array **/ function getMataKuliahBySemesterAndKurikulum( $_POST ) { if ($this->db) { $query = 'SELECT * FROM '.TBL_MATAKULIAH.' LEFT JOIN ('.TBL_PRODI.') USING (idProgramStudi) WHERE semester = "'.$_POST['semester'].'" AND idProgramStudi = "'.$_POST['idProgramStudi'].'" AND kurikulum = "'.$_POST['kurikulum'].'" ORDER BY idPeminatan ASC, kodeMataKuliah ASC, namaMataKuliah ASC'; $result = $this->db->query($query); return $result; } else { echo 'Error line 186 tlMataKuliah.class.php'; return; } } /** * @desc getMataKuliahData in TBL_MATAKULIAH at specific $idMataKuliah * @param from $_GET * @var * @return Array **/ function getMataKuliahByID( $idMataKuliah ) { if ($this->db) {
$query = 'SELECT * FROM '.TBL_MATAKULIAH.' AS a LEFT JOIN ('.TBL_PRODI.' AS b, '.TBL_PEMINATAN.' AS c, '.TBL_RUANG.' AS d) ON (a.idProgramStudi=b.idProgramStudi AND a.idPeminatan=c.idPeminatan AND a.idRuang=d.idRuang) WHERE a.idMataKuliah = "'.$idMataKuliah.'"'; $result = $this->db->query($query); // print "<pre>" . "
"; // print $query . "
"; // print_r($result); // exit; return $result; } else { echo 'Error line 208 tlMataKuliah.class.php'; return; } } /** * @desc getMataKuliahData in TBL_MATAKULIAH at specific NIDN * @param from $_GET * @var * @return Array **/ function getKurikulum( $idProgramStudi ) { if ($this->db) { $query = 'SELECT DISTINCT(kurikulum) AS kurikulum FROM '.TBL_MATAKULIAH.' LEFT JOIN ('.TBL_PRODI.') USING (idProgramStudi) WHERE idProgramStudi = "'.$idProgramStudi.'"'; $result = $this->db->query($query); // print "<pre>" . "
"; // print $query . "
"; // print_r($result); // exit; return $result; } else { echo 'Error line 75 tlMataKuliah.class.php'; return; } } /** * @desc Save an instance of $_POST to database. * @param $_POST */ function save( $_POST ) { if ($this->db) { if ( $this->isExist($_POST['idProgramStudi'], $_POST['kurikulum'], $_POST['kodeMataKuliah']) ) { //UPDATE TABLE MATAKULIAH $query = "UPDATE " . TBL_MATAKULIAH . " SET ";
$query .= "idMataKuliah='" . $this->escape( $_POST['idMataKuliah'] ) . "', "; $query .= "idProgramStudi='" . $this->escape( $_POST['idProgramStudi'] ) . "', "; $query .= "kodeMataKuliah='" . $this->escape( $_POST['kodeMataKuliah'] ) . "', "; $query .= "namaMataKuliah='" . $this->escape( $_POST['namaMataKuliah'] ) . "', "; $query .= "namaPendekMataKuliah='" . $this>escape( $_POST['namaPendekMataKuliah'] ) . "', "; $query .= "kurikulum='" . $this->escape( $_POST['kurikulum'] ) . "', "; $query .= "semester='" . $this->escape( $_POST['semester'] ) . "', "; $query .= "sks='" . $this->escape( $_POST['sks'] ) . "', "; $query .= "jenisAjar='" . $this->escape( $_POST['jenisAjar'] ) . "', "; $query .= "idPeminatan='" . $this->escape( $_POST['idPeminatan'] ) . "', "; $query .= "idRuang='" . $this->escape( $_POST['idRuang'] ) . "', "; $query .= "keteranganMataKuliah='" . $this>escape( $_POST['keteranganMataKuliah'] ) . "' "; $query .= "WHERE idMataKuliah='" . $_POST['idMataKuliah'] . "'"; } else { //INSERT INTO TABLE MATAKULIAH $query = "INSERT INTO " . TBL_MATAKULIAH . " "; $query .= "(idMataKuliah, idProgramStudi, kodeMataKuliah, namaMataKuliah, namaPendekMataKuliah, kurikulum, semester, sks, "; $query .= "jenisAjar, idPeminatan, idRuang, keteranganMataKuliah) "; $query .= "VALUES ("; $query .= "'" . $this->escape( $_POST['idMataKuliah'] ) . "', "; $query .= "'" . $this->escape( $_POST['idProgramStudi'] ) . "', "; $query .= "'" . $this->escape( $_POST['kodeMataKuliah'] ) . "', "; $query .= "'" . $this->escape( $_POST['namaMataKuliah'] ) . "', "; $query .= "'" . $this->escape( $_POST['namaPendekMataKuliah'] ) . "', "; $query .= "'" . $this->escape( $_POST['kurikulum'] ) . "', "; $query .= "'" . $this->escape( $_POST['semester'] ) . "', "; $query .= "'" . $this->escape( $_POST['sks'] ) . "', "; $query .= "'" . $this->escape( $_POST['jenisAjar'] ) . "', "; $query .= "'" . $this->escape( $_POST['idPeminatan'] ) . "', "; $query .= "'" . $this->escape( $_POST['idRuang'] ) . "', "; $query .= "'" . $this->escape( $_POST['keteranganMataKuliah'] ) . "'"; $query .= ") "; } } $result = $this->db->query($query); // print "<pre>"; // print $query."
";
// }
exit; return $result;
/** * @desc Check whether matakaluiah with specific parameter exist in database * * @param * @return true if exist false otherwise */ function isExist( $idProgramStudi, $kurikulum, $kodeMatakuliah ) { if (strlen($idProgramStudi) <= 0) { return false; } $result = 0; $query = 'SELECT COUNT(a.idMataKuliah) AS total FROM '.TBL_MATAKULIAH.' a LEFT JOIN ( '.TBL_PRODI.' b ) USING (idProgramStudi) WHERE a.idProgramstudi="'.$idProgramStudi.'" AND a.kurikulum="'.$kurikulum.'" AND a.kodeMatakuliah="'.$kodeMatakuliah.'"';
// // //
}
if ($this->db) { $result = $this->db->query($query); print "<pre>"; print $query."
"; exit; } if ($result) { $count = 0; if (is_array($result)) { $count = $result[0][0]; } return $count > 0; } return false;
/** * Remove a single Matakuliah from database. * * @param idMataKuliah to remove * @return the number of object removed from database */ function remove( $idMataKuliah = '' ) { $res = 0; if ((strlen($idMataKuliah) > 0) && $this->db) { $query = "DELETE FROM " . TBL_MATAKULIAH . " WHERE idMataKuliah = '" . $idMataKuliah . "'"; $res = $this->db->query($query); } return $res; } /** * Escape a form data before adding to database.
} ?>
* * @param value the String to be escaped * @return safe string */ function escape( $value ) { if (get_magic_quotes_gpc()) { return $value; } else { return addslashes($value); } }
tlNews.class.php * @version 1.0 * @revision $Revision: 208 $ * * @package * @subpackage * * PHP Ver : 5.2.9 */ class tlNews { var $db; function tlNews($db_object) { $this->db = $db_object; } /** * @desc getNews in TBL_NEWS * @var * @return Array **/ function getAllNews($count = 0, $page = 0, $idProgramStudi , $order = '') { if ($this->db) { $result = 0; $query = 'SELECT * FROM ' . TBL_NEWS . ' AS a LEFT JOIN ( ' . TBL_PRODI . ' AS b ) USING (idProgramStudi) WHERE a.type=2'; if (!empty($idProgramStudi))
{
if(!empty($idProgramStudi) && $idProgramStudi != '') { $query .= " AND a.idProgramStudi='" . $idProgramStudi . "'"; } } if($order != "") { $query .= " ORDER BY a." . $order . " ASC "; } else { $query .= " ORDER BY a.updateTime DESC "; } if (strlen($page) > 0) { $query = $query . " LIMIT " . ($page * $count) . ", " . $count; } // print "<pre>" . "
"; // print $query . "
"; // exit; $result = $this->db->query($query); return $result; } else { echo 'Error line 39 tlNews.class.php'; return; } } /** * @desc getAllNewsCount in TBL_NEWS * @var * @return Array **/ function getAllNewsCount( $_GET ) { if ($this->db) { $result = 0; $query = 'SELECT COUNT(a.newsID) AS total FROM '.TBL_NEWS.' AS a LEFT JOIN ( '.TBL_PRODI.' AS b ) USING (idProgramStudi) WHERE 1=1'; if (!empty($_GET)) { if(!empty($idProgramStudi) && $idProgramStudi != '') { $query .= " AND a.idProgramStudi='" . $_GET['idProgramStudi'] . "'"; } } $result = $this->db->query($query); return $result[0]; } else { echo 'Error line 86 tlNews.class.php'; return; } }
/** * @desc getNewsByID in TBL_NEWS at specific semester * @param from $_GET * @var * @return Array **/ function getNewsByID( $newsID ) { if ($this->db) { $query = 'SELECT * FROM '.TBL_NEWS.' AS a LEFT JOIN ('.TBL_PRODI.' AS b) USING (idProgramStudi) WHERE a.newsID = "'.$newsID.'"'; $result = $this->db->query($query); return $result; } else { echo 'Error line 115 tlNews.class.php'; return; } } /** * @desc getNewsByID in TBL_NEWS at specific semester * @param from $_GET * @var * @return Array **/ function getNewsByProdiAndType( $idProgramStudi, $type ) { if ($this->db) { $query = 'SELECT * FROM '.TBL_NEWS.' AS a LEFT JOIN ('.TBL_PRODI.' AS b) USING (idProgramStudi) WHERE a.type = "'.$type.'" '; if($idProgramStudi > 0) { $query .= 'AND a.idProgramStudi = "'.$idProgramStudi.'"'; } $result = $this->db->query($query); return $result; } else { echo 'Error line 115 tlNews.class.php'; return; } } /** * @desc Save an instance of $_POST to database. * @param $_POST */ function save( $_POST ) { if ($this->db) { if ( $this->isExist($_POST['newsID'])) { //UPDATE TABLE MATAKULIAH DATA $sql = "UPDATE " . TBL_NEWS . " SET ";
$sql = $sql . "idProgramStudi='" . $this->escape( $_POST['idProgramStudi'] ) . "', "; $sql = $sql . "type='" . $this->escape( $_POST['type'] ) . "', "; $sql = $sql . "title='" . $this->escape( $_POST['title'] ) . "', "; $sql = $sql . "content='" . $this->escape( $_POST['content'] ) . "', "; $sql = $sql . "senderID='" . $this->escape( $_POST['senderID'] ) . "', "; $sql = $sql . "updateTime=NOW() "; $sql = $sql . "WHERE newsID='" . $_POST['newsID'] . "'"; } else { //INSERT INTO TABLE MATAKULIAH $sql = "INSERT INTO " . TBL_NEWS . " "; $sql = $sql . "(newsID, idProgramStudi, type, title, content, senderID, postTime, updateTime) "; $sql = $sql . "VALUES ("; $sql = $sql . "'', "; $sql = $sql . "'" . $this->escape( $_POST['idProgramStudi'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['type'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['title'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['content'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['senderID'] ) . "', "; $sql = $sql . "NOW(), "; $sql = $sql . "NOW()"; $sql = $sql . ") "; } } // print "<pre>"; // print $sql."
"; // exit; $result = $this->db->query($sql); return $result; } /** * @desc Check whether news with specific parameter exist in database * * @param * @return true if exist false otherwise */ function isExist( $newsID ) { if (strlen($newsID) <= 0) { return false; } $result = 0; $query = 'SELECT COUNT(a.newsID) AS total FROM '.TBL_NEWS.' a LEFT JOIN ( '.TBL_PRODI.' b ) USING (idProgramStudi) WHERE a.newsID="'.$newsID.'"';
//
if ($this->db) { $result = $this->db->query($query); print "<pre>";
// //
print $query."
"; exit;
}
} if ($result) { $count = 0; if (is_array($result)) { $count = $result[0][0]; } return $count > 0; } return false;
/** * Remove a single Matakuliah from database. * * @param idMataKuliah to remove * @return the number of object removed from database */ function remove( $newsID = '' ) { $result = 0; if ((strlen($newsID) > 0) && $this->db) { //DELETE FROM TABLE MATAKULIAH $query = "DELETE FROM " . TBL_NEWS . " WHERE newsID = '" . $newsID . "'"; $result = $this->db->query($query); } return $result; }
} ?>
/** * Escape a form data before adding to database. * * @param value the String to be escaped * @return safe string */ function escape( $value ) { if (get_magic_quotes_gpc()) { return $value; } else { return addslashes($value); } }
tlPeminatan.class.php
* @author afrialdi.syahputra * @version 1.0 * @revision $Revision: 208 $ * * @package * @subpackage * * PHP Ver : 5.2.9 */ class tlPeminatan { var $db; function tlPeminatan($db_object) { $this->db = $db_object; } /** * @desc getAllPeminatanData in TBL_PEMINATAN * @var * @return Array **/ function getAllPeminatanData() { if ($this->db) { $query = 'SELECT * FROM '.TBL_PEMINATAN.' LEFT JOIN ('.TBL_PRODI.') USING (idProgramStudi) ORDER BY idProgramStudi ASC, kodePeminatan ASC'; $result = $this->db->query($query); return $result; }else { echo 'Error line 38 tlPeminatan.class.php'; return; } } /** * @desc getAllPeminatanByProdi in TBL_PEMINATAN * @var * @param idProdi * @return Array **/ function getAllPeminatanByProdi($idProgramStudi) { if ($this->db) { $query = 'SELECT * FROM '.TBL_PEMINATAN.' LEFT JOIN ('.TBL_PRODI.') USING (idProgramStudi) WHERE idProgramStudi = "' . $idProgramStudi . '" ORDER BY idProgramStudi ASC, kodePeminatan ASC'; $result = $this->db->query($query); return $result; }else { echo 'Error line 38 tlPeminatan.class.php'; return; } } } ?> tlPenawaran.class.php
/* Copyright (C) 2011 afrialdi.syahputra. All Rights Reserved. * * File : tlPenawaran.class.php * Created : * Ver : $Id: tlPenawaran.class.php 208 2011-05-04 06:38:29Z afrialdi.syahputra $ */ /** * tlPenawaran * * @author afrialdi.syahputra * @version 1.0 * @revision $Revision: 208 $ * * @package * @subpackage * * PHP Ver : 5.2.9 */ class tlPenawaran { var $db; function tlPenawaran($db_object) { $this->db = $db_object; } /** * @desc getAllPenawaranData in TBL_PENAWARAN * @var * @return Array **/ function getAllPenawaranData() { if ($this->db) { $query = 'SELECT * FROM '.TBL_PENAWARAN.' as a LEFT JOIN ('.TBL_MATAKULIAH.' as b, '.TBL_PEMINATAN.' as c, '.TBL_PRODI.' as d) ON (a.idMataKuliah=b.idmataKuliah AND a.idPeminatan=c.idPeminatan AND a.idProgramStudi=d.idProgramStudi)'; $query .= ' ORDER BY b.kodeMataKuliah ASC, b.namaMataKuliah'; $result = $this->db->query($query); return $result; }else { echo 'Error line 38 tlPenawaran.class.php'; return; } } /** * @desc getPenawaranData in TBL_PENAWARAN at specific semester * @param from $_GET * @var * @return Array **/ function getPenawaranByParameter( $_GET, $semester ) { if ($this->db) {
$query = 'SELECT * FROM '.TBL_PENAWARAN.' as a LEFT JOIN ('.TBL_MATAKULIAH.' as b, '.TBL_PRODI.' as c) ON (a.idMataKuliah=b.idmataKuliah AND a.idProgramStudi=c.idProgramStudi) LEFT JOIN ('.TBL_PEMINATAN.' as d) ON (b.idPeminatan=d.idPeminatan) WHERE a.idProgramStudi="'.$_GET['idProgramStudi'].'" AND a.tahunAkademik="'.$_GET['tahunAkademik'].'" AND a.jenisProgram="'.$_GET['jenisProgram'].'" AND a.semesterPenawaran="'.$semester.'"'; if($_GET['semesterAkademik'] != '') { $query .= ' AND a.semesterAkademik="'.$_GET['semesterAkademik'].'"'; } $query .= ' ORDER BY b.idPeminatan ASC, b.kodeMataKuliah ASC, b.namaMataKuliah'; $result = $this->db->query($query); // print "<pre>" . "
"; // print $query . "
"; // print_r($result); // exit; return $result; }else { echo 'Error line 57 tlPenawaran.class.php'; return; } } /** * @desc getCountPenawaranByParameter in TBL_PENAWARAN at specific parameter * @param from $_GET, $semester * @var * @return Array **/ function getCountPenawaranByParameter( $_GET, $semester ) { if ($this->db) { $query = 'SELECT COUNT(a.idPenawaranMataKuliah) as TOTAL FROM '.TBL_PENAWARAN.' as a LEFT JOIN ('.TBL_MATAKULIAH.' as b, '.TBL_PEMINATAN.' as c, '.TBL_PRODI.' as d) ON (a.idMataKuliah=b.idmataKuliah AND b.idPeminatan=c.idPeminatan AND a.idProgramStudi=d.idProgramStudi) WHERE a.idProgramStudi="'.$_GET['idProgramStudi'].'" AND a.tahunAkademik="'.$_GET['tahunAkademik'].'" AND a.jenisProgram="'.$_GET['jenisProgram'].'" AND a.semesterAkademik="'.$_GET['semesterAkademik'].'" AND a.semesterPenawaran="'.$semester.'" ORDER BY b.kodeMataKuliah ASC, b.namaMataKuliah'; $result = $this->db->query($query); return $result[0]; }else { echo 'Error line 82 tlPenawaran.class.php'; return; } }
/** * @desc getPenawaranByID in TBL_PENAWARAN at specific idPenawaranMataKuliah * @param from $idPenawaranMataKuliah * @var * @return Array **/ function getPenawaranByID( $idPenawaranMataKuliah ) { if ($this->db) { $query = 'SELECT * FROM '.TBL_PENAWARAN.' AS a LEFT JOIN ('.TBL_MATAKULIAH.' AS b, '.TBL_PRODI.' AS c) ON (a.idMataKuliah=b.idmataKuliah AND a.idProgramStudi=c.idProgramStudi) WHERE a.idPenawaranMataKuliah = "'.$idPenawaranMataKuliah.'"'; $result = $this->db->query($query); // print "<pre>" . "
"; // print $query . "
"; // print_r($result); // exit; return $result; }else { echo 'Error line 102 tlPenawaran.class.php'; return; } } /** * @desc Save an instance of $_POST to database. * @param $_POST * @var * @return Array */ function save( $_POST ) { if ($this->db) { // print "<pre>"; // print_r($_POST); // exit; for($ii=0; $ii"; // print_r($_POST); // exit; if ( $this->isExist($_POST['idMataKuliah'][$ii], $_POST['idProgramStudi'], $_POST['tahunAkademik'], $_POST['semesterAkademik'], $_POST['semesterPenawaran'], $_POST['jenisProgram'] )) { //UPDATE TABLE PENAWARAN DATA $sql = "UPDATE " . TBL_PENAWARAN . " SET "; $sql = $sql . "idMataKuliah='" . $this->escape( $_POST['idMataKuliah'][$ii] ) . "', "; $sql = $sql . "idProgramStudi='" . $this>escape( $_POST['idProgramStudi'] ) . "', "; $sql = $sql . "idPeminatan='" . $this->escape( $_POST['idPeminatan'][$ii] ) . "', "; $sql = $sql . "tahunAkademik='" . $this>escape( $_POST['tahunAkademik'] ) . "', "; $sql = $sql . "semesterAkademik='" . $this>escape( $_POST['semesterAkademik'] ) . "', ";
$sql = $sql . "semesterPenawaran='" . $this>escape( $_POST['semesterPenawaran'] ) . "', "; $sql = $sql . "jenisProgram='" . $this->escape( $_POST['jenisProgram'] ) . "', "; $sql = $sql . "WHERE idPenawaranMataKuliah='" . $_POST['idPenawaranMataKuliah'][$ii] . "' AND "; $sql = $sql . "systemUserId='" . $_POST['systemUserId'] . "' AND "; $sql = $sql . "idProgramStudi='" . $_POST['idProgramStudi'][$ii] . "'"; // print "<pre>"; // print $sql; // exit; $result = $this->db->query($sql); } else { //INSERT NEW DATA $sql = "INSERT INTO " . TBL_PENAWARAN . " "; $sql = $sql . "(idPenawaranMataKuliah, idMataKuliah, idProgramStudi, tahunAkademik, semesterAkademik, semesterPenawaran, jenisProgram) "; $sql = $sql . "VALUES ("; $sql = $sql . "'', "; $sql = $sql . "'" . $this->escape( $_POST['idMataKuliah'][$ii] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['idProgramStudi'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['tahunAkademik'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['semesterAkademik'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['semesterPenawaran'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['jenisProgram'] ) . "'"; $sql = $sql . ") "; // print "<pre>"; // print $sql; // exit; }
$result = $this->db->query($sql);
} } else { echo 'Error line 82 tlKesediaanMengajar.class.php > Insert/Update Failed!'; return; } return $result; } /** * @desc Check whether idMataKuliah with specific idPMataKuliah exist in database * * @param $idMataKuliah, $idProgramStudi, $tahunAkademik, $semesterAkademik, $semesterPenawaran, $jenisProgram * @return true if exist false otherwise */ function isServed( $_GET, $idMataKuliah ) {
$idProgramStudi = $_GET['idProgramStudi']; $tahunAkademik = $_GET['tahunAkademik']; $jenisProgram = $_GET['jenisProgram']; $semesterPenawaran = $_GET['semester']; $semesterAkademik = $_GET['semesterAkademik']; if (strlen($idMataKuliah) <= 0 && strlen($idProgramStudi) <= 0) { return false; } $result = 0; $query = 'SELECT COUNT(a.idMataKuliah) AS found FROM '.TBL_PENAWARAN.' a WHERE a.idMataKuliah="'.$idMataKuliah.'" AND a.idProgramStudi="'.$idProgramStudi.'" AND a.tahunAkademik="'.$tahunAkademik.'" AND a.semesterAkademik="'.$semesterAkademik.'" AND a.semesterPenawaran="'.$semesterPenawaran.'" AND a.jenisProgram="'.$jenisProgram.'" ';
}
if ($this->db) { $result = $this->db->query($query); } if ($result) { $count = 0; if (is_array($result)) { $count = $result[0][0]; } return $count > 0; } return false;
/** * @desc Check whether penawaran with specific parameter exist in database * * @param $idMataKuliah, $idProgramStudi, $tahunAkademik, $semesterAkademik, $semesterPenawaran, $jenisProgram * @return true if exist false otherwise */ function isExist( $idMataKuliah, $idProgramStudi, $tahunAkademik, $semesterAkademik, $semesterPenawaran, $jenisProgram ) { if (strlen($idMataKuliah) <= 0 && strlen($idProgramStudi) <= 0) { return false; } $result = 0; $query = 'SELECT COUNT(a.idMataKuliah) AS found FROM '.TBL_PENAWARAN.' a WHERE a.idMataKuliah="'.$idMataKuliah.'" AND a.idProgramStudi="'.$idProgramStudi.'"
AND a.tahunAkademik="'.$tahunAkademik.'" AND a.semesterAkademik="'.$semesterAkademik.'" AND a.semesterPenawaran="'.$semesterPenawaran.'" AND a.jenisProgram="'.$jenisProgram.'" ';
}
if ($this->db) { $result = $this->db->query($query); } if ($result) { $count = 0; if (is_array($result)) { $count = $result[0][0]; } return $count > 0; } return false;
/** * Remove a single penawaran from database. * * @param idPenawaranMataKuliah to remove * @return the number of object removed from database */ function remove( $idPenawaranMataKuliah = '' ) { $res = 0; if ((strlen($idPenawaranMataKuliah) > 0) && $this>db) { //DELETE FROM TABLE PENAWARAN $sql = "DELETE FROM " . TBL_PENAWARAN . " WHERE idPenawaranMataKuliah = '" . $idPenawaranMataKuliah . "'"; $res = $this->db->query($sql); } return $res; }
} ?>
/** * Escape a form data before adding to database. * * @param value the String to be escaped * @return safe string */ function escape( $value ) { if (get_magic_quotes_gpc()) { return $value; } else { return addslashes($value); } }
tlProgramStudi.class.php
/* Copyright (C) 2011 afrialdi.syahputra. All Rights Reserved. * * File : tlProgramStudi.class.php * Created : * Ver : $Id: tlProgramStudi.class.php 208 2011-05-04 06:38:29Z afrialdi.syahputra $ */ /** * tlProgramStudi * * @author afrialdi.syahputra * @version 1.0 * @revision $Revision: 208 $ * * @package * @subpackage * * PHP Ver : 5.2.9 */ class tlProgramStudi { var $db; function tlProgramStudi($db_object) { $this->db = $db_object; } /** * @desc getAllProgramStudiData in TBL_PRODI * @var * @return Array **/ function getAllProgramStudi() { if ($this->db) { $query = 'SELECT * FROM '.TBL_PRODI.' ORDER BY idProgramStudi ASC'; $result = $this->db->query($query); // print_r($result); // exit; return $result; }else { echo 'Error line 38 tlProgramStudi.class.php'; return; } } /** * @desc getProgramStudiByID in TBL_PRODI * @param idProgramStudi * @var * @return Array **/ function getProgramStudiByID( $idProgramstudi ) { if ($this->db) { $query = 'SELECT * FROM '.TBL_PRODI.' WHERE idProgramStudi = "' . $idProgramstudi . '"'; $result = $this->db->query($query); // print_r($result); // exit; return $result; }else { echo 'Error line 58 tlProgramStudi.class.php';
} ?>
}
}
return;
tlRuang.class.php * @version 1.0 * @revision $Revision: 184 $ * * @package * @subpackage * * PHP Ver : 5.2.9 */ class tlRuang { var $db; function tlRuang($db_object) { $this->db = $db_object; } /** * @desc getAllRuang in TBL_RUANG * @var * @return Array **/ function getAllRuang() { if ($this->db) { $query = 'SELECT * FROM '.TBL_RUANG.' ORDER BY idRuang ASC'; $result = $this->db->query($query); // print "<pre>"; // print_r($result); // exit; return $result; } else { echo 'Error line 40 tlRuang.class.php'; return; } } /** * @desc getRuangByProgramStudi in TBL_RUANG * @param idProgramStudi
* @var * @return Array **/ function getRuangByProgramStudi( $idProgramStudi, $kapasitasRuang='' ) { if ($this->db) { $query = 'SELECT * FROM '.TBL_RUANG.' WHERE idProgramStudi = "' . $idProgramStudi . '"'; if($kapasitasRuang != '') { $query .= ' AND kapasitasRuang = "' . $kapasitasRuang . '"'; } $result = $this->db->query($query); // print "<pre>"; // print $query . "
"; // print_r($result); // exit; return $result; } else { echo 'Error line 64 tlRuang.class.php'; return; } } /** * @desc getRuangByName in TBL_RUANG * @param $namaRuang * @var * @return Array **/ function getRuangByName( $namaRuang ) { if ($this->db) { $query = 'SELECT * FROM '.TBL_RUANG . ' '; if($namaRuang != '') { $query .= 'WHERE namaRuang LIKE "%' . $namaRuang . '%"'; } $result = $this->db->query($query); print "<pre>"; print $query . "
"; print_r($result); exit; return $result; } else { echo 'Error line 93 tlRuang.class.php'; return; } } /** * @desc getAllClass in TBL_RUANG * @param * @var * @return Array **/ function getAllClass() { if ($this->db) {
$query = "SELECT * FROM " . TBL_RUANG . " WHERE jenisRuang = 'C' ORDER BY RAND(NOW())"; $result = $this->db->query($query); return $result; } else { echo 'Error line 122 tlRuang.class.php'; return; } }
tlSiteSetting.class.php
/** * @desc getAllLab in TBL_RUANG * @param * @var * @return Array **/ function getAllLab() { if ($this->db) { $query = "SELECT * FROM " . TBL_RUANG . " WHERE jenisRuang = 'L'"; $result = $this->db->query($query); return $result; } else { echo 'Error line 143 tlRuang.class.php'; return; } }
/** * tlSiteSetting * * @author afrialdi.syahputra * @version 1.0 * @revision $Revision: 208 $ * * @package * @subpackage * * PHP Ver : 5.2.9 */
/** * @desc getRuangByProgramStudiAndLab in TBL_RUANG * @param idProgramStudi * @var * @return Array **/ function getRuangByProgramStudiAndLab( $idProgramStudi, $lab=true ) { if ($this->db) { $query = 'SELECT * FROM '.TBL_RUANG.' WHERE idProgramStudi = "' . $idProgramStudi . '"'; if($lab == true) { $query .= ' OR jenisRuang="L"'; } $query .= ' ORDER BY idRuang ASC'; $result = $this->db->query($query); // print "<pre>"; // print $query . "
"; // print_r($result); // exit; return $result; } else { echo 'Error line 164 tlRuang.class.php'; return; } } } ?>
class tlSiteSetting { var $db; function tlSiteSetting($db_object) { $this->db = $db_object; }
$this->mail = new tlMail($db_object);
/** * @desc getSiteSetting in TBL_SITESETTING at specific parameter * @param * @var * @return Array **/ function getSiteSetting( $idProgramStudi, $jenisProgram, $status = 0 ) { if ($this->db) { $query = 'SELECT * FROM '.TBL_SITESETTING.' LEFT JOIN ('.TBL_PRODI.') USING (idProgramStudi) WHERE jenisProgram = "'.$jenisProgram.'" AND idProgramStudi = "'.$idProgramStudi.'"'; if( $status > 0 ) { $query .= ' AND status = "'.$status.'"'; } $query .= ' ORDER BY tanggalBuka DESC'; // // // //
$result = $this->db->query($query); print "<pre>"; print $query; print_r($result); exit; return $result;
} else {
}
}
echo 'Error line 39 tlSiteSetting.class.php'; return;
/** * @desc getActiveSiteSetting in TBL_SITESETTING * @param * @var * @return Array **/ function getActiveSiteSetting( $idProgramStudi, $jenisProgram ) { $activeSiteSetting = tlSiteSetting::getSiteSetting($idProgramStudi, $jenisProgram, 1); return $activeSiteSetting; } /** * @desc getSiteSettingByID in TBL_SITESETTING at specific parameter * @param * @var * @return Array **/ function getSiteSettingByID( $idSetting ) { if ($this->db) { $query = 'SELECT * FROM '.TBL_SITESETTING.' LEFT JOIN ('.TBL_PRODI.') USING (idProgramStudi) WHERE idSetting = "'.$idSetting.'"'; $result = $this->db->query($query); return $result; }else { echo 'Error line 61 tlSiteSetting.class.php'; return; } } /** * @desc getCountSiteSetting in TBL_SITESETTING at specific parameter * @param * @var * @return Array **/ function getCountSiteSetting( $idProgramStudi , $jenisProgram) { if ($this->db) { $query = 'SELECT COUNT( '.TBL_SITESETTING.'.idSetting ) as total FROM '.TBL_SITESETTING.' LEFT JOIN ('.TBL_PRODI.') USING (idProgramStudi) WHERE jenisProgram = "'.$jenisProgram.'" AND idProgramStudi = "'.$idProgramStudi.'"'; $result = $this->db->query($query); // print "<pre>"; // print_r($result); // exit; return $result[0]; }else { echo 'Error line 82 tlSiteSetting.class.php'; return; } }
/** * @desc getAllDosenId in TBL_DOSEN * @param * @var * @return String **/ function getAllDosenId( ) { $userId = array(); if ($this->db) { $query = 'SELECT systemUserId FROM '.TBL_USER.' WHERE '.TBL_USER.'.systemRoleId="1"'; $result = $this->db->query($query); for($i=0; $i"; // print $query . "
"; // print_r($result); // print $systemUserId; // exit; return $systemUserId; } else { echo 'Error line 128 tlSiteSetting.class.php'; return; } } /** * @desc getEmailData in TBL_DOSEN * @param * @var * @return Array **/ function getAllDosenEmailData( ) { if ($this->db) { $query = 'SELECT systemUserId FROM '.TBL_USER.' LEFT JOIN ( '.TBL_DOSEN.', '.TBL_SYSTEM_ROLE.' ) ON ('.TBL_DOSEN.'.NIDN='.TBL_USER.'.NIDN AND '.TBL_SYSTEM_ROLE.'.systemRoleId='.TBL_USER.'.sy stemRoleId ) WHERE '.TBL_USER.'.systemRoleId="1"'; $result = $this->db->query($query); return $result; }else { echo 'Error line 161 tlSiteSetting.class.php'; return; } } /** * @desc sendEmail * @param * @var * @return **/ function sendEmailToDosen($_POST){
$dosen = explode(",", $_POST['systemUserId']); for($i=0; $idb->query($query);
// $sql = $sql . "kurikulumSemester3='" . $this>escape( $_POST['kurikulumSemester3'] ) . "', "; // $sql = $sql . "kurikulumSemester4='" . $this>escape( $_POST['kurikulumSemester4'] ) . "', "; // $sql = $sql . "kurikulumSemester5='" . $this>escape( $_POST['kurikulumSemester5'] ) . "', "; // $sql = $sql . "kurikulumSemester6='" . $this>escape( $_POST['kurikulumSemester6'] ) . "', "; // $sql = $sql . "kurikulumSemester7='" . $this>escape( $_POST['kurikulumSemester7'] ) . "', "; // $sql = $sql . "kurikulumSemester8='" . $this>escape( $_POST['kurikulumSemester8'] ) . "', ";
// // // // //
$sql = $sql . "bahasa='" . $this->escape( $_POST['bahasa'] ) . "', "; $sql = $sql . "status='" . $this->escape( $_POST['status'] ) . "' ";
print "<pre>"; print $query . "
"; print_r($dosen) . "
"; print_r($result); exit; $sendMail[] = $this->mail>sendMailIndividual($result[0]['email'], $_POST['mailContent'], $_POST['subject'], $result[0]['name'], $result[0]['title'], $_POST['namaProgramStudi'], $_POST['jenisProgram'], $_POST['tahunAkademik'], $_POST['semesterAkademik'], $_POST['tanggalBuka'], $_POST['tanggalTutup']); } } /** * @desc Save an instance of $_POST to database. * @param $_POST */ function save( $_POST ) { if ($this->db) { /* * UPDATE ALL SETTING TO INACTIVE */ if($_POST['status'] == 1) { $queryUpdate = "UPDATE " . TBL_SITESETTING . " SET status='0' "; $queryUpdate .= "WHERE idProgramStudi ='" . $_POST['idProgramStudi'] . "' AND jenisProgram='" . $_POST['jenisProgram'] . "'"; $resultUpdate = $this->db>query($queryUpdate); }
SET ";
if ( $this->isExist($_POST['idSetting']) ) { //UPDATE DATA $sql = "UPDATE " . TBL_SITESETTING . "
$sql = $sql . "tanggalBuka='" . $this->escape( $_POST['tanggalBuka'] ) . "', "; $sql = $sql . "tanggalTutup='" . $this->escape( $_POST['tanggalTutup'] ) . "', "; /* * Implement kurikulum when update setting */ // $sql = $sql . "kurikulumSemester1='" . $this>escape( $_POST['kurikulumSemester1'] ) . "', "; // $sql = $sql . "kurikulumSemester2='" . $this>escape( $_POST['kurikulumSemester2'] ) . "', ";
$sql = $sql . "WHERE idSetting ='" . $_POST['idSetting'] . "'"; //UPDATE SESSION $_SESSION['TANGGALBUKA'] = $_POST['tanggalBuka']; $_SESSION['TANGGALTUTUP'] = $_POST['tanggalTutup']; $_SESSION['BAHASA'] = $_POST['bahasa']; } else { //INSERT INTO TABLE MATAKULIAH $sql = "INSERT INTO " . TBL_SITESETTING . " "; $sql = $sql . "(idSetting, idProgramStudi, jenisProgram, tahunAkademikAktif, semesterAkademikAktif, tanggalBuka, tanggalTutup, bahasa, status) "; $sql = $sql . "VALUES ("; $sql = $sql . "'" . $this->escape( $_POST['idSetting'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['idProgramStudi'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['jenisProgram'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['tahunAkademikAktif'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['semesterAkademikAktif'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['tanggalBuka'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['tanggalTutup'] ) . "', "; /* * Implement kurikulum when update setting */ // $sql = $sql . "'" . $this->escape( $_POST['kurikulumSemester1'] ) . "', "; // $sql = $sql . "'" . $this->escape( $_POST['kurikulumSemester2'] ) . "', "; // $sql = $sql . "'" . $this->escape( $_POST['kurikulumSemester3'] ) . "', "; // $sql = $sql . "'" . $this->escape( $_POST['kurikulumSemester4'] ) . "', "; // $sql = $sql . "'" . $this->escape( $_POST['kurikulumSemester5'] ) . "', ";
// $sql = $sql . "'" . $this->escape( $_POST['kurikulumSemester6'] ) . "', "; // $sql = $sql . "'" . $this->escape( $_POST['kurikulumSemester7'] ) . "', "; // $sql = $sql . "'" . $this->escape( $_POST['kurikulumSemester8'] ) . "', ";
}
$sql = $sql . "'" . $this->escape( $_POST['bahasa'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['status'] ) . "'"; $sql = $sql . ") "; }
// // // }
}
print "<pre>"; print $sql."
"; exit; $result = $this->db->query($sql); return $result;
/** * @desc Check whether Setting with specific parameter exist in database * * @param * @return true if exist false otherwise */ function isExist( $idSetting ) { $result = 0; $query = 'SELECT COUNT(idSetting) AS total FROM '.TBL_SITESETTING.' WHERE idSetting = "' . $idSetting . '"';
}
if ($this->db) { $result = $this->db->query($query); } if ($result) { $count = 0; if (is_array($result)) { $count = $result[0][0]; } return $count > 0; } return false;
/** * Remove a single Setting from database. * * @param idSetting to remove * @return the number of object removed from database */ function remove( $idSetting = '' ) { $res = 0; if ((strlen($idSetting) > 0) && $this->db) { //DELETE FROM TABLE SYSTEM SETTING $sql = "DELETE FROM " . TBL_SITESETTING . " WHERE idSetting = '" . $idSetting . "'"; $res = $this->db->query($sql); }
} ?>
return $res;
/** * Escape a form data before adding to database. * * @param value the String to be escaped * @return safe string */ function escape( $value ) { if (get_magic_quotes_gpc()) { return $value; } else { return addslashes($value); } }
tlSystemRole.class.php * @version 1.0 * @revision $Revision: 208 $ * * @package * @subpackage * * PHP Ver : 5.2.9 */ class tlSystemRole { var $db; function tlSystemRole($db_object) { $this->db = $db_object; } /** * @desc getAllUserData in TBL_SYSTEM_ROLE * @var * @return Array **/ function getAllRoleData() { if ($this->db) { $query = 'SELECT * FROM '.TBL_SYSTEM_ROLE.' ORDER BY systemRoleId DESC';
}
$result = $this->db->query($query); return $result; }else { echo 'Error line 38 tlSystemRole.class.php'; return; }
/** * @desc getRoleByID in TBL_SYSTEM_ROLE * @var * @return Array **/ function getRoleByID( $systemRoleId ) { if ($this->db) { $query = 'SELECT * FROM '.TBL_SYSTEM_ROLE.' a LEFT JOIN ( '.TBL_PRODI.' b ) USING (idProgramStudi) WHERE systemRoleId = "'.$systemRoleId.'"'; $result = $this->db->query($query); return $result; }else { echo 'Error line 38 tlSystemRole.class.php'; return; } } } ?> tlUser.class.php * @version 1.0 * @revision $Revision: 208 $ * * @package * @subpackage * * PHP Ver : 5.2.9 */ class tlUser { var $db; //var $config; function tlUser($db_object) { $this->db = $db_object;
}
$this->config = new Config($db_object); $this->setting = new tlSiteSetting($db_object); $this->mail = new tlMail($db_object);
/** * @desc getAllUserData in TBL_USER * @var * @return Array **/ function getAllUserData() { if ($this->db) { $query = 'SELECT * FROM '.TBL_USER.' LEFT JOIN ( '.TBL_DOSEN.', '.TBL_SYSTEM_ROLE.' ) ON ('.TBL_DOSEN.'.NIDN='.TBL_USER.'.NIDN AND '.TBL_SYSTEM_ROLE.'.systemRoleId='.TBL_USER.'.sy stemRoleId)'; $result = $this->db->query($query); return $result; }else { echo 'Error line 38 tlUser.class.php'; return; } } /** * @desc getAllDosenPengajar in TBL_USER * @var * @return Array **/ function getAllDosenPengajar() { if ($this->db) { $query = 'SELECT * FROM '.TBL_USER.' LEFT JOIN ( '.TBL_DOSEN.', '.TBL_SYSTEM_ROLE.' ) ON ('.TBL_DOSEN.'.NIDN='.TBL_USER.'.NIDN AND '.TBL_SYSTEM_ROLE.'.systemRoleId='.TBL_USER.'.sy stemRoleId) WHERE '.TBL_USER.'.systemRoleId="1" ORDER BY '.TBL_DOSEN.'.statusKerja DESC, '.TBL_DOSEN.'.name ASC'; $result = $this->db->query($query); return $result; }else { echo 'Error line 61 tlUser.class.php'; return; } } /** * @desc getAllUserDataList in TBL_USER, TBL_DOSEN and TBL_SYSTEM ROLE * @var * @param $count, $page, $_GET, $order, $active * @return Array **/ function getAllUserDataList($count = 0, $page = 0, $_GET , $order = '', $active = -1) { if ($this->db) { $NIDN = $_GET['NIDN']; $NIP = $_GET['NIP']; $name = $_GET['nama']; $order = $_GET['order']; $res = 0; $query = 'SELECT * FROM '.TBL_USER.' LEFT JOIN ( '.TBL_DOSEN.', '.TBL_SYSTEM_ROLE.' )
ON ('.TBL_DOSEN.'.NIDN='.TBL_USER.'.NIDN AND '.TBL_SYSTEM_ROLE.'.systemRoleId='.TBL_USER.'.sy stemRoleId) WHERE 1=1'; if ((0 + $active) > -1) { $query = $query . " AND ".TBL_USER.".accountLocked = " . ( 0 + $active) . ""; } if (!empty($_GET)) { if(!empty($NIDN) && $NIDN != '') { $query = $query . " AND ".TBL_DOSEN.".NIDN LIKE '%" . trim($NIDN) . "%'"; } if(!empty($NIP) && $NIP != '') { $query = $query . " AND ".TBL_DOSEN.".NIP LIKE '%".trim($NIP)."%'"; } if(!empty($name) && $name != '') { $query = $query . " AND ".TBL_DOSEN.".name LIKE '%".trim($name)."%'"; } } if($order == "NIDN") { $query = $query . " ORDER BY ".TBL_DOSEN.".NIDN ASC "; } elseif($order == "NIP") { $query = $query . " ORDER BY ".TBL_DOSEN.".NIP ASC "; } elseif($order == "name") { $query = $query . " ORDER BY ".TBL_DOSEN.".name ASC "; } else { $query = $query . " ORDER BY ".TBL_DOSEN.".name ASC "; } if (strlen($page) > 0) { $query = $query . " LIMIT " . ($page * $count) . ", " . $count; } $result = $this->db->query($query); return $result; }else { echo 'Error line 63 tlUser.class.php'; return; } } /** * @desc Gets a total of User available in database. * * @param active the active flag
* @return array or null */ function getUserCount( $_GET, $active = -1 ) { if ($this->db) { $NIDN = $_GET['NIDN']; $NIP = $_GET['NIP']; $name = $_GET['nama']; $res = 0; $query = 'SELECT COUNT('.TBL_USER.'.NIDN) AS total FROM '.TBL_USER.' LEFT JOIN ( '.TBL_DOSEN.', '.TBL_SYSTEM_ROLE.' ) ON ('.TBL_DOSEN.'.NIDN='.TBL_USER.'.NIDN AND '.TBL_SYSTEM_ROLE.'.systemRoleId='.TBL_USER.'.sy stemRoleId) WHERE 1=1'; if ((0 + $active) > -1) { $query = $query . " AND ".TBL_USER.".accountLocked='" . ( 0 + $active) . "'"; } if (!empty($_GET)) { if(!empty($NIDN) && $NIDN != '') { $query = $query . " AND ".TBL_DOSEN.".NIDN LIKE '%" . trim($NIDN) . "%'"; } if(!empty($NIP) && $NIP != '') { $query = $query . " AND ".TBL_DOSEN.".NIP LIKE '%".trim($NIP)."%'"; } if(!empty($name) && $name != '') { $query = $query . " AND ".TBL_DOSEN.".name LIKE '%".trim($name)."%'"; } } $result = $this->db->query($query); return $result[0]; }else { echo 'Error line 132 tlUser.class.php'; return; } } /** * @desc Gets a total of User Active available in database. * * @param * @return array or null */ function getActiveUserCount() { return $this->getUserCount( $_GET, 1 ); } /** * @desc Gets a total of User Inactive available in database. * * @param
* @return array or null */ function getInactiveUserCount() { return $this->getUserCount( $_GET, 0 ); } /** * @desc Gets All User Active available in database. * * @param * @return array or null */ function getActiveUserList($count = 0, $page = 0, $_GET, $order = '') { return $this->getAllUserDataList($count, $page, $_GET, $order, 1); } /** * @desc Gets All User Inactive available in database. * * @param * @return array or null */ function getInactiveUserList($count = 0, $page = 0, $_GET, $order = '') { return $this->getAllUserDataList($count, $page, $_GET, $order, 0); } /** * @desc getUserData in TBL_DOSEN at specific NIDN * @param NIDN from $_GET * @var NIDN * @return Array **/ function getUserByNIDN( $NIDN ) { if ($this->db) { $query = 'SELECT * FROM '.TBL_USER.' LEFT JOIN ( '.TBL_DOSEN.', '.TBL_SYSTEM_ROLE.' ) ON ('.TBL_DOSEN.'.NIDN='.TBL_USER.'.NIDN AND '.TBL_SYSTEM_ROLE.'.systemRoleId='.TBL_USER.'.sy stemRoleId ) WHERE '.TBL_USER.'.NIDN="'.$NIDN.'"'; // print $query; // exit; $result = $this->db->query($query); return $result; }else { echo 'Error line 217 tlUser.class.php'; return; } } /** * @desc getUserData in TBL_DOSEN at specific id * @param id from $_GET * @var id * @return Array **/ function getUserById( $systemUserId ) { if ($this->db) {
$query = 'SELECT * FROM '.TBL_USER.' LEFT JOIN ( '.TBL_DOSEN.', '.TBL_SYSTEM_ROLE.' ) ON ('.TBL_DOSEN.'.NIDN='.TBL_USER.'.NIDN AND '.TBL_SYSTEM_ROLE.'.systemRoleId='.TBL_USER.'.sy stemRoleId ) WHERE '.TBL_USER.'.systemUserId="'.$systemUserId.'"'; $result = $this->db->query($query); return $result; }else { echo 'Error line 217 tlUser.class.php'; return; } } /** * @desc getUserByEmail in TBL_DOSEN at specific email * @param email from $_POST * @var email * @return Array **/ function getUserByEmail( $email ) { if ($this->db) { $query = 'SELECT * FROM '.TBL_USER.' LEFT JOIN ( '.TBL_DOSEN.', '.TBL_SYSTEM_ROLE.' ) ON ('.TBL_DOSEN.'.NIDN='.TBL_USER.'.NIDN AND '.TBL_SYSTEM_ROLE.'.systemRoleId='.TBL_USER.'.sy stemRoleId ) WHERE '.TBL_DOSEN.'.email LIKE "' . $email . '"'; $result = $this->db->query($query); return $result; }else { echo 'Error line 217 tlUser.class.php'; return; } } /** * @desc user authentication, logged in TBL_USER * @var userName, password from $_POST * @return Session Array **/ function authenticate($username, $password, $idProgramStudi, $jenisProgram) { // print "<pre>"; // echo "Username: ".$username."
"; // echo "Password: ".$password."
"; // exit; $password = md5($password); $query = 'SELECT * FROM '.TBL_USER.' LEFT JOIN ( '.TBL_DOSEN.', '.TBL_SYSTEM_ROLE.' ) ON ('.TBL_DOSEN.'.NIDN='.TBL_USER.'.NIDN AND '.TBL_SYSTEM_ROLE.'.systemRoleId='.TBL_USER.'.sy stemRoleId ) WHERE '.TBL_USER.'.username="'.$username.'" AND '.TBL_USER.'.password="'.$password.'"'; $result = $this->db->query($query); // print "<pre>"; // print $query . "
"; // print count($result) . "
";
// //
print_r($result); exit;
if ( ! $result || $result[0]['accountLocked'] == 0) { return $result[0]['accountLocked']; } else { if ($result[0]['username']) { $SESS_LOGIN = $result; $lastIP = $_SERVER['REMOTE_ADDR']; $lastLogin = date("Y-m-d H:i:s",time()); $setting = $this->setting>getActiveSiteSetting($idProgramStudi, $jenisProgram); session_register( 'USERID' ); session_register( 'NIDN' ); session_register( 'NIP' ); session_register( 'USERNAME' ); session_register( 'NAME' ); session_register( 'LASTLOGIN' ); session_register( 'LASTIP' ); session_register( 'SYSTEMROLEID' ); session_register( 'IDPROGRAMSTUDI' ); session_register( 'JENISPROGRAM' ); session_register( 'TAHUNAKADEMIK' ); session_register( 'SEMESTERAKADEMIK' ); session_register( 'TANGGALBUKA' ); session_register( 'TANGGALTUTUP' ); session_register( 'PANGKATFUNGSIONAL' ); session_register( 'STATUSKERJA' ); session_register( 'JABATANSTRUKTURAL' ); session_register( 'BAHASA' ); session_register( 'ACCOUNTLOCKED' ); session_register( 'PHOTO' ); $_SESSION['USERID'] = $result[0]['systemUserId']; $_SESSION['NIDN'] = $result[0]['NIDN']; $_SESSION['NIP'] = $result[0]['NIP']; $_SESSION['USERNAME'] = $result[0]['username']; $_SESSION['NAME'] = $result[0]['name']; $_SESSION['LASTLOGIN'] = $result[0]['lastLogin']; $_SESSION['LASTIP'] = $result[0]['lastIP']; $_SESSION['SYSTEMROLEID'] = $result[0]['systemRoleId']; $_SESSION['IDPROGRAMSTUDI'] = $idProgramStudi; $_SESSION['JENISPROGRAM'] = $jenisProgram; $_SESSION['TAHUNAKADEMIK'] = $setting[0]['tahunAkademikAktif']; $_SESSION['SEMESTERAKADEMIK'] = $setting[0]['semesterAkademikAktif']; $_SESSION['TANGGALBUKA'] = $setting[0]['tanggalBuka']; $_SESSION['TANGGALTUTUP'] = $setting[0]['tanggalTutup']; $_SESSION['PANGKATFUNGSIONAL'] = $result[0]['pangkatFungsional']; $_SESSION['STATUSKERJA'] = $result[0]['statusKerja']; $_SESSION['JABATANSTRUKTURAL'] = $result[0]['jabatanStruktural']; $_SESSION['BAHASA'] = $setting[0]['bahasa']; $_SESSION['ACCOUNTLOCKED'] = $result[0]['accountLocked'];
$_SESSION['PHOTO'] = $result[0]['foto']; $qrUpdate = 'UPDATE '.TBL_USER.' SET lastIP="'.$lastIP.'", lastLogin="'.$lastLogin.'" WHERE NIDN="'.$result[0]['NIDN'].'"'; $resultUpdate = $this->db->query($qrUpdate); if (! $resultUpdate) { //echo 'Error line 291 tlUser.class.php on '.$qrUpdate.'
'; return $result[0]['accountLocked']; } else { //$this->db = $_SESSION; return $result[0]['accountLocked']; }
}
}
} else { return $result[0]['accountLocked']; }
/** * @desc user logout, nothing to update just lastLogout * @param none * @return bool **/ function logout() { session_start(); //check the session if (session_is_registered('NIDN')) { //Close MySQL $this->db->sql_close(); //just destroy session_destroy(); return true; } else { //throw error, if no session was registered $msg = 'NO SESSION WAS REGISTERD'; $url = $this->config->get_url(); exit; header('location:'.HOME_URL.'?action=flogin&referer='.u rlencode( $url )); //print $msg; return false; } } /** * @desc kick out if reach this file without SESSION * @param none * @return bool **/ function checkSession() { //session_start(); if (empty($_SESSION) AND !isset($_SESSION['USERID']) AND ($_SESSION['USERID'] == null)) { //if sesion registered NIDN not found, destroy all session and return false session_destroy();
}
return false; } return true;
/** * @desc Save an instance of $_POST to database. * @param $_POST */ function save( $_POST ) { if ($this->db) { if ( $this->isExist($_POST['NIDN']) ) { // print "<pre>"; // print "EDIT"; // exit; $file_name = $_POST['file_name']; $file_type = $_POST['file_type']; $file_size = $_POST['file_size']; $file_tmp_name = $_POST['file_tmp_name']; $pic_err = 0; if (!empty($file_name)) { $file_ext = strtolower(substr($file_name, strrpos($file_name,"."))); $file_crypt = md5($file_name.date("YmdHis")); "a");
$resource = fopen(UPLOAD_DIR . "log.txt",
fwrite($resource, date("Ymd h:i:s")." UPLOAD - " . $_SERVER['REMOTE_ADDR'] . " " . $file_crypt . $file_ext . " " . $file_type . " \n"); fclose($resource); if ( $file_size > $GLOBALS['MAX_SIZE']) { $message = "The file size is over 5 MB."; $pic_err = 1; // error } elseif (!in_array($file_type, $GLOBALS['FILE_MIMES']) && !in_array($file_ext, $GLOBALS['FILE_EXTS']) ) { $message = "Sorry, " . $file_name . "(" . $file_type . ") is not allowed to be uploaded."; $pic_err = 1; // error } else { $file_path = UPLOAD_DIR . $file_name; if ( $file_name == "" ) { $message = "Invalid File Name Specified"; $pic_err = 1; // error } $moved = move_uploaded_file( $file_tmp_name, $file_path ); rename(UPLOAD_DIR . $file_name, UPLOAD_DIR . $file_crypt . $file_ext); } } $dataUser = $this->getUserByNIDN( $_POST['NIDN'] );
$foto_db = $dataUser[0]['foto']; if($pic_err == 1){ $foto = $foto_db; } else{ if ($handle = opendir(UPLOAD_DIR)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != ".." && $file == $foto_db) { unlink(realpath(UPLOAD_DIR . $foto_db)); } } closedir($handle); } $foto = $file_crypt . $file_ext; } //Delete Foto Checbox checked if ( $_POST['removeFoto'] == 1 ) { if ($handle = opendir(UPLOAD_DIR)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != ".." && $file == $foto_db) { unlink(realpath(UPLOAD_DIR . $foto_db)); } } closedir($handle); } $foto = ''; } //UPDATE TABLE PERSON DATA $sql = "UPDATE " . TBL_DOSEN . " SET "; $sql = $sql . "NIDN='" . $this->escape( $_POST['NIDN'] ) . "', "; $sql = $sql . "NIP='" . $this->escape( $_POST['NIP'] ) . "', "; $sql = $sql . "name='" . $this->escape( $_POST['name'] ) . "', "; $sql = $sql . "nickname='" . $this->escape( $_POST['nickname'] ) . "', "; $sql = $sql . "title='" . $this->escape( $_POST['title'] ) . "', "; $sql = $sql . "birthPlace='" . $this->escape( $_POST['birthPlace'] ) . "', "; $sql = $sql . "birthDate='" . $this->escape( $_POST['birthDate'] ) . "', "; $sql = $sql . "address='" . $this->escape( $_POST['address'] ) . "', "; $sql = $sql . "phone='" . $this->escape( $_POST['phone'] ) . "', "; $sql = $sql . "mobile='" . $this->escape( $_POST['mobile'] ) . "', "; $sql = $sql . "othersPhone='" . $this->escape( $_POST['othersPhone'] ) . "', "; $sql = $sql . "sex='" . $this->escape( $_POST['sex'] ) . "', ";
$sql = $sql . "religion='" . $this->escape( $_POST['religion'] ) . "', "; $sql = $sql . "email='" . $this->escape( $_POST['email'] ) . "', "; $sql = $sql . "pangkatFungsional='" . $this>escape( $_POST['pangkatFungsional'] ) . "', "; $sql = $sql . "statusKerja='" . $this->escape( $_POST['statusKerja'] ) . "', "; $sql = $sql . "jabatanStruktural='" . $this>escape( $_POST['jabatanStruktural'] ) . "', "; $sql = $sql . "foto='" . $this->escape( $foto ) . "' "; $sql = $sql . "WHERE NIDN='" . $_POST['NIDN'] . "'"; //UPDATE TABLE SYSTEM USER DATA $sql2 = "UPDATE " . TBL_USER . " SET "; $sql2 = $sql2 . "systemRoleId='" . $this->escape( $_POST['systemRoleId'] ) . "', "; $sql2 = $sql2 . "accountLocked='" . $this>escape( $_POST['accountLocked'] ) . "' "; $sql2 = $sql2 . "WHERE NIDN='" . $_POST['NIDN'] . "'"; } else { // print "<pre>"; // print "INSERT"; // exit; $file_name = $_POST['file_name']; $file_type = $_POST['file_type']; $file_size = $_POST['file_size']; $file_tmp_name = $_POST['file_tmp_name']; $pic_err = 0; if (!empty($file_name)) { $file_ext = strtolower(substr($file_name, strrpos($file_name,"."))); $file_crypt = md5($file_name.date("YmdHis")); "a");
$resource = fopen(UPLOAD_DIR . "log.txt",
fwrite($resource, date("Ymd h:i:s")." UPLOAD - " . $_SERVER['REMOTE_ADDR'] . " " . $file_crypt . $file_ext . " " . $file_type . " \n"); fclose($resource); if ( $file_size > $GLOBALS['MAX_SIZE']) { $message = "The file size is over 5 MB."; $pic_err = 1; // error } else if (!in_array($file_type, $GLOBALS['FILE_MIMES']) && !in_array($file_ext, $GLOBALS['FILE_EXTS']) ) { $message = "Sorry, " . $file_name . "(" . $file_type . ") is not allowed to be uploaded."; $pic_err = 1; // error } else { $file_path = UPLOAD_DIR . $file_name; if ( $file_name == "" ) {
Specified";
$file_path );
$message = "Invalid File Name $pic_err = 1; // error } move_uploaded_file( $file_tmp_name,
rename(UPLOAD_DIR . $file_name, UPLOAD_DIR . $file_crypt . $file_ext); } } if($pic_err == 1){ $foto = NULL; } else { $foto = $file_crypt . $file_ext; } $sql = "INSERT INTO " . TBL_DOSEN . " "; $sql = $sql . "(NIDN, NIP, name, nickname, title, birthPlace, birthDate, address, phone, "; $sql = $sql . "mobile, othersPhone, sex, religion, email, pangkatFungsional, statusKerja, jabatanStruktural, foto) "; $sql = $sql . "VALUES ("; $sql = $sql . "'" . $this->escape( $_POST['NIDN'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['NIP'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['name'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['nickname'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['title'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['birthPlace'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['birthDate'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['address'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['phone'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['mobile'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['othersPhone'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['sex'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['religion'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['email'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['pangkatFungsional'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['statusKerja'] ) . "', "; $sql = $sql . "'" . $this->escape( $_POST['jabatanStruktural'] ) . "', "; $sql = $sql . "'" . $this->escape( $foto ) . "'"; $sql = $sql . ") "; /* * INSERT INTO TBL_USER */ $sql2 = "INSERT INTO " . TBL_USER . " ";
$sql2 = $sql2 . "(NIDN, systemRoleId, username, password, passwordHint, lastLogin, lastIP, accountLocked) "; $sql2 = $sql2 . "VALUES ("; $sql2 = $sql2 . "'" . $this->escape( $_POST['NIDN'] ) . "', "; $sql2 = $sql2 . "'" . $this->escape( $_POST['systemRoleId'] ) . "', "; $sql2 = $sql2 . "'" . $this->escape( $_POST['NIDN'] ) . "', "; $sql2 = $sql2 . "'" . $this->escape( md5($_POST['NIDN']) ) . "', "; $sql2 = $sql2 . "'" . $this->escape( $_POST['NIDN'] ) . "', "; $sql2 = $sql2 . "'" . $this->escape( date("Y-m-d H:i:s",time()) ) . "', "; $sql2 = $sql2 . "'" . $this->escape( $_SERVER['REMOTE_ADDR'] ) . "', "; $sql2 = $sql2 . "'" . $this->escape( $_POST['accountLocked'] ) . "'"; $sql2 = $sql2 . ") "; } } // print "<pre>"; // print $sql."
"; // print $sql2; // exit; $result = $this->db->query($sql); $result2 = $this->db->query($sql2); return $result; } /** * @desc Change user passsword * * @param $_POST */ function changePassword( $_POST ) { if ($this->db) { if ( $this->isExist($_POST['NIDN']) ) { $user = $this>getUserById($_POST['systemUserId']); if($user[0]['password'] == md5($_POST['passwordLama']) AND $_POST['passwordBaru'] == $_POST['passwordBaruConfirm']) { //UPDATE TABLE SYSTEM USER DATA $query = "UPDATE " . TBL_USER . " SET password = '" . $this->escape( md5($_POST['passwordBaru']) ) . "' WHERE systemUserId='" . $_POST['systemUserId'] . "'"; } } else { return false; } } $result = $this->db->query($query); $sendMail = $this->mail>sendPasswordResetMail($user[0]['email'], $user[0]['username'], $_POST['passwordBaru']); // print "<pre>"; // print $query . "
";
// // }
print_r($user) . "
"; exit; return true;
/** * @desc Reset user passsword * * @param $_POST */ function forgotPassword( $email ) { if ($this->db) { $user = $this->getUserByEmail( $email ); if(is_array($user) AND $user[0]['accountLocked'] == 1) { $confirmation = md5($user[0]['email'] . $user[0]['username']); $sendMail = $this->mail>sendPasswordChangeConfirmation($user[0]['email'], $user[0]['username'], $user[0]['systemUserId'], $confirmation); return true; } else { return false; } } } /** * @desc Reset user passsword * * @param $_POST */ function resetPassword( $email ) { if ($this->db) { $user = $this->getUserByEmail( $email ); if(is_array($user) AND $user[0]['accountLocked'] == 1) { $passwordBaru = $this>generateRandomString(); $sendMail = $this->mail>sendForgotPassword($user[0]['email'], $user[0]['username'], $passwordBaru); /* * Update Password */ $query = "UPDATE " . TBL_USER . " SET password = '" . md5($passwordBaru) . "' WHERE systemUserId='" . $user[0]['systemUserId'] . "'"; $result = $this->db->query($query); // print "<pre>"; // print_r($user) . "
"; // print $passwordBaru . "
"; // print $query . "
"; // exit; return true; } else {
return $result['message'] = "Account anda sudah tidak aktif"; } } } /** * @desc generateRandomString for user passsword * * @param * @return String */ function generateRandomString($length = 6, $letters = '1234567890qwertyuiopasdfghjklzxcvbnm') { $s = ''; $lettersLength = strlen($letters)-1; for($i = 0 ; $i < $length ; $i++) { $s .= $letters[rand(0,$lettersLength)]; } return $s; } /** * @desc Check whether a user with specific NIDN exist in database * * @param NIDN * @return true if exist false otherwise */ function isExist( $NIDN = '' ) { if (strlen($NIDN) <= 0) { return false; }
* @return the number of object removed from database */ function remove($NIDN = '') { $res = 0; if ((strlen($NIDN) > 0) && $this->db) { $query = "SELECT foto FROM " . TBL_DOSEN . " WHERE NIDN = '" . $NIDN . "'"; if ($this->db) { $result = $this->db->query($query); } $foto = $result[0]['foto']; //DELETE FROM TABLE SYSTEM USER $sql = "DELETE FROM " . TBL_USER . " WHERE NIDN = '" . $NIDN . "'"; $res = $this->db->query($sql); //DELETE FROM TABLE PERSON $sql2 = "DELETE FROM " . TBL_DOSEN . " WHERE NIDN = '" . $NIDN . "'"; $res2 = $this->db->query($sql2);
$foto)
}
/** * Remove a single User from database. * * @param NIDN to remove
{ }
$result = 0; $query = 'SELECT COUNT('.TBL_USER.'.NIDN) AS total FROM '.TBL_USER.' LEFT JOIN ( '.TBL_DOSEN.', '.TBL_SYSTEM_ROLE.' ) ON ('.TBL_DOSEN.'.NIDN='.TBL_USER.'.NIDN AND '.TBL_SYSTEM_ROLE.'.systemRoleId='.TBL_USER.'.sy stemRoleId) WHERE '.TBL_USER.'.NIDN="'.$NIDN.'"'; if ($this->db) { $result = $this->db->query($query); } if ($result) { $count = 0; if (is_array($result)) { $count = $result[0][0]; } return $count > 0; } return false;
if ($foto != '') { if ($handle = opendir(UPLOAD_DIR)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != ".." && $file ==
}
}
} ?>
}
unlink(realpath(UPLOAD_DIR . $foto));
} closedir($handle);
} return $res2;
/** * Escape a form data before adding to database. * * @param value the String to be escaped * @return safe string */ function escape( $value ) { if (get_magic_quotes_gpc()) { return $value; } else { return addslashes($value); } }