ゲームの追加・編集・削除機能性

このコミットが含まれているのは:
テクニカル諏訪子 2020-10-08 09:12:30 +09:00
コミット 1a3fd47640
8個のファイルの変更194行の追加6行の削除

ファイルの表示

@ -2,20 +2,110 @@
namespace App\Http\Controllers\Video;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
// use Illuminate\Support\Facades\Log;
class Game {
private $menu;
private $user;
private $suc;
private $err;
public function __construct ($m, $u) {
$this->menu = $m;
$this->user = $u;
$this->suc = '';
$this->err = '';
}
public function index () {
$res = DB::table('vid_game')->get();
if (!$res) return notfound($this->menu, $this->user, $res);
return view('pages.site.video.game', ['res' => $res, 'menu' => $this->menu, 'user' => $this->user]);
return view('pages.site.video.game', ['res' => $res, 'menu' => $this->menu, 'user' => $this->user, 'err' => $this->err, 'suc' => $this->suc]);
}
public function add (Request $r) {
if ($this->user && $this->user->perm['blg_addpost']) {
$err = '';
$res = '';
$frm = array('name' => '', 'slug' => '');
if (isset($r->submit)) {
// フォームの値を保存して
$frm['platform_id'] = 0;
$frm['name'] = $r->name;
$frm['slug'] = $r->slug;
// 件名、文章又はスラッグがなければ、エラーを出て
$verify = array('ゲーム名' => $r->name, 'スラッグ' => $r->slug);
$incomplete = array();
foreach ($verify as $k => $v) { if (is_null($v) || empty($v) || !isset($v)) $incomplete[] = $k; }
if (count($incomplete) > 0) $err = implode('、', $incomplete).'をご入力下さい。';
// スラッグが既に存在したら、エラーを出て
$sl = DB::table('vid_game')->select('slug')->where('slug', $r->slug)->first();
if ($sl && $sl->slug == $r->slug) $err = 'このスラッグがもう存在しています。';
// エラーがあったら、フォームに戻って。なければ、データベースに保存したり、ページ又はポストへ移転して
if (!empty($err)) return view('pages.site.video.game.add', ['res' => $res, 'menu' => $this->menu, 'user' => $this->user, 'err' => $err, 'frm' => $frm]);
else {
// できたの?
if ($res = DB::table('vid_game')->insert($frm)) return redirect('/video/'.$r->slug);
else {
// やれやれ…
return view('pages.site.video.game.add', ['res' => $res, 'menu' => $this->menu, 'user' => $this->user, 'err' => $err, 'frm' => $frm]);
}
}
}
return view('pages.site.video.game.add', ['res' => $res, 'menu' => $this->menu, 'user' => $this->user, 'err' => $err, 'frm' => $frm]);
}
return redirect('');
}
public function delete (Request $r) {
if ($this->user->perm['blg_delpost']) {
return DB::table('vid_game')->where('slug', $r->slug)->delete();
}
return '許可がありません。';
}
public function edit (Request $r) {
if ($this->user && $this->user->perm['blg_addpost']) {
$frm = DB::table('vid_game')->where('slug', $r->slug)->first();
$err = '';
$res = '';
if (isset($r->submit)) {
// フォームの値を保存して
$frm->name = $r->name;
$frm->slug = $r->slug;
// 件名、文章又はスラッグがなければ、エラーを出て
$verify = array('ゲーム名' => $r->name, 'スラッグ' => $r->slug);
$incomplete = array();
foreach ($verify as $k => $v) { if (is_null($v) || empty($v) || !isset($v)) $incomplete[] = $k; }
if (count($incomplete) > 0) $err = implode('、', $incomplete).'をご入力下さい。';
// エラーがあったら、フォームに戻って。なければ、データベースに保存したり、ページ又はポストへ移転して
if (!empty($err)) return view('pages.site.video.game.edit', ['res' => $res, 'menu' => $this->menu, 'user' => $this->user, 'err' => $err, 'frm' => $frm]);
else {
// できたの?
if ($res = DB::table('vid_game')->where('slug', $r->slug)->update((array)$frm)) return redirect('/video/'.$r->slug);
else {
// やれやれ…
$err = '編集失敗…';
return view('pages.site.video.game.edit', ['res' => $res, 'menu' => $this->menu, 'user' => $this->user, 'err' => $err, 'frm' => $frm]);
}
}
}
return view('pages.site.video.game.edit', ['res' => $res, 'menu' => $this->menu, 'user' => $this->user, 'err' => $err, 'frm' => $frm]);
}
return redirect('');
}
}

ファイルの表示

@ -1,6 +1,7 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
// use Illuminate\Support\Facades\Log;
use App\Http\Controllers\AuthController;
@ -39,4 +40,34 @@ class VideoController extends Controller {
$r = new Prayer($this->menu, $this->cook, $this->user);
return $r->index($vid);
}
public function addGame (Request $rr) {
$r = new Game($this->menu, $this->user);
return $r->add($rr);
}
public function delGame (Request $rr) {
$r = new Game($this->menu, $this->user);
return $r->delete($rr);
}
public function editGame (Request $rr) {
$r = new Game($this->menu, $this->user);
return $r->edit($rr);
}
public function addVideo (Request $rr) {
$r = new VideoTable($this->menu, $this->user);
return $r->add($rr);
}
public function delVideo (Request $rr) {
$r = new VideoTable($this->menu, $this->user);
return $r->delete($rr);
}
public function editVideo (Request $rr) {
$r = new VideoTable($this->menu, $this->user);
return $r->edit($rr);
}
}

