Files
monica/app/Http/Controllers/Contacts/TasksController.php
T
Régis Freyd 7e367d67da Manage tasks in Vue.js (#666)
* Tasks are now edited inline
* Tasks can be marked as completed
* Tasks can be edited
2017-11-29 16:07:37 -05:00

97 lines
2.5 KiB
PHP

<?php
namespace App\Http\Controllers\Contacts;
use App\Task;
use App\Contact;
use App\Http\Controllers\Controller;
use App\Http\Requests\People\TasksRequest;
use App\Http\Requests\People\TaskToggleRequest;
class TasksController extends Controller
{
/**
* Get all the tasks of this contact.
*/
public function get(Contact $contact)
{
$tasks = collect([]);
foreach ($contact->tasks as $task) {
$data = [
'id' => $task->id,
'title' => $task->title,
'description' => $task->description,
'completed' => $task->completed,
'completed_at' => \App\Helpers\DateHelper::getShortDate($task->completed_at),
'edit' => false,
];
$tasks->push($data);
}
return $tasks;
}
/**
* Store the task.
*/
public function store(TasksRequest $request, Contact $contact)
{
$task = $contact->tasks()->create([
'account_id' => auth()->user()->account->id,
'title' => $request->get('title'),
'description' => ($request->get('description') == '' ? null : $request->get('description')),
]);
$contact->logEvent('task', $task->id, 'create');
return $task;
}
/**
* Edit the task field.
*/
public function update(TasksRequest $request, Contact $contact, Task $task)
{
$task->update([
'title' => $request->get('title'),
'description' => ($request->get('description') == '' ? null : $request->get('description')),
'completed' => $request->get('completed'),
]);
$contact->logEvent('task', $task->id, 'update');
return $task;
}
public function toggle(TaskToggleRequest $request, Contact $contact, Task $task)
{
// check if the state of the task has changed
if ($task->completed) {
$task->completed_at = null;
$task->completed = false;
} else {
$task->completed = true;
$task->completed_at = \Carbon\Carbon::now();
}
$contact->logEvent('task', $task->id, 'update');
$task->save();
}
/**
* Remove the specified resource from storage.
*
* @param Contact $contact
* @param Task $task
* @return \Illuminate\Http\Response
*/
public function destroy(Contact $contact, Task $task)
{
$task->delete();
$contact->events()->forObject($task)->get()->each->delete();
}
}