Compare commits

...

10 Commits

@ -33,6 +33,14 @@ class UserController extends XController
public function save($user, $request) public function save($user, $request)
{ {
if ($user->role == 'DEVELOPER' && !auth()->user()->hasRole('developer')) {
abort(403);
}
if (!auth()->user()->hasRole('developer') && $request->role == 'DEVELOPER') {
abort(403);
}
$user->name = $request->input('name'); $user->name = $request->input('name');
$user->email = $request->input('email'); $user->email = $request->input('email');
if (trim($request->input('password')) != '') { if (trim($request->input('password')) != '') {

@ -234,22 +234,22 @@ class ClientController extends Controller
if (mb_strlen($q) < 3) { if (mb_strlen($q) < 3) {
return abort(403, __('Search word is too short')); return abort(403, __('Search word is too short'));
} }
$q = '%'.$q.'%'; $q = '%' . $q . '%';
$posts = Post::where('status', 1)->where(function($query) use ($q) { $posts = Post::where('status', 1)->where(function ($query) use ($q) {
$query->where('title', 'LIKE', $q) $query->where('title', 'LIKE', $q)
->orWhere('subtitle', 'LIKE', $q) ->orWhere('subtitle', 'LIKE', $q)
->orWhere('body', 'LIKE', $q); ->orWhere('body', 'LIKE', $q);
})->paginate(100); })->paginate(100);
$products = Product::where('status', 1)->where(function($query) use ($q) { $products = Product::where('status', 1)->where(function ($query) use ($q) {
$query->where('name', 'LIKE', $q) $query->where('name', 'LIKE', $q)
->orWhere('excerpt', 'LIKE', $q) ->orWhere('excerpt', 'LIKE', $q)
->orWhere('description', 'LIKE', $q); ->orWhere('description', 'LIKE', $q);
})->paginate(100); })->paginate(100);
$clips = Clip::where('status', 1)->where(function($query) use ($q) { $clips = Clip::where('status', 1)->where(function ($query) use ($q) {
$query->where('title', 'LIKE', $q) $query->where('title', 'LIKE', $q)
->orWhere('body', 'LIKE', $q); ->orWhere('body', 'LIKE', $q);
})->paginate(100); })->paginate(100);
$title = __('Search for') . ': ' . $request->input('q'); $title = __('Search for') . ': ' . $request->input('q');
$subtitle = ''; $subtitle = '';
return view('client.tag', compact('posts', 'products', 'clips', 'title', 'subtitle')); return view('client.tag', compact('posts', 'products', 'clips', 'title', 'subtitle'));
} }
@ -469,7 +469,7 @@ class ClientController extends Controller
{ {
$area = 'login'; $area = 'login';
$title = __("sign in"); $title = __("sign in");
$subtitle = 'Sign in as customer'; $subtitle = __('Sign in as customer');
return view('client.default-list', compact('area', 'title', 'subtitle')); return view('client.default-list', compact('area', 'title', 'subtitle'));
} }
@ -624,13 +624,14 @@ class ClientController extends Controller
} }
public function pay($hash){ public function pay($hash)
{
$invoice = Invoice::where('hash', $hash)->first(); $invoice = Invoice::where('hash', $hash)->first();
// dd($invoice->created_at->timestamp , (time() - 3600)); // dd($invoice->created_at->timestamp , (time() - 3600));
if (!in_array($invoice->status, ['PENDING', 'CANCELED', 'FAILED'] ) || $invoice->created_at->timestamp < (time() - 3600) ){ if (!in_array($invoice->status, ['PENDING', 'CANCELED', 'FAILED']) || $invoice->created_at->timestamp < (time() - 3600)) {
return redirect()->back()->withErrors(__('This payment method is not available.')); return redirect()->back()->withErrors(__('This payment method is not available.'));
} }
$activeGateway = config('xshop.payment.active_gateway'); $activeGateway = config('xshop.payment.active_gateway');
/** @var Payment $gateway */ /** @var Payment $gateway */

@ -7,6 +7,8 @@ use App\Models\Customer;
use App\Models\Invoice; use App\Models\Invoice;
use App\Models\Product; use App\Models\Product;
use App\Models\Ticket; use App\Models\Ticket;
use chillerlan\QRCode\QRCode;
use chillerlan\QRCode\QROptions;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Validation\Rules\In; use Illuminate\Validation\Rules\In;
@ -18,18 +20,18 @@ class CustomerController extends Controller
$address->address = $request->input('address'); $address->address = $request->input('address');
$address->lat = $request->input('lat'); $address->lat = $request->input('lat');
$address->lng = $request->input('lng'); $address->lng = $request->input('lng');
$address->state_id = $request->input('state_id')??null; $address->state_id = $request->input('state_id') ?? null;
$address->city_id = $request->input('city_id')??null; $address->city_id = $request->input('city_id') ?? null;
$address->zip = $request->input('zip'); $address->zip = $request->input('zip');
$address->save(); $address->save();
return $address; return $address;
} }
// //
public function __construct() public function __construct()
{ {
$this->middleware(function ($request, $next) { $this->middleware(function ($request, $next) {
if (!auth('customer')->check()) { if (!auth('customer')->check()) {
@ -76,7 +78,22 @@ class CustomerController extends Controller
public function invoice(Invoice $invoice) public function invoice(Invoice $invoice)
{ {
return $invoice; if (!auth('customer')->check() || $invoice->customer_id != auth('customer')->id()) {
return redirect()->route('client.sign-in')->withErrors([__('You need to login to access this page')]);
}
$area = 'invoice';
$title = __("Invoice");
$subtitle = __("Invoice ID:") . ' ' . $invoice->hash;
$options = new QROptions([
'version' => 5,
'outputType' => QRCode::OUTPUT_MARKUP_SVG,
'eccLevel' => QRCode::ECC_L,
// 'imageTransparent' => true,
]);
$qr = new QRCode($options);
return view('client.invoice', compact('area', 'title', 'subtitle','invoice','qr'));
} }
@ -108,12 +125,13 @@ class CustomerController extends Controller
} }
public function addresses(){ public function addresses()
{
return auth('customer')->user()->addresses; return auth('customer')->user()->addresses;
} }
public function addressUpdate(Request $request, $item) public function addressUpdate(Request $request, $item)
{ {
$item = Address::where('id', $item)->firstOrFail(); $item = Address::where('id', $item)->firstOrFail();
@ -142,10 +160,10 @@ class CustomerController extends Controller
if ($item->customer_id != auth('customer')->id()) { if ($item->customer_id != auth('customer')->id()) {
return abort(403); return abort(403);
} }
$add = $item->address ; $add = $item->address;
$item->delete(); $item->delete();
return ['OK' => true, "message" => __(":ADDRESS removed",['ADDRESS' => $add])]; return ['OK' => true, "message" => __(":ADDRESS removed", ['ADDRESS' => $add])];
} }
public function addressStore(Request $request) public function addressStore(Request $request)
@ -164,14 +182,15 @@ class CustomerController extends Controller
$address = new Address(); $address = new Address();
$address->customer_id = auth('customer')->user()->id; $address->customer_id = auth('customer')->user()->id;
$address = $this->addressSave($address, $request); $address = $this->addressSave($address, $request);
return ['OK' => true,'message' => __("Address added successfully"), 'list'=> auth('customer')->user()->addresses]; return ['OK' => true, 'message' => __("Address added successfully"), 'list' => auth('customer')->user()->addresses];
} }
public function submitTicket(Request $request){ public function submitTicket(Request $request)
{
$request->validate([ $request->validate([
'title' => ['required', 'string', 'max:255'], 'title' => ['required', 'string', 'max:255'],
'body' => ['required', 'string'], 'body' => ['required', 'string'],
]); ]);
$ticket = new Ticket(); $ticket = new Ticket();
@ -182,12 +201,14 @@ class CustomerController extends Controller
return redirect()->route('client.profile')->with('message', __('Ticket added successfully')); return redirect()->route('client.profile')->with('message', __('Ticket added successfully'));
} }
public function showTicket(Ticket $ticket){ public function showTicket(Ticket $ticket)
return view('client.ticket',compact('ticket')); {
return view('client.ticket', compact('ticket'));
} }
public function ticketAnswer(Ticket $ticket, Request $request){ public function ticketAnswer(Ticket $ticket, Request $request)
{
$request->validate([ $request->validate([
'body' => ['required', 'string'], 'body' => ['required', 'string'],
@ -201,7 +222,7 @@ class CustomerController extends Controller
$nticket->body = trim($request->body); $nticket->body = trim($request->body);
$nticket->customer_id = auth('customer')->user()->id; $nticket->customer_id = auth('customer')->user()->id;
$nticket->save(); $nticket->save();
return redirect(route('client.profile').'#tickets')->with('message', __('Ticket answered successfully')); return redirect(route('client.profile') . '#tickets')->with('message', __('Ticket answered successfully'));
} }

@ -8,4 +8,12 @@ use Illuminate\Database\Eloquent\Model;
class Address extends Model class Address extends Model
{ {
use HasFactory; use HasFactory;
public function state(){
return $this->belongsTo(State::class);
}
public function city(){
return $this->belongsTo(City::class);
}
} }

@ -24,7 +24,7 @@ class Invoice extends Model
public static $invoiceStatus = ['PENDING', 'CANCELED', 'FAILED', 'PAID', 'PROCESSING', 'COMPLETED']; public static $invoiceStatus = ['PENDING', 'CANCELED', 'FAILED', 'PAID', 'PROCESSING', 'COMPLETED'];
public function getRouteKey() public function getRouteKeyName()
{ {
return 'hash'; return 'hash';
} }
@ -147,4 +147,9 @@ class Invoice extends Model
return $payment; return $payment;
} }
public function address()
{
return $this->belongsTo(Address::class);
}
} }

2
composer.lock generated

@ -10516,5 +10516,5 @@
"php": "^8.2" "php": "^8.2"
}, },
"platform-dev": [], "platform-dev": [],
"plugin-api-version": "2.3.0" "plugin-api-version": "2.6.0"
} }