ファイルの表示

@ -1,6 +1,6 @@
<template>
<div class="col">
<button @click="show = true" class="btn btn-block btn-danger">ゲームの削除</button>
<button @click="show = true" class="btn btn-block btn-danger">削除</button>
<span v-if="show">
<vue-draggable-resizable style="border: 0px solid #232629;" :drag-handle="'.drag-handle'" class-name-handle="resize-handle" class="disco" :x="-500" :y="10" :z="99999999">
<div style="width: 100%; position: relative;">
@ -42,7 +42,7 @@
},
watch: { text (x) { localStorage.shotanote = x; } },
methods: {
del () { axios.post('/api/game/del', { slug: this.slug }).then(() => { window.location.href = '/'; }); },
del () { axios.post('/api/game/del', { slug: this.slug }).then(() => { window.location.href = '/video'; }); },
onResize: function (x, y, width, height) {
this.x = x
this.y = y

ファイルの表示

@ -163,7 +163,7 @@
<div class="col"><a href="/video/{{ $current }}/edit" class="btn btn-block btn-warning">動画の編集</a></div>
@endif
@if ($current != '' && $slug != '' && $slug == $current && $user->perm['blg_delpost'])
<delete-video slug="$current" />
<delete-video slug="{{ $current }}" />
@endif
</div>
@endif

ファイルの表示

@ -12,7 +12,7 @@
<table class="table table-hover table-dark">
<thead>
<tr>
<th scope="col">ゲーム名</th>
<th scope="col" width="70%">ゲーム名</th>
@if (isset($user->perm) && ($user->perm['blg_editpost'] || $user->perm['blg_delpost']))
<th scope="col"></th>
<th scope="col"></th>
@ -24,7 +24,7 @@
<td scope="row"><a href="/video/{{ $r->slug }}">{{ $r->name }}</a></td>
@if (isset($user->perm) && ($user->perm['blg_editpost'] || $user->perm['blg_delpost']))
<td scope="row"><a href="/video/game/{{$r->slug}}/edit" class="btn btn-block btn-warning">編集</a></td>
<td scope="row"><a href="/video/game/{{$r->slug}}/delete" class="btn btn-block btn-danger">削除</a></td>
<td scope="row"><delete-game slug="{{ $r->slug }}" /></td>
@endif
</tr>
@endforeach

ファイルの表示

@ -0,0 +1,30 @@
@extends('layouts.site')
@section('content')
<div class="within">
<div class="bar">ゲームの追加</div>
<div class="back">
@if ($err)
<div class="alert alert-danger" role="alert">
{{ $err }}
</div>
@endif
<form method="POST" action="/video/game/add">
@csrf
<div class="row body">
<div class="col-md-3"><b>ゲーム名</b></div>
<div class="col"><input id="name" name="name" type="text" class="form-control" value="{{ $frm['name'] }}" /></div>
</div>
<div class="row body">
<div class="col-md-3"><b>スラッグ</b></div>
<div class="col"><input id="slug" name="slug" type="text" class="form-control" value="{{ $frm['slug'] }}" /></div>
</div>
<div class="row body" style="margin-top: 24px;">
<div class="col"><input name="submit" type="submit" class="btn btn-success btn-block" value="送信" /></div>
</div>
</form>
</div>
</div>
@endsection

ファイルの表示

@ -0,0 +1,27 @@
@extends('layouts.site')
@section('content')
<div class="within">
<div class="bar">ゲームの追加</div>
<div class="back">
@if ($err)
<div class="alert alert-danger" role="alert">
{{ $err }}
</div>
@endif
<form method="POST" action="/video/game/{{ $frm->slug }}/edit">
@csrf
<div class="row body">
<div class="col-md-3"><b>ゲーム名</b></div>
<div class="col"><input id="name" name="name" type="text" class="form-control" value="{{ $frm->name }}" /></div>
</div>
<div class="col"><input id="slug" name="slug" type="hidden" class="form-control" value="{{ $frm->slug }}" /></div>
<div class="row body" style="margin-top: 24px;">
<div class="col"><input name="submit" type="submit" class="btn btn-success btn-block" value="送信" /></div>
</div>
</form>
</div>
</div>
@endsection

ファイルの表示

@ -21,4 +21,14 @@ Route::get('/video', 'VideoController@index');
Route::get('/video/{slug}', 'VideoController@table');
Route::get('/video/play/{vid}', 'VideoController@prayer');
Route::get('/video/game/add', 'VideoController@addGame');
Route::post('/video/game/add', 'VideoController@addGame');
Route::get('/video/game/{slug}/edit', 'VideoController@editGame');
Route::post('/video/game/{slug}/edit', 'VideoController@editGame');
Route::get('/video/play/add', 'VideoController@addVideo');
Route::post('/video/play/add', 'VideoController@addVideo');
Route::get('/video/play/{slug}/edit', 'VideoController@editVideo');
Route::post('/video/play/{slug}/edit', 'VideoController@editVideo');
Route::get('/{slug}', 'HomeController@page');