Anda di halaman 1dari 113

ANALISIS PLATFORM OPENCART BERBASIS CONTENT

MANAGEMENT SYSTEM

Laporan ini dibuat untuk memenuhi persyaratan kelulusan


matakuliah Proyek 1

Dibuat Oleh,

1.16.4.009 Donny Dongoran

PROGRAM STUDI DIPLOMA IV TEKNIK INFORMATIKA

POLITEKNIK POS INDONESIA

BANDUNG

2021
SURAT PERNYATAAN
TIDAK MELAKUKAN PLAGIARISME
Yang bertanda tangan di bawah ini :
Nama : Donny Dongoran
NPM : 1164019
Program Studi : D4 Teknik Informatika
Judul : Platform Opencart Berbasis Content Management System
Menyatakan bahwa :
Proyek Pemrograman Aplikasi (PROYEK I) saya ini adalah asli dan belum pernah
diajukan untuk memenuhi kelulusan matakuliah Proyek 2 pada Program Studi DIV
Teknik Informatika baik di Politeknik Pos Indonesia maupun di Perguruan Tinggi
lainnya.
Proyek Pemrograman Aplikasi (PROYEK I) ini adalah murni gagasan, rumusan, dan
penelitian saya sendiri tanpa bantuan pihak lain, kecuali arahan pembimbing.
Dalam Proyek Pemrograman Aplikasi (PROYEK I) ini tidak terdapat karya atau
pendapat yang telah ditulis atau dipublikasikan orang lain, kecuali secara tertulis
dengan jelas dicantumkan sebagai acuan dalam naskah dengan disebutkan nama
pengarang dan dicantumkan dalam daftar pustaka.
Pernyataan ini saya buat dengan sesungguhnya dan apabila di kemudian hari terdapat
penyimpangan-penyimpangan dan ketidakbenaran dalam pernyataan ini, maka saya
bersedia menerima sanksi akademik berupa pencabutan gelar yang telah diperoleh
karena karya ini, serta sanksi lainnya sesuai dengan norma yang berlaku diperguruan
tinggi lain.
Bandung, 17 Juli 2021
Yang Membuat Pernyataan,

Donny Dongoran
NPM. 1164001
ABSTRAK
E-commerce merupakan sarana transaksi jual beli barang atau jasa yang
melibatkan beberapa orang dengan menggunakan jaringan internet. Salah satunya
adalah Platform Opencart. Platform Opencart merupakan salah satu aplikasi web
berbasis Content Management Sistem dengan menggunakan bahasa pemrograman
PHP. Content Management Sistem ini merancang Platform Opencart untuk sistem
online shooping atau berbisnis secara online yang bersifat terbuka (open sorce).
Platform Opencart memiliki keunggulan atau kelebihan dalam pembuatannya.
Diantaranya memiliki fitur dan desain yang memudahkan dalam penggunananya.
Untuk itu, tujuan di bentuknya Platform Opencart berbasis Content Management
Sistem ini adalah menganalisis rancangan database dan desain admin maupun user
yang terdapat dalam Platform Opencart Berbasis Content Management Sistem. Maka
dari itu untuk menganalisis rancangan di butuhkan MySQL sebagai Relational
Database Management System (RDBMS) nya.

Kata Kunci : E-commerce. CMS Opencart, PHP, Relational Database Management


System, Content Management System.

i
ABSTRACT
E-commerce merupakan sarana transaksi jual beli barang atau jasa yang
melibatkan beberapa orang dengan menggunakan jaringan internet. Salah satunya
adalah Platform Opencart. Platform Buka salah satu aplikasi berbasis web Sistem
Manajemen Konten dengan menggunakan bahasa pemrograman PHP. Content
Management System ini meluncurkan Platform untuk membuka sistem belanja online
atau bisnis online yang bersifat terbuka (open sorce). Platform Openencart memiliki
keunggulan atau kelebihan dalam pembuatannya. Diantaranya memiliki fitur dan
desain yang memudahkan penggunananya. Untuk itu, tujuan di bentuknya Platform
Pembuka berbasis Content Management System ini dirancang database dan desain
admin atau pengguna yang disediakan dalam Pembuka Platform Berbasis Content
Management System. Maka dari itu untuk menganalisis rancangan menggunakan
MySQL sebagai Sistem Manajemen Basis Data Relasional (RDBMS) nya.
Keywords : E-commerce, Plaform Opencart, PHP, Relational Database
Management System, Content Management System.

ii
KATA PENGANTAR

Dengan menyebut nama Allah SWT Yang Maha Pengasih lagi Maha
Penyayang, penulis panjatkan puji syukur atas kehadirat Allah SWT. yang telah
memberikan rahmat, kesehatan, serta hidayahNya, sehingga penulis dapat
menyelesaikan Proyek I ini yang berjudul Platform Opencart Berbasis Content
Management System dengan tepat waktu.
Dalam penulisan laporan proyek I ini terdapat banyak kendala, terutama
disebabkan karena keterbatasan ilmu pengetahuan, pengalaman serta kemampuan
yang terbatas. Penulis mengharapkan kritik dan saran dari semua pihak demi
penyempurnaan pembuatan laporan ini. Dalam laporan proyek ini tidak lepas dari
bantuan, bimbingan dari semua pihak. Untuk itu penulis mengucapkan terima kasih
kepada:
1. Allah SWT, karena dengan Rahmat dan Ridho-Nya penulis dapat
menyelesaikan poyek I ini.
2. Kedua orang tua dan keluarga penulis yang telah mendukung dan memberi
semangat kepada penulis.
3. Bapak M. Yusril Helmi Setyawan, S.Kom., M.Kom selaku Ketua Program
Studi DIV Teknik Informatika.
4. Bapak Harry K Saputra, S.T. selaku Koordinator Proyek I dan selaku dosen
pemimbing yang telah memberikan ilmu dan pengetahuan serta masukan
yang sangat bermanfaat dalam membimbing dan mengarahkan dalam
menyelesaikan Proyek I ini.
5. Teman-teman seperjuangan D4 TI. Serta pihak lain yang turut membantu
dalam penyelesaian Tugas Proyek ini.
Harapan penulis semoga apa yang telah penulis tulis semoga dapat
dikembangkan lagi dan bermanfaat bagi pihak-pihak yang menggunakan.

Bandung, 17 Juli 2021

Penulis

iii
DAFTAR ISI

ABSTRAK.....................................................................................................................i
ABSTRACT...................................................................................................................ii
KATA PENGANTAR.................................................................................................iii
DAFTAR ISI...............................................................................................................iv
DAFTAR GAMBAR...................................................................................................ix
DAFTAR TABEL......................................................................................................xii
DAFTAR SIMBOL...................................................................................................xiii
DAFTAR LAMPIRAN............................................................................................xvii
BAB I PENDAHULUAN..........................................................................................I-1
1.1 Latar Belakang............................................................................................I-1
1.2 Identifikasi Masalah....................................................................................I-2
1.3 Tujuan..........................................................................................................I-2
1.4 Ruang Lingkup............................................................................................I-2
1.5 Sistematika Penulisan..................................................................................I-3
BAB II LANDASAN TEORI...................................................................................II-4
2.1 Tinjauan Pustaka........................................................................................II-4
2.2.1 Aplikasi...............................................................................................II-8
2.2.2 E-commerce........................................................................................II-8
2.2.3 Opencart..............................................................................................II-8
2.2.4 PHP.....................................................................................................II-8
2.2.5 RDBMS...............................................................................................II-9
BAB III ANALISIS DAN PERANCANGAN......................................................III-12
3.1 Analisis.......................................................................................................III-12
3.1.1 Analisi Sistem Yang Sedang Berjalan................................................III-12
3.1.1.1 Analisis Prosedur/Flow Map Berjalan...........................................III-12
3.1.1.2 Analisis Dokumen Yang Digunakan...............................................III-14
3.1.1.3 Analisi Sistem Yang Akan Digunakan............................................III-14
3.1.2.1 Analisis Kebutuhan Aplikasi...........................................................III-14
3.1.2.2 Analisis kebutuhan perangkat Lunak dan Keras.............................III-14
3.2 Perancangan............................................................................................III-20

iv
3.2.1 Context Diagram.............................................................................III-20
3.2.2 Data Flow Diagram........................................................................III-20
3.2.2.1 Data Flow Diagram level 0 platform Opencart Berbasis Content
Management System..................................................................................III-21
3.2.3 Kamus Alir Data..............................................................................III-27
3.2.4 Perancangan DataBase....................................................................III-29
3.2.4.1 Conceptual Data Model.................................................................III-29
3.2.4.2 Physical Data Model......................................................................III-30
3.2.4.3 Kamus Data Tabel (Database).......................................................III-30
3.2.5 Structur Menu..................................................................................III-38
3.2.6 Perancangan Antarmuka..................................................................III-48
3.2.6.1 Perancangan Antarmuka Login Admin Dan User.........................III-49
3.2.6.2 Perancangan Antarmuka Tampilan Utama Admin........................III-50
3.2.6.3 Perancangan Antarmuka Utama Customer (Admin).....................III-51
3.2.6.4 Perancangan Antarmuka Tampilan Categori (Admin)..................III-52
3.2.6.5 Perancangan Antarmuka Tampilan Product (Admin)...................III-53
3.2.6.6 Perancangan Antarmuka Tampilan Banners (Admin)...................III-54
3.2.6.7 Perancangan Antarmuka Tampilan Order (Admin).......................III-55
3.2.6.8 Perancangan Antarmuka Tampilan Utama User...........................III-56
3.2.6.9 Perancangan Antarmuka Register User.........................................III-57
3.2.6.10 Perancangan Antarmuka Checkout User.....................................III-58
BAB IV IMPLEMENTASI DAN PENGUJIAN..................................................IV-75
4.1 Implementasi...............................................................................................IV-75
4.1.1 Lingkungan Implementasi...............................................................IV-75
4.1.2 Kebutuhan Perangkat Lunak...........................................................IV-75
4.1.3 Kebutuhan Perangkat Keras............................................................IV-75
4.2 Tampilan Antarmuka (interface)............................................................IV-76
4.2.1 Halaman Login Admin.....................................................................IV-76
4.2.2 Halaman Utama Admin...................................................................IV-76
4.2.3 Halaman Data Category.................................................................IV-77
4.2.4 Halaman Data Product...................................................................IV-77
4.2.5 Halaman Data Orders.....................................................................IV-78

v
4.2.6 Halaman Data Costumers...............................................................IV-78
4.2.7 Halaman Utama user.......................................................................IV-79
4.2.8 Halaman Login user........................................................................IV-79
4.2.9 Halaman Register User...................................................................IV-80
4.2.10 Halaman Tambah Billing Details....................................................IV-80
4.2.11 Halaman Payment Method..............................................................IV-80
BAB V KESIMPULAN DAN SARAN.................................................................V-84
5.1 Kesimpulan...................................................................................................V-86
5.2 Saran.............................................................................................................V-86
DAFTAR PUSTAKA
LAMPIRAN A
LAMPIRAN B

vi
DAFTAR GAMBAR

Gambar 3. 1 BPMN proses yang sedang berjalan........................................................III-13


Gambar 3. 2 BPMN sistem yang akan dibangun.........................................................III-17
Gambar 3. 3 BPMN sistem yang akan dibangun.........................................................III-18
Gambar 3. 4 Context Diagram...................................................................................III-20
Gambar 3. 5 Data Flow Diagram level 0................................................................III-28
Gambar 3. 6 Conceptual Data Model (CDM)............................................................III-29
Gambar 3. 7 Physical Data Model (CDM)..................................................................III-30
Gambar 3. 8 Arsitektur Struktur Halaman Situs.....................................................III-30
Gambar 3. 9 Login Admin dan User......................................................................III-31
Gambar 3. 10 Tampilan utama admin ....................................................................III-32
Gambar 3. 11 Tampilan Customer admin...............................................................III-33
Gambar 3. 12 Tampilan utama Category admin.....................................................III-35
Gambar 3. 13 Tampilan Utama Product Admin.........................................................III-36
Gambar 3. 14 Tampilan utama Banners admin.......................................................III-37
Gambar 3. 15 Tampilan Utama Order Admin............................................................III-38
Gambar 3. 16 Tampilan utama User.......................................................................III-39
Gambar 3. 17 Tampilan Regrister User...................................................................III-40
Gambar 3. 18 Tampilan Checkout User..................................................................III-41

ix
DAFTAR TABEL

Tabel 3. 1 Data Users............................................................................................III-14


Tabel 3. 2 Data Category........................................................................................III-14
Tabel 3. 3 Data Cart...............................................................................................III-15
Tabel 3. 4 Data Order.............................................................................................III-15
Tabel 3. 5 Data Product..........................................................................................III-15
Tabel 3. 6 Data Shipping.........................................................................................III-16
Tabel 3. 7 Data in, Data out context diagram.......................................................III-21
Tabel 3. 8 Keterangan Data Flow Diagram Level 0..............................................III-21
Tabel 3. 9 Kamus Alir Data....................................................................................III-22
Tabel 3. 10 User.....................................................................................................III-22
Tabel 3. 11 Category.................................................................................................III-23
Tabel 3. 12 Cart.......................................................................................................III-24
Tabel 3. 13 Order....................................................................................................III-24
Tabel 3. 14 Product..................................................................................................III-25
Tabel 3. 15 Shipping................................................................................................III-25

xiii
DAFTAR SIMBOL

1. Simbol Use Case Diagram

No Simbol Nama Keterangan


Menspesifikasikan sebuah himpunan peran
1 Actor atau objek yang dmainkan sebagai pengguna
ketika berinteraksi dengan use case.
Hubungan dimana perubahan yang terjadi
pada suatu elemen mandiri (independent)
2 Dependency akan mempengaruhi elemen yang
bergantung padanya elemen yang tidak
mandiri (independent).
Hubungan dimana suatu objek anak
(descendent) berbagi perilaku dan struktur
3 Generalization
data dari objek yang ada di atasnya objek
induk.
Menspesifikasikan bahwa use case sumber
4 Include
secara eksplisit.
Menspesifikasikan bahwa use case target
5 Extend memperluas perilaku dari use case sumber
pada suatu titik yang diberikan.
Untuk menghubungkan antara objek satu
6 Association
dengan objek lainnya.

Menspesifikasikan paket yang menampilkan


7 System sistem secara terbatas.

Mendeskripsi dari urutan aksi-aksi yang


8 Use Case ditampilkan sistem yang menghasilkan suatu
hasil yang terukur bagi suatu aktor

Interaksi aturan-aturan dan elemen lain yang


bekerja sama untuk menyediakan prilaku
9 Collaboration
yang lebih besar dari jumlah dan elemen-
elemennya (sinergi).

xiii
2. Simbol Class Diagram

No Simbol Nama Keterangan


Hubungan dimana objek anak (descendent)
1 Generalization berbagi perilaku dan struktur data dari objek
yang ada di atasnya objek induk (ancestor).
Upaya untuk menghindari asosiasi dengan
Nary lebih dari 2 objek.
2
Association

Himpunan dari objek-objek yang berbagi


3 Class
atribut serta operasi yang sama.

Deskripsi dari urutan aksi-aksi yang


4 Collaboration ditampilkan sistem yang menghasilkan suatu
hasil yang terukur bagi suatu aktor

Operasi yang benar-benar dilakukan oleh


5 Realization suatu objek.

Hubungan dimana perubahan yang terjadi


pada suatu elemen mandiri (independent)
6 Dependency
akan mempegaruhi elemen yang bergantung
padanya elemen yang tidak mandiri
Apa yang menghubungkan antara objek satu
7 Association dengan objek lainnya

3. Simbol Sequence Diagram

No Simbol Nama Keterangan


Objek entity, antarmuka yang saling
berinteraksi.
1 LifeLine

Spesifikasi dari komunikasi antar objek


2 Message yang memuat informasi-informasi tentang
aktifitas yang terjadi

xiii
Spesifikasi dari komunikasi antar objek
3 Message yang memuat informasi-informasi tentang
aktifitas yang terjadi

4. Simbol Activity Diagram

No Simbol Nama Keterangan

Memperlihatkan bagaimana masing-masing