@ -16,7 +16,7 @@ return [
*/ */
'name' => env('APP_NAME', 'Laravel'), 'name' => env('APP_NAME', 'Laravel'),
'version' => env('APP_VERSION', '2.0.0-beta'), 'version' => env('APP_VERSION', '2.0.0-beta-2'),
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------

@ -34,7 +34,7 @@ class AreaSeeder extends Seeder
'icon' => 'ri-ai-generate', 'icon' => 'ri-ai-generate',
], ],
[ [
'name' => 'default_header', 'name' => 'defaultHeader',
'valid_segments' => json_encode( 'valid_segments' => json_encode(
["top", "header", "other", "ads", "menu"] ["top", "header", "other", "ads", "menu"]
), ),
@ -43,7 +43,7 @@ class AreaSeeder extends Seeder
'icon' => 'ri-window-line', 'icon' => 'ri-window-line',
], ],
[ [
'name' => 'default_footer', 'name' => 'defaultFooter',
'valid_segments' => json_encode( 'valid_segments' => json_encode(
["footer", "other", "ads", "groups"] ["footer", "other", "ads", "groups"]
), ),

@ -6,6 +6,7 @@ use App\Models\Customer;
use App\Models\State; use App\Models\State;
use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;
use Faker\Factory as Faker;
class CustomerSeeder extends Seeder class CustomerSeeder extends Seeder
{ {
@ -15,6 +16,8 @@ class CustomerSeeder extends Seeder
public function run(): void public function run(): void
{ {
// //
$faker = Faker::create(config('app.faker_locale'));
Customer::factory(35)->create(); Customer::factory(35)->create();
foreach (Customer::all() as $customer) { foreach (Customer::all() as $customer) {
$s = State::inRandomOrder()->first(); $s = State::inRandomOrder()->first();
@ -25,7 +28,7 @@ class CustomerSeeder extends Seeder
'zip' => rand(12345, 54321), 'zip' => rand(12345, 54321),
'lat' => $c->lat, 'lat' => $c->lat,
'lng' => $c->lng, 'lng' => $c->lng,
'address' => 'some address', 'address' =>$faker->address,
]); ]);
} }
} }

@ -87,7 +87,7 @@ class PartSeeder extends Seeder
$part = new Part(); $part = new Part();
$part->segment = 'menu'; $part->segment = 'menu';
$part->part = 'AplMenu'; $part->part = 'AplMenu';
$part->area_id = Area::where('name', 'default_header')->first()->id; $part->area_id = Area::where('name', 'defaultHeader')->first()->id;
$part->sort = 0; $part->sort = 0;
$part->save(); $part->save();
@ -95,14 +95,14 @@ class PartSeeder extends Seeder
$part = new Part(); $part = new Part();
$part->segment = 'header'; $part->segment = 'header';
$part->part = 'SimpleHeader'; $part->part = 'SimpleHeader';
$part->area_id = Area::where('name', 'default_header')->first()->id; $part->area_id = Area::where('name', 'defaultHeader')->first()->id;
$part->sort = 0; $part->sort = 0;
$part->save(); $part->save();
$part = new Part(); $part = new Part();
$part->segment = 'footer'; $part->segment = 'footer';
$part->part = 'WaveFooter'; $part->part = 'WaveFooter';
$part->area_id = Area::where('name', 'default_footer')->first()->id; $part->area_id = Area::where('name', 'defaultFooter')->first()->id;
$part->sort = 2; $part->sort = 2;
$part->save(); $part->save();
@ -179,6 +179,26 @@ class PartSeeder extends Seeder
$part->area_id = Area::where('name', 'clips-list')->first()->id; $part->area_id = Area::where('name', 'clips-list')->first()->id;
$part->sort = 1; $part->sort = 1;
$part->save(); $part->save();
// -------------------------------------------------------------
$part = new Part();
$part->segment = 'posts_page';
$part->part = 'GridPostListSidebar';
$part->area_id = Area::where('name', 'group')->first()->id;
$part->sort = 1;
$part->save();
// -------------------------------------------------------------
$part = new Part();
$part->segment = 'invoice';
$part->part = 'LianaInvoice';
$part->area_id = Area::where('name', 'invoice')->first()->id;
$part->sort = 1;
$part->save();
// ------------------------------------------------------------- // -------------------------------------------------------------

Binary file not shown.

Before

Width:  |  Height:  |  Size: 0 B

After

Width:  |  Height:  |  Size: 15 KiB

@ -29,6 +29,8 @@ import "../views/segments/product/ProductKaren/ProductKaren.js";
import "../views/segments/posts_page/GridPostListSidebar/GridPostListSidebar.js"; import "../views/segments/posts_page/GridPostListSidebar/GridPostListSidebar.js";
import "../views/segments/post/PostSidebar/PostSidebar.js"; import "../views/segments/post/PostSidebar/PostSidebar.js";
import "../views/segments/clips_page/ClipListGrid/ClipListGrid.js"; import "../views/segments/clips_page/ClipListGrid/ClipListGrid.js";
import "../views/segments/posts_page/GridPostListSidebar/GridPostListSidebar.js";
import "../views/segments/invoice/LianaInvoice/LianaInvoice.js";
import "../views/segments/clip/DorClip/DorClip.js"; import "../views/segments/clip/DorClip/DorClip.js";
import "../views/segments/galleries_page/GalleriesList/GalleriesList.js"; import "../views/segments/galleries_page/GalleriesList/GalleriesList.js";
import "../views/segments/gallery/GallaryGrid/GallaryGrid.js"; import "../views/segments/gallery/GallaryGrid/GallaryGrid.js";
@ -38,4 +40,3 @@ import "../views/segments/customer/AvisaCustomer/AvisaCustomer.js";
import "../views/segments/attachments_page/DenaAttachList/DenaAttachList.js"; import "../views/segments/attachments_page/DenaAttachList/DenaAttachList.js";
import "../views/segments/attachment/AttachmentWithPreview/AttachmentWithPreview.js"; import "../views/segments/attachment/AttachmentWithPreview/AttachmentWithPreview.js";
import "../views/segments/contact/MeloContact/MeloContact.js"; import "../views/segments/contact/MeloContact/MeloContact.js";
import "../views/segments/index/InlineMap/InlineMap.js";

