From 94f051dff618fc3293e1d9fdc3f7f1a19ba9b7e0 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Mon, 4 Mar 2019 21:09:11 +0800 Subject: [PATCH] Add issue creation form --- app/Entities/Projects/Issue.php | 2 +- app/Http/Controllers/Projects/IssueController.php | 24 +++++++++++++++++ .../2019_03_03_210017_create_issues_table.php | 1 + resources/views/projects/issues/create.blade.php | 30 ++++++++++++++++++++++ routes/web.php | 3 +++ routes/web/projects.php | 2 ++ tests/Feature/Projects/ProjectIssuesTest.php | 2 +- 7 files changed, 62 insertions(+), 2 deletions(-) create mode 100755 resources/views/projects/issues/create.blade.php diff --git a/app/Entities/Projects/Issue.php b/app/Entities/Projects/Issue.php index 44f1658..877c7b3 100644 --- a/app/Entities/Projects/Issue.php +++ b/app/Entities/Projects/Issue.php @@ -6,5 +6,5 @@ use Illuminate\Database\Eloquent\Model; class Issue extends Model { - // + protected $fillable = ['project_id', 'title', 'body', 'creator_id']; } diff --git a/app/Http/Controllers/Projects/IssueController.php b/app/Http/Controllers/Projects/IssueController.php index fe977e1..7f70e94 100644 --- a/app/Http/Controllers/Projects/IssueController.php +++ b/app/Http/Controllers/Projects/IssueController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers\Projects; +use Illuminate\Http\Request; +use App\Entities\Projects\Issue; use App\Entities\Projects\Project; use App\Http\Controllers\Controller; @@ -13,4 +15,26 @@ class IssueController extends Controller return view('projects.issues', compact('project', 'issues')); } + + public function create(Project $project) + { + return view('projects.issues.create', compact('project')); + } + + public function store(Request $request, Project $project) + { + $issueData = $request->validate([ + 'title' => 'required|max:60', + 'body' => 'required|max:255', + ]); + Issue::create([ + 'project_id' => $project->id, + 'creator_id' => auth()->id(), + 'title' => $issueData['title'], + 'body' => $issueData['body'], + ]); + flash(__('issue.created'), 'success'); + + return redirect()->route('projects.issues.index', $project); + } } diff --git a/database/migrations/2019_03_03_210017_create_issues_table.php b/database/migrations/2019_03_03_210017_create_issues_table.php index d2cf1ab..f67ddbf 100644 --- a/database/migrations/2019_03_03_210017_create_issues_table.php +++ b/database/migrations/2019_03_03_210017_create_issues_table.php @@ -18,6 +18,7 @@ class CreateIssuesTable extends Migration $table->unsignedInteger('project_id'); $table->string('title', 60); $table->string('body'); + $table->unsignedInteger('creator_id'); $table->timestamps(); }); } diff --git a/resources/views/projects/issues/create.blade.php b/resources/views/projects/issues/create.blade.php new file mode 100755 index 0000000..b3deedb --- /dev/null +++ b/resources/views/projects/issues/create.blade.php @@ -0,0 +1,30 @@ +@extends('layouts.project') + +@section('subtitle', __('issue.create')) + +@section('action-buttons') +@can('create', new App\Entities\Projects\Job) + {!! html_link_to_route('projects.issues.create', __('issue.create'), $project, ['class' => 'btn btn-success', 'icon' => 'plus']) !!} +@endcan +@endsection + +@section('content-project') + +
+
+ {{ Form::open(['route' => ['projects.issues.store', $project]]) }} +
+

{{ __('issue.create') }}

+
+ {!! FormField::text('title', ['label' => __('issue.title')]) !!} + {!! FormField::textarea('body', ['label' => __('issue.body')]) !!} +
+ +
+ {{ Form::close() }} +
+
+@endsection diff --git a/routes/web.php b/routes/web.php index e7922bc..4fd2e73 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,4 +1,7 @@ runningUnitTests()) { + auth()->loginUsingId(1); +} require __DIR__.'/web/pages.php'; require __DIR__.'/web/users.php'; diff --git a/routes/web/projects.php b/routes/web/projects.php index 61fab86..79a2847 100644 --- a/routes/web/projects.php +++ b/routes/web/projects.php @@ -49,6 +49,8 @@ Route::group(['middleware' => ['auth'], 'namespace' => 'Projects'], function () * Project Issues Routes */ Route::get('projects/{project}/issues', 'IssueController@index')->name('projects.issues.index'); + Route::get('projects/{project}/issues/create', 'IssueController@create')->name('projects.issues.create'); + Route::post('projects/{project}/issues', 'IssueController@store')->name('projects.issues.store'); /* * Tasks Routes diff --git a/tests/Feature/Projects/ProjectIssuesTest.php b/tests/Feature/Projects/ProjectIssuesTest.php index 59c1ecf..0e2b488 100644 --- a/tests/Feature/Projects/ProjectIssuesTest.php +++ b/tests/Feature/Projects/ProjectIssuesTest.php @@ -34,7 +34,7 @@ class ProjectIssuesTest extends TestCase $admin = $this->adminUserSigningIn(); $project = factory(Project::class)->create(); - $this->visitRoute('projects.issues.index', $project); + $this->visitRoute('projects.issues.create', $project); $this->submitForm(__('issue.create'), [ 'title' => 'First Issue.',