1 Activity kelas antarmuka saling berinteraksi satu
sama lain

State dari sistem yang mencerminkan


2 Action
eksekusi dari suatu aksi

3 Initial Node Bagaimana objek dibentuk atau diawali.

Activity Final
4 Bagaimana objek dibentuk dan dihancurkan
Node

Satu aliran yang pada tahap tertentu berubah


5 Fork Node
menjadi beberapa aliran

5. Simbol Statechart Diagram

No Simbol Nama Keterangan

Nilai atribut dan nilai link pada suatu


1 State waktu tertentu, yang dimiliki oleh suatu
objek.

Initial Pseudo
2 Bagaimana objek dibentuk atau diawali
State

Bagaimana objek dibentuk dan


3 Final State
dihancurkan

Sebuah kejadian yang memicu sebuah state


4 Transition objek dengan cara memperbaharui satu
atau lebih nilai atributnya

Apa yang menghubungkan antara objek


5 Association
satu dengan objek lainnya.

xiii
DAFTAR LAMPIRAN

Lampiran-A Category.php....................................................................................A-1

Lampiran-A Product.php....................................................................................A-14

Lampiran-A Api.php (Route)...............................................................................A-19

Lampiran-A Web.php (Route).............................................................................A-21

Lampiran-B Table Users.......................................................................................B-1

Lampiran-B Table Warehouses ............................................................................B-1

Lampiran-B Table Destinations ...........................................................................B-1

Lampiran-B Table Costs .......................................................................................B-1

Lampiran-B Table Transactions ...........................................................................B-1

xvii
BAB I
PENDAHULUAN

1.1 Latar Belakang


E-commerce adalah sarana pendukung di dunia bisnis berbasis komputerisasi
dan web, mulai dari penjualan barang maupun jasa menjadi suatu pembelajaran
dalam sistem untuk pemudahan dalam transaksi. Seiring dengan ilmu dan
teknologi yang semakin lama semakin berkembang, E-commerce merupakan
salah satu hal yang sangat penting peranannya, karena e-commerce tersebut berisi
tentang perkembangan transaksi, pengolahan barang, pengenalan sistem
penjualan dan pembelian barang atau jasa [1].
CMS (Content Management System) merupakan sebuah aplikasi web atau
software yang tujuannya untuk memudahkan dalam pengelolaan konten dalam
sebuah website/blog/aplikasi web tanpa harus dibekali pengetahuan tentang hal-
hal yang bersifat teknis tanpa harus memiliki pengetahuan tentang bahasa
pemrograman web. Manajemen file pada CMS sangat terstruktur, setiap elemen
antara isi dan tampilan desain terpisah. Fleksibilitas sebuah CMS, membuat CMS
ini banyak dikembangkan oleh pihakpihak lain. Hal ini lah yang membuat
banyak developer memilih mengembangkan aplikasi CMS ini daripada membuat
sebuah aplikasi web yang baru. Opencart merupakan salah satu CMS yang cukup
bagus dan popular dikalangan dunia bisnis, dengan desain tamplate yang menarik
serta didukung dengan fitur-fitur yang cukup lengkap dapat membantu pengguna
menjalankan bisnis e-commerce [2].
Berdasarkan permasalahan yang telah dipaparkan diatas, maka penelitian ini
diputuskan mengambil judul “Platform OpenCart Berbasis Content Management
System”.

I-1
I-2

1.2 Identifikasi Masalah


Berdasarkan latar belakang masalah yang telah dikemukakan di atas
identifikasi masalahnya adalah :
1. Bagaimana rancangan database yang terdapat pada Platform Opencart
berbasis Content Management System.
2. Bagaimana desain admin maupun user yang terdapat pada Platform
Opencart berbasis Content Management System.

1.3 Tujuan

Maksud dan tujuan dari Platform Opencart berbasis Content Management System ,
yaitu:
1. Mengetahui rancangan database yang terdapat pada Platform Opencart
berbasis Content Management System.
2. Mengetahui desain admin maupun user yang terdapat pada Platform
Opencart berbasis Management System.

1.4 Ruang Lingkup

Pada laporan penelitian ini, permasalahan dibatasi menjadi beberapa


hal,diantaranya:

1. Menguraikan rancangan database dari Platform Opencart berbasis


Content Management System.
2. Menganalisis desain yang di tangani oleh Platform Opencart baik dari sisi
admin maupun user.
I-3

1.5 Sistematika Penulisan


Sistematika penulisan laporan Platform Opencart berbasis Content
Management System ini sebagai berikut:
BAB I PENDAHULUAN, pembahasannya meliputi latar belakang, identifikasi
masalah, tujuan, ruang lingkup, sistematika penulisan. Pada bagian ini akan
membantu pembaca dalam menganalisa latar belakang dan mengindentifikasi
masalah dari sistem dan tujuan dari dibuatnya Platform Opencart berbasis Content
Management System.
BAB II LANDASAN TEORI, pembahasannya meliputi uraian dan sumber
tentang penjelasan mengenai Platform Opencart berbasis Content Management
System yang akan dibuat dari sistem tersebut dan membantu proses berjalannya
aplikasi.
BAB III ANALISIS dan PERANCANGAN, pembahasannya meliputi struktur
menu yang membahas tentang penjelasan dari bentuk suatu sistem, baik pada saat
membangun maupun pada saat mengimplementasi. Berisi gambaran dari suatu
rancangan yang menjelaskan proses terbentuknya Platform Opencart berbasis
Content Management System.
BAB IV IMPLEMENTASI dan PENGUJIAN, menampilkan tampilan yang
terdapat pada Platform Opencart berbasis Content Management System yang dibuat
mulai dari awal sampai akhir. Disertai penjelasan mengenai penggunaan dan isi dari
Platform Opencart berbasis Content Management System.
BAB V KESIMPULAN dan SARAN, pada bab ini berisikan pencapaian
tujuan dari rancangan yang dibuat serta saran yang berdasarkan kesimpulan dari hasil
aplikasi yang telah dibuat.
BAB II
LANDASAN TEORI

2.1 Tinjauan Pustaka

2.2.1 Aplikasi
Adalah penggunaan dalam suatu komputer, instruksi atau pernyataan yang
disusun sedemikian rupa sehingga komputer dapat memproses input menjadi
output.

2.2.2 E-Commerce
E-Commerce adalah proses pembelian, penjualan atau pertukaran produk,
jasa dan informasi melalui jaringan komputer. E-commerce (electronic
commerce) sebagai perdagangan elektronik dimana untuk transaksi perdagangan
baik membeli maupun menjual dilakukan melalui elektronik pada jaringan
internet. Keberadaan e-commerce sendiri dalam internet dapat dikenali melalui
adanya fasilitas pemasangan iklan, penjualan, dan service support terbaik bagi
seluruh pelanggannya dengan menggunakan sebuah toko online berbentuk web
yang setiap harinya beroperasi selama 24 jam [1].

2.2.3 Opencart
Opencart salah satu Content Manajemen System (CMS) E-commerce yang
terbuka (open source) yang diperuntukan untuk belanja online berbasiskan
bahasa pemograman PHP. Sebuah Solusi E-commerce untuk berjualan melalui
internet [2].

II-4
II-5

2.2.4 PHP
PHP adalah singkatan dari "PHP: Hypertext Prepocessor", yaitu
bahasa pemrograman yang digunakan secara luas untuk penanganan
pembuatan dan pengembangan sebuah situs web dan bisa digunakan
bersamaan dengan HTML. PHP diciptakan oleh Rasmus Lerdorf pertama kali
tahun 1994. Pada awalnya PHP adalah singkatan dari "Personal Home Page
Tools". Selanjutnya diganti menjadi FI ("Forms Interpreter"). Sejak versi 3.0,
nama bahasa ini diubah menjadi "PHP: Hypertext Prepocessor" dengan
singkatannya "PHP". PHP versi terbaru adalah versi ke-7.
Dalam penelitian ini,bahasa pemrograman PHP digunakan untuk sisi
back-end nya.

2.2.5 RDBMS (Relational Database Management System)


RDBMS adalah kependekan dari Relational Database Management
System. RDBMS adalah program yang melayani sistem basis data yang
entitas utamanya terdiri dari tabel-tabel yang mempunyai relasi dari satu tabel
ke tabel yang lain.
Relational database yang digunakan dalam penelitian ini adalah

MySQL.
BAB III
ANALISIS DAN PERANCANGAN

3.1 Analisis
Analisis adalah proses untuk menentukan bentuk dari kebutuhan aplikasi baik
berupa kebutuhan pada saat membangun maupun pada saat implementasi. Analisis
merupakan suatu tahap pemahaman terhadap suatu sistem yang telah dibuat. Tahap
ini bertujuan untuk mengetahui sistem, proses-proses yang terlibat dalam aplikasi
serta hubungan antar proses. Analisis juga dapat didefinisikan sebagai penguraian
dari suatu sistem yang utuh kedalam bagian-bagian komponennya dengan maksud
untuk mengidentifikasi dan mengevaluasi masalah-masalah, kesempatan-
kesempatan, hambatan-hambatan yang terjadi serta kebutuhan yang diharapkan
sehingga dapat diusulkan perbaikan.

Tahap analisis sistem merupakan tahap yang kritis yang sangat penting
karena kesalahan dalam tahap ini mengakibatkan pada tahap selanjutnya. Suatu
penelitian membuktikan bahwa kesalahan yang diperbaiki setelah tahap analisis akan
memakan biaya yang lebih besar dari pada jika diperbaiki saat dilakukan analisis

3.1.1 Analisis Sistem Yang Sedang Berjalan


Tahapan yang diperlukan dalam pembuatan suatu program yaitu
menganalisa sistem yang telah ada, dimana analisa sistem merupakan proses
mempelajari suatu sistem dengan cara menguraikan sistem tersebut kedalam
elemen yang membentuknya, selanjutnya mengidentifikasi dan mengevaluasi
permasalahan permasalahan yang terjadi serta kebutuhan yang diperlukan,
sehingga dapat disusulkan pembuatannya.

III-12
III-7

3.1.1.1 Analisis Prosedur/Flow Map Berjalan


Proses atau sistem yang sedang berjalan saat ini pada platform
OpenCart berbasis Content Management System adalah sebagai berikut:

Gambar 3. 1 BPMN proses yang sedang berjalan

Dapat dilihat dari bpmn diatas adalah proses yang sedang


berjalan saat ini, prosesnya yaitu user atau pengguna aplikasi harus
menginputkan sendiri. Barang yang akan dipesan ke dalam platform
OpenCart berbasis Content Management System untuk selanjutnya
di konfirmasi.
III-8

3.1.1.2 Analisis Dokumen yang Digunakan


Didalam proses platform OpenCart berbasis Content Management
System terdapat beberapa dokumen yang terlibat. Berikut ini adalah dokumen
dokumen yang dibutuhkan:

Tabel 3. 1 Data Users

Data User
Dibuat Oleh : Superadmin
Ditujukan : Superadmin dan Admin
Untuk
Isi : customer_id, customer_group_id, store_id,
language_id, firtsname, lastname, email, telephone,
fax, password, salt, cart, wishlist, newsletter,
address_id, custom_field, ip, status, safe, token, code,
date_added
Tujuan : Untuk menampung data dan informasi
Frekuensi : Tidak tentu,setiap ada pengguna baru

Tabel 3. 2 Data Category

Data Orderan
Dibuat Oleh : Superadmin
Ditujukan : Superadmin dan Admin
Untuk
Isi : category_id, image, parent_id, top, column,
sort_order, status, date_added, date_modified
Tujuan : Untuk pustaka data jenis barang
Frekuensi : Tidak tentu,setiap ada jenis barang baru

Tabel 3. 3 Data Cart

Data Orderan
III-9

Dibuat Oleh : Superadmin


Ditujukan : Superadmin dan Admin
Untuk
Isi : cart_id, api_id, customer_id, session_id, product_id,
reccuring_id, option, quantity, date_added
Tujuan : Untuk pustaka data penampung barang
Frekuensi : Tidak tentu,setiap ada barang baru

Tabel 3. 4 Data Order

Data Orderan
Dibuat Oleh : Superadmin
Ditujukan : Superadmin dan Admin
Untuk
Isi : order_id, invoice_no, invoice_prefix, store_id,
store_name, store_url, customer_id,
customer_group_id, fistname, lastname, email,
telephone, fax, custom_field, payment_firstname,
payment_lastname, payment_company,
payment_address_1, payment_address2, payment_city,
payment_postcode, payment_country,
payment_country_id, payment_address_format,
payment_custom_field, payment_method,
payment_code, shipping_firstname, shipping_lastname,
shipping_company, shipping_address_1,
shipping_address_2, shipping_city, shipping_postcode,
shipping_country, shipping_country_id, shipping_zone,
shipping_zone_id, shipping_address_format,
shipping_custom_field, shipping_method,
shipping_code, comment, total, order_status_id,
commission, marketing_id, tracking, language_id,
currency_id, currency_code, currency_value, ip,
forward_ip, user_agent, accept_language, date_added,
date_modified.
Tujuan : Untuk pustaka data pemesanan barang
Frekuensi : Setiap pada data pesanan baru
III-10

Tabel 3. 5 Data Product

Data Orderan
Dibuat Oleh : Admin
Ditujukan : Superadmin
Untuk
Isi : product_id, model, sku, upc, ean, jan isbn, mpn
location, quantity, stock_status_id, image,
manufacturer_id, shipping, price, points, tax_class_id,
date_available, weight, weight_class_id, length, width,
height, length_class_id, subtract, minimum, sort_order,
viewed, date_added, date_modified
Tujuan : Untuk pustaka data barang yang di jual
Frekuensi : Tidak tentu,setiap ada barang baru yang di jual

Tabel 3. 6 Data Shipping

Data Orderan
Dibuat Oleh : Admin
Ditujukan : Superadmin
Untuk
Isi : shipping_courier, shipping_courier_code,
shipping_courier_name
Tujuan : Untuk penyimpanan data pengiriman
Frekuensi : Setiap ada data pengiriman baru

Berikut adalaha data data atau document yang akan digunakan, data
data tersebut nantinya akan digunakan didalam aplikasi yang akan dibangun.
Fungsi dari dokumen yang telah dipaparkan sebelumnya yaitu untuk
menyimpan data yang nantinya akan dikelola dan dijadikan sebuah informasi
bagi pengguna aplikasi.

Data users digunakan untuk menampung data pengguna platform


Opencart berbasis Content Management System. Data Attribute digunakan
untuk menampung data dan informasi pada platform Opencart berbasis
Content Management System. Data Banner digunakan untuk menampung data
dan gambar pada platform Opencart berbasis Content Management System.
III-11

Data Category digunakan untuk menampung data dan jenis barang yang
terdapat platform Opencart berbasis Content Management System. Data Cart
digunakan untuk menampung data barang pada platform Opencart berbasis
Content Management System. Data Information digunakan untuk menampung
data keterangan barang yang terdapat platform Opencart berbasis Content
Management System. Data Layout digunakan untuk menampung data
tampilan pada platform Opencart berbasis Content Management System. Data
Order digunakan untuk menampung data pemesanan barang pada platform
Opencart berbasis Content Management System. Data Product digunakan
untuk menampung data barang pada platform Opencart berbasis Content
Management System. Data Shipping digunakan untuk menampung data
pengiriman barang pada platform Opencart berbasis Content Management
System.

3.1.1.3 Analisis Sistem Yang Akan Dibangun


Dalam membangun sistem perlu dibuat perancangan. Perancangan
sistem ini dilakukan supaya sistem yang dibuat berjalan dengan lancar, disini
belum ada relation database yang terdapat pada platform OpenCart berbasis
Content Management System.
III-12

Gambar 3. 2 BPMN sistem yang akan dibangun


Dapat dilihat bahwa disini user perlu mengimputkan barang yang
nantinya tersimpan di dalam database yang nantinya saling berelasi dan
ditampilkan di dashboard admin, sehingga datanya dinamis sesuai data
platform Opencart berbasis Content Management System.
III-13

Gambar 3. 3 BPMN sistem yang akan dibangun

Dapat dilihat untuk melakukan proses pengelolaan data, baik data


