Program Aplikasi Diagram Gantt Padarepository.usd.ac.id/32027/2/005314085_Full.pdf · This gantt...
Transcript of Program Aplikasi Diagram Gantt Padarepository.usd.ac.id/32027/2/005314085_Full.pdf · This gantt...
Program Aplikasi Diagram Gantt Pada
Sistem Informasi Manajemen Proyek Berbasis Web
Studi Kasus: Odyssey Digital Development Community
TUGAS AKHIR
Diajukan untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana TeknikProgram Studi Teknik Informatika
Disusun Oleh:Susetyo Aribowo
005314085
PROGRAM STUDI TEKNIK INFORMATIKA
JURUSAN TEKNIK INFORMATIKA
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS SANATA DHARMA
YOGYAKARTA
2007
i
Gantt Chart Application On
Web Based Project Management Information System
Case Study: Odyssey Digital Development Community
Final Project
Presented as Partial Fullfilment of the RequirementsTo Obtain the Sarjana Teknik Degree
In Informatics Engineering
By:Susetyo Aribowo
005314085
INFORMATICS ENGINEERING STUDY PROGRAM
DEPARTMENT OF INFORMATICS ENGINEERING
FACULTY OF SCIENCE AND TECHNOLOGY
SANATA DHARMA UNIVERSITY
YOGYAKARTA
2007
ii
iii
iv
PERNYATAAN KEASLIAN KARYA
Dengan ini saya menyatakan bahwa dalam tugas akhir ini tidak terdapat
karya yang pernah diajukan untuk memperoleh gelar kesarjanaan di suatu
Perguruan Tinggi, dan sepanjang pengetahuan saya juga tidak terdapat karya atau
pendapat yang pernah ditulis atau diterbitkan oleh orang lain, kecuali yang secara
tertulis diacu dalam naskah ini dan disebutkan dalam daftar pustaka.
Yogyakarta, .......................................
Penulis,
Susetyo Aribowo
v
ABSTRAKSI
Suatu proyek merupakan pekerjaan atau tugas yang waktunya sudah
ditentukan dan dengan tujuan yang telah ditetapkan di awal perencanaan. Untuk
mencapai tujuan-tujuan yang diharapkan oleh pihak yang terkait dalam proyek
tersebut, diperlukan suatu media untuk merencanakan, menjadwalkan dan
mengawasi perkembangan agar pelaksanaan pekerjaan proyek secara keseluruhan
dapat berjalan terarah dan terkendali dalam memenuhi waktu kerja, pembiayaan,
fasilitas yang tersedia, serta sesuai dengan spesifikasi teknis yang ditetapkan.
Aplikasi diagram gantt ini diharapkan bisa mendukung sistem informasi
manajemen proyek dalam hal merencanakan sub-proyek yang harus dikerjakan
untuk menyelesaikan proyek, memberikan dasar penjadwalan proyek dan sub-
proyek, dan memonitor perkembangan pengerjaan proyek. Aplikasi ini dibangun
dengan menggunakan perangkat lunak PHP dan MySQL sebagai basis datanya.
vi
ABSTRACT
Project is an activity or tasks which it’s time has been scheduled and it’s
purposes have been determined on the first time it planned. To accomplish the
desired purposes by the company related in thus project, it needs a media for
planning, scheduling, and progress monitoring so it runs successfully and fullfill
the schedule, budget, available facility, and suitable to the determined
specification.
This gantt chart application hopefully could support the project
management information system on planning the sub-projects to work on, gives a
basis for scheduling when the tasks will be carried out, and it helps to monitor the
progress of the underway project. This application developed using PHP
programming language and MySQL as database.
vii
….dedicated to my beloved mother Sri “Menik” Sukarsih
viii
perbaikan-perbaikan kecil yang berkelanjutan
akan mendatangkan kemajuan besar
ix
LEMBAR PERNYATAAN PERSETUJUAN
PUBLIKASI KARYA ILMIAH UNTUK KEPENTINGAN AKADEMIS
Yang bertanda tangan di bawah ini, saya mahasiswa Universitas Sanata Dharma :
Nama : Susetyo Aribowo
Nomor Mahasiswa : 005314085
Demi pengembangan ilmu pengetahuan, saya memberikan kepada Perpustakaan
Universitas Sanata Dharma karya ilmiah saya yang berjudul :
Program Aplikasi Diagram Gantt Pada Sistem Informasi Manajemen Proyek
Berbasis Web (Studi Kasus: Odyssey Digital Development Community).
Beserta perangkat yang diperlukan (bila ada). Dengan demikian saya memberikan
kepada Perpustakaan Universitas Sanata Dharma hak untuk menyimpan, mengalihkan
dalam bentuk media lain, mengelolanya dalam bentuk pangkalan data,
mendistribusikan secara terbatas, dan mempublikasikannya di Internet atau media lain
untuk kepentingan akademis tanpa perlu meminta ijin dari saya maupun memberikan
royalti kepada saya selama tetap mencantumkan nama saya sebagai penulis.
Demikian pernyataan ini yang saya buat dengan sebenarnya.
Dibuat di Yogyakarta
Pada tanggal : 29 Maret 2008
Yang Menyatakan
(Susetyo Aribowo)
KATA PENGANTAR
Puji syukur kepada Tuhan Yang Maha Esa, atas karunia dan rahmat-Nya,
sehingga penulis dapat menyelesaikan Tugas Akhir dengan judul “PROGRAM
APLIKASI DIAGRAM GANTT PADA SISTEM INFORMASI
MANAJEMEN PROYEK BERBASIS WEB (Studi kasus: Odyssey Digital
Development Community).
Penyusunan Tugas Akhir ini dimaksudkan guna memenuhi salah satu
persyaratan mencapai derajat S-1. Gelar kesarjanaan dalam Jurusan Teknik
Informatika pada Fakultas Teknik Universitas Sanata Dharma Yogyakarta.
Tugas Akhir ini dapat tersusun berkat adanya bimbingan, petunjuk,
bantuan maupun saran – saran dari berbagai pihak. Oleh karena itu penulis ingin
mengucapkan terima kasih yang sebesar-besarnya kepada :
1. Ir. Gregorius Heliarko S.J., S.S., B.S.T., M.A., M.Sc., selaku Dekan
Teknik Universitas Sanata Dharma.
2. Agnes Maria Polina, S.Kom, M.Sc, selaku Ketua Jurusan Teknik
Informatika Universitas Sanata Dharma.
3. Andy Prasetyo, selaku pemimpin Odyssey Digital Development
Community.
4. Albertus Agung Hadhiatma, S.T, M.T. selaku Dosen Pembimbing Utama.
5. Staf Dosen Jurusan Teknik Informatika Universitas Sanata Dharma
Yogyakarta.
6. Seluruh Staff Unit Teknik Informatika yang telah membantu saya.
7. Semua petugas di Sekretariat Teknik Universitas Sanata Dharma.
x
8. Mbah Kandar yang selalu memberi dorongan, semangat, doa dan materi
hingga terselesaikannya tugas akhir ini.
9. Maya dan Wida yang selalu memberi dukungan dan dorongan dalam
menyelesaikan tugas akhir ini.
10. Teman-teman yang telah memberikan dorongan moril terutama Danang,
Krisna, Topo, Agus, Dion, Gina, Gundhul, Dewa, Santos, Pande, Rixo,
Adem, Ima dan Widi.
11. Semua pihak yang telah membantu penulis dalam penyusunan Tugas
Akhir ini.
Penulis sangat menyadari bahwa penyusunan dari Tugas Akhir ini masih
jauh dari sempurna, adanya kritik saran maupun petunjuk sangat membantu demi
perbaikan dan penyempurnaan Tugas Akhir ini. Namun besar harapan penulis
kiranya dapat bermanfaat bagi kita semua.
Yogyakarta, ..........................
Penulis
xi
DAFTAR ISI
Halaman Judul ............................................................................................... i
Halaman Judul dalam Bahasa Inggris ........................................................... ii
Halaman Persetujuan ..................................................................................... iii
Halaman Pengesahan ..................................................................................... iv
Halaman Pernyataan Keaslian Karya ............................................................ v
Halaman Abstraksi ........................................................................................ vi
Halaman Abstract .......................................................................................... vii
Halaman Persembahan .................................................................................. viii
Halaman Motto .............................................................................................. ix
Kata Pengantar .............................................................................................. x
Daftar Isi ........................................................................................................ xii
Daftar gambar ................................................................................................ xvi
BAB I PENDAHULUAN …………………………………………….. 1
I.1 Latar Belakang Masalah …………………………………. 1
I.2 Rumusan Masalah ……………………………………….. 2
I.3 Asumsi dan Batasan Masalah ……………………………. 3
I.4 Tujuan Penelitian ………………………………………… 4
I.5 Metode Penelitian ………………………………………... 4
I.6 Sistematika Penulisan ……………………………………. 7
BAB II DASAR TEORI ………………………………………………. 9
II.1 Sistem Informasi …………………………………………. 9
II.2 Database………………………………………………….. 9
xii
II.2.1 Single User …………………………………… 11
II.2.2 Multi User Klasik ……………………………… 11
II.2.3 Client/Server …………………………………… 12
II.3 HTML …………………………………………………. 14
II.4 PHP …………………………………………………. 15
II.4.1 Sejarah PHP ……………………………………. 15
II.4.2 Kelebihan-kelebihan PHP……………………… 15
II.4.3 Alasan Menggunakan PHP ……………………. 17
II.4.4 Cara Kerja PHP ………………………………. 17
II.5 Database dengan MySQL ……………………………… 18
II.5.1 MySQL ………………………………………… 18
II.5.2 PhpMyAdmin ………………………………….. 19
II.5.3 Aplikasi PHP dan MySQL …………………….. 20
II.6 WWW …………………………………………………. 20
II.6.1 Skema Kerja WWW …………………………… 21
II.6.2 Browser Web ………………………………… 23
II.6.3 Server Web …………………………………….. 23
II.7 HTTP …………………………………………………. 23
II.8 Web Database ……………………………………………. 24
II.9 Server Side dan Client Side ……………………………… 25
II.10 Intranet dan Aplikasi Web ……………………………….. 26
II.11 Web Dinamis PHP dan Three-Tier Architecture………… 28
II.12 Web Scripting ……………………………………………. 29
II.13 SDLC(System Development Life Cycle)………………… 30
xiii
II.14 Virtual Office…………………………………………….. 30
BAB III ANALISA DAN PERANCANGAN SISTEM ......................... 32
III.1 Analisa Sistem …………………………………………… 32
III.2 Deskripsi Sistem …………………………………………. 32
III.3 Perancangan Sistem………………………………………. 33
III.3.1 Use Case Diagram……………………………… 34
III.3.2 Activity Diagram ………………………………. 35
III.3.3 Relasi Tabel ……………………………………. 36
III.3.4 Perancangan Basis Data ……………………… 37
III.3.5 Perancangan Antarmuka ……………………….. 46
BAB IV IMPLEMENTASI PROGRAM……………………………… 58
IV.1 Struktur Menu Progam…………………………………… 58
IV.2 Tampilan Program dan Penjelasan……………………….. 59
IV.2.1 Koneksi Basi Data……………………………… 59
IV.2.2 Halaman Login ………………………………… 59
IV.2.3 Halaman Home ………………………………… 63
IV.2.4 Addressbook……………………………………. 66
IV.2.5 Daftar Kegiatan………………………………… 73
IV.2.6 Pesan …………………………………………… 87
IV.2.7 Project Manager………………………………… 94
IV.2.8 Admin ………………………………………….. 112
IV.2.9 Polls ……………………………………………. 122
IV.2.10 Artikel …………………………………………. 135
IV.2.11 Informasi Sistem ……………………………….. 145
xiv
IV.2.12 Password ………………………………………. 146
BAB V ANALISA HASIL ……………………………………………. 148
BAB VI PENUTUP …………………………………………………….. 152
VI.1 Kesimpulan ……………………………………………… 152
VI.2 Saran ………………………………………….............. 152
DAFTAR PUSTAKA ……………………………………………………. 153
xv
DAFTAR GAMBAR
Gambar II.1 Model sistem single user…………………………………… 11
Gambar II.2 Model sistem multiuser klasik……………………………… 12
Gambar II.3 Model sistem client/server …………………………………. 14
Gambar II.4 Cara kerja PHP……………………………………………… 17
Gambar II.5 Skema kerja World Wide Web ……………………………. 22
Gambar II.6 Arsitektur three-tiered …………………………………….. 27
Gambar II.7 Web Dinamis PHP pada arsitektur three-tier………………. 28
Gambar III.1 Form login …………………………………………………. 46
Gambar III.2 Header……………………………………………………… 47
Gambar III.3 Header menu ……………………………………………….. 47
Gambar III.4 Footer ………………………………………………………. 47
Gambar III.5 Home ………………………………………………………. 48
Gambar III.6 Daftar addressbook ………………………………………… 48
Gambar III.7 Form input addressbook …………………………………… 49
Gambar III.8 Daftar kegiatan proyek……………………………………… 49
Gambar III.9 Form input kegiatan pribadi dan daftarnya………………… 50
Gambar III.10 Kotak masuk ……………………………………………….. 50
Gambar III.11 Tulis pesan ………………………………………………… 51
Gambar III.12 Baca pesan …………………………………………………. 51
Gambar III.13 Halaman utama …………………………………………….. 52
Gambar III.14 Hasil pencarian proyek …………………………………….. 52
Gambar III.15 Form input proyek baru ……………………………………. 52
xvi
Gambar III.16 Lihat detil proyek ………………………………………….. 52
Gambar III.17 Form input bagian proyek………………………………….. 53
Gambar III.18 Halaman depan bagian admin……………………………… 54
Gambar III.19 Form input pengguna sistem baru …………………………. 54
Gambar III.20 Konfigurasi grup pengguna sistem ………………………… 54
Gambar III.21 Polls dan hasilnya ………………………………………….. 55
Gambar III.22 Setting atau konfigurasi poll ………………………………. 55
Gambar III.23 Halaman utama dan hasil pencarian artikel………………… 56
Gambar III.24 Form input artikel baru …………………………………….. 56
Gambar III.25 Administrasi artikel………………………………………… 57
Gambar III.26 Informasi sistem ………………………………………........ 57
Gambar IV.1 Struktur menu program…………………………………….. 58
Gambar IV.2 Halaman login……………………………………………… 60
Gambar IV.3 Halaman home……………………………………………… 65
Gambar IV.4 Lihat addressbook …………………………………………. 67
Gambar IV.5 Tambah data addressbook …………………………………. 67
Gambar IV.6 Lihat kegiatan proyek ……………………………………… 73
Gambar IV.7 Form update progress dan isi dokumentasi………………… 74
Gambar IV.8 Form input kegiatan pribadi ……………………………….. 74
Gambar IV.9 Form edit kegiatan pribadi ………………………………… 75
Gambar IV.10 Form update progress kegiatan pribadi ……………………. 75
Gambar IV.11 Kotak masuk dalam menu pesan ………………………….. 87
Gambar IV.12 Tulis pesan ………………………………………………… 88
Gambar IV.13 Baca pesan ………………………………………………… 88
xvii
Gambar IV.14 Halaman utama pada project manager …………………….. 94
Gambar IV.15 Input proyek baru ………………………………………….. 95
Gambar IV.16 Input bagian-bagian proyek ……………………………….. 95
Gambar IV.17 Lihat detil proyek dan gantt-chart …………………………. 96
Gambar IV.18 Pencarian proyek…………………………………………… 97
Gambar IV.19 Halaman utama, form update pengumuman ………………. 112
Gambar IV.20 Konfigurasi pengguna sistem ……………………………… 113
Gambar IV.21 Setting grup pengguna sistem ……………………………… 113
Gambar IV.22 Lihat poll-poll dan hasil-hasilnya ………………………….. 123
Gambar IV.23 Setting poll ………………………………………………… 123
Gambar IV.24 Halaman depan artikel dan hasil pencarian………………… 135
Gambar IV.25 Form input artikel ………………………………………….. 136
Gambar IV.26 Setting artikel yang belum dipublikasikan ………………… 136
Gambar IV.27 Baca artikel ………………………………………………… 137
Gambar IV.28 Informasi sistem …………………………………………… 145
Gambar IV.29 Form ganti password …………………………………… 147
xviii
BAB I
PENDAHULUAN
I.1 Latar Belakang Masalah
Suatu proyek merupakan pekerjaan atau tugas yang waktunya sudah
ditentukan dan dengan tujuan yang telah ditetapkan di awal perencanaan. Yang
dimaksud dengan pekerjaan disini adalah kegiatan yang harus dilaksanakan dan
dipelihara sesuai dengan kontrak. Suatu proyek biasanya dibuat untuk memenuhi
kinerja tertentu dan dalam rangka memenuhi kinerja tersebut terdapat batasan-
batasan yang harus ditaati agar tujuan yang diinginkan dapat dicapai pada akhir
periode proyek.
Untuk mencapai tujuan-tujuan yang diharapkan oleh pihak-pihak yang
terkait dalam proyek tersebut, diperlukan suatu media untuk merencanakan,
menjadwalkan dan mengawasi perkembangan agar pelaksanaan pekerjaan proyek
secara keseluruhan dapat berjalan terarah dan terkendali dalam memenuhi waktu
kerja, pembiayaan, fasilitas yang tersedia, serta sesuai dengan spesifikasi teknis
yang ditetapkan. Dengan media ini kita dapat melakukan beberapa hal, seperti:
1. Merencanakan sub proyek yang harus dikerjakan untuk menyelesaikan
suatu proyek.
2. Memberikan dasar untuk jadwal pengerjaan sub proyek dalam suatu
proyek.
3. Merencanakan penempatan sumber daya manusia yang dibutuhkan untuk
menyelesaikan proyek.
1
4. Ketika proyek sedang dikerjakan, aplikasi ini membantu kita dalam
memonitor perkembangan pengerjaan proyek apakah sudah sesuai dengan
jadwal yang telah ditentukan atau tidak.
Demi keharmonisan kerja yang baik dan kelancaran pelaksanaan seluruh
kegiatan, suatu proyek mutlak memerlukan keterbukaan dari berbagai pihak yang
terkait. Masing-masing pihak hendaknya dapat mengetahui tugas dan wewenang
sesuai dengan yang telah diprogramkan.
Dalam pelaksanaan organisasi proyek, masing-masing unit atau divisi
yang ada harus saling mendukung dan dapat bekerja sama secara baik agar
diperoleh hasil kerja yang optimal.
I.2 Rumusan Masalah
Sehubungan dengan adanya kendala maupun tantangan sebagaimana
tertulis pada Latar Belakang Masalah, maka Tugas Akhir ini akan mencoba untuk
memecahkan masalah yang dapat dirumuskan sebagai berikut:
Bagaimana cara menyediakan sebuah solusi teknologi informasi yang handal
dan dapat dikembangkan secara berkesinambungan untuk keperluan
penanganan data proyek, data sub proyek, data pesan antar anggota, data
artikel, menjadwalkan proyek dan sub proyeknya, dan memonitor
perkembangan dari pekerjaan yang dikerjakan pada suatu proyek?
Apa saja faktor dan aspek yang harus dipertimbangkan dalam membangun
sebuah solusi, sehingga solusi tersebut akhirnya dapat memenuhi kebutuhan
yang diperlukan?
2
I.3 Asumsi dan Batasan Masalah
Pada penelitian ini, seluruh pembahasan masalah beserta solusinya
mengacu pada beberapa asumsi dan batasan masalah, yaitu:
Untuk keperluan monitoring proyek, disajikan dalam bentuk diagram gantt.
Sub proyek – sub proyek dalam suatu proyek bersifat nondependent.
Pengerjaan suatu sub proyek tidak tergantung pada terselesaikannya sub
proyek yang lain.
Hal-hal yang berhubungan dengan keamanan sistem dari gangguan pihak
dalam atau pihak luar sama sekali bukan pokok bahasan dalam tugas akhir ini.
Untuk masalah penanganan data yang berkaitan dengan perencanaan alokasi
dana dan detil spesifikasi sub proyek(misal: diagram-diagram UML dalam
sebuah proyek pengembangan perangkat lunak) tidak ditangani dalam aplikasi
ini.
Sebagai tambahan, seluruh pengguna solusi ini diasumsikan sudah terbiasa
dengan pengoperasian perangkat lunak komputer yang telah menggunakan
GUI (Graphical User Interface).
3
I.4 Tujuan Penelitian
Tujuan utama dari Tugas Akhir ini adalah membangun aplikasi diagram
gantt untuk mendukung proses penjadwalan dan monitoring perkembangan
pengerjaan proyek pada sistem informasi manajemen proyek berbasis web.
I.5 Metode Penelitian
Pada saat pengerjaan Tugas Akhir ini, penulis menerapkan serangkaian
metode penelitian yang dilaksanakan sesuai dengan kebutuhan pengembangan
solusi, yaitu:
I.5.1 Metode Pengumpulan Data
Metode ini dilaksanakan oleh penulis untuk mengetahui
secara langsung kebutuhan yang ada, kendala dan tantangan apa
saja yang dihadapi, dan seberapa jauh kesiapan infrastruktur
maupun sumber daya manusia yang tersedia untuk penerapan
solusi teknologi informasi secara umum. Adapun metode
pengumpulan data yang dilaksanakan adalah:
a) Observasi
Pada pengerjaan Tugas Akhir ini, observasi dilaksanakan oleh
penulis dengan mengadakan kunjungan ke sebuah software
house di magelang yaitu Odyssey Digital. Selama mengadakan
survey penulis tidak terlalu mendapatkan kesulitan untuk
mendapatkan dan mengakses informasi dari institusi tersebut
b) Wawancara/Interview
4
Metode wawancara dilaksanakan dengan melakukan tanya
jawab secara langsung dengan pegawai atau staff Komunitas
Pengembang Odyssey Digital. Dengan menggunakan metode
ini dapat diketahui kegiatan-kegiatan khusus yang tidak selalu
terjadi dan lebih banyak informasi lebih dari orang yang
terlibat langsung.
c) Studi Literatur
Studi literatur dilaksanakan dengan melakukan studi
literatur/kepustakaan dengan melalui buku-buku referensi dan
media elektronik yang relevan dengan materi pembahasan.
I.5.2 Metode Pengembangan Sistem
Sistem ini dikembangkan dengan menggunakan metodologi
pengembangan sistem SDLC (System Development Life Cycle)
(Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Richardo
Torlone,”Database Systems concepts, language & architectures”,
NY:The McGraw-Hill Company,2000) yang terbagi dalam
beberapa fase, yaitu:
a) Fase Studi kelayakan (Feasibility study)
Menetapkan prioritas dalam pembuatan berbagai macam
komponen data sistem. Memperhitungkan biaya yang
dibutuhkan untuk solusi yang diberikan.
b) Fase Analisa kebutuhan (Collection and analysis of
requirements)
5
Fase ini digunakan untuk mempelajari fungsi – fungsi yang
dimiliki sistem. Dapat dilakukan dengan teknik wawancara
dengan user yang akan menggunakan aplikasi tersebut.
Menetapkan kebutuhan software dan hardware untuk
mendukung sistem informasi tersebut.
c) Fase Rancangan (Design)
Merupakan langkah multiproses yang memusatkan kerja pada
perancangan sistem secara umum misalnya perancangan basis data,
user interface dan report/output. Pada tahap ini, beberapa aktivitas
yang dilaksanakan adalah:
Perancangan Use Case Diagram untuk merekam
persyaratan fungsional sistem.
Perancangan Activity Diagram untuk menggambarkan
logika prosedural, proses bisnis, dan jalur kerja.
Perancangan basis data dan pengujian relasi antar tabel
pada basis data.
Perancangan input dan output pada aplikasi.
Fase implementasi (Implementation).
Setelah dianalisis, dirancang secara rinci dan pemilihan
teknologi maka pada intinya tahap ini merupakan tahap untuk
meletakkan sistem supaya siap untuk dioperasikan. Pada tahap
ini juga termasuk kegiatan peng-kodean program.
d) Fase pengujian (Validation and Testing)
6
Pengujian ini dimaksudkan untuk menguji apakah hasil sudah
sesuai dengan rancangan yang diinginkan dan mencari segala
kesalahan yang mungkin terjadi.
e) Fase operasi (Operation)
Tahap ini hanya digunakan untuk me-maintenance sistem atau
berhubungan dengan perawatan sistem.
I.6 Sistematika Penulisan
Sistematika dalam penulisan laporan Tugas Akhir menggambarkan secara
garis besar hal-hal yang akan dibahas dalam laporan ini.
Berikut sistematika dari laporan ini :
BAB I : PENDAHULUAN
Berisi uraian tentang latar belakang masalah, rumusan masalah, batasan
masalah, tujuan dan manfaat penelitian, metodologi penelitian dan sistematika
penulisan.
BAB II : LANDASAN TEORI
Berisi uraian tentang sistem, sistem informasi, sistem informasi basis data
dan sistem informasi berbasis web baik konsep dasar maupun definisi sistem
informasi serta kaitannya dengan sistem informasi berbasis web yang akan
diterapkan pada sistem yang akan dibangun.
Bab ini juga menjelaskan tentang arsitektur client/server, arsitektur
aplikasi berbasis web, perancangan sistem informasi berbasis web sehubungan
dengan perancangan aplikasi berbasis web serta konsep dasar PHP sebagai tools
yang digunakan untuk tampilan aplikasinya.
7
BAB III : ANALISA DAN PERANCANGAN SISTEM
Berisi uraian tentang tahap-tahap pembuatan sistem yaitu studi kelayakan,
analisa sistem, perancangan sistem yang meliputi perancangan fasilitas yang
disediakan oleh aplikasi berupa rancangan fasilitas data input, rancangan fasilias
data view dan rancangan laporan serta perancangan menu.
BAB IV : IMPLEMENTASI SISTEM
Berisi penjelasan tentang hasil implementasi rancangan sistem dan proses-
prosesnya.
BAB V : ANALISA HASIL
Berisi hasil-hasil yang diperoleh serta membahas kekurangan dan
kelebihan dari sistem yang telah dibuat.
BAB VI : PENUTUP
Berisi kesimpulan dan saran dari sistem yang telah dirancang dan
diimplementasikan.
8
BAB II
DASAR TEORI
II.1 Sistem Informasi
Sistem informasi adalah suatu sistem di dalam suatu organisasi yang
mempertemukan kebutuhan pengolahan transaksi harian, mendukung operasi,
bersifat manajerial dan kegiatan strategi dari suatu organisasi dan menyediakan
pihak luar tertentu dengan laporan-laporan yang diperlukan (K. Leitch dan K.
Roscoe Davis, “Accounting Information Systems”, Prentice-Hall, New Jersey,
1983).
II.2 Database (Basis Data)
Data merupakan sumber yang sangat berguna bagi hampir semua
organisasi. Di dalam aspek kehidupan, database memegang peranan yang sangat
penting sekali terutama dalam aktivitas komputasi. Banyak sekali perangkat lunak
yang memanfaatkan database sebagai jantungnya, baik itu perangkat lunak
berskala kecil maupun besar, berbasis web maupun non web.
Seiring dengan semakin bertambahnya data dalam jumlah yang cukup
banyak, maka masalah pengaturan data secara efektif menjadi suatu hal yang
sangat penting pada pengembangan sistem informasi manajemen. Database dapat
dinyatakan sebagai suatu sistem yang memiliki karakteristik sebagai berikut :
f) Merupakan suatu kumpulan interelasi data yang disimpan bersama
tanpa mengganggu satu sama lain atau membentuk duplikat data.
9
g) Kumpulan data dalam database dapat digunakan oleh sebuah program
aplikasi secara optimal.
h) Penambahan data baru, modifikasi, dan pengambilan data kembali dari
data dapat dilakukan dengan mudah dan terorganisasi.
Database merupakan suatu kumpulan data yang saling berhubungan dan
terorganisasi sedemikian rupa sehingga mudah untuk digunakan kembali.
Database adalah salah satu komponen yang penting sekali dalam sistem
informasi, karena merupakan dasar dalam menyediakan informasi bagi para
pemakainya.
Sistem manajemen database (Database Management System) merupakan
pengelolaan database dengan menggunakan perangkat lunak. Sistem manajemen
database merupakan suatu aplikasi yang sangat komplek. Pengelolaan yang
dilakukan meliputi pembuatan database, akses terhadap database, serta
penyimpanan data di dalam database. Hal penting yang tidak boleh diabaikan
dalam perancangan database adalah mengenai arsitektur, terutama arsitektur yang
akan digunakan nantinya.
Istilah arsitektur mengacu pada desain sebuah aplikasi, atau di mana
komponen yang membentuk suatu sistem ditempatkan dan bagaimana mereka
berkomunikasi. Secara umum arsitektur sistem database dapat digolongkan
menjadi 3 bagian yaitu :
Single user
Sistem multiuser klasik
Sistem Client / server
10
II.2.1 Single User
Sistem single user merupakan sistem yang cukup tradisional, dan paling
sederhana di dalam pengaksesan suatu database. Dalam sistem ini, program
aplikasi dan file – file data diletakkan pada komputer yang sama. Jadi dengan
sistem ini, hanya akan terdapat satu user yang mengakses data dalam waktu yang
sama, hal ini karena komputer tersebut tidak dihubungkan dengan komputer lain
(stand-alone).
Meskipun merupakan sistem yang sederhana, pada model single user ini
pemrosesan data tetap dapat dilakukan dengan baik. Model sistem single user ini
dapat dilihat pada gambar II.1
Program Aplikasi
I/O
file - file database
Gambar II.1 Model sistem single user
II.2.2 Multi User Klasik
Sistem multi user klasik merupakan tahap pengembangan dari sistem
single user. Perbedaan utama sistem ini dengan sistem single user adalah pada
sistem ini file – file data (data source) diletakkan pada komputer lain yang biasa
disebut dengan komputer server.
11
Pemisahan aplikasi dengan file – file data bertujuan agar database dapat
diakses secara bersama dengan workstation lainnya. Model sistem ini sangat
cocok untuk dikembangkan pada organisasi kecil dengan jumlah workstation yang
tidak begitu banyak. Model multi user klasik dapat dilihat pada gambar II.2
Workstation
File-file databaseProgram aplikasi
Gambar II.2 Model sistem Multiuser klasik
II.2.3 Client/Server
Sistem client/server merupakan sebuah langkah maju karena
menggunakan beban pemrosesan dari komputer sentral ke komputer client.
Artinya semakin banyak user bertambah pada aplikasi client/server, kinerja server
file tidak akan menurun dengan cepat. Sistem client/server merupakan sistem
yang cukup baik untuk digunakan, sistem ini mampu menghasilkan aplikasi
database yang tangguh dalam hal sekuritas, serta mampu mengurangi kepadatan
lalu lintas jaringan. Perbedaan antara sistem multi user klasik dengan client/server
adalah bahwa pada sistem multi user klasik komputer yang berfungsi sebagai
penyimpan file – file database (komputer server) dapat juga berfungsi sebagai
12
komputer user. Sedangkan pada sistem client/server, komputer server berfungsi
sebagai penyimpan file – file database dan pusat pemrosesan data.
Client merupakan sebuah komputer yang berisi aplikasi, dan memiliki
tanggung jawab untuk melakukan interaksi dengan user. Jadi apapun yang
dikehendaki para pemakai (user) akan ditangani terlebih dahulu oleh client.
Sebagai contoh adalah, client menerima masukan dari user yang dilakukan
melalui keyboard. Server sendiri merupakan sebuah komputer yang berisi DBMS
(Database Management System) serta database, dan menjadi pusat seluruh
kegiatan untuk menangani permintaan – permintaan yang dilakukan oleh client.
Kunci untuk memahami sistem ini adalah, aplikasi client membuat suatu
permintaan (make a request) kemudian server merespon permintaan (server
responding). Dengan adanya dua aplikasi yang terpisah ini, sebelum aplikasi
client dapat terhubung ke server, maka aplikasi server harus dijalankan terlebih
dahulu. Proses query pada sistem database client/server sangat sederhana, dimana
aplikasi client cukup mengirimkan pernyataan SQL ke server. Perintah yang telah
dikirim kemudian akan direspon oleh server dengan mengirimkan hasil perintah
yang diminta tersebut. Model client/server dapat dilihat pada gambar II.3
Workstation
File-file databaseProgram aplikasi
INTERNET
13
Gambar II.3 Model sistem Client/server
II.3 HTML
HTML merupakan kependekan dari Hyper Text Markup Language.
Dokumen HTML adalah file teks murni yang dapat dibuat dengan editor teks
sembarang. Dokumen ini dikenal sebagai web page. Dokumen HTML merupakan
dokumen yang disajikan dalam browser web surfer. Dokumen ini umumnya berisi
informasi atau interface aplikasi di dalam Internet. Ada dua cara untuk membuat
sebuah web page yaitu dengan HTML editor atau dengan editor teks biasa
(misalnya notepad).
HTML dipakai dalam tugas akhir ini karena HTML dapat digunakan untuk
menyampaikan ide pada web browser. HTML menggunakan apa yang dinamakan
tag. Tag selalu ditulis diantara tanda lebih kecil dan tanda lebih besar (<tag>).
14
II.4 PHP
II.4.1 Sejarah PHP
PHP diciptakan oleh Rasmus Lerdorf, seorang pemrogram C yang
andal. Semula PHP hanya digunakan untuk mencatat jumlah pengunjung
pada homepagenya. Rasmus adalah seorang pendukung opensource.
Karena itulah ia mengeluarkan Personal Home Page Tools versi 1.0 secara
gratis. Setelah mempelajari YACC dan GNU Bison, Rasmus menambah
kemampuan PHP 1.0 dan menerbitkan PHP 2.0.
PHP 2.0 mampu berhubungan dengan database dan dapat
diintegrasikan dengan HTML. Pada tahun 1996, PHP telah digunakan oleh
banyak web site di dunia. Sebuah kelompok pengembang software yang
terdiri dari Rasmus, Zeew Suraski, Andi Gutman, Stig Bakken, Shan
Caraveo dan Jim Winstead bekerja selama tujuh bulan untuk
menyempurnakan PHP 2.0. Akhirnya pada tanggal 6 Juni 1998, PHP 3.0
resmi dikeluarkan. PHP versi terbaru saat ini adalah PHP 4.0 yang terbit
pada tanggal 22 Mei 2000. Berdasar survei dari Netcraft
(http://www.netcraft.com), PHP adalah salah satu bahasa server-side yang
paling populer, yang mana jumlah pemakaian setara dengan mod_perl,
walaupun masih di bawah CGI dan ASP.
II.4.2 Kelebihan – kelebihan PHP
Sebagian besar orang mungkin menganggap bahwa Perl dan CGI
telah cukup membuat situs mereka interaktif. Ketika e-commerce semakin
berkembang, situs yang statis semakin ditinggalkan. Situs harus dinamis
15
dan tetap berjalan selama 24 jam sehari dan tujuh hari dalam seminggu.
Perl dan CGI yang digunakan sebelumnya sudah ketinggalan jaman.
Saatnya digunakan PHP yang lebih baik dari keduanya. PHP memiliki
beberapa kelebihan yang tidak dimiliki oleh bahasa – bahasa sejenisnya.
PHP mudah dibuat dan cepat dijalankan. PHP dapat berjalan dalam
web server yang berbeda dan dalam sistem operasi yang berbeda pula.
PHP dapat berjalan di sistem operasi UNIX, Windows 98 ke atas,
Macintosh.
PHP diterbitkan secara gratis. Source kode PHP dapat di download
tanpa perlu mengeluarkan uang. PHP juga dapat berjalan pada web server
Microsoft Personal Web Server, Apache, IIS, dan sebagainya. PHP juga
termasuk bahasa yang embedded (bisa diletakkan dalam tag HTML).
PHP yang ditulis dengan menggunakan bahasa C dapat
dikembangkan sendiri. Jika programmer telah menguasai bahasa C dapat
dengan mudah menambahkan fungsi – fungsi baru. PHP adalah bahasa
yang sangat populer. Sebagian sintaks PHP mirip dengan sintaks dalam
bahasa C atau Perl. Programmer dapat menggunakan kemampuan PHP
yang di miliki untuk mempelajari kedua bahasa di atas dengan cepat.
Sebaliknya jika programmer telah menguasai bahasa C atau Perl maka
akan cepat menguasai PHP.
16
II.4.3 Alasan menggunakan PHP
PHP merupakan salah satu bahasa pemrograman yang digunakan
untuk membuat aplikasi web yang dinamis dimana hal tersebut akan
sejalan dengan judul yang diambil oleh penulis yang membuat aplikasi
sistem informasi berbasis web. Selain itu PHP juga mampu berinteraksi
dengan hampir semua teknologi web
II.4.4 Cara kerja PHP
Cara kerja PHP dapat dilihat pada gambar II.4 di bawah ini:
w e b s e r v e r
c l i e n t
H T T P r e q u e s tH T T P r e s p o n s e
G e t s p a g e
< H T M L >< ? p h pe c h o ( " H e l l o " ) ;? >< / H T M L >
H e l l oB r o w s e r a k a n m e m b e n t u kh a l a m a n w e b
< H T M L >< B > H e l l o< / B >< / H T M L >
S e r v e rR e s p o n s e
I n t e r p r e t e s P H P C o d e
gambar II.4 Cara Kerja PHP
Saat ada permintaan suatu halaman dari browser klien, server web
akan melakukan 4 langkah:
Membaca permintaan browser.
Mencari halaman html yang diminta pada server.
17
Mengeksekusi perintah PHP sehingga halaman html
termodifikasi
Mengirim halaman html yang diminta ke browser klien melalui
media internet atau intranet. Setelah halaman html diterima
oleh klien, browser klien akan menerjemahkan halaman html
tersebut ke bentuk web.
II.5 Database dengan MySQL
II.5.1 MySQL
MySQL (My Structure Query Language) atau yang biasa dibaca
“mai-se-kuel” adalah sebuah program pembuat database yang bersifat
open source, artinya siapa saja boleh menggunakannya tanpa harus
dicekal. MySQL juga merupakan program pengakses database yang dapat
berjalan pada jaringan sehingga dapat digunakan untuk aplikasi Multi User
(Banyak Pengguna).
Kelebihan dari MySQL adalah menggunakan bahasa Query standar
yang dimiliki SQL(Structure Query Language). SQL adalah suatu bahasa
permintaan yang terstruktur yang telah distandarkan untuk semua program
pengakses database seperti Oracle, Posgres SQL, SQL Server, dan lain-
lain. Sebagai sebuah program penghasil database, MySQL tidak dapat
berjalan sendiri tanpa adanya sebuah aplikasi lain (interface). MySQL
dapat didukung oleh hampir semua program aplikasi baik yang open
source seperti PHP maupun tidak, yang ada pada platform Windows
seperti Visual Basic, Delphi, dan lainnya.
18
MySQL memiliki layar utama yang seperti layar DOS yaitu
memiliki prompt utama yang disebut mysql>. Selain itu MySQL juga
memiliki suatu program dump yang dibuat seperti web dan berjalan di
bawah server database yang disebut dengan PHPMyAdmin.
II.5.2 PhpMyAdmin
PhpMyAdmin adalah suatu program open source yang berbasis
web yang dibuat menggunakan aplikasi PHP. Program ini digunakan
untuk mengakses database MySql. Program ini mempermudah dan
mempersingkat kerja. Dengan kelebihannya, para pengguna awam tidak
harus paham syntax-syntax SQL dalam pembuatan database dan tabel.
1. DDL (Data Definition Language)
Data Definition Language (DDL) adalah suatu bahasa SQL yang
berguna dalam pendefinisian data, yaitu pembuatan dan pemanipulasian
table maupun database. Adapun beberapa bahasa SQL yang termasuk
didalamnya adalah CREATE, ALTER, dan DROP (Buat, Ubah, dan
Hapus).
2. DML (Data Manipulation Language)
DML adalah suatu metode manipulasi data yang berkenaan dengan
isi sebuah table database tertentu. Yang termasuk dalam bahasa
pemanipulasian data adalah INPUT, UPDATE, dan DELETE. Artinya di
sini akan memasukkan data (Input), mengubah data (Update), dan
melakukan penghapusan data (Delete).
19
II.5.3 Aplikasi PHP dan MySQL
Ada beberapa fungsi yang digunakan dalam aplikasi antara PHP
dan MySql. Fungsi-fungsi tersebut sangat erat kaitannya dengan Query
SQL. Di sini fungsi MySQL-lah yang digunakan sebagai penghubung
antarSQL sehingga Query tersebut dapat dijalankan pada server dan dapat
dilihat hasilnya oleh klien. Fungsi MySQL dapat juga dikatakan sebagai
interpreter Query karena setiap menggunakan Query SQL maka query
tersebut harus diletakkan di dalam fungsi tersebut. Dengan kata lain,
Query SQL tidak dapat dijalankan tanpa adanya fungsi MySQL.
II.6 WWW(World Wide Web)
WWW atau dapat juga disebut web adalah sistem informasi komunikasi
hypertext yang popular digunakan pada jaringan komputer internet, di mana
komunikasi datanya menggunakan model client/server.
Penjelasan yang lebih lengkap sebagai berikut :
Web didasarkan pada konsep hypertext, konsep hypertext ini sangat mirip
dengan teks biasa kecuali satu aspek penting, yaitu mempunyai kemampuan
untuk melakukan koneksi (link) di dalam dokumen itu sendiri atau koneksi ke
dokumen yang lain penggunaanya.
Web adalah sistem informasi dan komunikasi. Web tidak hanya tempat untuk
penyebaran informasi tetapi juga memungkinkan untuk komunikasi interaktif
untuk pengumpulan atau mendapat informasi. Dengan teknologi web,
informasi yang tersaji dapat mencapai area yang luas dari berbagai kalangan
baik perorangan maupun perusahaan.
20
Web telah diadopsi oleh perusahaan sebagai sebagian dari strategi teknologi
informasinya karena beberapa alasan, antara lain :
a. akses informasi mudah,
b. setup server lebih mudah,
c. informasi mudah didistribusikan, dan
d. multi platform; informasi dapat disajikan oleh browser web pada
sistem operasi mana saja karena adanya standar dokumen berbagai tipe
data dapat disajikan.
II.6.1 Skema Kerja WWW (World Wide Web)
Skema kerja dari WWW dapat dilihat pada gambar II.5
Skema gambar II.5 diatas dijelaskan sebagai berikut :
21
1. Browser web seperti Explorer atau Navigator berkomunikasi melalui
jaringan (termasuk jaringan Internet) dengan server web,
menggunakan HTTP.
2. Browser akan mengirimkan request kepada server untuk meminta
dokumen tertentu atau layanan lain yang disediakan oleh server.
3. Server memberikan dokumen atau layanan komunikasi jika tersedia
protokol HTTP.
4. Browser menampilkan halaman web dengan membaca instruksi-
instruksi dalam web page. Instruksi yang paling umum untuk
menampilkan disebut dengan tag HTML.
22
II.6.2 Browser Web
Browser web adalah software yang digunakan untuk menampilkan
informasi dari server web. Software ini kini telah dikembangkan dengan
menggunakan user interface-grafis, sehingga dari segi tampilan pemakai
akan lebih tertarik menggunakannya. Kemudian dari segi fasilitas,
kemampuan yang dimiliki browser saat ini dapat dengan mudah
melakukan ‘point dan click’ untuk pindah antar dokumen.
II.6.3 Server Web
Server web adalah komputer yang digunakan untuk menyimpan
dokumen-dokumen web, komputer ini akan melayani permintaan
dokumen web dari kliennya.
II.7 HTTP (Hypertext Transfer Protocol)
HTTP merupakan suatu protokol atau aturan yang dirancang
khusus untuk mendukung implementasi web dan harus diikuti oleh web
browser dalam meminta atau mengambil suatu dokumen dan oleh
webserver dalam menyediakan dokumen yang diminta oleh web browser.
Dengan kata lain saat koneksi dengan HTTP, browser akan melakukan
hubungan dengan mesin yang dituju, mengambil dokumen dan menutup
koneksi. Server HTTP akan memberitahukan tipe dari dokumen/berkas
kepada web browser sehingga web browser dapat menampilkan informasi
yang benar.
23
Protokol ini adalah protokol standar yang digunakan untuk
mengakses HTML sehingga banyak digunakan untuk melayani dokumen
yang terletak pada web.
II.8 Web Database
Web database suatu penyajian informasi berbasis elektronik yang
saat ini sedang menduduki tangga teratas dalam dunia internet. Hal ini
disebabkan karena web database berperan sebagai ujung tombak bagi
aplikasi website modern yang mana database dapat dijalankan pada web
server (Gregorius Agung,2001)
Sebagai contoh adalah database sanggup menyimpan banyak data,
mulai dari produk, biografi manusia, daftar telepon dan berbagai macam
data lainnya. Bila database ini digabungkan dengan website dan
diplubikasikan lewat jaringan internet maka akan sangat powerfull.
Ada dua macam pilihan arsitektur Web-DBMS (Wimmie, 2000),
yaitu :
1. Arsitektur tradisional “Two Tier”, di mana client berlaku sebagai tier 1
yang bertanggung jawab terhadap persentasi data kepada para
pengguna, sedangkan server berlaku sebagai tier 2 yang bertanggung
jawab untuk menyuplai layanan data kepada client.
2. Arsitektur “Three Tier”, di mana client berlaku sebagai tier 1 yang
bertanggung jawab terhadap presentasi data kepada para pengguna,
application server berlaku sebagai tier 2 yang mengerjakan
pemrosesan data dengan logika atau prosedur yang telah ditentukan,
24
sedangkan database server berlaku sebagai tier 3 yang bertanggung
jawab untuk menyuplai layanan data kepada application server.
II.9 Server Side dan Client Side
Teknologi internet yang dipakai sekarang ini secara umum dibedakan
menjadi dua, yaitu server side dan client side. Pada server side adalah teknologi
dimana proses dilakukan di web server sedangkan client hanya menerima
hasilnya dalam bentuk HTML, sebagai contoh teknologi internet berbasis server
side adalah CGI/Perl, ASP, Java Server Pages (JSP) dan lain-lain. Sedangkan
client side adalah teknologi di mana proses dilakukan di web browser (Andy
Kurniawan, 2002;2). Biasanya client side digunakan untuk hal-hal yang
membutuhkan banyak interaksi user dan menggunakan jenis informasi yang pasti
dan seragam.
Server side digunakan untuk memproses segala sesuatu yang berhubungan
dengan server, seperti manipulasi data pada database. Client side digunakan
untuk mengadakan interaksi dengan user yang frekuensinya tinggi, namun data
yang diperlukan relative sedikit atau telah tersedia sebelumnya. Tidak dianjurkan
untuk membangun cliet side pada aplikasi web yang membutuhkan data yang
banyak dan selalu berubah-ubah, atau menggunakannya untuk keperluan verifasi
user dan password.
II.10 Intranet dan Aplikasi Web
25
Aplikasi web tidak saja digunakan di internet namun juga dapat digunakan
untuk keperluaan intra-organisasi. Jaringan aplikasi web yang terpasang dalam
intra-organisasi ini dikenal dengan intranet (Andy Kurniawan, 2003:3).
Sebelum teknologi web banyak digunakan, dulu telah muncul teknologi
jaringan multi user dan client/server. Teknologi multi user terdapat satu atau lebih
server yang bertugas melayani banyak user. Proses kerja multi user seluruh beban
kerja dilakukan oleh server. Kelemahan pada teknologi ini adalah pada masalah
performa. Server bekerja dengan beban kerja yang tinggi, apalagi untuk user yang
jumlahnya sangat banyak. Sedangkan keuntungan adalah mudah instalasi dan
pemeliharaan, baik dari segi aplikasi maupun data karena terletak di server saja.
Berikutnya adalah teknologi client / server. Teknologi ini berkembang
karena user yang terlalu banyak dianggap sangat membebani server pada
teknologi multi user. Pada client / server, server hanya menangani database saja
sedang aplikasi terpasang pada masing-masing user. Dengan sistem client/server,
beban kerja dibagi dengan lebih baik dan meningkatkan performa.
Kelemahan dari sistem ini muncul saat maintain aplikasi dan biaya yang
cukup tinggi untuk me-maintain user terminal. Kelemahan yang lain adalah
mengenai manajemen resource untuk server. Saat user membuat koneksi ke
server, server akan memblok satu bagian resource di server khusus untuk user.
Koneksi ini akan terus terbentuk selama user belum keluar (logout) dari server.
Teknologi web mencoba menggabungkan kedua kekuatan teknologi
tersebut. Teknologi web mempunyai kapasitas yang tidak dimiliki teknologi
sebelumnya. Teknologi web tidak terangkum pada satu lingkungan lokasi kerja
tertentu, namun informasi dapat diakses dari tempat mana saja.
26
Teknologi web dibangun pada teknologi three-tier. Tier yang pertama
adalah web database server. Database server bertugas mengatur lalu lintas pada
database, menyediakan metode untuk meminta data, sorting, pengindeksian dan
sebagainya.
Tier yang kedua adalah business object atau disebut application server.
Aplikasi server bertugas mengatur segala sesuatu yang berhubungan dengan
aplikasi, seperti manajemen resource di server, maintain setiap session yang
terbentuk dan lain-lain. Koneksi yang terbentuk hanya saat user mengirimkan data
ke server dan pada saat server mengirimkan data ke user.
Tier yang ketiga adalah presentation layer atau disebut dengan client.
Tugas utamanya adalah sebagai user terminal, yang bersifat aktif dan mampu
mengolah informasi yang diperolehnya. User hanya memerlukan web browser
seperti internet explorer, netscape navigator untuk menjalankan aplikasi web.
Gambar II.6 Arsitektur Three-tiered
27
II.11 Web Dinamis PHP pada Three-Tier Architecture
Gambar II.7 Web Dinamis PHP pada Arsitektur Three-tier
1. Persistent Data Storage, merupakan tier yang pertama, digunakan
untuk menyediakan data-data dan juga berfungsi sebagai tempat
menyimpan data.
2. Database abstraction layer, merupakan class php ataupun fungsi yang
digunakan untuk mengakses database.
3. Bussinees Logic, merupakan tier yang kedua, digunakan untuk
menyimpan script-script php yang telah dibuat. Yang nantinya
digunakan untuk aplikasi web.
4. Presentation merupakan tier yang ketiga, pada bagian ini script-script
php telah digenerate menjadi file html, dan pada bagian ini
28
memungkinkan para user untuk melihat hasil dari business logic yang
telah mengakses data dari tempat penyimpanan.
5. Browser merupakan perangkat lunak yang digunakan untuk
menampilkan dokumen html.
II.12 Web Scripting
Untuk membuat sebuah website yang dinamis dapat menggunakan teknik
web scripting. Web scripting adalah pemakaian kode program (sebuah script)
sehingga sebuah halaman bisa menjadi lebih interaktif dan tidak lagi statis seperti
halaman web yang ditulis dengan HTML murni. Biasanya bahasa untuk scripting
adalah bahasa pemrograman yang tidak harus di-compile dulu, tetapi bisa
dianalisis dan dijalankan langsung (diinterpret).
Web scripting ini dibagi dalam 2 macam, yaitu :
1. Client Side Scripting
Client Side Script adalah tipe scripting yang menampilkan web
dinamis melalui sisi client (browser), atau script yang digunakan dan
dijalankan di komputer pengguna. Contoh teknologi untuk Client Side
Scripting adalah Javascript, Java Applets dan ActiveX.
2. Server Side Scripting
Server Side Scripting adalah tipe scripting yang dijalankan pada web
sendiri, kemudian hasil dari perhitungan script itu akan dikirim ke
komputer pengguna. Contoh untuk teknologi Server Side Scripting
adalah Common Gateway Interface (CGI), ASP, PHP dan JSP/Java
Servlets.
29
II.13 SDLC (System Development Life Cycle)
Pengembangan sistem informasi yang berbasis komputer dapat merupakan
tugas kompleks yang membutuhkan banyak sumber daya dan dapat memakan
waktu berbulan-bulan bahkan bertahun-tahun untuk menyelesaikannya. Proses
pengembangan sistem melewati beberapa tahapan dari mulai sistem itu
direncanakan sampai dengan sistem itu diterapkan, dioperasikan dan dipelihara.
Bila operasi sistem yang sudah dikembangkan masih timbul kembali
permasalahan-permasalahan yang kritis serta tidak dapat diatasi dalam tahap
pemeliharaan sistem, maka perlu dikembangkan kembali suatu sistem untuk
mengatasinya dan proses ini kembali ke tahap pertama. Daur atau siklus hidup
dari pengembangan sistem merupakan suatu bentuk yang digunakan untuk
menggambarkan tahapan utama dan langkah – langkah di dalam tahapan tersebut
dalam proses pengembangannya (Jogiyanto HM., MBA.,Akt., PhD., “Analisis &
Desain Sistem Informasi Pendekatan Terstruktur Teori dan Praktek Aplikasi
Bisnis”, Yogyakarta: Andi, 2005).
II.14 Virtual Office
Virtual Office adalah aplikasi yang menyediakan berbagai macam
informasi dalam lingkup lingkungan kantor. Hal-hal yang berkaitan erat dengan
virtual office adalah perencanaan kerja, proses bisnis, kolaborasi, komunikasi
jarak jauh, home office, home workers, infrastruktur, intranet, middleware, mobile
workers, mobile office, nomadicity, pekerja jarak jauh, dan virtual team.
30
BAB III
ANALISA DAN PERANCANGAN SISTEM
III.1 Analisa Sistem
Analisa sistem dapat didefinisikan sebagai pengurai dari suatu sistem
informasi yang utuh ke dalam bagian-bagian komponennya yang bertujuan agar
dapat mengenali serta mengevaluasi permasalahan-permasalahan dan hambatan-
hambatan yang terjadi, serta memenuhi kebutuhan yang diharapkan sehingga
dapat diusulkan perbaikannya. Hambatan-hambatan yang ada pada Odyssey
Digital pada saat ini adalah :
Tidak tersedianya sistem informasi yang handal untuk keperluan media
berinteraksi bagi para personel yang terlibat pada proyek tersebut, media
untuk mengorganisir dan mengkoordinir sumber daya, dan media untuk
mengevaluasi perkembangan dari pekerjaan.
Memiliki banyak pegawai tidak tetap dan tersebar di berbagai daerah.
Sangat sulit sekali mengorganisasikan sebuah tim karena para anggota tim
terpisah secara geografis.
Hal ini mengakibatkan proses pengerjaan suatu proyek berjalan tidak lancar.
III.2 Deskripsi Sistem
Sistem informasi manajemen proyek ini bertujuan untuk memudahkan
pengguna dalam hal berkomunikasi dan berkoordinasi. Sistem ini memfokuskan
pada penyediaan virtual office bagi seluruh anggota tim, sehingga pelaksanaan
pekerjaan proyek secara keseluruhan dapat berjalan terarah dan terkendali dalam
32
memenuhi waktu kerja, pembiayaan, fasilitas yang tersedia, serta sesuai dengan
spesifikasi teknis yang ditetapkan.
III.3 Perancangan Sistem
Perancangan sistem dapat didefinisikan sebagai pembuatan sketsa atau
kerangka dalam membentuk kesatuan sistem yang berfungsi atau dengan kata lain
penggabungan dari elemen-elemen yang terpisah ke dalam satu kesatuan yang
utuh dan berguna.
33
III.3.1 Use Case Diagram
Koordinator
Admin
Anggota
Input data proyek
Mendelegasikan pekerjaan
Monitoring Proyek
Melihat ToDo List
Mengupdate perkembangan pekerjaan
Dokumentasi Proyek
<<include>>
Konf. User
Konf. Grup User
Input Pengumuma
Konf. Polling
Input Artikel
Konf. Artikel
Input Artikel
34
III.3.2 Activity Diagram
Input data proyek
Mendelegasikan Tugas-tugas
Mengirimkan spesifikasi, UML, Catatan, ToDo List
Mengevaluasi hasil
Mengupdate Perkembangan Proyek
Menerima tugas
Meminta spesifikasi
Mengerjakan tugas
Mengirim berkas hasil kerja
[else]
[else]
Job Offer
Cek dan koreksi
35
III.3.3 Relasi Tabel
36
bo_addressbook
add_id *add_nameadd_addressadd_emailadd_officeadd_faxadd_mobileadd_homeadd_statusadd_orc **
bo_articles
art_idart_titleart_keywordart_contentart_creator **art_createdart_status
bo_individual_act
in_id *in_actin_startdatein_enddatein_finishedin_progressin_orcin_lastupdate
bo_message
msg_id *msg_content
bo_poll_answers
pa_id *pa_question **pa_answer
bo_poll_questions
pq_id *pq_questionpq_creator **pq_createdpq_status
bo_poll_vote
pv_id *pv_orc **pv_vote **
bo_registered_access
access_id *access_orc **access_app **access_status
bo_registered_access_menu
am_id *am_menu **am_orc **am_status
bo_registered_application
app_id *app_nameapp_prefixapp_labelapp_iconapp_priorityapp_status
bo_registered_menu
menu_id *menu_app **menu_action_filemenu_labelmenu_default
bo_registered_orc
orc_id *orc_usernameorc_passwordorc_firstnameorc_lastnameorc_lastloginorc_group **orc_emailorc_status
bo_registered_orc_group
group_id *group_name
bo_user_messages
um_id *um_titleum_contentum_to **um_from **um_inputum_read
1 ~
1
~
1~
1
1
~
~
1 ~
~
1 1
~
~
1
1
~
~
11
~
1
~
~
1
37
III.3.4 Perancangan Basis Data
Tabel bo_addressbook
Nama Field Tipe Data Panjang Keteranganadd_id Smallint 5 Primary Keyadd_name Varchar 64 Nama
add_address Varchar 64 Alamatadd_email Varchar 64 Alamat Emailadd_office Varchar 64 Nomor Kantoradd_fax Varchar 64 Nomor Fax
add_mobile Varchar 64 Nomor HPadd_home Varchar 64 Nomor Rumahadd_status Tinyint 3 Status dataadd_orc Smallint 5 ID user
Tabel bo_articles
Nama Field Tipe Data Panjang Keterangan
bo_project_element
el_id *el_project **el_startdateel_enddateel_finishedel_progressel_orc **el_acceptedel_lastupdate
bo_project
p_id *p_titlep_startdatep_enddatep_finishedp_lastupdatep_orc **
bo_documentation
doc_datetime (*)doc_element (*)**doc_notes
bo_registered_orc
orc_id *orc_usernameorc_passwordorc_firstnameorc_lastnameorc_lastloginorc_group **orc_emailorc_status
1
1
1
1
bo_registered_orc_group
group_id *group_name
~
~
~
~
~
1
38
art_id Smallint 5 Primary Keyart_title Varchar 255 Judulart_keyword Varchar 255 Kata kunciart_content Text Isiart_creator Smallint 5 ID Userart_created Datetime Waktu dibuatart_status tinyint 3 Status publikasi
Tabel bo_documentation
Nama Field Tipe Data Panjang Keterangandoc_datetime datetime Primary Keydoc_element int 10 Primary Keydoc_notes text Isi dokumentasi
39
Tabel bo_individual_act
Nama Field Tipe Data Panjang Keteranganin_id int 10 Primary Keyin_act text Kegiatanin_startdate date Tgl mulaiin_enddate date Tgl akhirin_finished date Tgl selesaiin_progress tinyint 3 Prosen progressin_orc smallint 5 ID Userin_lastupdate datetime Terakhir update
Tabel bo_message
Nama Field Tipe Data Panjang Keteranganmsg_id tinyint 1 Primary Keymsg_content text Isi pengumuman
Tabel bo_poll_answers
Nama Field Tipe Date Panjang Keteranganpa_id smallint 5 Primary Keypa_question smallint 5 ID pertanyaanpa_answer text Isi jawaban
40
Tabel bo_poll_questions
Nama Field Tipe Date Panjang Keteranganpq_id smallint 5 Primary Keypq_question text Isi pertanyaanpq_creator smallint 5 ID Userpq_created datetime Waktu dibuatpq_status tinyint 1 Status ditampilkan
Tabel bo_poll_vote
Nama Field Tipe Date Panjang Keteranganpv_id int 10 Primary Keypv_orc smallint 5 ID Userpv_vote smallint 5 ID jawaban
41
Tabel bo_project
Nama Field Tipe Date Panjang Keterangan
p_id varchar 10 Primary Key
p_title varchar 64 Nama proyek
p_startdate date Tgl mulai
p_enddate date Tgl akhir
p_finished date Tgl selesai
p_lastupdate datetime Terakhir diupdate
p_orc smallint 5 ID User
Tabel bo_project_element
Nama Field Tipe Date Panjang Keteranganel_id int 10 Primary Keyel_project varchar 10 ID proyekel_startdate date Tgl mulaiel_enddate date Tgl akhirel_finished date Tgl selesaiel_progress tinyint 3 Progressel_orc smallint 5 ID Userel_accepted tinyint 1 Status diterimael_lastupdate datetime Terakhir diupdate
42
Tabel bo_registered_access
Nama Field Tipe Date Panjang Keteranganaccess_id smallint 5 Primary Keyaccess_orc smallint 5 ID Useraccess_app tinyint 3 ID Aplikasiaccess_status tinyint 1 Status data
Tabel bo_registered_access_menu
Nama Field Tipe Date Panjang Keteranganam_id smallint 5 Primary Keyam_menu smallint 5 ID menuam_orc smallint 5 ID Useram_status tinyint 1 Status data
43
Tabel bo_registered_application
Nama Field Tipe Date Panjang Keteranganapp_id tinyint 3 Primary Keyapp_name varchar 64 Nama aplikasiapp_prefix varchar 64 Prefix aplikasiapp_label varchar 64 Labelapp_icon varchar 64 Iconapp_priority tinyint 3 Urutan tampilapp_status tinyint 1 Status data
Tabel bo_registered_menu
Nama Field Tipe Date Panjang Keteranganmenu_id smallint 5 Primary Keymenu_app tinyint 3 ID aplikasimenu_action_file varchar 255 File tujuanmenu_label varchar 32 Label
menu_default tinyint 1 Status default
44
Tabel bo_registered_orc
Nama Field Tipe Date Panjang Keteranganorc_id smallint 5 Primary Keyorc_username varchar 32 Usernameorc_password varchar 32 Passwordorc_firstname varchar 64 Nama awalorc_lastname varchar 64 Nama akhirorc_lastlogin datetime Waktu loginorc_group tinyint 1 ID grup userorc_email varchar 100 Alamat emailorc_status tinyint 1 Status aktif
Tabel bo_registered_orc_group
Nama Field Tipe Date Panjang Keterangangroup_id tinyint 3 Primary Keygroup_name varchar 64 Nama grup
45
Tabel bo_user_messages
Nama Field Tipe Date Panjang Keteranganum_id int 10 Primary Keyum_title varchar 64 Judul pesanum_content text Isi pesanum_to smallint 5 ID Userum_from smallint 5 ID Userum_input datetime Waktu dibuatum_read datetime Waktu dibaca
46
III.3.5 Perancangan Antarmuka
Aplikasi ini secara garis besar terbagi menjadi empat bagian(frame) yaitu
header, header menu, footer dan contents. Antarmuka yang akan ditampilkan pada
bagian contents yaitu Login, Home, Addressbook, Daftar Kegiatan, Pesan, Project
Manager, Admin, Polls, Artikel dan Informasi Sistem. Berikut ini akan dibahas
perancangan antarmuka dari masing-masing bagian tersebut.
Halaman Login
Muncul pertama kali pada saat aplikasi diaktifkan. Halaman Login memiliki
item username dan password ini dibuat agar aplikasi ini hanya dapat diakses
oleh para pengguna sistem yang sudah terdaftar dalam basis data saja.
Gambar III.1 Form Login
Header
Bagian ini hanya berisi logo, tombol password dan tombol logout. Logo dari
aplikasi ini adalah gambar cumi-cumi biru dan tulisan nama dari aplikasi ini
yaitu “blueOctopus”. Tombol password digunakan untuk mengganti password
sedangkan tombol logout digunakan untuk keluar dari sistem dan kembali ke
halaman login.
47
LOGO
Username
Password
Login >>
Logo Password Logout
Gambar III.2 Header
Header Menu
Bagian ini akan berisi link Home dan menu-menu sesuai dengan hak akses
yang diberikan oleh administrator sistem.
Gambar III.3 Header Menu
Footer
Bagian ini terletak di bagian bawah aplikasi. Pada bagian ini ditampilkan
nama belakang, nama depan, username, dan waktu login dari user. Selain
itu juga akan ditampilkan tanggal dan jam.
Gambar III.4 Footer
Home
Halaman Home berisi data individu pengguna sistem yang login, jumlah pesan
yang belum dibaca di kotak masuk, pengumuman halaman depan, semua
daftar pekerjaan yang ditawarkan, daftar semua pekerjaan yang diterima dan
belum selesai dikerjakan. Di halaman ini pula tempat para pengguna sistem
menerima atau menolak pekerjaan-pekerjaan yang ditawarkan.
48
Data individu Pengguna sistem yang Login.
Jumlah pesan belum dibaca dalam kotak masuk.
Pengumuman halaman depan.
Daftar pekerjaan yang ditawarkan.[terima] [tolak]
Daftar pekerjaan yang diterima dan belum selesai.
Home Menu 1 Menu 2 Menu 3 Menu 4 Menu 5 Menu 6 Menu 7 Menu 8
Nama belakang, nama depan | username, waktu login(tgl+jam) | tgl+jam sekarang
Gambar III.5 Home
Addressbook
Gambar dibawah ini adalah fasilitas yang digunakan untuk menampilkan
daftar semua contact person yang diinput oleh user yang bersifat private
dan public. Private maksudnya adalah semua data yang khusus untuk user
yang memasukkan dan Public adalah semua data yang bersifat umum.
Gambar dibawahnya adalah form untuk memasukkan data-data contact
person.
Gambar III.6 Daftar Addressbook
49
Tambah AddressbookNamaAlamatE-mailNo. Telepon KantorNo. FaxNo. Telepon GenggamNo. Telepon RumahStatus?Pruvat/Publik
Navigasi User
Penjelasan halaman ini
Simpan
NoNamaAlamatE-mailStatus
Navigasi User
Penjelasan halaman ini
Huruf awal A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Semua
Gambar III.7 Form input Addressbook
Daftar Kegiatan
Gambar III.8 dibawah ini menampilkan semua kegiatan yang berhubungan
dengan proyek yang sudah diterima dan belum selesai dikerjakan pada
suatu tanggal tertentu. Gambar III.9 berisi form input kegiatan pribadi dan
semua daftar kegiatan pribadi yang belum selesai dikerjakan.
Gambar III.8 Daftar kegiatan proyek
50
ProyekBagian Tgl mulaiTgl akhirLamaProgressPerintah
Navigasi User
Penjelasan halaman ini
Navigasi User
Penjelasan halaman ini
Form input kegiatan pribadi Item:
KegiatanTgl mulai Tgl akhir
Daftar kegiatan pribadi
Gambar III.9 Form input kegiatan probadi dan daftarnya
Pesan
Berikut ini melupakan antarmuka pada yang ada dalam menu Pesan.
Gambar yang pertama adalah antarmuka pada bagian kotak masuk. Disini
akan ditampilkan semua pesan yang sudah masuk. Gambar dibawahnya
adalah Form yang digunakan untuk menulis pesan. Gambar yang terakhir
adalah antarmuka pada saat menampilkan salah satu pesan yang masuk.
Gambar III.10 Kotak Masuk
51
Navigasi User
Penjelasan halaman ini
Pesan 1 Pengirim, judul, tanggal dibuat, dan isi pesan
Status baca
Pesan 2 dst Pengirim, judul, tanggal dibuat, dan isi pesan
Status baca
Navigasi User
Penjelasan halaman ini
Form input pesan. Item:Penerimajudulisi
Kirim Pesan
Gambar III.11 Tulis pesan
Gambar III.12 Baca Pesan
Project Manager
Inilah menu inti dari aplikasi ini. Antarmuka halaman utama akan
menampilkan semua proyek yang belum selesai dikerjakan dan informasi
pengguna system beserta statusnya. Antarmuka hasil pencarian proyek akan
menampilkan hasil pencarian proyek berdasarkan suatu katakunci tertentu.
Untuk memasukkan data proyek baru beserta bagian-bagian proyek,
digunakan form seperti gambar-gambar dibawah ini(gambar III.15 untuk data
proyek dan III.17 untuk data bagian proyek). Data lengkap sebuah
proyek(termasuk Gantt Chart) pada gambar III.16.
52
Navigasi User
Penjelasan halaman ini
Informasi proyek yang belum selesai dikerjakan
Informasi pengguna system beserta statusnya
Pengirim dan tanggal dibuat
Balas Pesan Tutup Halaman Ini
Judul dan isi pesan
Gambar III.13 Halaman utama
Gambar III.14 Hasil pencarian proyek
Gambar III.15 Form input proyek baru
Gambar III.16 Lihat detil proyek
53
KodeNamaTgl mulaiTgl akhirLamaPICSelesai
Navigasi User
Penjelasan halaman ini
Navigasi User
Penjelasan halaman ini
Form input proyek baru.Item:Nama proyekTgl mulaiTgl akhir
Navigasi User
Penjelasan halaman ini
Informasi proyek
Daftar elemen proyek yang sudah disimpan dalam basis data
Gantt Chart Proyek
Link kembali ke halaman sebelumnya
Navigasi User
Penjelasan halaman ini
Informasi proyek
Form input elemen proyekItem:
Nama elemenPIC elemenTgl mulaiTgl akhir
Informasi semua pengguna sistem dan statusnya
Daftar elemen proyek yang sudah disimpan dalam basis data
Gambar III.17 Form input bagian proyek
Admin
Gambar dibawah ini adalah antarmuka yang terdapat dalam menu Admin.
Gambar III.18 adalah antarmuka halaman depan yang didalamnya terdapat
sebuah form yang digunakan untuk memperbaharui pengumuman.
Pengumuman ini akan ditampilkan pada halaman home setiap pengguna
sistem. Gambar III.19 adalah antarmuka untuk mengisi data pengguna system
baru. Gambar berikutnya, gambar III.20, adalah antarmuka pada menu admin
untuk mengkonfigurasi grup pengguna sistem.
Gambar III.18 Halaman depan
54
PengumumanPengumuman sekarangPengumuman baru:
Navigasi User
Penjelasan halaman ini
Perbarui pengumuman
Navigasi User
Penjelasan halaman ini
Simpan data
Daftar Semua Pengguna Sistem
Form Input Pengguna Sistem Baru.Item:Data diriHak akses aplikasi
Gambar III.19 Form input pengguna sistem baru
Gambar III.20 Konfigurasi grup pengguna sistem
55
Navigasi User
Penjelasan halaman ini
Simpan data
Daftar Grup Pengguna Sistem
Form Input Grup Pengguna Sistem.Item:Nama Grup
Polls
Berikut ini merupakan rancangan antarmuka menu Polls. Gambar yang
pertama merupakan antarmuka yang menampilkan semua poll berikut hasilnya
untuk semua poll yang dipublikasikan. Gambar berikutnya adalah rancangan
antarmuka untuk mengkonfigurasi poll.
Gambar III.21 Polls dan hasilnya
Gambar III.22 Setting atau konfigurasi poll
56
Navigasi User
Penjelasan halaman ini
Pertanyaan poll 2.Jawaban 1 (prosentase) (pemilih)Jawaban 2 (prosentase) (pemilih)Dst..
Navigasi User
Penjelasan halaman ini
Pertanyaan poll 2. [Tambah Jawaban] [Edit] [Hapus]Jawaban 1 [ubah] [hapus]Jawaban 2 [ubah] [hapus]Dst..Status poll [level 1] [level 2] [level 3]
Artikel
Berikut ini merupakan rancangan antarmuka pada menu Artikel. Gambar
III.23 adalah antarmuka pada halaman utama(hanya untuk 30 artikel
terbaru yang sudah dipublikasikan) dan pencarian artikel(berdasar
katakunci tertentu). Gambar III.24 adalah antarmuka untuk memasukkan
artikel baru. Gambar III.25 adalah antarmuka untuk meng-administrasi
artikel-artikel yang belum dipublikasikan.
Gambar III.23 Halaman utama dan hasil pencarian artikel
Gambar III.24 Form input artikel baru
57
Navigasi User
Penjelasan halaman ini
Pengarang ArtikelTanggal input artikelIsi artikel
Pengarang ArtikelTanggal input artikelIsi artikel
Navigasi User
Penjelasan halaman ini
Form input artikel baru.Item:Judul artikelKata kunci pencarianIsi artikel
Simpan Data
Gambar III.25 Administrasi artikel
Informasi Sistem
Berikut ini merupakan rancangan antarmuka menu Informasi Sistem yang
berisi beberapa informasi tentang plaform yang dipakai.
Gambar III.26 Informasi Sistem
58
Navigasi User
Penjelasan halaman ini
Informasi Utama
Informasi Perangkat keras
Status Penggunaan Jaringan
Status Penggunaan Memori
Status Penggunaan Media Penyimpanan dan Filesystem
Navigasi User
Penjelasan halaman ini
Pengarang ArtikelTanggal input artikelPerintah : [Publikasikan] [Ubah] [Hapus]Isi artikel
BAB IV
IMPLEMENTASI PROGRAM
IV.1 Struktur Menu Program
Struktur menu menggambarkan menu-menu dan proses dari
program yang dapat dilakukan oleh user sesuai dengan hak akses masing-
masing.
Gambar IV.1 Struktur menu program
58
Pengguna Sistem
Home
Addressbook
Daftar Kegiatan
Pesan
Project Manager
Admin
Polls
Artikel
Lihat Addressbook
Tambah Data
Kegiatan Proyek
Kegiatan PribadiTambah Data
Lihat DataBaca Pesan
Tulis Pesan
Edit Pengumuman
Input Data User
Konfigurasi Grup User
Lihat Data Proyek
Input Proyek Baru
Pencarian Data Proyek
Input Elemen
Edit Elemen
Baca Artikel
Input Artikel
Konfigurasi ArtikelTambah Data
Edit Data
Publikasi
Informasi Sistem
Password
Logout
Lihat Poll dan Hasilnya
Setting PollTambah Data
Edit Data
Pilih Pilihan
Ganti Password
Edit Progress
Edit Progress
Lihat Data
IV.2 Tampilan Program Dan Penjelasan
Bagian ini akan menjelaskan jalannya program disertai potongan-
potongan yang dibutuhkan.
IV.2.1 Koneksi Basis Data
Sebelum mampu mengakses basis data server, harus
dilakukan koneksi ke basis data. Untuk koneksi ke mysql server
digunakan perintah :
$dbhost = 'localhost';$dbuser = 'root';$dbpass = '';$db_core = 'blueoctopus';/* ---- Direct MySQL Database access ----- */$dbcnnx = mysql_connect($dbhost,$dbuser,$dbpass);$dbused = mysql_select_db($db_core,$dbcnnx);
Basis data yang digunakan adalah blueoctopus. Perintah
diatas disimpan dengan nama config.inc.php. File ini akan
disertakan dalam setiap file php yang membutuhkan koneksi ke
basis data.
IV.2.2 Halaman Login
Untuk masuk ke dalam sistem aplikasi ini semua user
harus melakukan login. Halaman ini akan muncul saat pertama
kali user mengunjungi root directory dari aplikasi(index.php).
Setelah username dan password dimasukkan, maka halaman ini
akan melakukan pengecekan data yang dimasukkan. Jika data
benar maka sistem akan mengecek hak akses menu-menu dari
59
username dan password tersebut sehingga user akan dapat masuk
ke sistem sesuai dengan hak aksesnya masing-masing. Tampilan
dari halaman login adalah seperti berikut ini:
Gambar IV.2 Halaman login
Kode program dari halaman ini disimpan dalam file
index.php yang didalamnya berisi perintah-perintah seperti
dibawah ini:
<?phpsession_start();if(isset($_GET['system_logout'])){ session_unset(); session_destroy();}require_once 'core/config/config.inc.php';if($_POST['update_password'] == '1'){
$chp_useridx = $_SESSION['xorc_id'];$chp_passwdx = md5($_POST['neu_password']);$sqxchp = mysql_query("UPDATE bo_registered_orc SET
orc_password = '$chp_passwdx' WHERE orc_id = '$chp_useridx' LIMIT 1");
session_unset();session_destroy();}// ===============================================================if($dbused!=1) {
$smarty->display('trulogix_login/fe_nodb_cnnx.tpl');}if($dbused==1) {
if(!isset($_POST['system_login'])) {$smarty->display('trulogix_login/init_login.tpl');
60
} else {$usernamex = $_POST['username'];$passwordx = md5($_POST['password']);$sqx_aa = mysql_query("SELECT * FROM bo_registered_orc WHERE
orc_username = '$usernamex' AND orc_status = '1' LIMIT 1");if(mysql_num_rows($sqx_aa)!=1) {
$smarty->display ('trulogix_login/failed_no_username.tpl');
}if(mysql_num_rows($sqx_aa)==1) {
while($sqr_aa = mysql_fetch_array($sqx_aa)) {$xuser_idx = $sqr_aa['orc_id'];$xusername = $sqr_aa['orc_username'];$xpassword = $sqr_aa['orc_password'];if($passwordx != $xpassword) {
$smarty->assign('username',$usernamex);$smarty->display
('trulogix_login/failed_wrong_password.tpl');}if($passwordx == $xpassword) {
$seedx = make_seed();$sessxid = md5(strval($xuser_idx.$seedx));$_SESSION['xsessid'] = $sessxid;$_SESSION['xorc_id'] = $xuser_idx;$_SESSION['xusername'] = $sqr_aa['orc_username'];$_SESSION['xpassword'] = $sqr_aa['orc_password'];$_SESSION['xfirstname'] = $sqr_aa['orc_firstname'];$_SESSION['xlastname'] = $sqr_aa['orc_lastname'];$_SESSION['xorcgroup'] = $sqr_aa['orc_group'];$_SESSION['xlastlogin'] = $sqr_aa['orc_lastlogin'];$_SESSION['xtimelogin'] = date('Y-m-d H:i:s');$sqx_bb = mysql_query("SELECT * FROM
bo_registered_access WHERE access_orc = '$xuser_idx' AND access_status = '1'");
if(mysql_num_rows($sqx_bb) <= 0){$smarty->assign
('username',$sqr_aa['orc_username']);$smarty->display
('trulogix_login/noactive_application.tpl');} else {
$smarty->assign('session_target',$sessxid);$smarty->display
('trulogix_login/application_holder.tpl');}mysql_free_result($sqx_bb);
}}
}mysql_free_result($sqx_aa);$sqlupdlastlogin = mysql_query("UPDATE bo_registered_orc SET
orc_lastlogin = NOW() WHERE orc_id = '$xuser_idx'");}
}?>
61
Pada kode perintah diatas, pertama-tama akan diperiksa
apakah aplikasi sudah terhubung dengan basis data atau tidak.
Apabila aplikasi terhubung dengan basis data, kemudian akan
dibandingkan antara data username (variable $usernamex) dan
password(variable $passwordx) dengan data yang ada di basis
data dalam table bo_registered_orc. Apabila username dan
password cocok semua, kemudian semua data user tersebut akan
disimpan dalam session, termasuk kode user(variable
$xuser_idx). Setelah itu akan dilakukan penghitungan jumlah
data menu-menu dari aplikasi berdasar kode user tersebut. Hal ini
dilakukan untuk menampilkan menu pada frame header menu.
Dari hal diatas dapat diketahui bahwa hak akses setiap pengguna
sistem bisa berbeda-beda tergantung dari administrator sistem
saat data user tersebut dibuat. Jika diketahui user tersebut
memiliki satu atau lebih hak akses atas menu dari aplikasi ini,
maka program akan menampilkan file aplication_holder.tpl. File
tersebut akan membagi sebuah window menjadi beberapa
bagian(frame) yang memuat logo gambar, logo tulisan, link ganti
password, link untuk logout, menu-menu sesuai dengan hak
akses user tersebut, halaman home dan footer yang berisi nama
dan waktu login.
IV.2.3 Halaman Home
Halaman home berisi data diri user, jumlah pesan yang
belum dibaca dalam kotak masuk pesan, pengumuman dari
62
administrator sistem, daftar pekerjaan yang ditawarkan dan daftar
perkerjaan yang sudah diterima dan belum selesai dikerjakan.
Tampilan dari halaman home adalah seperti gambar dibawah ini:
Perintah-perintah untuk menampilkan halaman home
dimuat dalam file home_index.php, kode perintahnya dapat kita
lihat seperti dibawah ini.
<?phpsession_start();require_once 'core/config/config.inc.php';require_once 'core/config/core.inc.php';if((isset($_SESSION['xsessid'])) && (isset($_SESSION['xorc_id']))) {
$smarty->assign('session_target',$_SESSION['xsessid']);if(isset($_GET['app_start'])) {
if(isset($_GET['acceptoffer'])) {$el_id = $_GET['acceptoffer'];$updacc = mysql_query("UPDATE bo_project_element SET
el_accepted = '1' WHERE el_id = '$el_id'");}if(isset($_GET['rejectoffer'])) {
$el_id = $_GET['rejectoffer'];$updrej = mysql_query("UPDATE bo_project_element SET
el_accepted = '2' WHERE el_id = '$el_id'");}$xorcid = $_SESSION['xorc_id'];$smarty->display('globals/page_begin.tpl');// pesan admin$sqlx = mysql_query("SELECT * FROM bo_message LIMIT 1");
$rowx = mysql_num_rows($sqlx); if($rowx < 1) { $xmsg = "Tidak ada pengumuman";
} else { $resx = mysql_fetch_array($sqlx); $xmsg = $resx['msg_content'];
} mysql_free_result($sqlx); $smarty->assign('xmsg',$xmsg); // --------- // data user dari session
$xorcid = sprintf("%05s",$_SESSION['xorc_id']);$xorcgroup = group_translator($_SESSION['xorcgroup']);
$smarty->assign('xsessid',$_SESSION['xsessid']);$smarty->assign('xorc_id',$xorcid);$smarty->assign('xusername',$_SESSION['xusername']);$smarty->assign('xpassword',$_SESSION['xpassword']);$smarty->assign('xfirstname',$_SESSION['xfirstname']);
63
$smarty->assign('xlastname',$_SESSION['xlastname']);$smarty->assign('xorcgroup',$xorcgroup);$smarty->assign('xlastlogin',$_SESSION['xlastlogin']);$smarty->assign('xtimelogin',$_SESSION['xtimelogin']);// ---------// pesan belum terbaca dalam inbox$sqlinbox = mysql_query("SELECT COUNT(um_id) AS newmsg FROM
bo_user_messages WHERE um_read = '0000-00-00 00:00:00' AND um_to = '$xorcid'");
$resinbox = mysql_fetch_array($sqlinbox);$unreadmsg = $resinbox['newmsg'];mysql_free_result($sqlinbox);$smarty->assign('unreadmsg',$unreadmsg);// ---------// kegiatan ditawarkan & diterima$arroffered = array();$sqly = mysql_query("SELECT
p_id,p_title,el_id,el_title,el_startdate,el_enddate,TO_DAYS(el_enddate) - TO_DAYS(el_startdate) AS jml FROM bo_project,bo_project_element WHERE p_id = el_project AND el_accepted = '0' AND el_orc = '$xorcid' ORDER BY p_id,p_title,el_startdate,el_enddate");
$jmloffered = mysql_num_rows($sqly);while($resy = mysql_fetch_array($sqly)) {
array_push($arroffered,$resy);}mysql_free_result($sqly);$smarty->assign('jmloffered',$jmloffered);$smarty->assign('offeredjob',$arroffered);$arraccepted = array();$sqlz = mysql_query("SELECT
p_id,p_title,el_id,el_title,el_startdate,el_enddate,TO_DAYS(el_enddate) - TO_DAYS(el_startdate) + 1 AS jml,el_progress FROM bo_project,bo_project_element WHERE p_id = el_project AND el_accepted = '1' AND el_progress < '100' AND el_orc = '$xorcid' ORDER BY p_id,p_title,el_startdate,el_enddate");
$jmlaccepted = mysql_num_rows($sqlz);while($resz = mysql_fetch_array($sqlz)) {
array_push($arraccepted,$resz);}mysql_free_result($sqlz);$smarty->assign('jmlaccepted',$jmlaccepted);$smarty->assign('acceptedjob',$arraccepted);// ---------
$smarty->display('home/contents.tpl');$smarty->display('globals/page_end.tpl');
}} else {
$smarty->display('trulogix_login/empty_page.tpl');}?>
64
Gambar IV.3 Halaman home
Data diri user diambil dari variabel-variabel yang telah
disimpan dalam session pada saat login. Jumlah pesan yang
belum dibaca dapat diketahui dengan menghitung semua data
dalam tabel bo_user_messages yang kolom um_to sama dengan
kode user tersebut dan um_read sama dengan “0000-00-00
00:00:00”. Isi dari pengumuman diambil dari tabel bo_message.
Apabila dalam tabel bo_message tidak ada data maka secara
otomatis akan ditampilkan tulisan “Tidak ada pengumuman”.
Daftar pekerjaan yang ditawarkan diambil dari tabel
bo_project_element yang kolom el_orc sama dengan kode user
tersebut dan kolom el_accepted sama dengan “0”. Keputusan
menerima atau menolak suatu tawaran pekerjaan dapat dilakukan
65
dengan menekan link accept(jika menerima) atau reject(jika
menolak). Apabila user menerima suatu tawaran, maka kolom
um_accepted akan di-update menjadi “1”, sebaliknya akan di-
update menjadi “2”. Daftar semua pekerjaan yang diterima dan
belum selesai dikerjakan diambil dari tabel bo_project_element
yang kolom el_orc sama dengan kode user tersebut, kolom
el_accepted sama dengan “1” dan el_progress kurang dari 100.
IV.2.4 Addressbook
Addressbook adalah menu yang digunakan untuk
menyimpan dan melihat nama, alamat dan nomor-nomor contact
person. Berikut ini merupakan tampilan, kode perintah dan
penjelasan dari tiap-tiap bagian yang ada di dalam menu ini.
Gambar IV.4 Lihat Addressbook
66
Gambar IV.5 Tambah data addressbook
Berikut ini merupakan kode perintah yang ada dalam file
address_index.php.
<?phpsession_start();require_once 'core/config/config.inc.php';if((isset($_SESSION['xsessid'])) && (isset($_SESSION['xorc_id']))) {
$smarty->assign('session_target',$_SESSION['xsessid']);if(isset($_GET['app_start'])) {
$smarty->assign('app_id',$_GET['app_id']);$smarty->assign('app_label',$_GET['app_label']);// cari label menu default dari aplikasi ini untuk
ditampilkan$appid = $_GET['app_id'];$sqlx = mysql_query("SELECT * FROM bo_registered_menu
WHERE menu_default = '1' AND menu_app = '$appid' LIMIT 1");$resx = mysql_fetch_array($sqlx);$smarty->assign('menu_label',$resx['menu_label']);$smarty->display('addressbook/index.tpl');
}if(isset($_GET['app_nav'])) {
$xorcid = $_SESSION['xorc_id'];
67
$appid = $_GET['app_id'];$arrmenukb = array();$sqlx = mysql_query("SELECT
menu_id,menu_action_file,menu_label FROM bo_registered_menu,bo_registered_access_menu WHERE menu_id = am_menu AND am_orc = '$xorcid' AND am_status = '1' AND menu_app = '$appid' ORDER BY menu_id");
while($resx = mysql_fetch_array($sqlx)) {array_push($arrmenukb,$resx);
}mysql_free_result($sqlx);$smarty->assign('arrmenukb',$arrmenukb);$smarty->assign('app_label',$_GET['app_label']);$smarty->display('addressbook/navigator.tpl');
}// daftar temanif(isset($_GET['peoples'])) {
// lets begin $smarty->display('globals/page_begin.tpl'); // navigation if(isset($_GET['current_pos'])) { $user_position = $_GET['current_pos']; } else { $user_position = strval($_GET['app_label']." >> ".$_GET['menu_label']); } $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); // some clues $clues = "Berikut ini merupakan seluruh daftar <i>contact person</i> anda. Daftar Addressbook anda tidak hanya berisi data private anda, tapi juga berisi semua data publik milik setiap pengguna sistem ini."; $smarty->assign('clues',$clues); $smarty->assign('boxwidth','100%'); $smarty->display('globals/clues_box.tpl'); // main content $arrawalan = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'); if(isset($_GET['awalan'])) { $xawalan = $_GET['awalan']; } else { $xawalan = '%'; } $smarty->assign('arrawalan',$arrawalan); $smarty->assign('xawalan',$xawalan); $smarty->display('addressbook/find_address.tpl'); $xorcid = $_SESSION['xorc_id']; $arradd = array(); $sqlx = mysql_query("SELECT * FROM bo_addressbook WHERE add_name LIKE '$xawalan%' AND ((add_orc = '$xorcid' AND add_status = '1') OR add_status = '2') ORDER BY add_name"); while($resx = mysql_fetch_array($sqlx)) { array_push($arradd,$resx); }
68
mysql_free_result($sqlx); $smarty->assign('arradd',$arradd); $smarty->display('addressbook/address_list.tpl'); // end of page
$smarty->display('globals/page_end.tpl');}// tambah data temanif(isset($_GET['add_peoples'])) {
if(isset($_POST['submit_new_people'])) { $xorcid = $_SESSION['xorc_id']; $nama = $_POST['nama']; $alamat = $_POST['alamat']; $emailadd = $_POST['emailadd']; $nomorkantor = $_POST['nomorkantor']; $nomorfax = $_POST['nomorfax']; $nomorhandphone = $_POST['nomorhandphone']; $nomorrumah = $_POST['nomorrumah']; $xprivate = $_POST['xprivate']; $insadd = mysql_query("INSERT INTO bo_addressbook(add_name,add_address,add_email,add_office,add_fax,add_mobile,add_home,add_status,add_orc) VALUES('$nama','$alamat','$emailadd','$nomorkantor','$nomorfax','$nomorhandphone','$nomorrumah','$xprivate','$xorcid')"); }
// lets begin $smarty->display('globals/page_begin.tpl'); // navigation if(isset($_GET['current_pos'])) { $user_position = $_GET['current_pos']; } else { $user_position = strval($_GET['app_label']." >> ".$_GET['menu_label']); } $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); // some clues $clues = "Gunakan form dibawah ini untuk menambah data teman atau <i>contact person</i> untuk anda. Hasil memasukkan data pada form dibawah akan tampak pada menu "Lihat Addressbook". Pilihlah "Private" jika anda menghendaki data yang anda masukkan hanya muncul pada daftar <i>contact person</i> anda saja. Jika anda menginginkan data tersebut muncul untuk setiap pengguna sistem ini, pilihlah "Public"."; $smarty->assign('clues',$clues); $smarty->assign('boxwidth','100%'); $smarty->display('globals/clues_box.tpl'); // main content $smarty->display('addressbook/address_form.tpl'); // end of page
$smarty->display('globals/page_end.tpl');}
} else {$smarty->display('trulogix_login/empty_page.tpl');
}?>
69
Dengan mengamati kode program diatas dapat dilihat
bahwa menu addressbook ini terbagi menjadi empat bagian yaitu
bagian yang membagi frame tengah menjadi dua secara vertikal,
bagian yang memuat sub-menu, bagian yang digunakan untuk
melihat isi addressbook, dan bagian yang digunakan untuk
menyimpan data baru. Berikut ini merupakan penjelasan dari
bagian-bagian yang telah disebutkan diatas:
Bagian pembagi frame.
Bagian ini akan dijalankan apabila variabel
$_GET[‘app_start’] di-set. Bagian ini bertugas membagi
frame yang berada di tengah menjadi dua secara vertikal.
Bagian frame yang pertama adalah bagian yang memuat sub-
menu dari menu yang dipilih(variabel $app_id) dan bagian
yang kedua akan memuat sub-menu default dari menu yang
dipilih. Bagian ini terdapat dalam setiap menu yang
tersimpan dalam basis data dan melakukan hal yang sama,
karena itu penulis hanya akan membahas bagian ini satu kali
saja.
Bagian yang memuat sub-menu.
Bagian ini akan dijalankan apabila variabel
$_GET[‘app_nav’] di-set. Pada bagian ini perintah yang
paling utama adalah membaca dan menampilkan semua sub-
menu dari menu yang dipilih(variabel $appid) dan user
tersebut(variabel $xorcid) mempunyai hak akses atas sub-
70
menu tersebut. Data-data yang berhubungan dengan hak
akses user atas suatu sub-menu terdapat di dalam tabel
bo_registered_access_menu. Apabila user berhak atas suatu
sub-menu kolom am_menu akan bernilai sama dengan ID
sub-menu, kolom am_orc akan bernilai sama dengan user-ID
tersebut dan am_status akan bernilai sama dengan “1”.
Bagian ini terdapat dalam setiap menu yang tersimpan dalam
basis data dan melakukan hal yang sama, karena itu penulis
hanya akan membahas bagian ini satu kali saja.
71
Lihat isi addressbook.
Variabel $arrawalan adalah variabel array yang berisi
huruf dari A sampai Z. Variabel ini berfungsi untuk
menampilkan huruf-huruf tersebut yang nantinya digunakan
sebagai link-link untuk mencari daftar contact person dengan
nama yang huruf awalnya sama dengan huruf yang dipilih.
Huruf awal yang dipilih tersebut berada dalam variabel
$xawalan. Saat pertama kali membuka halaman ini, dimana
variabel $awalan belum diberi nilai, variabel $xawalan diberi
nilai sama dengan “%”(nilai default). Query yang dijalankan
untuk menampilkan daftar contact person adalah memilih
semua data dalam tabel bo_addressbook dimana huruf awal
namanya seperti variabel $xawalan dan status datanya sama
dengan “1”(private) dan pemilik datanya sama dengan user-
ID tersebut atau huruf awal namanya seperti variabel
$xawalan dan status datanya sama dengan “2”(public), data
diurutkan berdasarkan nama.
Form isi data baru.
Dalam bagian ini akan ditampilkan form untuk
mengisi data contact person baru. Setelah tombol submit
pada form tersebut ditekan, maka query untuk memasukkan
data dalam tabel bo_addressbook akan dijalankan.
IV.2.5 Daftar Kegiatan
72
Daftar kegiatan terbagi menjadi dua yaitu kegiatan yang
berhubungan dengan proyek dan kegiatan pribadi. Dua kegiatan
tersebut tidak saling berkaitan. Tampilan, kode perintah dan
penjelasan dari menu ini adalah seperti dibawah ini.
Gambar IV.6 Lihat kegiatan proyek
73
Gambar IV.7 Form update progress dan isi dokumentasi
Gambar IV.8 Form input kegiatan pribadi dan daftar kegiatan pribadi
74
Gambar IV.9 Form edit kegiatan pribadi
Gambar IV.10 Form update progress kegiatan pribadi
75
Berikut ini merupakan kode perintah menu kegiatan yang
disimpan dalam file todo_index.php.
<?phpsession_start();require_once 'core/config/config.inc.php';require_once 'core/config/core.inc.php';if((isset($_SESSION['xsessid'])) && (isset($_SESSION['xorc_id']))) {
$smarty->assign('session_target',$_SESSION['xsessid']);if(isset($_GET['app_start'])) {
$smarty->assign('app_id',$_GET['app_id']);$smarty->assign('app_label',$_GET['app_label']);// cari label menu default dari aplikasi ini untuk
ditampilkan$appid = $_GET['app_id'];$sqlx = mysql_query("SELECT * FROM bo_registered_menu
WHERE menu_default = '1' AND menu_app = '$appid' LIMIT 1");$resx = mysql_fetch_array($sqlx);$smarty->assign('menu_label',$resx['menu_label']);$smarty->display('todo/index.tpl');
}if(isset($_GET['app_nav'])) {
$xorcid = $_SESSION['xorc_id'];$appid = $_GET['app_id'];$arrmenukb = array();$sqlx = mysql_query("SELECT
menu_id,menu_action_file,menu_label FROM bo_registered_menu,bo_registered_access_menu WHERE menu_id = am_menu AND am_orc = '$xorcid' AND am_status = '1' AND menu_app = '$appid' ORDER BY menu_id");
while($resx = mysql_fetch_array($sqlx)) {array_push($arrmenukb,$resx);
}mysql_free_result($sqlx);$smarty->assign('arrmenukb',$arrmenukb);$smarty->assign('app_label',$_GET['app_label']);$smarty->display('todo/navigator.tpl');
}// lihat kegiatan pada tanggal tttif(isset($_GET['lihat_tgl'])) {
$xorcid = $_SESSION['xorc_id']; if(isset($_GET['hari_ini'])) { $tgl = date('Y-m-d'); $xrange = "tanggal ".date_translator($tgl);
} else {if(isset($_GET['lihat_hari'])) {
$tgl = $_GET['tgl'];$xrange = "tanggal
".date_translator($tgl);}if(isset($_GET['lihat_mgu'])) {
76
$tglx = $_GET['tgl'];$sqly = mysql_query("SELECT
DATE_ADD('$tglx', INTERVAL 6 DAY) AS tgly");$resy = mysql_fetch_array($sqly);$tgl = $resy['tgly'];mysql_free_result($sqly);$xrange = "tanggal
".date_translator($tglx)." sampai dengan tanggal ".date_translator($tgl);
}if(isset($_GET['lihat_bln'])) {
$tglx = $_GET['tgl'];$tmptgl = explode("-",$tglx);$dd = end_of_month($tmptgl[1],$tmptgl[0]);$tgl =
strval($tmptgl[0]."-".$tmptgl[1]."-".$dd);$xrange = "tanggal
".date_translator($tglx)." sampai dengan tanggal ".date_translator($tgl);
}}// lets begin
$smarty->display('globals/page_begin.tpl'); // navigation if(isset($_GET['current_pos'])) { $user_position = $_GET['current_pos']; } else { $user_position = strval($_GET['app_label']." >> ".$_GET['menu_label']); } $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); // some clues $clues = "Berikut ini merupakan semua kegiatan anda pada ".$xrange." yang <b>sudah anda terima</b> dan kegiatan yang <b>belum selesai dikerjakan</b>. Untuk melihat semua kegiatan yang <b>ditawarkan</b> kepada anda, klik "Home". Kegiatan yang jatuh temponya pada hari ini akan berwarna kuning pada kolom tanggal akhirnya. Kegiatan yang jatuh temponya sudah lewat akan berwarna merah pada kolom tanggal akhirnya. Kegiatan yang sudah selesai tidak akan ditampilkan. Untuk mengubah data perkembangan sebuah kegiatan, tekanlah <i>link</i> "Edit Progress"."; $smarty->assign('clues',$clues); $smarty->assign('boxwidth','100%'); $smarty->display('globals/clues_box.tpl'); // main content $arrtodo = array(); $sqlx = mysql_query("SELECT p_id,p_title,el_id,el_title,el_startdate,el_enddate,el_progress,TO_DAYS(el_enddate) - TO_DAYS(el_startdate) + 1 AS jml FROM bo_project,bo_project_element WHERE p_id = el_project AND el_orc = '$xorcid' AND el_startdate <= '$tgl' AND el_progress < '100' ORDER BY el_project,el_startdate,el_enddate"); while($resx = mysql_fetch_array($sqlx)) { array_push($arrtodo, $resx);
}
77
mysql_free_result($sqlx);$smarty->assign('acceptedjob',$arrtodo);
$smarty->assign('xtoday',date('Y-m-d')); $smarty->display('todo/todo_list.tpl'); // end of page
$smarty->display('globals/page_end.tpl');}// personal organizer (simple!)if(isset($_GET['kegiatan_pribadi'])) {
$xorcid = $_SESSION['xorc_id'];if(isset($_POST['submit_new_act'])) {
$act = $_POST['actx'];$ddx = $_POST['ddx'];$mmx = $_POST['mmx'];$yyx = $_POST['yyx'];$ddy = $_POST['ddy'];$mmy = $_POST['mmy'];$yyy = $_POST['yyy'];$insact = mysql_query("INSERT INTO
bo_individual_act(in_act,in_startdate,in_enddate,in_orc,in_lastupdate) VALUES('$act','$yyx-$mmx-$ddx','$yyy-$mmy-$ddy','$xorcid',NOW())");
}if(isset($_GET['editindact'])) {
$in_id = $_GET['in_id'];$sqly = mysql_query("SELECT * FROM
bo_individual_act WHERE in_id = '$in_id'");while($resy = mysql_fetch_array($sqly)) {
$in_act = $resy['in_act'];$tglx =
explode("-",$resy['in_startdate']);$tgly = explode("-",$resy['in_enddate']);
}mysql_free_result($sqly);$smarty->assign('in_act',$in_act);$ddx = $tglx[2];$mmx = $tglx[1];$yyx = $tglx[0];$ddy = $tgly[2];$mmy = $tgly[1];$yyy = $tgly[0];$smarty->assign('ddx',$ddx);$smarty->assign('mmx',$mmx);$smarty->assign('yyx',$yyx);$smarty->assign('ddy',$ddy);$smarty->assign('mmy',$mmy);$smarty->assign('yyy',$yyy);$smarty->assign('in_id',$in_id);$smarty->assign('editact','enable');
}if(isset($_POST['submit_upd_act'])) {
$act = $_POST['actx'];$ddx = $_POST['ddx'];$mmx = $_POST['mmx'];$yyx = $_POST['yyx'];$ddy = $_POST['ddy'];
78
$mmy = $_POST['mmy'];$yyy = $_POST['yyy'];$in_id = $_POST['in_id'];$updact = mysql_query("UPDATE bo_individual_act
SET in_act = '$act', in_startdate = '$yyx-$mmx-$ddx', in_enddate = '$yyy-$mmy-$ddy', in_lastupdate = NOW() WHERE in_id = '$in_id' LIMIT 1");
}if(isset($_POST['submit_prog_act'])) {
$in_id = $_POST['in_id'];$in_progress = $_POST['in_progress'];$updprog = mysql_query("UPDATE bo_individual_act
SET in_progress = '$in_progress', in_lastupdate = NOW() WHERE in_id = '$in_id' LIMIT 1");
if($in_progress == '100') {$updisdone = mysql_query("UPDATE
bo_individual_act SET in_finished = CURDATE(), in_lastupdate = NOW() WHERE in_id = '$in_id' LIMIT 1");
} else {$updundone = mysql_query("UPDATE
bo_individual_act SET in_finished = '0000-00-00', in_lastupdate = NOW() WHERE in_id = '$in_id' LIMIT 1");
}}// lets begin
$smarty->display('globals/page_begin.tpl'); // navigation if(isset($_GET['current_pos'])) { $user_position = $_GET['current_pos']; } else { $user_position = strval($_GET['app_label']." >> ".$_GET['menu_label']); } $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); // some clues $clues = "Berikut ini merupakan fasilitas untuk mengorganisasi kegiatan pribadi anda. Gunakan form dibawah ini untuk menambah kegiatan pribadi anda. Untuk mengubah data perkembangan, klik kode kegiatan anda. Kegiatan yang sudah selesai tidak akan ditampilkan.";
$smarty->assign('clues',$clues); $smarty->assign('boxwidth','100%'); $smarty->display('globals/clues_box.tpl'); // main content $smarty->display('globals/new_table.tpl'); $smarty->display('globals/new_row.tpl'); $smarty->display('globals/new_column.tpl'); if(!isset($_GET['editprogress'])) {
// add or editif(!isset($_GET['editindact'])) { $smarty-
>assign('editact','disable'); }$dd = date('d');$mm = date('m');$yy = date('Y');$smarty->assign('dd',$dd);
79
$smarty->assign('mm',$mm);$smarty->assign('yy',$yy);$smarty-
>display('todo/individual_activity_form.tpl');} else {
// edit progress$in_id = $_GET['in_id'];$sqly = mysql_query("SELECT
*,TO_DAYS(in_enddate) - TO_DAYS(in_startdate) + 1 AS jml FROM bo_individual_act WHERE in_id = '$in_id'");
while($resy = mysql_fetch_array($sqly)) {$in_act = $resy['in_act'];$tglx = $resy['in_startdate'];$tgly = $resy['in_enddate'];$jml = $resy['jml'];$prog = $resy['in_progress'];
}mysql_free_result($sqly);$smarty->assign('in_id',$in_id);$smarty->assign('in_act',$in_act);$smarty->assign('tglx',$tglx);$smarty->assign('tgly',$tgly);$smarty->assign('jml',$jml);$smarty->assign('prog',$prog);$smarty-
>display('todo/individual_activity_progress.tpl');}
$smarty->display('globals/end_column.tpl'); $smarty->display('globals/new_column.tpl'); // list $arract = array(); $sqlx = mysql_query("SELECT *,TO_DAYS(in_enddate) - TO_DAYS(in_startdate) + 1 AS jml FROM bo_individual_act WHERE in_orc = '$xorcid' AND in_progress < '100' ORDER BY in_enddate,in_startdate,in_act"); $rowact = mysql_num_rows($sqlx);
while($resx = mysql_fetch_array($sqlx)) { array_push($arract,$resx);
}mysql_free_result($sqlx);$smarty->assign('arract',$arract);$smarty->assign('rowact',$rowact);$smarty->display('todo/individual_activity_list.tpl');
$smarty->display('globals/end_column.tpl'); $smarty->display('globals/end_row.tpl'); $smarty->display('globals/end_table.tpl'); // end of page
$smarty->display('globals/page_end.tpl');}// edit progressif(isset($_GET['edit_progress'])) {
$el_id = $_GET['el_id'];if(isset($_POST['submit_upd_progress'])) {
$el_progress = $_POST['el_progress'];if($el_progress > 100) { $el_progress = 100; }
80
$updx = mysql_query("UPDATE bo_project_element SET el_progress = '$el_progress', el_lastupdate = NOW() WHERE el_id = '$el_id' LIMIT 1");
// determine if an element was finishedif($el_progress == '100') {
$updy = mysql_query("UPDATE bo_project_element SET el_finished = CURDATE(), el_lastupdate = NOW() WHERE el_id = '$el_id' LIMIT 1");
} else {$updy = mysql_query("UPDATE
bo_project_element SET el_finished = '0000-00-00', el_lastupdate = NOW() WHERE el_id = '$el_id' LIMIT 1");
}// determine if a project was finished$sqly = mysql_query("SELECT el_project FROM
bo_project_element WHERE el_id = '$el_id' LIMIT 1");$resy = mysql_fetch_array($sqly);$p_id = $resy['el_project'];mysql_free_result($sqly);$sqlz = mysql_query("SELECT
p_id,ROUND(SUM(el_progress)/COUNT(el_id)) AS total_progress FROM bo_project,bo_project_element,bo_registered_orc WHERE p_id = el_project AND p_id = '$p_id' GROUP BY p_id");
$resz = mysql_fetch_array($sqlz);$prog = $resz['total_progress'];if($prog == '100') {
$updz = mysql_query("UPDATE bo_project SET p_finished = CURDATE(), p_lastupdate = NOW() WHERE p_id = '$p_id' LIMIT 1");
} else {$updz = mysql_query("UPDATE bo_project SET
p_finished = '0000-00-00', p_lastupdate = NOW() WHERE p_id = '$p_id' LIMIT 1");
}// insert documentation on an elementif(strlen($_POST['docx']) > 0) {
$docx = $_POST['docx'];$insdoc = mysql_query("INSERT INTO
bo_documentation(doc_datetime,doc_element,doc_notes) VALUES(NOW(),'$el_id','$docx')");
}}// lets begin
$smarty->display('globals/page_begin.tpl'); // navigation $user_position = strval($_GET['current_pos']." >> Ubah Data Perkembangan"); $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); // some clues $clues = "Untuk mengubah perkembangan proyek, isilah form dibawah ini kemudian tekanlah tombol "Perbaharui Data". Data perkembangan sebuah proyek yang mungkin adalah diantara 0 s.d 100."; $smarty->assign('clues',$clues); $smarty->assign('boxwidth','100%');
81
$smarty->display('globals/clues_box.tpl'); // main content $smarty->assign('current_pos',$_GET['current_pos']); $sqlx = mysql_query("SELECT p_id,p_title,el_title,el_startdate,el_enddate,el_progress FROM bo_project,bo_project_element WHERE p_id = el_project AND el_id = '$el_id'"); while($resx = mysql_fetch_array($sqlx)) { $p_id = $resx['p_id']; $p_title = $resx['p_title']; $el_title = $resx['el_title']; $el_startdate = $resx['el_startdate']; $el_enddate = $resx['el_enddate']; $el_progress = $resx['el_progress'];
}mysql_free_result($sqlx);$arrdoc = array();$sqldoc = mysql_query("SELECT * FROM bo_documentation
WHERE doc_element = '$el_id' ORDER BY doc_datetime DESC");$rowdoc = mysql_num_rows($sqldoc);while($resdoc = mysql_fetch_array($sqldoc)) {
array_push($arrdoc,$resdoc);}mysql_free_result($sqldoc);$smarty->assign('rowdoc',$rowdoc);$smarty->assign('arrdoc',$arrdoc);
$smarty->assign('p_id',$p_id); $smarty->assign('p_title',$p_title); $smarty->assign('el_id',$el_id); $smarty->assign('el_title',$el_title); $smarty->assign('el_startdate',$el_startdate); $smarty->assign('el_enddate',$el_enddate); $smarty->assign('el_progress',$el_progress); $smarty->display('globals/new_table.tpl'); $smarty->display('globals/new_row.tpl'); $smarty->display('globals/new_column.tpl'); $smarty->display('todo/edit_progress.tpl'); $smarty->display('globals/end_column.tpl'); $smarty->display('globals/new_column.tpl'); $smarty->display('todo/doc_list.tpl'); $smarty->display('globals/end_column.tpl'); $smarty->display('globals/end_row.tpl'); $smarty->display('globals/end_table.tpl'); // end of page
$smarty->display('globals/page_end.tpl');}
} else {$smarty->display('trulogix_login/empty_page.tpl');
}?>
Dengan mengamati kode program diatas dapat dilihat
bahwa menu Daftar Kegiatan ini terbagi menjadi lima bagian
yaitu: bagian yang membagi frame tengah menjadi dua secara
82
vertikal, bagian yang memuat sub-menu, bagian yang digunakan
untuk melihat kegiatan proyek pada tanggal tertentu, bagian yang
berhubungan dengan kegiatan pribadi dan bagian yang
digunakan untuk mengupdate progress dari kegiatan proyek.
Berikut ini merupakan penjelasan dari bagian-bagian yang telah
disebutkan diatas:
Lihat kegiatan proyek pada tanggal tertentu.
Dalam bagian ini variabel yang menentukan data-data
yang ditampilkan adalah variabel $tgl. Variabel tersebut
bernilai tanggal dalam format yyyy-mm-dd. Saat pertama kali
membuka halaman ini, secara default, variabel $tgl akan
bernilai sama dengan tanggal hari ini. Apabila kita
menggunakan fasilitas kalender yang berada di bawah link-
link sub-menu maka variabel $tgl akan bernilai sama dengan
tanggal yang dipilih atau tanggal akhir dari suatu minggu
yang yang dipilih atau tanggal akhir dari suatu bulan yang
dipilih. Query yang dijalankan untuk mengambil data
kegiatan proyek pada tanggal tertentu adalah memilih semua
data pada tabel bo_project dan bo_project_element dimana
petugas yang berwenang sama dengan user-ID tersebut dan
tanggal mulai dari kegiatan tersebut kurang dari sama dengan
variabel $tgl dan kegiatan tersebut belum selesai dan kolom
el_project sama dengan p_id, data-data yang dipilih akan
diurutkan berdasar kode proyek kemudian tanggal mulai
83
kegiatan kemudian tanggal jatuh tempo kegiatan. Kegiatan
yang jatuh temponya tepat pada hari ini, kolom tanggal
akhirnya akan berwarna kuning. Apabila ada kegiatan yang
tanggal akhirnya sudah lalu, kolom tanggal akhirnya akan
berwarnya merah. Pada setiap kegiatan proyek yang tampil,
disediakan link dengan label “Edit Progress” yang berfungsi
menampilkan form untuk mengubah kemajuan atau
perkembangan dan mengisi dokumentasi atau catatan dari
kegiatan tersebut. Penjelasan setelah link ini ditekan akan
dibahas lebih lanjut pada bagian berikutnya.
Update progress dari kegiatan proyek.
Bagian ini akan dijalankan setelah link “Edit
Progress” ditekan(variabel $_GET[‘edit_progress’] di-set).
Link tersebut menyertakan variabel $el_id yang bernilai ID
dari bagian proyek sebagai parameter untuk mengambil data-
data yang berhubungan dalam tabel bo_project_element,
bo_project dan bo_documentation. Setelah data-data tersebut
diambil, perintah berikutnya adalah menampilkan form yang
mempunyai kegunaan untuk mengubah nilai perkembangan
dari suatu kegiatan dan mengisi dokumentasi. Perintah-
perintah yang dijalankan setelah tombol submit pada form
tersebut ditekan adalah memasukkan nilai kemajuan/progress
dalam variabel $el_progress. Setelah itu nilai $el_progress
akan dibandingkan dengan “100”, apabila lebih besar maka
84
variabel ini akan diberi nilai sama dengan “100”. Hal ini
dimaksudkan untuk mengantisipasi kesalahan dari pengguna
sistem yang mengisi perkembangan kegiatan dengan nilai
yang lebih tinggi daripada “100”(nilai perkembangan yang
mungkin adalah 0 sampai dengan 100). Setelah itu perintah
yang dijalankan adalah mengupdate kolom el_progress pada
tabel bo_project_element sama dengan nilai variabel
$el_progress. Setelah itu akan dibandingkan nilai variabel
$el_progress dengan “100”, apabila sama(berarti sudah
selesai) maka kolom el_finished akan diupdate sama dengan
tanggal hari ini. Selain itu(belum selesai) kolom el_finished
akan diupdate sama dengan “0000-00-00”. Karena
pengubahan prosentase perkembangan kegiatan akan
berpengaruh terhadap prosentase perkembangan dari proyek
secara keseluruhan maka setelah proses-proses diatas selesai
dijalankan perintah yang dijalankan selanjutnya adalah
menghitung prosentase perkembangan dari proyek secara
keseluruhan. Apabila nilainya sama dengan “100”, maka
kolom p_finished akan diupdate sama dengan tanggal hari
ini, selain itu kolom p_finished akan diupdate menjadi sama
dengan “0000-00-00”. Perintah selanjutnya adalah
membandingkan panjang karakter dari nilai yang tersimpan
dalam variabel $_POST[‘docx’] dengan “0”. Apabila lebih
besar, maka akan dijalankan query untuk menyimpan
85
dokumentasi pada sebuah elemen yang diketikkan pada form
edit progress kegiatan proyek tersebut di dalam tabel
bo_documentation.
Kegiatan pribadi.
Bagian ini merupakan bagian yang berhubungan
dengan kegiatan pribadi yang diinputkan oleh pengguna
sistem dan tidak berhungan dengan kegiatan proyek. Pada
bagian ini akan ditampilkan form untuk memasukkan
kegiatan pribadi pada sebelah kiri dan disebelah kanan form
tersebut akan ditampilkan seluruh kegiatan yang belum
selesai dikerjakan. Perintah yang dijalankan setelah tombol
submit form input ini ditekan adalah menjalankan query
untuk menyimpan data yang diketikkan dalam tabel
bo_individual_act. Form untuk memasukkan data kegiatan
pribadi tersebut akan diganti dengan form untuk mengubah
data kegiatan setelah link “Ubah kegiatan” ditekan. Perintah
yang dijalankan setelah tombol submit pada form ubah
kegiatan adalah mengupdate data kegiatan, tanggal mulai dan
tanggal jatuh tempo sama dengan nilai-nilai yang
dimasukkan melalui form tersebut. Setelah link “Ubah
Progress” ditekan akan ditampilkan form ubah progress yang
berguna untuk mengupdate progress dari kegiatan pribadi
yang dipilih. Kegiatan pribadi yang sudah selesai tidak akan
ditampilkan.
86
IV.2.6 Pesan
Menu Pesan digunakan untuk mengirim dan menerima
pesan dari dan ke sesama pengguna sistem saja. Data-data pesan
ini disimpan dalam tabel bo_user_messages. Identifikasi
pengirim dan penerima berdasarkan user-ID masing-masing.
Tampilan, kode perintah dan penjelasan dari menu ini adalah
seperti dibawah ini.
Gambar IV.11 Kotak masuk dalam menu pesan
87
Gambar IV.12 Tulis pesan
Gambar IV.13 Baca pesan
88
Berikut ini merupakan kode perintah menu Pesan yang
disimpan dalam file email_index.php.
<?phpsession_start();require_once 'core/config/config.inc.php';require_once 'core/config/core.inc.php';if((isset($_SESSION['xsessid'])) && (isset($_SESSION['xorc_id']))) {
$smarty->assign('session_target',$_SESSION['xsessid']);if(isset($_GET['app_start'])) {
$smarty->assign('app_id',$_GET['app_id']);$smarty->assign('app_label',$_GET['app_label']);// cari label menu default dari aplikasi ini untuk
ditampilkan$appid = $_GET['app_id'];$sqlx = mysql_query("SELECT * FROM bo_registered_menu
WHERE menu_default = '1' AND menu_app = '$appid' LIMIT 1");$resx = mysql_fetch_array($sqlx);$smarty->assign('menu_label',$resx['menu_label']);$smarty->display('e_mail/index.tpl');
}if(isset($_GET['app_nav'])) {
$xorcid = $_SESSION['xorc_id'];$appid = $_GET['app_id'];$arrmenukb = array();$sqlx = mysql_query("SELECT
menu_id,menu_action_file,menu_label FROM bo_registered_menu,bo_registered_access_menu WHERE menu_id = am_menu AND am_orc = '$xorcid' AND am_status = '1' AND menu_app = '$appid' ORDER BY menu_id");
while($resx = mysql_fetch_array($sqlx)) {array_push($arrmenukb,$resx);
}mysql_free_result($sqlx);$smarty->assign('arrmenukb',$arrmenukb);$smarty->assign('app_label',$_GET['app_label']);$smarty->display('e_mail/navigator.tpl');
}// inboxif(isset($_GET['inbox_page'])) {
$xorcid = $_SESSION['xorc_id'];if(isset($_POST['after_read_msg'])) {
$um_id = $_POST['um_id']; $updmsg = mysql_query("UPDATE bo_user_messages SET um_read = NOW() WHERE um_id = '$um_id' AND um_read = '0000-00-00 00:00:00' LIMIT 1");
} // lets begin $smarty->display('globals/page_begin.tpl'); // navigation if(isset($_GET['current_pos'])) { $user_position = $_GET['current_pos']; } else {
89
$user_position = strval($_GET['app_label']." >> ".$_GET['menu_label']); } $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); // some clues $clues = "Disinilah tempat anda melihat pesan-pesan untuk anda dari sesama pengguna sistem ini."; $smarty->assign('clues',$clues); $smarty->assign('boxwidth','100%'); $smarty->display('globals/clues_box.tpl'); // main content $arrmsg = array(); $sqlx = mysql_query("SELECT * FROM bo_user_messages WHERE um_to = '$xorcid' ORDER BY um_input DESC"); while($resx = mysql_fetch_array($sqlx)) { $pengirim = user_translator($resx['um_from']); $arrpengirim = array("pengirim" => $pengirim); $arrx = array_merge($resx,$arrpengirim); array_push($arrmsg,$arrx); } mysql_free_result($sqlx); $smarty->assign('arrmsg',$arrmsg); $smarty->display('e_mail/msg_list.tpl'); // end of page
$smarty->display('globals/page_end.tpl');}// read messageif(isset($_GET['readmsg'])) {
$um_id = $_GET['um_id']; // lets begin $smarty->display('globals/page_begin.tpl'); // main content $user_position = $_GET['current_pos']; $smarty->assign('user_position',$user_position); $sqlx = mysql_query("SELECT * FROM bo_user_messages WHERE um_id = '$um_id'"); $resx = mysql_fetch_array($sqlx); $smarty->assign('um_id',$um_id); $smarty->assign('xcreatorid',$resx['um_from']); $smarty->assign('xcreator',user_translator($resx['um_from'])); $smarty->assign('xcreated',$resx['um_input']); $smarty->assign('xtitle',$resx['um_title']); $smarty->assign('xcontent',$resx['um_content']); mysql_free_result($sqlx); $smarty->display('e_mail/baca_pesan.tpl'); // end of page
$smarty->display('globals/page_end.tpl');}// composeif(isset($_GET['compose_email'])) {
$xorcid = $_SESSION['xorc_id']; if(isset($_POST['submit_usr_msg'])) { $msg_resipient = $_POST['msg_resipient']; $msg_title = $_POST['msg_title'];
90
$msg_content = $_POST['msg_content']; $insusr = mysql_query("INSERT INTO bo_user_messages(um_title,um_content,um_to,um_from,um_input) VALUES('$msg_title','$msg_content','$msg_resipient','$xorcid',NOW())"); if($insusr == 1) { $smarty->assign('xnote','Pesan terkirim'); } else { $smarty->assign('xnote','Pesan gagal terkirim, silakan ulangi mengirim pesan dengan menggunakan form dibawah ini.'); } }
// lets begin $smarty->display('globals/page_begin.tpl'); // navigation if(isset($_GET['current_pos'])) { $user_position = $_GET['current_pos']; } else { $user_position = strval($_GET['app_label']." >> ".$_GET['menu_label']); } $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); // some clues $clues = "Gunakan form dibawah ini untuk menulis pesan kepada sesama pengguna sistem ini. Pesan yang anda kirim akan muncul di <i>inbox</i> si-penerima."; $smarty->assign('clues',$clues); $smarty->assign('boxwidth','100%'); $smarty->display('globals/clues_box.tpl'); // main content if(isset($_POST['reply_msg'])) { $um_id = $_POST['um_id']; $updmsg = mysql_query("UPDATE bo_user_messages SET um_read = NOW() WHERE um_id = '$um_id' AND um_read = '0000-00-00 00:00:00' LIMIT 1"); $smarty->assign('xtujuan',$xcreatorid); $smarty->assign('xtitle',$xtitle); $smarty->assign('xcontent',$xcontent); } $arrusr = array(); $sqlx = mysql_query("SELECT orc_id,orc_lastname,orc_firstname,orc_username FROM bo_registered_orc WHERE orc_id != '$xorcid' AND orc_status = '1' ORDER BY orc_lastname, orc_firstname"); while($resx = mysql_fetch_array($sqlx)) { array_push($arrusr,$resx); } mysql_free_result($sqlx); $smarty->assign('arrusr',$arrusr); $smarty->display('e_mail/compose_form.tpl'); // end of page
$smarty->display('globals/page_end.tpl');}
} else {
91
$smarty->display('trulogix_login/empty_page.tpl');}?>
Dengan mengamati kode program diatas dapat dilihat
bahwa menu Pesan ini terbagi menjadi lima bagian yaitu: bagian
yang membagi frame tengah menjadi dua secara vertikal, bagian
yang memuat sub-menu, bagian yang digunakan untuk melihat
kotak masuk, bagian yang digunakan untuk membaca pesan dan
bagian yang digunakan untuk menulis pesan. Berikut ini
merupakan penjelasan dari bagian-bagian yang telah disebutkan
diatas:
Lihat kotak masuk.
Perintah inti yang terdapat pada bagian ini adalah
menjalankan query yang membaca semua data dalam tabel
bo_user_messages dimana penerima pesan sama dengan
user-ID tersebut, data-data yang diambil akan diurutkan
berdasarkan tanggal dibuatnya pesan secara descending. Pada
pesan yang sudah pernah dibaca, kolom yang paling kanan
akan berwarna oranye dan didalamnya berisi keterangan
bahwa pesan tersebut sudah dibaca dan tanggal dibacanya
pesan tersebut. Pada setiap baris pesan yang tampil, terdapat
tombol untuk memunculkan halaman baru berisi pesan secara
lengkap.
92
Baca pesan.
Bagian ini akan dijalankan setelah tombol “Baca
Pesan” pada daftar pesan-pesan dalam kotak masuk pesan
ditekan. Tombol tersebut memunculkan halaman baru untuk
membuka bagian ini dengan menyertakan ID pesan sebagai
parameter. Perintah yang dijalankan dalam bagian ini adalah
menjalankan query untuk mengambil data pesan yang ID-nya
sama dengan nilai dari variabel $um_id. Pada akhir halaman
ini terdapat dua tombol yaitu tombol untuk menutup halaman
tersebut dan membalas pesan tersebut. Kedua tombol tersebut
setelah ditekan akan menutup halaman tersebut dan
mengupdate status baca atau kolom um_read dalam tabel
bo_user_messages sama dengan waktu sekarang dengan
memanfaatkan fungsi NOW(). Apabila tombol untuk
menutup halaman yang ditekan maka yang kemudian
ditampilkan setelahnya adalah kotak masuk, tetapi jika
tombol untuk membalas pesan yang ditekan maka yang akan
ditampilkan setelahnya adalah form untuk menulis pesan
dimana drop-down penerima sudah bernilai si-pengirim
pesan.
Tulis pesan.
Bagian ini berisi perintah untuk menampilkan form
yang digunakan untuk menulis pesan dan perintah
menjalankan query untuk menyimpan pesan yang diinputkan
93
melalui form tersebut dalam tabel bo_user_messages. Selain
itu perintah selanjutnya adalah menjalankan query untuk
mengambil data-data pengguna sistem aktif yang akan
ditampilkan sebagai isi dari drop-down penerima dalam form.
IV.2.7 Project Manager
Menu ini merupakan menu inti dari aplikasi blueOctopus.
Tabel-tabel dalam basis data yang digunakan untuk menu ini
adalah bo_project, bo_project_element dan bo_documentation.
Tampilan, kode perintah dan penjelasan dari menu ini adalah
seperti dibawah ini.
Gambar IV.14 Halaman utama
94
Gambar IV.15 Input proyek baru
Gambar IV.16 Input bagian-bagian proyek
95
Gambar IV.17 Lihat detil proyek dan gantt chart
96
Gambar IV.18 Pencarian proyek
Berikut ini merupakan kode perintah menu Pesan yang
disimpan dalam file email_index.php.
<?phpsession_start();require_once 'core/config/config.inc.php';require_once 'core/config/core.inc.php';if((isset($_SESSION['xsessid'])) && (isset($_SESSION['xorc_id']))) {
$smarty->assign('session_target',$_SESSION['xsessid']);if(isset($_GET['app_start'])) {
$smarty->assign('app_id',$_GET['app_id']);$smarty->assign('app_label',$_GET['app_label']);// cari label menu default dari aplikasi ini untuk
ditampilkan$appid = $_GET['app_id'];$sqlx = mysql_query("SELECT * FROM bo_registered_menu
WHERE menu_default = '1' AND menu_app = '$appid' LIMIT 1");$resx = mysql_fetch_array($sqlx);$smarty->assign('menu_label',$resx['menu_label']);$smarty->display('project_manager/index.tpl');
}if(isset($_GET['app_nav'])) {
$xorcid = $_SESSION['xorc_id'];$appid = $_GET['app_id'];$arrmenukb = array();$sqlx = mysql_query("SELECT
menu_id,menu_action_file,menu_label FROM bo_registered_menu,bo_registered_access_menu WHERE menu_id =
97
am_menu AND am_orc = '$xorcid' AND am_status = '1' AND menu_app = '$appid' ORDER BY menu_id");
while($resx = mysql_fetch_array($sqlx)) {array_push($arrmenukb,$resx);
}mysql_free_result($sqlx);$smarty->assign('arrmenukb',$arrmenukb);$smarty->assign('app_label',$_GET['app_label']);$smarty->assign('findmenu','Pencarian Proyek');$smarty->display('project_manager/navigator.tpl');
}// halaman utamaif(isset($_GET['app_home'])) {
// lets begin $smarty->display('globals/page_begin.tpl'); // navigation if(isset($_GET['current_pos'])) { $user_position = $_GET['current_pos']; } else { $user_position = strval($_GET['app_label']." >> ".$_GET['menu_label']); } $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); // some clues $clues = "Halaman ini berisi informasi proyek yang belum selesai dikerjakan. Anda juga dapat melihat daftar semua pengguna sistem besera statusnya. Untuk mencari informasi yang lebih detil tentang suatu proyek, gunakan fasilitas pencarian proyek disamping kiri anda.";
$smarty->assign('clues',$clues); $smarty->assign('boxwidth','100%'); $smarty->display('globals/clues_box.tpl'); // main content $arractiveproject = array(); $sqlx = mysql_query("SELECT p_id,p_title,p_startdate,p_enddate,ROUND(SUM(el_progress)/COUNT(el_id)) AS total_progress,orc_firstname,orc_lastname,orc_username, TO_DAYS(p_enddate) - TO_DAYS(p_startdate) + 1 AS jml FROM bo_project,bo_project_element,bo_registered_orc WHERE p_id = el_project AND p_orc = orc_id GROUP BY p_id HAVING total_progress < 100;"); while($resx = mysql_fetch_array($sqlx)) { array_push($arractiveproject,$resx);
}mysql_free_result($sqlx);$smarty->assign('arrproject',$arractiveproject);$smarty->assign('back_to','app_home');
$smarty->display('project_manager/search_result.tpl'); // orc status $arrorc = array(); $sqlorc = mysql_query("SELECT * FROM bo_registered_orc WHERE orc_status = '1' ORDER BY orc_lastname,orc_firstname,orc_username"); while($resorc = mysql_fetch_array($sqlorc)) { $orc = $resorc['orc_id'];
98
$sqlm = mysql_query("SELECT COUNT(el_id) AS jml FROM bo_project_element WHERE el_orc = '$orc' AND el_accepted = '0' AND el_progress < 100"); $resm = mysql_fetch_array($sqlm); $jmlm = $resm['jml']; mysql_free_result($sqlm); $arrm = array("jmlm" => $jmlm); $sqln = mysql_query("SELECT COUNT(el_id) AS jml FROM bo_project_element WHERE el_orc = '$orc' AND el_accepted = '1' AND el_progress < 100"); $resn = mysql_fetch_array($sqln); $jmln = $resn['jml']; mysql_free_result($sqln); $arrn = array("jmln" => $jmln); $arro = array_merge($resorc,$arrm,$arrn); array_push($arrorc,$arro);
} mysql_free_result($sqlorc); $smarty->assign('arrorc',$arrorc); $smarty->display('globals/line_break.tpl'); $smarty->display('project_manager/orc_status.tpl'); // end of page
$smarty->display('globals/page_end.tpl'); }
// Proyek baruif(isset($_GET['new_project'])) {
// lets begin $smarty->display('globals/page_begin.tpl'); // navigation if(isset($_GET['current_pos'])) { $user_position = $_GET['current_pos']; } else { $user_position = strval($_GET['app_label']." >> ".$_GET['menu_label']); } $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); // some clues $clues = "Disinilah tempat anda menambah data proyek baru beserta elemen-elemennya. Pastikan data yang anda masukkan sudah valid sebelum menekan tombol "Simpan Data"."; $smarty->assign('clues',$clues); $smarty->assign('boxwidth','100%'); $smarty->display('globals/clues_box.tpl'); // main content $dd = date('d'); $mm = date('m'); $yy = date('Y'); $smarty->assign('dd',$dd); $smarty->assign('mm',$mm); $smarty->assign('yy',$yy); $smarty->display('project_manager/add_new_project.tpl'); // end of page
$smarty->display('globals/page_end.tpl');
99
}// inputkan elemen-elemen proyekif(isset($_GET['add_new_project'])) {
if(isset($_POST['submit_add_project'])) { $p_title = $_POST['p_title']; $ddx = $_POST['ddx']; $mmx = $_POST['mmx']; $yyx = $_POST['yyx']; $ddy = $_POST['ddy']; $mmy = $_POST['mmy']; $yyy = $_POST['yyy']; $xorcid = $_SESSION['xorc_id']; $ins_p = 0; while($ins_p != 1) { $sqla = mysql_query("SELECT MAX(SUBSTRING(p_id,6,5)) AS jml FROM bo_project WHERE p_id LIKE '$yyx%'"); $resa = mysql_fetch_array($sqla); $p_id = strval($yyx."-".(sprintf("%05s",$resa['jml']+1))); mysql_free_result($sqla); $ins_p = mysql_query("INSERT INTO bo_project(p_id,p_title,p_startdate,p_enddate,p_lastupdate,p_orc) VALUES('$p_id','$p_title','$yyx-$mmx-$ddx','$yyy-$mmy-$ddy',NOW(),'$xorcid')"); } $smarty->assign('current_pos',$_GET['current_pos']); $user_position = strval($_GET['current_pos']." >> Tambah Elemen Proyek"); } if(isset($_POST['submit_add_element'])) { $p_id = $_POST['p_id']; $el_title = $_POST['el_title']; $ddx = $_POST['ddx']; $mmx = $_POST['mmx']; $yyx = $_POST['yyx']; $ddy = $_POST['ddy']; $mmy = $_POST['mmy']; $yyy = $_POST['yyy']; $pic = $_POST['pic']; $ins_el = mysql_query("INSERT INTO bo_project_element(el_project,el_title,el_startdate,el_enddate,el_orc,el_lastupdate) VALUES('$p_id','$el_title','$yyx-$mmx-$ddx','$yyy-$mmy-$ddy','$pic',NOW())"); $smarty->assign('current_pos',$_GET['current_pos']); $user_position = strval($_GET['current_pos']." >> Tambah Elemen Proyek");
} if(isset($_GET['editelement'])) { $p_id = $_GET['p_id']; $el_id = $_GET['el_id']; $user_position = strval($_GET['current_pos']." >> Ubah Elemen Proyek"); $smarty->assign('current_pos',$_GET['current_pos']); $smarty->assign('editelement','enable');
100
$sqly = mysql_query("SELECT * FROM bo_project,bo_project_element WHERE p_id = el_project AND el_id = '$el_id' LIMIT 1"); $resy = mysql_fetch_array($sqly); $smarty->assign('xel_title',$resy['el_title']); $smarty->assign('xel_orc',$resy['el_orc']); $tglx = explode("-",$resy['el_startdate']); $tgly = explode("-",$resy['el_enddate']); $smarty->assign('ddx',$tglx[2]); $smarty->assign('mmx',$tglx[1]); $smarty->assign('yyx',$tglx[0]); $smarty->assign('ddy',$tgly[2]); $smarty->assign('mmy',$tgly[1]); $smarty->assign('yyy',$tgly[0]); $smarty->assign('xel_id',$el_id);
}if(isset($_POST['submit_upd_element'])) {
$p_id = $_POST['p_id'];$el_id = $_POST['el_id'];$el_title = $_POST['el_title'];
$ddx = $_POST['ddx']; $mmx = $_POST['mmx']; $yyx = $_POST['yyx']; $ddy = $_POST['ddy']; $mmy = $_POST['mmy']; $yyy = $_POST['yyy']; $pic = $_POST['pic']; $user_position = strval($_GET['current_pos']." >> Tambah Elemen Proyek"); $smarty->assign('current_pos',$_GET['current_pos']); $updel = mysql_query("UPDATE bo_project_element SET el_title = '$el_title', el_startdate = '$yyx-$mmx-$ddx', el_enddate = '$yyy-$mmy-$ddy', el_orc = '$pic', el_lastupdate = NOW(), el_progress = '0', el_accepted = '0' WHERE el_id = '$el_id' LIMIT 1");
}if(isset($_GET['add_elementx'])) {
$p_id = $_GET['p_id'];$user_position = strval($_GET['current_pos']."
>> Tambah Elemen Proyek"); $smarty->assign('current_pos',$_GET['current_pos']);
} // lets begin $smarty->display('globals/page_begin.tpl'); // navigation $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); // some clues $clues = "Data proyek sudah disimpan. Tambahkan elemen-elemen proyek dengan mengisi form dibawah ini. Pastikan data-data yang anda masukkan adalah data yang benar."; $smarty->assign('clues',$clues); $smarty->assign('boxwidth','100%'); $smarty->display('globals/clues_box.tpl'); // main content
101
$sqlx = mysql_query("SELECT *,TO_DAYS(p_enddate) - TO_DAYS(p_startdate) + 1 AS durasi FROM bo_project,bo_registered_orc WHERE p_orc = orc_id AND p_id = '$p_id' LIMIT 1");
$resx = mysql_fetch_array($sqlx);$p_title = $resx['p_title'];$p_startdate = $resx['p_startdate'];$p_enddate = $resx['p_enddate'];$p_finished = $resx['p_finished'];$p_orcid = $resx['p_orc'];$p_orcname = strval($resx['orc_lastname'].",
".$resx['orc_firstname']."@".$resx['orc_username']);$p_lastupdate = $resx['p_lastupdate'];$durasi = $resx['durasi'];mysql_free_result($sqlx);if($p_orcid == $_SESSION['xorc_id']) {
$smarty->assign('editmode','enable');} else {
$smarty->assign('editmode','disable');}
$smarty->assign('p_id',$p_id);$smarty->assign('p_title',$p_title);$smarty->assign('p_startdate',$p_startdate);$smarty->assign('p_enddate',$p_enddate);$smarty->assign('p_finished',$p_finished);$smarty->assign('p_orcname',$p_orcname);$smarty->assign('p_lastupdate',$p_lastupdate);$smarty->assign('durasi',$durasi);$smarty->display('globals/new_table.tpl');$smarty->display('globals/new_row.tpl');$smarty->display('globals/new_column.tpl');
$smarty->display('project_manager/project_detail.tpl'); $dd = date('d'); $mm = date('m'); $yy = date('Y'); $smarty->assign('dd',$dd); $smarty->assign('mm',$mm); $smarty->assign('yy',$yy); $arrorc = array(); $sqlorc = mysql_query("SELECT * FROM bo_registered_orc WHERE orc_status = '1' ORDER BY orc_lastname,orc_firstname,orc_username"); while($resorc = mysql_fetch_array($sqlorc)) { $orc = $resorc['orc_id']; $sqlm = mysql_query("SELECT COUNT(el_id) AS jml FROM bo_project_element WHERE el_orc = '$orc' AND el_accepted = '0' AND el_progress < 100"); $resm = mysql_fetch_array($sqlm); $jmlm = $resm['jml']; mysql_free_result($sqlm); $arrm = array("jmlm" => $jmlm); $sqln = mysql_query("SELECT COUNT(el_id) AS jml FROM bo_project_element WHERE el_orc = '$orc' AND el_accepted = '1' AND el_progress < 100"); $resn = mysql_fetch_array($sqln);
102
$jmln = $resn['jml']; mysql_free_result($sqln); $arrn = array("jmln" => $jmln); $arro = array_merge($resorc,$arrm,$arrn); array_push($arrorc,$arro); } mysql_free_result($sqlorc); $smarty->assign('arrorc',$arrorc); $smarty->display('project_manager/add_new_element.tpl'); $smarty->display('globals/end_column.tpl'); $smarty->display('globals/new_column.tpl'); // list of orc with their status $smarty->display('project_manager/orc_status_help.tpl'); $smarty->display('project_manager/orc_status.tpl'); //------------------------------ $smarty->display('globals/end_column.tpl'); $smarty->display('globals/end_row.tpl'); $smarty->display('globals/end_table.tpl'); $smarty->display('globals/line_break.tpl'); $arrelement = array();
$sqly = mysql_query("SELECT *,TO_DAYS(el_enddate) - TO_DAYS(el_startdate) + 1 AS durasi FROM bo_project_element,bo_registered_orc WHERE el_orc = orc_id AND el_project = '$p_id' ORDER BY el_startdate,el_enddate");
while($resy = mysql_fetch_array($sqly)) {array_push($arrelement,$resy);
}mysql_free_result($sqly);$smarty->assign('arrelement',$arrelement);$smarty-
>display('project_manager/element_detail.tpl'); // end of page $smarty->display('globals/page_end.tpl');
}// Sumber daya/*if(isset($_GET['resources'])) {
// lets begin $smarty->display('globals/page_begin.tpl'); // navigation if(isset($_GET['current_pos'])) { $user_position = $_GET['current_pos']; } else { $user_position = strval($_GET['app_label']." >> ".$_GET['menu_label']); } $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); // some clues $clues = "Disinilah tempat anda dapat melihat daftar sumber daya dan anda juga dapat menambahkan sumber daya hanya dengan mengisi form dibawah ini."; $smarty->assign('clues',$clues); $smarty->assign('boxwidth','100%'); $smarty->display('globals/clues_box.tpl'); // main content
103
$smarty->display(''); // end of page
$smarty->display('globals/page_end.tpl');}*/// pencarian proyekif(isset($_GET['find_project'])) {
$katakunci = $_POST['katakunci'];// lets begin
$smarty->display('globals/page_begin.tpl'); // navigation if(isset($_GET['current_pos'])) { $user_position = $_GET['current_pos']; } else { $user_position = strval($_GET['app_label']." >> ".$_GET['menu_label']); } $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); // some clues $clues = "Tabel dibawah ini merupakan hasil pencarian berdasar nama proyek dengan kata kunci "".$katakunci."". Untuk melihat detil dari proyek yang anda cari, silakan klik kode proyek yang bersangkutan."; $smarty->assign('clues',$clues); $smarty->assign('boxwidth','100%'); $smarty->display('globals/clues_box.tpl'); // main content $arrproject = array(); $sqlx = mysql_query("SELECT p_id,p_title,p_startdate,p_enddate,ROUND(SUM(el_progress)/COUNT(el_id)) AS total_progress,orc_firstname,orc_lastname,orc_username, TO_DAYS(p_enddate) - TO_DAYS(p_startdate) + 1 AS jml FROM bo_project,bo_project_element,bo_registered_orc WHERE p_id = el_project AND p_orc = orc_id AND p_title LIKE '%$katakunci%' GROUP BY p_id"); while($resx = mysql_fetch_array($sqlx)) { array_push($arrproject,$resx);
}mysql_free_result($sqlx);$smarty->assign('arrproject',$arrproject);$smarty->assign('katakunci',$katakunci);$smarty->assign('back_to','find_project');
$smarty->display('project_manager/search_result.tpl'); // end of page
$smarty->display('globals/page_end.tpl');}if(isset($_GET['see_details'])) {
$current_pos = $_GET['current_pos'];$p_id = $_GET['p_id'];$katakunci = $_GET['katakunci'];// lets begin
$smarty->display('globals/page_begin.tpl'); // navigation $user_position = strval($_GET['current_pos']." >> Lihat Detil Proyek"); $smarty->assign('user_position',$user_position);
104
$smarty->display('globals/navigation_box.tpl'); // some clues $clues = "Berikut ini merupakan seluruh detil dari proyek dengan kode <b>".$p_id."</b>. Apabila anda adalah <i>PIC</i> dari proyek yang dipilih, anda dapat mengubah data bagian proyek(selain dengan status "Accepted") dengan meng-klik nama bagian proyek. Untuk kembali ke halaman sebelumnya tekanlah gambar kembali di bagian bawah-kanan halaman ini."; $smarty->assign('clues',$clues); $smarty->assign('boxwidth','100%'); $smarty->display('globals/clues_box.tpl'); // main content $smarty->assign('current_pos',$current_pos);
$sqlx = mysql_query("SELECT *,TO_DAYS(p_enddate) - TO_DAYS(p_startdate) + 1 AS durasi FROM bo_project,bo_registered_orc WHERE p_orc = orc_id AND p_id = '$p_id' LIMIT 1");
$resx = mysql_fetch_array($sqlx);$p_title = $resx['p_title'];$p_startdate = $resx['p_startdate'];$p_enddate = $resx['p_enddate'];$p_finished = $resx['p_finished'];$p_orcid = $resx['p_orc'];$p_orcname = strval($resx['orc_lastname'].",
".$resx['orc_firstname']."@".$resx['orc_username']);$p_lastupdate = $resx['p_lastupdate'];$durasi = $resx['durasi'];mysql_free_result($sqlx);$smarty->assign('p_id',$p_id);$smarty->assign('p_title',$p_title);$smarty->assign('p_startdate',$p_startdate);$smarty->assign('p_enddate',$p_enddate);$smarty->assign('p_finished',$p_finished);$smarty->assign('p_orcname',$p_orcname);$smarty->assign('p_lastupdate',$p_lastupdate);$smarty->assign('durasi',$durasi);$smarty-
>display('project_manager/project_detail.tpl');if($p_orcid == $_SESSION['xorc_id']) {
$smarty->assign('editmode','enable');$smarty-
>display('project_manager/link_add_element.tpl');} else {
$smarty->assign('editmode','disable');}// ---------------------$arrelement = array();$sqly = mysql_query("SELECT *,TO_DAYS(el_enddate) -
TO_DAYS(el_startdate) + 1 AS durasi FROM bo_project_element,bo_registered_orc WHERE el_orc = orc_id AND el_project = '$p_id' ORDER BY el_startdate,el_enddate");
while($resy = mysql_fetch_array($sqly)) {array_push($arrelement,$resy);
}mysql_free_result($sqly);$smarty->assign('arrelement',$arrelement);
105
$smarty->display('project_manager/element_detail.tpl');
$smarty->display('project_manager/view_chart.tpl');// back to search result
$smarty->assign('katakunci',$katakunci); $smarty->assign('current_pos',$_GET['current_pos']); $smarty->assign('back_to',$_GET['back_to']); $smarty->display('project_manager/back_to_search_result.tpl'); // end of page
$smarty->display('globals/page_end.tpl');}if(isset($_GET['view_chart'])) {
include ("./trulogix/jpgraph/src/jpgraph.php");include ("./trulogix/jpgraph/src/jpgraph_gantt.php");// gantt chart begin here$graph = new GanttGraph (0,0, "auto");// ----------------------------------------------$mp = array(); // main project$mc = array(); // main constraint$ep = array(); // element progress$i = 0;$p_id = $_GET['p_id'];$sqlx = mysql_query("SELECT *,TO_DAYS(p_enddate) -
TO_DAYS(p_startdate) + 1 AS durasi FROM bo_project WHERE p_id = '$p_id' LIMIT 1");
$resx = mysql_fetch_array($sqlx);$p_title = $resx['p_title'];$p_startdate = $resx['p_startdate'];$p_enddate = $resx['p_enddate'];$p_finished = $resx['p_finished'];$p_orcid = $resx['p_orc'];$p_lastupdate = $resx['p_lastupdate'];$durasi = $resx['durasi'];mysql_free_result($sqlx);// title$thetitle = strval("Kode : ".$p_id);$graph->title->Set($thetitle);$graph->subtitle->Set($p_title);$graph->SetMarginColor('#f4f4f4');$graph->SetBox(true,'#f4f4f4',1);$graph->SetFrame(true,'#f4f4f4',1);$graph->scale->divider->SetColor('#000000');$graph->scale->dividerh->SetColor('#000000');$graph->scale->tableTitle->Set('Proyek');$graph->scale->SetTableTitleBackground('#cccccc');$graph->scale->tableTitle->Show(true);$graph->ShowHeaders(GANTT_HDAY|GANTT_HWEEK|
GANTT_HMONTH);$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY2);$graph->scale->week->SetFont(FF_FONT0);$graph->scale->month-
>SetStyle(MONTHSTYLE_LONGNAMEYEAR4);$graph->scale->month->SetFontColor("white");$graph->scale->month->SetBackgroundColor("#456aac");// add main project
106
$mpx = array($i,ACTYPE_GROUP,$p_title,$p_startdate,$p_enddate,"");
array_push($mp,$mpx);$i++;//elemen proyek$sqly = mysql_query("SELECT * FROM bo_project_element
WHERE el_project = '$p_id'");$rowy = mysql_num_rows($sqly);while($resy = mysql_fetch_array($sqly)) {
$arrelement = array($i,ACTYPE_NORMAL," ".$resy['el_title'],$resy['el_startdate'],$resy['el_enddate'],$resy['el_progress']."%");
array_push($mp,$arrelement);$arrep = array($i,($resy['el_progress']/100));array_push($ep,$arrep);$i++;
}mysql_free_result($sqly);// add milestone(today)if($p_enddate >= date('Y-m-d')) {
$arrtoday = array($i,ACTYPE_MILESTONE,"",date('Y-m-d'),"Hari ini");
array_push($mp,$arrtoday);$i++;
}if($p_finished != "0000-00-00") {
$arrfinished = array($i,ACTYPE_MILESTONE," Selesai",$p_finished,date_translator($p_finished));
array_push($mp,$arrfinished);$i++;
}$graph->CreateSimple($mp,$mc,$ep);// Display the gantt chart$graph->Stroke();
}} else {
$smarty->display('trulogix_login/empty_page.tpl');}?>
Dengan mengamati kode program diatas dapat dilihat
bahwa menu Project Manager ini terbagi menjadi delapan bagian
yaitu: bagian yang membagi frame tengah menjadi dua secara
vertikal, bagian yang memuat sub-menu, bagian yang digunakan
untuk menampilkan halaman depan, bagian yang digunakan
untuk memasukkan data proyek baru, bagian yang digunakan
untuk memasukkan data elemen-elemen proyek, bagian yang
digunakan untuk menampilkan hasil pencarian proyek, bagian
107
untuk melihat detil proyek dan bagian yang digunakan untuk
melihat detil proyek yang digambarkan dengan gantt chart.
Berikut ini merupakan penjelasan dari bagian-bagian yang telah
disebutkan diatas:
Halaman utama.
Perintah-perintah yang terdapat pada bagian ini
adalah menjalankan dan menampilkan hasil dari query yang
mengambil semua data proyek yang belum selesai(prosentase
perkembangan proyek secara keseluruhan kurang dari 100%)
dan semua data pengguna sistem aktif beserta beban
kegiatannya(jumlah kegiatan dalam status ditawarkan dan
status diterima).
Proyek baru.
Bagian ini berisi perintah untuk memunculkan form
untuk memasukkan data proyek baru. Data-data yang diisikan
dalam form tersebut adalah judul proyek, tanggal mulai dan
tanggal jatuh tempo proyek. Setelah tombol submit dalam
form ini ditekan, akan dimunculkan form untuk memasukkan
data-data elemen/bagian proyek dari proyek inti yang baru
saja disimpan dalam tabel bo_project tersebut.
108
Elemen-elemen proyek.
Bagian ini akan dijalankan setelah tombol submit
dalam form input proyek baru ditekan atau link tambah
elemen pada lihat detil proyek ditekan. Perintah-perintah
yang terdapat dalam bagian ini adalah:
Menjalankan query untuk menyimpan data proyek inti
yang dimasukkan melalui form input proyek baru ke
dalam tabel bo_project. Kode proyek yang menjadi
primary-key akan dihasilkan secara otomatis dengan
format [tahun tanggal mulai]–[urutan masuk proyek
dalam tahun tersebut](yyyy-#####).
Menjalankan query untuk mengambil data pengguna
sistem aktif beserta beban kegiatannya. Hasil dari query
ini akan ditampilkan sebagai drop-down dalam form
input elemen/bagian proyek dan daftar pengguna sistem
yang ditampilkan disebelah kiri form tersebut. Daftar
tersebut berguna sebagai acuan pertimbangan dalam
memberikan pekerjaan kepada seorang pengguna sistem
karena didalamnya juga ditampilkan jumlah kegiatan
yang masih dalam status ditawarkan dan jumlah kegiatan
yang sudah diterima dan belum selesai dikerjakan.
Menampilkan form input elemen/bagian dari proyek.
Data-data yang dimasukkan adalah pengguna sistem yang
109
ditunjuk, nama kegiatan, tanggal mulai dan tanggal jatuh
tempo.
Menjalankan query untuk menyimpan data bagian proyek
baru yang diisikan melalui form input data bagian proyek
ke dalam tabel bo_project_element.
Menjalankan query untuk mengambil data-data elemen
proyek tersebut yang sudah disimpan dalam tabel
bo_project_element. Baris bagian proyek yang status
diterimanya bernilai offered atau rejected, kolom “Bagian
Proyek” berisi link untuk mengedit data. Baris elemen
proyek yang status diterimanya sudah bernilai accepted
tidak bisa dirubah datanya(selain progress kegiatan
melalui menu kegiatan oleh pengguna sistem yang
ditunjuk).
Menampilkan form untuk mengubah data bagian proyek
yang dipilih melalui link untuk mengubah data bagian
proyek.
Menjalankan query untuk mengupdate data bagian proyek
yang diedit melalui form edit bagian proyek.
Pencarian proyek.
Bagian ini dijalankan apabila pengguna sistem
menggunakan form pencarian proyek yang terletak di
samping kiri. Perintah yang terdapat dalam bagian ini adalah
menjalankan kemudian menampilkan hasil dari query yang
110
mengambil semua data dari tabel bo_project yang namanya
seperti nilai variabel $katakunci. Data yang ditampilkan
diurutkan berdasarkan kode proyek. Kolom “Kode Proyek”
pada hasil pencarian berisi link yang digunakan untuk melihat
secara detil dari proyek yang dipilih.
Lihat detil proyek.
Bagian ini berisi perintah yang menjalankan query
yang mengambil data dari tabel bo_project dan
bo_project_element dimana ID proyek sama dengan nilai
variabel $p_id. Link-link untuk menambah bagian proyek
dan mengedit data bagian proyek hanya akan muncul jika
user-ID dari pengguna sistem tersebut sama dengan nilai dari
kolom p_orc dalam tabel bo_project.
Gantt-chart proyek.
Perintah-perintah dalam bagian ini pada hakikatnya
adalah sama dengan perintah-perintah yang terdapat dalam
bagian lihat detil proyek, perbedaan yang ada diantara
keduanya adalah pada outputnya. Bagian lihat detil proyek
menghasilkan data-data tentang sebuah proyek dengan basis
text sedangkan bagian ini menghasilkan informasi tersebut
dengan basis gambar gantt-chart. Untuk menghasilkan
gambar tersebut penulis menggunakan plug-in jpgraph yang
terletak di ./bluoctopus/trulogix/jpgraph. Dalam proses
pembangunan aplikasi ini penulis menggunakan PHP versi 5
111
maka plug-in yang digunakan tersebut hanya akan berjalan
pada PHP versi 5 dan tidak akan berkerja pada PHP versi 4.
IV.2.8 Admin
Menu ini digunakan untuk memasukkan dan meng-
konfigurasi pengguna sistem, grup pengguna sistem dan
pengumuman yang akan ditampilkan pada halaman home setiap
pengguna sistem. Tampilan, kode perintah dan penjelasan dari
menu ini adalah seperti dibawah ini.
Gambar IV.19 Halaman utama, Form update pengumuman
112
Gambar IV.20 Konfigurasi pengguna sistem
Gambar IV.21 Seting grup pengguna sistem
Berikut ini merupakan kode perintah menu Admin yang
disimpan dalam file admin_index.php.
<?phpsession_start();require_once 'core/config/config.inc.php';if((isset($_SESSION['xsessid'])) && (isset($_SESSION['xorc_id']))) {
$smarty->assign('session_target',$_SESSION['xsessid']);if(isset($_GET['app_start'])) {
113
$smarty->assign('app_id',$_GET['app_id']);$smarty->assign('app_label',$_GET['app_label']);// cari label menu default dari aplikasi ini untuk
ditampilkan$appid = $_GET['app_id'];$sqlx = mysql_query("SELECT * FROM bo_registered_menu
WHERE menu_default = '1' AND menu_app = '$appid' LIMIT 1");$resx = mysql_fetch_array($sqlx);$smarty->assign('menu_label',$resx['menu_label']);$smarty->display('admin/index.tpl');
}if(isset($_GET['app_nav'])) {
$xorcid = $_SESSION['xorc_id'];$appid = $_GET['app_id'];$arrmenukb = array();$sqlx = mysql_query("SELECT
menu_id,menu_action_file,menu_label FROM bo_registered_menu,bo_registered_access_menu WHERE menu_id = am_menu AND am_orc = '$xorcid' AND am_status = '1' AND menu_app = '$appid' ORDER BY menu_id");
while($resx = mysql_fetch_array($sqlx)) {array_push($arrmenukb,$resx);
}mysql_free_result($sqlx);$smarty->assign('arrmenukb',$arrmenukb);$smarty->assign('app_label',$_GET['app_label']);$smarty->display('admin/navigator.tpl');
}// halaman utama :: Admin's Home + Mainscreen Message
settingif(isset($_GET['app_home'])) {
if(isset($_POST['submit_new_msg'])) { $content = $_POST['msg_content']; $sqly = mysql_query("SELECT * FROM bo_message LIMIT 1"); $rowy = mysql_num_rows($sqly); if($rowy < 1) { $insmsg = mysql_query("INSERT INTO bo_message(msg_content) VALUES('$content')"); } else { $insmsg = mysql_query("UPDATE bo_message SET msg_content = '$content'"); } mysql_free_result($sqly); }
// lets begin $smarty->display('globals/page_begin.tpl'); // navigation if(isset($_GET['current_pos'])) { $user_position = $_GET['current_pos']; } else { $user_position = strval($_GET['app_label']." >> ".$_GET['menu_label']); } $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl');
114
// some clues $clues = "Selamat datang di menu aplikasi Admin. Gunakan menu-menu disamping kiri anda sebijaksana mungkin, karena kalau tidak akan berakibat fatal pada sistem anda secara keseluruhan. Form dibawah ini digunakan untuk mengisi pesan dan akan ditampilkan di <b>Home</b> setiap <i>user</i> yang login ke sistem anda.<br>Selamat bekerja."; $smarty->assign('clues',$clues); $smarty->assign('boxwidth','100%'); $smarty->display('globals/clues_box.tpl'); // main content $sqlx = mysql_query("SELECT * FROM bo_message LIMIT 1"); $rowx = mysql_num_rows($sqlx); if($rowx < 1) { $xmsg = "Tidak ada pengumuman"; } else { $resx = mysql_fetch_array($sqlx); $xmsg = $resx['msg_content']; } mysql_free_result($sqlx); $smarty->assign('xmsg',$xmsg); $smarty->display('admin/mainscreen_msg_form.tpl'); // end of page
$smarty->display('globals/page_end.tpl');}// kofigurasi userif(isset($_GET['user_accounts'])) {
if(isset($_GET['resetpswd'])) { $orc_id = $_GET['orc_id']; $resetx = mysql_query("UPDATE bo_registered_orc SET orc_password = MD5('qwerty') WHERE orc_id = '$orc_id' LIMIT 1"); } if(isset($_GET['xstat'])) { $orc_id = $_GET['orc_id']; $orc_stat = $_GET['xstat']; $resetx = mysql_query("UPDATE bo_registered_orc SET orc_status = '$orc_stat' WHERE orc_id = '$orc_id' LIMIT 1"); } if(isset($_POST['submit_new_user'])) { $firstname = $_POST['firstname']; $lastname = $_POST['lastname']; $emailaddr = $_POST['emailaddr']; $usrgroup = $_POST['usrgroup']; $usrname = $_POST['usrname']; $usrpswd1 = $_POST['usrpswd1']; $usrpswd2 = $_POST['usrpswd2']; $app_add = $_POST['app_add']; $menu_add_1 = $_POST['menu_add_1']; $menu_add_2 = $_POST['menu_add_2']; $app_todolist = $_POST['app_todolist']; $menu_todo_1 = $_POST['menu_todo_1']; $menu_todo_2 = $_POST['menu_todo_2']; $app_email = $_POST['app_email']; $menu_email_1 = $_POST['menu_email_1']; $menu_email_2 = $_POST['menu_email_2'];
115
$app_file = $_POST['app_file']; $menu_file_1 = $_POST['menu_file_1']; $menu_file_2 = $_POST['menu_file_2']; $app_project = $_POST['app_project']; $menu_project_1 = $_POST['menu_project_1']; $menu_project_2 = $_POST['menu_project_2']; $menu_project_3 = $_POST['menu_project_3']; $app_admin = $_POST['app_admin']; $menu_admin_1 = $_POST['menu_admin_1']; $menu_admin_2 = $_POST['menu_admin_2']; $menu_admin_3 = $_POST['menu_admin_3']; $menu_admin_4 = $_POST['menu_admin_4']; $menu_admin_5 = $_POST['menu_admin_5']; $menu_admin_6 = $_POST['menu_admin_6']; $app_poll = $_POST['app_poll']; $menu_poll_1 = $_POST['menu_poll_1']; $menu_poll_2 = $_POST['menu_poll_2']; $app_artikel = $_POST['app_artikel']; $menu_artikel_1 = $_POST['menu_artikel_1']; $menu_artikel_2 = $_POST['menu_artikel_2']; $menu_artikel_3 = $_POST['menu_artikel_3']; $app_system = $_POST['app_system']; // cek apakah sudah ada yang menggunakan username tersebut. $sqlx = mysql_query("SELECT * FROM bo_registered_orc WHERE orc_username = '$usrname' LIMIT 1"); $rowx = mysql_num_rows($sqlx); if($rowx < 1) { $insorc = mysql_query("INSERT INTO bo_registered_orc(orc_username,orc_password,orc_firstname,orc_lastname,orc_group,orc_email,orc_status) VALUES('$usrname',MD5('$usrpswd1'),UCASE('$firstname'),UCASE('$lastname'),'$usrgroup','$emailaddr','1')"); $xorcid = mysql_insert_id(); $ins_app_1 = mysql_query("INSERT INTO bo_registered_access(access_orc,access_app,access_status) VALUES('$xorcid','1','$app_admin')"); $ins_app_2 = mysql_query("INSERT INTO bo_registered_access(access_orc,access_app,access_status) VALUES('$xorcid','2','$app_add')"); $ins_app_3 = mysql_query("INSERT INTO bo_registered_access(access_orc,access_app,access_status) VALUES('$xorcid','3','$app_todolist')"); $ins_app_4 = mysql_query("INSERT INTO bo_registered_access(access_orc,access_app,access_status) VALUES('$xorcid','4','$app_email')"); $ins_app_5 = mysql_query("INSERT INTO bo_registered_access(access_orc,access_app,access_status) VALUES('$xorcid','5','$app_file')"); $ins_app_6 = mysql_query("INSERT INTO bo_registered_access(access_orc,access_app,access_status) VALUES('$xorcid','6','$app_artikel')"); $ins_app_7 = mysql_query("INSERT INTO bo_registered_access(access_orc,access_app,access_status) VALUES('$xorcid','7','$app_poll')");
116
$ins_app_8 = mysql_query("INSERT INTO bo_registered_access(access_orc,access_app,access_status) VALUES('$xorcid','8','$app_project')"); $ins_app_9 = mysql_query("INSERT INTO bo_registered_access(access_orc,access_app,access_status) VALUES('$xorcid','9','$app_system')"); $ins_menu_11 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','6','$menu_admin_1')"); $ins_menu_12 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','7','$menu_admin_2')"); $ins_menu_13 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','8','$menu_admin_3')"); $ins_menu_14 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','9','$menu_admin_4')"); $ins_menu_15 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','10','$menu_admin_5')"); $ins_menu_16 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','11','$menu_admin_6')"); $ins_menu_21 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','21','$menu_add_1')"); $ins_menu_22 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','22','$menu_add_2')"); $ins_menu_31 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','19','$menu_todo_1')"); $ins_menu_32 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','20','$menu_todo_2')"); $ins_menu_41 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','17','$menu_email_1')"); $ins_menu_42 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','18','$menu_email_2')"); $ins_menu_51 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','15','$menu_file_1')"); $ins_menu_52 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','16','$menu_file_2')"); $ins_menu_61 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','1','$menu_artikel_1')"); $ins_menu_62 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','2','$menu_artikel_2')");
117
$ins_menu_63 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','3','$menu_artikel_3')"); $ins_menu_71 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','4','$menu_poll_1')"); $ins_menu_72 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','5','$menu_poll_2')"); $ins_menu_81 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','12','$menu_project_1')"); $ins_menu_82 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','13','$menu_project_2')"); $ins_menu_83 = mysql_query("INSERT INTO bo_registered_access_menu(am_orc,am_menu,am_status) VALUES('$xorcid','14','$menu_project_3')"); } }
// lets begin $smarty->display('globals/page_begin.tpl'); // navigation if(isset($_GET['current_pos'])) { $user_position = $_GET['current_pos']; } else { $user_position = strval($_GET['app_label']." >> ".$_GET['menu_label']); } $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); // some clues $clues = "Disinilah tempat anda mengkonfigurasi pengguna sistem Anda. Isilah form dibawah ini untuk memasukkan data pengguna sistem baru. Anda dapat melihat seluruh data pengguna sistem anda pada tabel dibawah ini.<br>Gunakan fasilitas ini sebijaksana mungkin dan selamat bekerja."; $smarty->assign('clues',$clues); $smarty->assign('boxwidth','100%'); $smarty->display('globals/clues_box.tpl'); // main content $arrorc = array(); // daftar pengguna sistem $sqly = mysql_query("SELECT bo_registered_orc.*,bo_registered_orc_group.* FROM bo_registered_orc,bo_registered_orc_group WHERE orc_group = group_id"); while($resy = mysql_fetch_array($sqly)) { array_push($arrorc,$resy); } mysql_free_result($sqly); $smarty->assign('arrorc',$arrorc); $smarty->display('admin/daftar_user.tpl');
$arrgroup = array(); // dd group user $sqlx = mysql_query("SELECT * FROM bo_registered_orc_group");
118
while($resx = mysql_fetch_array($sqlx)) { array_push($arrgroup,$resx); } mysql_free_result($sqlx); $smarty->assign('arrgroup',$arrgroup); $smarty->display('admin/user_account_form.tpl'); // end of page
$smarty->display('globals/page_end.tpl');}// konfigurasi grup userif(isset($_GET['user_groups'])) {
if(isset($_POST['submit_new_group'])) { $group_name = $_POST['group_name']; $insgroup = mysql_query("INSERT INTO bo_registered_orc_group(group_name) VALUES('$group_name')"); } if(isset($_POST['submit_upd_group'])) { $group_name = $_POST['group_name']; $group_id = $_POST['group_id']; $updgroup = mysql_query("UPDATE bo_registered_orc_group SET group_name = '$group_name' WHERE group_id = '$group_id'"); } if(isset($_GET['delete_group'])) { $group_id = $_GET['delete_group']; $delgroup = mysql_query("DELETE FROM bo_registered_orc_group WHERE group_id = '$group_id'"); } if(isset($_GET['edit_group'])) { $xgroup_id = $_GET['edit_group']; $xgroup_name = $_GET['group_name']; $smarty->assign('xgroup_id',$xgroup_id); $smarty->assign('xgroup_name',$xgroup_name); $smarty->assign('form_mode','edit_form'); } else { $smarty->assign('form_mode','input_form'); }
// lets begin $smarty->display('globals/page_begin.tpl'); // navigation if(isset($_GET['current_pos'])) { $user_position = $_GET['current_pos']; } else { $user_position = strval($_GET['app_label']." >> ".$_GET['menu_label']); } $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); // some clues $clues = "Disinilah tempat anda men-seting data grup pengguna sistem. Gunakan form dibawah ini untuk memasukkan data. Data yang sudah ada saat pertama kali adalah "Sistem Administrator""; $smarty->assign('clues',$clues); $smarty->assign('boxwidth','100%'); $smarty->display('globals/clues_box.tpl');
119
// main content $smarty->display('admin/group_form.tpl'); $arrgroup = array(); $sqlx = mysql_query("SELECT * FROM bo_registered_orc_group ORDER BY group_id"); while($resx = mysql_fetch_array($sqlx)) { array_push($arrgroup,$resx); } mysql_free_result($sqlx); $smarty->assign('arrgroup',$arrgroup); $smarty->display('admin/group_list.tpl'); // end of page
$smarty->display('globals/page_end.tpl');}
} else {$smarty->display('trulogix_login/empty_page.tpl');
}?>
Dengan mengamati kode program diatas dapat dilihat
bahwa menu Admin ini terbagi menjadi lima bagian yaitu:
bagian yang membagi frame tengah menjadi dua secara vertikal,
bagian yang memuat sub-menu, bagian yang digunakan untuk
menampilkan halaman utama, bagian yang digunakan untuk
mengkonfigurasi pengguna sistem dan bagian yang digunakan
untuk mengkonfigurasi grup pengguna sistem. Berikut ini
merupakan penjelasan dari bagian-bagian yang telah disebutkan
diatas:
Halaman utama.
Perintah-perintah yang terdapat dalam bagian ini
adalah menampilkan form untuk mengubah pengumuman
yang ditampilkan pada halaman home setiap pengguna
sistem, menjalankan query untuk mengupdate kolom
msg_content sama dengan nilai variabel $content pada tabel
bo_message dan menjalankan query untuk melihat isi tabel
120
bo_message dan ditampilkan sebagai pengumuman yang ada
di dalam basis data. Apabila tabel bo_message tidak ada
isinya maka pengumuman akan diberi nilai default sama
dengan “Tidak ada pengumuman”.
Konfigurasi pengguna sistem.
Bagian ini akan menampilkan semua pengguna sistem
yang ada dalam tabel bo_registered_orc dan form untuk
memasukkan pengguna sistem baru beserta hak akses menu
dan sub-menunya. Dalam daftar pengguna sistem terdapat
link untuk me-reset password, fasilitas ini digunakan untuk
mengantisipasi apabila ada pengguna sistem yang lupa
dengan passwordnya. Apabila link ini ditekan maka password
dari pengguna sistem yang dipilih akan bernilai sama dengan
“qwerty”. Selain itu ada link untuk mengubah status aktif
atau non-aktif dari pengguna sistem. Pengguna sistem dengan
status non-aktif tidak akan bisa login ke sistem. Data diri
pengguna sistem yang dimasukkan melalui form input
pengguna sistem baru tersebut akan disimpan dalam tabel
bo_registered_orc. Seorang administrator atau pengguna
sistem yang mempunyai hak akses atas menu ini bisa
menentukan hak akses dari pengguna sistem baru yang
dimasukkannya dengan menekan checkbok menu dan sub-
menu yang terdapat pada form.
Konfigurasi grup pengguna sistem.
121
Perintah-perintah yang terdapat dalam bagian ini
adalah manampilkan form untuk memasukkan data grup
pengguna sistem baru, menyimpan data grup pengguna
sistem yang dimasukkan melalui form tersebut diatas,
menjalankan query untuk mengambil seluruh data grup
pengguna sistem yang terdapat dalam tabel
bo_registered_orc_group, menjalankan query untuk
mengupdate data grup pengguna sistem dan menjalankan
query untuk menghapus data grup pengguna sistem dari tabel
bo_registered_orc_group.
IV.2.9 Polls
Menu Polls digunakan sebagai fasilitas untuk
pemungutan suara. Disini pengguna sistem dapat memberikan
suaranya dengan memilih salah satu jawaban yang tersedia pada
sebuah pertanyaan. Pengguna sistem yang sudah memilih
jawaban tidak bisa memilih jawaban lagi. Tabel yang digunakan
dalam basis data adalah bo_poll_questions, bo_poll_answers dan
bo_poll_vote. Tampilan, kode perintah dan penjelasan dari menu
ini adalah seperti dibawah ini.
122
Gambar IV.22 Lihat poll-poll dan hasil-hasilnya
Gambar IV.23 Seting poll
123
Berikut ini merupakan kode perintah menu Polls yang
disimpan dalam file polls_index.php.
<?phpsession_start();require_once 'core/config/config.inc.php';require_once 'core/config/core.inc.php';if((isset($_SESSION['xsessid'])) && (isset($_SESSION['xorc_id']))) {
$smarty->assign('session_target',$_SESSION['xsessid']);if(isset($_GET['app_start'])) {
$smarty->assign('app_id',$_GET['app_id']);$smarty->assign('app_label',$_GET['app_label']);// cari label menu default dari aplikasi ini untuk
ditampilkan$appid = $_GET['app_id'];$sqlx = mysql_query("SELECT * FROM bo_registered_menu
WHERE menu_default = '1' AND menu_app = '$appid' LIMIT 1");$resx = mysql_fetch_array($sqlx);$smarty->assign('menu_label',$resx['menu_label']);$smarty->display('polls/index.tpl');
}if(isset($_GET['app_nav'])) {
$xorcid = $_SESSION['xorc_id'];$appid = $_GET['app_id'];$arrmenukb = array();$sqlx = mysql_query("SELECT
menu_id,menu_action_file,menu_label FROM bo_registered_menu,bo_registered_access_menu WHERE menu_id = am_menu AND am_orc = '$xorcid' AND am_status = '1' AND menu_app = '$appid' ORDER BY menu_id");
while($resx = mysql_fetch_array($sqlx)) {array_push($arrmenukb,$resx);
}mysql_free_result($sqlx);$smarty->assign('arrmenukb',$arrmenukb);$smarty->assign('app_label',$_GET['app_label']);$smarty->display('polls/navigator.tpl');
}// Poll dan Hasilnyaif(isset($_GET['polls_and_results'])) {
if(isset($_POST['submitanswer'])) { $xorcid = $_SESSION['xorc_id']; $answer = $_POST['answer']; $insans = mysql_query("INSERT INTO bo_poll_vote(pv_orc,pv_vote) VALUES('$xorcid','$answer')"); }
$smarty->display('globals/page_begin.tpl');if(isset($_GET['current_pos'])) {
$user_position = $_GET['current_pos']; } else { $user_position = strval($_GET['app_label']." >> ".$_GET['menu_label']); }
124
$smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl');
$arrpoll = array(); // create tabel temp untuk menampung data hasil polling $create_a = mysql_query("CREATE TABLE `poll_temp_a` ( `a_id` smallint(5) unsigned NOT NULL, `a_question` smallint(6) NOT NULL default '0', `a_answer` text NOT NULL, `a_vote` smallint(6) NOT NULL default '0', PRIMARY KEY (`a_id`)) TYPE=MyISAM;"); $create_b = mysql_query("CREATE TABLE `poll_temp_b` ( `b_id` smallint(5) unsigned NOT NULL auto_increment, `b_answer` smallint(6) NOT NULL default '0', `b_vote` smallint(6) NOT NULL default '0', PRIMARY KEY (`b_id`)) TYPE=MyISAM;"); $ins_a = mysql_query("INSERT INTO poll_temp_a(a_id,a_question,a_answer) SELECT pa_id,pa_question,pa_answer FROM bo_poll_questions,bo_poll_answers WHERE pq_id = pa_question AND (pq_status = '2' OR pq_status = '3')"); $ins_b = mysql_query("INSERT INTO poll_temp_b(b_answer,b_vote) SELECT pa_id,COUNT(pv_vote) FROM bo_poll_questions,bo_poll_answers,bo_poll_vote WHERE pq_id = pa_question AND (pq_status = '2' OR pq_status = '3') AND pa_id = pv_vote GROUP BY pa_id"); $upd_a = mysql_query("UPDATE poll_temp_a,poll_temp_b SET a_vote = b_vote WHERE a_id = b_answer"); // data pertanyaan yang masih dipublikasikan
$sqlx = mysql_query("SELECT bo_registered_orc.*,bo_poll_questions.* FROM bo_poll_questions,bo_registered_orc WHERE orc_id = pq_creator AND (pq_status = '2' OR pq_status = '3') ORDER BY pq_id DESC");
while($resx = mysql_fetch_array($sqlx)) { $poll_id = $resx['pq_id']; $sqlz = mysql_query("SELECT SUM(a_vote) FROM poll_temp_a WHERE a_question = '$poll_id'"); $resz = mysql_fetch_row($sqlz); $jmlz = $resz[0]; mysql_free_result($sqlz); $result_box = "<table cellspacing='1' cellpadding='1'>"; $sqly = mysql_query("SELECT * FROM poll_temp_a WHERE a_question = '$poll_id'"); while($resy = mysql_fetch_array($sqly)) { $persen = round(($resy['a_vote']/$jmlz) * 100); $barx = "<img height='16' src='trulogix/phpsysinfo/templates/bulix/images/bar_left.gif'>"; for($i = 0;$i <= $persen; $i++) { $barx = strval($barx."<img height='16' src='trulogix/phpsysinfo/templates/bulix/images/bar_middle.gif'><img height='16' src='trulogix/phpsysinfo/templates/bulix/images/bar_middle.gif'><img height='16' src='trulogix/phpsysinfo/templates/bulix/images/bar_middle.gif'>"); }
125
$barx = strval($barx."<img height='16' src='trulogix/phpsysinfo/templates/bulix/images/bar_right.gif'>"); $result_box = strval($result_box."<tr><td width='200' nowrap class='f4f4f4'>".$resy['a_answer']."</td><td nowrap align='' class='ffffff'>".$barx."</td><td nowrap align='right' class='ffffff'>(".number_format((($resy['a_vote']/$jmlz) * 100),1,",",".")." %)</td><td nowrap align='right' class='ffffff'>".number_format($resy['a_vote'],0,",",".")." Pemilih</td></tr>"); } mysql_free_result($sqly); $result_box = strval($result_box."</table>"); $arr_result = array("pq_result" => $result_box); $arr_x = array_merge($arr_result,$resx); array_push($arrpoll,$arr_x);
}mysql_free_result($sqlx);$smarty->assign('arrpoll',$arrpoll);$smarty->display('polls/daftar_poll.tpl');// drop temp table
$droptemptable = mysql_query("DROP TABLE poll_temp_a,poll_temp_b");
$smarty->display('globals/page_end.tpl');}// vote pollif(isset($_GET['vote_poll'])) {
$xorcid = $_SESSION['xorc_id']; $poll_id = $_GET['vote_poll']; $user_position = strval($_GET['current_pos']." >> Pilih Pilihan"); $smarty->display('globals/page_begin.tpl'); $smarty->assign('user_position',$user_position); $smarty->assign('current_pos',$_GET['current_pos']); $smarty->display('globals/navigation_box.tpl'); // cek apakah sudah pernah memilih $sqlx = mysql_query("SELECT pv_vote FROM bo_poll_questions,bo_poll_answers,bo_poll_vote WHERE pq_id = pa_question AND pa_id = pv_vote AND pv_orc = '$xorcid' AND pq_id = '$poll_id'"); $rowx = mysql_num_rows($sqlx); mysql_free_result($sqlx); // data pertanyaan $arrquestion = array(); $sqly = mysql_query("SELECT * FROM bo_poll_questions WHERE pq_id = '$poll_id'"); $resy = mysql_fetch_array($sqly); array_push($arrquestion,$resy); mysql_free_result($sqly); // data jawaban $arranswers = array(); $sqlz = mysql_query("SELECT * FROM bo_poll_answers WHERE pa_question = '$poll_id'"); while($resz = mysql_fetch_array($sqlz)) { array_push($arranswers,$resz); }
126
mysql_free_result($sqlz); if($rowx > 0) { // sudah memilih $smarty->assign('formx','disable'); } else { // belum memilih $smarty->assign('formx','enable'); } $smarty->assign('arrquestion',$arrquestion); $smarty->assign('arranswers',$arranswers); $smarty->display('polls/vote_form.tpl'); $smarty->display('globals/page_end.tpl');
}// Poll setting -> Show and add questions with their answersif(isset($_GET['polls_setting'])) {
if(isset($_POST['submitupdatequestion'])) { $poll_id = $_POST['poll_id']; $question = $_POST['question']; $updquestion = mysql_query("UPDATE bo_poll_questions SET pq_question = '$question' WHERE pq_id = '$poll_id' LIMIT 1"); optimize_table($db_core,'bo_poll_questions'); } if(isset($_POST['submitupdateanswer'])) { $answer_id = $_POST['answer_id']; $answer = $_POST['answer']; $updanswer = mysql_query("UPDATE bo_poll_answers SET pa_answer = '$answer' WHERE pa_id = '$answer_id' LIMIT 1"); optimize_table($db_core,'bo_poll_answers'); } if(isset($_GET['delete_answer'])) { $answeridtodelete = $_GET['delete_answer']; $delanswer = mysql_query("DELETE FROM bo_poll_answers WHERE pa_id = '$answeridtodelete' LIMIT 1"); optimize_table($db_core,'bo_poll_answers'); } if(isset($_GET['set_poll'])) { $poll_id_to_upd = $_GET['set_poll']; $x = $_GET['set_to']; $updstat = mysql_query("UPDATE bo_poll_questions SET pq_status = $x WHERE pq_id = '$poll_id_to_upd' LIMIT 1"); optimize_table($db_core,'bo_poll_questions'); } $smarty->display('globals/page_begin.tpl'); if(isset($_GET['current_pos'])) { $user_position = $_GET['current_pos']; } else { $user_position = strval($_GET['app_label']." >> ".$_GET['menu_label']); } $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); $clues = 'Tabel dibawah ini adalah daftar pertanyaan yang belum dihapus dari basis data. Pada baris "Status", yang aktif akan berwarna hijau, anda dapat mengaturnya dengan menekan link yang tersedia.<br><b>Level 1</b> adalah status dari pertanyaan yang baru dibuat dan belum dipublikasikan.<br><b>Level
127
2</b> adalah status pertanyaan yang sudah dipublikasikan.<br><b>Level 3</b> adalah status pertanyaan yang sudah tidak menerima jawaban lagi tapi masih dipublikasikan.<br>Untuk menambahkan pertanyaan gunakan form dibawah daftar pertanyaan.'; $smarty->assign('clues',$clues); $smarty->assign('boxwidth','100%'); $smarty->display('globals/clues_box.tpl'); // data semua pertanyaan
$arrpoll = array(); $sqlx = mysql_query("SELECT bo_registered_orc.*,bo_poll_questions.* FROM bo_poll_questions,bo_registered_orc WHERE orc_id = pq_creator AND pq_status != '4' ORDER BY pq_id DESC");
while($resx = mysql_fetch_array($sqlx)) { $poll_id = $resx['pq_id']; $result_box = "<table cellspacing='1' cellpadding='1'>"; $sqly = mysql_query("SELECT * FROM bo_poll_answers WHERE pa_question = '$poll_id'"); while($resy = mysql_fetch_array($sqly)) { $result_box = strval($result_box."<tr><td nowrap class='ffffff' valign='top'>•</td><td width='200' nowrap class='ffffff' valign='top'>".$resy['pa_answer']."</td><td valign='top' class='f4f4f4' width='50' align='center'><a href='polls_index.php?edit_answer=1&xpoll_id=".$resx['pq_id']."&xquestion=".$resx['pq_question']."&xanswer_id=".$resy['pa_id']."&xanswer=".$resy['pa_answer']."&current_pos=".$user_position."'>Ubah</a></td><td valign='top' class='f4f4f4' width='50' align='center'><a href='polls_index.php?polls_setting=1&delete_answer=".$resy['pa_id']."&current_pos=".$user_position."'>Hapus</a></td></tr>"); } mysql_free_result($sqly); $result_box = strval($result_box."</table>"); $arr_result = array("answers" => $result_box); $arr_x = array_merge($arr_result,$resx); array_push($arrpoll,$arr_x);
}mysql_free_result($sqlx);$smarty->assign('arrpoll',$arrpoll);
$smarty->display('polls/daftar_poll_to_maintain.tpl'); $smarty->display('polls/question_form.tpl');
$smarty->display('globals/page_end.tpl');}// Add answer on a questionif(isset($_GET['add_answer'])) {
if(isset($_POST['submitquestion'])) { $question = $_POST['question']; $xorcid = $_SESSION['xorc_id']; $insquestion = mysql_query("INSERT INTO bo_poll_questions(pq_question,pq_creator,pq_created) VALUES('$question','$xorcid',NOW())"); $poll_id = mysql_insert_id(); }
128
if(isset($_POST['submitanswer'])) { $poll_id = $_POST['poll_id']; $question = $_POST['question']; $answer = $_POST['answer']; $insanswer = mysql_query("INSERT INTO bo_poll_answers(pa_question,pa_answer) VALUES('$poll_id','$answer')"); } if(isset($_GET['xpoll_id'])) { $poll_id = $_GET['xpoll_id']; $question = $_GET['xquestion']; } $smarty->display('globals/page_begin.tpl'); $user_position = strval($_GET['current_pos']." >> Tambah Jawaban"); $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); $smarty->assign('current_pos',$_GET['current_pos']); $sqlx = mysql_query("SELECT * FROM bo_poll_answers WHERE pa_question = '$poll_id'"); $rowx = mysql_num_rows($sqlx); if($rowx > 0) { $arranswer = array(); while($resx = mysql_fetch_array($sqlx)) { array_push($arranswer,$resx); } mysql_free_result($sqlx); $smarty->assign('arranswer',$arranswer); $smarty->assign('datajawaban',$rowx); } else { $smarty->assign('datajawaban','0'); } $smarty->assign('poll_id',$poll_id); $smarty->assign('question',$question); $smarty->display('polls/answer_form.tpl'); $clues = 'Form diatas adalah form untuk menambah data jawaban pada pertanyaan. Tekanlah tombol "Simpan Data Jawaban" untuk menyimpan data yang anda isikan pada form diatas.'; $smarty->assign('clues',$clues); $smarty->assign('boxwidth','400'); $smarty->display('globals/clues_box.tpl'); $smarty->display('globals/page_end.tpl');
}// edit questionif(isset($_GET['edit_question'])) {
$poll_id = $_GET['poll_id']; $question = $_GET['question']; $smarty->display('globals/page_begin.tpl'); $user_position = strval($_GET['current_pos']." >> Ubah Pertanyaan"); $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); $smarty->assign('current_pos',$_GET['current_pos']); $smarty->assign('poll_id',$poll_id); $smarty->assign('question',$question);
129
// Data jawaban $sqlx = mysql_query("SELECT * FROM bo_poll_answers WHERE pa_question = '$poll_id'"); $rowx = mysql_num_rows($sqlx); if($rowx > 0) { $arranswer = array(); while($resx = mysql_fetch_array($sqlx)) { array_push($arranswer,$resx); } mysql_free_result($sqlx); $smarty->assign('arranswer',$arranswer); $smarty->assign('datajawaban',$rowx); } else { $smarty->assign('datajawaban','0'); } $smarty->display('polls/edit_question_form.tpl'); $clues = 'Form diatas adalah form untuk mengubah data pertanyaan. Tekanlah tombol "Simpan Data Pertanyaan" untuk menyimpan data yang anda isikan pada form diatas.'; $smarty->assign('clues',$clues); $smarty->assign('boxwidth','400'); $smarty->display('globals/clues_box.tpl'); $smarty->display('globals/page_end.tpl');
}// edit answerif(isset($_GET['edit_answer'])) {
$poll_id = $_GET['xpoll_id']; $question = $_GET['xquestion']; $answer_id = $_GET['xanswer_id']; $answer = $_GET['xanswer']; $smarty->display('globals/page_begin.tpl'); $user_position = strval($_GET['current_pos']." >> Ubah Jawaban"); $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); $smarty->assign('current_pos',$_GET['current_pos']); $smarty->assign('poll_id',$poll_id); $smarty->assign('question',$question); $smarty->assign('answer_id',$answer_id); $smarty->assign('answer',$answer); // Data jawaban $sqlx = mysql_query("SELECT * FROM bo_poll_answers WHERE pa_question = '$poll_id'"); $rowx = mysql_num_rows($sqlx); if($rowx > 0) { $arranswer = array(); while($resx = mysql_fetch_array($sqlx)) { array_push($arranswer,$resx); } mysql_free_result($sqlx); $smarty->assign('arranswer',$arranswer); $smarty->assign('datajawaban',$rowx); } else { $smarty->assign('datajawaban','0'); } $smarty->display('polls/edit_answer_form.tpl');
130
$clues = 'Form diatas adalah form untuk mengubah data jawaban. Tekanlah tombol "Simpan Data Jawaban" untuk menyimpan data yang anda isikan pada form diatas.'; $smarty->assign('clues',$clues); $smarty->assign('boxwidth','400'); $smarty->display('globals/clues_box.tpl'); $smarty->display('globals/page_end.tpl');
}} else {
$smarty->display('trulogix_login/empty_page.tpl');}?>
Dengan mengamati kode program diatas dapat dilihat
bahwa menu Polls ini terbagi menjadi delapan bagian yaitu:
bagian yang membagi frame tengah menjadi dua secara vertikal,
bagian yang memuat sub-menu, bagian yang digunakan untuk
menampilkan polls dan hasil-hasilnya, bagian yang digunakan
untuk menampilkan form pengambilan suara, bagian untuk
setting polls, bagian untuk menambah jawaban pada suatu
pertanyaan, bagian untuk mengedit pertanyaan dan bagian untuk
mengedit jawaban. Sebelum melangkah lebih lanjut perlu
dijelaskan bahwa setiap pertanyaan poll mempunyai empat status
yaitu:
Level 1, berarti pertanyaan belum dipublikasikan.
Pertanyaan beserta jawabannya tidak ditampilkan.
Level 2, adalah status pertanyaan dimana pertanyaan
tersebut dipublikasikan dan kesempatan untuk memilih
salah satu dari jawaban yang tersedia masih dibuka.
Level 3, pertanyaan tersebut masih dipublikasikan
tetapi sudah tidak menerima pemilihan jawaban. Para
pengguna sistem hanya bisa melihat hasilnya saja.
131
Berikut ini merupakan penjelasan dari bagian-bagian
yang telah disebutkan diatas:
Polls dan hasil-hasilnya.
Perintah yang terdapat dalam bagian ini adalah
membaca semua data pertanyaan yang mempunyai status
level 2 atau level 3 kemudian menghitung jumlah pemilih
atas jawaban pada setiap pertanyaannya. Hasil dari
pengambilan suara ini ditampilkan dalam bentuk diagram bar
yang bernilai sama dengan prosentase jumlah pemilih suatu
jawaban dibanding jumlah pemilih keseluruhan atas jawaban-
jawaban yang tersedia untuk pertanyaan tersebut. Pada setiap
pertanyaan yang mempunyai status level 2, disediakan link
untuk memberikan pilihan.
Pengambilan suara.
Bagian ini akan dijalankan setelah link untuk memilih
jawaban pada pertanyaan yang mempunyai status level 2
ditekan. Setelah link tersebut ditekan akan ditampilkan form
untuk memilih jawaban atas pertanyaan yang dipilih. Pilihan
yang diberikan akan disimpan dalam tabel bo_poll_vote.
Seorang user yang sudah pernah memberikan pilihan tidak
bisa memberikan pilihan kembali karena saat pengguna
sistem tersebut memberikan pilihan, user-ID dan ID jawaban
yang dipilih disimpan dalam tabel bo_poll_vote.
Seting polls.
132
Perintah-perintah yang terdapat dalam bagian ini
adalah menjalankan query untuk membaca dan menampilkan
semua data pertanyaan yang ada dalam basis data dan
menampilkan form untuk memasukkan data pertanyaan baru.
Pada setiap pertanyaan akan ditampilkan statusnya dan
pengguna bisa menekan status-status tersebut untuk
mengupdate status pertanyaan yang dipilih. Pengguna juga
dapat menghapus atau mengubah data pertanyaan atau
jawaban-jawabannya dengan menekan link-link yang
tersedia. Pada setiap link yang terdapat pada halaman ini,
disertakan ID pertanyaan atau ID jawaban sebagai parameter.
Setelah tombol submit pada form untuk memasukkan data
pertanyaan baru ditekan, data pertanyaan tersebut akan
disimpan dalam tabel bo_poll_questions dan akan
ditampilkan form untuk menambah jawaban pada pertanyaan
tersebut.
Tambah jawaban pertanyaan.
Bagian ini dijalankan setelah tombol submit pada
form untuk menambah pertanyaan ditekan atau setelah link
tambah jawaban pada daftar pertanyaan yang terdapat dalam
basis data ditekan. Perintah yang terdapat pada bagian ini
adalah perintah menampilkan form untuk menambah jawaban
dan perintah menjalankan query untuk membaca semua data
jawaban dari pertanyaan yang dipilih. Jawaban yang diisikan
133
melalui form tambah jawaban akan disimpan dalam tabel
bo_poll_answers setelah tombol submit pada form tersebut
ditekan.
Edit pertanyaan.
Bagian ini dijalankan setelah link edit pertanyaan
dalam daftar pertanyaan yang terdapat dalam basis data
ditekan. Perintah yang terdapat dalam bagian ini adalah
membaca data pertanyaan dan jawaban dari pertanyaan yang
dipilih dan menampilkan form untuk mengubah data
pertanyaan. Setelah tombol submit pada form tersebut
ditekan maka akan dijalankan query untuk mengupdate data
pertanyaan yang dimaksud dan kembali ke bagian seting
polls.
Edit jawaban.
Bagian ini dijalankan setelah link edit jawaban dalam
daftar jawaban pada suatu pertanyaan yang terdapat dalam
basis data ditekan. Perintah yang terdapat dalam bagian ini
adalah membaca data pertanyaan dan jawaban dari
pertanyaan yang dipilih dan menampilkan form untuk
mengubah data jawaban. Setelah tombol submit pada form
tersebut ditekan maka akan dijalankan query untuk
mengupdate data jawaban yang dimaksud dan kembali ke
bagian seting polls.
134
IV.2.10 Artikel
Menu artikel mempunyai kegunaan utama sebagai basis
pengetahuan. Tampilan, kode perintah dan penjelasan dari menu
ini adalah seperti dibawah ini.
Gambar IV.24 Halaman depan artikel dan hasil pencarian
Gambar IV.25 Form input artikel
135
Gambar IV.26 Seting artikel yang belum dipublikasikan
Gambar IV.27 Baca artikel
Berikut ini merupakan kode perintah menu Artikel yang
disimpan dalam file knowledge_index.php.
136
<?phpsession_start();require_once 'core/config/config.inc.php';require_once 'core/config/core.inc.php';if((isset($_SESSION['xsessid'])) && (isset($_SESSION['xorc_id']))) {
$smarty->assign('session_target',$_SESSION['xsessid']);if(isset($_GET['app_start'])) {
$smarty->assign('app_id',$_GET['app_id']);$smarty->assign('app_label',$_GET['app_label']);// cari label menu default dari aplikasi ini untuk
ditampilkan$appid = $_GET['app_id'];$sqlx = mysql_query("SELECT * FROM bo_registered_menu
WHERE menu_default = '1' AND menu_app = '$appid' LIMIT 1");$resx = mysql_fetch_array($sqlx);$smarty->assign('menu_label',$resx['menu_label']);$smarty->display('knowledge_base/index.tpl');
}if(isset($_GET['app_nav'])) {
$xorcid = $_SESSION['xorc_id'];$appid = $_GET['app_id'];$arrmenukb = array();$sqlx = mysql_query("SELECT
menu_id,menu_action_file,menu_label FROM bo_registered_menu,bo_registered_access_menu WHERE menu_id = am_menu AND am_orc = '$xorcid' AND am_status = '1' AND menu_app = '$appid' ORDER BY menu_id");
while($resx = mysql_fetch_array($sqlx)) {array_push($arrmenukb,$resx);
}mysql_free_result($sqlx);$smarty->assign('arrmenukb',$arrmenukb);$smarty->assign('app_label',$_GET['app_label']);$smarty->assign('findmenu','Pencarian Artikel');$smarty->display('knowledge_base/navigator.tpl');
}// halaman utamaif(isset($_GET['app_home'])) {
// lets begin $smarty->display('globals/page_begin.tpl'); // navigation if(isset($_GET['current_pos'])) { $user_position = $_GET['current_pos']; } else { $user_position = strval($_GET['app_label']." >> ".$_GET['menu_label']); } $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); // some clues $clues = "Berikut ini adalah daftar 30 artikel terbaru. Klik link "Baca" untuk membaca artikel selengkapnya. Apabila artikel yang anda maksud tidak ada dalam daftar dibawah, gunakan fasilitas pencarian yang ada disamping kiri anda. Selamat membaca, semoga bermanfaat bagi anda.";
137
$smarty->assign('clues',$clues); $smarty->assign('boxwidth','100%'); $smarty->display('globals/clues_box.tpl'); // main content $arrart = array(); // daftar seluruh artikel $sqlx = mysql_query("SELECT bo_articles.*,bo_registered_orc.* FROM bo_articles,bo_registered_orc WHERE art_creator = orc_id AND art_status = '1' ORDER BY art_id DESC LIMIT 30"); $jmlartikel = mysql_num_rows($sqlx); while($resx = mysql_fetch_array($sqlx)) { array_push($arrart,$resx); } mysql_free_result($sqlx); $smarty->assign('arrart',$arrart); $smarty->assign('jmlartikel',$jmlartikel); $smarty->display('knowledge_base/daftar_artikel.tpl'); // end of page
$smarty->display('globals/page_end.tpl');}// artikel baru dan ubah artikelif(isset($_GET['articles'])) {
if(isset($_POST['submit_new_article'])) { $xorcid = $_SESSION['xorc_id']; $xtitle = $_POST['title']; $xkeyword = $_POST['keyword']; $xcontent = $_POST['content']; $insart = mysql_query("INSERT INTO bo_articles(art_title,art_keyword,art_content,art_creator,art_created) VALUES('$xtitle','$xkeyword','$xcontent','$xorcid',NOW())"); if($insart == 1) { $clues = 'Data berhasil disimpan. Hubungi pihak yang berwenang untuk mempublikasikan artikel anda.'; } else { $clues = 'Data gagal disimpan. Silakan mengulangi memasukkan data artikel anda dengan klik menu disamping kiri anda.'; } $smarty->assign('form_mode','confirmx');
}if(isset($_GET['show_form_new_article'])) {
$clues = 'Isilah form dibawah ini untuk menambah data artikel. Setelah anda mengisi judul dan isi artikel, tekanlah tombol "Simpan Artikel" untuk menyimpan dalam basis data. Artikel yang anda muat tidak akan ditampilkan sebelum di-publikasi-kan.'; $smarty->assign('form_mode','inputx');
}if(isset($_GET['show_form_edit_article'])) {
$clues = 'Setelah anda selesai mengubah data artikel, tekanlah tombol "Simpan Artikel" untuk menyimpan dalam basis data. Artikel yang anda muat tidak akan ditampilkan sebelum di-publikasi-kan.'; $art_id = $_GET['art_id']; $sqlx = mysql_query("SELECT * FROM bo_articles WHERE art_id = '$art_id' LIMIT 1");
138
$resx = mysql_fetch_array($sqlx); $smarty->assign('xartid',$art_id); $smarty->assign('xtitle',$resx['art_title']); $smarty->assign('xkeyword',$resx['art_keyword']); $smarty->assign('xcontent',$resx['art_content']); mysql_free_result($sqlx); $smarty->assign('form_mode','editx');
}// lets begin
$smarty->display('globals/page_begin.tpl'); // navigation if(isset($_GET['current_pos'])) { $user_position = $_GET['current_pos']; } else { $user_position = strval($_GET['app_label']." >> ".$_GET['menu_label']); } $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); // some clues $smarty->assign('clues',$clues); $smarty->assign('boxwidth','100%'); $smarty->display('globals/clues_box.tpl'); // main content $smarty->display('knowledge_base/form_article.tpl'); // end of page
$smarty->display('globals/page_end.tpl');}// administrasi artikelif(isset($_GET['maintains'])) {
if(isset($_GET['publish'])) { $art_id = $_GET['art_id']; $updart = mysql_query("UPDATE bo_articles SET art_status = '1' WHERE art_id = '$art_id' LIMIT 1"); } if(isset($_GET['deletearticle'])) { $art_id = $_GET['art_id']; $delart = mysql_query("DELETE FROM bo_articles WHERE art_id = '$art_id' LIMIT 1"); optimize_table($db_core,'bo_articles'); } if(isset($_POST['submit_upd_article'])) { $art_id = $_POST['art_id']; $xtitle = $_POST['title']; $xkeyword = $_POST['keyword']; $xcontent = $_POST['content']; $updart = mysql_query("UPDATE bo_articles SET art_title = '$xtitle', art_keyword = '$xkeyword', art_content = '$xcontent' WHERE art_id = '$art_id' LIMIT 1"); }
// lets begin $smarty->display('globals/page_begin.tpl'); // navigation if(isset($_GET['current_pos'])) { $user_position = $_GET['current_pos']; } else {
139
$user_position = strval($_GET['app_label']." >> ".$_GET['menu_label']); } $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); // some clues $clues = "Tabel dibawah ini adalah daftar semua artikel baru yang belum di-publikasi-kan. Klik link "Publikasi" untuk mempublikasikannya. Subelum dipublikasikan, artikel-artikel dibawah ini tidak akan muncul di halaman utama atau hasil pencarian artikel. Anda juga bisa mengubah atau bahkan menghapus dengan mengklik link-link yang bersangkutan."; $smarty->assign('clues',$clues); $smarty->assign('boxwidth','100%'); $smarty->display('globals/clues_box.tpl'); // main content $arrart = array(); // daftar seluruh artikel yang belum dipublikasi. $sqlx = mysql_query("SELECT bo_articles.*,bo_registered_orc.* FROM bo_articles,bo_registered_orc WHERE art_creator = orc_id AND art_status = '0' ORDER BY art_id DESC LIMIT 30"); $jmlartikel = mysql_num_rows($sqlx); while($resx = mysql_fetch_array($sqlx)) { array_push($arrart,$resx); } mysql_free_result($sqlx); $smarty->assign('arrart',$arrart); $smarty->assign('jmlartikel',$jmlartikel); $smarty->assign('xcommand','1'); $smarty->display('knowledge_base/daftar_artikel.tpl'); // end of page
$smarty->display('globals/page_end.tpl');}// pencarian artikelif(isset($_GET['find_articles'])) {
$katakunci = $_POST['katakunci'];// lets begin
$smarty->display('globals/page_begin.tpl'); // navigation if(isset($_GET['current_pos'])) { $user_position = $_GET['current_pos'];
} else { $user_position = strval($_GET['app_label']." >> ".$_GET['menu_label']);
} $smarty->assign('user_position',$user_position); $smarty->display('globals/navigation_box.tpl'); // some clues $clues = "Berikut ini adalah hasil pencarian artikel berdasar kata kunci "<b><i>".$katakunci."</i></b>". Klik link "Baca" untuk membaca artikel selengkapnya. Selamat membaca, semoga bermanfaat bagi anda."; $smarty->assign('clues',$clues); $smarty->assign('boxwidth','100%'); $smarty->display('globals/clues_box.tpl');
140
// main content $arrart = array(); // daftar seluruh artikel $sqlx = mysql_query("SELECT bo_articles.*,bo_registered_orc.* FROM bo_articles,bo_registered_orc WHERE art_creator = orc_id AND art_status = '1' AND art_keyword LIKE '%$katakunci%' ORDER BY art_id DESC"); $jmlartikel = mysql_num_rows($sqlx); while($resx = mysql_fetch_array($sqlx)) { array_push($arrart,$resx);
} mysql_free_result($sqlx); $smarty->assign('arrart',$arrart); $smarty->assign('jmlartikel',$jmlartikel); $smarty->display('knowledge_base/daftar_artikel.tpl'); // end of page
$smarty->display('globals/page_end.tpl');}// baca artikelif(isset($_GET['readarticle'])) {
$art_id = $_GET['art_id']; $sqlx = mysql_query("SELECT orc_lastname,orc_firstname,art_title,art_created,art_content FROM bo_articles,bo_registered_orc WHERE art_creator = orc_id AND art_id = '$art_id' LIMIT 1"); $resx = mysql_fetch_array($sqlx); $creator = strval($resx['orc_lastname'].", ".$resx['orc_firstname']); $smarty->assign('xcreator',$creator); $smarty->assign('xtitle',$resx['art_title']); $smarty->assign('xcreated',$resx['art_created']); $smarty->assign('xcontent',$resx['art_content']); mysql_free_result($sqlx); $user_position = strval($_GET['current_pos']." >> Baca Artikel"); $smarty->assign('xwindowtitle',$user_position); // lets begin $smarty->display('globals/page_begin.tpl'); // main content $smarty->display('knowledge_base/baca_artikel.tpl'); // end of page
$smarty->display('globals/page_end.tpl');}
} else {$smarty->display('trulogix_login/empty_page.tpl');
}?>
Dengan mengamati kode program diatas dapat dilihat
bahwa menu Artikel ini terbagi menjadi tujuh bagian yaitu:
bagian yang membagi frame tengah menjadi dua secara vertikal,
bagian yang memuat sub-menu, bagian yang digunakan untuk
141
menampilkan halaman utama, bagian yang memunculkan form
input artikel baru, bagian yang digunakan untuk administrasi
artikel, bagian yang digunakan untuk melakukan pencarian
artikel dan bagian yang digunakan untuk membaca artikel.
Berikut ini merupakan penjelasan dari bagian-bagian yang telah
disebutkan diatas:
Halaman utama.
Bagian ini memuat perintah untuk menampilkan tiga
puluh artikel terbaru. Untuk menampilkan hal tersebut
dijalankan query yang membaca semua data artikel dalam
tabel bo_articles yang sudah dipublikasikan, data yang
diambil diurutkan berdasar waktu dibuatnya artikel secara
descending sebanyak tiga puluh baris. Untuk setiap artikel
yang isinya lebih dari dua ratus karakter, disediakan tombol
untuk mambaca artikel selengkapnya. Tombol ini akan
membuka halaman baru dengan menyertakan ID artikel
sebagai parameter.
Input artikel baru.
Perintah-perintah yang berada dalam bagian ini
adalah perintah menampilkan form untuk memasukkan data
artikel baru dan perintah untuk menyimpan data artikel yang
dimasukkan tersebut. Data artikel baru tersebut secara default
status publikasinya akan bernilai sama dengan “0” atau
142
belum dipublikasikan sehingga tidak ditampilkan sebelum
statusnya diubah menjadi “1” atau sudah dipublikasikan.
Administrasi artikel.
Bagian ini adalah bagian yang berisi perintah-perintah
untuk membaca semua artikel yang belum dipublikasikan,
mempublikasikan artikel, mengubah data artikel, dan
menghapus data artikel. Perintah untuk membaca artikel yang
belum dipublikasikan adalah memilih semua data dalam tabel
bo_articles yang statusnya sama dengan “0”. Untuk setiap
artikel yang ditampilkan tersebut, disediakan link untuk
mempublikasikan, mengubah data dan menghapus data.
Setelah link untuk mempublikasikan ditekan, akan dijalankan
query yang mengubah data status publikasi artikel yang
dipilih menjadi “1”. Setelah link ubah data artikel ditekan,
ditampilkan form untuk mengubah data dari artikel yang
dipilih. Setelah tombol submit pada form tersebut ditekan
akan dijalankan query yang mengupdate data artikel yang
dipilih sesuai dengan data-data yang dimasukkan melalui
form tersebut. Link hapus digunakan untuk menghapus artikel
yang dipilih.
Pencarian artikel.
Perintah yang terdapat pada bagian ini adalah
menjalankan dan menampilkan hasil query yang mengambil
143
data artikel dimana kata kunci pencariannya seperti variabel
$katakunci dan sudah dipublikasikan.
Baca artikel.
Perintah dalam bagian ini adalah menjalankan query
yang membaca data artikel dalam tabel bo_articles yang ID
artikelnya sama dengan variabel $art_id. Pada bagian bawah
halaman ini tersedia sebuah tombol yang digunakan untuk
menutup halaman yang memuat data lengkap artikel ini.
IV.2.11 Informasi Sistem
Menu ini digunakan untuk melihat informasi-informasi
pada platform yang digunakan. Untuk menghasilkan informasi
ini, penulis menggunakan plug-in phpsysinfo yang terletak
dalam folder ./blueoctopus/trulogix/phpsysinfo. Tampilan, kode
perintah dan penjelasan dari menu ini adalah seperti dibawah ini.
Gambar IV.28 Informasi sistem
144
Berikut ini merupakan kode perintah menu Informasi
Sistem yang disimpan dalam file system_index.php.
<?phpsession_start();require_once 'core/config/config.inc.php';if((isset($_SESSION['xsessid'])) && (isset($_SESSION['xorc_id']))) {
if(isset($_GET['app_start'])) {include "trulogix/phpsysinfo/index.php";
}} else {
$smarty->display('trulogix_login/empty_page.tpl');}?>
Dari kumpulan kode perintah diatas dapat dilihat bahwa
saat variabel $_GET[‘app_start’] di-set, maka akan dipanggil file
index.php yang ada dalam folder phpsysinfo. File index.php yang
ada dalam folder phpsysinfo tersebut melakukan penghitungan
dan kemudian menampilkan informasi-informasi tentang sistem
yang digunakan.
IV.2.12 Password
Fasilitas ini tersedia bagi setiap pengguna sistem.
Fasilitas ini digunakan untuk mengubah password. Password
pengguna sistem tersimpan dalam tabel bo_registered_orc pada
kolom orc_password. Data yang disimpan tersebut di-encrypt
dengan menggunakan metode MD5(). Tampilan, kode perintah
dan penjelasan dari menu ini adalah seperti dibawah ini.
Berikut ini merupakan cuplikan kode perintah menu
Password yang disimpan dalam file core.php dan index.php.
145
// show change password form :: core.phpif($_GET['change_password'] == '1') {
$smarty->assign('change_passwd_msg','Please enter your new password'); $smarty->assign('bottom_msg','Notice: You will be automatically logged-out after you change your password. Please re-login with your new password.'); $smarty->display('trulogix_login/change_password.tpl');}// update password and back to login form :: index.phpif($_POST['update_password'] == '1'){
$chp_useridx = $_SESSION['xorc_id'];$chp_passwdx = md5($_POST['neu_password']);$sqxchp = mysql_query("UPDATE bo_registered_orc SET
orc_password = '$chp_passwdx' WHERE orc_id = '$chp_useridx' LIMIT 1");
session_unset();session_destroy(); }Dari kode perintah diatas dapat dilihat bahwa form ganti
password akan tampil saat variabel $_GET[‘change_password’]
di-set(dalam file core.php). Form untuk mengganti password ini
mempunyai action di file index.php dan akan mengeksekusi
semua perintah yang ada berada dalam klausa
if($_POST[‘update_password’] == ‘1’). Perintah-perintah yang
dieksekusi adalah meng-encrypt password yang di-isi-kan,
berada dalam variabel $chp_passwordx, dengan menggunakan
fungsi MD5(). Setelah itu menjalankan query untuk mengupdate
tabel bo_registered_orc kolom orc_password menjadi password
baru(sudah ter-encrypt) yang kolom orc_id sama dengan user-ID
yang tersimpan dalam session.
Berikut ini merupakan gambar tampilan dari form untuk
mengganti password. Setelah tombol submit ditekan akan
ditampilkan halaman login.
146
Gambar IV.29 Form ganti password
147
BAB V
ANALISA HASIL
Pembuatan sistem informasi untuk menyediakan sebuah solusi teknologi
informasi yang handal dan dapat dikembangkan secara berkesinambungan untuk
keperluan penanganan data, menjadwalkan pekerjaan-pekerjaan yang terkait, dan
memonitor perkembangan dari pekerjaan yang dikerjakan pada suatu proyek
dibuat untuk mengatasi masalah yang ada di Odyssey Digital Development
Community, dimana institusi tersebut mengalami kesulitan karena mempunyai
banyak pekerja lepas dan inventaris yang terpisah secara geografis namun terlibat
dalam suatu proyek yang sama. Hal ini menyebabkan proses komunikasi,
organisasi, koordinasi, dan evaluasi pegerjaan proyek menjadi terhambat.
Adapun kendala-kendala yang yang dihadapi dalam pembuatan sistem ini
diantaranya adalah:
1. Sulitnya memperoleh data yang diperlukan untuk uji coba program dalam
pemasukkan data.
2. Sulitnya pembuatan antar muka yang lebih user friendly dan sederhana.
3. Sulitnya mengintegrasikan berbagai macam teknologi multifungsi ke
dalam sebuah sistem.
Sistem ini memiliki beberapa kekurangan dan kelebihan, antara lain:
Kekurangan:
Data masukan yang berhubungan dengan suatu proyek sangat minimal,
hanya terdiri dari nama proyek, tanggal mulai dan tanggal jatuh tempo.
Tidak ada fasilitas untuk mengadministrasi inventaris perusahaan.
Tidak ada fasilitas untuk melakukan back-up dan restore basis-data.
Tidak ada fasilitas untuk mengorganisasi berkas-berkas.
Penjadwalan pengerjaan sebuah proyek dilakukan secara manual.
Minimalnya error-handling pada setiap form yang digunakan untuk
memasukkan data.
Dokumentasi pengerjaan kegiatan hanya dapat dilihat oleh pengguna
sistem yang menangani bagian tersebut saja.
Kelebihan:
Pengguna sistem dapat berkomunikasi melalui pengiriman pesan tanpa
harus dibatasi ruang dan waktu.
Pengaturan hak akses atas menu-menu yang dibuat sedemikian rupa
sehingga penggunaannya sangat fleksibel dan tidak terbatas pada golongan
tertentu.
Data-data sebuah proyek disajikan dengan gantt-chart sehingga
memudahkan dalam memantau dan mengambil keputusan mengenai
proyek yang dijalankan atau dikerjakan.
Pengerjaan proyek oleh seorang pengguna sistem tidak dilakukan dengan
metode penunjukan tetapi dengan metode penawaran sehingga keputusan
untuk menerima atau menolak pekerjaan dapat diputuskan oleh pengguna
sistem. Hal tersebut dapat meningkatkan efisiensi pelaksanaan proyek
karena pelaku pekerjaan adalah orang yang benar-benar bersedia dan
mempunyai kemampuan untuk menyelesaikannya.
149
Sesuai dengan judul yang dibuat teknologi yang dipakai dalam pembuatan
aplikasi ini adalah :
Kate memberikan kemudahan dalam proses coding karena fitur – fitur
yang dimiliki salah satu tools pembuatan aplikasi berbasis web ini lengkap
dan dapat di-setting sesuai dengan kebutuhan. Misalnya tampilan huruf
dapat diganti warnanya, hal ini yang mengakibatkan programmer akan
merasa nyaman apabila menggunakan dalam waktu yang cukup lama.
Apache, web server.
MySql, database.
Keberadaan web server dan database merupakan sarat yang harus dipenuhi
jika membuat program aplikasi berbasis web yang memiliki tempat untuk
menyimpan data. Salah satu tools yang dipakai adalah Apache dan MySql.
Kedua tools ini merupakan satu paket dan sangat cocok dengan bahasa
pemrograman PHP versi apapun. Di sisi lain konfigurasi ketiganya mudah
dilakukan. MySql sebagai database, mampu menampung proses
penyimpanan data-data penting walaupun dengan ukuran yang cukup
besar.
150
Analisa metodologi yang digunakan dalam pembuatan aplikasi ini :
Fase studi kelayakan
Pada fase ini hanya berhubungan berapa lama waktu yang dibutuhkan
untuk pembuatan aplikasi ini. Proses pengerjaan yang dibutuhkan untuk
mengerjakan tahap ini adalah 2 – 3 bulan.
Fase analisa kebutuhan
Analisa kebutuhan dilakukan dengan cara langsung datang ke komunitas
pengembang perangkat lunak tersebut kemudian menanyakan hal – hal
yang berhubungan dengan aplikasi yang akan dibuat.
Fase rancangan
Tahap ini dikerjakan seperti pada Bab III.
Fase implementasi
Dengan melakukan kegiatan antara lain instalasi perangkat lunak (tools
yang digunakan), pembuatan program, pengujian program.
Fase pengujian
Aplikasi yang dibuat dicoba secara langsung di komunitas pengembang
perangkat lunak tersebut.
Fase operasi
Berhubungan dengan maintenance sistem. Tahap ini tidak dilakukan
karena sistem belum digunakan secara penuh. Pengujian secara langsung
hanya bertujuan apakah sistem yang dibangun sesuai dengan kebutuhan.
151
BAB VI
PENUTUP
VI.1 Kesimpulan
Berdasarkan hasil analisis dan implementasi Sistem Informasi
Manajemen Proyek Berbasis Web, maka dapat diambil kesimpulan bahwa
sistem yang dibuat dapat menyediakan sebuah solusi teknologi informasi
yang handal dan dapat dikembangkan secara berkesinambungan untuk
keperluan penanganan data dan berkas, media berinteraksi bagi para
personel yang terlibat pada pengerjaan suatu proyek, media untuk
mengorganisir dan mengkoordinir sumber daya, dan media untuk
mengevaluasi perkembangan dari pekerjaan yang dikerjakan pada suatu
institusi yang menangani pengerjaan suatu atau beberapa proyek.
VI.2 Saran
Sistem yang dibuat masih terdapat kekurangan, seperti yang telah
disebutkan pada bab lima, oleh karena itu tidak menutup kemungkinan
sistem ini untuk dikembangkan menjadi sistem yang lebih lengkap
fasilitasnya.
152
DAFTAR PUSTAKA
Aziz, M.Farid , 2001, Belajar Sendiri Pemrograman PHP 4 , Elex Media
Komputindo, Jakarta
Jogiyanto, HM., 1995, Analisis dan Desain Sistem Informasi : Pendekatan
Terstruktur Teori dan Praktek Aplikasi Bisnis , Andi Offset, Yogyakarta
Kadir, Abdul, 2002, Dasar pemrograman Web Dinamis Menggunakan PHP, Andi
Offset, Yogyakarta
Kristanto, Andri , 2003, Perancangan Sistem Informasi dan Aplikasinya, Gaya
Media , Yogyakarta
Ramakrishnan,Raghu & Gehrke, Johanes, 2003, Sistem Manajemen Database
Edisi 3 , Andi Offset, -
Syafii, M, 2004, Membangun Aplikasi Berbasis PHP dan MySQL, Andi Offset,
Yogyakarta
153