MIF_E31210141/Modules/Seller/Http/Controllers/SitesController.php

474 lines
20 KiB
PHP

<?php
namespace Modules\Seller\Http\Controllers;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use DataTables;
use Modules\Seller\Entities\SitesModel;
use Modules\Seller\Entities\SitesCategoryModel as NicheWebsite;
use Modules\Seller\Entities\DomainModel;
use App\Enums\GlobalEnum;
class SitesController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index(Request $request)
{
// 94
if ($request->ajax()) {
$data = SitesModel::where('user_id', auth()->user()->id)->select('url','is_language','created_at','is_url_category','id','is_status','is_post_price','is_delivery_time','is_word_limit');
return Datatables::of($data)
->addIndexColumn()
->addColumn('title-post', function($row){
$text = '
<p class="mb-0">' . $row->url . '</p>
<div class="d-flex">
<span class="text-muted small me-2">Bahasa: ' . ucfirst($row->is_language) . ' -</span>
<span class="text-muted small"> ' . date('j F Y', strtotime($row->created_at)) . '</span>
</div>
<p class="mb-0 small">' . $row->is_url_category . '</p>
';
return $text;
})
->addColumn('language', function($row){
if (preg_match('/^indonesia/i', $row->is_language)) {
return '
<span class="fs-8 rounded bg-light py-3 px-2">
<img class="w-15px h-15px rounded-1 mx-1" src="' . frontend('media/flags/indonesia.svg') . '" alt="">
Indonesia
</span>
';
} else {
return '
<span class="fs-8 rounded bg-light py-3 px-2">
<img class="w-15px h-15px rounded-1 mx-1" src="' . frontend('media/flags/united-states.svg') . '" alt="">
English
</span>
';
}
})
->addColumn('is_status', function($row){
if ($row->is_status == GlobalEnum::isSiteActive) {
return '<span class="mb-1 badge font-medium bg-light-success text-success">Aktif</span>';
} elseif($row->is_status == GlobalEnum::isSiteInReview) {
return '<span class="mb-1 badge font-medium bg-light-primary text-primary">Dalam review</span>';
} elseif($row->is_status == GlobalEnum::isSiteNotActive) {
return '<span class="mb-1 badge font-medium bg-light-danger text-danger">Tidak aktif</span>';
} elseif($row->is_status == GlobalEnum::isSiteRejected) {
return '<span class="mb-1 badge font-medium bg-light-warning text-warning">Ditolak</span>';
} elseif($row->is_status == GlobalEnum::isSiteDeactivated) {
return '<span class="mb-1 badge font-medium bg-light-info text-info">Dimatikan</span>';
}
})
->addColumn('post_price', function($row){
return 'Rp. ' . number_format($row->is_post_price, 0, ',', '.');
})
->addColumn('delivery_time', function($row){
return $row->is_delivery_time . ' Hari';
})
->addColumn('word_limit', function($row){
return $row->is_word_limit . ' Kata';
})
->rawColumns(['title-post','language','is_status','post_price','delivery_time','word_limit'])
->filter(function ($query) use ($request) {
if ($request->has('search')) {
$search = $request->get('search')['value'];
$filterCategory = explode('|', $search);
if($filterCategory[0] === 'status') {
if(!empty($filterCategory[1])) {
$query->where('is_status', '=', $filterCategory[1]);
} else {
$query->get();
}
} elseif($filterCategory[0] === 'sites') {
if(!empty($filterCategory[1])) {
$query->where('url', 'LIKE', "%$filterCategory[1]%");
} else {
$query->get();
}
}
}
})
->make(true);
}
$data = [
'subtitle' => 'Semua Sites',
'button' => true,
'module' => [
'url' => route('sites.create'),
'name' => 'Tambah baru'
]
];
return view('seller::sites.index', compact('data'));
}
public function create()
{
$data = [
'subtitle' => 'Tambah Baru'
];
$getNicheCategory = NicheWebsite::where('is_status', 1)->get();
return view('seller::sites.add', compact('data', 'getNicheCategory'));
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'url' => 'required',
'description' => 'required',
'is_role' => 'required',
'is_type' => 'required',
'is_language' => 'required',
'is_post_price' => 'required',
'is_delivery_time' => 'required',
'is_word_limit' => 'required',
'is_post_sample' => 'required',
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
$input = $request->all();
$post = new SitesModel([
'id' => Str::uuid(),
'user_id' => user()['id'],
'url' => $input['url'], // Membersihkan input judul menggunakan Purifier
'description' => clean($input['description']), // Membersihkan input deskripsi menggunakan Purifier
'is_role' => $input['is_role'],
'is_type' => $input['is_type'],
'is_language' => $input['is_language'],
'is_post_price' => $input['is_post_price'],
'is_delivery_time' => $input['is_delivery_time'],
'is_content_included' => !empty($input['is_content_included']) ? $input['is_content_included'] : 0,
'is_content_price' => !empty($input['is_content_price']) ? $input['is_content_price'] : null,
'is_word_limit' => $input['is_word_limit'],
'is_post_sample' => $input['is_post_sample'],
'is_url_category' => implode(',' ,$input['is_url_category']), // Membersihkan input kategori menggunakan Purifier
'is_status' => 2,
]);
$check = SitesModel::where('url', $input['url'])->count();
if ($check == 0) {
if ($post->save()) {
return redirect()->route('sites')->with('swal', swal_alert('success', 'Anda berhasil menambahkan data baru, Data akan segera diproses oleh administrator'));
} else {
return redirect()->route('sites')->with('swal', swal_alert('error', 'Terjadi kesalahan pada sistem!'));
}
} else {
return redirect()->route('sites')->with('swal', swal_alert('error', 'Galat! Ditemukan data yang sudah ada.'));
}
}
public function edit($id)
{
$data = [
'subtitle' => 'Edit',
];
$getSitesInfo = SitesModel::find($id);
$getNicheCategory = NicheWebsite::where('is_status', 1)->get();
return view('seller::sites.edit', compact('data', 'getNicheCategory', 'getSitesInfo'));
}
public function update(Request $request, $id)
{
$validator = Validator::make($request->all(), [
'url' => 'required',
'description' => 'required',
'is_role' => 'required',
'is_type' => 'required',
'is_language' => 'required',
'is_post_price' => 'required',
'is_delivery_time' => 'required',
'is_word_limit' => 'required',
'is_post_sample' => 'required',
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
$input = $request->all();
$sites = SitesModel::find($id);
if($sites) {
$sites->url = $input['url'];
$sites->description = clean($input['description']);
$sites->is_role = $input['is_role'];
$sites->is_type = $input['is_type'];
$sites->is_language = $input['is_language'];
$sites->is_post_price = $input['is_post_price'];
$sites->is_delivery_time = $input['is_delivery_time'];
$sites->is_content_included = !empty($input['is_content_included']) ? $input['is_content_included'] : 0;
$sites->is_content_price = !empty($input['is_content_price']) ? $input['is_content_price'] : null;
$sites->is_word_limit = $input['is_word_limit'];
$sites->is_post_sample = $input['is_post_sample'];
$sites->is_url_category = implode(',' ,$input['is_url_category']);
$sites->is_status = 2;
$sites->save();
return redirect()->route('sites')->with('swal', swal_alert('success', 'Berhasil memperbarui site.'));
} else {
return redirect()->route('sites')->with('swal', swal_alert('error', 'Site tidak ditemukan.'));
}
}
public function detail($id)
{
$check = SitesModel::where('id', $id)->first();
if($check) {
$detail = [
'url' => removeUrlPrefix($check->url),
'secure' => isUrlSecure($check->url),
'description' => $check->description,
'is_role' => $check->is_role == GlobalEnum::isSiteOwner ? 'Owner' : 'Member',
'is_type' => $check->is_type == GlobalEnum::isSiteTypeDoFollow ? 'Do-Follow' : 'No-Follow',
'is_language' => ucfirst($check->is_language),
'is_post_price' => rupiah_changer($check->is_post_price),
'is_delivery_time' => $check->is_delivery_time,
'is_word_limit' => $check->is_word_limit,
'is_post_sample' => $check->is_post_sample,
'is_content_included' => $check->is_content_included == 1 ? 'Ya' : 'Tidak',
'is_content_price' => rupiah_changer($check->is_content_price),
'is_url_category' => empty($check->is_url_category) ? '-' : $check->is_url_category,
'is_page_authority' => $check->is_page_authority,
'is_domain_authority' => $check->is_domain_authority,
'is_seller' => user()->name,
];
return $detail;
}
}
public function destroy($id)
{
$sites = SitesModel::find($id);
if($sites) {
$sites->delete();
return redirect()->route('sites')->with('swal', swal_alert('success', 'Berhasil menghapus data.'));
} else {
return redirect()->route('sites')->with('swal', swal_alert('error', 'Site tidak ditemukan.'));
}
}
// domain
public function domain(Request $request)
{
if ($request->ajax()) {
$data = DomainModel::where('user_id', auth()->user()->id)->select('url','user_id','is_url_from_website','created_at','is_price','id','is_status','is_delivery_time');
return Datatables::of($data)
->addIndexColumn()
->addColumn('title-post', function($row){
if($row->is_url_from_website != null) {
$text = '
<p class="mb-0">' . removeUrlPrefix($row->is_url_from_website) . '</p>
';
} else {
$text = '
<p class="mb-0">' . removeUrlPrefix($row->url) . '</p>
';
}
return $text;
})
->addColumn('is_status', function($row){
if ($row->is_status == 1) {
return '<span class="mb-1 badge font-medium bg-light-success text-success py-3 px-4 fs-7">Aktif</span>';
} elseif($row->is_status == 2) {
return '<span class="mb-1 badge font-medium bg-light-primary text-primary py-3 px-4 fs-7">Menunggu</span>';
} elseif($row->is_status == 3) {
return '<span class="mb-1 badge font-medium bg-light-info text-info py-3 px-4 fs-7">Dalam Review</span>';
} elseif($row->is_status == 4) {
return '<span class="mb-1 badge font-medium bg-light-danger text-danger py-3 px-4 fs-7">Ditolak</span>';
}
})
->addColumn('post_price', function($row){
return 'Rp. ' . number_format($row->is_price, 0, ',', '.');
})
->addColumn('delivery_time', function($row){
return $row->is_delivery_time . ' Hari';
})
->rawColumns(['title-post','author','is_status','post_price','delivery_time'])
->filter(function ($query) use ($request) {
if ($request->has('search')) {
$search = $request->get('search')['value'];
$filterCategory = explode('|', $search);
if($filterCategory[0] === 'status') {
if(!empty($filterCategory[1])) {
$query->where('is_status', '=', $filterCategory[1]);
} else {
$query->get();
}
} elseif($filterCategory[0] === 'sites') {
if(!empty($filterCategory[1])) {
if($query->where('url', 'LIKE', "%$filterCategory[1]%")->count() == 0) {
$query->where('is_url_from_website', 'LIKE', "%$filterCategory[1]%");
} else {
$query->where('url', 'LIKE', "%$filterCategory[1]%");
}
} else {
$query->get();
}
}
}
})
->make(true);
}
$data = [
'subtitle' => 'Semua Domain',
'button' => true,
'module' => [
'url' => route('sites.domain.create'),
'name' => 'Tambah baru'
]
];
return view('seller::sites.domain.index', compact('data'));
}
public function createDomain()
{
$data = [
'subtitle' => 'Tambah Baru'
];
$getSiteLists = SitesModel::where('user_id', user()->id)->select('*')->get();
return view('seller::sites.domain.add', compact('data', 'getSiteLists'));
}
public function storeDomain(Request $request)
{
$validator = Validator::make($request->all(), [
'is_price' => 'required',
'is_delivery_time' => 'required',
'is_domain_authority' => 'required',
'is_page_authority' => 'required',
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
$input = $request->all();
$post = new DomainModel([
'id' => Str::uuid(),
'user_id' => user()['id'],
'url' => empty($input['url']) ? null : $input['url'], // Membersihkan input judul menggunakan Purifier
'is_url_from_website' => empty($input['is_url_from_website']) ? null : $input['is_url_from_website'],
'is_price' => $input['is_price'],
'is_delivery_time' => $input['is_delivery_time'],
'is_page_authority' => $input['is_page_authority'],
'is_domain_authority' => $input['is_domain_authority'],
'is_status' => 3
]);
$check = DomainModel::where('user_id', auth()->user()->id)->where('url', $input['url'])->count();
if ($check == 0) {
if ($post->save()) {
return redirect()->route('sites.domain')->with('swal', swal_alert('success', 'Anda berhasil menambahkan data baru, Data akan segera diproses oleh administrator'));
} else {
return redirect()->route('sites.domain')->with('swal', swal_alert('error', 'Terjadi kesalahan pada sistem!'));
}
} else {
return redirect()->route('sites.domain')->with('swal', swal_alert('error', 'Galat! Ditemukan data yang sudah ada.'));
}
}
public function editDomain($id)
{
$data = [
'subtitle' => 'Edit',
];
$getSitesInfo = DomainModel::find($id);
$getSiteLists = SitesModel::where('is_status', GlobalEnum::isSiteActive)
->where('user_id', user()['id'])->get();
return view('admin.app.sites.domain.edit', compact('data', 'getSitesInfo', 'getSiteLists'));
}
public function updateDomain(Request $request, $id)
{
$validator = Validator::make($request->all(), [
'is_price' => 'required',
'is_delivery_time' => 'required',
'is_domain_authority' => 'required',
'is_page_authority' => 'required',
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
$input = $request->all();
$sites = DomainModel::find($id);
if($sites) {
$sites->url = $input['url'];
$sites->is_url_from_website = !empty($input['is_url_from_website']) ? $input['is_url_from_website'] : null;
$sites->is_price = $input['is_price'];
$sites->is_delivery_time = $input['is_delivery_time'];
$sites->is_domain_authority = !empty($input['is_domain_authority']) ? $input['is_domain_authority'] : 0;
$sites->is_page_authority = !empty($input['is_page_authority']) ? $input['is_page_authority'] : 0;
$sites->is_status = $input['is_status'];
$sites->save();
return redirect()->route('sites.domain')->with('swal', swal_alert('success', 'Berhasil memperbarui site.'));
} else {
return redirect()->route('sites.domain')->with('swal', swal_alert('error', 'Site tidak ditemukan.'));
}
}
public function destroyDomain($id)
{
$sites = DomainModel::find($id);
if($sites) {
$sites->delete();
return redirect()->route('sites.domain')->with('swal', swal_alert('success', 'Berhasil menghapus data.'));
} else {
return redirect()->route('sites.domain')->with('swal', swal_alert('error', 'Site tidak ditemukan.'));
}
}
public function detailDomain($id)
{
$check = DomainModel::where('id', $id)->first();
if($check) {
$detail = [
'url' => empty($check->url) ? '-' : removeUrlPrefix($check->url),
'url_website' => empty($check->is_url_from_website) ? '-' : $check->is_url_from_website,
'is_price' => rupiah_changer($check->is_price),
'secure' => isUrlSecure($check->url),
'is_delivery_time' => $check->is_delivery_time,
'is_page_authority' => $check->is_page_authority,
'is_domain_authority' => $check->is_domain_authority,
'is_seller' => user()->name,
];
return $detail;
}
}
}