This commit is contained in:
Shohrat 2023-11-09 10:04:25 +00:00
parent ad75efd4a4
commit 2f8aff3430
18 changed files with 338 additions and 41 deletions

View File

@ -20,6 +20,7 @@ use TPS\Birzha\Models\Comment;
use TPS\Birzha\Models\Sections;
use TPS\Birzha\Models\Category;
use RainLab\User\Models\User;
use ToughDeveloper\ImageResizer\Classes\Image;
class BlogPostsApiController extends Controller
{
@ -101,6 +102,7 @@ class BlogPostsApiController extends Controller
->with([
'translations:locale,model_id,attribute_data',
'images:attachment_id,attachment_type,disk_name,file_name',
'vendor:id,name,email,type,logo,banner,shop_title,slogan,is_instagram,web2',
'place'
])
->withCount(['comments as rating_avg' => function($query) {
@ -110,6 +112,19 @@ class BlogPostsApiController extends Controller
->orderBy("id", "DESC")
->paginate(12);
$products->map(function ($product) {
$image = new Image($product->images[0]->path);
$product->images[0]->compressed_image = $image->resize([ 'quality' => 50])->getCachedImagePath(true);
return $product;
//foreach($product->images as $compressImage){
// $image = new Image($compressImage->path);
// $compressImage->compressed_image = $image->resize([ 'quality' => 50])->getCachedImagePath(true);
//}
});
return response()->json(array("data"=>$products), 200);
}
@ -180,7 +195,7 @@ class BlogPostsApiController extends Controller
$modified = $dataq->sections[$i]->section_type::where('type', $dataq->sections[$i]->product_type)->select('id', 'name', 'price', 'description', 'place_id', 'vendor_id', 'number_of_views', 'is_home', 'short_description', 'type')->with("place")->with([
'translations:locale,model_id,attribute_data',
'images:attachment_id,attachment_type,disk_name,file_name',
'vendor:id,name,email,type,logo,banner,shop_title,slogan,is_instagram',
'vendor:id,name,email,type,logo,banner,shop_title,slogan,is_instagram,web2',
])->limit(10)->get();
// $modified->makeHidden(['created_at', 'updated_at', 'deleted_at']);
$product_section = array(
@ -349,10 +364,18 @@ class BlogPostsApiController extends Controller
$favourite = $this->Favourites::where('user_id', $currentUser->id)
->with(['product' => function($q){
$q->approved()->withTrashed()->with(['images', 'place', 'files', 'translations:locale,model_id,attribute_data']);
$q->approved()->withTrashed()->with(['images:attachment_id,attachment_type,disk_name,file_name', 'place', 'files', 'translations:locale,model_id,attribute_data', 'vendor:id,name,email,type,logo,banner,shop_title,slogan,is_instagram,web2',]);
}])->paginate(9);
//dd($favourite);
$favourite->map(function ($fav) {
$image = new Image($fav->product->images[0]->path);
$fav->product->images[0]->compressed_image = $image->resize([ 'quality' => 50])->getCachedImagePath(true);
return $fav;
});
return response()->json($favourite, 200);
}
@ -379,6 +402,19 @@ class BlogPostsApiController extends Controller
->approved()
->paginate(9);
$data->map(function ($product) {
$image = new Image($product->images[0]->path);
$product->images[0]->compressed_image = $image->resize([ 'quality' => 50])->getCachedImagePath(true);
return $product;
//foreach($product->images as $compressImage){
// $image = new Image($compressImage->path);
// $compressImage->compressed_image = $image->resize([ 'quality' => 50])->getCachedImagePath(true);
//}
});
return response()->json($data, 200);
}
@ -422,7 +458,7 @@ class BlogPostsApiController extends Controller
//$data = User::find($id)->first;
$data = User::where('id', $id)->select('id', 'name', 'email', 'username', 'type', 'logo', 'shop_title', 'slogan', 'work_time', 'short_description', 'description', 'map', 'banner', 'is_instagram', 'tiktok', 'instagram', 'site', 'qr')
$data = User::where('id', $id)
->with(['categories' => function($q){
$q->with('translations:locale,model_id,attribute_data');
}])

View File

@ -121,7 +121,7 @@ class OrderApiController extends Controller
$orders[$i]->products = Product::whereIn("id", $productsCollectId)
->with(['translations:locale,model_id,attribute_data',
'images:attachment_id,attachment_type,disk_name,file_name',
'vendor:id,name,email,type,logo,banner,shop_title,slogan,is_instagram',
'vendor:id,name,email,type,logo,banner,shop_title,slogan,is_instagram,web2',
'place',])
->withTrashed()
->get();

View File

@ -48,20 +48,16 @@ class ProductsAPIController extends Controller
$perPage = intval(input('custom_per_page')); // intval protects from injection
try {
$products = Product::where('keyword', 'like', "%".$data["key"]."%")->orWhere('name', 'like', "%".$data["key"]."%")->orWhere('slug','LIKE','%'.$data["key"].'%')->with(['translations:locale,model_id,attribute_data',
$products = Product::where('keyword', 'like', "%".(string)$data["key"]."%")->orWhere('name', 'like', "%".$data["key"]."%")->orWhere('slug','LIKE','%'.$data["key"].'%')->with(['translations:locale,model_id,attribute_data',
'images:attachment_id,attachment_type,disk_name,file_name',
'vendor:id,name,email,type,logo,banner,shop_title,slogan,is_instagram',
'place',])->where('status', 'approved')->get();
$products = $products->map(function ($product) {
'vendor:id,name,email,type,logo,banner,shop_title,slogan,is_instagram,web2',
'place',])->where('status', 'approved')->paginate(15);
$products->map(function ($product) {
$image = new Image($product->images[0]->path);
$imageResized = $image->resize(200,200)->getCachedImagePath(true);
$product->images[0]->path2 = $imageResized;
$product->images[0]->path = $imageResized;
$product->images[0]->compressed_image = $image->resize([ 'quality' => 50])->getCachedImagePath(true);
return $product;
});
// foreach($products as $product) {
@ -110,7 +106,7 @@ class ProductsAPIController extends Controller
$query = Product::with([
'translations:locale,model_id,attribute_data',
'images:attachment_id,attachment_type,disk_name,file_name',
'vendor:id,name,email,type,logo,banner,shop_title,slogan,is_instagram',
'vendor:id,name,email,type,logo,banner,shop_title,slogan,is_instagram,web2',
'place',
])
->withCount(['comments as rating_avg' => function($query) {
@ -155,7 +151,7 @@ class ProductsAPIController extends Controller
$query = Product::with([
'translations:locale,model_id,attribute_data',
'images:attachment_id,attachment_type,disk_name,file_name',
'vendor:id,name,email,type,logo,banner,shop_title,slogan,is_instagram',
'vendor:id,name,email,type,logo,banner,shop_title,slogan,is_instagram,web2',
'place',
])
->withCount(['comments as rating_avg' => function($query) {
@ -179,7 +175,7 @@ class ProductsAPIController extends Controller
->with([
'translations:locale,model_id,attribute_data',
'images:attachment_id,attachment_type,disk_name,file_name',
'vendor:id,name,email,type,logo,banner,shop_title,slogan,is_instagram',
'vendor:id,name,email,type,logo,banner,shop_title,slogan,is_instagram,web2',
'place',
])->approved()->orderBy('id', $sortOrder);
@ -190,7 +186,7 @@ class ProductsAPIController extends Controller
->with([
'translations:locale,model_id,attribute_data',
'images:attachment_id,attachment_type,disk_name,file_name',
'vendor:id,name,email,type,logo,banner,shop_title,slogan,is_instagram',
'vendor:id,name,email,type,logo,banner,shop_title,slogan,is_instagram,web2',
'place',
])
->withCount(['comments as rating_avg' => function($query) {
@ -219,6 +215,7 @@ class ProductsAPIController extends Controller
->with([
'translations:locale,model_id,attribute_data',
'images:attachment_id,attachment_type,disk_name,file_name',
'vendor:id,name,email,type,logo,banner,shop_title,slogan,is_instagram,web2',
'place'
])
->withCount(['comments as rating_avg' => function($query) {
@ -258,7 +255,7 @@ class ProductsAPIController extends Controller
'translations:locale,model_id,attribute_data',
'images:attachment_id,attachment_type,disk_name,file_name',
'place',
'vendor:id,name,email,type,logo,banner,shop_title,slogan,is_instagram'
'vendor:id,name,email,type,logo,banner,shop_title,slogan,is_instagram,web2'
])
->withCount(['comments as rating_avg' => function($query) {
$query->select(DB::raw('avg(rating)'));
@ -309,6 +306,19 @@ class ProductsAPIController extends Controller
$data = $query ? $query->orderBy('id', "DESC")->orderBy('ends_at', $sortOrder)->paginate($perPage) : null;
$data->map(function ($product) {
$image = new Image($product->images[0]->path);
$product->images[0]->compressed_image = $image->resize(500)->getCachedImagePath(true);
return $product;
//foreach($product->images as $compressImage){
// $image = new Image($compressImage->path);
// $compressImage->compressed_image = $image->resize([ 'quality' => 50])->getCachedImagePath(true);
//}
});
return response()->json($data, 200);
}
@ -323,7 +333,7 @@ class ProductsAPIController extends Controller
$data = $this->Product::with([
'translations:locale,model_id,attribute_data',
'images:id,attachment_id,attachment_type,disk_name,file_name',
'vendor:id,name,surname,email,username,logo,banner,type',
'vendor:id,name,surname,email,username,logo,banner,type,web2',
'files', 'place', 'categories:id,name,slug,primary_key,icon'
])
//->withCount('comments')->withAvg('comments', 'rating')

View File

@ -62,7 +62,10 @@ class VendorApiController extends Controller
}
//dd($data);
$currentUser = \JWTAuth::parseToken()->authenticate();
$vendor = Vendor::find($currentUser->id)->first();
$vendor = Vendor::where("id", $currentUser->id)->with(['categories' => function($q){
$q->with('translations:locale,model_id,attribute_data');
}])
->with('sliders')->first();
//dd($vendor->type);
@ -72,9 +75,25 @@ class VendorApiController extends Controller
$vendor->slogan = $data["slogan"];
$vendor->work_time = $data["work_time"];
$vendor->description = $data["description"];
$vendor->short_description = $data["short_description"] ?? "";
$vendor->web2 = (int) $data["discount"];
$vendor->tiktok = $data["tiktok"];
$vendor->instagram = $data["instagram"];
$vendor->site = $data["site"];
$vendor->save();
return $this->helpers->apiArrayResponseBuilder(200, 'ok', [$vendor]);
$vendor->pathUrl = 'https://gurlushyk.com.tm' . \Config::get('cms.storage.media.path');
$all = array(
"id" => 0,
"name"=> "Hemmesi",
);
$vendor->categories->prepend($all);
return response()->json($vendor, 200);
}else{

View File

@ -73,21 +73,22 @@ class CategoryProfile extends ComponentBase
protected function getSubs(){
$cSlug = $this->property('categorySlug');
$category = Category::transWhere('slug', $cSlug, Session::get('rainlab.translate.locale'))->with('users')->first();
$subs = Category::where("primary_key", $category->id)->get();
$subs = $category ? Category::where("primary_key", $category->id)->get() : null;
if($subs){
foreach ($subs as $subcategory) {
$page = input('page', 1);
$products = $subcategory->products()->paginate(12, $page);
$subcategory->setRelation('products', $products);
}
}
return $subs;
}
protected function getCategoryUsers(){
$cSlug = $this->property('categorySlug');
$category = Category::where('slug', $cSlug)->first();
$users = $category->users()->get();
$users = $category ? $category->users()->get() : null;
return $users;
}

View File

@ -24,7 +24,7 @@ class ShopSettings extends ComponentBase
public function onRun() {
$this->user = $this->loadShopSettings();
//$this->user = $this->loadShopSettings();
}
@ -33,6 +33,13 @@ class ShopSettings extends ComponentBase
return $user;
}
public function onDelete(){
$user = User::find(\Auth::user()->id);
$user->delete();
Flash::success('Hasabyňyz pozuldy');
return \Redirect::back();
}
public function onSave(){
$data = post();
@ -48,14 +55,19 @@ class ShopSettings extends ComponentBase
$user = User::find(\Auth::user()->id);
$user->instagram = $data['instagram'];
$user->tiktok = $data['tiktok'];
$user->site = $data['website'];
$user->shop_title = $data['vendorName'];
$user->slogan = $data['slogan'];
$user->short_description = $data['short_description'];
$user->description = $data['description'];
$user->work_time = $data['workTime'];
$user->web2 = $data['discount'] ? number_format($data['discount'], 2, '.', '') : null;
$user->save();
Flash::success('Maglumatlar üýtgedildi');
return \Redirect::back();
}
protected function validateForm($data, $rules) {

View File

@ -1,4 +1,3 @@
{% set user = __SELF__.user %}
<!-- Breadcumb Area -->
<div class="breadcumb_area">
<div class="container h-100">
@ -39,38 +38,61 @@
data-request-flash
data-request-validate
data-request-files
data-request-success="resetForm()"
data-request-error="resetForm()"
>
<div class="row">
<div class="col-12 col-lg-6">
<div class="form-group">
<label for="firstName">{{ 'shop.DukanynAdy'|_ }}</label>
<input type="text" class="form-control" name="vendorName" id="vendorName" value="{{ user.shop_title }}" placeholder="{{ 'shop.DukanynAdy'|_ }}" required>
<input type="text" class="form-control" name="vendorName" id="vendorName" value="{{ user.shop_title }}" required>
</div>
</div>
<div class="col-12 col-lg-6">
<div class="form-group">
<label for="lastName">{{ 'shop.Slogan'|_ }}</label>
<input type="text" class="form-control" name="slogan" id="slogan" value="{{ user.slogan }}" placeholder="{{ 'shop.Slogan'|_ }}" required>
<input type="text" class="form-control" name="slogan" id="slogan" value="{{ user.slogan }}" required>
</div>
</div>
<div class="col-12 col-lg-6">
<div class="form-group">
<label for="displayName">{{ 'shop.IsWagty'|_ }}</label>
<input type="text" class="form-control" name="workTime" id="workTime" value="{{ user.work_time }}" placeholder="{{ 'shop.IsWagty'|_ }}" required>
<input type="text" class="form-control" name="workTime" id="workTime" value="{{ user.work_time }}" required>
</div>
</div>
<div class="col-12 col-lg-6">
<div class="form-group">
<label for="discount">{{ 'shop.Arzanladys'|_ }}</label>
<input type="decimal" class="form-control" name="discount" id="discount" value="{{ user.web2 }}" placeholder="{{ 'shop.Arzanladys'|_ }}">
<input type="decimal" class="form-control" name="discount" id="discount" value="{{ user.web2 }}">
</div>
</div>
<div class="col-12 col-lg-6">
<div class="form-group">
<label for="instagram">Instagram</label>
<input type="text" class="form-control" name="instagram" id="instagram" value="{{ user.instagram }}">
</div>
</div>
<div class="col-12 col-lg-6">
<div class="form-group">
<label for="instagram">Tik-Tok</label>
<input type="text" class="form-control" name="tiktok" id="tiktok" value="{{ user.tiktok }}">
</div>
</div>
<div class="col-12 col-lg-6">
<div class="form-group">
<label for="instagram">Web sahypa</label>
<input type="text" class="form-control" name="website" id="website" value="{{ user.site }}">
</div>
</div>
<div class="col-12">
<div class="form-group">
<label for="short_description">{{ 'shop.GysgaBeyan'|_ }}</label>
<textarea class="form-control" id="short_description" cols="30" name="short_description" rows="10" style="height: 50px;" required>{{ user.short_description|striptags|raw }}</textarea>
</div>
</div>
<div class="col-12">
<div class="form-group">
<label for="description">{{ 'shop.Beyan'|_ }}</label>
<textarea class="form-control" id="description" cols="30" name="description" rows="10" placeholder="{{ 'shop.Beyan'|_ }}" style="height: 160px;" required>{{ user.description|striptags|raw }}</textarea>
<textarea class="form-control" id="description" cols="30" name="description" rows="10" style="height: 160px;" required>{{ user.description|striptags|raw }}</textarea>
</div>
</div>

View File

@ -110,6 +110,14 @@
<div class="col-2">{{ 'product.Satyjy'|_ }}:</div>
<div class="col-10"><a href="{{ 'user-profile'|page({id: product.vendor.id}) }}">{{ product.vendor.shop_title ? product.vendor.shop_title: product.vendor.name }}</a></div>
</div>
<div class="row mt-2">
<div class="col-4">{{ 'product.TelefonBelgisi'|_ }}:</div>
<div class="col-8">+993 {{ product.vendor.username }}</div>
</div>
<div class="row mt-2">
<div class="col-4">{{ 'product.GoyulanSenesi'|_ }}:</div>
<div class="col-8">{{ product.created_at.format('d.m.Y') }}</div>
</div>
<p>{{ product.description|raw }}</p>
</div>

View File

@ -19,4 +19,14 @@ class Categories extends Controller
parent::__construct();
BackendMenu::setContext('TPS.Birzha', 'birzha-menu', 'categories');
}
public function listExtendQuery($query)
{
$query->withTrashed();
}
public function formExtendQuery($query)
{
$query->withTrashed();
}
}

View File

@ -36,3 +36,6 @@ columns:
label: Esasy
type: number
sortable: true
deleted_at:
label: 'POZULAN SENE'
type: datetime

View File

@ -48,3 +48,10 @@ tabs:
span: auto
type: number
tab: Image
deleted_at:
label: 'Pozulanmy?'
span: auto
mode: date
type: datepicker
comment: 'Pozulan bolsa icindaki chislony poz'
tab: POZULANMY

View File

@ -87,6 +87,11 @@ tabs:
required: 1
type: relation
tab: Categories
phone:
label: 'Goshmaca Telefon'
span: auto
type: text
tab: Categories
status:
label: Status
options:

View File

@ -604,7 +604,7 @@ textarea:focus,
.breakpoint-on .classynav ul li.has-down.active > .dd-trigger,
.breakpoint-on .classynav ul li.megamenu-item.active > .dd-trigger {
background-color: #0f99f3; }
background-color: #f37b1c; }
.hero_meta_area {
position: relative;
@ -4359,6 +4359,113 @@ button.mfp-arrow {
}
/* Custom file-input ============================ */
/* Chat end ======================================= */
.chat-wrapper-section {
position: fixed;
right: 40px;
bottom: 182px;
width: 335px;
background-color: #fff;
border-radius: 5px;
transition: all 0.4s;
box-shadow: 1px 2px 11px #44444469;
z-index:99999;
height: 600px;
}
.message_input2 {
width: 100%;
height: 100px;
padding: 30px;
background-color: rgba(0, 0, 0, 0.03);
}
.message_form {
position: absolute;
bottom: 0px;
left: 50%;
transform: translateX(-50%);
width: calc(100% - 60px);
border: 1px solid #e2e2e2;
border-radius: 10px;
overflow: hidden;
background: #fff;
}
.friend_message2 {
width: 60%;
border-bottom-right-radius: 10px;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
padding: 10px;
margin-bottom: 30px;
background: #f5f5f5;
overflow-x: hidden;
}
.my_message2 {
width: 60%;
border-bottom-left-radius: 10px;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
padding: 10px;
margin: 0 0 30px auto;
background: #F37B1C;
color: #fff;
overflow-x: hidden;
}
.message_form2 {
position: absolute;
bottom: 19px;
left: 50%;
transform: translateX(-50%);
width: calc(100% - 60px);
border: 0px;
/* border-radius: 10px; */
overflow: hidden;
background: #fff;
}
.chat_area2 {
width: 100%;
height: 620px;
position: relative;
padding-bottom: 100px;
}
.display-block{
display: block;
opacity: 1;
transition: opacity 1s;
}
.display-none{
display: none;
opacity: 0;
}
.message_btn2 {
position: absolute;
top: 40px;
right: 35px;
background: none;
border: none;
cursor: pointer;
width: 20px;
height: 20px;
z-index: 1;
}

View File

@ -9,6 +9,8 @@ code = "top-menu"
[session]
security = "all"
redirect = "login"
[shopsettings]
==
<html lang="{{activeLocale}}">

View File

@ -378,4 +378,43 @@ items:
isHidden: '0'
cssClass: ''
isExternal: '0'
-
title: 'Ownuk harytlar'
type: url
url: /category-profile/ownuk-harytlar
code: ''
viewBag:
locale:
ru:
title: ''
url: ''
isHidden: '0'
cssClass: ''
isExternal: '0'
-
title: 'El gurallary'
type: url
url: /category-profile/el-gurallary
code: ''
viewBag:
locale:
ru:
title: ''
url: ''
isHidden: '0'
cssClass: ''
isExternal: '0'
-
title: 'Elektro enjamlar'
type: url
url: /category-profile/elektro-enjamlar
code: ''
viewBag:
locale:
ru:
title: ''
url: ''
isHidden: '0'
cssClass: ''
isExternal: '0'
name: top-menu

View File

@ -245,6 +245,12 @@ p {
}
@media (max-width: 1200px) {
.chat_area2{
height: 448px;
}
.chat-wrapper-section{
height: 435px;
}
.section_padding_100 {
padding: 15px 0;
}
@ -332,6 +338,12 @@ p {
}
@media (max-width: 992px) {
.chat_area2{
height: 448px;
}
.chat-wrapper-section{
height: 435px;
}
.section_padding_100 {
padding: 15px 0;
}

View File

@ -32,6 +32,8 @@ noRecordsMessage = "No records found"
detailsPage = "-"
detailsUrlParameter = "id"
pageNumber = "{{ :page }}"
[shopsettings]
==
{% set firstFourCategories = builderList.records %}
{% set lastFourCategories = builderList2.records %}
@ -152,6 +154,7 @@ pageNumber = "{{ :page }}"
<li><a href="{{ 'vendor-settings'|page }}">{{ 'profileDropdown.DukanSazlamalary'|_ }}</a></li>
<li><a href="{{ 'my-comments'|page }}">{{ 'profileDropdown.Kammentarialar'|_ }}</a></li>
<li><a href="{{ 'vendor-sales'|page }}">{{ 'profileDropdown.GelenSargytlar'|_ }}</a></li>
<li><a href="#" data-request="onDelete" data-request-confirm="{{ 'profileDropdown.PozmakIsleyanizmi'|_ }}" data-request-flash><span style="color:red;">{{ 'profileDropdown.HasabyPozmak'|_ }}</span></a></li>
</ul>
{% endif %}
</div>

View File

@ -9,6 +9,7 @@
<li><a href="{{ 'vendor-settings'|page }}">{{ 'profileDropdown.DukanSazlamalary'|_ }}</a></li>
<li><a href="{{ 'my-comments'|page }}">{{ 'profileDropdown.Kammentarialar'|_ }}</a></li>
<li><a href="{{ 'vendor-sales'|page }}">{{ 'profileDropdown.GelenSargytlar'|_ }}</a></li>
<li><a href="#" data-request="onDelete" data-request-confirm="{{ 'profileDropdown.PozmakIsleyanizmi'|_ }}" data-request-flash><span style="color:red;">{{ 'profileDropdown.HasabyPozmak'|_ }}</span></a></li>
</ul>
</div>
</div>