@ -36,6 +36,7 @@
"Add new discount": "افزودن یک تخفیف", "Add new discount": "افزودن یک تخفیف",
"Add new gallery": "افزودن یک گالری", "Add new gallery": "افزودن یک گالری",
"Add new group": "افزودن یک سرفصل", "Add new group": "افزودن یک سرفصل",
"Add new invoice": "",
"Add new language": "افزودن یک زبان جدید", "Add new language": "افزودن یک زبان جدید",
"Add new menu": "افزودن فهرست جدید", "Add new menu": "افزودن فهرست جدید",
"Add new post": "افزودن یک نوشته", "Add new post": "افزودن یک نوشته",
@ -57,7 +58,7 @@
"Added items view depends on theme part": "موارد اضافه شده بسته به نوع نمای انتخاب شده متفاوت خواهد بود", "Added items view depends on theme part": "موارد اضافه شده بسته به نوع نمای انتخاب شده متفاوت خواهد بود",
"Additional data": "اطلاعات تکمیلی", "Additional data": "اطلاعات تکمیلی",
"Address": "نشانی", "Address": "نشانی",
"Address added successfully": "", "Address added successfully": "نشانی اضافه شد",
"Address added to :CUSTOMER": "نشانی به :CUSTOMER اضافه شد", "Address added to :CUSTOMER": "نشانی به :CUSTOMER اضافه شد",
"Address editor": "ویرایشگر نشانی", "Address editor": "ویرایشگر نشانی",
"Addresses": "نشانی‌ها", "Addresses": "نشانی‌ها",
@ -81,12 +82,13 @@
"As you wished sort saved": "همانطور که شما مایل بودید مرتب شدند", "As you wished sort saved": "همانطور که شما مایل بودید مرتب شدند",
"As you wished updated successfully": "همانطور که شما مایل بودید به روز شد", "As you wished updated successfully": "همانطور که شما مایل بودید به روز شد",
"Attaching": "پیوست کردن", "Attaching": "پیوست کردن",
"Attachment": "پیوست",
"Attachments": "پیوست‌ها", "Attachments": "پیوست‌ها",
"Attachments list": "فهرست پیوست ها", "Attachments list": "فهرست پیوست ها",
"Auth code": "کد احراز هویت", "Auth code": "کد احراز هویت",
"Auth code is invalid": "کد احراز هویت اشتباه اسات", "Auth code is invalid": "کد احراز هویت اشتباه اسات",
"Auth code send successfully": "کد احراز هویت ارسال شد", "Auth code send successfully": "کد احراز هویت ارسال شد",
"Back to profile": "", "Back to profile": "بازگشت به نمایه",
"Background image": "تصویر زمینه", "Background image": "تصویر زمینه",
"Base price": "مبلغ پایه", "Base price": "مبلغ پایه",
"Basic data": "اطلاعات پایه", "Basic data": "اطلاعات پایه",
@ -95,6 +97,7 @@
"Before proceeding, please check your email for a verification link.": "قبل از ادامه فرآیند لطفا رایانه خودتون رو بررسی کنید که لینک ارسال شده باشد", "Before proceeding, please check your email for a verification link.": "قبل از ادامه فرآیند لطفا رایانه خودتون رو بررسی کنید که لینک ارسال شده باشد",
"Bulk actions:": "کار دسته‌جمعی", "Bulk actions:": "کار دسته‌جمعی",
"Call us!": "با ما تماس بگیرید!", "Call us!": "با ما تماس بگیرید!",
"Card": "سبدخرید",
"Card cleared": "سبدخرید خالی شد", "Card cleared": "سبدخرید خالی شد",
"Catalog": "کاتالوگ", "Catalog": "کاتالوگ",
"Categories": "دسته‌ها", "Categories": "دسته‌ها",
@ -111,6 +114,7 @@
"Cities list": "فهرست شهرها", "Cities list": "فهرست شهرها",
"City": "شهر", "City": "شهر",
"Click here to upload or drag and drop here": "برای بارگزاری اینجا کلیک کنید یا موارد را کشیده و اینجا رها کنید", "Click here to upload or drag and drop here": "برای بارگزاری اینجا کلیک کنید یا موارد را کشیده و اینجا رها کنید",
"Clip": "کلیپ‌ها",
"Clips list": "فهرست کلیپ‌ها", "Clips list": "فهرست کلیپ‌ها",
"Close": "بستن", "Close": "بستن",
"Code": "کد", "Code": "کد",
@ -121,6 +125,7 @@
"Comment replay": "پاسخ دیدگاه", "Comment replay": "پاسخ دیدگاه",
"Commentator": "ارسال کننده دیدگاه", "Commentator": "ارسال کننده دیدگاه",
"Comments": "دیدگاه‌ها", "Comments": "دیدگاه‌ها",
"Compare": "مقایسه",
"Compare products": "مقایسه محصولات", "Compare products": "مقایسه محصولات",
"Confirm Password": "تایید گذرواژه", "Confirm Password": "تایید گذرواژه",
"Contact us": "تماس با ما", "Contact us": "تماس با ما",
@ -134,6 +139,7 @@
"Credit history": "تاریخچه اعتبار", "Credit history": "تاریخچه اعتبار",
"Credits": "اعتبارات", "Credits": "اعتبارات",
"Customer": "مشتری", "Customer": "مشتری",
"Customer mobile": "",
"Customers": "مشتری‌ها", "Customers": "مشتری‌ها",
"Customers list": "فهرست مشتری‌ها", "Customers list": "فهرست مشتری‌ها",
"Dashboard": "پیشخوان", "Dashboard": "پیشخوان",
@ -141,6 +147,8 @@
"Datetime": "تاریخ و زمان", "Datetime": "تاریخ و زمان",
"Deattach": "عدم پیوست", "Deattach": "عدم پیوست",
"Default": "پیش‌فرض", "Default": "پیش‌فرض",
"DefaultFooter": "فوتر پیش‌فرض",
"DefaultHeader": "هدر پیش‌فرض",
"Description": "توضیحات", "Description": "توضیحات",
"Description Table": "جدول توضیحات", "Description Table": "جدول توضیحات",
"Description Text": "نوشته توضیحات", "Description Text": "نوشته توضیحات",
@ -171,6 +179,7 @@
"Edit discount": "ویرایش تخفیف", "Edit discount": "ویرایش تخفیف",
"Edit gallery": "ویرایش گالری", "Edit gallery": "ویرایش گالری",
"Edit group": "ویرایش سرفصل", "Edit group": "ویرایش سرفصل",
"Edit invoice": "",
"Edit language": "ویرایش زبان", "Edit language": "ویرایش زبان",
"Edit menu": "ویرایش فهرست", "Edit menu": "ویرایش فهرست",
"Edit post": "ویرایش نوشته", "Edit post": "ویرایش نوشته",
@ -191,6 +200,7 @@
"Expire date": "تاریخ انقضا", "Expire date": "تاریخ انقضا",
"Expire date": "تاریخ انقضا", "Expire date": "تاریخ انقضا",
"Extra description": "توضیحات اضافه", "Extra description": "توضیحات اضافه",
"Failed Invoices": "",
"False": "خیر", "False": "خیر",
"Favorites": "علاقه‌مندی‌ها", "Favorites": "علاقه‌مندی‌ها",
"Feature image": "تصویر شاخص", "Feature image": "تصویر شاخص",
@ -201,14 +211,18 @@
"Filter": "صافی", "Filter": "صافی",
"Find more": "موارد بیشتر", "Find more": "موارد بیشتر",
"Flag": "پرچم", "Flag": "پرچم",
"Floats": "شناورها",
"Follow us": "",
"Forgot Your Password?": "آیا گذرواژه خود را فراموش کردید", "Forgot Your Password?": "آیا گذرواژه خود را فراموش کردید",
"From - To": "از - تا", "From - To": "از - تا",
"GFX": "طراحی", "GFX": "طراحی",
"GFX of website updated": "گرافیک سایت به روز شد", "GFX of website updated": "گرافیک سایت به روز شد",
"Gfxes": "طراحی‌ها",
"Galleries": "گالری‌ها", "Galleries": "گالری‌ها",
"Galleries list": "فهرست گالری‌ها", "Galleries list": "فهرست گالری‌ها",
"Gallery": "گالری",
"Gfxes": "طراحی‌ها",
"Graphic": "گرافیک", "Graphic": "گرافیک",
"Group": "سرفصل",
"Group Parent": "والد سرفصل", "Group Parent": "والد سرفصل",
"Group name": "نام سرفصل", "Group name": "نام سرفصل",
"Group slug": "نامک سرفصل", "Group slug": "نامک سرفصل",
@ -216,10 +230,14 @@
"Groups list": "فهرست سرفصل‌ها", "Groups list": "فهرست سرفصل‌ها",
"Guest": "میهمان", "Guest": "میهمان",
"Home": "خانه", "Home": "خانه",
"ID": "",
"Icon": "نماد", "Icon": "نماد",
"If not choose expire expire time will be unlimited": "اگر زمان انقصا را انتخاب نکنید، هرگز منقضی نخواهد شد", "If not choose expire expire time will be unlimited": "اگر زمان انقصا را انتخاب نکنید، هرگز منقضی نخواهد شد",
"If you cancel this, You must increase credit yourself.": "",
"If you change transport method you must think about think about the price diffrance": "",
"If you did not receive the email": "اگر ایمیلی دریافت نکردید", "If you did not receive the email": "اگر ایمیلی دریافت نکردید",
"If you forget your password call us": "اگر گذرواژه خود را فراموش کردید با ما تماس بگیرید", "If you forget your password call us": "اگر گذرواژه خود را فراموش کردید با ما تماس بگیرید",
"If you removed order from invoice, system adding amount to customer's credit automatically": "",
"If you want to change the password, choose both the same. Otherwise, leave the password field blank.": "اگر می‌خواهید گذرواژه را عوض کنید هر دو را یکسان پر کنید، در غیر این صورت آن را خالی رها کنید", "If you want to change the password, choose both the same. Otherwise, leave the password field blank.": "اگر می‌خواهید گذرواژه را عوض کنید هر دو را یکسان پر کنید، در غیر این صورت آن را خالی رها کنید",
"If you want to only attach to other staff members and do not want to appear in the website attachment list, uncheck `fillable`": "اگر می‌خواهید این پوست در فهرست پیوست‌های وبسایت نمایش داده نشود مورد مورد `قابل نمایش` را غیرفعال کنید", "If you want to only attach to other staff members and do not want to appear in the website attachment list, uncheck `fillable`": "اگر می‌خواهید این پوست در فهرست پیوست‌های وبسایت نمایش داده نشود مورد مورد `قابل نمایش` را غیرفعال کنید",
"Image": "تصویر", "Image": "تصویر",
@ -227,14 +245,19 @@
"Image uploaded successfully": "تصویر افزوده شد", "Image uploaded successfully": "تصویر افزوده شد",
"Images": "تصاویر", "Images": "تصاویر",
"Increase \/ decrease by Admin": "افزودن \/ کاهش توسط مدیر سایت", "Increase \/ decrease by Admin": "افزودن \/ کاهش توسط مدیر سایت",
"Increase by Admin removed:": "",
"Index": "صفحه نخست",
"Index image": "تصویر شاخص", "Index image": "تصویر شاخص",
"Information": "اطلاعات", "Information": "اطلاعات",
"Interaction": "تعامل", "Interaction": "تعامل",
"Invalid area segment": "محیط نامطلوب است", "Invalid area segment": "محیط نامطلوب است",
"Invalid json file!": "فایل جی‌سان معتبر نیست", "Invalid json file!": "فایل جی‌سان معتبر نیست",
"Invalid morph": "چند ریخیتی نا معتبر", "Invalid morph": "چند ریخیتی نا معتبر",
"Invoice": "صورت حساب",
"Invoice ID:": "",
"Invoice payed.": "صورت‌حساب پرداخت شد", "Invoice payed.": "صورت‌حساب پرداخت شد",
"Invoices": "صورت‌حساب‌ها", "Invoices": "صورت‌حساب‌ها",
"Invoices list": "",
"Is default": "آی پیش‌فرض است", "Is default": "آی پیش‌فرض است",
"Is effective price?": "آیا در قیمت تاثیر دارد؟", "Is effective price?": "آیا در قیمت تاثیر دارد؟",
"Is fillable": "قابل نمایش", "Is fillable": "قابل نمایش",
@ -268,7 +291,7 @@
"Message": "پیام", "Message": "پیام",
"Message replay": "پاسخ پیام", "Message replay": "پاسخ پیام",
"Message...": "پیام...", "Message...": "پیام...",
"Mobile": "شماره همراه", "Mobile": "موبایل",
"Model": "ماژول", "Model": "ماژول",
"Name": "نام", "Name": "نام",
"Name and lastname": "نام و نام‌خانوادگی", "Name and lastname": "نام و نام‌خانوادگی",
@ -276,6 +299,7 @@
"Next": "بعدی", "Next": "بعدی",
"No parent": "بدون والد", "No parent": "بدون والد",
"Not required": "غیر ضرروری", "Not required": "غیر ضرروری",
"Order removed successfully": "",
"Orders": "سفارشاات", "Orders": "سفارشاات",
"Orders count": "تعداد سفارش", "Orders count": "تعداد سفارش",
"Password": "گذرواژه", "Password": "گذرواژه",
@ -295,9 +319,11 @@
"Post your comment": "دیدگاه خود را ارسال کنید", "Post your comment": "دیدگاه خود را ارسال کنید",
"Posts": "نوشته‌ها", "Posts": "نوشته‌ها",
"Posts list": "فهرست نوشته‌ها", "Posts list": "فهرست نوشته‌ها",
"Preloader": "نماد انتظار",
"Preview": "پیش‌نمایش", "Preview": "پیش‌نمایش",
"Previous": "قبلی", "Previous": "قبلی",
"Price": "مبلغ", "Price": "مبلغ",
"Print": "",
"Product": "محصول", "Product": "محصول",
"Product added to compare": "محصول به فهرست مقایسه افزوده شد", "Product added to compare": "محصول به فهرست مقایسه افزوده شد",
"Product added to favorites": "محصول به علاقه‌مندی شما افزوده شد", "Product added to favorites": "محصول به علاقه‌مندی شما افزوده شد",
@ -330,6 +356,7 @@
"Related products": "محصولات مشابه", "Related products": "محصولات مشابه",
"Remember Me": "مرا به خاطر بسپار", "Remember Me": "مرا به خاطر بسپار",
"Remove": "حذف", "Remove": "حذف",
"Removed": "مورد حذف شده",
"Reply": "پاسخ", "Reply": "پاسخ",
"Reply comment": "پاسخ دیدگاه", "Reply comment": "پاسخ دیدگاه",
"Reply message...": "پاسخ پیام...", "Reply message...": "پاسخ پیام...",
@ -361,9 +388,11 @@
"Setting": "تنظیمات", "Setting": "تنظیمات",
"Setting added to website": "تنظیم به سایت اضافه شد", "Setting added to website": "تنظیم به سایت اضافه شد",
"Setting of website updated": "تنظیمات به روز شدند", "Setting of website updated": "تنظیمات به روز شدند",
"Settings": "تنظیمات",
"Shopping card": "سبد خرید", "Shopping card": "سبد خرید",
"Show": "نمایش", "Show": "نمایش",
"Show list": "نمایش فهرست", "Show list": "نمایش فهرست",
"Sign in as customer": "",
"Sign-in": "ورود", "Sign-in": "ورود",
"Sign-out": "خروج", "Sign-out": "خروج",
"Signed in successfully": "با موفقیت وارد شدید", "Signed in successfully": "با موفقیت وارد شدید",
@ -384,6 +413,7 @@
"Subject": "عنوان", "Subject": "عنوان",
"Submit new ticket": "ارسال یک تیکت جدید", "Submit new ticket": "ارسال یک تیکت جدید",
"Subtitle": "زیرعنوان", "Subtitle": "زیرعنوان",
"Successfully Invoices": "",
"Summary": "خلاصه", "Summary": "خلاصه",
"System notification": "پیام سیستم", "System notification": "پیام سیستم",
"Tag": "برچسب", "Tag": "برچسب",
@ -396,8 +426,9 @@
"There is nothing added to card!": "چیزی در سبد خرید وجود ندارد", "There is nothing added to card!": "چیزی در سبد خرید وجود ندارد",
"There is nothing to show!": "اینجا چیزی برای نمایش وجود ندارد", "There is nothing to show!": "اینجا چیزی برای نمایش وجود ندارد",
"There is noting file to show!": "هیچ پرونده ای برای نمایش وجود ندارد", "There is noting file to show!": "هیچ پرونده ای برای نمایش وجود ندارد",
"Ticket added successfully": "", "This payment method is not available.": "",
"Ticket answered successfully": "", "Ticket added successfully": "تیکت با موفقیت اضافه شد",
"Ticket answered successfully": "تیکت پاسخ داده شد",
"Tickets": "تیکت‌های پشتیبانی", "Tickets": "تیکت‌های پشتیبانی",
"Tickets list": "فهرست تیکت‌های پشتیبانی", "Tickets list": "فهرست تیکت‌های پشتیبانی",
"Tips": "نکات", "Tips": "نکات",
@ -408,6 +439,7 @@
"Toggle selection": "برعکس کردن انتخاب", "Toggle selection": "برعکس کردن انتخاب",
"Total": "همه", "Total": "همه",
"Total price": "مبلغ کل", "Total price": "مبلغ کل",
"Tracking code": "",
"Translate": "ترجمه", "Translate": "ترجمه",
"Translate model": "ترجمه ماژول", "Translate model": "ترجمه ماژول",
"Translate updated": "ترجمه افزوده شد", "Translate updated": "ترجمه افزوده شد",
@ -451,12 +483,13 @@
"You can create \/ edit clip as draft, publish it when you want": "شما میتوانید کلیپ را ایجاد و ویرایش کنید، هر زمان که خواستید آن را منتشر کنید", "You can create \/ edit clip as draft, publish it when you want": "شما میتوانید کلیپ را ایجاد و ویرایش کنید، هر زمان که خواستید آن را منتشر کنید",
"You can leave the slug empty; it will be generated automatically.": "شما می‌توانید نامک را خالی بگذارید به صورت خودکار ساخته شود", "You can leave the slug empty; it will be generated automatically.": "شما می‌توانید نامک را خالی بگذارید به صورت خودکار ساخته شود",
"You don't have access this action": "شما دسترسی لازم برای این بخش را ندارید", "You don't have access this action": "شما دسترسی لازم برای این بخش را ندارید",
"You don't have any comments, We are so pleased to hear your look-out": "", "You don't have any comments, We are so pleased to hear your look-out": "شما هیچ دیدگاهی تاکنون ارسال نکرده‌اید، از شما تقاضا داریم تجربیات و نگرش خود را برای ما ارسال کنید، چون بسیار ارزشمند است",
"You have some products in your shopping card.": "در سبد خرید شما محصول وجود دارد", "You have some products in your shopping card.": "در سبد خرید شما محصول وجود دارد",
"You must add a pinned post to :GROUP": "برای این قسمت در :GROUP یک نوشته سنجاق شده اضافه کنید", "You must add a pinned post to :GROUP": "برای این قسمت در :GROUP یک نوشته سنجاق شده اضافه کنید",
"You need at least one address to order, Please add address": "شما برای ادامه فرآیند خرید به حداقل یک نشانی نیاز دارید", "You need at least one address to order, Please add address": "شما برای ادامه فرآیند خرید به حداقل یک نشانی نیاز دارید",
"You need complete your information": "شما می‌بایستی اطلاعات خود را تکمیل کنید", "You need complete your information": "شما می‌بایستی اطلاعات خود را تکمیل کنید",
"You need to login first": "شما برای ادامه می‌بایستی وارد شوید", "You need to login first": "شما برای ادامه می‌بایستی وارد شوید",
"You need to login to access this page": "",
"You need to sign in\/up to continue": "شما برای ادامه نیاز است وارد شوید یا ثبت‌نام کنید", "You need to sign in\/up to continue": "شما برای ادامه نیاز است وارد شوید یا ثبت‌نام کنید",
"You try attempts, Try it a few minutes": "تلاش شما از حداکثر درخواستی بیشتر است", "You try attempts, Try it a few minutes": "تلاش شما از حداکثر درخواستی بیشتر است",
"You try more than :COUNT attempts, Try it later": "شما بیش از :COUNT تلاش کردید لطفاً بعداً تلاش کنید", "You try more than :COUNT attempts, Try it later": "شما بیش از :COUNT تلاش کردید لطفاً بعداً تلاش کنید",
@ -473,20 +506,23 @@
"address updated": "نشانی به روز شد", "address updated": "نشانی به روز شد",
"an hour ago": "یک ساعت پیش", "an hour ago": "یک ساعت پیش",
"approved": "تایید شد", "approved": "تایید شد",
"area": "محیط",
"area :NAME of website updated": "محیط :NAME وبسایت به روز شد", "area :NAME of website updated": "محیط :NAME وبسایت به روز شد",
"article": "مقاله", "article": "مقاله",
"click here to request another": "برای ایجاد درخواست دیگر اینجا کلیک کنید", "click here to request another": "برای ایجاد درخواست دیگر اینجا کلیک کنید",
"emoji": "ایموجی", "customer_id": "مشتری",
"email": "رایانامه", "email": "رایانامه",
"emoji": "ایموجی",
"error in payment.": "خطا در پرداخت", "error in payment.": "خطا در پرداخت",
"error in payment. contact admin.": "خطا در پرداخت با مدیر وبسایت تماس بگیرید", "error in payment. contact admin.": "خطا در پرداخت با مدیر وبسایت تماس بگیرید",
"image": "تصویر", "image": "تصویر",
"invoice": "صورت حساب",
"jpg": "", "jpg": "",
"minute": "دقیقه", "minute": "دقیقه",
"minute(s)": "دقیقه", "minute(s)": "دقیقه",
"mobile": "موبایل",
"name": "نام", "name": "نام",
"news": "خبر", "news": "خبر",
"mobile": "موبایل",
"not searchable": "غیرقابل جستجو", "not searchable": "غیرقابل جستجو",
"one second ago": "یک ثانیه پیش", "one second ago": "یک ثانیه پیش",
"password repeat": "تکرار گذرواژه", "password repeat": "تکرار گذرواژه",
@ -494,11 +530,10 @@
"pending": "معلق", "pending": "معلق",
"rejected": "رد شده", "rejected": "رد شده",
"sign in": "ورود", "sign in": "ورود",
"webp": "",
"xShop": "",
"status": "وضعیت", "status": "وضعیت",
"title": "عنوان", "title": "عنوان",
"customer_id": "مشتری",
"user_id": "کاربر", "user_id": "کاربر",
"webp": "",
"xShop": "",
"yesterday": "دیروز" "yesterday": "دیروز"
} }

