Browse Source

Added project_id to event calendar entry

pull/1/head
Nafies Luthfi 8 years ago
parent
commit
a9fde5f30c
  1. 13
      app/Http/Controllers/Api/EventsController.php
  2. 22
      resources/views/users/calendar.blade.php
  3. 3
      routes/web/calendar.php
  4. 12
      tests/Feature/Api/ApiEventsTest.php

13
app/Http/Controllers/Api/EventsController.php

@ -25,6 +25,7 @@ class EventsController extends Controller
'id' => $event->id, 'id' => $event->id,
'user' => $event->user->name, 'user' => $event->user->name,
'user_id' => $event->user_id, 'user_id' => $event->user_id,
'project_id' => $event->project_id,
'title' => $event->title, 'title' => $event->title,
'body' => $event->body, 'body' => $event->body,
'start' => $event->start, 'start' => $event->start,
@ -42,8 +43,9 @@ class EventsController extends Controller
public function store(Request $request) public function store(Request $request)
{ {
$this->validate($request, [ $this->validate($request, [
'project_id' => 'nullable|numeric|exists:projects,id',
'title' => 'required|string|max:60', 'title' => 'required|string|max:60',
'body' => 'string|max:255',
'body' => 'nullable|string|max:255',
'start' => 'required|date|date_format:Y-m-d H:i:s', 'start' => 'required|date|date_format:Y-m-d H:i:s',
'end' => 'date|date_format:Y-m-d H:i:s', 'end' => 'date|date_format:Y-m-d H:i:s',
'is_allday' => '', 'is_allday' => '',
@ -51,6 +53,7 @@ class EventsController extends Controller
$event = new Event; $event = new Event;
$event->user_id = auth()->id(); $event->user_id = auth()->id();
$event->project_id = $request->get('project_id');
$event->title = $request->get('title'); $event->title = $request->get('title');
$event->body = $request->get('body'); $event->body = $request->get('body');
$event->start = $request->get('start'); $event->start = $request->get('start');
@ -65,6 +68,7 @@ class EventsController extends Controller
->transformWith(function($event) { ->transformWith(function($event) {
return [ return [
'id' => $event->id, 'id' => $event->id,
'project_id' => $event->project_id,
'user' => $event->user->name, 'user' => $event->user->name,
'title' => $event->title, 'title' => $event->title,
'body' => $event->body, 'body' => $event->body,
@ -87,17 +91,19 @@ class EventsController extends Controller
{ {
$this->validate($request, [ $this->validate($request, [
'id' => 'required|numeric|exists:user_events,id', 'id' => 'required|numeric|exists:user_events,id',
'project_id' => 'nullable|numeric|exists:projects,id',
'title' => 'required|string|max:60', 'title' => 'required|string|max:60',
'body' => 'string|max:255',
'body' => 'nullable|string|max:255',
'is_allday' => '', 'is_allday' => '',
]); ]);
$event = Event::findOrFail($request->get('id')); $event = Event::findOrFail($request->get('id'));
$this->authorize('update', $event); $this->authorize('update', $event);
$event->project_id = $request->get('project_id');
$event->title = $request->get('title'); $event->title = $request->get('title');
$event->body = $request->get('body'); $event->body = $request->get('body');
$event->is_allday = !!$request->get('is_allday');
$event->is_allday = $request->get('is_allday') == 'true' ? 1 : 0;
$event->save(); $event->save();
@ -107,6 +113,7 @@ class EventsController extends Controller
->transformWith(function($event) { ->transformWith(function($event) {
return [ return [
'id' => $event->id, 'id' => $event->id,
'project_id' => $event->project_id,
'user' => $event->user->name, 'user' => $event->user->name,
'title' => $event->title, 'title' => $event->title,
'body' => $event->body, 'body' => $event->body,

22
resources/views/users/calendar.blade.php

@ -49,6 +49,12 @@
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">Project</label>
<div class="col-sm-9">
{!! FormField::select('project_id', $projects, ['label' => false, 'id' => 'project1']) !!}
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label"></label> <label class="col-sm-3 control-label"></label>
<div class="col-sm-9"> <div class="col-sm-9">
<label for="is_allday"><input id="is_allday" type="checkbox" name="is_allday"> All Day Event?</label> <label for="is_allday"><input id="is_allday" type="checkbox" name="is_allday"> All Day Event?</label>
@ -95,6 +101,12 @@
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">Project</label>
<div class="col-sm-9">
{!! FormField::select('project_id', $projects, ['label' => false, 'id' => 'project2']) !!}
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label"></label> <label class="col-sm-3 control-label"></label>
<div class="col-sm-9"> <div class="col-sm-9">
<label for="is_allday2"><input id="is_allday2" type="checkbox" name="is_allday2"> All Day Event?</label> <label for="is_allday2"><input id="is_allday2" type="checkbox" name="is_allday2"> All Day Event?</label>
@ -170,13 +182,14 @@
$(".antosubmit").on("click", function() { $(".antosubmit").on("click", function() {
var title = $("#title").val(); var title = $("#title").val();
var body = $("#descr").val(); var body = $("#descr").val();
var project_id = $('#project1').val();
var is_allday = $("#is_allday").is(':checked'); var is_allday = $("#is_allday").is(':checked');
if (title) { if (title) {
$.ajax({ $.ajax({
url: "{{ route('api.events.store') }}", url: "{{ route('api.events.store') }}",
method: "POST", method: "POST",
data: { title: title, body: body, start: started.format("YYYY-MM-DD HH:mm:ss"), end: ended.format("YYYY-MM-DD HH:mm:ss"), is_allday: is_allday },
data: { title: title, body: body, project_id: project_id, start: started.format("YYYY-MM-DD HH:mm:ss"), end: ended.format("YYYY-MM-DD HH:mm:ss"), is_allday: is_allday },
success: function(response){ success: function(response){
if(response.message == 'event.created') { if(response.message == 'event.created') {
calendar.fullCalendar('renderEvent', { calendar.fullCalendar('renderEvent', {
@ -187,6 +200,7 @@
end: ended.format("YYYY-MM-DD HH:mm"), end: ended.format("YYYY-MM-DD HH:mm"),
user: "{{ auth()->user()->name }}", user: "{{ auth()->user()->name }}",
user_id: "{{ auth()->id() }}", user_id: "{{ auth()->id() }}",
project_id: project_id,
allDay: is_allday, allDay: is_allday,
editable: true editable: true
}, true); }, true);
@ -215,7 +229,8 @@
$('#user2').text(calEvent.user); $('#user2').text(calEvent.user);
$('#title2').val(calEvent.title); $('#title2').val(calEvent.title);
$('#descr2').val(calEvent.body); $('#descr2').val(calEvent.body);
$('#is_allday2').val(calEvent.allDay);
$('#project2').val(calEvent.project_id);
$('#is_allday2').prop('checked', calEvent.allDay);
$('#CalenderModalEdit').modal(); $('#CalenderModalEdit').modal();
} }
else { else {
@ -254,12 +269,13 @@
$("#antoform2").off("submit").on("submit", function() { $("#antoform2").off("submit").on("submit", function() {
calEvent.title = $("#title2").val(); calEvent.title = $("#title2").val();
calEvent.body = $("#descr2").val(); calEvent.body = $("#descr2").val();
calEvent.project_id = $('#project2').val();
calEvent.is_allday = $("#is_allday2").is(':checked'); calEvent.is_allday = $("#is_allday2").is(':checked');
$.ajax({ $.ajax({
url: "{{ route('api.events.update') }}", url: "{{ route('api.events.update') }}",
method: "PATCH", method: "PATCH",
data: { id: calEvent.id, title: calEvent.title, body: calEvent.body, is_allday: calEvent.is_allday },
data: { id: calEvent.id, title: calEvent.title, body: calEvent.body, project_id: calEvent.project_id, is_allday: calEvent.is_allday },
success: function(response){ success: function(response){
if(response.message == 'event.updated') if(response.message == 'event.updated')
$('#calendar').fullCalendar('updateEvent',calEvent); $('#calendar').fullCalendar('updateEvent',calEvent);

3
routes/web/calendar.php

@ -5,6 +5,7 @@ Route::group(['middleware' => ['web','auth'], 'namespace' => 'Api'], function()
* Savety Calendar * Savety Calendar
*/ */
Route::get('my-calendar', ['as' => 'users.calendar', 'uses' => function() { Route::get('my-calendar', ['as' => 'users.calendar', 'uses' => function() {
return view('users.calendar');
$projects = App\Entities\Projects\Project::orderBy('name')->pluck('name', 'id');
return view('users.calendar', compact('projects'));
}]); }]);
}); });

12
tests/Feature/Api/ApiEventsTest.php

@ -2,6 +2,7 @@
namespace Tests\Feature\Api; namespace Tests\Feature\Api;
use App\Entities\Projects\Project;
use App\Entities\Users\Event; use App\Entities\Users\Event;
use App\Entities\Users\User; use App\Entities\Users\User;
use Tests\TestCase; use Tests\TestCase;
@ -12,7 +13,7 @@ class ApiEventsTest extends TestCase
public function it_can_get_all_existing_events() public function it_can_get_all_existing_events()
{ {
$user = factory(User::class)->create(); $user = factory(User::class)->create();
$events = factory(Event::class, 5)->create(['user_id' => $user->id]);
$events = factory(Event::class, 2)->create(['user_id' => $user->id]);
$this->getJson(route('api.events.index'), [ $this->getJson(route('api.events.index'), [
'Authorization' => 'Bearer ' . $user->api_token 'Authorization' => 'Bearer ' . $user->api_token
@ -28,6 +29,7 @@ class ApiEventsTest extends TestCase
'start', 'start',
'end', 'end',
'allDay', 'allDay',
'project_id',
] ]
]); ]);
} }
@ -36,11 +38,13 @@ class ApiEventsTest extends TestCase
public function user_can_create_new_event() public function user_can_create_new_event()
{ {
$user = factory(User::class)->create(); $user = factory(User::class)->create();
$project = factory(Project::class)->create();
$this->postJson(route('api.events.store'), [ $this->postJson(route('api.events.store'), [
'title' => 'New Event Title', 'title' => 'New Event Title',
'body' => 'New Event Body', 'body' => 'New Event Body',
'start' => '2016-07-21 12:20:00', 'start' => '2016-07-21 12:20:00',
'project_id' => $project->id,
], [ ], [
'Authorization' => 'Bearer ' . $user->api_token 'Authorization' => 'Bearer ' . $user->api_token
]); ]);
@ -51,6 +55,7 @@ class ApiEventsTest extends TestCase
$this->seeJson([ $this->seeJson([
'message' => trans('event.created'), 'message' => trans('event.created'),
'project_id' => $project->id,
'user' => $user->name, 'user' => $user->name,
'title' => 'New Event Title', 'title' => 'New Event Title',
'body' => 'New Event Body', 'body' => 'New Event Body',
@ -60,6 +65,7 @@ class ApiEventsTest extends TestCase
]); ]);
$this->seeInDatabase('user_events', [ $this->seeInDatabase('user_events', [
'project_id' => $project->id,
'user_id' => $user->id, 'user_id' => $user->id,
'title' => 'New Event Title', 'title' => 'New Event Title',
'body' => 'New Event Body', 'body' => 'New Event Body',
@ -73,10 +79,12 @@ class ApiEventsTest extends TestCase
public function user_can_update_their_event() public function user_can_update_their_event()
{ {
$user = factory(User::class)->create(); $user = factory(User::class)->create();
$project = factory(Project::class)->create();
$event = factory(Event::class)->create(['user_id' => $user->id]); $event = factory(Event::class)->create(['user_id' => $user->id]);
// dump($event->toArray()); // dump($event->toArray());
$this->patchJson(route('api.events.update'), [ $this->patchJson(route('api.events.update'), [
'id' => $event->id, 'id' => $event->id,
'project_id' => $project->id,
'title' => 'New Event Title', 'title' => 'New Event Title',
'body' => 'New Event Body', 'body' => 'New Event Body',
'is_allday' => 'true', 'is_allday' => 'true',
@ -88,6 +96,7 @@ class ApiEventsTest extends TestCase
$this->seeJson([ $this->seeJson([
'message' => trans('event.updated'), 'message' => trans('event.updated'),
'project_id' => $project->id,
'user' => $user->name, 'user' => $user->name,
'title' => 'New Event Title', 'title' => 'New Event Title',
'body' => 'New Event Body', 'body' => 'New Event Body',
@ -95,6 +104,7 @@ class ApiEventsTest extends TestCase
$this->seeInDatabase('user_events', [ $this->seeInDatabase('user_events', [
'user_id' => $user->id, 'user_id' => $user->id,
'project_id' => $project->id,
'title' => 'New Event Title', 'title' => 'New Event Title',
'body' => 'New Event Body', 'body' => 'New Event Body',
]); ]);

Loading…
Cancel
Save