140 lines
4.5 KiB
PHP
140 lines
4.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Contacts;
|
|
|
|
use App\Helpers\DateHelper;
|
|
use Illuminate\Http\Request;
|
|
use App\Models\Contact\Contact;
|
|
use App\Models\Contact\LifeEvent;
|
|
use Illuminate\Support\Collection;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Traits\JsonRespondController;
|
|
use App\Models\Contact\LifeEventCategory;
|
|
use App\Services\Contact\LifeEvent\CreateLifeEvent;
|
|
use App\Services\Contact\LifeEvent\DestroyLifeEvent;
|
|
use App\Http\Resources\LifeEvent\LifeEventType as LifeEventTypeResource;
|
|
use App\Http\Resources\LifeEvent\LifeEventCategory as LifeEventCategoryResource;
|
|
|
|
class LifeEventsController extends Controller
|
|
{
|
|
use JsonRespondController;
|
|
|
|
/**
|
|
* Get the list of life event categories.
|
|
*
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\Resources\Json\ResourceCollection
|
|
*/
|
|
public function categories(Request $request)
|
|
{
|
|
$lifeEventCategories = auth()->user()->account->lifeEventCategories;
|
|
|
|
return LifeEventCategoryResource::collection($lifeEventCategories);
|
|
}
|
|
|
|
/**
|
|
* Get the list of life event types for a given life event category.
|
|
* @param Request $request
|
|
* @param int $lifeEventCategoryId
|
|
* @return \Illuminate\Http\Resources\Json\ResourceCollection
|
|
*/
|
|
public function types(Request $request, int $lifeEventCategoryId)
|
|
{
|
|
$lifeEventCategory = LifeEventCategory::findOrFail($lifeEventCategoryId);
|
|
$lifeEventTypes = $lifeEventCategory->lifeEventTypes;
|
|
|
|
return LifeEventTypeResource::collection($lifeEventTypes);
|
|
}
|
|
|
|
/**
|
|
* Display the list of life events.
|
|
*
|
|
* @param Request $request
|
|
* @param Contact $contact
|
|
*
|
|
* @return Collection
|
|
*/
|
|
public function index(Request $request, Contact $contact)
|
|
{
|
|
$lifeEventsCollection = collect([]);
|
|
$lifeEvents = $contact->lifeEvents()->get();
|
|
|
|
foreach ($lifeEvents as $lifeEvent) {
|
|
$data = [
|
|
'id' => $lifeEvent->id,
|
|
'life_event_type' => $lifeEvent->lifeEventType->name,
|
|
'default_life_event_type_key' => $lifeEvent->lifeEventType->default_life_event_type_key,
|
|
'name' => $lifeEvent->name,
|
|
'note' => $lifeEvent->note,
|
|
'happened_at' => DateHelper::getShortDate($lifeEvent->happened_at),
|
|
];
|
|
$lifeEventsCollection->push($data);
|
|
}
|
|
|
|
return $lifeEventsCollection;
|
|
}
|
|
|
|
/**
|
|
* Store the life event.
|
|
*
|
|
* @param Request $request
|
|
* @param Contact $contact
|
|
*
|
|
* @return LifeEvent|\Illuminate\Http\RedirectResponse
|
|
*/
|
|
public function store(Request $request, Contact $contact)
|
|
{
|
|
$data = [
|
|
'account_id' => auth()->user()->account->id,
|
|
'contact_id' => $contact->id,
|
|
'life_event_type_id' => $request->input('life_event_type_id'),
|
|
'happened_at' => $request->input('happened_at'),
|
|
'name' => $request->input('name'),
|
|
'note' => $request->input('note'),
|
|
'has_reminder' => $request->input('has_reminder'),
|
|
'happened_at_month_unknown' => $request->input('happened_at_month_unknown'),
|
|
'happened_at_day_unknown' => $request->input('happened_at_day_unknown'),
|
|
];
|
|
|
|
// create the conversation
|
|
try {
|
|
$lifeEvent = app(CreateLifeEvent::class)->execute($data);
|
|
} catch (\Exception $e) {
|
|
return back()
|
|
->withInput()
|
|
->withErrors(trans('app.error_save'));
|
|
}
|
|
|
|
return $lifeEvent;
|
|
}
|
|
|
|
/**
|
|
* Destroy the life event.
|
|
*
|
|
* @param Request $request
|
|
* @param LifeEvent $lifeEvent
|
|
*
|
|
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
|
|
*/
|
|
public function destroy(Request $request, LifeEvent $lifeEvent)
|
|
{
|
|
$data = [
|
|
'account_id' => auth()->user()->account->id,
|
|
'life_event_id' => $lifeEvent->id,
|
|
];
|
|
|
|
try {
|
|
app(DestroyLifeEvent::class)->execute($data);
|
|
} catch (\Exception $e) {
|
|
// We have to redirect with HTTP status 303 or the browser will issue a
|
|
// DELETE request to the new location. This may result in deleting other
|
|
// resources as well. Refer to Github issue #2415
|
|
return back(303)
|
|
->withInput()
|
|
->withErrors(trans('app.error_save'));
|
|
}
|
|
|
|
return $this->respondObjectDeleted($lifeEvent->id);
|
|
}
|
|
}
|