@ -162,3 +162,11 @@ body {
height: 64px; height: 64px;
object-fit: cover; object-fit: cover;
} }
@media print {
.no-print{
display: none;
}
}

@ -40,6 +40,8 @@ $xshop-shadow:2px 2px 4px #777777;
@import "../views/segments/posts_page/GridPostListSidebar/GridPostListSidebar"; @import "../views/segments/posts_page/GridPostListSidebar/GridPostListSidebar";
@import "../views/segments/post/PostSidebar/PostSidebar"; @import "../views/segments/post/PostSidebar/PostSidebar";
@import "../views/segments/clips_page/ClipListGrid/ClipListGrid"; @import "../views/segments/clips_page/ClipListGrid/ClipListGrid";
@import "../views/segments/posts_page/GridPostListSidebar/GridPostListSidebar";
@import "../views/segments/invoice/LianaInvoice/LianaInvoice";
@import "../views/segments/clip/DorClip/DorClip"; @import "../views/segments/clip/DorClip/DorClip";
@import "../views/segments/galleries_page/GalleriesList/GalleriesList"; @import "../views/segments/galleries_page/GalleriesList/GalleriesList";
@import "../views/segments/gallery/GallaryGrid/GallaryGrid"; @import "../views/segments/gallery/GallaryGrid/GallaryGrid";
@ -49,4 +51,3 @@ $xshop-shadow:2px 2px 4px #777777;
@import "../views/segments/attachments_page/DenaAttachList/DenaAttachList"; @import "../views/segments/attachments_page/DenaAttachList/DenaAttachList";
@import "../views/segments/attachment/AttachmentWithPreview/AttachmentWithPreview"; @import "../views/segments/attachment/AttachmentWithPreview/AttachmentWithPreview";
@import "../views/segments/contact/MeloContact/MeloContact"; @import "../views/segments/contact/MeloContact/MeloContact";
@import "../views/segments/index/InlineMap/InlineMap";

