Browse Source

Add issue deletion feature

pull/37/head
Nafies Luthfi 7 years ago
parent
commit
d2ece73d44
  1. 14
      app/Http/Controllers/Projects/IssueController.php
  2. 47
      resources/views/projects/issues/edit.blade.php
  3. 1
      routes/web/projects.php
  4. 10
      tests/Feature/Projects/ProjectIssuesTest.php

14
app/Http/Controllers/Projects/IssueController.php

@ -62,4 +62,18 @@ class IssueController extends Controller
return redirect()->route('projects.issues.show', [$project, $issue]);
}
public function destroy(Request $request, Project $project, Issue $issue)
{
$request->validate(['issue_id' => 'required']);
if ($request->get('issue_id') == $issue->id && $issue->delete()) {
flash(__('issue.deleted'), 'warning');
return redirect()->route('projects.issues.index', $project);
}
flash(__('issue.undeleted'), 'danger');
return back();
}
}

47
resources/views/projects/issues/edit.blade.php

@ -5,19 +5,44 @@
@section('content-project')
<div class="row">
<div class="col-sm-6 col-sm-offset-2">
{{ Form::model($issue, ['route' => ['projects.issues.update', $project, $issue], 'method' => 'patch']) }}
<div class="panel panel-default">
<div class="panel-heading"><h3 class="panel-title">{{ __('issue.update') }}</h3></div>
<div class="panel-body">
{!! FormField::text('title', ['label' => __('issue.title')]) !!}
{!! FormField::textarea('body', ['label' => __('issue.body')]) !!}
@if (request('action') == 'delete' && $issue)
<div class="panel panel-default">
<div class="panel-heading"><h3 class="panel-title">{{ __('issue.delete') }}</h3></div>
<div class="panel-body">
<label class="control-label text-primary">{{ __('issue.title') }}</label>
<p>{{ $issue->title }}</p>
<label class="control-label text-primary">{{ __('issue.body') }}</label>
<p>{{ $issue->body }}</p>
{!! $errors->first('issue_id', '<span class="form-error small">:message</span>') !!}
</div>
<hr style="margin:0">
<div class="panel-body text-danger">{{ __('issue.delete_confirm') }}</div>
<div class="panel-footer">
{!! FormField::delete(
['route' => ['projects.issues.destroy', $project, $issue]],
__('app.delete_confirm_button'),
['id' => 'delete-issue-'.$issue->id, 'class' => 'btn btn-danger'],
['issue_id' => $issue->id]
) !!}
{{ link_to_route('projects.issues.edit', __('app.cancel'), [$project, $issue], ['class' => 'btn btn-default']) }}
</div>
</div>
<div class="panel-footer">
{{ Form::submit(__('issue.update'), ['class' => 'btn btn-success']) }}
{{ link_to_route('projects.issues.show', __('app.cancel'), [$project, $issue], ['class' => 'btn btn-default']) }}
@else
{{ Form::model($issue, ['route' => ['projects.issues.update', $project, $issue], 'method' => 'patch']) }}
<div class="panel panel-default">
<div class="panel-heading"><h3 class="panel-title">{{ __('issue.update') }}</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.update'), ['class' => 'btn btn-success']) }}
{{ link_to_route('projects.issues.show', __('app.cancel'), [$project, $issue], ['class' => 'btn btn-default']) }}
{{ link_to_route('projects.issues.edit', __('app.delete'), [$project, $issue, 'action' => 'delete'], ['id' => 'delete-issue-'.$issue->id, 'class' => 'btn btn-danger pull-right']) }}
</div>
</div>
</div>
{{ Form::close() }}
{{ Form::close() }}
@endif
</div>
</div>
@endsection

1
routes/web/projects.php

@ -54,6 +54,7 @@ Route::group(['middleware' => ['auth'], 'namespace' => 'Projects'], function ()
Route::get('projects/{project}/issues/{issue}', 'IssueController@show')->name('projects.issues.show');
Route::get('projects/{project}/issues/{issue}/edit', 'IssueController@edit')->name('projects.issues.edit');
Route::patch('projects/{project}/issues/{issue}', 'IssueController@update')->name('projects.issues.update');
Route::delete('projects/{project}/issues/{issue}', 'IssueController@destroy')->name('projects.issues.destroy');
/*
* Tasks Routes

10
tests/Feature/Projects/ProjectIssuesTest.php

@ -109,12 +109,18 @@ class ProjectIssuesTest extends TestCase
'project_id' => $project->id,
]);
$this->visitRoute('projects.issues.index', $project);
$this->visitRoute('projects.issues.edit', [$project, $issue]);
$this->seeElement('a', ['id' => 'delete-issue-'.$issue->id]);
$this->click('delete-issue-'.$issue->id);
$this->seePageIs(route('projects.issues.edit', [$project, $issue, 'action' => 'delete']));
$this->seeElement('button', ['id' => 'delete-issue-'.$issue->id]);
$this->press('delete-issue-'.$issue->id);
$this->seePageIs(route('projects.issues.index', $project));
$this->see(__('issue.deleted'));
$this->seeText(__('issue.deleted'));
$this->dontSeeInDatabase('issues', [
'id' => $issue->id,

Loading…
Cancel
Save