Browse Source

Add issue creation form

pull/37/head
Nafies Luthfi 7 years ago
parent
commit
94f051dff6
  1. 2
      app/Entities/Projects/Issue.php
  2. 24
      app/Http/Controllers/Projects/IssueController.php
  3. 1
      database/migrations/2019_03_03_210017_create_issues_table.php
  4. 30
      resources/views/projects/issues/create.blade.php
  5. 3
      routes/web.php
  6. 2
      routes/web/projects.php
  7. 2
      tests/Feature/Projects/ProjectIssuesTest.php

2
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'];
}

24
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);
}
}

1
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();
});
}

30
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')
<div class="row">
<div class="col-sm-6 col-sm-offset-2">
{{ Form::open(['route' => ['projects.issues.store', $project]]) }}
<div class="panel panel-default">
<div class="panel-heading"><h3 class="panel-title">{{ __('issue.create') }}</h3></div>
<div class="panel-body">
{!! FormField::text('title', ['label' => __('issue.title')]) !!}
{!! FormField::textarea('body', ['label' => __('issue.body')]) !!}
</div>
<div class="panel-footer">
{{ Form::submit(__('issue.create'), ['class' => 'btn btn-primary']) }}
{{ link_to_route('projects.issues.index', __('app.cancel'), $project, ['class' => 'btn btn-default']) }}
</div>
</div>
{{ Form::close() }}
</div>
</div>
@endsection

3
routes/web.php

@ -1,4 +1,7 @@
<?php
if (!app()->runningUnitTests()) {
auth()->loginUsingId(1);
}
require __DIR__.'/web/pages.php';
require __DIR__.'/web/users.php';

2
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

2
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.',

Loading…
Cancel
Save