@ -110,11 +110,11 @@
<tr> <tr>
<th> <th>
<div <div
data-bs-toggle="tooltip" data-bs-toggle="tooltip"
data-bs-placement="top" data-bs-placement="top"
data-bs-custom-class="custom-tooltip" data-bs-custom-class="custom-tooltip"
data-bs-title="{{__("Check all")}}" data-bs-title="{{__("Check all")}}"
class="form-check form-switch mt-1 mx-2"> class="form-check form-switch mt-1 mx-2">
<input class="form-check-input chkall" <input class="form-check-input chkall"
type="checkbox" role="switch"> type="checkbox" role="switch">
</div> </div>
@ -178,35 +178,56 @@
{{ $item->parent?->{$cols[0]}??'-' }} {{ $item->parent?->{$cols[0]}??'-' }}
@break @break
@case('status') @case('status')
<div class="model-status status-{{$item->status}} float-start" data-bs-toggle="tooltip" <div class="model-status status-{{$item->status}} float-start"
data-bs-toggle="tooltip"
data-bs-placement="top" data-bs-placement="top"
data-bs-custom-class="custom-tooltip" data-bs-custom-class="custom-tooltip"
data-bs-title="{{$item->status}}"></div> data-bs-title="{{$item->status}}"></div>
@break @break
@case('user_id') @case('user_id')
<a href="{{route('admin.user.edit',$item->user?->email)}}"> @if($item->user != null)
{{ $item->user?->name??'-' }} <a href="{{route('admin.user.edit',$item->user?->email)}}">
</a> {{ $item->user?->name??'-' }}
</a>
@else
{{__("Removed")}}
@endif
@break @break
@case('customer_id') @case('customer_id')
<a href="{{route('admin.customer.edit',$item->customer?->id)}}"> @if($item->customer != null)
{{ $item->customer?->name??'-' }} <a href="{{route('admin.customer.edit',$item->customer?->id)}}">
</a> {{ $item->customer?->name??'-' }}
</a>
@else
{{__("Removed")}}
@endif
@break @break
@case('category_id') @case('category_id')
<a href="{{route('admin.category.edit',$item->category?->slug)}}"> @if($item->category != null)
{{ $item->category?->name??'-' }} <a href="{{route('admin.category.edit',$item->category?->slug)}}">
</a> {{ $item->category?->name??'-' }}
</a>
@else
{{__("Removed")}}
@endif
@break @break
@case('state_id') @case('state_id')
<a href="{{route('admin.category.edit',$item->state?->id)}}"> @if($item->state != null)
{{ $item->state?->name??'-' }} <a href="{{route('admin.state.edit',$item->state?->id)}}">
</a> {{ $item->state?->name??'-' }}
</a>
@else
{{__("Removed")}}
@endif
@break @break
@case('product_id') @case('product_id')
<a href="{{route('admin.product.edit',$item->product?->slug)}}"> @if($item->product != null)
{{ $item->product?->name??'-' }} <a href="{{route('admin.product.edit',$item->product?->slug)}}">
</a> {{ $item->product?->name??'-' }}
</a>
@else
{{__("Removed")}}
@endif
@break @break
@case('expire') @case('expire')
@case('created_at') @case('created_at')
@ -260,15 +281,16 @@
</a> </a>
</li> </li>
@endforeach @endforeach
@if(config('app.xlang.active') && isset($item->translatable)) @if(config('app.xlang.active') && isset($item->translatable))
<li> <li>
<a class="dropdown-item" href="{{route('admin.lang.model',[$item->id, get_class($item)])}}"> <a class="dropdown-item"
href="{{route('admin.lang.model',[$item->id, get_class($item)])}}">
<i class="ri-translate"></i> <i class="ri-translate"></i>
&nbsp; &nbsp;
{{__("Translate")}} {{__("Translate")}}
</a> </a>
</li> </li>
@endif @endif
</ul> </ul>
</div> </div>
@endif @endif
@ -333,12 +355,12 @@
<div class="row"> <div class="row">
<div class="col-md-3 text-start"> <div class="col-md-3 text-start">
<div <div
id="toggle-select" id="toggle-select"
class="btn btn-outline-light mx-2" class="btn btn-outline-light mx-2"
data-bs-toggle="tooltip" data-bs-toggle="tooltip"
data-bs-placement="top" data-bs-placement="top"
data-bs-custom-class="custom-tooltip" data-bs-custom-class="custom-tooltip"
data-bs-title="{{__("Toggle selection")}}"> data-bs-title="{{__("Toggle selection")}}">
<i class="ri-toggle-line"></i> <i class="ri-toggle-line"></i>
</div> </div>
</div> </div>

