Skip to content

Commit

Permalink
Added contact area
Browse files Browse the repository at this point in the history
  • Loading branch information
farzady committed Aug 26, 2024
1 parent 266d38f commit ddb5b34
Show file tree
Hide file tree
Showing 21 changed files with 337 additions and 9 deletions.
20 changes: 20 additions & 0 deletions app/Http/Controllers/ClientController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@

namespace App\Http\Controllers;

use App\Http\Requests\ContactSubmitRequest;
use App\Models\Attachment;
use App\Models\Category;
use App\Models\Clip;
use App\Models\Comment;
use App\Models\Contact;
use App\Models\Customer;
use App\Models\Gallery;
use App\Models\Group;
Expand Down Expand Up @@ -411,6 +413,24 @@ public function compare()
$products = Product::whereIn('id', $ids)->where('status', 1)->get();
return view('client.default-list', compact('area', 'products', 'title', 'subtitle'));
}
public function contact()
{
$area = 'contact-us';
$title = __("Contact us");
$subtitle = '';
return view('client.default-list', compact('area', 'title', 'subtitle'));
}
public function sendContact(ContactSubmitRequest $request)
{
$con = new Contact();
$con->name = $request->full_name;
$con->email = $request->email;
$con->mobile = $request->phone;
$con->subject = $request->subject;
$con->body = $request->bodya;
$con->save();
return redirect()->back()->with(['message' => __('Your message has been successfully sent.')]);
}


public function signOut()
Expand Down
32 changes: 32 additions & 0 deletions app/Http/Requests/ContactSubmitRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class ContactSubmitRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}

/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
'full_name' => ['required', 'string', 'max:255', 'min:3'],
'phone' => ['required', 'string', 'max:15', 'min:8'],
'subject' => ['nullable', 'string', 'max:255', 'min:4'],
'email' => ['required', 'email', 'max:255', 'min:4'],
'bodya' => ['required', 'string', 'max:4048', 'min:15'],
];
}
}
1 change: 1 addition & 0 deletions app/Models/Area.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class Area extends Model
// 'categories_page',
'category',
'comments',
'contact',
'clip',
'clips',
'clips_page',
Expand Down
16 changes: 13 additions & 3 deletions database/seeders/AreaSeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public function run(): void
[
'name' => 'default_footer',
'valid_segments' => json_encode(
["footer", "other", "ads" , "groups"]
["footer", "other", "ads", "groups"]
),
'max' => 2,
'preview' => null,
Expand Down Expand Up @@ -229,7 +229,7 @@ public function run(): void
"parallax", "other", "register", "ads"]
),
'max' => 6,
'preview' => 'client.register',
'preview' => 'client.sign-up',
'icon' => 'ri-user-add-line',
],
[
Expand Down Expand Up @@ -261,6 +261,16 @@ public function run(): void
'preview' => null,
'icon' => 'ri-scales-3-line',
],
[
'name' => 'contact-us',
'valid_segments' => json_encode(
["top", "header", "footer", "menu",
"parallax", "other", "contact", "ads", "index"]
),
'max' => 4,
'preview' => null,
'icon' => 'ri-mail-open-line',
],
];

