474 lines
20 KiB
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;
|
|
}
|
|
}
|
|
}
|