users, data order, data product dan data yang lainnya admin harus terlebih
dahulu melakukan login dengan memasukan username dan password dan
apabila valid maka akan langsung diarahkan ke dashboard admin. Setelah
sampai di dasbaord admin, maka admin dapat melakukan pengelolaan data
sesuai dengan role/perannya masing- masing.

3.1.2.1 Analisis Kebutuhan Aplikasi


Dalam pengembangan platform OpenCart berbasis Content Management
System membutuhkan Bahasa pemograman PHP, Javascript, dan
meggunakan RDBMS MySql dan Framework Laravel.

3.1.2.2 Analisis Kebutuhan Perangkat Lunak dan Keras


Dalam pembuatan aplikasi ini,spesifikasi perangkat lunak yang dibutuhkan
adalah sebagai berikut :
1. Sistem Operasi : Windows 10
2. Bahasa Pemograman : PHP, Javascript
3. RDBMS : MySql
4. Aplikasi : Visual Studio Code
Sedangkan spesifikasi perangkat keras yang dibutuhkan adalah sebagai
berikut :
III-14

1. Processor : Intel®Core I i3-3217U CPU 1.80Ghz


2. Memory RAM : 8.00 GB

3.2 Perancangan

3.2.1 Context Diagram

Context diagram adalah sebuah diagram sederhana yang


menggambarkan hubungan antara entity luar, masukan dan keluaran dari
sistem. Context diagram direpsentasikan dengan lingkaran tunggal yang
mewakili keseluruhan sistem.
III-15

Gambar 3. 4 Contex Diagram

Proses Data in Data out


Data Login Admin Konfirmasi Data Login
Admin
Data Upadate Barang Informasi Data Update
Barang
Laporan Pesanan Laporan Pesanan
Laporan Penjualan Laporan Penjualan
Platform OpenCart
berbasis Content Info Toko Barang View Info Toko Barang
Management Data User Informasi Data User
System Data Product Barang Informasi Data Product
Barang
Data Category Barang Informasi Data Category
Barang
Data Cart Informasi Data Cart
Data Shipping Informasi Data Shipping
Data Login User Konfirmasi Data Login
Tabel 3.7 Data in, Data out context diagram

3.2.2 Data Flow Diagram


Sistem yang akan dibangun dalam platform OpenCart berbasis Content
Management System dapat digambarkan melalui Data Flow Diagram (DFD)
sebagai berikut:
III-16

3.2.2.1 Data Flow Diagram Level 0 platform OpenCart berbasis


Content Management System

Data Flow Diagram Level 0 platform OpenCart berbasis Content


Management System sebagai berikut :

Gambar 3. 5 Data Flow Diagram level 0

Tabel 3.8 Keterangan Data Flow Diagram Level 0

No. Proses Masukan Keluaran Logika Proses


uji
1 Login Login Konfirmasi Begin
login If
Input
Username
and Password
III-17

Then
Konfirmasi Login
Endif
End
2 Kelola Data Data Admin Informasi data Begin
Admin Admin If
add
Data user
Then
Informasi Data
Admin
Endif
End
3 Kelola Data Data Informasi Data Begin
Product Product Product Barang If
Barang Barang update
Data Product Barang
Then
Informasi Data
Product Barang
Endif
End
4 Kelola Data Data Informasi Data Begin
Category Category Category If
Barang Barang Barang input
Data Category
Barang
Then
Informasi Data
Category Barang
Endif
End
5 Kelola Data Data Informasi Data Begin
Pesanan Pesanan Pesanan If
add
Data Pesanan
Then
Informasi Data
Pesanan
Endif
End
6 Kelola Data Data Cart Informasi Data Begin
Cart Cart If
add
Data Cart
Then
Informasi Data Cart
Endif
III-18

End
7 Kelola Data Data Informasi Data Begin
Shipping Shipping Shipping If
input
Data Shipping
Then
Informasi Data
Shipping
Endif
End
8 Regristrasi Data Informasi Data Begin
User Regristrasi Regristrasi If
User User input
Data Regristrasi
Then
Informasi Data
Regristrasi
Endif
End
Kelola Data Data User Informasi Data Begin
9 User User If
update
Data user
Then
Informasi Data User
Endif
End
10 Laporan Laporan Laporan Begin
Pesanan Pesanan Pemesanan If
input
Laporan Pesanan
Then
Laporan Pesanan
Endif
End
11 Laporan Laporan Laporan Begin
Penjualan Penjualan Penjualan If
input
Laporan Penjualan
Then
Laporan Penjualan
Endif
End

3.2.3 Kamus Alir Data


III-19

Tabel 3.9 Kamus Alir Data

Nama Aliran Data Aliran Data


