4. IMPLEMENTASI SISTEM
Pada bab ini dibahas implementasi dari sistem yang telah dirancang dan dijelaskan pada bab sebelumnya. Pembahasan dilakukan pada fitur-fitur yang terdapat pada Program seperti rancangan pada bab sebelumnya.
Tabel 4.1 Daftar Hubungan Fitur, Activity Diagram, dan Segmen Program
Nama Fitur Activity Diagram Segmen Program
Login User Activity Diagram 3.3 4.1, 4.3, 4.4 Register Activity Diagram 3.5 4.2, 4.5, 4.6 Join Group Buying Activity Diagram 3.7 4.11, 4.12
Tambah Produk Activity Diagram 3.9 4.13
Search Produk Activity Diagram 3.11 4.14, 4.15 Tambah Review Activity Diagram 3.13 4.16, 4.17
4.1. Implementasi Sistem Pada Android 4.1.1. Halaman Awal
Halaman awal merupakan halaman awal yang dibuka oleh website. Pada halaman ini terdapat form register dan form login. Jika, user belum memilik akun, user dapat mengisi form register dan menekan tombol register. Sedangkan, user yang sudah memiliki akun bisa mengisi form login dan menekan tombol login.
Sedangkan pada aplikasi, halaman awal akan menampilkan dua tombol yaitu,
login dan register. Jika user telah memiliki akun dapat menekan tombol login
untuk melakukan login dan menekan tombol register jika belum meliki akun
untuk melakukan proses registrasi. Potongan code Halaman Awal dapat dilihat
pada Segmen Program 4.1 dan 4.2.
Segmen Program 4.1 Halaman Login Aplikasi
Segmen Program 4.2 Halaman Registrasi Aplikasi
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
}public void login(View view) {
EditText username = findViewById(R.id.username);
EditText password = findViewById(R.id.password);
backgroundWorker backgroundWorker = new backgroundWorker(Login.this);
backgroundWorker.execute("login",username.getText().toString(), password.getText().toString());
}
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
}
public void registerr(View view) {
EditText username = findViewById(R.id.email);
EditText password = findViewById(R.id.passwordd);
EditText phone = findViewById(R.id.phone);
EditText fullname = findViewById(R.id.fullname);
System.out.println(username.getText());
System.out.println(password.getText());
System.out.println(phone.getText());
System.out.println(fullname.getText());
backgroundWorker backgroundWorker = new backgroundWorker(Register.this);
backgroundWorker.execute("register",username.getText().toString (),password.getText().toString(),fullname.getText().toString(), phone.getText().toString());}
4.1.2. Pengecekan Login
Setelah menginput form login dan menekan tombol login. Maka data yang diinputkan oleh user akan dicek apakah sesuai dengan data yang terdapat di database apa tidak. Jika ya, maka user akan masuk ke halaman utama. Potongan code pengecekan login dapat dilihat pada Segmen Program 4.3
Segmen Program 4.3 Pengecekan Login Aplikasi
4.1.3. Pengecekan Registrasi
include "connect.php";
$username = $_POST['email'];
$userpass = $_POST['password'];
$pass = md5($userpass);
$sql = "SELECT count(*) as c from users where email like '".$username."' and password like '".$pass."'";
$result = mysqli_query($conn, $sql);
$count = mysqli_fetch_assoc($result);
if ($count['c'] > 0) {
$q = "SELECT nama from users where email like '".$username."'";
$result = mysqli_query($conn, $q);
$n = mysqli_fetch_array($result);
$nama = $n['nama'];
echo json_encode(array('Login Success'=>$username."&".$nama));
}else{
echo "Invalid username or password.";
}
Setelah menginput form registrasi dan menekan tombol sign up. Maka data yang diinputkan user akan dicek apakah sesuai dengan ketentuan registrasi dan apakah email telah digunakan apa belum. Jika semua ketentuan terpenuhi, maka proses registrasi akan berhasil dan data user tersimpan ke dalam database.
Potongan code pengecekan registrasi dapat dilihat pada Segmen Program 4.4
Segmen Program 4.4 Pengecekan Registrasi Aplikasi
4.1.4. Halaman Depan
Halaman depan berisikan produk-produk yang direkomendasikan sistem kepada user dengan menggunakan metode naive bayes. Potongan code Halaman Depan dapat dilihat pada Segmen program 4.5
include "connect.php";
$nama=$_POST["fullname"];
$username=$_POST["email"];
$password=$_POST["password"];
$phone = $_POST["phone"];
$pass = md5($password);
$query = mysqli_query($conn,"select * from users where email like '$username'");
if(mysqli_num_rows($query)==0){
$result="insert into users
values('','$username','$pass','$nama','$phone','')";
$a = mysqli_query($conn,$result);
echo "Successfully registered." ; }
else{
echo "Email already used. Please use another email.";
}
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
session = new Session(getActivity());
myView =
inflater.inflate(R.layout.index_layout,container,false);
final ListView listView = (ListView) myView.findViewById(R.id.listvieww);
final ArrayList<String> createLists = new ArrayList<>();
final ArrayList<String> createLists2 = new ArrayList<>();
final ArrayList<String> createLists3 = new ArrayList<>();
final ArrayList<String> createLists4 = new ArrayList<>();
backgroundWorker backgroundWorker = new backgroundWorker(new AsyncResponse() {
@Override
public void processFinish(String output) { try {
JSONObject j = new JSONObject(output);
JSONArray arr = j.getJSONArray("gethome");
for (int i = 0; i < arr.length(); i++) { JSONObject temp = arr.getJSONObject(i);
createLists.add(temp.getString("url"));
createLists2.add(temp.getString("id"));
createLists3.add(temp.getString("name"));
createLists4.add(temp.getString("date"));}
adapter = new indexAdapter(getActivity(),
createLists,createLists2,createLists3,createLists4);
listView.setAdapter(adapter);
} catch (JSONException e){e.printStackTrace();}
} });
backgroundWorker.execute("gethome",session.getusername());
return myView;
}
4.1.5. Halaman Produk
Halaman produk menampilkan informasi dari semua produk yaitu, nama produk, deskripsi, harga, tanggal group buying, dll. Dari halaman ini juga user dapat mengikuti group buying dengan menakan tombol join atau simbol shopping cart pada aplikasi dan menambahkan produk kedalam wishlist dengan menekan tombol hati. User juga bisa memberikan review atau diskusi mengenai produk.
Potongan code Halaman Produk dapat dilihat pada Segmen Program 4.6
Segmen Program 4.6 Halaman Produk Aplikasi
protected void onCreate (Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.cardview);
TabHost tabHost =
(TabHost)findViewById(android.R.id.tabhost);
TabHost.TabSpec tab1 = tabHost.newTabSpec("tab1");
TabHost.TabSpec tab2 = tabHost.newTabSpec("tab2");
TabHost.TabSpec tab3 = tabHost.newTabSpec("tab3");
session = new Session(this);
btn = findViewById(R.id.join);
btnback = findViewById(R.id.wish);
tv1 = findViewById(R.id.productName);
tv2 = findViewById(R.id.price);
tv3 = findViewById(R.id.date);
tv4 = findViewById(R.id.member);
tv7 = findViewById(R.id.desc);
img2 = findViewById(R.id.productImage);
if (getIntent().hasExtra("viewanimal")) {
Segmen Program 4.6 Halaman Produk Aplikasi (Lanjutan)
try {
JSONObject j = new JSONObject(json);
JSONArray arr = j.getJSONArray("viewanimal");
JSONObject temp = arr.getJSONObject(0);
namaa = temp.getString("nama");
desc = temp.getString("desc");
url = temp.getString("url");
members = temp.getString("members");
datee = temp.getString("end");
id = temp.getString("productId");
lokasi = temp.getString("lokasi");
penjual = temp.getString("penjual");
price = temp.getString("price");
} catch (JSONException e) {e.printStackTrace();}
}tab1.setIndicator("Review");
Intent intentt= new Intent(this,tab1.class);
intentt.putExtra("id",id);
tab1.setContent(intentt);
tab2.setIndicator("Discussion");
Intent intent2= new Intent(this,tab2.class);
intent2.putExtra("id",id);
tab2.setContent(intent2);
tabHost.addTab(tab1);
tabHost.addTab(tab2);
backgroundWorker backgroundWorker2 = new backgroundWorker(new AsyncResponse() {
@Override
public void processFinish(String output) { if (output.equals("joined")) {
Segmen Program 4.6 Halaman Produk Aplikasi (Lanjutan)
btnback.setCompoundDrawablesWithIntrinsicBounds( R.drawable.now ish, 0, 0, 0);
requestwish="Remove Wishlist";
} else if (output.equals("not joined")) { requestwish="Wishlist";
btnback.setCompoundDrawablesWithIntrinsicBounds( R.drawable.wis hlist, 0, 0, 0);
} } });
backgroundWorker2.execute("checkwish", id, session.getusername());
btnback.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
backgroundWorker backgroundWorker = new backgroundWorker(List.this);
backgroundWorker.execute("wish", id, session.getusername(), requestwish);
} });
backgroundWorker backgroundWorker = new backgroundWorker(new AsyncResponse() {
@Override
public void processFinish(String output) { if (output.equals("joined"))
{ btn.setCompoundDrawablesWithIntrinsicBounds(R.dra wable.removecart, 0, 0, 0);
requestjoin="Cancel";
} else if (output.equals("not joined")) { requestjoin="Join";
btn.setCompoundDrawablesWithIntrinsicBounds(R.drawable.shopping , 0, 0, 0);}
} });
backgroundWorker.execute("checkgroup", id, session.getusername());
Segmen Program 4.6 Halaman Produk Aplikasi (Lanjutan)
new DownloadImageTask(img2,"1").execute(url);
Locale localeID = new Locale("in", "ID");
NumberFormat formatRupiah = NumberFormat.getCurrencyInstance(localeID);
tv1.setText(namaa);
tv2.setText("Price:
"+formatRupiah.format((double)Integer.parseInt(price.toString() )));
if (datee.contains("-")) {
tv3.setText("Date: already finished");
} else {
tv3.setText("Date: "+datee + " more day until finished");
}
tv4.setText("Members: "+members + " people are join");
tv7.setText(desc);}
public void join(View view) {
backgroundWorker backgroundWorker = new backgroundWorker(List.this);
backgroundWorker.execute("join", id, session.getusername(), requestjoin);
}
@Override
public void onBackPressed() { finish();
} }
4.1.6. Pengecekan Join Group
Setelah menekan tombol join pada website atau simbol shopping cart pada aplikasi. Maka akan dilakukan pengecekan apakah request user join atau cancel.
Jika join maka user akan mengikuti group buying dan jika cancel maka user akan
batal mengikuti group buying tersebut. Potongan code pengecekan join group
dapat dilihat pada Segmen Program 4.7
Segmen Program 4.7 Pengecekan Join Group Aplikasi
<?php
include "connect.php";
$username=$_POST["email"];
$id=$_POST["products"];
$check = $_POST['checks'];
$sql1 ="select * from users where email like '".$username."'";
$r1 = mysqli_query($conn,$sql1);
$sqlp= "select * from products where id like '".$id."'";
$rp=mysqli_query($conn,$sqlp);
if($check == "Join"){
while($rowp = mysqli_fetch_array($rp)){
$update = $rowp['members'] += 1;
$sql2="UPDATE products SET members = '".$update."' where id like '".$id."' ";
$r2=mysqli_query($conn,$sql2);}
while($row1 = mysqli_fetch_array($r1)){
$result="insert into members
values('','$id','".$row1['id']."')";
$a = mysqli_query($conn,$result);
echo json_encode(array('Successfully join.'=>$id));}
}else if($check == "Cancel"){
while($rowp = mysqli_fetch_array($rp)){
$r2=mysqli_query($conn,$sql2); } while($row1 = mysqli_fetch_array($r1)){
Segmen Program 4.7 Pengecekan Join Group Aplikasi (Lanjutan)
4.1.7. Halaman Search Produk
Halaman ini akan menampilkan hasil pencarian produk berdasarkan kata kunci yang telah diinputkan oleh user. Jika tidak ada produk, maka akan menampilkan pesan bahwa produk tidak dapat ditemukan. Potongan code Halaman Search Produk dapat dilihat pada Segmen Program 4.8.
$update = $rowp['members'] -= 1;
$sql2="UPDATE products SET members = '".$update."' where id like '".$id."' ";
$result="delete from members where userId
like'".$row1['id']."' and productId like'".$id."' ";
$a = mysqli_query($conn,$result);
echo json_encode(array('Successfully cancel.'=>$id));}
?>
Segmen Program 4.8 Halaman Search Produk Aplikasi
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.search_main, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchManager searchManager = (SearchManager) search.this.getSystemService(Context.SEARCH_SERVICE);
if (searchItem != null) {
searchView = (SearchView) searchItem.getActionView();
}
if (searchView != null)
{ searchView.setSearchableInfo(searchManager.getSearchableInf o(search.this.getComponentName()));
searchView.setIconified(false);
}
return true;
}
Segmen Program 4.8 Halaman Search Produk Aplikasi (Lanjutan)
@Override
public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item);
}
@Override
protected void onNewIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) { String query = intent.getStringExtra(SearchManager.QUERY);
if (searchView != null) { searchView.clearFocus();
}
new AsyncFetch(query).execute();
} }
private class AsyncFetch extends AsyncTask<String, String, String> {
ProgressDialog pdLoading = new ProgressDialog(search.this);
HttpURLConnection conn;
URL url = null;
String searchQuery;
public AsyncFetch(String searchQuery){
this.searchQuery=searchQuery;
}
@Override
protected void onPreExecute() { super.onPreExecute();
pdLoading.setMessage("\tLoading...");
pdLoading.setCancelable(false);
pdLoading.show();
}
Segmen Program 4.8 Halaman Search Produk Aplikasi (Lanjutan)
@Override
protected String doInBackground(String... params) { try {
url = new URL("http://gruby.store/server/products- search2.php");
} catch (MalformedURLException e) { e.printStackTrace();
return e.toString();
} try {
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(READ_TIMEOUT);
conn.setConnectTimeout(CONNECTION_TIMEOUT);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
Uri.Builder builder = new
Uri.Builder().appendQueryParameter("searchQuery", searchQuery);
String query = builder.build().getEncodedQuery();
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
writer.write(query);
writer.flush();
writer.close();
os.close();
conn.connect();
}
catch (IOException e1) {
e1.printStackTrace();
return e1.toString();
}
Segmen Program 4.8 Halaman Search Produk Aplikasi (Lanjutan)
try {
int response_code = conn.getResponseCode();
if (response_code == HttpURLConnection.HTTP_OK) { InputStream input = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
StringBuilder result = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) { result.append(line);
}
return (result.toString());
} else {
return(conn.getResponseCode()+"");
}
} catch (IOException e) { e.printStackTrace();
return e.toString();
} finally {
conn.disconnect();
} }
@Override
protected void onPostExecute(String result) { pdLoading.dismiss();
List<dataProducts> data=new ArrayList<>();
pdLoading.dismiss();
if(result.equals("no rows")) {
Toast.makeText(search.this, "No Results found for entered query", Toast.LENGTH_LONG).show();
}
Segmen Program 4.8 Halaman Search Produk Aplikasi (Lanjutan)
else{
try {
JSONArray jArray = new JSONArray(result);
for (int i = 0; i < jArray.length(); i++) { JSONObject json_data = jArray.getJSONObject(i);
dataProducts fishData = new dataProducts();
fishData.fishName = json_data.getString("nama");
fishData.catName = json_data.getString("price");
fishData.sizeName = json_data.getString("endDate");
fishData.url = json_data.getString("url");
fishData.id = json_data.getString("id");
data.add(fishData);
}
mRVFish = (RecyclerView) findViewById(R.id.fishPriceList);
mRVFish.addItemDecoration(new
DividerItemDecoration(search.this,DividerItemDecoration.VERTICA L));
mAdapter = new adapterProducts(search.this, data);
mRVFish.setAdapter(mAdapter);
mRVFish.setLayoutManager(newLinearLayoutManager(search.this));
} catch (JSONException e) { Toast.makeText(search.this, e.toString(), Toast.LENGTH_LONG).show();
Toast.makeText(search.this, result.toString(), Toast.LENGTH_LONG).show();}
} } } @Override
public void onBackPressed() {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.content_frame, new Index())
4.1.8. Halaman Review
Halaman ini akan menampilkan review yang telah diberikan oleh user kepada produk tertentu atau balasan review. Pada halaman ini user juga bias memberikan review baru atau membalas review yang sebelumnya telah ada.
Potongan code Halaman Review dapat dilihat pada Segmen Program 4.9.
Segmen Program 4.9 Halaman Review Aplikasi
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_allreview);
tv1=findViewById(R.id.textView3);
review = findViewById(R.id.reply);
session = new Session(this);
final ListView listView = (ListView) findViewById(R.id.listvieww);
final ArrayList<String> createLists = new ArrayList<>();
final ArrayList<String> createLists2 = new ArrayList<>();
final ArrayList<String> createLists3 = new ArrayList<>();
final ArrayList<String> createLists4 = new ArrayList<>();
final ArrayList<String> createLists5 = new ArrayList<>();
final ArrayList<String> createLists6 = new ArrayList<>();
final ArrayList<String> createLists7 = new ArrayList<>();
final ArrayList<String> createLists8 = new ArrayList<>();
backgroundWorker backgroundWorker = new backgroundWorker(new AsyncResponse() {
@Override
public void processFinish(String output) { try {
JSONObject j = new JSONObject(output);
JSONArray arr = j.getJSONArray("getreviews");
for (int i = 0; i < arr.length(); i++) { JSONObject temp = arr.getJSONObject(i);
Segmen Program 4.9 Halaman Review Aplikasi (Lanjutan)
name = temp.getString("name");
co = temp.getString("count2");
createLists.add(temp.getString("user"));
createLists2.add(temp.getString("message"));
createLists3.add(temp.getString("date"));
createLists4.add(temp.getString("time"));
createLists5.add(temp.getString("product"));
createLists6.add(temp.getString("review"));
createLists7.add(temp.getString("count"));
createLists8.add(temp.getString("url"));
}
adapter = new reviewAdapter(context,
createLists,createLists2,createLists3,createLists4,createLists5 ,createLists6,createLists7,"all",createLists8,co,name);
listView.setAdapter(adapter);
} catch (JSONException e) { e.printStackTrace();
}
tv1.setText(name +"\n" +"Review");
}
backgroundWorker.execute("getreviews",getIntent().getStringExtr});
a("id"),"getall");
}
public void review(View view) {
Intent intent = new Intent(this,comment.class);
intent.putExtra("id",getIntent().getStringExtra("id"));
intent.putExtra("name",name);
intent.putExtra("type","review");
context.startActivity(intent);
} }
4.2. Implementasi Sistem Pada Website 4.2.1. Pengecekan Login
Setelah menginput form login dan menekan tombol login. Maka data yang diinputkan oleh user akan dicek apakah sesuai dengan data yang terdapat di database apa tidak. Jika ya, maka user akan masuk ke halaman utama. Potongan code pengecekan login dapat dilihat pada Segmen Program 4.10
Segmen Program 4.10 Pengecekan Login Website
4.2.2. Pengecekan Registrasi
Setelah menginput form registrasi dan menekan tombol sign up. Maka data yang diinputkan user akan dicek apakah sesuai dengan ketentuan registrasi dan apakah email telah digunakan apa belum. Jika semua ketentuan terpenuhi, maka proses registrasi akan berhasil dan data user tersimpan ke dalam database.
Potongan code pengecekan registrasi dapat dilihat pada Segmen Program 4.11
public function usercheck(Request $request){
$pass=md5(trim($request->password));
$a=User::where('email', $request->email)-
>where('password',$pass)->first();
if($request->email=="admin" && $request-
>password=="admin"){
return redirect('/admin');
}else{
if($a){
session()->put('user', $a->email);
return redirect("/home/".$a->id."");
}else{
return redirect('/');
} }
}
Segmen Program 4.11 Pengecekan Registrasi Website
4.2.3. Halaman Depan
Halaman depan berisikan produk-produk yang direkomendasikan sistem kepada user dengan menggunakan metode naive bayes. Potongan code Halaman Depan dapat dilihat pada Segmen program 4.12
public function store(Request $request){
$this->validate($request,[
'Email' => 'required|e-mail', 'Password' => 'required|min:8', 'nama' => 'required',
'phone' => 'required', 'city' => 'required' ]);
$a=User::where('email', $request->Email)->first();
if(!$a){
$pass=md5(trim($request->Password));
User::create([
'email' => $request->Email, 'password' => $pass,
'nama' => $request->nama, 'nohp' => $request->phone, 'kota' => $request->city ]);
return redirect('/');
}else{
return redirect('/register');
} }
Segmen Program 4.12 Halaman Depan Website
public function index($id){
$categories = Categorie::all();
$products = Product::paginate(9);
$produks = Product::get();
$naives=Naive::where('userId',$id)->get();
if(!$naives->isEmpty()){
foreach ($produks as $produk) { foreach ($naives as $naive) {
if($naive->buy == 1){
$yes++;
}else{
$no++;
}
$total++;
$bayes = Product::where('id',$naive->productId)->first();
if($bayes->kategori == $produk->kategori && $naive->buy==1){
$kategoriyes++;}
if($bayes->kategori == $produk->kategori && $naive->buy==0){
$kategorino++;}
if($bayes->location == $produk->location && $naive->buy==1){
$lokasiyes++;}
if($bayes->location == $produk->location && $naive->buy==0){
$lokasino++;}
if($bayes->harga <= 1000000 && $produk->harga <= 1000000 &&
$naive->buy==1){
$hargayes++;}
if(1000000<$bayes->harga&& $bayes->harga<=1500000 &&
1000000<$produk->harga && $produk->harga <=1500000 && $naive-
>buy==1){
$hargayes++;}
Segmen Program 4.12 Halaman Depan Website (Lanjutan)
if($bayes->harga > 1500000 && $produk->harga > 1500000 &&
$naive->buy==1){
$hargayes++;}
if($bayes->harga <= 1000000 && $produk->harga <= 1000000 &&
$naive->buy==0){
$hargano++;}
if(1000000< $bayes->harga && $bayes->harga <=1500000 &&
1000000<$produk->harga && $produk->harga <=1500000 && $naive-
>buy==0){
$hargano++;}
if($bayes->harga > 1500000 && $produk->harga > 1500000 &&
$naive->buy==0){
$hargano++;}
}
if($yes!=0){
$finalyes=(($kategoriyes/$yes)*($lokasiyes/$yes)*($hargayes/$ye s))*($yes/$total);}
if($no!=0){
$finalno=(($kategorino/$no)*($lokasino/$no)*($hargano/$no))*($n o/$total);
}
for ($i=0; $i <=9 ; $i++) {
$count=0;
if($first==0){
$first++;
$resulta[$i]=$finalyes;
$resultb[$i]=$produk->id;}}
return
view('index',['categories'=>$categories,'products'=>$resultb,'p roduct'=>$products]);
}else{
return
view('index',['categories'=>$categories,'products'=>$resultc,'p roduct'=>$products]);
} }
4.2.4. Halaman Produk
Halaman produk menampilkan informasi dari semua produk yaitu, nama produk, deskripsi, harga, tanggal group buying, dll. Dari halaman ini juga user dapat mengikuti group buying dengan menakan tombol join atau simbol shopping cart pada aplikasi dan menambahkan produk kedalam wishlist dengan menekan tombol hati. User juga bisa memberikan review atau diskusi mengenai produk.
Potongan code Halaman Produk dapat dilihat pada Segmen Program 4.13 Segmen Program 4.13 Halaman Produk Website
public function showProduct($id){
$id = explode( "&" , $id );
$product = Product::where('products.id',$id[0])-
>leftJoin('categories','categories.id','=','products.kategori') ->leftJoin('naives','naives.productId','=','products.id')-
>leftJoin('prices','prices.product','=','products.id')-
>leftJoin('ratings','ratings.productId','=','products.id')-
>leftJoin('users','users.id','=','products.userID')-
>select('products.*','products.harga as
harga','products.members as members','products.id as idproduct','categories.id as
catid','categories.cName','naives.*','prices.*','ratings.*','us ers.nama as seller','users.id as sellerid')->first();
$pictures = Picture::where('pictures.productId',$id[0])->get();
$reviews = Review::where('reviews.productId',$id[0])-
>leftJoin('users','users.id','=','reviews.userId')-
>select('reviews.id as id','reviews.date as
reviewdate','reviews.time as reviewtime','users.nama as
namauser','reviews.message as reviewmessage','users.profile as profile')->get();
$reviewreplies =
Reviewreplie::where('reviewreplies.productId','=',$id)->get();
$count_review = Review::where('reviews.productId',$id[0])-
>select(DB::raw('count(reviews.id) as count'))-
>groupBy('reviews.productId')->first();
Segmen Program 4.13 Halaman Produk Website (Lanjutan)
$discussions = iscussion::where('discussions.productId',$id[0])-
>leftJoin('users','users.id','=','discussions.userId')-
>select('discussions.id as id','discussions.date as
discussiondate','discussions.time as discussiontime','users.nama as namauser','discussions.message as
discussionmessage','users.profile as profile')->get();
$discussionreplies =
Discussionreplie::where('discussionreplies.productId','=',$id)-
>get();
$count_discussion =
Discussion::where('discussions.productId',$id[0])-
>select(DB::raw('count(discussions.id) as count'))-
>groupBy('discussions.productId')->first();
$categories = Categorie::all();
if(count($id)>1){
$notification=notification::where('id',$id[1])->delete();
}
return view('product/viewsingle',
compact('product','pictures','reviews','count_review','discussio ns','count_discussion','categories','seller'));
}
$count_discussion =
Discussion::where('discussions.productId',$id[0])-
>select(DB::raw('count(discussions.id) as count'))-
>groupBy('discussions.productId')->first();
$categories = Categorie::all();
if(count($id)>1){
$notification=notification::where('id',$id[1])->delete();
}
return view('product/viewsingle',
compact('product','pictures','reviews','count_review','discussio ns','count_discussion','categories','seller'));
}
4.2.5. Pengecekan Join Group
Setelah menekan tombol join pada website atau simbol shopping cart pada aplikasi. Maka akan dilakukan pengecekan apakah request user join atau cancel.
Jika join maka user akan mengikuti group buying dan jika cancel maka user akan
batal mengikuti group buying tersebut. Potongan code pengecekan join group
dapat dilihat pada Segmen Program 4.14
Segmen Program 4.14 Pengecekan Join Group Website 4.2.6. Pengecekan Tambah Produk
Setelah mengisi data produk dan menekan tombol tambah. Maka data produk yang telah diinputkan akan dicek apakah sudah lengkap apa tidak. Jika sudah lengkap maka data akan ditambahkan ke dalam database. Jika belum akan
public function wishProduct(Request $request){
$a= $request->productId;
$produk = Product::where('id',$request->productId)-
>first();
if($request->button1 =='join'){
$x = Product::where('id',$request->productId)->first();
$val = $x->members;
Product::where('id',$x->id)->update(['members' => $val+1]);
Member::create([
'productId'=>$request->productId, 'userId'=>$request->userId
]);
notification::create([
'userId'=>$request->userId, 'targetId'=>$x->userID, 'type'=>'join your product', 'productId'=>$request->productId ]);
}else
if($request->response =='cancelJoin'){
$x = Product::where('id',$request->productId)->first();
$val = $x->members;
Product::where('id',$x->id)->update(['members' => $val-1]);
$member = Member::where('productId',$request->productId)-
>where('userId',$request->userId)->first();
menampilkan error. Potongan code pengecekan tambah produk dapat dilihat pada Segmen Program 4.15
Segmen Program 4.15 Pengecekan Tambah Produk Website
public function storeProduct(Request $request){
$this->validate($request,[
'nama' => 'required', 'harga'=> 'required', 'deskripsi'=> 'required', 'startDate'=> 'required', 'endDate'=> 'required', ]);
$user=session()->get('user');
$get = User::where('email',$user)->first();
$id=$get->id;
$loc=$get->kota;
$counter=0;
if($request->file()){
$files = $request->file();
foreach($files as $file) {
for ($i=0; $i < count($file);$i++){
Segmen Program 4.15 Pengecekan Tambah Produk Website (Lanjutan) if($file[$i]->getClientSize() > 5242880){
$count++;
}}}
}if($counter==0){
Product::create([
'nama'=>$request->nama, 'userId'=>$id,
'deskripsi'=>$request->deskripsi, 'kategori'=>$request->kategori, 'startDate'=>$request->startDate, 'endDate'=>$request->endDate, 'location'=>$loc,
'harga'=>$request->harga ]);
$get2 = Product::where('nama',$request->nama)->where('userId',$id)->first();
$id2=$get2->id;
if($request->file()){
$files = $request->file();
$destinationPathImg = 'public/images';
foreach($files as $file) { for ($i=0; $i < count($file);$i++){
Picture::create([
'name' => $file[$i]->getClientOriginalName(), 'size' => $file[$i]->getClientSize(),
'type' => $file[$i]->getClientMimeType(), 'productId'=>$id2]);
$file[$i]->move($destinationPathImg,$file[$i]->getClientOriginalName());}
Segmen Program 4.15 Pengecekan Tambah Produk Website (Lanjutan)
4.2.7. Halaman Search Produk
} }
if($request->orang1 != "" && $request->harga1 != ""){
Price::create([
'product'=> $id2,
'member_req'=> $request->orang1, 'price'=>$request->harga1
]);
if($request->orang2 != "" && $request->harga2 != ""){
Price::create([
'product'=> $id2,
'member_req'=> $request->orang2, 'price'=>$request->harga2
]);
if($request->orang3 != "" && $request->harga3 != ""){
Price::create([
'product'=> $id2,
'member_req'=> $request->orang3, 'price'=>$request->harga3
]);
} }
} }
return view('product/add');
}
Halaman ini akan menampilkan hasil pencarian produk berdasarkan kata kunci yang telah diinputkan oleh user. Jika tidak ada produk, maka akan menampilkan pesan bahwa produk tidak dapat ditemukan. Potongan code Halaman Search Produk dapat dilihat pada Segmen Program 4.16.
Segmen Program 4.16 Halaman Search Produk Website
4.2.8. Halaman Review
Halaman ini akan menampilkan review yang telah diberikan oleh user kepada produk tertentu atau balasan review. Pada halaman ini user juga bias memberikan review baru atau membalas review yang sebelumnya telah ada.
Potongan code Halaman Review dapat dilihat pada Segmen Program 4.17.
Segmen Program 4.17 Halaman Review Website
public function searchProduct(Request $request){
$products = Product::where('nama','LIKE','%'.$request-
>searchItem.'%')->paginate(9);
$categories = Categorie::all();
return view('product.index',compact('categories','products'));
}
$reviews = Review::where('reviews.productId',$id[0])-
>leftJoin('users','users.id','=','reviews.userId')-
>select('reviews.id as id','reviews.date as
reviewdate','reviews.time as reviewtime','users.nama as
namauser','reviews.message as reviewmessage','users.profile as profile')->get();
$reviewreplies =
Reviewreplie::where('reviewreplies.productId','=',$id)->get();
$count_review = Review::where('reviews.productId',$id[0])-
>select(DB::raw('count(reviews.id) as count'))-
>groupBy('reviews.productId')->first();
$members= Member::find($member->id);
$members->delete();}
return redirect()->route('singleProduct', ['id'=> $a]);