added product and post query setting

master
A1Gard 3 days ago
parent 01c1438eee
commit cf081b24fa

@ -872,12 +872,12 @@ function getGroupPostsBySetting($key, $limit = 10, $order = 'id', $dir = "DESC")
}
/**
* get group's posts by setting key
* get category's products by setting key
* @param $key
* @param integer $limit
* @param string $order
* @param string $dir
* @return \App\Models\Post[]|\Illuminate\Database\Eloquent\Collection|\LaravelIdea\Helper\App\Models\_IH_Post_C
* @return \App\Models\Category[]|\Illuminate\Database\Eloquent\Collection|\LaravelIdea\Helper\App\Models\_IH_Post_C
*/
function getCategoryProductBySetting($key, $limit = 10, $order = 'id', $dir = "DESC")
{
@ -885,6 +885,24 @@ function getCategoryProductBySetting($key, $limit = 10, $order = 'id', $dir = "D
->products()->where('status', 1)->orderBy($order, $dir)->limit($limit)->get();
}
/**
* get products by setting key
* @param $key
* @param integer $limit
* @return \App\Models\Product[]|\Illuminate\Database\Eloquent\Collection|\LaravelIdea\Helper\App\Models\_IH_Post_C
*/
function getProductsQueryBySetting($key, $limit = 10)
{
$data = explode(',', getSetting($key) ?? '1,id,DESC');
if ($data[0] == 0) {
$q = Product::where('status', 1);
}else{
$q = Category::where('id', $data[0])->first()
->products()->where('status', 1);
}
return $q->orderBy($data[1], $data[2])->limit($limit)->get();
}
/**
* get group's posts by setting key
* @param $key

@ -22,11 +22,13 @@ class SettingController extends Controller
//
$settings = Setting::where('active', true)
->orderBy('section')->get(); //ESH// just active setting`s show
$cats = Category::all(['id','name']);
$menus = Menu::all(['id','name']);
$groups = Group::all(['id','name']);
$cats = Category::all(['id', 'name'])->toArray();
$menus = Menu::all(['id', 'name']);
$groups = Group::all(['id', 'name'])->toArray();
$catz = array_merge([['id' => 0, 'name' => __('All')]], $cats);
$groupz = array_merge([['id' => 0, 'name' => __('All')]], $groups);
return view('admin.commons.setting',
compact('settings', 'cats','groups','menus'));
compact('settings', 'cats', 'groups', 'menus', 'catz', 'groupz'));
}
/**
@ -50,7 +52,7 @@ class SettingController extends Controller
$set->type = $request->type;
$set->size = $request->size;
$set->save();
logAdmin(__METHOD__,__CLASS__,$set->id);
logAdmin(__METHOD__, __CLASS__, $set->id);
return redirect()->back()->with(['message' => __('Setting added to website')]);
}
@ -78,14 +80,21 @@ class SettingController extends Controller
$all = $request->all();
foreach ($all as $key => $val) {
$set = Setting::where('key', $key)->first();
if ($set != null && !$request->hasFile($key)) {
if ($set == null) {
continue;
}
if ($set->type == 'PRODUCT_QUERY' || $set->type == 'POST_QUERY') {
$set->value = implode(',', $val);
$set->raw = implode(',', $val);
$set->save();
} elseif ($set != null && !$request->hasFile($key)) {
$set->value = validateSettingRequest($set,$val);
$set->raw = validateSettingRequest($set,$val);
$set->value = validateSettingRequest($set, $val);
$set->raw = validateSettingRequest($set, $val);
// need to test
if (config('app.xlang.active') && config('app.xlang.main') != 'en' && (
$set->type != 'TEXT' && $set->type != 'EDITOR' && $set->type != 'LONGTEXT')){
$set->setTranslation('value','en' , $val);
$set->type != 'TEXT' && $set->type != 'EDITOR' && $set->type != 'LONGTEXT')) {
$set->setTranslation('value', 'en', $val);
}
$set->save();
}
@ -94,30 +103,30 @@ class SettingController extends Controller
if (isset($files['file'])) {
$format = getSetting('optimize');
foreach ($files['file'] as $index => $file) {
if ( ($file->guessExtension() == 'jpg' || $file->guessExtension() == 'png') && ($index != 'site_image') ) {
if (($file->guessExtension() == 'jpg' || $file->guessExtension() == 'png') && ($index != 'site_image')) {
$i = Image::load($file->getRealPath())
->optimize()
->format($format);
$file->move(public_path('upload/images/'), str_replace('_','.',$index) );//store('/images/'.,['disk' => 'public']);
$optimizedFile = public_path('upload/images/optimized-'). str_replace('_','.',$index);
$optimizedFile = str_replace(['jpg','png','gif'],'webp',$optimizedFile);
$file->move(public_path('upload/images/'), str_replace('_', '.', $index));//store('/images/'.,['disk' => 'public']);
$optimizedFile = public_path('upload/images/optimized-') . str_replace('_', '.', $index);
$optimizedFile = str_replace(['jpg', 'png', 'gif'], 'webp', $optimizedFile);
$i->save($optimizedFile);
}else
if ($file->guessExtension() == 'mp4' || $file->guessExtension() == 'mp3'){
$file->move(public_path('upload/media/'), str_replace('_','.',$index) );//store('/images/'.,['disk' => 'public']);
}else{
} else
if ($file->guessExtension() == 'mp4' || $file->guessExtension() == 'mp3') {
$file->move(public_path('upload/media/'), str_replace('_', '.', $index));//store('/images/'.,['disk' => 'public']);
} else {
$file->move(public_path('upload/file/'), str_replace('_','.',$index) );//store('/images/'.,['disk' => 'public']);
$file->move(public_path('upload/file/'), str_replace('_', '.', $index));//store('/images/'.,['disk' => 'public']);
}
}
}
if ($request->has('build')){
if ($request->has('build')) {
Artisan::call('build');
}
logAdmin(__METHOD__,__CLASS__,null);
logAdmin(__METHOD__, __CLASS__, null);
return redirect()->back()->with(['message' => __('Setting of website updated')]);
}
@ -129,8 +138,9 @@ class SettingController extends Controller
//
}
public function cacheClear(){
$f = Setting::where('key','cache_number')->first();
public function cacheClear()
{
$f = Setting::where('key', 'cache_number')->first();
$f->value += 1;
$f->save();
Artisan::call('cache:clear');
@ -140,13 +150,16 @@ class SettingController extends Controller
return redirect()->back()->with(['message' => __('Cache cleared')]);
}
public function liveEdit($slug){
$settings = Setting::where('active', true)->where('key','LIKE',$slug.'%')
public function liveEdit($slug)
{
$settings = Setting::where('active', true)->where('key', 'LIKE', $slug . '%')
->orderBy('section')->get();
$cats = Category::all(['id','name']);
$menus = Menu::all(['id','name']);
$groups = Group::all(['id','name']);
$cats = Category::all(['id', 'name'])->toArray();
$catz = array_merge([['id' => 0, 'name' => __('All')]], $cats);
$menus = Menu::all(['id', 'name']);
$groups = Group::all(['id', 'name'])->toArray();
$groupz = array_merge([['id' => 0, 'name' => __('All')]], $groups);
return view('admin.commons.live',
compact('settings', 'cats','groups','menus'));
compact('settings', 'cats', 'groups', 'menus', 'catz', 'groupz'));
}
}

@ -14,7 +14,7 @@ class Setting extends Model
public static $settingTypes = ['TEXT', 'NUMBER', 'LONGTEXT', 'CODE', 'EDITOR',
'CATEGORY', 'GROUP', 'CHECKBOX', 'FILE', 'COLOR', 'SELECT', 'MENU', 'LOCATION',
'ICON','DATE','DATETIME','TIME'];
'ICON','DATE','DATETIME','TIME','PRODUCT_QUERY','POST_QUERY'];
public function getData()
{

@ -87,6 +87,7 @@
"As you wished restored successfully": "همانطور که شما مایل بودید بازیافت شد",
"As you wished sort saved": "همانطور که شما مایل بودید مرتب شدند",
"As you wished updated successfully": "همانطور که شما مایل بودید به روز شد",
"Ascending": "صعودی",
"Assets build failed": "دارایی‌ها ساخته نشده‌اند",
"Assets build successfully": "دارایی‌ها با موفقیت ساخته شدن",
"Attaching": "پیوست کردن",
@ -173,6 +174,7 @@
"Default admin email is :E1 (developer) or :E2 (admin) and default password is: :P": "در نگارش آزمایشی رایانامه توسعه دهنده :E1 است و رایانامه مدیر عادی :E2 و گذرواژه هر دو :P است",
"DefaultFooter": "فوتر پیش‌فرض",
"DefaultHeader": "هدر پیش‌فرض",
"Descending": "نزولی",
"Description": "توضیحات",
"Description Table": "جدول توضیحات",
"Description Text": "نوشته توضیحات",
@ -369,6 +371,7 @@
"Please, Login or complete information to pay": "لطفا وارد شوید یا اطلاعات خود را تکمیل کنید تا اجازه پرداخت داشته باشید",
"Poor": "ضعیف",
"Post": "نوشته",
"Post RSS Feed": " RSS Feed نوشته",
"Post Text": "متن نوشته",
"Post code": "کد پستی",
"Post reply": "پاسخ نوشته",
@ -381,6 +384,7 @@
"Price": "مبلغ",
"Print": "چاپ",
"Product": "محصول",
"Product RSS Feed": " RSS Feed محصولات",
"Product added to compare": "محصول به فهرست مقایسه افزوده شد",
"Product added to favorites": "محصول به علاقه‌مندی شما افزوده شد",
"Product grid": "کاشی محصول",
@ -443,6 +447,7 @@
"Searchable": "قابل جستجو",
"Section": "بخش",
"Sections": "بخش‌ها",
"Sell": "فروش",
"Send": "ارسال",
"Send Answer": "ارسال پاسخ",
"Send Answer and close": "ارسال پاسخ و بستن",
@ -481,7 +486,7 @@
"States": "استان‌ها",
"States list": "فهرست استان‌ها",
"Status": "وضعیت",
"Stock quantity": "موجود انبار",
"Stock quantity": "موجودی انبار",
"Sub categories": "زیر دسته",
"Sub groups": "زیر سرفصل",
"Subject": "عنوان",
@ -534,6 +539,7 @@
"Unavailable": "ناموجود",
"Unit": "واحد",
"Unknown bulk action : :ACTION": "کار دسته جمعی تعریف نشده :ACTION",
"Update": "به روز شدن",
"Upload file": "به روز کردن پرونده",
"Upload images": "بارگزاری تصاویر",
"Upload new images": "بارگزاری تصاویر جدید",

@ -31,23 +31,29 @@
@break
@case('DATE')
<vue-datetime-picker-input
xid="{{$setting->key}}" xname="{{$setting->key}}" @if(app()->getLocale() == 'fa') xshow="pdate" @else xshow="date" @endif xtitle="{{$setting->title}}" @if(app()->getLocale() != 'fa') def-tab="1" @endif
xid="{{$setting->key}}" xname="{{$setting->key}}" @if(app()->getLocale() == 'fa') xshow="pdate"
@else xshow="date" @endif xtitle="{{$setting->title}}" @if(app()->getLocale() != 'fa') def-tab="1"
@endif
:xvalue="{{$setting->value}}"
></vue-datetime-picker-input>
@break
@case('DATETIME')
<vue-datetime-picker-input
xid="{{$setting->key}}" xname="{{$setting->key}}" @if(app()->getLocale() == 'fa') xshow="pdatetime" @else xshow="datetime" @endif xtitle="{{$setting->title}}" @if(app()->getLocale() != 'fa') def-tab="1" @endif
xid="{{$setting->key}}" xname="{{$setting->key}}" @if(app()->getLocale() == 'fa') xshow="pdatetime"
@else xshow="datetime" @endif xtitle="{{$setting->title}}" @if(app()->getLocale() != 'fa') def-tab="1"
@endif
:xvalue="{{$setting->value}}"
:timepicker="true"
></vue-datetime-picker-input>
@break
@case('ICON')
<remix-icon-picker xname="{{$setting->key}}" xvalue="{{old($setting->key, $setting->value)}}"></remix-icon-picker>
<remix-icon-picker xname="{{$setting->key}}"
xvalue="{{old($setting->key, $setting->value)}}"></remix-icon-picker>
@break
@case('LOCATION')
@php($latlng = explode(',',old($setting->key, $setting->value)))
<lat-lng xname="{{$setting->key}}" :ilat="{{$latlng[0]}}" :ilng="{{$latlng[1]}}" :izoom="{{$latlng[2]}}" :dark-mode="true"></lat-lng>
<lat-lng xname="{{$setting->key}}" :ilat="{{$latlng[0]}}" :ilng="{{$latlng[1]}}" :izoom="{{$latlng[2]}}"
:dark-mode="true"></lat-lng>
@break
@case('EDITOR')
<textarea name="{{$setting->key}}" id="{{$setting->key}}"
@ -65,7 +71,7 @@
@break
@case('CATEGORY')
<searchable-select
@error('category_id') :err="true" @enderror
@error($setting->key) :err="true" @enderror
:items='@json($cats)'
title-field="name"
value-field="id"
@ -78,7 +84,7 @@
@break
@case('GROUP')
<searchable-select
@error('category_id') :err="true" @enderror
@error($setting->key) :err="true" @enderror
:items='@json($groups)'
title-field="name"
value-field="id"
@ -89,9 +95,101 @@
xvalue='{{old($setting->key,$setting->value??null)}}'
:close-on-Select="true"></searchable-select>
@break
@case('MENU')
@case('PRODUCT_QUERY')
<div class="row">
@php($vals = explode(',',old($setting->key,$setting->value??null)))
<div class="col-md">
<span>
{{__("Category")}}
</span>
<searchable-select
@error($setting->key) :err="true" @enderror
:items='@json($catz)'
title-field="name"
value-field="id"
xlang="{{config('app.locale')}}"
xid="{{$setting->key}}"
xname="{{$setting->key}}[category]"
@error('category_id') :err="true" @enderror
xvalue='{{$vals[0]}}'
:close-on-Select="true"></searchable-select>
</div>
<div class="col-md">
<label id="{{$setting->key}}i">
{{__("Item")}}
</label>
<select name="{{$setting->key}}[item]" id="{{$setting->key}}i" class="form-control">
<option value="id"> {{__("ID")}} </option>
<option value="view" @if($vals[1] == 'view') selected @endif> {{__("View")}} </option>
<option value="sell" @if($vals[1] == 'sell') selected @endif> {{__("Sell")}} </option>
<option value="average_rating" @if($vals[1] == 'average_rating') selected @endif> {{__("Rate")}} </option>
<option value="price" @if($vals[1] == 'price') selected @endif> {{__("Price")}} </option>
<option value="stock_quantity" @if($vals[1] == 'stock_quantity') selected @endif> {{__("Stock quantity")}} </option>
<option value="updated_at" @if($vals[1] == 'updated_at') selected @endif> {{__("Update")}} </option>
</select>
</div>
<div class="col-md">
<label id="{{$setting->key}}s">
{{__("Sort")}}
</label>
<select name="{{$setting->key}}[sort]" id="{{$setting->key}}s" class="form-control">
<option value="DESC"> {{__("Descending")}} </option>
<option value="ASC" @if($vals[2] == 'ASC') selected @endif> {{__("Ascending")}} </option>
</select>
</div>
</div>
@break
@case('POST_QUERY')
<div class="row">
@php($vals = explode(',',old($setting->key,$setting->value??null)))
<div class="col-md">
<span>
{{__("Group")}}
</span>
<searchable-select
@error($setting->key) :err="true" @enderror
:items='@json($groups)'
title-field="name"
value-field="id"
xlang="{{config('app.locale')}}"
xid="{{$setting->key}}"
xname="{{$setting->key}}[group]"
@error('category_id') :err="true" @enderror
xvalue='{{$vals[0]}}'
:close-on-Select="true"></searchable-select>
</div>
<div class="col-md">
<label id="{{$setting->key}}i">
{{__("Item")}}
</label>
<select name="{{$setting->key}}[item]" id="{{$setting->key}}i" class="form-control">
<option value="id"> {{__("ID")}} </option>
<option value="view" @if($vals[1] == 'view') selected @endif> {{__("View")}} </option>
<option value="sell" @if($vals[1] == 'sell') selected @endif> {{__("Sell")}} </option>
<option value="average_rating" @if($vals[1] == 'average_rating') selected @endif> {{__("Rate")}} </option>
<option value="price" @if($vals[1] == 'price') selected @endif> {{__("Price")}} </option>
<option value="stock_quantity" @if($vals[1] == 'stock_quantity') selected @endif> {{__("Stock quantity")}} </option>
<option value="updated_at" @if($vals[1] == 'updated_at') selected @endif> {{__("Update")}} </option>
</select>
</div>
<div class="col-md">
<label id="{{$setting->key}}s">
{{__("Sort")}}
</label>
<select name="{{$setting->key}}[sort]" id="{{$setting->key}}s" class="form-control">
<option value="DESC"> {{__("Descending")}} </option>
<option value="ASC" @if($vals[2] == 'ASC') selected @endif> {{__("Ascending")}} </option>
</select>
</div>
</div>
@break
@case('MENU')
<searchable-select
@error($setting->key) :err="true" @enderror
:items='@json($menus)'
title-field="name"
value-field="id"
@ -105,34 +203,41 @@
<br>
<input type="color" id="{{$setting->key}}"
name="{{$setting->key}}" class="form-control-color w-100"
value="{{old($setting->key, $setting->value)}}" >
value="{{old($setting->key, $setting->value)}}">
@break
@case('NUMBER')
<br>
{{-- <input type="number" id="{{$setting->key}}"--}}
{{-- name="" class="form-control"--}}
{{-- value="" @if($setting->ltr) dir="ltr" @endif>--}}
<increment xname="{{$setting->key}}" xvalue="{{old($setting->key, $setting->value)}}" @foreach($setting->getData() as $k => $v) {{$k}}="{{$v}}" @endforeach ></increment>
{{-- <input type="number" id="{{$setting->key}}"--}}
{{-- name="" class="form-control"--}}
{{-- value="" @if($setting->ltr) dir="ltr" @endif>--}}
<increment xname="{{$setting->key}}"
xvalue="{{old($setting->key, $setting->value)}}" @foreach($setting->getData() as $k => $v)
{{$k}}="{{$v}}"
@endforeach ></increment>
@break
@case('FILE')
<div class="row">
@php($ext = strtolower(pathinfo(str_replace('_','.',$setting->key), PATHINFO_EXTENSION)))
<div class="col-md-5 ">
<input type="file" accept=".{{pathinfo(str_replace('_','.',$setting->key), PATHINFO_EXTENSION)}}" class="form-control" name="file[{{$setting->key}}]" id="{{$setting->key}}">
<input type="file" accept=".{{pathinfo(str_replace('_','.',$setting->key), PATHINFO_EXTENSION)}}"
class="form-control" name="file[{{$setting->key}}]" id="{{$setting->key}}">
</div>
@if(!in_array($ext, ['svg','jpg','png','gif','webp'] ) )
<div class="col-md-2">
<a class="btn btn-primary w-100" href="{{asset('upload/file/'.str_replace('_','.',$setting->key))}}?{{time()}}">
<a class="btn btn-primary w-100"
href="{{asset('upload/file/'.str_replace('_','.',$setting->key))}}?{{time()}}">
<i class="ri-download-2-line"></i>
</a>
</div>
@endif
<div class="col-md-5 text-center">
@if($ext == 'mp4')
<video controls src="{{asset('upload/media/'.str_replace('_','.',$setting->key))}}?{{time()}}" style="max-height: 150px;max-width: 45%" ></video>
<video controls src="{{asset('upload/media/'.str_replace('_','.',$setting->key))}}?{{time()}}"
style="max-height: 150px;max-width: 45%"></video>
<br>
@elseif($ext == 'mp3')
<audio controls src="{{asset('upload/media/'.str_replace('_','.',$setting->key))}}?{{time()}}" class="img-fluid" style="max-height: 150px;max-width: 45%" ></audio>
<audio controls src="{{asset('upload/media/'.str_replace('_','.',$setting->key))}}?{{time()}}"
class="img-fluid" style="max-height: 150px;max-width: 45%"></audio>
<br>
@elseif(in_array($ext, ['svg','jpg','png','gif','webp'] ) )
<img src="{{asset('upload/images/'.str_replace('_','.',$setting->key))}}?{{time()}}"

Loading…
Cancel
Save