このコミットが含まれているのは:
dragon1211 2021-10-27 21:48:24 +09:00
コミット c742e7a08b
23個のファイルの変更478行の追加237行の削除

ファイルの表示

@ -5,22 +5,32 @@
# 開発環境構築手順
#### Docker立ち上げ
```
docker-compose up -d
```
#### appに入る
```
docker-compose exec app bash
```
#### 3.各種インストール
```
npm install
composer install
```
#### npm実行
```
cp .env.example .env
php artisan key:generate
npm run watch ( npm run dev )
```
#### DB接続
```
php artisan migrate:fresh --seed
```

ファイルの表示

@ -34,6 +34,12 @@ MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"
MAIL_OWNER_ADDRESS=""
MAIL_OWNER_NAME=""
MAIL_CC_ADDRESS=""
MAIL_CC_NAME=""
MAIL_BCC_ADDRESS=""
MAIL_BCC_NAME=""
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=

ファイルの表示

@ -3,80 +3,20 @@
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller, Session;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Api\AuthenticationTrait;
use App\Http\Controllers\Api\AuthorizationTrait;
use Illuminate\Http\Request;
use App\Models\Admin;
use App\Models\LoginLimits;
use Illuminate\Support\Facades\Log;
class AdminController extends Controller {
protected $guard = 'admins';
use AuthenticationTrait;
use AuthorizationTrait;
public function login (Request $r) {
// if (null === $r->server('HTTP_USER_AGENT')) {
// return ['status_code' => 400, 'error_message' => ['不正なuser_agent。']];
// }
// if (null !== ($ll = LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->first())) {
// if ((time() >= strtotime($ll->updated_at) + 600) === false) {
// LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->delete();
// }
// if ($ll->fail_number >= 10) {
// return ['status_code' => 400, 'error_message' => ['10回連続で失敗しましたので、10分、ログインロックになりました。']];
// }
// }
$validate = Validator::make($r->all(), [
'email' => 'required|max:255|email',
'password' => 'required|min:8|max:72',
]);
if ($validate->fails()) {
// バリデーションエラー
return ['status_code' => 422, 'error_messages' => $validate->errors()];
}
// 存在しない場合
if (null === ($admin = Admin::select('id', 'email', 'password')->where('email', $r->email)->first())) {
return ['status_code' => 400, 'error_message' => ['このアカウントが存在しません。']];
}
// パスワードが異なる場合
if (!Hash::check($r->password, $admin->password)) {
// if ($ll = LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->first()) {
// LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->update(['fail_number' => $ll->fail_number+1]);
// }
// else {
// LoginLimits::create(['user_agent' => $r->server('HTTP_USER_AGENT'), 'fail_number' => 1]);
// }
return ['status_code' => 400, 'error_message' => ['ログインに失敗しました。10回連続で失敗すると、一定期間ログインできなくなります。']];
}
// セッションを想像する
if (Auth::guard('admins')->attempt($r->all())) {
Session::put('admin_email', $admin->email);
Session::save();
}
return ['status_code' => 200];
/* Traitで使うメソッド */
protected function getGuard () {
return 'admin';
}
public function checkLogin () {
// セッションがあれば、管理者のトップページに移転する。なければ、ログイン画面となる。
if (Session::has('admin_email')) {
return redirect('/admin/meeting');
}
return view('admin.login');
}
public function logout () {
// セッションを破壊すると、ログイン画面に移転する。
if (Session::has('admin_email')) {
Session::forget('admin_email');
}
return redirect('/admin/login');
protected function getModel () {
return new \App\Models\Admin();
}
}

ファイルの表示

@ -0,0 +1,72 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller, Session;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
// use App\Models\LoginLimits;
trait AuthenticationTrait {
public function login (Request $r) {
// if (null === $r->server('HTTP_USER_AGENT')) {
// return ['status_code' => 400, 'error_message' => ['不正なuser_agent。']];
// }
// if (null !== ($ll = LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->first())) {
// if ((time() >= strtotime($ll->updated_at) + 600) === false) {
// LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->delete();
// }
// if ($ll->fail_number >= 10) {
// return ['status_code' => 400, 'error_message' => ['10回連続で失敗しましたので、10分、ログインロックになりました。']];
// }
// }
$validate = Validator::make($r->all(), [
'email' => 'required|max:255|email',
'password' => 'required|min:8|max:72',
]);
// バリデーションエラー
if ($validate->fails()) {
return ['status_code' => 422, 'error_messages' => $validate->errors()];
}
// 存在しない場合
if (null === ($get = $this->getModel()->where('email', $r->email)->first())) {
return ['status_code' => 400, 'error_message' => ['ログインに失敗しました。10回連続で失敗すると、一定期間ログインできなくなります。']];
}
// パスワードが異なる場合
if (!Hash::check($r->password, $get->password)) {
// if ($ll = LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->first()) {
// LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->update(['fail_number' => $ll->fail_number+1]);
// }
// else {
// LoginLimits::create(['user_agent' => $r->server('HTTP_USER_AGENT'), 'fail_number' => 1]);
// }
return ['status_code' => 400, 'error_message' => ['ログインに失敗しました。10回連続で失敗すると、一定期間ログインできなくなります。']];
}
// セッションを想像する
$guard = $this->getGuard();
if ($r->session()->has($guard)) {
// 認証されたデータのpassword以外を把握する
$login_user_datum = $get->toArray();
unset($login_user_datum['password']);
// セッションに保存する
$r->session()->put($guard, $login_user_datum);
}
return ['status_code' => 200];
}
public function logout () {
// セッションを破壊すると、ログイン画面に移転する。
Session::forget($this->getGuard());
return redirect(request()->route()->action['prefix'].'/login');
}
}

ファイルの表示

@ -0,0 +1,21 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller, Session;
use Illuminate\Http\Request;
trait AuthorizationTrait {
// XXX そもそもこのメソッド、使いますか?
// 認可の処理はMiddlewareでやっているはずなので(このクラスがMiddlewareでcallされている、なら、ギリギリありですが)
public function checkLogin () {
// セッションがあれば、管理者のトップページに移転する。なければ、ログイン画面となる。
if (Session::has($this->getGuard())) {
// XXX リダイレクト先ですが「常に request()->route()->action['prefix'].'/meeting' 」固定ですか?
// XXX そうでない場合は、これも「メソッドの戻り値にする」やり方のほうが自由度があると思います
return redirect(request()->route()->action['prefix'].'/meeting');
}
return view(request()->route()->action['prefix'].'/login');
}
}

ファイルの表示

@ -2,7 +2,7 @@
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Controller, Session;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
@ -14,7 +14,16 @@ use App\Models\MeetingApprovals;
use App\Models\TelActivations;
class ChildrenController extends Controller {
public function login () {}
use AuthenticationTrait;
use AuthorizationTrait;
/* Traitで使うメソッド */
protected function getGuard () {
return 'child';
}
protected function getModel () {
return new \App\Models\Child();
}
public function registerTemporary (Request $r) {
$validate = Validator::make($r->all(), [
@ -30,7 +39,7 @@ class ChildrenController extends Controller {
return ['status_code' => 400, 'error_messages' => ['既に使用されている電話番号です。']];
}
$token = random_bytes(16);
$token = bin2hex(random_bytes(16));
$insert = ['tel' => $r->tel, 'token' => $token];
try {
@ -84,7 +93,6 @@ class ChildrenController extends Controller {
$insert = [
'email' => $r->email,
'tel' => $get->tel,
'tel_verified_at' => date('Y-m-d H:i:s'),
'password' => $password,
'last_name' => $r->last_name,
'first_name' => $r->first_name,
@ -135,7 +143,7 @@ class ChildrenController extends Controller {
$result = [];
$child_select = ['id', 'image', 'last_name', 'first_name'];
if (null === ($list = FatherRelation::select('father_id')->where('father_id', $r->father_id)->orderBy('created_at', 'desc')->get())) {
if (null === ($list = FatherRelation::select('father_id')->where('father_id', (int)$r->father_id)->orderBy('created_at', 'desc')->get())) {
return ['status_code' => 400];
}
@ -152,7 +160,7 @@ class ChildrenController extends Controller {
$result = [];
$child_select = ['id', 'image', 'last_name', 'first_name'];
if (null === ($list = MeetingApprovals::select('child_id')->where('meeting_id', $r->meeting_id)->orderBy('created_at', 'desc')->get())) {
if (null === ($list = MeetingApprovals::select('child_id')->where('meeting_id', (int)$r->meeting_id)->orderBy('created_at', 'desc')->get())) {
return ['status_code' => 400];
}
@ -174,7 +182,7 @@ class ChildrenController extends Controller {
$child_select = ['id', 'image', 'last_name', 'first_name', 'tel'];
$meeting_approvals_select = ['approval_at'];
if (null === ($list = MeetingApprovals::select($meeting_approvals_select)->where('meeting_id', $r->meeting_id)->whereNull('approval_at')->get())) {
if (null === ($list = MeetingApprovals::select($meeting_approvals_select)->where('meeting_id', (int)$r->meeting_id)->whereNull('approval_at')->get())) {
return ['status_code' => 400];
}
@ -217,7 +225,7 @@ class ChildrenController extends Controller {
$father_relation_select = ['hire_at'];
// 親詳細の取得に成功
if (null === ($list = Child::select('id')->where('id', $child_id)->orderBy('created_at', 'desc')->get())) {
if (null === ($list = Child::select('id')->where('id', (int)$child_id)->orderBy('created_at', 'desc')->get())) {
return ['status_code' => 400];
}
@ -225,11 +233,6 @@ class ChildrenController extends Controller {
if (null === ($result[] = Child::select($child_select)->find($l->id))) {
return ['status_code' => 400];
}
if (isset($r->father_id)) {
if (null === ($result[$i]['father_relation'] = FatherRelation::select($father_relation_select)->where('father_id', $r->father_id)->first())) {
return ['status_code' => 400];
}
}
}
return ['status_code' => 200, 'params' => $result];
@ -247,8 +250,12 @@ class ChildrenController extends Controller {
return ['status_code' => 422, 'error_messages' => $validate->errors()];
}
$update = [
'image' => $r->image,
];
try {
Child::where('id', $child_id)->update($r->all());
Child::where('id', (int)$child_id)->update($update);
} catch (\Throwable $e) {
// 失敗
Log::critical($e->getMessage());
@ -266,8 +273,8 @@ class ChildrenController extends Controller {
// バリデーションエラー
$validate = Validator::make($r->all(), [
'email' => 'required|unique:children|max:255|email|alpha_num',
'tel' => 'required|unique:children|max:11|numeric|starts_with:0',
'email' => 'required|max:255|email',
'tel' => 'required|max:11|numeric|starts_with:0',
'last_name' => 'required|max:100',
'first_name' => 'required|max:100',
'company' => 'max:100',
@ -277,8 +284,16 @@ class ChildrenController extends Controller {
return ['status_code' => 422, 'error_messages' => $validate->errors()];
}
$update = [
'email' => $r->email,
'tel' => $r->tel,
'last_name' => $r->last_name,
'first_name' => $r->first_name,
'company' => $r->company,
];
try {
Child::where('id', $child_id)->update($r->all());
Child::where('id', (int)$child_id)->update($update);
} catch (\Throwable $e) {
// 失敗
Log::critical($e->getMessage());
@ -309,8 +324,12 @@ class ChildrenController extends Controller {
return ['status_code' => 422, 'error_messages' => $validate->errors()];
}
$update = [
'password' => Hash::make($r->password),
];
try {
Child::where('id', $child_id)->update($r->all());
Child::where('id', (int)$child_id)->update($update);
} catch (\Throwable $e) {
// 失敗
Log::critical($e->getMessage());
@ -324,7 +343,7 @@ class ChildrenController extends Controller {
public function withdrawal ($child_id) {
// 削除成功
try {
Child::where('id', $child_id)->delete();
Child::where('id', (int)$child_id)->delete();
} catch (\Throwable $e) {
Log::critical($e->getMessage());
return ['status_code' => 400];

ファイルの表示

@ -6,8 +6,10 @@ use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
use App\Models\Contacts;
use App\Mail\ContactsMail;
class ContactsController extends Controller {
public function register (Request $r) {
@ -25,7 +27,11 @@ class ContactsController extends Controller {
];
try {
// DBに入ります。
Contacts::create($insert);
// メールを送ります。
Mail::to($r->email)->cc(config('mail.cc.address'))->bcc(config('mail.bcc.address'))->send(new FathersRegistrationTemporaryMail($r->message));
} catch (\Throwable $e) {
// 失敗
Log::critical($e->getMessage());

ファイルの表示

@ -2,24 +2,36 @@
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Controller, Session;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
use App\Models\Father;
use App\Models\FatherRelation;
use App\Models\EmailActivations;
use App\Models\EmailActivation;
use App\Mail\FathersRegistrationTemporaryMail;
use App\Mail\FathersRegistrationMainMail;
class FathersController extends Controller {
public function login () {}
use AuthenticationTrait;
use AuthorizationTrait;
/* Traitで使うメソッド */
protected function getGuard () {
return 'father';
}
protected function getModel () {
return new \App\Models\Father();
}
public function requestPassword () {}
public function registerTemporary (Request $r) {
$validate = Validator::make($r->all(), [
'email' => 'required|unique:father,email_activations|max:255|email|alpha_num'
'email' => 'required|unique:fathers|unique:email_activations|max:255|email'
]);
if ($validate->fails()) {
@ -28,24 +40,23 @@ class FathersController extends Controller {
}
if ($get = Father::where('email', $r->email)->first()) {
// すでにDBに登録されている場合
// すでにfathersに登録されている場合
return ['status_code' => 400, 'error_messages' => ['入力したメールアドレスは既に登録済みです。同じメールアドレスは使用できません。']];
}
else if ($get = EmailActivations::where('email', $r->email)->first()) {
// すでにDBに登録されている場合
else if ($get = EmailActivation::where('email', $r->email)->first()) {
// すでにemail_activationsに登録されている場合
return ['status_code' => 400, 'error_messages' => ['入力したメールアドレスは既に登録済みです。同じメールアドレスは使用できません。']];
}
else {
$chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
$token = '';
for ($i = 1; $i < 15; $i++) {
$token .= $chars[rand(0,35)];
}
$token = bin2hex(random_bytes(16));
$create = ['email' => $r->email, 'token' => $token, 'ttl' => date('Y-m-d H:i:s', time()+28800)];
try {
EmailActivations::create($create);
// DBに入ります。
EmailActivation::create($create);
// メールを送ります。
Mail::to($r->email)->send(new FathersRegistrationTemporaryMail($token));
} catch (\Throwable $e) {
// 失敗
Log::critical($e->getMessage());
@ -71,25 +82,32 @@ class FathersController extends Controller {
return ['status_code' => 422, 'error_messages' => $validate->errors()];
}
$password = Hash::make($r->password);
if ($get = EmailActivations::where('token', $r->token)->first() && strtotime($get->ttl) > time()) {
// 有効期限が切れている場合
return['status_code' => 401, 'error_messages' => ['仮登録の有効期限が切れました。改めて管理者にお問い合わせいただき、再登録を行ってください。']];
if ($get = EmailActivation::select('email', 'ttl')->where('token', $r->token)->first()) {
if (time() > strtotime($get->ttl)) {
// 有効期限が切れている場合
return['status_code' => 401, 'error_messages' => ['仮登録の有効期限が切れました。改めて管理者にお問い合わせいただき、再登録を行ってください。']];
}
}
try {
// DBの値の準備。
$create = [
'email' => $get->email,
'email_verified_at' => date('Y-m-d H:i:s'),
'password' => $password,
'password' => Hash::make($r->password),
'company' => $r->company,
'image' => $r->image,
'profile' => $r->profile,
'tel' => $r->tel,
];
// DBに入ります。
Father::create($create);
// メールを送ります。
Mail::to($get->email)->send(new FathersRegistrationMainMail());
// email_activationsから削除します。
EmailActivation::where('token', $r->token)->delete();
} catch (\Throwable $e) {
// 本登録に失敗
Log::critical($e->getMessage());
@ -135,12 +153,21 @@ class FathersController extends Controller {
return ['status_code' => 400];
}
<<<<<<< HEAD
// foreach ($list as $i => $l) {
// $result[] = $l;
// if (null === ($result[$i]['relation'] = FatherRelation::select($father_relation_select)->where('father_id', $l->id)->first())) {
// return ['status_code' => 400];
// }
// }
=======
foreach ($list as $i => $l) {
$result[] = $l;
if (null === ($result[$i]['relation'] = FatherRelation::select($father_relation_select)->where('father_id', $l->id)->first())) {
continue;
}
}
>>>>>>> c234cbcd6dbb0d54c6c339a61af0f805f2401a9d
// 親一覧の取得に成功
return ['status_code' => 200, 'params' => $result];
@ -150,7 +177,7 @@ class FathersController extends Controller {
$result = [];
$father_select = ['id', 'company', 'image'];
if (null === ($list = FatherRelation::select('father_id')->where('child_id', $r->child_id)->orderBy('created_at', 'desc')->get())) {
if (null === ($list = FatherRelation::select('father_id')->where('child_id', (int)$r->child_id)->orderBy('created_at', 'desc')->get())) {
// 親一覧の取得に失敗
return ['status_code' => 400];
}
@ -168,7 +195,7 @@ class FathersController extends Controller {
public function detail ($father_id) {
$father_select = ['image', 'email', 'tel', 'profile', 'company'];
if (null === ($result = Father::select($father_select)->where('id', $father_id)->orderBy('created_at', 'desc')->get()->toArray())) {
if (null === ($result = Father::select($father_select)->where('id', (int)$father_id)->orderBy('created_at', 'desc')->get()->toArray())) {
// 親詳細の取得に失敗
return ['status_code' => 400, 'error_messages' => ['親の更新に失敗しました。']];
}
@ -190,8 +217,12 @@ class FathersController extends Controller {
return ['status_code' => 422, 'error_messages' => $validate->errors()];
}
$update = [
'image' => $r->image
];
try {
Father::where('id', $father_id)->update($r->all());
Father::where('id', (int)$father_id)->update($update);
} catch (\Throwable $e) {
// 親プロフィール画像のアップロードに失敗
Log::critical($e->getMessage());
@ -209,18 +240,25 @@ class FathersController extends Controller {
// バリデーションエラー
$validate = Validator::make($r->all(), [
'email' => 'required|unique:fathers|max:255|email|alpha_num',
'email' => 'required|max:255|email',
'company' => 'max:100',
'profile' => 'max:1000',
'tel' => 'required|unique:fathers|max:11|numeric|starts_with:0',
'tel' => 'required|max:11|numeric|starts_with:0',
]);
if ($validate->fails()) {
return ['status_code' => 422, 'error_messages' => $validate->errors()];
}
$update = [
'email' => $r->email,
'company' => $r->company,
'profile' => $r->profile,
'tel' => $r->tel,
];
try {
Father::where('id', $father_id)->update($r->all());
Father::where('id', (int)$father_id)->update($update);
} catch (\Throwable $e) {
// 親プロフィール更新失敗
Log::critical($e->getMessage());
@ -251,8 +289,16 @@ class FathersController extends Controller {
return ['status_code' => 422, 'error_messages' => $validate->errors()];
}
$update = [
'password' => Hash::make($r->password)
];
try {
<<<<<<< HEAD
Father::where('id', $father_id)->update(['password'=>'123']);
=======
Father::where('id', (int)$father_id)->update($update);
>>>>>>> c234cbcd6dbb0d54c6c339a61af0f805f2401a9d
} catch (\Throwable $e) {
// 失敗
Log::critical($e->getMessage());
@ -265,7 +311,7 @@ class FathersController extends Controller {
public function withdrawal ($father_id) {
try {
Father::where('id', $father_id)->delete();
Father::where('id', (int)$father_id)->delete();
} catch (\Throwable $e) {
// 失敗
Log::critical($e->getMessage());
@ -278,7 +324,7 @@ class FathersController extends Controller {
public function delete ($meeting_id) {
try {
Meeting::where('id', $meeting_id)->delete();
Meeting::where('id', (int)$meeting_id)->delete();
} catch (\Throwable $e) {
// 失敗
Log::critical($e->getMessage());

ファイルの表示

@ -528,7 +528,11 @@ class MeetingsController extends Controller {
public function delete ($meeting_id) {
try {
<<<<<<< HEAD
Meeting::where('id', (int)$meeting_id)->delete();
=======
Meetings::where('meeting_id', (int)$meeting_id)->delete();
>>>>>>> c234cbcd6dbb0d54c6c339a61af0f805f2401a9d
} catch (\Throwable $e) {
Log::critical($e->getMessage());
return ['status_code' => 400];

ファイルの表示

@ -20,13 +20,6 @@ class Authenticate extends Middleware
}
public function handle ($request, Closure $next, ...$guard) {
if (!session()->has('admin_email') && $request->path() != 'admin/login') {
return redirect('/admin/login');
}
else if (session()->has('admin_email') && $request->path() == 'admin/login') {
return redirect('/admin/meeting');
}
return $next($request);
}
}

23
backend/app/Mail/ContactsMail.php ノーマルファイル
ファイルの表示

@ -0,0 +1,23 @@
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class ContactsMail extends Mailable {
use Queueable, SerializesModels;
private $message;
public function __construct ($message) {
$this->message = $message;
}
public function build () {
return $this->subject('お問い合わせありがとうございます。')->markdown('emails.contacts', [
'message' => $this->message
]);
}
}

ファイルの表示

@ -0,0 +1,16 @@
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class FathersRegistrationMainMail extends Mailable {
use Queueable, SerializesModels;
public function build () {
return $this->subject('本登録が完了しました。')->markdown('emails.fathers.registration.main');
}
}

ファイルの表示

@ -0,0 +1,23 @@
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class FathersRegistrationTemporaryMail extends Mailable {
use Queueable, SerializesModels;
private $token;
public function __construct ($token) {
$this->token = $token;
}
public function build () {
return $this->subject('仮登録が完了しました。')->markdown('emails.fathers.registration.temporary', [
'token' => $this->token
]);
}
}

ファイルの表示

@ -8,6 +8,6 @@ use Illuminate\Foundation\Auth\User as Authenticatable;
class Child extends Authenticatable
{
use HasFactory;
protected $fillable = ['father_id', 'title', 'text', 'memo', 'pdf'];
protected $fillable = ['email', 'password', 'father_id', 'title', 'text', 'memo', 'pdf'];
protected $hidden = ['password'];
}

ファイルの表示

@ -8,4 +8,6 @@ use Illuminate\Database\Eloquent\Model;
class EmailActivation extends Model
{
use HasFactory;
protected $fillable = ['email', 'token', 'ttl'];
protected $attributes = ['type' => 0];
}

ファイルの表示

@ -8,5 +8,6 @@ use Illuminate\Foundation\Auth\User as Authenticatable;
class Father extends Authenticatable
{
use HasFactory;
protected $fillable = ['email', 'password', 'company', 'image', 'profile', 'tel'];
protected $hidden = ['password'];
}

ファイルの表示

@ -87,6 +87,18 @@ return [
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
'owner' => [
'address' => env('MAIL_OWNER_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_OWNER_NAME', 'Example'),
],
'cc' => [
'address' => env('MAIL_CC_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_CC_NAME', 'Example'),
],
'bcc' => [
'address' => env('MAIL_BCC_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_BCC_NAME', 'Example'),
],
/*
|--------------------------------------------------------------------------

ファイルの表示

@ -16,6 +16,6 @@ class AdminsTableSeeder extends Seeder
public function run()
{
\App\Models\Admin::factory()->count(10)->create();
\App\Models\Admin::create(['email' => 'chankan77@gmail.com', 'password' => Hash::make('password')]);
\App\Models\Admin::create(['email' => config('mail.owner.address'), 'password' => Hash::make('password')]);
}
}

ファイルの表示

@ -0,0 +1,10 @@
@component('mail::message')
# お問い合わせありがとうございます。
お問い合わせありがとうございます。キキカンサポートです。
【お問い合わせ内容】
{{ $message }}
上記、お問い合わせを受付させて頂きました。通常1〜2日にて回答のご連絡をさせて頂きます。
@endcomponent

ファイルの表示

@ -0,0 +1,11 @@
@component('mail::message')
# 本登録が完了しました。
サイトへのアカウント本登録が完了しました。
以下のリンクからログインしてくださいませ。
@component('mail::button', ['url' => env('APP_URL').'/p-account/login'])
{{ env('APP_URL') }}/p-account/login
@endcomponent
@endcomponent

ファイルの表示

@ -0,0 +1,11 @@
@component('mail::message')
# 仮登録が完了しました。
サイトへのアカウント仮登録が完了しました。
以下のリンクからログインして、本登録を完了させてください。
@component('mail::button', ['url' => env('APP_URL').'/p-account/register/'.$token])
{{ env('APP_URL') }}/p-account/register/{{ $token }}
@endcomponent
@endcomponent

ファイルの表示

@ -30,7 +30,7 @@ Route::group(['prefix' => 'admin'], function () {
Route::put('/updateProfile/{father_id}', '\App\Http\Controllers\Api\FathersController@updateProfile');
Route::put('/updatePassword/{father_id}', '\App\Http\Controllers\Api\FathersController@updatePassword');
Route::get('/detail/{father_id}', '\App\Http\Controllers\Api\FathersController@detail');
Route::delete('/delete/{father_id}', '\App\Http\Controllers\Api\FathersController@withdrawal');
Route::delete('/delete', '\App\Http\Controllers\Api\FathersController@withdrawal');
Route::post('/registerTemporary', '\App\Http\Controllers\Api\FathersController@registerTemporary');
});
@ -48,7 +48,7 @@ Route::group(['prefix' => 'admin'], function () {
// MeetingsController
Route::group(['prefix' => 'meetings'], function () {
Route::get('/list', '\App\Http\Controllers\Api\MeetingsController@list');
Route::post('/search', '\App\Http\Controllers\Api\MeetingsController@search');
Route::get('/search', '\App\Http\Controllers\Api\MeetingsController@search');
Route::get('/detail/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@detail');
Route::put('/update/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@update');
Route::delete('/delete/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@delete');
@ -65,106 +65,104 @@ Route::group(['prefix' => 'admin'], function () {
Route::delete('/delete/{meeting_id}', '\App\Http\Controllers\Api\MeetingApprovalsController@delete');
});
});
});
});
// ContactsController
//// 不明
Route::post('/contacts/register', '\App\Http\Controllers\Api\ContactsController@register');
// ContactsController
Route::post('/contacts/register', '\App\Http\Controllers\Api\ContactsController@register');
Route::group(['prefix' => 'fathers'], function () {
// FathersController
Route::post('/registerMain', '\App\Http\Controllers\Api\FathersController@registerMain')->name('fatherregistermain');
Route::post('/requestPassword', '\App\Http\Controllers\Api\FathersController@requestPassword')->name('fatherrequestpassword');
// Route::post('/login', '\App\Http\Controllers\Api\FathersController@login')->name('fatherlogin');
Route::group(['prefix' => 'fathers'], function () {
// FathersController
Route::post('/registerMain', '\App\Http\Controllers\Api\FathersController@registerMain')->name('fatherregistermain');
Route::post('/requestPassword', '\App\Http\Controllers\Api\FathersController@requestPassword')->name('fatherrequestpassword');
Route::post('/login', '\App\Http\Controllers\Api\FathersController@login')->name('fatherlogin');
Route::group(['middleware' => 'auth:fathers'], function () {
Route::put('/updateImage/{father_id}', '\App\Http\Controllers\Api\FathersController@updateImage');
Route::put('/updateProfile/{father_id}', '\App\Http\Controllers\Api\FathersController@updateProfile');
Route::put('/updatePassword/{father_id}', '\App\Http\Controllers\Api\FathersController@updatePassword');
Route::delete('/withdrawal', '\App\Http\Controllers\Api\FathersController@withdrawal');
Route::group(['middleware' => 'auth:fathers'], function () {
Route::put('/updateImage/{father_id}', '\App\Http\Controllers\Api\FathersController@updateImage');
Route::put('/updateProfile/{father_id}', '\App\Http\Controllers\Api\FathersController@updateProfile');
Route::put('/updatePassword/{father_id}', '\App\Http\Controllers\Api\FathersController@updatePassword');
Route::delete('/withdrawal', '\App\Http\Controllers\Api\FathersController@withdrawal');
// ChildrenController
Route::group(['prefix' => 'children'], function () {
Route::get('/listOfFather', '\App\Http\Controllers\Api\ChildrenController@listOfFather');
Route::get('/listOfMeeting', '\App\Http\Controllers\Api\ChildrenController@listOfMeeting');
Route::post('/listOfMeetingNotifyUnapprovel', '\App\Http\Controllers\Api\ChildrenController@listOfMeetingNotifyUnapprovel');
Route::post('/listOfMeetingNotifyApprovel', '\App\Http\Controllers\Api\ChildrenController@listOfMeetingNotifyApprovel');
Route::get('/detail/{child_id}', '\App\Http\Controllers\Api\ChildrenController@detail');
// ChildrenController
Route::group(['prefix' => 'children'], function () {
Route::get('/listOfFather', '\App\Http\Controllers\Api\ChildrenController@listOfFather');
Route::get('/listOfMeeting', '\App\Http\Controllers\Api\ChildrenController@listOfMeeting');
Route::post('/listOfMeetingNotifyUnapprovel', '\App\Http\Controllers\Api\ChildrenController@listOfMeetingNotifyUnapprovel');
Route::post('/listOfMeetingNotifyApprovel', '\App\Http\Controllers\Api\ChildrenController@listOfMeetingNotifyApprovel');
Route::get('/detail/{child_id}', '\App\Http\Controllers\Api\ChildrenController@detail');
});
// MeetingsController
Route::group(['prefix' => 'meetings'], function () {
Route::post('/register', '\App\Http\Controllers\Api\MeetingsController@register');
Route::post('/registerFavorite', '\App\Http\Controllers\Api\MeetingsController@registerFavorite');
Route::get('/listOfCompleteOfFather', '\App\Http\Controllers\Api\MeetingsController@listOfCompleteOfFather');
Route::get('/listOfIncompleteOfFather', '\App\Http\Controllers\Api\MeetingsController@listOfIncompleteOfFather');
Route::get('/listOfFavoriteOfFather', '\App\Http\Controllers\Api\MeetingsController@listOfFavoriteOfFather');
Route::get('/listOfNonFavoriteOfFather', '\App\Http\Controllers\Api\MeetingsController@listOfNonFavoriteOfFather');
Route::get('/searchOfCompleteOfFather', '\App\Http\Controllers\Api\MeetingsController@searchOfCompleteOfFather');
Route::get('/searchOfIncompleteOfFather', '\App\Http\Controllers\Api\MeetingsController@searchOfIncompleteOfFather');
Route::get('/detail/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@detail');
Route::put('/update/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@update');
Route::delete('/delete/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@delete');
// MeetingImagesController
Route::group(['prefix' => 'images'], function () {
Route::post('/register', '\App\Http\Controllers\Api\MeetingImagesController@register');
Route::delete('/delete/{meeting_id}', '\App\Http\Controllers\Api\MeetingImagesController@delete');
});
// MeetingsController
Route::group(['prefix' => 'meetings'], function () {
Route::post('/register', '\App\Http\Controllers\Api\MeetingsController@register');
Route::post('/registerFavorite', '\App\Http\Controllers\Api\MeetingsController@registerFavorite');
Route::get('/listOfCompleteOfFather', '\App\Http\Controllers\Api\MeetingsController@listOfCompleteOfFather');
Route::get('/listOfIncompleteOfFather', '\App\Http\Controllers\Api\MeetingsController@listOfIncompleteOfFather');
Route::get('/listOfFavoriteOfFather', '\App\Http\Controllers\Api\MeetingsController@listOfFavoriteOfFather');
Route::get('/listOfNonFavoriteOfFather', '\App\Http\Controllers\Api\MeetingsController@listOfNonFavoriteOfFather');
Route::get('/searchOfCompleteOfFather', '\App\Http\Controllers\Api\MeetingsController@searchOfCompleteOfFather');
Route::get('/searchOfIncompleteOfFather', '\App\Http\Controllers\Api\MeetingsController@searchOfIncompleteOfFather');
Route::get('/detail/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@detail');
Route::put('/update/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@update');
Route::delete('/delete/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@delete');
// MeetingImagesController
Route::group(['prefix' => 'images'], function () {
Route::post('/register', '\App\Http\Controllers\Api\MeetingImagesController@register');
Route::delete('/delete/{meeting_id}', '\App\Http\Controllers\Api\MeetingImagesController@delete');
});
// MeetingApprovalsController
Route::group(['prefix' => 'approvals'], function () {
// Route::post('/register/{meeting_id}', '\App\Http\Controllers\Api\MeetingApprovalsController@register');
// Route::delete('/delete/{meeting_id}', '\App\Http\Controllers\Api\MeetingApprovalsController@delete');
Route::post('/listChildrenOfMeeting', '\App\Http\Controllers\Api\MeetingApprovalsController@listChildrenOfMeeting');
Route::get('/listChildrenOfApprovel', '\App\Http\Controllers\Api\MeetingApprovalsController@listChildrenOfApprovel');
Route::get('/listChildrenOfUnapprovel', '\App\Http\Controllers\Api\MeetingApprovalsController@listChildrenOfUnapprovel');
});
});
// FatherRelationsController
Route::group(['prefix' => 'relations'], function () {
Route::post('/register', '\App\Http\Controllers\Api\FatherRelationsController@register');
Route::put('/updateHireDate/{child_id}', '\App\Http\Controllers\Api\FatherRelationsController@updateHireDate');
Route::delete('/deleteRelationChild/{child_id}', '\App\Http\Controllers\Api\FatherRelationsController@deleteRelationChild');
// MeetingApprovalsController
Route::group(['prefix' => 'approvals'], function () {
// Route::post('/register/{meeting_id}', '\App\Http\Controllers\Api\MeetingApprovalsController@register');
// Route::delete('/delete/{meeting_id}', '\App\Http\Controllers\Api\MeetingApprovalsController@delete');
Route::post('/listChildrenOfMeeting', '\App\Http\Controllers\Api\MeetingApprovalsController@listChildrenOfMeeting');
Route::get('/listChildrenOfApprovel', '\App\Http\Controllers\Api\MeetingApprovalsController@listChildrenOfApprovel');
Route::get('/listChildrenOfUnapprovel', '\App\Http\Controllers\Api\MeetingApprovalsController@listChildrenOfUnapprovel');
});
});
});
// ChildrenController
Route::group(['prefix' => 'children'], function () {
Route::post('/registerTemporary', '\App\Http\Controllers\Api\ChildrenController@registerTemporary')->name('childrenregistertemporary');
Route::post('/registerMain', '\App\Http\Controllers\Api\ChildrenController@registerMain')->name('childrenregistermain');
// Route::post('/requestPassword', '\App\Http\Controllers\Api\ChildrenController@requestPassword')->name('childrenrequestpassword');
// Route::post('/login', '\App\Http\Controllers\Api\ChildrenController@login')->name('childrenlogin');
Route::group(['middleware' => 'auth:children'], function () {
Route::get('/detail/{child_id}', '\App\Http\Controllers\Api\ChildrenController@detail');
Route::put('/updateImage/{child_id}', '\App\Http\Controllers\Api\ChildrenController@updateImage');
Route::put('/updateProfile/{child_id}', '\App\Http\Controllers\Api\ChildrenController@updateProfile');
Route::put('/updatePassword/{child_id}', '\App\Http\Controllers\Api\ChildrenController@updatePassword');
Route::delete('/withdrawal', '\App\Http\Controllers\Api\ChildrenController@withdrawal');
// FathersController
Route::group(['prefix' => 'fathers'], function () {
Route::get('/listOfChild', '\App\Http\Controllers\Api\FathersController@listOfChild');
Route::get('/detail/{father_id}', '\App\Http\Controllers\Api\FathersController@detail');
});
// MeetingsController
Route::group(['prefix' => 'meetings'], function () {
Route::get('/listOfApprovalOfChild', '\App\Http\Controllers\Api\MeetingsController@listOfApprovalOfChild');
Route::get('/listOfNonApprovalOfChild', '\App\Http\Controllers\Api\MeetingsController@listOfNonApprovalOfChild');
Route::get('/searchOfApprovalOfChild', '\App\Http\Controllers\Api\MeetingsController@searchOfApprovalOfChild');
Route::get('/searchOfNonApprovalOfChild', '\App\Http\Controllers\Api\MeetingsController@searchOfNonApprovalOfChild');
Route::get('/detail/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@detail');
// MeetingApprovalsController
Route::group(['prefix' => 'approvals'], function () {
Route::post('/registerApproval', '\App\Http\Controllers\Api\MeetingApprovalsController@registerApproval');
});
});
// FatherRelationsController
Route::group(['prefix' => 'relations'], function () {
Route::post('/register', '\App\Http\Controllers\Api\FatherRelationsController@register');
Route::put('/updateHireDate/{child_id}', '\App\Http\Controllers\Api\FatherRelationsController@updateHireDate');
Route::delete('/deleteRelationChild/{child_id}', '\App\Http\Controllers\Api\FatherRelationsController@deleteRelationChild');
});
});
});
// ChildrenController
Route::group(['prefix' => 'children'], function () {
Route::post('/registerTemporary', '\App\Http\Controllers\Api\ChildrenController@registerTemporary')->name('childrenregistertemporary');
Route::post('/registerMain', '\App\Http\Controllers\Api\ChildrenController@registerMain')->name('childrenregistermain');
// Route::post('/requestPassword', '\App\Http\Controllers\Api\ChildrenController@requestPassword')->name('childrenrequestpassword');
// Route::post('/login', '\App\Http\Controllers\Api\ChildrenController@login')->name('childrenlogin');
Route::group(['middleware' => 'auth:children'], function () {
Route::get('/detail/{child_id}', '\App\Http\Controllers\Api\ChildrenController@detail');
Route::put('/updateImage/{child_id}', '\App\Http\Controllers\Api\ChildrenController@updateImage');
Route::put('/updateProfile/{child_id}', '\App\Http\Controllers\Api\ChildrenController@updateProfile');
Route::put('/updatePassword/{child_id}', '\App\Http\Controllers\Api\ChildrenController@updatePassword');
Route::delete('/withdrawal', '\App\Http\Controllers\Api\ChildrenController@withdrawal');
// FathersController
Route::group(['prefix' => 'fathers'], function () {
Route::get('/listOfChild', '\App\Http\Controllers\Api\FathersController@listOfChild');
Route::get('/detail/{father_id}', '\App\Http\Controllers\Api\FathersController@detail');
});
// MeetingsController
Route::group(['prefix' => 'meetings'], function () {
Route::get('/listOfApprovalOfChild', '\App\Http\Controllers\Api\MeetingsController@listOfApprovalOfChild');
Route::get('/listOfNonApprovalOfChild', '\App\Http\Controllers\Api\MeetingsController@listOfNonApprovalOfChild');
Route::get('/searchOfApprovalOfChild', '\App\Http\Controllers\Api\MeetingsController@searchOfApprovalOfChild');
Route::get('/searchOfNonApprovalOfChild', '\App\Http\Controllers\Api\MeetingsController@searchOfNonApprovalOfChild');
Route::get('/detail/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@detail');
// MeetingApprovalsController
Route::group(['prefix' => 'approvals'], function () {
Route::post('/registerApproval', '\App\Http\Controllers\Api\MeetingApprovalsController@registerApproval');
});
});
});
});

ファイルの表示

@ -17,25 +17,42 @@ Route::get('/', function () {
return view('welcome');
});
Route::get('/p-account/meeting', function () {return view('p_account.index');});
Route::get('/p-account/meeting/detail/{meeting_id}', function () {return view('p_account.index');});
Route::get('/p-account/meeting/new', function () {return view('p_account.index');});
Route::get('/p-account/meeting/edit/{child_id}', function () {return view('p_account.index');});
Route::get('/p-account/favorite', function () {return view('p_account.index');});
Route::get('/p-account/search', function () {return view('p_account.index');});
Route::get('/p-account/child', function () {return view('p_account.index');});
Route::get('/p-account/child/add', function () {return view('p_account.index');});
Route::get('/p-account/child/edit/hire-date/{child_id}', function () {return view('p_account.index');});
Route::get('/p-account/child/detail/{child_id}', function () {return view('p_account.index');});
Route::get('/p-account/profile', function () {return view('p_account.index');});
Route::get('/p-account/profile/edit/{father_id}', function () {return view('p_account.index');});
Route::get('/p-account/profile/edit/password/{father_id}', function () {return view('p_account.index');});
Route::get('/p-account/profile/withdrawal', function () {return view('p_account.index');});
Route::get('/p-account/profile/withdrawal/complete', function () {return view('p_account.index');});
Route::get('/p-account', function () {return view('p_account.index');});
Route::group(['prefix' => 'p-account'], function () {
Route::get('/', function () {return view('p_account.index');});
Route::get('/contact-us', function () { return view('pages.contact.index'); });
Route::get('/contact-us/complete/', function () { return view('pages.contact.index'); });
Route::group(['middleware' => 'auth:fathers'], function () {
Route::group(['prefix' => 'meeting'], function () {
Route::get('/', function () {return view('p_account.index');});
Route::get('/detail/{meeting_id}', function () {return view('p_account.index');});
Route::get('/new', function () {return view('p_account.index');});
Route::get('/edit/{child_id}', function () {return view('p_account.index');});
});
Route::get('/favorite', function () {return view('p_account.index');});
Route::get('/search', function () {return view('p_account.index');});
Route::group(['prefix' => 'child'], function () {
Route::get('/', function () {return view('p_account.index');});
Route::get('/add', function () {return view('p_account.index');});
Route::get('/edit/hire-date/{child_id}', function () {return view('p_account.index');});
Route::get('/detail/{child_id}', function () {return view('p_account.index');});
});
Route::group(['prefix' => 'profile'], function () {
Route::get('/', function () {return view('p_account.index');});
Route::group(['prefix' => 'edit'], function () {
Route::get('/password/{father_id}', function () {return view('p_account.index');});
Route::get('/{father_id}', function () {return view('p_account.index');});
});
Route::group(['prefix' => 'withdrawal'], function () {
Route::get('/', function () {return view('p_account.index');});
Route::get('/complete', function () {return view('p_account.index');});
});
});
});
});
Route::group(['prefix' => 'contact-us'], function () {
Route::get('/', function () { return view('pages.contact.index'); });
Route::get('/complete', function () { return view('pages.contact.index'); });
});
Route::get('/unknown-error ', function () { return view('pages.contact.index'); });
//--------------------------------Child Account--------------------------------------//
Route::get('/register-temporary/c-account', function () { return view('c_account.auth'); });