foreach ($areas as $area) {
Expand All @@ -270,7 +280,7 @@ public function run(): void
$a->valid_segments = $area['valid_segments'];
$a->icon = $area['icon'];
$a->preview = $area['preview'];
if ($area['name'] == 'index'){
if ($area['name'] == 'index') {
$a->use_default = false;
}
$a->save();
Expand Down
9 changes: 9 additions & 0 deletions database/seeders/PartSeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,15 @@ public function run(): void
$part->sort = 1;
$part->save();

// -------------------------------------------------------------

$part = new Part();
$part->segment = 'contact';
$part->part = 'MeloContact';
$part->area_id = Area::where('name', 'contact-us')->first()->id;
$part->sort = 1;
$part->save();


}
}
3 changes: 2 additions & 1 deletion resources/js/client-custom/safeForm.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
window.addEventListener('load',function () {
setTimeout(()=>{
document.querySelectorAll('.safe-from')?.forEach(function (el) {
document.querySelectorAll('.safe-form')?.forEach(function (el) {

const url = el.querySelector('.safe-url').getAttribute('data-url');
el.setAttribute('action',url);
})
Expand Down
2 changes: 2 additions & 0 deletions resources/js/client.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,5 @@ import "../views/segments/login/LoginPatternBg/LoginPatternBg.js";
import "../views/segments/customer/AvisaCustomer/AvisaCustomer.js";
import "../views/segments/attachments_page/DenaAttachList/DenaAttachList.js";
import "../views/segments/attachment/AttachmentWithPreview/AttachmentWithPreview.js";
import "../views/segments/contact/MeloContact/MeloContact.js";
import "../views/segments/index/InlineMap/InlineMap.js";
2 changes: 2 additions & 0 deletions resources/sass/client.scss
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,5 @@ $xshop-shadow:2px 2px 4px #777777;
@import "../views/segments/customer/AvisaCustomer/AvisaCustomer";
@import "../views/segments/attachments_page/DenaAttachList/DenaAttachList";
@import "../views/segments/attachment/AttachmentWithPreview/AttachmentWithPreview";
@import "../views/segments/contact/MeloContact/MeloContact";
@import "../views/segments/index/InlineMap/InlineMap";
2 changes: 1 addition & 1 deletion resources/sass/panel/_fix.scss
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ main{
}

a,a:visited{
color: #cb00a5;
color: white;
&:hover{
color: #ff0067;
}
Expand Down
2 changes: 1 addition & 1 deletion resources/views/segments/card/NsCard/NsCard.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
{{__("There is nothing added to card!")}}
</div>
@else {{-- count 0--}}
<form method="post" class="safe-from" >
<form method="post" class="safe-form" >

<input type="hidden" class="safe-url" data-url="{{route('client.card.check')}}">
@csrf
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
{{__("Post your comment")}}
</h5>
@include('components.err')
<form id="comment-form" class="safe-from" method="post">
<form id="comment-form" class="safe-form" method="post">
<div class="safe-url" data-url="{{route('client.comment.submit')}}"></div>
@csrf

Expand Down
129 changes: 129 additions & 0 deletions resources/views/segments/contact/MeloContact/MeloContact.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
<section class='MeloContact'>
<div class="{{gfx()['container']}}">

<h1 class="text-center fw-light mb-3">
{{getSetting($data->area->name.'_'.$data->part.'_title')}}
</h1>
<div class="row">
<div class="col-md-5">
<div class="pin-box p-3">
<i class="ri-mail-add-line icon"></i>
@if(getGroupBySetting($data->area->name.'_'.$data->part)?->posts()->where('status',1)->where('is_pinned',1)->count() == 0)
<h3 class="p-4 text-center">
{{__("You must add a pinned post to :GROUP",['GROUP' => getGroupBySetting($data->area->name.'_'.$data->part)?->name])}}
</h3>
@else
<h3>
{{getGroupBySetting($data->area->name.'_'.$data->part)?->posts()->where('status',1)->where('is_pinned',1)->first()->title}}
</h3>
{!! getGroupBySetting($data->area->name.'_'.$data->part)?->posts()->where('status',1)->where('is_pinned',1)->first()->body!!}

<ul class="social text-center">
@foreach(getSettingsGroup('social_')??[] as $k => $social)
<li class="d-inline-block mx-2">
<a href="{{$social}}">
<i class="ri-{{$k}}-line"></i>
</a>
</li>
@endforeach
</ul>
@endif
</div>
</div>
<div class="col-md-7">

@include('components.err')
<form class="safe-form" method="post">
<input type="hidden" class="safe-url" data-url="{{route('client.send-contact')}}">
@csrf

<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="full_name">
{{__('Name and lastname')}}
</label>
<input name="full_name" type="text"
class="form-control @error('full_name') is-invalid @enderror"
placeholder="{{__('Name and lastname')}}"
value="{{old('full_name',auth('customer')->user()->name??null)}}"/>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="Phone">
{{__('Phone')}}
</label>
<input name="phone" type="tel"
class="form-control @error('Phone') is-invalid @enderror"
placeholder="{{__('Phone')}}" value="{{old('Phone',auth('customer')->user()->mobile??null)}}"/>
</div>
</div>
<div class="col-md-6 mt-3">
<div class="form-group">
<label for="email">
{{__('Email')}}
</label>
<input name="email" type="email"
class="form-control @error('email') is-invalid @enderror"
placeholder="{{__('Email')}}" value="{{old('email',auth('customer')->user()->email??null)}}"/>
</div>
</div>
<div class="col-md-6 mt-3">
<div class="form-group">
<label for="subject">
{{__('Subject')}}
</label>
<input name="subject" type="text"
class="form-control @error('subject') is-invalid @enderror"
placeholder="{{__('Subject')}}"
value="{{old('subject')}}"/>
</div>
</div>
<div class="col-md-12 mt-3">
<div class="form-group">
<label for="body">
{{__('Your message...')}}
</label>
<textarea name="bodya" style=" height: 150px;"
class="form-control @error('bodya') is-invalid @enderror"
placeholder="{{__('Question/Message')}}">{{old('body')}}</textarea>
</div>
</div>
<div class="col-md-112">
<label> &nbsp; </label>
<button class="btn btn-primary mt-2 w-100">
<i class="ri-send-plane-line"></i>
{{__('Send')}}
</button>
</div>
</div>

</form>
</div>
</div>
<div class="py-5">

@php($dir = langIsRTL(app()->getLocale() )?'rtl':'ltr' )

@foreach( getGroupBySetting($data->area->name.'_'.$data->part)?->posts()->where('status',1)
->where('is_pinned',0)->orderByDesc('id')->get() as $i => $post)
<div class="row mb-2" @if( ($i % 2) == 0) dir="rtl" @else dir="ltr" @endif>
<div class="col-md-2">
<img src="{{$post->imgUrl()}}" alt="{{$post->title}}" class="img-fluid">
</div>
<div class="col-md" dir="{{$dir}}">
<h3>
<a href="{{$post->webUrl()}}">
{{$post->title}}
</a>
</h3>
<p>
{{$post->subtitle}}
</p>
</div>
</div>
@endforeach
</div>
</div>
</section>
Empty file.
10 changes: 10 additions & 0 deletions resources/views/segments/contact/MeloContact/MeloContact.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"name": "MeloContact",
"version": "1.0",
"author": "xStack",
"email": "[email protected]",
"license": "GPL-3.0-or-later",
"url": "https:\/\/xstack.ir",
"author_url": "https:\/\/4xmen.ir",
"packages": []
}
42 changes: 42 additions & 0 deletions resources/views/segments/contact/MeloContact/MeloContact.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php

namespace Resources\Views\Segments;

use App\Models\Group;
use App\Models\Part;
use App\Models\Setting;

class MeloContact
{
public static function onAdd(Part $part = null)
{
$setting = new Setting();
$setting->section = 'theme';
$setting->key = $part->area->name . '_' . $part->part;
$setting->value = Group::first()->id;
$setting->type = 'GROUP';
$setting->size = 6;
$setting->title = $part->area->name . ' ' . $part->part;
$setting->save();

$setting = new Setting();
$setting->section = 'theme';
$setting->key = $part->area->name . '_' . $part->part.'_title';
$setting->value = __("Contact us");
$setting->type = 'TEXT';
$setting->size = 6;
$setting->title = $part->area->name . ' ' . $part->part . ' title';
$setting->save();
}
public static function onRemove(Part $part = null)
{
Setting::where('key',$part->area->name . '_' . $part->part)->first()?->delete();
Setting::where('key',$part->area->name . '_' . $part->part.'_title')->first()?->delete();


}
public static function onMount(Part $part = null)
{
return $part;
}
}
Loading

0 comments on commit ddb5b34

Please sign in to comment.