Skip to content

Commit 846f050

Browse files
committed
Add email templates handling
1 parent a536676 commit 846f050

13 files changed

+594
-8
lines changed
+133
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use Illuminate\Http\Request;
6+
use App\Models\EmailTemplate;
7+
use Mail;
8+
9+
class MailController extends Controller
10+
{
11+
/**
12+
* Display a listing of the resource.
13+
*
14+
* @return \Illuminate\Http\Response
15+
*/
16+
public function index()
17+
{
18+
$emailTemplates = EmailTemplate::paginate( 20 );
19+
return view('dashboard.email.index', ['emailTemplates' => $emailTemplates]);
20+
}
21+
22+
/**
23+
* Show the form for creating a new resource.
24+
*
25+
* @return \Illuminate\Http\Response
26+
*/
27+
public function create()
28+
{
29+
return view('dashboard.email.create');
30+
}
31+
32+
/**
33+
* Store a newly created resource in storage.
34+
*
35+
* @param \Illuminate\Http\Request $request
36+
* @return \Illuminate\Http\Response
37+
*/
38+
public function store(Request $request)
39+
{
40+
$validatedData = $request->validate([
41+
'name' => 'required|min:1|max:64',
42+
'subject' => 'required|min:1|max:128',
43+
'content' => 'required|min:1',
44+
]);
45+
$template = new EmailTemplate();
46+
$template->name = $request->input('name');
47+
$template->subject = $request->input('subject');
48+
$template->content = $request->input('content');
49+
$template->save();
50+
$request->session()->flash('message', 'Successfully created Email Template');
51+
return redirect()->route('mail.index');
52+
}
53+
54+
/**
55+
* Display the specified resource.
56+
*
57+
* @param int $id
58+
* @return \Illuminate\Http\Response
59+
*/
60+
public function show($id)
61+
{
62+
$template = EmailTemplate::find($id);
63+
return view('dashboard.email.show', [ 'template' => $template ]);
64+
}
65+
66+
/**
67+
* Show the form for editing the specified resource.
68+
*
69+
* @param int $id
70+
* @return \Illuminate\Http\Response
71+
*/
72+
public function edit($id)
73+
{
74+
$template = EmailTemplate::find($id);
75+
return view('dashboard.email.edit', [ 'template' => $template ]);
76+
}
77+
78+
/**
79+
* Update the specified resource in storage.
80+
*
81+
* @param \Illuminate\Http\Request $request
82+
* @param int $id
83+
* @return \Illuminate\Http\Response
84+
*/
85+
public function update(Request $request, $id)
86+
{
87+
$validatedData = $request->validate([
88+
'name' => 'required|min:1|max:64',
89+
'subject' => 'required|min:1|max:128',
90+
'content' => 'required|min:1',
91+
]);
92+
$template = EmailTemplate::find($id);
93+
$template->name = $request->input('name');
94+
$template->subject = $request->input('subject');
95+
$template->content = $request->input('content');
96+
$template->save();
97+
$request->session()->flash('message', 'Successfully updated Email Template');
98+
return redirect()->route('mail.index');
99+
}
100+
101+
/**
102+
* Remove the specified resource from storage.
103+
*
104+
* @param int $id
105+
* @return \Illuminate\Http\Response
106+
*/
107+
public function destroy($id, Request $request)
108+
{
109+
$template = EmailTemplate::find($id);
110+
if($template){
111+
$template->delete();
112+
}
113+
$request->session()->flash('message', 'Successfully deleted Email Template');
114+
return redirect()->route('mail.index');
115+
}
116+
117+
public function prepareSend($id){
118+
$template = EmailTemplate::find($id);
119+
return view('dashboard.email.send', [ 'template' => $template ]);
120+
}
121+
122+
public function send($id, Request $request){
123+
$template = EmailTemplate::find($id);
124+
Mail::send([], [], function ($message) use ($request, $template)
125+
{
126+
$message->to($request->input('email'));
127+
$message->subject($template->subject);
128+
$message->setBody($template->content,'text/html');
129+
});
130+
$request->session()->flash('message', 'Successfully sended Email');
131+
return redirect()->route('mail.index');
132+
}
133+
}

app/Models/EmailTemplate.php

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace App\Models;
4+
5+
use Illuminate\Database\Eloquent\Model;
6+
7+
class EmailTemplate extends Model
8+
{
9+
public $table = 'email_template';
10+
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
use Illuminate\Database\Migrations\Migration;
4+
use Illuminate\Database\Schema\Blueprint;
5+
use Illuminate\Support\Facades\Schema;
6+
7+
class CreateEmailTemplateTable extends Migration
8+
{
9+
/**
10+
* Run the migrations.
11+
*
12+
* @return void
13+
*/
14+
public function up()
15+
{
16+
Schema::create('email_template', function (Blueprint $table) {
17+
$table->bigIncrements('id');
18+
$table->timestamps();
19+
$table->text('content');
20+
$table->string('name');
21+
$table->string('subject');
22+
});
23+
}
24+
25+
/**
26+
* Reverse the migrations.
27+
*
28+
* @return void
29+
*/
30+
public function down()
31+
{
32+
Schema::dropIfExists('email_template');
33+
}
34+
}

database/seeds/DatabaseSeeder.php

+1
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,6 @@ public function run()
2020
$this->call('FolderTableSeeder');
2121
$this->call('ExampleSeeder');
2222
$this->call('BREADSeeder');
23+
$this->call('EmailSeeder');
2324
}
2425
}