Data Login Admin [username admin + password Admin]
Konfirmasi Login Admin /*Informasi untuk memberitahukan bahwa login
Admin benar atau salah
Data Update Barang [id barang + product barang + category barang]
Informasi update barang /*Informasi untuk memberitahukan data update
barang
Data User [nama depan + nama belakang+ email + telepon]
Informasi data user /*Informasi untuk memberitahukan data user
Data Category Barang [id category + image + parent_id + top + column +
sort order + status + date added + date_modified]
Informasi category /*Informasi untuk memberitahukan data category
barang barang
Data Cart [id cart + id api + id customer + id session + id
product + id recurring + option + quantity +
date_added]
Informasi cart /*Informasi untuk memberitahukan data cart
Data Shipping [id shipping + code shipping + nama shipping]
Informasi shipping /*Informasi untuk memberitahukan data shipping
Laporan Pemesanan [uraian + product barang + category barang]
Informasi laporan /*Informasi untuk memberitahukan data laporan
pemesanan pemensanan

3.2.4 Perancangan Database

Perancangan database yang ada dalam aplikasi ini tergambar dalam


Conceptual Data Model ( CMD ), Physical Data Model ( PMD ), dan kamus
data table (database).

3.2.4.1 Conceptual Data Model

CDM adalah suatu model yang dibuat berdasarkan anggapan


bahwa dunia nyata terdiri dari koleksi obyek-obyek dasar yang
III-20

dinamakan entitas (entity) serta hubungan (relationship) antara entitas-


entitas itu. CDM dipakai untuk menggambarkan secara detail struktur
basis data dalam bentuk logic. Berikut ini adalah CDM dari platform
OpenCart berbasis Content Management System.

Gambar 3.6 Conceptual Data Model (CDM)

3.2.4.2 Physical Data Model

PDM adalah suatu model yang menggunakan sejumlah table


untuk menggambarkan data serta hubungan antara data-data tersebut.
Setiap tabel mempunyai sejumlah kolom dimana setiap kolom
memiliki nama yang unik. PDM merupakan gambaran secara detail
basis data dalam bentuk fisik. Berikut ini adalah PDM dari platform
OpenCart berbasis Content Management System.
III-21

Gambar 3.7 Physical Data Model (PDM)

3.2.4.3 Kamus Data Tabel (Database)


Kamus data merupakan daftar tentang semua elemen data
yang berhubungan dengan system dan terdefinisi dengan tepat. Kamus
data disebut juga katalog fakta tentang data dan kebutuhan-kebutuhan
informasi dari system informasi.
III-22

Tabel 3. 10 User
Nama Tabel User
Primary Key id_user
Foreign Key -
Keterangan Untuk merekap data user (pengelolaan data
user, semua data tentang user) serta data
yang digunakan untuk login ke dalam system.
Nama Field Tipe data Deskripsi
id_users Integer Primary key table
users
Store_id Int(11) Tabel store
Username Varchar (100) Username user
Password Varchar (40) Password user
Status Enum Status user apakah
(‘nonaktif’.’aktif’) aktif atau tidak
aktif.
Language_id Int(11) Tabel Bahasa User
Firstname Varchar (32) Keterangan User
Lastname Varchar (32) Keterangan User
Email Varchar (96) Nama email
Telephone Varchar (32) Nomor telepon
Fax Varchar (32) Kode pos
Salt Varchar (9) Keterangan User
Wishlist Text daftar barang user
Newsletter Tinyint(1) Keterangan berita
address_id Int(11) Keterangan alamat
custom_field Text Menambahkan
kelas baru
Ip Varchar (40) ip User
Status Tinyint(1) Keterangan statsus
Safe Tinyint(1) safe User
Token Text token User
Code Varchar (40) code User
date_added Datetime Tanggal pesanan

Tabel 3.11 Category


Nama Tabel Tblcategory
Primary Key Id_ category
Foreign Key Id_parent
Keterangan Memberikan category terhadap user.
Nama Field Tipe data Deskripsi
Id_ category Integer (11) Primary key table
tblcategory
Image Varchar (255) Image.
Top Tintint (1) Gambar Paling atas
III-23

Column Int(3) Memberikan kolom


Sort_order Int(3) Pemesanan jangka
pendek
Date_added Datetime Tanggal pesanan
Date_modified Datetime Tanggal pesanan
update

Tabel 3.12 Cart


Nama Tabel Tblcart
Primary Key Id_cart
Foreign Key Id_user
Id_session
Id_product
Id_recurring
Keterangan Untuk menampung pesanan.
Nama Field Tipe data Deskripsi
Id_cart int Primary key table
tbltransaksi
Option Text Tabel option
Quantity Int(5) Tabel quantity
Date_added datetime Tanggal pesanan

Tabel 3. 13 Order
Nama Tabel Tbl order
Primary Key Order_id
Foreign Key -
Keterangan Untik menyimpan data pesanan
Nama Field Tipe data Deskripsi
Order_id Integer Primary key table
tbltagihan
no_invoice Int (11) Keterangan invoice
no_invoice_prefix Varchar (26) Keterangan
inoviiuce prefix
Id_store Int (11) Keterangan toko
Store_name Varchar (64) Keterangan nama
toko
Store_url Varchar (225) Keterangan utl
Id_customer Int (11) Keterangan atau
deksripsi perihal
tagihan.
Id_customer_group Int (11)
Fistname Varchar (32) Batas akhir
pembayaran.
Lastname Varchar (32) Jumlah bayaran
III-24

yang akan dibayar


oleh anggota.
Email Varchar (96) Status email
Telephone Varchar (32) Nomor telepon
Fax Varchar (32) Kode pos
Custom_field Text Menambah kelas
baru
Payment_firstname Varchar (32) Keterangan user
pembayaran
Payment_lastname Varchar (32) Keterangan user
pembayaran
Payment_company Varchar (60) Keterangan
perusahaan
pembayaran
Payment_address_1 Varchar (128) Keterangan alamat
1 pembayaran
Payment_address_2 Varchar (128) Keterangan alamat
2 pembayaran
Payment_city Varchar (128) Keterangan kota
pembayaran
Payment_postcode Varchar (10) Keterangan kode
pos pembayaran
Payment_country Varchar (128) Keterangan negara
pembayaran
Payment_country Int (11) Keterangan id
_id negara pembayaran
Payment_zone Varchar (128) Keterangan daerah
Payment_zone_id Int (11) Keterangan id
daerah pembayaran
Payment_address_ Text Keterangan Alamat
Format pembayaran
Payment_custom_ text Kelas pembayaran
Field
Payment_method Varchar (128) Cara pembayaran
Payment_code Varchar (128) Kode pembayaran
Shipping_firstname Varchar (32) Keterangan user
pengiriman
Shipping_lastname Varchar (32) Keterangan user
pengiriman
Shipping_company Varchar (40) Keterangan
pengiriman ke
perusahaan
Shipping_address_1 Varchar (128) Keterangan alamat
pengiriman 1
Shipping_address_2 Varchar (128) Keterangan alamat
pengiriman 2
Shipping_city Varchar (128) Keterangan kota
III-25

pengiriman
Shipping_postcode Varchar (10) Keterangan kode
pos pengiriman
Shipping_country Varchar (128) Keterangan negara
pengiriman
Shipping_country_ Int (11) Keterangan id
Id negara pengiriman
Shipping_zone Varchar (128) Keterangan daerah
pengiriman
shipping_zone_id Int (11) Keterangan id
daerah pengiriman
shipping_address_ Text Keterangan format
format alamat pengiriman
shipping_custom_ Text Keterangan kelas
field baru dalam
pengiriman
shipping_method Varchar (128) Keterangan cara
pengiriman
shipping_code Varchar (128) Keterangan kode
pengiriman
Comment Text Keterangan
comment
Total Decimal (15,4) Total pembelian
order_status_id Int (11) Keterangan status
order
commission Decimal (15,4) Keterangan komisi
marketing_id Int (11) Keterangan
marketing
Tracking Varchar (64) Lacak barang
language_id Int (11) Bahasa yang di
pakai
currency_id Int (11) Konversi nilai mata
uang
currency_code Varchar (3) Kode mata uang
currency_value Decimal (15,8) Nilai manauang
Ip Varchar (40) Alamat ip user
forward_ip Varchar (40) Penerusan ip user
user_agent Varchar (255) Keterangan user
accept_language Varchar (255) Konfirmasi bahasa
date_added datetime Tanggal yang di
gunakan
date_modified datetime Memperbahatui
tanggal

Tabel 3. 14 Product
Nama Tabel Tblproduct
III-26

Primary Key Id_product


Foreign Key -
Keterangan Untuk menyimpan data barang
Nama Field Tipe data Deskripsi
Id_product int (11) Primary key
table product
Model Varchar (64) Model product
Sku Varchar (64) -
Upc Varchar (12) -
Ean Varchar (14) -
Jan Varchar (13) -
Isbn Varchar (17) -
Mpn Varchar (64) -
Location Varchar (128) -
Quantity int (4) Jumlah quantity
id _Stock_status int (11) Status stok
barang
Image Varchar (17) Gambar yang di
gunakan
Id_Manufacturer int (11) Ketrangan id
manufactur
Shipping Tinyint (1) Pengrimina
barang
Price Decimal (15,4) Harga barang
Points int (8) Point barang
Id_tax_class int (11) Keterangan id
pajak
Date_available date Tanggal yang
tersedia
Weight Decimal (15,8) Berat barang
Weight_class_id int (11) Id berat barang
Height Decimal (15,8) Tinggi barnag
Id_length_class int (11) Id tinggi barnag
Subtract Tinyint (1) Mengurangi
barang
Minimum int (11) Minimum barang
Sort_order int (11) Pemesanan
jangka pendek
Status Tinyint (1) Ketertnagan
status
Viewed int (5) Melihat Barang
Date_added datetime Tanggal yang di
gunakan
Date_modified datetime Perbahatuan
tanggal
III-27

Tabel 3.15 Shipping

Nama Tabel TblShipping


Primary Key Shipping_id
Foreign Key -
Keterangan Untuk merekap data (pengelolaan data anggota,
semua data tentang anggota kost).
Nama Field Tipe data Deskripsi
Shipping_id Varchar (30) Primary key table
tblanggota
Shipping_code Int Foreign key table
tblanggota
Shipping_nam Varchar (50) Nama anggota kosan.
e

3.2.5 Struktur Menu

Fungsi-fungsi yang dirancang pada tahap perancangan ini, dibagi


kedalam beberapa menu yang bertujuan untuk memudahkan pengoprasian
program. Menu yang digunakan pada program saait ini dapat program saat ini
dapat dilihat pada struktur berikut:
III-28

platform OpenCart berbasis


Content Management System

Home Admin User

Data Update Memilih


Barang Product

Data Status Melakukan


Order Cart

Data Status Melakukan


Order Checkout

Konfirmasi Melakukan
Order Login

Melakukan
Shipping

Gambar 3.8 Arsitektur Struktur Halaman Situs

3.2.6 Perancangan Antarmuka

Rancangan interface adalah rancangan pembangunan dari komunikasi


antar pemakai (user) dengan komputer. Antarmuka (interface) ini terdiri dari
proses pemasukan data ke sistem dan menampilkan output informasi tersebut
kepada user

3.2.6.1 Perancangan Antarmuka Login Admin dan User


III-29

Gambar 3.9 Login Admin dan User

Keterangan:
1. Label Login Administrator 3. TextBox Password
2. Textbox Username 4. Button Login

3.2.6.2 Perancangan Antarmuka Tampilan Utama Admin


III-30

Gambar 3.10 Tampilan utama admin

Keterangan :

1. Logo Opencart 14. Label Total Customer


2. Menu Dashboard 15. Label Total Online
3. Menu Catalog 16. Menu World Map
4. Menu Extensions 17. Label Sales Analytics
5. Menu Design 18. Label Recent Activity
6. Menu Sales 19. Label No Results!
7. Menu Customer 20. Label Latest Orders
8. Menu Marketing 21. Label Order ID
9. Menu System 22. Label Customer
10. Menu Menu Reports 23. Label Status
11. Label Admin 24. Label Date Added
12. Label Total Order 25. Label Total
13. Label Total Sales 26. Label Action

3.2.6.3 Perancangan Antarmuka Tampilan Customer (Admin)


III-31

Gambar 3.11 Tampilan Customer admin

Keterangan :

1. Logo Customers 11. Label Action


2. Menu Add New 12. Label Customer Name
3. Menu Delete 13. Label Filters
4. Label Customer Name 14. Label Customer Name
5. Label Email 15. Label Email
6. Label Customer Group 16. Label Customer Group
7. Menu Status 17. Label Status
8. Menu IP 18. Label IP
9. Menu Date Added 19. Label Date Added
10. Menu Action 20. Menu Filter

3.2.6.4 Perancangan Antarmuka Tampilan Category (Admin)


III-32

Gambar 3.12 Tampilan utama Category admin

Keterangan :

1. Logo Categories 6. Label Category Name


2. Menu Add New 7. Label Sort Order
3. Menu Rebuild 8. Label Action
4. Menu Delete 9. Label Sales Analytics
5. Label Category List 10. Tabel

3.2.6.5 Perancangan Antarmuka Tampilan Product (Admin)


III-33

Gambar 3.13 Tampilan utama Product admin

Keterangan :

1. Logo Products 9. Label Category Name


2. Menu Add New 10. Label Sort Order
3. Menu Rebuild 11. Kolom Nama Product
4. Menu Delete 12. Kolom Nama Model
5. Label Category List 13. Kolom Nama Price
6. Label Category Name 14. Kolom Nama Quantity
7. Label Sort Order 15. Kolom Nama Status
8. Label Sales Analytics 16 Menu Filter

3.2.6.6 Perancangan Antarmuka Tampilan Banners (Admin)


III-34

Gambar 3. 14 Tampilan utama Banners admin

Keterangan :

1. Logo Banners 6. Label Status


2. Menu Add New 7. Label Action
3. Menu Delete 8. Menu edit
4. Label Category List 9. Tabel
5. Label Banner Name

3.2.6.7 Perancangan Antarmuka Tampilan Order (Admin)


III-35

Gambar 3. 15 Tampilan utama Order admin

Keterangan :

1. Logo Orders 11. Label Date Modified


2. Menu Shipping 12. Label Action
3. Menu Print 13. Label Filter
4. Menu Add New 14. Label Order ID
5. Label Order List 15. Label Customer
6. Label Order ID 16. Kolom Order Status
7. Label Customer 17. Kolom Total
8. Label Status 18. Kolom Date Added
9. Label Total 19. Kolom Date Modified
10. Label Date Added 20. Menu Filter

3.2.6.8 Perancangan Antarmuka Tampilan Utama User


III-36

Gambar 3. 16 Tampilan utama User

Keterangan :

1. Menu Mata Uang 12. Label Components


2. Label Nomor Telpon 13. Label Tables
3. Menu Account 14. Label Software
4. Menu Wish List 15. Label Phones & PDAs
5. Menu Shopping Cart 16. Label Cameras
6. Menu Checkout 17. Label Mp3 Players
7. Label Your Store 18. Menu Slide Gambar
8. Menu Search 19. Label Featured
9. Button Item 20. Menu Gambar
10. Label Desktops 21. Menu Add To Cart
11. Label Laptops & Notebooks

3.2.6.9 Perancangan Antarmuka Registrasi User


III-37

Gambar 3.17 Tampilan Regrister User

Keterangan :

1. Menu Mata Uang 12. Label Components


2. Label Nomor Telpon 13. Label Tables
3. Menu Account 14. Label Software
4. Menu Wish List 15. Label Phones & PDAs
5. Menu Shopping Cart 16. Label Cameras
6. Menu Checkout 17. Label Mp3 Players
7. Label Your Store 18. Menu Slide Gambar
8. Menu Search 19. Label Featured
9. Button Item 20. Menu Gambar
10. Label Desktops 21. Menu Add To Cart
11. Label Laptops & Notebooks

3.2.6.10 Perancangan Antarmuka Checkout User


III-38

Gambar 3. 18 Tampilan Checkout User

Keterangan:

1. Menu Mata Uang 17. Menu MP3 Players


2. Label Nomor Telpon 18. Menu Home
3. Menu Account 19. Menu Shopping Cart
4. Menu Wish List 20. Menu Checkout
5. Menu Shopping Cart 21. Tabel Image
6. Menu Checkout 22. Tabel Product Name
7. Label Your Store 23. Tabel Model
8. Menu Search 24. Tabel Quantity
9. Button Item 25. Tabel Unit Price
10. Menu Desktops 26. Tabel Total
11. Menu Laptop & Notebooks 27. Label Use Coupon Code
12. Menu Components 28. Label Use Gift Certificate
13. Menu Tablets Software 29. Menu Continue Shopping
14. Menu Software 30. Tabel Perhitungan
15. Menu Phones & PDAs 31. Menu Checkout
16. Menu Cameras
IV-39

BAB IV
IMPLEMENTASI DAN PENGUJIAN

4.1 Implementasi
Setelah dilakukannya analisis dan perancangan pada sistem yang akan
dibangun, maka selanjutnya sistem telah siap untuk di implementasikan.
Tahap ini merupakan tahap peletakan sistem agar dapat dioperasikan sesuai
dengan analisis yang telah dibuat. Pada tahap ini juga dilakukan pemrograman
dan penyesuaian terhadap rancangan yang telah dilakukan sebelumnya.
Adapun lingkungan aplikasi yang dibuat ini meliputi lingkungan perangkat
lunak dan perangkat keras.
4.1.1 Lingkungan Implementasi
Perancangan aplikasi ini dapat berjalan baik karena didukung oleh
perangkat lunak dan perangkat keras yang memadai.

4.1.2 Kebutuhan Perangkat Lunak

Dalam pembuatan aplikasi ini, spesifikasi perangkat lunak yang digunakan


adaalah sebagai berikut:
1. Sistem Operasi : Windows 10 Profesional Fall Update
2. Bahasa Pemrograman : PHP 5.6.3
3. Database : MySQL

4.1.3 Kebutuhan Perangkat Keras

Sedangkan spesifikasi perangkat keras yang digunakan adalah sebagai berikut:


1. Processor : Intel CoreTM i7
2. Memory : 8 GB RAM
3. Monitor : LCD 14 Inchi
III-40

4.2 Tampilan Antarmuka (interface)


Implementasi dari aplikasi web ini, dijelaskan secara umum dari index utama
halaman pengelola (Admin).

4.2.1 Halaman Login Admin

Gambar 4. 1 Halaman Login Admin

Petunjuk Penggunaan:
1. Menampilkan halaman yang berisi form agar pengelola dapat masuk ke
halaman utama dan mengoperasikan sistem;
2. Klik menu yang dikehendaki untuk membuka halaman.
III-41

4.2.2 Halaman Utama Admin

Gambar 4. 2 Halaman Utama Admin

Petunjuk Penggunaan:
1. Masukkan alamat situs;
2. Klik menu yang dikehendaki untuk membuka halamannya.
III-42

4.2.3 Halaman Data Category

Gambar 4. 3 Halaman Data Category

Petunjuk Penggunaan:
1. Menampilkan halaman yang berisi from untuk proses menambah dan edit
data category;
2. Klik menu edit data kemudian klik save, kemudian pilih button tambah
data category kemudian klik save,
3. Klik button delete data category kemudian klik menu yes.
III-43

4.2.4Halaman Data Product

Gambar 4. 4 Halaman Data Product

Petunjuk Penggunaan:
1. Menampilkan halaman yang berisi form untuk menambah dan edit data
product.
2. Klik menu edit data kemudian klik save,
3. Klik button delete data produk kemudian klik yes,
4. kemudian pilih button filter data Product kemudian klik save.
III-44

4.2.5 Halaman Data Orders

Gambar 4.5 Tampilan Data Orders


Petunjuk Penggunaan:
1. Menampilkan halaman yang berisi form untuk menambah dan edit data
Orders.
2. Klik menu tambah orders data kemudian isi data tersebut, kemudian pilih
button save data orders,
3. Klik menu filter kemudian pilih button filter.
III-45

4.2.6 Halaman Data Customers

Gambar 4.6 Halaman Data Customers

Petunjuk Penggunaan:
1. Menampilkan halaman yang berisi form untuk proses menambah dan edit
data user.
2. Klik menu tambah kemudian data user, kemudian pilih button tambah
data user,
3. Klik menu filter kemudian pilih button filter.
III-46

4.2.7 Halaman Utama User

Gambar 4.7 Halaman Utama User

Petunjuk Penggunaan:
1. Menampilkan halaman yang berisi form untuk menambah data order.
2. Klik menu barang kemudian pilih button add to cart,
3. kemudian pilih button checkout.
III-47

4.2.8 Tampilan Login User

Gambar 4.8 Tampilan Login User

Petunjuk Penggunaan:
1. Menampilkan halaman yang berisi form agar pengelola dapat masuk ke
halaman selanjutnya;
2. Klik menu email kemudian password, kemudian pilih button login,
3. Klik menu register kemudian pilih button continue.
III-48

4.2.9 Halaman Register User

Gambar 4.9 Halaman Register User

Petunjuk Penggunaan:
1. Menampilkan halaman yang berisi form register user untuk menambah
data user.
2. Klik menu register data, kemudian pilih centang kemudian pilih button
continue.
III-49

4.2.10 Halaman Tambah Billing Details

Gambar 4.10 Halaman Tambah Billing Details

Petunjuk Penggunaan:
1. Menampilkan halaman yang berisi form data data user untuk memambah
alamat user.
2. Klik menu billing details data kemudian pilih radio button kemudian pilih
alamat tujuan, kemudian pilih button continue.
III-50

4.2.11 Halaman Payment Method

Gambar 4.10 Halaman Tambah Payment Method

Petunjuk Penggunaan:
1. Menampilkan halaman yang berisi form data user untuk menambah
payment method.
2. Klik menu Payment Method kemudian isi sesuai keinginnan, kemudian
pilih centang kemudian pilih button continue.
BAB V
KESIMPULAN DAN SARAN

5.1 Kesimpulan
Berdasarkan penelitan yang berjudul “Platform Opencart berbasis Content
Management System”, dapat disimpulkan bahwa untuk membuat sebuah aplikasi
Platform Opencart berbasis Content Management System yang datanya terintegrasi ke
database membutuhkan RDBMS.

Dapat disimpulkan juga bahwa aplikasi yang dibangun memenuhi identifikasi


masalah yang telah dirumuskan, diantaranya:

1. Aplikasi yang dibangun memiliki database yang mudah di pahami untuk di


rancang.
2. Aplikasi yang dibangun memiliki desain admin maupun user yang memudahkan
penggunanya.

5.2 Saran
Aplikasi yang telah dibangun ini tentunya masih dapat dikembangkan menuju
ruang lingkup yang lebih luas lagi, seperti meliputi payment method dan integrasi
dengan driver truk pengantar.
Oleh sebab itu penulis menyarankan untuk mengembangkan aplikasi dengan
harapan aplikasi ini dapat dijalankan secara online dan dapat berjalan di platform
mobile.

V-51
DAFTAR PUSTAKA

[1] Wulan,Diah Ayu., dan Aswanti Setyawati, "Strategi Pemasaran Perusahaan


Logistik," Jurnal Manajemen Transportasi & Logistik, Vol. 05 No. 02, Juli
2018

[2] Sutabri, T. (2012). Konsep Sistem Informasi. Yogyakarta: Andi.

[3] Komputindo, P. E. (2013). Membangun Bisnis Online Mall dengan Joomla dan
Virtuemart. Jakarta: PT Elex Media Komputindo.

[4] Nugroho, A. (2010). Rekayasa Perangkat Lunak Menggunakan UML dan Java.
Yogyakarta: Andi Offset
[5] Koding, Mahir. “Belajar Eloquent Dasar Laravel”. 1 Januari 2019.
https://www.mahirkoding.com/belajar-eloquent-dasar-laravel/.
[6] Dharwiyanti S, Satria R. (2003). Pengantar Unified Modeling Language (UML)
jurnal informatika
[7] Ladjamudin. (2005). Analisis dan Desain Sistem Informasi. Yogyakarta:Graha
Ilmu
[8] Witt, J. D. (1990). An Evaluation of Microcomputer-based Software Packages
for Project Management. European Journal of Operational Research.

[9] Limswiki.org. Sejarah Opencart http://www.limswiki.org/index.php?


title=Opencart, Sejarah Prestashop http://www.limswiki.org/index.php?
title=Prestashop, tanggal akses 8 Februari 2015
[10] Juanita, S. (2012). Analisa Perbandingan Aplikasi E-Commerce Open Source
Prestashop dan Opencart jurnal Seminar Nasional Teknologi Informasi dan
Komunikasi (SNASTIKOM
LAMPIRAN A
SOURCE CODE

Category.php
<?php
class ControllerCatalogCategory extends Controller {
    private $error = array();

    public function index() {


        $this->load->language('catalog/category');

        $this->document->setTitle($this->language->get('heading_title'));

        $this->load->model('catalog/category');

        $this->getList();
    }

    public function add() {


        $this->load->language('catalog/category');

        $this->document->setTitle($this->language->get('heading_title'));

        $this->load->model('catalog/category');

        if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this-


>validateForm()) {
            $this->model_catalog_category->addCategory($this->request->post);

            $this->session->data['success'] = $this->language->get('text_success');

            $url = '';

            if (isset($this->request->get['sort'])) {
                $url .= '&sort=' . $this->request->get['sort'];
            }

            if (isset($this->request->get['order'])) {
                $url .= '&order=' . $this->request->get['order'];
            }

            if (isset($this->request->get['page'])) {
                $url .= '&page=' . $this->request->get['page'];
            }

            $this->response->redirect($this->url->link('catalog/category', 'user_token='

A-1
A-2

. $this->session->data['user_token'] . $url, true));


        }

        $this->getForm();
    }

    public function edit() {


        $this->load->language('catalog/category');

        $this->document->setTitle($this->language->get('heading_title'));

        $this->load->model('catalog/category');

        if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this-


>validateForm()) {
            $this->model_catalog_category->editCategory($this->request-
>get['category_id'], $this->request->post);

            $this->session->data['success'] = $this->language->get('text_success');

            $url = '';

            if (isset($this->request->get['sort'])) {
                $url .= '&sort=' . $this->request->get['sort'];
            }

            if (isset($this->request->get['order'])) {
                $url .= '&order=' . $this->request->get['order'];
            }

            if (isset($this->request->get['page'])) {
                $url .= '&page=' . $this->request->get['page'];
            }

            $this->response->redirect($this->url->link('catalog/category', 'user_token='
. $this->session->data['user_token'] . $url, true));
        }

        $this->getForm();
    }

    public function delete() {


        $this->load->language('catalog/category');

        $this->document->setTitle($this->language->get('heading_title'));

        $this->load->model('catalog/category');
A-3

        if (isset($this->request->post['selected']) && $this->validateDelete()) {


            foreach ($this->request->post['selected'] as $category_id) {
                $this->model_catalog_category->deleteCategory($category_id);
            }

            $this->session->data['success'] = $this->language->get('text_success');

            $url = '';

            if (isset($this->request->get['sort'])) {
                $url .= '&sort=' . $this->request->get['sort'];
            }

            if (isset($this->request->get['order'])) {
                $url .= '&order=' . $this->request->get['order'];
            }

            if (isset($this->request->get['page'])) {
                $url .= '&page=' . $this->request->get['page'];
            }

            $this->response->redirect($this->url->link('catalog/category', 'user_token='
. $this->session->data['user_token'] . $url, true));
        }

        $this->getList();
    }

    public function repair() {


        $this->load->language('catalog/category');

        $this->document->setTitle($this->language->get('heading_title'));

        $this->load->model('catalog/category');

        if ($this->validateRepair()) {
            $this->model_catalog_category->repairCategories();

            $this->session->data['success'] = $this->language->get('text_success');

            $url = '';

            if (isset($this->request->get['sort'])) {
                $url .= '&sort=' . $this->request->get['sort'];
            }

            if (isset($this->request->get['order'])) {
                $url .= '&order=' . $this->request->get['order'];
A-4

            }

            if (isset($this->request->get['page'])) {
                $url .= '&page=' . $this->request->get['page'];
            }

            $this->response->redirect($this->url->link('catalog/category', 'user_token='
. $this->session->data['user_token'] . $url, true));
        }

        $this->getList();
    }

    protected function getList() {


        if (isset($this->request->get['sort'])) {
            $sort = $this->request->get['sort'];
        } else {
            $sort = 'name';
        }

        if (isset($this->request->get['order'])) {
            $order = $this->request->get['order'];
        } else {
            $order = 'ASC';
        }

        if (isset($this->request->get['page'])) {
            $page = $this->request->get['page'];
        } else {
            $page = 1;
        }

        $url = '';

        if (isset($this->request->get['sort'])) {
            $url .= '&sort=' . $this->request->get['sort'];
        }

        if (isset($this->request->get['order'])) {
            $url .= '&order=' . $this->request->get['order'];
        }

        if (isset($this->request->get['page'])) {
            $url .= '&page=' . $this->request->get['page'];
        }

        $data['breadcrumbs'] = array();
A-5

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('text_home'),
            'href' => $this->url->link('common/dashboard', 'user_token=' . $this-
>session->data['user_token'], true)
        );

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('heading_title'),
            'href' => $this->url->link('catalog/category', 'user_token=' . $this->session-
>data['user_token'] . $url, true)
        );

        $data['add'] = $this->url->link('catalog/category/add', 'user_token=' . $this-


>session->data['user_token'] . $url, true);
        $data['delete'] = $this->url->link('catalog/category/delete', 'user_token=' .
$this->session->data['user_token'] . $url, true);
        $data['repair'] = $this->url->link('catalog/category/repair', 'user_token=' .
$this->session->data['user_token'] . $url, true);

        $data['categories'] = array();

        $filter_data = array(
            'sort' => $sort,
            'order' => $order,
            'start' => ($page - 1) * $this->config->get('config_limit_admin'),
            'limit' => $this->config->get('config_limit_admin')
        );

        $category_total = $this->model_catalog_category->getTotalCategories();

        $results = $this->model_catalog_category->getCategories($filter_data);

        foreach ($results as $result) {


            $data['categories'][] = array(
                'category_id' => $result['category_id'],
                'name' => $result['name'],
                'sort_order' => $result['sort_order'],
                'edit' => $this->url->link('catalog/category/edit', 'user_token=' .
$this->session->data['user_token'] . '&category_id=' . $result['category_id'] . $url,
true),
                'delete' => $this->url->link('catalog/category/delete', 'user_token=' .
$this->session->data['user_token'] . '&category_id=' . $result['category_id'] . $url,
true)
            );
        }

        if (isset($this->error['warning'])) {
            $data['error_warning'] = $this->error['warning'];
A-6

        } else {
            $data['error_warning'] = '';
        }

        if (isset($this->session->data['success'])) {
            $data['success'] = $this->session->data['success'];

            unset($this->session->data['success']);
        } else {
            $data['success'] = '';
        }

        if (isset($this->request->post['selected'])) {
            $data['selected'] = (array)$this->request->post['selected'];
        } else {
            $data['selected'] = array();
        }

        $url = '';

        if ($order == 'ASC') {


            $url .= '&order=DESC';
        } else {
            $url .= '&order=ASC';
        }

        if (isset($this->request->get['page'])) {
            $url .= '&page=' . $this->request->get['page'];
        }

        $data['sort_name'] = $this->url->link('catalog/category', 'user_token=' . $this-


>session->data['user_token'] . '&sort=name' . $url, true);
        $data['sort_sort_order'] = $this->url->link('catalog/category', 'user_token=' .
$this->session->data['user_token'] . '&sort=sort_order' . $url, true);

        $url = '';

        if (isset($this->request->get['sort'])) {
            $url .= '&sort=' . $this->request->get['sort'];
        }

        if (isset($this->request->get['order'])) {
            $url .= '&order=' . $this->request->get['order'];
        }

        $pagination = new Pagination();


        $pagination->total = $category_total;
        $pagination->page = $page;
A-7

        $pagination->limit = $this->config->get('config_limit_admin');
        $pagination->url = $this->url->link('catalog/category', 'user_token=' . $this-
>session->data['user_token'] . $url . '&page={page}', true);

        $data['pagination'] = $pagination->render();

        $data['results'] = sprintf($this->language->get('text_pagination'),
($category_total) ? (($page - 1) * $this->config->get('config_limit_admin')) + 1 :
0, ((($page - 1) * $this->config->get('config_limit_admin')) > ($category_total -
$this->config->get('config_limit_admin'))) ? $category_total : ((($page - 1) *
$this->config->get('config_limit_admin')) + $this->config-
>get('config_limit_admin')), $category_total, ceil($category_total / $this->config-
>get('config_limit_admin')));

        $data['sort'] = $sort;
        $data['order'] = $order;

        $data['header'] = $this->load->controller('common/header');
        $data['column_left'] = $this->load->controller('common/column_left');
        $data['footer'] = $this->load->controller('common/footer');

        $this->response->setOutput($this->load->view('catalog/category_list',
$data));
    }

    protected function getForm() {


        $data['text_form'] = !isset($this->request->get['category_id']) ? $this-
>language->get('text_add') : $this->language->get('text_edit');

        if (isset($this->error['warning'])) {
            $data['error_warning'] = $this->error['warning'];
        } else {
            $data['error_warning'] = '';
        }

        if (isset($this->error['name'])) {
            $data['error_name'] = $this->error['name'];
        } else {
            $data['error_name'] = array();
        }

        if (isset($this->error['meta_title'])) {
            $data['error_meta_title'] = $this->error['meta_title'];
        } else {
            $data['error_meta_title'] = array();
        }

        if (isset($this->error['keyword'])) {
A-8

            $data['error_keyword'] = $this->error['keyword'];
        } else {
            $data['error_keyword'] = '';
        }

        if (isset($this->error['parent'])) {
            $data['error_parent'] = $this->error['parent'];
        } else {
            $data['error_parent'] = '';
        }
        
        $url = '';

        if (isset($this->request->get['sort'])) {
            $url .= '&sort=' . $this->request->get['sort'];
        }

        if (isset($this->request->get['order'])) {
            $url .= '&order=' . $this->request->get['order'];
        }

        if (isset($this->request->get['page'])) {
            $url .= '&page=' . $this->request->get['page'];
        }

        $data['breadcrumbs'] = array();

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('text_home'),
            'href' => $this->url->link('common/dashboard', 'user_token=' . $this-
>session->data['user_token'], true)
        );

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('heading_title'),
            'href' => $this->url->link('catalog/category', 'user_token=' . $this->session-
>data['user_token'] . $url, true)
        );

        if (!isset($this->request->get['category_id'])) {
            $data['action'] = $this->url->link('catalog/category/add', 'user_token=' .
$this->session->data['user_token'] . $url, true);
        } else {
            $data['action'] = $this->url->link('catalog/category/edit', 'user_token=' .
$this->session->data['user_token'] . '&category_id=' . $this->request-
>get['category_id'] . $url, true);
        }
A-9

        $data['cancel'] = $this->url->link('catalog/category', 'user_token=' . $this-


>session->data['user_token'] . $url, true);

        if (isset($this->request->get['category_id']) && ($this->request-


>server['REQUEST_METHOD'] != 'POST')) {
            $category_info = $this->model_catalog_category->getCategory($this-
>request->get['category_id']);
        }

        $data['user_token'] = $this->session->data['user_token'];

        $this->load->model('localisation/language');

        $data['languages'] = $this->model_localisation_language->getLanguages();

        if (isset($this->request->post['category_description'])) {
            $data['category_description'] = $this->request-
>post['category_description'];
        } elseif (isset($this->request->get['category_id'])) {
            $data['category_description'] = $this->model_catalog_category-
>getCategoryDescriptions($this->request->get['category_id']);
        } else {
            $data['category_description'] = array();
        }

        if (isset($this->request->post['path'])) {
            $data['path'] = $this->request->post['path'];
        } elseif (!empty($category_info)) {
            $data['path'] = $category_info['path'];
        } else {
            $data['path'] = '';
        }

        if (isset($this->request->post['parent_id'])) {
            $data['parent_id'] = $this->request->post['parent_id'];
        } elseif (!empty($category_info)) {
            $data['parent_id'] = $category_info['parent_id'];
        } else {
            $data['parent_id'] = 0;
        }

        $this->load->model('catalog/filter');

        if (isset($this->request->post['category_filter'])) {
            $filters = $this->request->post['category_filter'];
        } elseif (isset($this->request->get['category_id'])) {
            $filters = $this->model_catalog_category->getCategoryFilters($this-
>request->get['category_id']);
A-10

        } else {
            $filters = array();
        }

        $data['category_filters'] = array();

        foreach ($filters as $filter_id) {


            $filter_info = $this->model_catalog_filter->getFilter($filter_id);

            if ($filter_info) {
                $data['category_filters'][] = array(
                    'filter_id' => $filter_info['filter_id'],
                    'name' => $filter_info['group'] . ' &gt; ' . $filter_info['name']
                );
            }
        }

        $this->load->model('setting/store');

        $data['stores'] = array();
        
        $data['stores'][] = array(
            'store_id' => 0,
            'name' => $this->language->get('text_default')
        );
        
        $stores = $this->model_setting_store->getStores();

        foreach ($stores as $store) {


            $data['stores'][] = array(
                'store_id' => $store['store_id'],
                'name' => $store['name']
            );
        }

        if (isset($this->request->post['category_store'])) {
            $data['category_store'] = $this->request->post['category_store'];
        } elseif (isset($this->request->get['category_id'])) {
            $data['category_store'] = $this->model_catalog_category-
>getCategoryStores($this->request->get['category_id']);
        } else {
            $data['category_store'] = array(0);
        }

        if (isset($this->request->post['image'])) {
            $data['image'] = $this->request->post['image'];
        } elseif (!empty($category_info)) {
            $data['image'] = $category_info['image'];
A-11

        } else {
            $data['image'] = '';
        }

        $this->load->model('tool/image');

        if (isset($this->request->post['image']) && is_file(DIR_IMAGE . $this-


>request->post['image'])) {
            $data['thumb'] = $this->model_tool_image->resize($this->request-
>post['image'], 100, 100);
        } elseif (!empty($category_info) && is_file(DIR_IMAGE .
$category_info['image'])) {
            $data['thumb'] = $this->model_tool_image-
>resize($category_info['image'], 100, 100);
        } else {
            $data['thumb'] = $this->model_tool_image->resize('no_image.png', 100,
100);
        }

        $data['placeholder'] = $this->model_tool_image->resize('no_image.png', 100,


100);

        if (isset($this->request->post['top'])) {
            $data['top'] = $this->request->post['top'];
        } elseif (!empty($category_info)) {
            $data['top'] = $category_info['top'];
        } else {
            $data['top'] = 0;
        }

        if (isset($this->request->post['column'])) {
            $data['column'] = $this->request->post['column'];
        } elseif (!empty($category_info)) {
            $data['column'] = $category_info['column'];
        } else {
            $data['column'] = 1;
        }

        if (isset($this->request->post['sort_order'])) {
            $data['sort_order'] = $this->request->post['sort_order'];
        } elseif (!empty($category_info)) {
            $data['sort_order'] = $category_info['sort_order'];
        } else {
            $data['sort_order'] = 0;
        }

        if (isset($this->request->post['status'])) {
            $data['status'] = $this->request->post['status'];
A-12

        } elseif (!empty($category_info)) {


            $data['status'] = $category_info['status'];
        } else {
            $data['status'] = true;
        }
        
        if (isset($this->request->post['category_seo_url'])) {
            $data['category_seo_url'] = $this->request->post['category_seo_url'];
        } elseif (isset($this->request->get['category_id'])) {
            $data['category_seo_url'] = $this->model_catalog_category-
>getCategorySeoUrls($this->request->get['category_id']);
        } else {
            $data['category_seo_url'] = array();
        }
                
        if (isset($this->request->post['category_layout'])) {
            $data['category_layout'] = $this->request->post['category_layout'];
        } elseif (isset($this->request->get['category_id'])) {
            $data['category_layout'] = $this->model_catalog_category-
>getCategoryLayouts($this->request->get['category_id']);
        } else {
            $data['category_layout'] = array();
        }

        $this->load->model('design/layout');

        $data['layouts'] = $this->model_design_layout->getLayouts();

        $data['header'] = $this->load->controller('common/header');
        $data['column_left'] = $this->load->controller('common/column_left');
        $data['footer'] = $this->load->controller('common/footer');

        $this->response->setOutput($this->load->view('catalog/category_form',
$data));
    }

    protected function validateForm() {


        if (!$this->user->hasPermission('modify', 'catalog/category')) {
            $this->error['warning'] = $this->language->get('error_permission');
        }

        foreach ($this->request->post['category_description'] as $language_id =>


$value) {
            if ((utf8_strlen($value['name']) < 1) || (utf8_strlen($value['name']) > 255))
{
                $this->error['name'][$language_id] = $this->language-
>get('error_name');
            }
A-13

            if ((utf8_strlen($value['meta_title']) < 1) || (utf8_strlen($value['meta_title'])


> 255)) {
                $this->error['meta_title'][$language_id] = $this->language-
>get('error_meta_title');
            }
        }

        if (isset($this->request->get['category_id']) && $this->request-


>post['parent_id']) {
            $results = $this->model_catalog_category->getCategoryPath($this-
>request->post['parent_id']);
            
            foreach ($results as $result) {
                if ($result['path_id'] == $this->request->get['category_id']) {
                    $this->error['parent'] = $this->language->get('error_parent');
                    
                    break;
                }
            }
        }

        if ($this->request->post['category_seo_url']) {
            $this->load->model('design/seo_url');
            
            foreach ($this->request->post['category_seo_url'] as $store_id =>
$language) {
                foreach ($language as $language_id => $keyword) {
                    if (!empty($keyword)) {
                        if (count(array_keys($language, $keyword)) > 1) {
                            $this->error['keyword'][$store_id][$language_id] = $this-
>language->get('error_unique');
                        }

                        $seo_urls = $this->model_design_seo_url-
>getSeoUrlsByKeyword($keyword);
    
                        foreach ($seo_urls as $seo_url) {
                            if (($seo_url['store_id'] == $store_id) && (!isset($this->request-
>get['category_id']) || ($seo_url['query'] != 'category_id=' . $this->request-
>get['category_id']))) {        
                                $this->error['keyword'][$store_id][$language_id] = $this-
>language->get('error_keyword');
                
                                break;
                            }
                        }
                    }
A-14

                }
            }
        }
        
        if ($this->error && !isset($this->error['warning'])) {
            $this->error['warning'] = $this->language->get('error_warning');
        }
        
        return !$this->error;
    }

    protected function validateDelete() {


        if (!$this->user->hasPermission('modify', 'catalog/category')) {
            $this->error['warning'] = $this->language->get('error_permission');
        }

        return !$this->error;
    }

    protected function validateRepair() {


        if (!$this->user->hasPermission('modify', 'catalog/category')) {
            $this->error['warning'] = $this->language->get('error_permission');
        }

        return !$this->error;
    }

    public function autocomplete() {


        $json = array();

        if (isset($this->request->get['filter_name'])) {
            $this->load->model('catalog/category');

            $filter_data = array(
                'filter_name' => $this->request->get['filter_name'],
                'sort' => 'name',
                'order' => 'ASC',
                'start' => 0,
                'limit' => 5
            );

            $results = $this->model_catalog_category->getCategories($filter_data);

            foreach ($results as $result) {


                $json[] = array(
                    'category_id' => $result['category_id'],
                    'name' => strip_tags(html_entity_decode($result['name'],
ENT_QUOTES, 'UTF-8'))
A-15

                );
            }
        }

        $sort_order = array();

        foreach ($json as $key => $value) {


            $sort_order[$key] = $value['name'];
        }

        array_multisort($sort_order, SORT_ASC, $json);

        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));
    }
}

Product.php
<?php
class ControllerCatalogProduct extends Controller {
    private $error = array();

    public function index() {


        $this->load->language('catalog/product');

        $this->document->setTitle($this->language->get('heading_title'));

        $this->load->model('catalog/product');

        $this->getList();
    }

    public function add() {


        $this->load->language('catalog/product');

        $this->document->setTitle($this->language->get('heading_title'));

        $this->load->model('catalog/product');

        if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this-


>validateForm()) {
            $this->model_catalog_product->addProduct($this->request->post);

            $this->session->data['success'] = $this->language->get('text_success');

            $url = '';

            if (isset($this->request->get['filter_name'])) {
A-16

                $url .= '&filter_name=' . urlencode(html_entity_decode($this->request-


>get['filter_name'], ENT_QUOTES, 'UTF-8'));
            }

            if (isset($this->request->get['filter_model'])) {
                $url .= '&filter_model=' . urlencode(html_entity_decode($this->request-
>get['filter_model'], ENT_QUOTES, 'UTF-8'));
            }

            if (isset($this->request->get['filter_price'])) {
                $url .= '&filter_price=' . $this->request->get['filter_price'];
            }

            if (isset($this->request->get['filter_quantity'])) {
                $url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
            }

            if (isset($this->request->get['filter_status'])) {
                $url .= '&filter_status=' . $this->request->get['filter_status'];
            }

            if (isset($this->request->get['sort'])) {
                $url .= '&sort=' . $this->request->get['sort'];
            }

            if (isset($this->request->get['order'])) {
                $url .= '&order=' . $this->request->get['order'];
            }

            if (isset($this->request->get['page'])) {
                $url .= '&page=' . $this->request->get['page'];
            }

            $this->response->redirect($this->url->link('catalog/product', 'user_token=' . $this-


>session->data['user_token'] . $url, true));
        }

        $this->getForm();
    }

    public function edit() {


        $this->load->language('catalog/product');

        $this->document->setTitle($this->language->get('heading_title'));

        $this->load->model('catalog/product');

        if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this-


>validateForm()) {
            $this->model_catalog_product->editProduct($this->request->get['product_id'],
$this->request->post);

            $this->session->data['success'] = $this->language->get('text_success');
A-17

            $url = '';

            if (isset($this->request->get['filter_name'])) {
                $url .= '&filter_name=' . urlencode(html_entity_decode($this->request-
>get['filter_name'], ENT_QUOTES, 'UTF-8'));
            }

            if (isset($this->request->get['filter_model'])) {
                $url .= '&filter_model=' . urlencode(html_entity_decode($this->request-
>get['filter_model'], ENT_QUOTES, 'UTF-8'));
            }

            if (isset($this->request->get['filter_price'])) {
                $url .= '&filter_price=' . $this->request->get['filter_price'];
            }

            if (isset($this->request->get['filter_quantity'])) {
                $url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
            }

            if (isset($this->request->get['filter_status'])) {
                $url .= '&filter_status=' . $this->request->get['filter_status'];
            }

            if (isset($this->request->get['sort'])) {
                $url .= '&sort=' . $this->request->get['sort'];
            }

            if (isset($this->request->get['order'])) {
                $url .= '&order=' . $this->request->get['order'];
            }

            if (isset($this->request->get['page'])) {
                $url .= '&page=' . $this->request->get['page'];
            }

            $this->response->redirect($this->url->link('catalog/product', 'user_token=' . $this-


>session->data['user_token'] . $url, true));
        }

        $this->getForm();
    }

    public function delete() {


        $this->load->language('catalog/product');

        $this->document->setTitle($this->language->get('heading_title'));

        $this->load->model('catalog/product');

        if (isset($this->request->post['selected']) && $this->validateDelete()) {


            foreach ($this->request->post['selected'] as $product_id) {
A-18

                $this->model_catalog_product->deleteProduct($product_id);
            }

            $this->session->data['success'] = $this->language->get('text_success');

            $url = '';

            if (isset($this->request->get['filter_name'])) {
                $url .= '&filter_name=' . urlencode(html_entity_decode($this->request-
>get['filter_name'], ENT_QUOTES, 'UTF-8'));
            }

            if (isset($this->request->get['filter_model'])) {
                $url .= '&filter_model=' . urlencode(html_entity_decode($this->request-
>get['filter_model'], ENT_QUOTES, 'UTF-8'));
            }

            if (isset($this->request->get['filter_price'])) {
                $url .= '&filter_price=' . $this->request->get['filter_price'];
            }

            if (isset($this->request->get['filter_quantity'])) {
                $url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
            }

            if (isset($this->request->get['filter_status'])) {
                $url .= '&filter_status=' . $this->request->get['filter_status'];
            }

            if (isset($this->request->get['sort'])) {
                $url .= '&sort=' . $this->request->get['sort'];
            }

            if (isset($this->request->get['order'])) {
                $url .= '&order=' . $this->request->get['order'];
            }

            if (isset($this->request->get['page'])) {
                $url .= '&page=' . $this->request->get['page'];
            }

            $this->response->redirect($this->url->link('catalog/product', 'user_token=' . $this-


>session->data['user_token'] . $url, true));
        }

        $this->getList();
    }

    public function copy() {


        $this->load->language('catalog/product');

        $this->document->setTitle($this->language->get('heading_title'));
A-19

        $this->load->model('catalog/product');

        if (isset($this->request->post['selected']) && $this->validateCopy()) {


            foreach ($this->request->post['selected'] as $product_id) {
                $this->model_catalog_product->copyProduct($product_id);
            }

            $this->session->data['success'] = $this->language->get('text_success');

            $url = '';

            if (isset($this->request->get['filter_name'])) {
                $url .= '&filter_name=' . urlencode(html_entity_decode($this->request-
>get['filter_name'], ENT_QUOTES, 'UTF-8'));
            }

            if (isset($this->request->get['filter_model'])) {
                $url .= '&filter_model=' . urlencode(html_entity_decode($this->request-
>get['filter_model'], ENT_QUOTES, 'UTF-8'));
            }

            if (isset($this->request->get['filter_price'])) {
                $url .= '&filter_price=' . $this->request->get['filter_price'];
            }

            if (isset($this->request->get['filter_quantity'])) {
                $url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
            }

            if (isset($this->request->get['filter_status'])) {
                $url .= '&filter_status=' . $this->request->get['filter_status'];
            }

            if (isset($this->request->get['sort'])) {
                $url .= '&sort=' . $this->request->get['sort'];
            }

            if (isset($this->request->get['order'])) {
                $url .= '&order=' . $this->request->get['order'];
            }

            if (isset($this->request->get['page'])) {
                $url .= '&page=' . $this->request->get['page'];
            }

            $this->response->redirect($this->url->link('catalog/product', 'user_token=' . $this-


>session->data['user_token'] . $url, true));
        }

        $this->getList();
    }

    protected function getList() {


A-20

        if (isset($this->request->get['filter_name'])) {
            $filter_name = $this->request->get['filter_name'];
        } else {
            $filter_name = '';
        }

        if (isset($this->request->get['filter_model'])) {
            $filter_model = $this->request->get['filter_model'];
        } else {
            $filter_model = '';
        }

        if (isset($this->request->get['filter_price'])) {
            $filter_price = $this->request->get['filter_price'];
        } else {
            $filter_price = '';
        }

        if (isset($this->request->get['filter_quantity'])) {
            $filter_quantity = $this->request->get['filter_quantity'];
        } else {
            $filter_quantity = '';
        }

        if (isset($this->request->get['filter_status'])) {
            $filter_status = $this->request->get['filter_status'];
        } else {
            $filter_status = '';
        }

        if (isset($this->request->get['sort'])) {
            $sort = $this->request->get['sort'];
        } else {
            $sort = 'pd.name';
        }

        if (isset($this->request->get['order'])) {
            $order = $this->request->get['order'];
        } else {
            $order = 'ASC';
        }

        if (isset($this->request->get['page'])) {
            $page = $this->request->get['page'];
        } else {
            $page = 1;
        }

        $url = '';

        if (isset($this->request->get['filter_name'])) {
            $url .= '&filter_name=' . urlencode(html_entity_decode($this->request-
>get['filter_name'], ENT_QUOTES, 'UTF-8'));
A-21

        }

        if (isset($this->request->get['filter_model'])) {
            $url .= '&filter_model=' . urlencode(html_entity_decode($this->request-
>get['filter_model'], ENT_QUOTES, 'UTF-8'));
        }

        if (isset($this->request->get['filter_price'])) {
            $url .= '&filter_price=' . $this->request->get['filter_price'];
        }

        if (isset($this->request->get['filter_quantity'])) {
            $url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
        }

        if (isset($this->request->get['filter_status'])) {
            $url .= '&filter_status=' . $this->request->get['filter_status'];
        }

        if (isset($this->request->get['order'])) {
            $url .= '&order=' . $this->request->get['order'];
        }

        if (isset($this->request->get['page'])) {
            $url .= '&page=' . $this->request->get['page'];
        }

        $data['breadcrumbs'] = array();

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('text_home'),
            'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session-
>data['user_token'], true)
        );

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('heading_title'),
            'href' => $this->url->link('catalog/product', 'user_token=' . $this->session-
>data['user_token'] . $url, true)
        );

        $data['add'] = $this->url->link('catalog/product/add', 'user_token=' . $this->session-


>data['user_token'] . $url, true);
        $data['copy'] = $this->url->link('catalog/product/copy', 'user_token=' . $this-
>session->data['user_token'] . $url, true);
        $data['delete'] = $this->url->link('catalog/product/delete', 'user_token=' . $this-
>session->data['user_token'] . $url, true);

        $data['products'] = array();

        $filter_data = array(
            'filter_name'    => $filter_name,
            'filter_model'   => $filter_model,
A-22

            'filter_price'   => $filter_price,


            'filter_quantity' => $filter_quantity,
            'filter_status' => $filter_status,
            'sort' => $sort,
            'order' => $order,
            'start' => ($page - 1) * $this->config->get('config_limit_admin'),
            'limit' => $this->config->get('config_limit_admin')
        );

        $this->load->model('tool/image');

        $product_total = $this->model_catalog_product->getTotalProducts($filter_data);

        $results = $this->model_catalog_product->getProducts($filter_data);

        foreach ($results as $result) {


            if (is_file(DIR_IMAGE . $result['image'])) {
                $image = $this->model_tool_image->resize($result['image'], 40, 40);
            } else {
                $image = $this->model_tool_image->resize('no_image.png', 40, 40);
            }

            $special = false;

            $product_specials = $this->model_catalog_product-
>getProductSpecials($result['product_id']);

            foreach ($product_specials as $product_special) {


                if (($product_special['date_start'] == '0000-00-00' ||
strtotime($product_special['date_start']) < time()) && ($product_special['date_end'] ==
'0000-00-00' || strtotime($product_special['date_end']) > time())) {
                    $special = $this->currency->format($product_special['price'], $this->config-
>get('config_currency'));

                    break;
                }
            }

            $data['products'][] = array(
                'product_id' => $result['product_id'],
                'image' => $image,
                'name' => $result['name'],
                'model' => $result['model'],
                'price' => $this->currency->format($result['price'], $this->config-
>get('config_currency')),
                'special' => $special,
                'quantity' => $result['quantity'],
                'status' => $result['status'] ? $this->language->get('text_enabled') : $this-
>language->get('text_disabled'),
                'edit' => $this->url->link('catalog/product/edit', 'user_token=' . $this-
>session->data['user_token'] . '&product_id=' . $result['product_id'] . $url, true)
            );
        }
A-23

        $data['user_token'] = $this->session->data['user_token'];

        if (isset($this->error['warning'])) {
            $data['error_warning'] = $this->error['warning'];
        } else {
            $data['error_warning'] = '';
        }

        if (isset($this->session->data['success'])) {
            $data['success'] = $this->session->data['success'];

            unset($this->session->data['success']);
        } else {
            $data['success'] = '';
        }

        if (isset($this->request->post['selected'])) {
            $data['selected'] = (array)$this->request->post['selected'];
        } else {
            $data['selected'] = array();
        }

        $url = '';

        if (isset($this->request->get['filter_name'])) {
            $url .= '&filter_name=' . urlencode(html_entity_decode($this->request-
>get['filter_name'], ENT_QUOTES, 'UTF-8'));
        }

        if (isset($this->request->get['filter_model'])) {
            $url .= '&filter_model=' . urlencode(html_entity_decode($this->request-
>get['filter_model'], ENT_QUOTES, 'UTF-8'));
        }

        if (isset($this->request->get['filter_price'])) {
            $url .= '&filter_price=' . $this->request->get['filter_price'];
        }

        if (isset($this->request->get['filter_quantity'])) {
            $url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
        }

        if (isset($this->request->get['filter_status'])) {
            $url .= '&filter_status=' . $this->request->get['filter_status'];
        }

        if ($order == 'ASC') {


            $url .= '&order=DESC';
        } else {
            $url .= '&order=ASC';
        }
A-24

        if (isset($this->request->get['page'])) {
            $url .= '&page=' . $this->request->get['page'];
        }

        $data['sort_name'] = $this->url->link('catalog/product', 'user_token=' . $this-


>session->data['user_token'] . '&sort=pd.name' . $url, true);
        $data['sort_model'] = $this->url->link('catalog/product', 'user_token=' . $this-
>session->data['user_token'] . '&sort=p.model' . $url, true);
        $data['sort_price'] = $this->url->link('catalog/product', 'user_token=' . $this->session-
>data['user_token'] . '&sort=p.price' . $url, true);
        $data['sort_quantity'] = $this->url->link('catalog/product', 'user_token=' . $this-
>session->data['user_token'] . '&sort=p.quantity' . $url, true);
        $data['sort_status'] = $this->url->link('catalog/product', 'user_token=' . $this-
>session->data['user_token'] . '&sort=p.status' . $url, true);
        $data['sort_order'] = $this->url->link('catalog/product', 'user_token=' . $this->session-
>data['user_token'] . '&sort=p.sort_order' . $url, true);

        $url = '';

        if (isset($this->request->get['filter_name'])) {
            $url .= '&filter_name=' . urlencode(html_entity_decode($this->request-
>get['filter_name'], ENT_QUOTES, 'UTF-8'));
        }

        if (isset($this->request->get['filter_model'])) {
            $url .= '&filter_model=' . urlencode(html_entity_decode($this->request-
>get['filter_model'], ENT_QUOTES, 'UTF-8'));
        }

        if (isset($this->request->get['filter_price'])) {
            $url .= '&filter_price=' . $this->request->get['filter_price'];
        }

        if (isset($this->request->get['filter_quantity'])) {
            $url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
        }

        if (isset($this->request->get['filter_status'])) {
            $url .= '&filter_status=' . $this->request->get['filter_status'];
        }

        if (isset($this->request->get['sort'])) {
            $url .= '&sort=' . $this->request->get['sort'];
        }

        if (isset($this->request->get['order'])) {
            $url .= '&order=' . $this->request->get['order'];
        }

        $pagination = new Pagination();


        $pagination->total = $product_total;
        $pagination->page = $page;
        $pagination->limit = $this->config->get('config_limit_admin');
A-25

        $pagination->url = $this->url->link('catalog/product', 'user_token=' . $this->session-


>data['user_token'] . $url . '&page={page}', true);

        $data['pagination'] = $pagination->render();

        $data['results'] = sprintf($this->language->get('text_pagination'), ($product_total) ?


(($page - 1) * $this->config->get('config_limit_admin')) + 1 : 0, ((($page - 1) * $this-
>config->get('config_limit_admin')) > ($product_total - $this->config-
>get('config_limit_admin'))) ? $product_total : ((($page - 1) * $this->config-
>get('config_limit_admin')) + $this->config->get('config_limit_admin')), $product_total,
ceil($product_total / $this->config->get('config_limit_admin')));

        $data['filter_name'] = $filter_name;
        $data['filter_model'] = $filter_model;
        $data['filter_price'] = $filter_price;
        $data['filter_quantity'] = $filter_quantity;
        $data['filter_status'] = $filter_status;

        $data['sort'] = $sort;
        $data['order'] = $order;

        $data['header'] = $this->load->controller('common/header');
        $data['column_left'] = $this->load->controller('common/column_left');
        $data['footer'] = $this->load->controller('common/footer');

        $this->response->setOutput($this->load->view('catalog/product_list', $data));
    }

    protected function getForm() {


        $data['text_form'] = !isset($this->request->get['product_id']) ? $this->language-
>get('text_add') : $this->language->get('text_edit');

        if (isset($this->error['warning'])) {
            $data['error_warning'] = $this->error['warning'];
        } else {
            $data['error_warning'] = '';
        }

        if (isset($this->error['name'])) {
            $data['error_name'] = $this->error['name'];
        } else {
            $data['error_name'] = array();
        }

        if (isset($this->error['meta_title'])) {
            $data['error_meta_title'] = $this->error['meta_title'];
        } else {
            $data['error_meta_title'] = array();
        }

        if (isset($this->error['model'])) {
            $data['error_model'] = $this->error['model'];
        } else {
A-26

            $data['error_model'] = '';
        }

        if (isset($this->error['keyword'])) {
            $data['error_keyword'] = $this->error['keyword'];
        } else {
            $data['error_keyword'] = '';
        }

        $url = '';

        if (isset($this->request->get['filter_name'])) {
            $url .= '&filter_name=' . urlencode(html_entity_decode($this->request-
>get['filter_name'], ENT_QUOTES, 'UTF-8'));
        }

        if (isset($this->request->get['filter_model'])) {
            $url .= '&filter_model=' . urlencode(html_entity_decode($this->request-
>get['filter_model'], ENT_QUOTES, 'UTF-8'));
        }

        if (isset($this->request->get['filter_price'])) {
            $url .= '&filter_price=' . $this->request->get['filter_price'];
        }

        if (isset($this->request->get['filter_quantity'])) {
            $url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
        }

        if (isset($this->request->get['filter_status'])) {
            $url .= '&filter_status=' . $this->request->get['filter_status'];
        }

        if (isset($this->request->get['sort'])) {
            $url .= '&sort=' . $this->request->get['sort'];
        }

        if (isset($this->request->get['order'])) {
            $url .= '&order=' . $this->request->get['order'];
        }

        if (isset($this->request->get['page'])) {
            $url .= '&page=' . $this->request->get['page'];
        }

        $data['breadcrumbs'] = array();

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('text_home'),
            'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session-
>data['user_token'], true)
        );
A-27

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('heading_title'),
            'href' => $this->url->link('catalog/product', 'user_token=' . $this->session-
>data['user_token'] . $url, true)
        );

        if (!isset($this->request->get['product_id'])) {
            $data['action'] = $this->url->link('catalog/product/add', 'user_token=' . $this-
>session->data['user_token'] . $url, true);
        } else {
            $data['action'] = $this->url->link('catalog/product/edit', 'user_token=' . $this-
>session->data['user_token'] . '&product_id=' . $this->request->get['product_id'] . $url,
true);
        }

        $data['cancel'] = $this->url->link('catalog/product', 'user_token=' . $this->session-


>data['user_token'] . $url, true);

        if (isset($this->request->get['product_id']) && ($this->request-


>server['REQUEST_METHOD'] != 'POST')) {
            $product_info = $this->model_catalog_product->getProduct($this->request-
>get['product_id']);
        }

        $data['user_token'] = $this->session->data['user_token'];

        $this->load->model('localisation/language');

        $data['languages'] = $this->model_localisation_language->getLanguages();

        if (isset($this->request->post['product_description'])) {
            $data['product_description'] = $this->request->post['product_description'];
        } elseif (isset($this->request->get['product_id'])) {
            $data['product_description'] = $this->model_catalog_product-
>getProductDescriptions($this->request->get['product_id']);
        } else {
            $data['product_description'] = array();
        }

        if (isset($this->request->post['model'])) {
            $data['model'] = $this->request->post['model'];
        } elseif (!empty($product_info)) {
            $data['model'] = $product_info['model'];
        } else {
            $data['model'] = '';
        }

        if (isset($this->request->post['sku'])) {
            $data['sku'] = $this->request->post['sku'];
        } elseif (!empty($product_info)) {
            $data['sku'] = $product_info['sku'];
        } else {
            $data['sku'] = '';
A-28

        }

        if (isset($this->request->post['upc'])) {
            $data['upc'] = $this->request->post['upc'];
        } elseif (!empty($product_info)) {
            $data['upc'] = $product_info['upc'];
        } else {
            $data['upc'] = '';
        }

        if (isset($this->request->post['ean'])) {
            $data['ean'] = $this->request->post['ean'];
        } elseif (!empty($product_info)) {
            $data['ean'] = $product_info['ean'];
        } else {
            $data['ean'] = '';
        }

        if (isset($this->request->post['jan'])) {
            $data['jan'] = $this->request->post['jan'];
        } elseif (!empty($product_info)) {
            $data['jan'] = $product_info['jan'];
        } else {
            $data['jan'] = '';
        }

        if (isset($this->request->post['isbn'])) {
            $data['isbn'] = $this->request->post['isbn'];
        } elseif (!empty($product_info)) {
            $data['isbn'] = $product_info['isbn'];
        } else {
            $data['isbn'] = '';
        }

        if (isset($this->request->post['mpn'])) {
            $data['mpn'] = $this->request->post['mpn'];
        } elseif (!empty($product_info)) {
            $data['mpn'] = $product_info['mpn'];
        } else {
            $data['mpn'] = '';
        }

        if (isset($this->request->post['location'])) {
            $data['location'] = $this->request->post['location'];
        } elseif (!empty($product_info)) {
            $data['location'] = $product_info['location'];
        } else {
            $data['location'] = '';
        }

        $this->load->model('setting/store');

        $data['stores'] = array();
A-29

        
        $data['stores'][] = array(
            'store_id' => 0,
            'name' => $this->language->get('text_default')
        );
        
        $stores = $this->model_setting_store->getStores();

        foreach ($stores as $store) {


            $data['stores'][] = array(
                'store_id' => $store['store_id'],
                'name' => $store['name']
            );
        }

        if (isset($this->request->post['product_store'])) {
            $data['product_store'] = $this->request->post['product_store'];
        } elseif (isset($this->request->get['product_id'])) {
            $data['product_store'] = $this->model_catalog_product->getProductStores($this-
>request->get['product_id']);
        } else {
            $data['product_store'] = array(0);
        }

        if (isset($this->request->post['shipping'])) {
            $data['shipping'] = $this->request->post['shipping'];
        } elseif (!empty($product_info)) {
            $data['shipping'] = $product_info['shipping'];
        } else {
            $data['shipping'] = 1;
        }

        if (isset($this->request->post['price'])) {
            $data['price'] = $this->request->post['price'];
        } elseif (!empty($product_info)) {
            $data['price'] = $product_info['price'];
        } else {
            $data['price'] = '';
        }

        $this->load->model('catalog/recurring');

        $data['recurrings'] = $this->model_catalog_recurring->getRecurrings();

        if (isset($this->request->post['product_recurrings'])) {
            $data['product_recurrings'] = $this->request->post['product_recurrings'];
        } elseif (!empty($product_info)) {
            $data['product_recurrings'] = $this->model_catalog_product-
>getRecurrings($product_info['product_id']);
        } else {
            $data['product_recurrings'] = array();
        }
A-30

        $this->load->model('localisation/tax_class');

        $data['tax_classes'] = $this->model_localisation_tax_class->getTaxClasses();

        if (isset($this->request->post['tax_class_id'])) {
            $data['tax_class_id'] = $this->request->post['tax_class_id'];
        } elseif (!empty($product_info)) {
            $data['tax_class_id'] = $product_info['tax_class_id'];
        } else {
            $data['tax_class_id'] = 0;
        }

        if (isset($this->request->post['date_available'])) {
            $data['date_available'] = $this->request->post['date_available'];
        } elseif (!empty($product_info)) {
            $data['date_available'] = ($product_info['date_available'] != '0000-00-00') ?
$product_info['date_available'] : '';
        } else {
            $data['date_available'] = date('Y-m-d');
        }

        if (isset($this->request->post['quantity'])) {
            $data['quantity'] = $this->request->post['quantity'];
        } elseif (!empty($product_info)) {
            $data['quantity'] = $product_info['quantity'];
        } else {
            $data['quantity'] = 1;
        }

        if (isset($this->request->post['minimum'])) {
            $data['minimum'] = $this->request->post['minimum'];
        } elseif (!empty($product_info)) {
            $data['minimum'] = $product_info['minimum'];
        } else {
            $data['minimum'] = 1;
        }

        if (isset($this->request->post['subtract'])) {
            $data['subtract'] = $this->request->post['subtract'];
        } elseif (!empty($product_info)) {
            $data['subtract'] = $product_info['subtract'];
        } else {
            $data['subtract'] = 1;
        }

        if (isset($this->request->post['sort_order'])) {
            $data['sort_order'] = $this->request->post['sort_order'];
        } elseif (!empty($product_info)) {
            $data['sort_order'] = $product_info['sort_order'];
        } else {
            $data['sort_order'] = 1;
        }
A-31

        $this->load->model('localisation/stock_status');

        $data['stock_statuses'] = $this->model_localisation_stock_status-
>getStockStatuses();

        if (isset($this->request->post['stock_status_id'])) {
            $data['stock_status_id'] = $this->request->post['stock_status_id'];
        } elseif (!empty($product_info)) {
            $data['stock_status_id'] = $product_info['stock_status_id'];
        } else {
            $data['stock_status_id'] = 0;
        }

        if (isset($this->request->post['status'])) {
            $data['status'] = $this->request->post['status'];
        } elseif (!empty($product_info)) {
            $data['status'] = $product_info['status'];
        } else {
            $data['status'] = true;
        }

        if (isset($this->request->post['weight'])) {
            $data['weight'] = $this->request->post['weight'];
        } elseif (!empty($product_info)) {
            $data['weight'] = $product_info['weight'];
        } else {
            $data['weight'] = '';
        }

        $this->load->model('localisation/weight_class');

        $data['weight_classes'] = $this->model_localisation_weight_class-
>getWeightClasses();

        if (isset($this->request->post['weight_class_id'])) {
            $data['weight_class_id'] = $this->request->post['weight_class_id'];
        } elseif (!empty($product_info)) {
            $data['weight_class_id'] = $product_info['weight_class_id'];
        } else {
            $data['weight_class_id'] = $this->config->get('config_weight_class_id');
        }

        if (isset($this->request->post['length'])) {
            $data['length'] = $this->request->post['length'];
        } elseif (!empty($product_info)) {
            $data['length'] = $product_info['length'];
        } else {
            $data['length'] = '';
        }

        if (isset($this->request->post['width'])) {
            $data['width'] = $this->request->post['width'];
        } elseif (!empty($product_info)) {
A-32

            $data['width'] = $product_info['width'];
        } else {
            $data['width'] = '';
        }

        if (isset($this->request->post['height'])) {
            $data['height'] = $this->request->post['height'];
        } elseif (!empty($product_info)) {
            $data['height'] = $product_info['height'];
        } else {
            $data['height'] = '';
        }

        $this->load->model('localisation/length_class');

        $data['length_classes'] = $this->model_localisation_length_class-
>getLengthClasses();

        if (isset($this->request->post['length_class_id'])) {
            $data['length_class_id'] = $this->request->post['length_class_id'];
        } elseif (!empty($product_info)) {
            $data['length_class_id'] = $product_info['length_class_id'];
        } else {
            $data['length_class_id'] = $this->config->get('config_length_class_id');
        }

        $this->load->model('catalog/manufacturer');

        if (isset($this->request->post['manufacturer_id'])) {
            $data['manufacturer_id'] = $this->request->post['manufacturer_id'];
        } elseif (!empty($product_info)) {
            $data['manufacturer_id'] = $product_info['manufacturer_id'];
        } else {
            $data['manufacturer_id'] = 0;
        }

        if (isset($this->request->post['manufacturer'])) {
            $data['manufacturer'] = $this->request->post['manufacturer'];
        } elseif (!empty($product_info)) {
            $manufacturer_info = $this->model_catalog_manufacturer-
>getManufacturer($product_info['manufacturer_id']);

            if ($manufacturer_info) {
                $data['manufacturer'] = $manufacturer_info['name'];
            } else {
                $data['manufacturer'] = '';
            }
        } else {
            $data['manufacturer'] = '';
        }

        // Categories
        $this->load->model('catalog/category');
A-33

        if (isset($this->request->post['product_category'])) {
            $categories = $this->request->post['product_category'];
        } elseif (isset($this->request->get['product_id'])) {
            $categories = $this->model_catalog_product->getProductCategories($this-
>request->get['product_id']);
        } else {
            $categories = array();
        }

        $data['product_categories'] = array();

        foreach ($categories as $category_id) {


            $category_info = $this->model_catalog_category->getCategory($category_id);

            if ($category_info) {
                $data['product_categories'][] = array(
                    'category_id' => $category_info['category_id'],
                    'name' => ($category_info['path']) ? $category_info['path'] . ' &gt; ' .
$category_info['name'] : $category_info['name']
                );
            }
        }

        // Filters
        $this->load->model('catalog/filter');

        if (isset($this->request->post['product_filter'])) {
            $filters = $this->request->post['product_filter'];
        } elseif (isset($this->request->get['product_id'])) {
            $filters = $this->model_catalog_product->getProductFilters($this->request-
>get['product_id']);
        } else {
            $filters = array();
        }

        $data['product_filters'] = array();

        foreach ($filters as $filter_id) {


            $filter_info = $this->model_catalog_filter->getFilter($filter_id);

            if ($filter_info) {
                $data['product_filters'][] = array(
                    'filter_id' => $filter_info['filter_id'],
                    'name' => $filter_info['group'] . ' &gt; ' . $filter_info['name']
                );
            }
        }

        // Attributes
        $this->load->model('catalog/attribute');

        if (isset($this->request->post['product_attribute'])) {
A-34

            $product_attributes = $this->request->post['product_attribute'];
        } elseif (isset($this->request->get['product_id'])) {
            $product_attributes = $this->model_catalog_product->getProductAttributes($this-
>request->get['product_id']);
        } else {
            $product_attributes = array();
        }

        $data['product_attributes'] = array();

        foreach ($product_attributes as $product_attribute) {


            $attribute_info = $this->model_catalog_attribute-
>getAttribute($product_attribute['attribute_id']);

            if ($attribute_info) {
                $data['product_attributes'][] = array(
                    'attribute_id' => $product_attribute['attribute_id'],
                    'name' => $attribute_info['name'],
                    'product_attribute_description' =>
$product_attribute['product_attribute_description']
                );
            }
        }

        // Options
        $this->load->model('catalog/option');

        if (isset($this->request->post['product_option'])) {
            $product_options = $this->request->post['product_option'];
        } elseif (isset($this->request->get['product_id'])) {
            $product_options = $this->model_catalog_product->getProductOptions($this-
>request->get['product_id']);
        } else {
            $product_options = array();
        }

        $data['product_options'] = array();

        foreach ($product_options as $product_option) {


            $product_option_value_data = array();

            if (isset($product_option['product_option_value'])) {
                foreach ($product_option['product_option_value'] as $product_option_value) {
                    $product_option_value_data[] = array(
                        'product_option_value_id' =>
$product_option_value['product_option_value_id'],
                        'option_value_id' => $product_option_value['option_value_id'],
                        'quantity' => $product_option_value['quantity'],
                        'subtract' => $product_option_value['subtract'],
                        'price' => $product_option_value['price'],
                        'price_prefix' => $product_option_value['price_prefix'],
                        'points' => $product_option_value['points'],
                        'points_prefix' => $product_option_value['points_prefix'],
A-35

                        'weight' => $product_option_value['weight'],


                        'weight_prefix' => $product_option_value['weight_prefix']
                    );
                }
            }

            $data['product_options'][] = array(
                'product_option_id' => $product_option['product_option_id'],
                'product_option_value' => $product_option_value_data,
                'option_id' => $product_option['option_id'],
                'name' => $product_option['name'],
                'type' => $product_option['type'],
                'value' => isset($product_option['value']) ? $product_option['value'] : '',
                'required' => $product_option['required']
            );
        }

        $data['option_values'] = array();

        foreach ($data['product_options'] as $product_option) {


            if ($product_option['type'] == 'select' || $product_option['type'] == 'radio' ||
$product_option['type'] == 'checkbox' || $product_option['type'] == 'image') {
                if (!isset($data['option_values'][$product_option['option_id']])) {
                    $data['option_values'][$product_option['option_id']] = $this-
>model_catalog_option->getOptionValues($product_option['option_id']);
                }
            }
        }

        $this->load->model('customer/customer_group');

        $data['customer_groups'] = $this->model_customer_customer_group-
>getCustomerGroups();

        if (isset($this->request->post['product_discount'])) {
            $product_discounts = $this->request->post['product_discount'];
        } elseif (isset($this->request->get['product_id'])) {
            $product_discounts = $this->model_catalog_product->getProductDiscounts($this-
>request->get['product_id']);
        } else {
            $product_discounts = array();
        }

        $data['product_discounts'] = array();

        foreach ($product_discounts as $product_discount) {


            $data['product_discounts'][] = array(
                'customer_group_id' => $product_discount['customer_group_id'],
                'quantity' => $product_discount['quantity'],
                'priority' => $product_discount['priority'],
                'price' => $product_discount['price'],
                'date_start' => ($product_discount['date_start'] != '0000-00-00') ?
$product_discount['date_start'] : '',
A-36

                'date_end' => ($product_discount['date_end'] != '0000-00-00') ?


$product_discount['date_end'] : ''
            );
        }

        if (isset($this->request->post['product_special'])) {
            $product_specials = $this->request->post['product_special'];
        } elseif (isset($this->request->get['product_id'])) {
            $product_specials = $this->model_catalog_product->getProductSpecials($this-
>request->get['product_id']);
        } else {
            $product_specials = array();
        }

        $data['product_specials'] = array();

        foreach ($product_specials as $product_special) {


            $data['product_specials'][] = array(
                'customer_group_id' => $product_special['customer_group_id'],
                'priority' => $product_special['priority'],
                'price' => $product_special['price'],
                'date_start' => ($product_special['date_start'] != '0000-00-00') ?
$product_special['date_start'] : '',
                'date_end' => ($product_special['date_end'] != '0000-00-00') ?
$product_special['date_end'] : ''
            );
        }
        
        // Image
        if (isset($this->request->post['image'])) {
            $data['image'] = $this->request->post['image'];
        } elseif (!empty($product_info)) {
            $data['image'] = $product_info['image'];
        } else {
            $data['image'] = '';
        }

        $this->load->model('tool/image');

        if (isset($this->request->post['image']) && is_file(DIR_IMAGE . $this->request-


>post['image'])) {
            $data['thumb'] = $this->model_tool_image->resize($this->request->post['image'],
100, 100);
        } elseif (!empty($product_info) && is_file(DIR_IMAGE . $product_info['image'])) {
            $data['thumb'] = $this->model_tool_image->resize($product_info['image'], 100,
100);
        } else {
            $data['thumb'] = $this->model_tool_image->resize('no_image.png', 100, 100);
        }

        $data['placeholder'] = $this->model_tool_image->resize('no_image.png', 100, 100);

        // Images
A-37

        if (isset($this->request->post['product_image'])) {
            $product_images = $this->request->post['product_image'];
        } elseif (isset($this->request->get['product_id'])) {
            $product_images = $this->model_catalog_product->getProductImages($this-
>request->get['product_id']);
        } else {
            $product_images = array();
        }

        $data['product_images'] = array();

        foreach ($product_images as $product_image) {


            if (is_file(DIR_IMAGE . $product_image['image'])) {
                $image = $product_image['image'];
                $thumb = $product_image['image'];
            } else {
                $image = '';
                $thumb = 'no_image.png';
            }

            $data['product_images'][] = array(
                'image' => $image,
                'thumb' => $this->model_tool_image->resize($thumb, 100, 100),
                'sort_order' => $product_image['sort_order']
            );
        }

        // Downloads
        $this->load->model('catalog/download');

        if (isset($this->request->post['product_download'])) {
            $product_downloads = $this->request->post['product_download'];
        } elseif (isset($this->request->get['product_id'])) {
            $product_downloads = $this->model_catalog_product-
>getProductDownloads($this->request->get['product_id']);
        } else {
            $product_downloads = array();
        }

        $data['product_downloads'] = array();

        foreach ($product_downloads as $download_id) {


            $download_info = $this->model_catalog_download-
>getDownload($download_id);

            if ($download_info) {
                $data['product_downloads'][] = array(
                    'download_id' => $download_info['download_id'],
                    'name' => $download_info['name']
                );
            }
        }
A-38

        if (isset($this->request->post['product_related'])) {
            $products = $this->request->post['product_related'];
        } elseif (isset($this->request->get['product_id'])) {
            $products = $this->model_catalog_product->getProductRelated($this->request-
>get['product_id']);
        } else {
            $products = array();
        }

        $data['product_relateds'] = array();

        foreach ($products as $product_id) {


            $related_info = $this->model_catalog_product->getProduct($product_id);

            if ($related_info) {
                $data['product_relateds'][] = array(
                    'product_id' => $related_info['product_id'],
                    'name' => $related_info['name']
                );
            }
        }

        if (isset($this->request->post['points'])) {
            $data['points'] = $this->request->post['points'];
        } elseif (!empty($product_info)) {
            $data['points'] = $product_info['points'];
        } else {
            $data['points'] = '';
        }

        if (isset($this->request->post['product_reward'])) {
            $data['product_reward'] = $this->request->post['product_reward'];
        } elseif (isset($this->request->get['product_id'])) {
            $data['product_reward'] = $this->model_catalog_product-
>getProductRewards($this->request->get['product_id']);
        } else {
            $data['product_reward'] = array();
        }

        if (isset($this->request->post['product_seo_url'])) {
            $data['product_seo_url'] = $this->request->post['product_seo_url'];
        } elseif (isset($this->request->get['product_id'])) {
            $data['product_seo_url'] = $this->model_catalog_product-
>getProductSeoUrls($this->request->get['product_id']);
        } else {
            $data['product_seo_url'] = array();
        }

        if (isset($this->request->post['product_layout'])) {
            $data['product_layout'] = $this->request->post['product_layout'];
        } elseif (isset($this->request->get['product_id'])) {
            $data['product_layout'] = $this->model_catalog_product-
>getProductLayouts($this->request->get['product_id']);
A-39

        } else {
            $data['product_layout'] = array();
        }

        $this->load->model('design/layout');

        $data['layouts'] = $this->model_design_layout->getLayouts();
        
        $data['header'] = $this->load->controller('common/header');
        $data['column_left'] = $this->load->controller('common/column_left');
        $data['footer'] = $this->load->controller('common/footer');

        $this->response->setOutput($this->load->view('catalog/product_form', $data));
    }

    protected function validateForm() {


        if (!$this->user->hasPermission('modify', 'catalog/product')) {
            $this->error['warning'] = $this->language->get('error_permission');
        }

        foreach ($this->request->post['product_description'] as $language_id => $value) {


            if ((utf8_strlen($value['name']) < 1) || (utf8_strlen($value['name']) > 255)) {
                $this->error['name'][$language_id] = $this->language->get('error_name');
            }

            if ((utf8_strlen($value['meta_title']) < 1) || (utf8_strlen($value['meta_title']) > 255))


{
                $this->error['meta_title'][$language_id] = $this->language-
>get('error_meta_title');
            }
        }

        if ((utf8_strlen($this->request->post['model']) < 1) || (utf8_strlen($this->request-


>post['model']) > 64)) {
            $this->error['model'] = $this->language->get('error_model');
        }

        if ($this->request->post['product_seo_url']) {
            $this->load->model('design/seo_url');
            
            foreach ($this->request->post['product_seo_url'] as $store_id => $language) {
                foreach ($language as $language_id => $keyword) {
                    if (!empty($keyword)) {
                        if (count(array_keys($language, $keyword)) > 1) {
                            $this->error['keyword'][$store_id][$language_id] = $this->language-
>get('error_unique');
                        }                       
                        
                        $seo_urls = $this->model_design_seo_url-
>getSeoUrlsByKeyword($keyword);
                        
                        foreach ($seo_urls as $seo_url) {
                            if (($seo_url['store_id'] == $store_id) && (!isset($this->request-
A-40

>get['product_id']) || (($seo_url['query'] != 'product_id=' . $this->request-


>get['product_id'])))) {
                                $this->error['keyword'][$store_id][$language_id] = $this->language-
>get('error_keyword');
                                
                                break;
                            }
                        }
                    }
                }
            }
        }

        if ($this->error && !isset($this->error['warning'])) {


            $this->error['warning'] = $this->language->get('error_warning');
        }

        return !$this->error;
    }

    protected function validateDelete() {


        if (!$this->user->hasPermission('modify', 'catalog/product')) {
            $this->error['warning'] = $this->language->get('error_permission');
        }

        return !$this->error;
    }

    protected function validateCopy() {


        if (!$this->user->hasPermission('modify', 'catalog/product')) {
            $this->error['warning'] = $this->language->get('error_permission');
        }

        return !$this->error;
    }

    public function autocomplete() {


        $json = array();

        if (isset($this->request->get['filter_name']) || isset($this->request-


>get['filter_model'])) {
            $this->load->model('catalog/product');
            $this->load->model('catalog/option');

            if (isset($this->request->get['filter_name'])) {
                $filter_name = $this->request->get['filter_name'];
            } else {
                $filter_name = '';
            }

            if (isset($this->request->get['filter_model'])) {
                $filter_model = $this->request->get['filter_model'];
            } else {
A-41

                $filter_model = '';
            }

            if (isset($this->request->get['limit'])) {
                $limit = $this->request->get['limit'];
            } else {
                $limit = 5;
            }

            $filter_data = array(
                'filter_name' => $filter_name,
                'filter_model' => $filter_model,
                'start' => 0,
                'limit' => $limit
            );

            $results = $this->model_catalog_product->getProducts($filter_data);

            foreach ($results as $result) {


                $option_data = array();

                $product_options = $this->model_catalog_product-
>getProductOptions($result['product_id']);

                foreach ($product_options as $product_option) {


                    $option_info = $this->model_catalog_option-
>getOption($product_option['option_id']);

                    if ($option_info) {
                        $product_option_value_data = array();

                        foreach ($product_option['product_option_value'] as
$product_option_value) {
                            $option_value_info = $this->model_catalog_option-
>getOptionValue($product_option_value['option_value_id']);

                            if ($option_value_info) {
                                $product_option_value_data[] = array(
                                    'product_option_value_id' =>
$product_option_value['product_option_value_id'],
                                    'option_value_id' =>
$product_option_value['option_value_id'],
                                    'name' => $option_value_info['name'],
                                    'price' => (float)$product_option_value['price'] ? $this-
>currency->format($product_option_value['price'], $this->config->get('config_currency'))
: false,
                                    'price_prefix' => $product_option_value['price_prefix']
                                );
                            }
                        }

                        $option_data[] = array(
                            'product_option_id' => $product_option['product_option_id'],
A-42

                            'product_option_value' => $product_option_value_data,


                            'option_id' => $product_option['option_id'],
                            'name' => $option_info['name'],
                            'type' => $option_info['type'],
                            'value' => $product_option['value'],
                            'required' => $product_option['required']
                        );
                    }
                }

                $json[] = array(
                    'product_id' => $result['product_id'],
                    'name' => strip_tags(html_entity_decode($result['name'], ENT_QUOTES,
'UTF-8')),
                    'model' => $result['model'],
                    'option' => $option_data,
                    'price' => $result['price']
                );
            }
        }

        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));
    }
}

api.php (route)
<?php

use Illuminate\Http\Request;

/*
|----------------------------------------------------------------------
----
| API Routes
|----------------------------------------------------------------------
----
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

Route::get('/user', function (Request $request) {


return $request->user();
A-43

})->middleware('auth:api');

Route::get('/profile/{id}', 'EstiquentApi@getProfile');
Route::get('/nwc', 'EstiquentApi@selectForNWC');

Route::put('/update-profile/{id}', 'EstiquentApi@updateProfile');

Route::get('/users/{cc}', 'EstiquentApi@getUser');

Route::post('/insert-user', 'EstiquentApi@storeUser');

Route::post('/login', 'EstiquentApi@loginUser');

Route::get('/user/{id}', 'EstiquentApi@showUser');

Route::put('/update-user/{id}', 'EstiquentApi@updateUser');

Route::delete('/delete-user/{id}', 'EstiquentApi@destroyUser');

Route::get('/companies', 'EstiquentApi@getCompany');

Route::post('/insert-company', 'EstiquentApi@storeCompany');

Route::get('/company/{id}', 'EstiquentApi@showCompany');

Route::put('/update-company/{id}', 'EstiquentApi@updateCompany');

Route::delete('/delete-company/{id}', 'EstiquentApi@destroyCompany');

Route::get('/warehouses/{cc}', 'EstiquentApi@getWarehouse');

Route::post('/insert-warehouse', 'EstiquentApi@storeWarehouse');

Route::get('/warehouse/{id}', 'EstiquentApi@showWarehouse');

Route::put('/update-warehouse/{id}', 'EstiquentApi@updateWarehouse');

Route::delete('/delete-warehouse/{id}',
'EstiquentApi@destroyWarehouse');

Route::get('/destinations/{cc}', 'EstiquentApi@getDestination');

Route::post('/insert-destination', 'EstiquentApi@storeDestination');
A-44

Route::get('/destination/{id}', 'EstiquentApi@showDestination');

Route::put('/update-destination/{id}',
'EstiquentApi@updateDestination');

Route::delete('/delete-destination/{id}',
'EstiquentApi@destroyDestination');

Route::get('/transactions/{cc}', 'EstiquentApi@getTransaction');

Route::post('/insert-transaction', 'EstiquentApi@storeTransaction');

Route::get('/transaction/{id}', 'EstiquentApi@showTransaction');

Route::put('/update-transaction/{id}',
'EstiquentApi@updateTransaction');

Route::delete('/delete-transaction/{id}',
'EstiquentApi@destroyTransaction');

Route::get('/costs/{cc}', 'EstiquentApi@getCost');

Route::post('/insert-cost', 'EstiquentApi@storeCost');

Route::get('/cost/{id}', 'EstiquentApi@showCost');

Route::put('/update-cost/{id}', 'EstiquentApi@updateCost');

Route::delete('/delete-cost/{id}', 'EstiquentApi@destroyCost');

web.php (route)
<?php

/*
|----------------------------------------------------------------------
----
| Web Routes
|----------------------------------------------------------------------
----
|
| Here is where you can register web routes for your application. These
A-45

| routes are loaded by the RouteServiceProvider within a group which


| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
return view('login');
});
Route::group(['middleware' => 'StoreSession'],function(){
// Route::get('/', 'Profile@index');
Route::get('/admin', 'Admin@index');
Route::get('/profile', 'Profile@index');
Route::get('/warehouses', 'Warehouses@index');
Route::post('/warehouses/tes', 'Warehouses@tes');
Route::get('/destinations', 'Destinations@index');
Route::get('/transactions', 'Transactions@index');
Route::get('/costs', 'Costs@index');
Route::get('/company', 'Company@index');
Route::get('/logs', 'Logs@index');
Route::get('/users', 'Users@index');
Route::get('/nwc', 'NWC@index');
});
Route::get('/register', 'Register@index');
Route::get('/session/{id}/{pw}', 'Session@index');
Route::get('/logout', 'Session@logout');
LAMPIRAN B
DATABASE APLIKASI
Users

Warehouses

Destinations

Costs

Transactions

B-1

Anda mungkin juga menyukai