@ -11,7 +11,7 @@ if ($category->bg != null){
@section('content') @section('content')
<main> <main>
@if(\App\Models\Area::where('name',$area)->first()->use_default) @if(\App\Models\Area::where('name',$area)->first()->use_default)
@foreach(getParts('default_header') as $part) @foreach(getParts('defaultHeader') as $part)
@php($p = $part->getBladeWithData()) @php($p = $part->getBladeWithData())
@include($p['blade'],['data' => $p['data']]) @include($p['blade'],['data' => $p['data']])
@endforeach @endforeach
@ -21,7 +21,7 @@ if ($category->bg != null){
@include($p['blade'],['data' => $p['data']]) @include($p['blade'],['data' => $p['data']])
@endforeach @endforeach
@if(\App\Models\Area::where('name',$area)->first()->use_default) @if(\App\Models\Area::where('name',$area)->first()->use_default)
@foreach(getParts('default_footer') as $part) @foreach(getParts('defaultFooter') as $part)
@php($p = $part->getBladeWithData()) @php($p = $part->getBladeWithData())
@include($p['blade'],['data' => $p['data']]) @include($p['blade'],['data' => $p['data']])
@endforeach @endforeach

@ -6,7 +6,7 @@
@section('content') @section('content')
<main> <main>
@if(\App\Models\Area::where('name',$area)->first()->use_default) @if(\App\Models\Area::where('name',$area)->first()->use_default)
@foreach(getParts('default_header') as $part) @foreach(getParts('defaultHeader') as $part)
@php($p = $part->getBladeWithData()) @php($p = $part->getBladeWithData())
@include($p['blade'],['data' => $p['data']]) @include($p['blade'],['data' => $p['data']])
@endforeach @endforeach
@ -16,7 +16,7 @@
@include($p['blade'],['data' => $p['data']]) @include($p['blade'],['data' => $p['data']])
@endforeach @endforeach
@if(\App\Models\Area::where('name',$area)->first()->use_default) @if(\App\Models\Area::where('name',$area)->first()->use_default)
@foreach(getParts('default_footer') as $part) @foreach(getParts('defaultFooter') as $part)
@php($p = $part->getBladeWithData()) @php($p = $part->getBladeWithData())
@include($p['blade'],['data' => $p['data']]) @include($p['blade'],['data' => $p['data']])
@endforeach @endforeach

@ -6,7 +6,7 @@
@section('content') @section('content')
<main> <main>
@if(\App\Models\Area::where('name',$area)->first()->use_default) @if(\App\Models\Area::where('name',$area)->first()->use_default)
@foreach(getParts('default_header') as $part) @foreach(getParts('defaultHeader') as $part)
@php($p = $part->getBladeWithData()) @php($p = $part->getBladeWithData())
@include($p['blade'],['data' => $p['data']]) @include($p['blade'],['data' => $p['data']])
@endforeach @endforeach
@ -16,7 +16,7 @@
@include($p['blade'],['data' => $p['data']]) @include($p['blade'],['data' => $p['data']])
@endforeach @endforeach
@if(\App\Models\Area::where('name',$area)->first()->use_default) @if(\App\Models\Area::where('name',$area)->first()->use_default)
@foreach(getParts('default_footer') as $part) @foreach(getParts('defaultFooter') as $part)
@php($p = $part->getBladeWithData()) @php($p = $part->getBladeWithData())
@include($p['blade'],['data' => $p['data']]) @include($p['blade'],['data' => $p['data']])
@endforeach @endforeach

@ -11,7 +11,7 @@ if ($group->bg != null){
@section('content') @section('content')
<main> <main>
@if(\App\Models\Area::where('name',$area)->first()->use_default) @if(\App\Models\Area::where('name',$area)->first()->use_default)
@foreach(getParts('default_header') as $part) @foreach(getParts('defaultHeader') as $part)
@php($p = $part->getBladeWithData()) @php($p = $part->getBladeWithData())
@include($p['blade'],['data' => $p['data']]) @include($p['blade'],['data' => $p['data']])
@endforeach @endforeach
@ -21,7 +21,7 @@ if ($group->bg != null){
@include($p['blade'],['data' => $p['data']]) @include($p['blade'],['data' => $p['data']])
@endforeach @endforeach
@if(\App\Models\Area::where('name',$area)->first()->use_default) @if(\App\Models\Area::where('name',$area)->first()->use_default)
@foreach(getParts('default_footer') as $part) @foreach(getParts('defaultFooter') as $part)
@php($p = $part->getBladeWithData()) @php($p = $part->getBladeWithData())
@include($p['blade'],['data' => $p['data']]) @include($p['blade'],['data' => $p['data']])
@endforeach @endforeach

@ -0,0 +1,29 @@
@extends('website.inc.website-layout')
@section('title')
{{$title}} - {{config('app.name')}}
@endsection
@section('content')
<main>
<div class="no-print">
@if(\App\Models\Area::where('name',$area)->first()->use_default)
@foreach(getParts('defaultHeader') as $part)
@php($p = $part->getBladeWithData())
@include($p['blade'],['data' => $p['data']])
@endforeach
@endif
</div>
@foreach(getParts($area) as $part)
@php($p = $part->getBladeWithData())
@include($p['blade'],['data' => $p['data']])
@endforeach
<div class="no-print">
@if(\App\Models\Area::where('name',$area)->first()->use_default)
@foreach(getParts('defaultFooter') as $part)
@php($p = $part->getBladeWithData())
@include($p['blade'],['data' => $p['data']])
@endforeach
@endif
</div>
</main>
@endsection

@ -6,7 +6,7 @@
@endsection @endsection
@section('content') @section('content')
@if(\App\Models\Area::where('name',$area)->first()->use_default) @if(\App\Models\Area::where('name',$area)->first()->use_default)
@foreach(getParts('default_header') as $part) @foreach(getParts('defaultHeader') as $part)
@php($p = $part->getBladeWithData()) @php($p = $part->getBladeWithData())
@include($p['blade'],['data' => $p['data']]) @include($p['blade'],['data' => $p['data']])
@endforeach @endforeach
@ -16,7 +16,7 @@
@include($p['blade'],['data' => $p['data']]) @include($p['blade'],['data' => $p['data']])
@endforeach @endforeach
@if(\App\Models\Area::where('name',$area)->first()->use_default) @if(\App\Models\Area::where('name',$area)->first()->use_default)
@foreach(getParts('default_footer') as $part) @foreach(getParts('defaultFooter') as $part)
@php($p = $part->getBladeWithData()) @php($p = $part->getBladeWithData())
@include($p['blade'],['data' => $p['data']]) @include($p['blade'],['data' => $p['data']])
@endforeach @endforeach

@ -4,7 +4,7 @@
{{$title}} - {{config('app.name')}} {{$title}} - {{config('app.name')}}
@endsection @endsection
@section('content') @section('content')
@foreach(getParts('default_header') as $part) @foreach(getParts('defaultHeader') as $part)
@php($p = $part->getBladeWithData()) @php($p = $part->getBladeWithData())
@include($p['blade'],['data' => $p['data']]) @include($p['blade'],['data' => $p['data']])
@endforeach @endforeach
@ -94,7 +94,7 @@
</div> </div>
</div> </div>
</div> </div>
@foreach(getParts('default_footer') as $part) @foreach(getParts('defaultFooter') as $part)
@php($p = $part->getBladeWithData()) @php($p = $part->getBladeWithData())
@include($p['blade'],['data' => $p['data']]) @include($p['blade'],['data' => $p['data']])
@endforeach @endforeach

@ -6,7 +6,7 @@
@section('content') @section('content')
<main> <main>
@if(\App\Models\Area::where('name',$area)->first()->use_default) @if(\App\Models\Area::where('name',$area)->first()->use_default)
@foreach(getParts('default_header') as $part) @foreach(getParts('defaultHeader') as $part)
@php($p = $part->getBladeWithData()) @php($p = $part->getBladeWithData())
@include($p['blade'],['data' => $p['data']]) @include($p['blade'],['data' => $p['data']])
@endforeach @endforeach
@ -16,7 +16,7 @@
@include($p['blade'],['data' => $p['data']]) @include($p['blade'],['data' => $p['data']])
@endforeach @endforeach
@if(\App\Models\Area::where('name',$area)->first()->use_default) @if(\App\Models\Area::where('name',$area)->first()->use_default)
@foreach(getParts('default_footer') as $part) @foreach(getParts('defaultFooter') as $part)
@php($p = $part->getBladeWithData()) @php($p = $part->getBladeWithData())
@include($p['blade'],['data' => $p['data']]) @include($p['blade'],['data' => $p['data']])
@endforeach @endforeach

@ -175,7 +175,7 @@
</li> </li>
@endif @endif
@if( auth()->user()->hasAnyAccess( 'gfx' )) @if( auth()->user()->hasRole('developer') )
<li> <li>
<a href="{{route('admin.gfx.index')}}"> <a href="{{route('admin.gfx.index')}}">
<i class="ri-color-filter-line"></i> <i class="ri-color-filter-line"></i>
@ -183,7 +183,7 @@
</a> </a>
</li> </li>
@endif @endif
@if( auth()->user()->hasAnyAccess( 'area' )) @if( auth()->user()->hasRole('developer'))
<li> <li>
<a href="{{route('admin.area.index')}}"> <a href="{{route('admin.area.index')}}">
<i class="ri-paint-brush-line"></i> <i class="ri-paint-brush-line"></i>

@ -16,6 +16,10 @@
img{ img{
height: 64px; height: 64px;
} }
.tns-outer{
direction: ltr;
}
.tns-nav,button{ .tns-nav,button{
display: inline-block; display: inline-block;
} }

@ -0,0 +1,10 @@
<section id='FollowUsSocial'>
<span>
{{__("Follow us")}}
</span>
@foreach(getSettingsGroup('social_')??[] as $k => $social)
<a href="{{$social}}">
<i class="ri-{{$k}}-line"></i>
</a>
@endforeach
</section>

@ -0,0 +1,10 @@
{
"name": "FollowUsSocial",
"version": "1.0",
"author": "xStack",
"email": "xshop@xstack.ir",
"license": "GPL-3.0-or-later",
"url": "https:\/\/xstack.ir",
"author_url": "https:\/\/4xmen.ir",
"packages": []
}

@ -0,0 +1,21 @@
<?php
namespace Resources\Views\Segments;
use App\Models\Part;
class FollowUsSocial
{
public static function onAdd(Part $part = null)
{
}
public static function onRemove(Part $part = null)
{
}
public static function onMount(Part $part = null)
{
return $part;
}
}

@ -0,0 +1,30 @@
#FollowUsSocial {
z-index: 99;
position: fixed;
inset-inline-start: -125px;
bottom: 10rem;
transform: rotateZ(90deg);
width: 300px;
span{
display: inline-block;
font-size: 27px;
padding: .5rem;
position:relative;
top: -2px;
}
a,a:visited{
font-size: 35px;
color: black;
padding: 0 2px;
transition: 600ms;
&:hover{
color: dodgerblue;
background: white;
}
}
i{
transform: rotateZ(-90deg);
display: inline-block;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

@ -1,4 +1,4 @@
<header class='ParallaxHeader' style="background-image: url('{{$bg??asset('upload/images/'.$data->area->name.'.'.$data->part.'.jpg')}}')"> <header class='ParallaxHeader' style="background-image: url('{{$bg??asset('upload/images/'.$part->area->name . '.' . $part->part.'.jpg')}}')">
<div class="{{gfx()['container']}}"> <div class="{{gfx()['container']}}">
<h1> <h1>
{{$title}} {{$title}}

@ -20,7 +20,7 @@ class ParallaxHeader
$setting->title = $part->area->name . ' ' . $part->part.' default image'; $setting->title = $part->area->name . ' ' . $part->part.' default image';
$setting->save(); $setting->save();
File::copy(__DIR__.'/../../default-assets/bg.jpg',public_path('upload/images/').$part->area->name . '.' . $part->part.'.jpg'); File::copy(__DIR__.'/../../default-assets/bg.jpg',public_path('upload/images/').$part->area->name . '_' . $part->part.'.jpg');
} }
public static function onRemove(Part $part = null) public static function onRemove(Part $part = null)
{ {

@ -1,4 +1,4 @@
<header class='ParallaxHeaderPin' style="background-image: url('{{$bg??asset('upload/images/'.$data->area->name.'.'.$data->part.'.jpg')}}')"> <header class='ParallaxHeaderPin' style="background-image: url('{{$bg??asset('upload/images/'.$part->area->name . '.' . $part->part.'.jpg')}}')">
<div class="{{gfx()['container']}}"> <div class="{{gfx()['container']}}">
<h1> <h1>
{{$title}} {{$title}}

@ -0,0 +1,118 @@
<section class='LianaInvoice'>
<div class="p-3">
<div class="row mb-4">
<div class="col-10">
<div class="overflow-hidden">
<img src="{{asset('upload/images/logo.png')}}" class="float-end liana-logo" alt="">
<h3 class="mt-3">
{{config('app.name')}}
</h3>
</div>
{{-- @php($invoice == \App\Models\Invoice::first())--}}
<div class="row">
<div class="col">
{{__("Date")}}: {{$invoice->created_at->ldate('Y-m-d')}}
</div>
<div class="col-7 text-center">
{{__("Customer")}}: {{$invoice->customer->name}}
</div>
</div>
<div class="row">
<div class="col">
{{__("ID")}}: {{$invoice->hash}} ({{$invoice->status}})
</div>
<div class="col-7 text-center">
{{__("Customer mobile")}}: {{$invoice->customer->mobile}}
</div>
</div>
</div>
<div class="col-2 text-center">
<img src="{{$qr->render(route('client.invoice',$invoice->hash))}}" alt="qr code"
class="qr-code">
</div>
</div>
<table class="table table-striped align-middle table-bordered text-center">
<tr>
<th>
#
</th>
<th>
{{__("Product")}}
</th>
<th>
{{__("Count")}}
</th>
<th>
{{__("Quantity")}}
</th>
<th>
{{__("Price")}}
</th>
</tr>
@foreach($invoice->orders as $k => $order)
<tr>
<td>
{{$k + 1}}
</td>
<td>
{{$order->product->name}}
</td>
<td>
{{number_format($order->count)}}
</td>
<td>
@if( ($order->quantity->meta??null) == null)
-
@else
@foreach($order->quantity->meta as $m)
<span>
{{$m->human_value}}
</span>
@endforeach
@endif
</td>
<td>
{{number_format($order->price_total)}}
</td>
</tr>
@endforeach
<tr>
<td>
-
</td>
<td>
{{__("Transport")}}
{{number_format($invoice->transport_price)}}
</td>
<td colspan="2">
{{__("Total price")}}
{{number_format($invoice->total_price)}}
</td>
<td colspan="2">
{{__("Orders count")}}: ({{number_format($invoice->count)}})
</td>
</tr>
</table>
<div class="inv-footer">
<p>
{{$invoice->desc}}
</p>
<hr>
{{__("Address")}}:
{{$invoice->address->state->name}}, {{$invoice->address->city->name}}, {{$invoice->address->address}}
, {{$invoice->address->zip}}
@if(trim(getSetting($data->area->name.'_'.$data->part.'_desc')) != '')
<hr>
{!! getSetting($data->area->name.'_'.$data->part.'_desc') !!}
@endif
</div>
<div class="no-print btn btn-primary mt-2 w-100" onclick="window.print()">
{{__("Print")}}
</div>
</div>
</section>

@ -0,0 +1,10 @@
{
"name": "LianaInvoice",
"version": "1.0",
"author": "xStack",
"email": "xshop@xstack.ir",
"license": "GPL-3.0-or-later",
"url": "https:\/\/xstack.ir",
"author_url": "https:\/\/4xmen.ir",
"packages": []
}

@ -0,0 +1,30 @@
<?php
namespace Resources\Views\Segments;
use App\Models\Part;
use App\Models\Setting;
class LianaInvoice
{
public static function onAdd(Part $part = null)
{
$setting = new Setting();
$setting->section = 'theme';
$setting->key = $part->area->name . '_' . $part->part.'_desc';
$setting->value = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus aliquid consequuntur culpa cupiditate dignissimos dolor doloremque error facilis ipsum iure officia quam qui, tempora! Fuga harum impedit iusto magnam veniam.';
$setting->size = 12;
$setting->title = $part->area->name . ' ' . $part->part. ' invoice footer description';
$setting->type = 'EDITOR';
$setting->save();
}
public static function onRemove(Part $part = null)
{
Setting::where('key',$part->area->name . '_' . $part->part.'_desc')->first()?->delete();
}
public static function onMount(Part $part = null)
{
return $part;
}
}

@ -0,0 +1,31 @@
.LianaInvoice {
.inv-footer{
border: 1px solid gray;
padding: 1rem;
border-radius: var(--xshop-border-radius);
}
.liana-logo{
height: 64px;
margin-top: 2rem;
}
.qr-code{
max-width: 150px;
}
@media print {
&{
font-size: 90%;
}
.qr-code{
max-width: 100%;
}
.liana-logo{
width: 64px;
margin-top: 0;
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

@ -4,7 +4,7 @@
{{__("Latest products")}} {{__("Latest products")}}
</h1> </h1>
<div class="row"> <div class="row">
@foreach(\App\Models\Product::where('status',1)->limit(4)->get() as $product) @foreach(\App\Models\Product::where('status',1)->orderByDesc('id')->limit(4)->get() as $product)
<div class="col-lg-3 col-md-6"> <div class="col-lg-3 col-md-6">
<div class="product-item"> <div class="product-item">
<a class="fav-btn" data-slug="{{$product->slug}}" data-is-fav="{{$product->isFav()}}" <a class="fav-btn" data-slug="{{$product->slug}}" data-is-fav="{{$product->isFav()}}"

@ -1,4 +1,5 @@
.LatestProducts { .LatestProducts {
padding: 3rem 0;
h1{ h1{
margin-bottom: 1rem; margin-bottom: 1rem;
font-size: 27px; font-size: 27px;

Loading…
Cancel
Save