database/seeds/EmailSeeder.php

+97
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
<?php
2+
3+
use Illuminate\Database\Seeder;
4+
use Faker\Factory as Faker;
5+
use Illuminate\Support\Facades\DB;
6+
7+
class EmailSeeder extends Seeder
8+
{
9+
/**
10+
* Run the database seeds.
11+
*
12+
* @return void
13+
*/
14+
public function run()
15+
{
16+
DB::table('email_template')->insert([
17+
'name' => 'Example E-mail',
18+
'subject' => 'Example E-mail',
19+
'content' =>
20+
'<!DOCTYPE html>
21+
<html lang="en">
22+
<head>
23+
<meta charset="utf-8">
24+
<meta name="viewport" content="width=device-width">
25+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
26+
<meta name="x-apple-disable-message-reformatting">
27+
<title>Example</title>
28+
<style>
29+
body {
30+
background-color:#fff;
31+
color:#222222;
32+
margin: 0px auto;
33+
padding: 0px;
34+
height: 100%;
35+
width: 100%;
36+
font-weight: 400;
37+
font-size: 15px;
38+
line-height: 1.8;
39+
}
40+
.continer{
41+
width:400px;
42+
margin-left:auto;
43+
margin-right:auto;
44+
background-color:#efefef;
45+
padding:30px;
46+
}
47+
.btn{
48+
padding: 5px 15px;
49+
display: inline-block;
50+
}
51+
.btn-primary{
52+
border-radius: 3px;
53+
background: #0b3c7c;
54+
color: #fff;
55+
text-decoration: none;
56+
}
57+
.btn-primary:hover{
58+
border-radius: 3px;
59+
background: #4673ad;
60+
color: #fff;
61+
text-decoration: none;
62+
}
63+
</style>
64+
</head>
65+
<body>
66+
<div class="continer">
67+
<h1>Lorem ipsum dolor</h1>
68+
<h4>Ipsum dolor cet emit amet</h4>
69+
<p>
70+
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea <strong>commodo consequat</strong>.
71+
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
72+
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
73+
</p>
74+
<h4>Ipsum dolor cet emit amet</h4>
75+
<p>
76+
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod <a href="#">tempor incididunt ut labore</a> et dolore magna aliqua.
77+
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
78+
</p>
79+
<h4>Ipsum dolor cet emit amet</h4>
80+
<p>
81+
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
82+
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
83+
</p>
84+
<a href="#" class="btn btn-primary">Lorem ipsum dolor</a>
85+
<h4>Ipsum dolor cet emit amet</h4>
86+
<p>
87+
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
88+
Ut enim ad minim veniam, quis nostrud exercitation <a href="#">ullamco</a> laboris nisi ut aliquip ex ea commodo consequat.
89+
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
90+
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
91+
</p>
92+
</div>
93+
</body>
94+
</html>',
95+
]);
96+
}
97+
}

database/seeds/MenusTableSeeder.php

+8-7
Original file line numberDiff line numberDiff line change
@@ -133,13 +133,14 @@ public function run()
133133
$this->menuId = DB::getPdo()->lastInsertId(); //set menuId
134134
$this->insertLink('guest,user,admin', 'Dashboard', '/', 'cil-speedometer');
135135
$this->beginDropdown('admin', 'Settings', 'cil-calculator');
136-
$id = $this->insertLink('admin', 'Notes', '/notes');
137-
$id = $this->insertLink('admin', 'Users', '/users');
138-
$id = $this->insertLink('admin', 'Edit menu', '/menu/menu');
139-
$id = $this->insertLink('admin', 'Edit menu elements', '/menu/element');
140-
$id = $this->insertLink('admin', 'Edit roles', '/roles');
141-
$id = $this->insertLink('admin', 'Media', '/media');
142-
$id = $this->insertLink('admin', 'BREAD', '/bread');
136+
$this->insertLink('admin', 'Notes', '/notes');
137+
$this->insertLink('admin', 'Users', '/users');
138+
$this->insertLink('admin', 'Edit menu', '/menu/menu');
139+
$this->insertLink('admin', 'Edit menu elements', '/menu/element');
140+
$this->insertLink('admin', 'Edit roles', '/roles');
141+
$this->insertLink('admin', 'Media', '/media');
142+
$this->insertLink('admin', 'BREAD', '/bread');
143+
$this->insertLink('admin', 'Email', '/mail');
143144
$this->endDropdown();
144145
$this->insertLink('guest', 'Login', '/login', 'cil-account-logout');
145146
$this->insertLink('guest', 'Register', '/register', 'cil-account-logout');

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@
105105
"foreach-cli": "^1.8.1",
106106
"js-beautify": "^1.10.3",
107107
"jsdom": "^16.2.0",
108-
"minimist": "^1.2.0",
108+
"minimist": "^1.2.2",
109109
"node-sass": "^4.13.1",
110110
"nodemon": "^2.0.2",
111111
"npm-run-all": "^4.1.5",

0 commit comments

Comments
 (0)