From d2c2b9ca8bed78547745de2c87c403d5d2ab6639 Mon Sep 17 00:00:00 2001 From: XiaoLFeng Date: Sat, 8 Jul 2023 16:43:39 +0800 Subject: [PATCH] =?UTF-8?q?AddFeature=EF=BC=9A=E6=B7=BB=E5=8A=A0=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=8F=8B=E9=93=BEAPI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加接口 apiCustomEdit 修改友链API 设计接口路由表 添加修改发送邮件 Signed-off-by: XiaoLFeng --- app/Http/Controllers/Function/Link.php | 190 ++++++++++++++++++ .../mail/link-custom-edit-admin.blade.php | 84 ++++++++ .../views/mail/link-custom-edit.blade.php | 86 ++++++++ routes/api.php | 5 +- 4 files changed, 363 insertions(+), 2 deletions(-) create mode 100644 resources/views/mail/link-custom-edit-admin.blade.php create mode 100644 resources/views/mail/link-custom-edit.blade.php diff --git a/app/Http/Controllers/Function/Link.php b/app/Http/Controllers/Function/Link.php index 9e029af..43b2e06 100644 --- a/app/Http/Controllers/Function/Link.php +++ b/app/Http/Controllers/Function/Link.php @@ -548,6 +548,196 @@ public function apiCustomBlogVerify(HttpRequest $request): JsonResponse return Response::json($returnData, $returnData['code']); } + /** + * 修改友链API + * + * @param HttpRequest $request 获取HTTP中 Request 数据 + * @return JsonResponse 返回JSON数据 + */ + public function apiCustomEdit(HttpRequest $request, string $friendId): JsonResponse + { + /** + * @var array $returnData Json的 return 返回值 + * @var Validator $dataCheck 数据判断 + * @var array $errorInfo 错误信息 + * @var array $errorSingle 输出单个错误信息 + */ + // 验证Cookie是否有效 + if ($request->hasCookie('friend_edit')) { + // 检查Cookie解析是否为此博客 + if (password_verify($friendId, $request->cookie('friend_edit'))) { + // 获取数据库 + $resultBlog = DB::table('blog_link') + ->find($friendId); + if (!empty($resultBlog->id)) { + // 检查数据 + $dataCheck = Validator::make($request->all(), [ + 'userEmail' => 'required|email', + 'userServerHost' => 'required|string', + 'userBlog' => 'required|string', + 'userUrl' => 'required|regex:#[a-zA-z]+://[^\s]*#', + 'userDescription' => 'required|string', + 'userIcon' => 'required|regex:#[a-zA-z]+://[^\s]*#', + 'checkRssJudge' => 'boolean', + 'userRss' => 'string|regex:#[a-zA-z]+://[^\s]*#', + 'userSelColor' => 'required|int', + 'userRemark' => 'string', + ]);// 检查发现错误 + if ($dataCheck->fails()) { + $errorType = array_keys($dataCheck->failed()); + $i = 0; + foreach ($dataCheck->failed() as $valueData) { + $errorInfo[$errorType[$i]] = array_keys($valueData); + if ($i == 0) { + $errorSingle = [ + 'info' => $errorType[$i], + 'need' => $errorInfo[$errorType[$i]], + ]; + } + $i++; + } + $returnData = [ + 'output' => 'DataFormatError', + 'code' => 403, + 'data' => [ + 'message' => '输入内容有错误', + 'errorSingle' => $errorSingle, + 'error' => $errorInfo, + ], + ]; + } else { + // 检查数据 + if (empty($request->checkRssJudge)) { + $request->checkRssJudge = 0; + } + // 数据载入数组 + $this->data['oldBlog'] = (object)[ + 'blogOwnEmail' => $resultBlog->blogOwnEmail, + 'blogUrl' => $resultBlog->blogUrl, + 'blogName' => $resultBlog->blogName, + 'blogDescription' => $resultBlog->blogDescription, + 'blogIcon' => $resultBlog->blogIcon, + 'blogRssJudge' => $resultBlog->blogRssJudge, + 'blogRSS' => $resultBlog->blogRSS, + 'blogSetColor' => $resultBlog->blogSetColor, + 'blogRemark' => $resultBlog->blogRemark, + 'blogServerHost' => $resultBlog->blogServerHost, + ]; + $this->data['blog'] = (object)[ + 'blogOwnEmail' => $request->userEmail, + 'blogUrl' => $request->userUrl, + 'blogName' => $request->userBlog, + 'blogDescription' => $request->userDescription, + 'blogIcon' => $request->userIcon, + 'blogRssJudge' => $request->checkRssJudge, + 'blogRSS' => $request->userRss, + 'blogSetColor' => $request->userSelColor, + 'blogRemark' => $request->userRemark, + 'blogServerHost' => $request->userServerHost, + ]; + + // 修改数据 + $updateData = DB::table('blog_link') + ->where('id', $resultBlog->id) + ->update([ + 'blogOwnEmail' => $request->userEmail, + 'blogUrl' => $request->userUrl, + 'blogName' => $request->userBlog, + 'blogDescription' => $request->userDescription, + 'blogIcon' => $request->userIcon, + 'blogRssJudge' => $request->checkRssJudge, + 'blogRSS' => $request->userRss, + 'blogSetColor' => $request->userSelColor, + 'blogRemark' => $request->userRemark, + 'blogServerHost' => $request->userServerHost, + 'updated_at' => date('Y-m-d H:i:s'), + ]); + + if ($updateData) { + // 邮件发送系统 + // 新用户 + if ($this->data['oldBlog']->blogOwnEmail != $this->data['blog']->blogOwnEmail) { + $this->data['sendEmail'] = [ + 'userEmail' => $this->data['blog']->blogOwnEmail, + 'userBlog' => $this->data['blog']->blogName, + 'userUrl' => $this->data['blog']->blogUrl, + ]; + Mail::send('mail.link-custom-edit', $this->data, function (Message $mail) { + $mail->from(env('MAIL_USERNAME'), env('APP_NAME')); + $mail->to($this->data['sendEmail']['userEmail']); + $mail->subject(env('APP_NAME') . '-友链自主修改通知'); + }); + } + $this->data['sendEmail'] = [ + 'userEmail' => $this->data['oldBlog']->blogOwnEmail, + 'userBlog' => $this->data['oldBlog']->blogName, + 'userUrl' => $this->data['oldBlog']->blogUrl, + ]; + // 用户 + Mail::send('mail.link-custom-edit', $this->data, function (Message $mail) { + $mail->from(env('MAIL_USERNAME'), env('APP_NAME')); + $mail->to($this->data['sendEmail']['userEmail']); + $mail->subject(env('APP_NAME') . '-友链自主修改通知'); + }); + // 站长 + Mail::send('mail.link-custom-edit-admin', $this->data, function (Message $mail) { + $mail->from(env('MAIL_USERNAME'), env('APP_NAME')); + $mail->to($this->data['sqlEmail']); + $mail->subject(env('APP_NAME') . '-友链自主修改通知'); + }); + + // 消息成功通知 + $returnData = [ + 'output' => 'Success', + 'code' => 200, + 'data' => [ + 'message' => '您已成功修改', + ], + ]; + $cookie = cookie('friend_edit', '', -1, '/'); + return Response::json($returnData, $returnData['code']) + ->cookie($cookie); + } else { + $returnData = [ + 'output' => 'UpdateFail', + 'code' => 403, + 'data' => [ + 'message' => '更新失败请联系管理员', + ], + ]; + } + } + } else { + $returnData = [ + 'output' => 'NoBlog', + 'code' => 403, + 'data' => [ + 'message' => '没有对应博客', + ], + ]; + } + } else { + $returnData = [ + 'output' => 'Mismatch', + 'code' => 403, + 'data' => [ + 'message' => '不匹配', + ], + ]; + } + } else { + $returnData = [ + 'output' => 'InvalidValidation', + 'code' => 403, + 'data' => [ + 'message' => '无效验证', + ], + ]; + } + + return Response::json($returnData, $returnData['code']); + } + protected function viewEditFriend(HttpRequest $request, $friendId): Application|Factory|View|RedirectResponse { // 检查内容是否为空 diff --git a/resources/views/mail/link-custom-edit-admin.blade.php b/resources/views/mail/link-custom-edit-admin.blade.php new file mode 100644 index 0000000..44db8f2 --- /dev/null +++ b/resources/views/mail/link-custom-edit-admin.blade.php @@ -0,0 +1,84 @@ + + + + + Mail + + + + + + + + + + + + +
{{ env('APP_NAME') }}
+ + + + + + + + + + +
+ 时间: {{ date('Y-m-d H:i:s') }} +
+ Dear. {{ $sqlEmail }} +
+ 您好站长:{{ $sqlAuthor }}
+ 本站友链({{ $oldBlog->blogName }})已自行修改
+ 请检查修改问题确保无误! +
+ 这是您以前的信息:
+
    +
  • 博主邮箱:{{ $blog->blogOwnEmail }}
  • +
  • 贵站名字:{{ $blog->blogName }}
  • +
  • 贵站地址:{{ $blog->blogUrl }}
  • +
  • 图片地址:{{ $blog->blogIcon }}
  • +
  • 贵站介绍:{{ $blog->blogDescription }}
  • + @if(!empty($blog->blogRemark)) +
  • 备注内容:{{ $blog->blogRemark }}
  • + @endif + @if($blog->blogRssJudge == 1) +
  • RSS地址:{{ $blog->blogRSS }}
  • + @endif +
+
+ 这是您的修改信息:
+
    +
  • 博主邮箱:{{ $oldBlog->blogOwnEmail }}
  • +
  • 贵站名字:{{ $oldBlog->blogName }}
  • +
  • 贵站地址:{{ $oldBlog->blogUrl }}
  • +
  • 图片地址:{{ $oldBlog->blogIcon }}
  • +
  • 贵站介绍:{{ $oldBlog->blogDescription }}
  • + @if(!empty($oldBlog->blogRemark)) +
  • 备注内容:{{ $oldBlog->blogRemark }}
  • + @endif + @if($oldBlog->blogRssJudge == 1) +
  • RSS地址:{{ $oldBlog->blogRSS }}
  • + @endif +
+
+ 此邮件为凭证,若发生意外修改请使用此邮件提交于站长!谢谢您对本站的支持!
+
+
+ + + + +
+ © 2022 - {{ date('Y') }}. {{ env('APP_NAME') }} All Rights Reserved.
+ 本邮件为自动发出,请勿直接回复 +
+
+ + + + diff --git a/resources/views/mail/link-custom-edit.blade.php b/resources/views/mail/link-custom-edit.blade.php new file mode 100644 index 0000000..2a6f48a --- /dev/null +++ b/resources/views/mail/link-custom-edit.blade.php @@ -0,0 +1,86 @@ + + + + + Mail + + + + + + + + + + + + +
{{ env('APP_NAME') }}
+ + + + + + + + + + +
+ 时间: {{ date('Y-m-d H:i:s') }} +
+ Dear. {{ $sendEmail['userEmail'] }} +
+ 您好 {{ $sendEmail['userBlog'] }} 的站长: + {{ $sendEmail['userEmail'] }}
+ 您在本博客({{ env('APP_NAME') }})自主修改友链
+ 邮件为通知您您已成功修改友链,修改立即生效,我们告知您已做出了修改,若您未执行修改请立刻联系站长 + {{ $sqlAuthor }}({{ $sqlEmail }}) +
+ 这是您现在的信息:
+
    +
  • 博主邮箱:{{ $blog->blogOwnEmail }}
  • +
  • 贵站名字:{{ $blog->blogName }}
  • +
  • 贵站地址:{{ $blog->blogUrl }}
  • +
  • 图片地址:{{ $blog->blogIcon }}
  • +
  • 贵站介绍:{{ $blog->blogDescription }}
  • + @if(!empty($blog->blogRemark)) +
  • 备注内容:{{ $blog->blogRemark }}
  • + @endif + @if($blog->blogRssJudge == 1) +
  • RSS地址:{{ $blog->blogRSS }}
  • + @endif +
+
+ 这是您以前的修改信息:
+
    +
  • 博主邮箱:{{ $oldBlog->blogOwnEmail }}
  • +
  • 贵站名字:{{ $oldBlog->blogName }}
  • +
  • 贵站地址:{{ $oldBlog->blogUrl }}
  • +
  • 图片地址:{{ $oldBlog->blogIcon }}
  • +
  • 贵站介绍:{{ $oldBlog->blogDescription }}
  • + @if(!empty($oldBlog->blogRemark)) +
  • 备注内容:{{ $oldBlog->blogRemark }}
  • + @endif + @if($oldBlog->blogRssJudge == 1) +
  • RSS地址:{{ $oldBlog->blogRSS }}
  • + @endif +
+
+ 此邮件为凭证,若发生意外修改请使用此邮件提交于站长!谢谢您对本站的支持!
+
+
+ + + + +
+ © 2022 - {{ date('Y') }}. {{ env('APP_NAME') }} All Rights Reserved.
+ 本邮件为自动发出,请勿直接回复 +
+
+ + + + diff --git a/routes/api.php b/routes/api.php index 1ee2714..dc6accf 100644 --- a/routes/api.php +++ b/routes/api.php @@ -43,8 +43,9 @@ }); Route::prefix('custom')->group(function () { - Route::post('add',[Link::class,'apiCustomAdd'])->name('api.link.custom.add'); - Route::get('search',[Link::class, 'apiCustomSearch'])->name('api.link.custom.search'); + Route::post('add', [Link::class, 'apiCustomAdd'])->name('api.link.custom.add'); + Route::post('edit/{friendId}', [Link::class, 'apiCustomEdit'])->name('api.link.custom.edit'); + Route::get('search', [Link::class, 'apiCustomSearch'])->name('api.link.custom.search'); Route::post('blogCheck',[Link::class,'apiCustomBlogCheck'])->name('api.link.custom.blogCheck'); Route::post('blogVerify',[Link::class,'apiCustomBlogVerify'])->name('api.link.custom.blogVerify'); });