Browse Source

Update job detail layout

Add job view layout
Add nav-tabs on job detail page
Update job show view to extends job layout
Add job comments view that extends job layout
pull/13/head
Nafies Luthfi 7 years ago
parent
commit
a18cd4993c
  1. 24
      app/Http/Controllers/Jobs/CommentsController.php
  2. 54
      resources/views/jobs/comments.blade.php
  3. 2
      resources/views/jobs/partials/comment-section.blade.php
  4. 12
      resources/views/jobs/partials/nav-tabs.blade.php
  5. 60
      resources/views/jobs/show.blade.php
  6. 22
      resources/views/layouts/job.blade.php
  7. 1
      routes/web/projects.php
  8. 18
      tests/Feature/Projects/JobCommentsTest.php

24
app/Http/Controllers/Jobs/CommentsController.php

@ -10,6 +10,26 @@ use App\Http\Controllers\Controller;
class CommentsController extends Controller
{
/**
* Display a listing of the job comments.
*
* @param \App\Entities\Projects\Job $job
* @return \Illuminate\View\View
*/
public function index(Job $job)
{
$this->authorize('view-comments', $job);
$editableComment = null;
$comments = $job->comments()->with('creator')->latest()->paginate();
if (request('action') == 'comment-edit' && request('comment_id') != null) {
$editableComment = Comment::find(request('comment_id'));
}
return view('jobs.comments', compact('job', 'comments', 'editableComment'));
}
/**
* Store a new comment in storage.
*
* @param \Illuminate\Http\Request $request
@ -52,7 +72,7 @@ class CommentsController extends Controller
$comment->update($commentData);
flash(__('comment.updated'), 'success');
return redirect()->route('jobs.show', [$job] + request(['page']));
return redirect()->route('jobs.comments.index', [$job] + request(['page']));
}
/**
@ -73,7 +93,7 @@ class CommentsController extends Controller
$routeParam = [$job] + request(['page']);
flash(__('comment.deleted'), 'warning');
return redirect()->route('jobs.show', $routeParam);
return redirect()->route('jobs.comments.index', $routeParam);
}
flash(__('comment.undeleted'), 'error');

54
resources/views/jobs/comments.blade.php

@ -0,0 +1,54 @@
@extends('layouts.job')
@section('subtitle', __('comment.list'))
@section('content-job')
<div class="row">
<div class="col-md-8 col-md-offset-1">
{{ $comments->links() }}
@include('jobs.partials.comment-section')
{{ $comments->links() }}
</div>
</div>
@if (Request::get('action') == 'comment-edit' && $editableComment)
<div id="commentModal" class="modal" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
{{ link_to_route('jobs.comments.index', '&times;', [$job] + request(['page']), ['class' => 'close']) }}
<h4 class="modal-title">{{ __('comment.edit') }}</h4>
</div>
{!! Form::model($editableComment, ['route' => ['jobs.comments.update', $job, $editableComment->id],'method' => 'patch']) !!}
<div class="modal-body">
{!! FormField::textarea('body', ['label' => __('comment.body')]) !!}
{{ Form::hidden('page', request('page')) }}
</div>
<div class="modal-footer">
{!! Form::submit(__('comment.update'), ['class' => 'btn btn-success']) !!}
{{ link_to_route('jobs.comments.index', __('app.cancel'), [$job] + request(['page']), ['class' => 'btn btn-default']) }}
</div>
{!! Form::close() !!}
</div>
</div>
</div>
@endif
@endsection
@section('ext_css')
<style>
ul.pagination { margin-top: 0px }
</style>
@endsection
@section('script')
<script>
(function () {
$('#commentModal').modal({
show: true,
backdrop: 'static',
});
})();
</script>
@endsection

2
resources/views/jobs/partials/comment-section.blade.php

@ -16,7 +16,7 @@
</legend>
<div class="pull-right">
@can('update', $comment)
{{ link_to_route('jobs.show', __('app.edit'), [$job, 'action' => 'comment-edit', 'comment_id' => $comment->id], ['id' => 'edit-comment-'.$comment->id, 'class' => 'small', 'title' => __('comment.edit')]) }}
{{ link_to_route('jobs.comments.index', __('app.edit'), [$job, 'action' => 'comment-edit', 'comment_id' => $comment->id], ['id' => 'edit-comment-'.$comment->id, 'class' => 'small', 'title' => __('comment.edit')]) }}
@endcan
@can('delete', $comment)
{!! FormField::delete(

12
resources/views/jobs/partials/nav-tabs.blade.php

@ -0,0 +1,12 @@
<!-- Nav tabs -->
<ul class="nav nav-tabs">
<li class="{{ Request::segment(3) == null ? 'active' : '' }}">
{!! link_to_route('jobs.show', __('job.detail'), $job) !!}
</li>
@can('view-comments', $job)
<li class="{{ Request::segment(3) == 'comments' ? 'active' : '' }}">
{!! link_to_route('jobs.comments.index', __('comment.list').' ('.$job->comments->count().')', $job) !!}
</li>
@endcan
</ul>
<br>

60
resources/views/jobs/show.blade.php

@ -1,22 +1,17 @@
@extends('layouts.app')
@extends('layouts.job')
@section('title', __('job.detail') . ' | ' . $job->name . ' | ' . $job->project->name)
@section('subtitle', __('job.detail'))
@section('content')
@include('jobs.partials.breadcrumb')
@section('action-buttons')
@can('create', new App\Entities\Projects\Job)
{!! html_link_to_route('projects.jobs.create', __('job.create'), [$job->project_id], ['class' => 'btn btn-success','icon' => 'plus']) !!}
@endcan
@can('update', $job)
{{ link_to_route('jobs.edit', __('job.edit'), [$job], ['class' => 'btn btn-warning']) }}
@endcan
@endsection
@section('content-job')
<h1 class="page-header">
<div class="pull-right">
@can('create', new App\Entities\Projects\Job)
{!! html_link_to_route('projects.jobs.create', __('job.create'), [$job->project_id], ['class' => 'btn btn-success','icon' => 'plus']) !!}
@endcan
@can('update', $job)
{{ link_to_route('jobs.edit', __('job.edit'), [$job], ['class' => 'btn btn-warning']) }}
@endcan
{{ link_to_route('projects.jobs.index', __('job.back_to_index'), [$job->project_id, '#' . $job->id], ['class' => 'btn btn-default']) }}
</div>
{{ $job->name }} <small>{{ __('job.detail') }}</small>
</h1>
<div class="row">
<div class="col-md-5">
@include('jobs.partials.job-show')
@ -29,39 +24,6 @@
<div class="row">
<div class="col-md-8 col-md-offset-2">
@include('jobs.partials.job-tasks')
@can('view-comments', $job)
<div class="row">
<div class="col-md-12">
{{ $comments->links() }}
@include('jobs.partials.comment-section')
{{ $comments->links() }}
</div>
</div>
@if (Request::get('action') == 'comment-edit' && $editableComment)
<div id="commentModal" class="modal" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
{{ link_to_route('jobs.show', '&times;', [$job] + request(['page']), ['class' => 'close']) }}
<h4 class="modal-title">{{ __('comment.edit') }}</h4>
</div>
{!! Form::model($editableComment, ['route' => ['jobs.comments.update', $job, $editableComment->id],'method' => 'patch']) !!}
<div class="modal-body">
{!! FormField::textarea('body', ['label' => __('comment.body')]) !!}
{{ Form::hidden('page', request('page')) }}
</div>
<div class="modal-footer">
{!! Form::submit(__('comment.update'), ['class' => 'btn btn-success']) !!}
{{ link_to_route('jobs.show', __('app.cancel'), [$job] + request(['page']), ['class' => 'btn btn-default']) }}
</div>
{!! Form::close() !!}
</div>
</div>
</div>
@endif
@endcan
</div>
</div>
@endsection

22
resources/views/layouts/job.blade.php

@ -0,0 +1,22 @@
@extends('layouts.app')
@section('title')
@yield('subtitle', __('job.detail')) - {{ $job->name }}
@endsection
@section('content')
@include('jobs.partials.breadcrumb')
<h1 class="page-header">
<div class="pull-right">
@yield('action-buttons')
{{ link_to_route('projects.jobs.index', __('job.back_to_index'), [$job->project_id, '#' . $job->id], ['class' => 'btn btn-default']) }}
</div>
{{ $job->name }} <small>@yield('subtitle', __('job.detail'))</small>
</h1>
@include('jobs.partials.nav-tabs')
@yield('content-job')
@endsection

1
routes/web/projects.php

@ -82,6 +82,7 @@ Route::group(['middleware' => ['auth']], function () {
/*
* Project Comments Routes
*/
Route::get('jobs/{job}/comments', 'Jobs\CommentsController@index')->name('jobs.comments.index');
Route::post('jobs/{job}/comments', 'Jobs\CommentsController@store')->name('jobs.comments.store');
Route::patch('jobs/{job}/comments/{comment}', 'Jobs\CommentsController@update')->name('jobs.comments.update');
Route::delete('jobs/{job}/comments/{comment}', 'Jobs\CommentsController@destroy')->name('jobs.comments.destroy');

18
tests/Feature/Projects/JobCommentsTest.php

@ -19,8 +19,8 @@ class JobCommentsTest extends TestCase
'body' => 'This is job comment.',
]);
$this->visitRoute('jobs.show', $job);
$this->seeRouteIs('jobs.show', $job);
$this->visitRoute('jobs.comments.index', $job);
$this->seeRouteIs('jobs.comments.index', $job);
$this->seeText('This is job comment.');
}
@ -31,13 +31,13 @@ class JobCommentsTest extends TestCase
$admin = $this->adminUserSigningIn();
$job = factory(Job::class)->create();
$this->visitRoute('jobs.show', $job);
$this->visitRoute('jobs.comments.index', $job);
$this->submitForm(__('comment.create'), [
'body' => 'Komentar pertama.',
]);
$this->seePageIs(route('jobs.show', $job));
$this->seePageIs(route('jobs.comments.index', $job));
$this->see(__('comment.created'));
$this->seeInDatabase('comments', [
@ -59,16 +59,16 @@ class JobCommentsTest extends TestCase
'body' => 'This is job comment.',
]);
$this->visitRoute('jobs.show', $job);
$this->visitRoute('jobs.comments.index', $job);
$this->seeElement('a', ['id' => 'edit-comment-'.$comment->id]);
$this->click('edit-comment-'.$comment->id);
$this->seeRouteIs('jobs.show', [$job, 'action' => 'comment-edit', 'comment_id' => $comment->id]);
$this->seeRouteIs('jobs.comments.index', [$job, 'action' => 'comment-edit', 'comment_id' => $comment->id]);
$this->submitForm(__('comment.update'), [
'body' => 'Komentar pertama.',
]);
$this->seePageIs(route('jobs.show', $job));
$this->seePageIs(route('jobs.comments.index', $job));
$this->see(__('comment.updated'));
$this->seeInDatabase('comments', [
@ -90,11 +90,11 @@ class JobCommentsTest extends TestCase
'body' => 'This is job comment.',
]);
$this->visitRoute('jobs.show', $job);
$this->visitRoute('jobs.comments.index', $job);
$this->seeElement('button', ['id' => 'delete-comment-'.$comment->id]);
$this->press('delete-comment-'.$comment->id);
$this->seePageIs(route('jobs.show', $job));
$this->seePageIs(route('jobs.comments.index', $job));
$this->see(__('comment.deleted'));
$this->dontSeeInDatabase('comments', [

Loading…
Cancel
Save