2022-10-02 20:38:41 +02:00
|
|
|
<?php
|
|
|
|
|
|
2024-08-27 16:49:43 +02:00
|
|
|
namespace App\Http\Controllers\Forms;
|
2022-10-02 20:38:41 +02:00
|
|
|
|
2023-09-08 13:00:28 +02:00
|
|
|
use App\Http\Requests\Templates\FormTemplateRequest;
|
|
|
|
|
use App\Http\Resources\FormTemplateResource;
|
2022-10-02 20:38:41 +02:00
|
|
|
use App\Models\Template;
|
2023-09-08 13:00:28 +02:00
|
|
|
use Illuminate\Http\Request;
|
2023-10-13 12:11:03 +02:00
|
|
|
use Illuminate\Support\Facades\Auth;
|
2024-08-29 11:08:09 +02:00
|
|
|
use Illuminate\Support\Facades\Http;
|
2024-08-27 16:49:43 +02:00
|
|
|
use App\Http\Controllers\Controller;
|
2022-10-02 20:38:41 +02:00
|
|
|
|
|
|
|
|
class TemplateController extends Controller
|
|
|
|
|
{
|
2024-08-29 11:08:09 +02:00
|
|
|
private function getProdTemplates($slug = false)
|
|
|
|
|
{
|
|
|
|
|
if (!config('app.self_hosted')) {
|
|
|
|
|
return [];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$prodTemplates = \Cache::remember('prod_templates', 3600, function () {
|
|
|
|
|
$response = Http::get('https://api.opnform.com/templates');
|
|
|
|
|
if ($response->successful()) {
|
|
|
|
|
return collect($response->json())->map(function ($item) {
|
|
|
|
|
$item['from_prod'] = true;
|
|
|
|
|
return $item;
|
|
|
|
|
})->toArray();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
if ($slug) {
|
|
|
|
|
return collect($prodTemplates)->filter(function ($item) use ($slug) {
|
|
|
|
|
return $item['slug'] === $slug;
|
|
|
|
|
})->toArray();
|
|
|
|
|
}
|
|
|
|
|
return $prodTemplates;
|
|
|
|
|
}
|
|
|
|
|
|
2023-09-08 13:00:28 +02:00
|
|
|
public function index(Request $request)
|
2022-10-02 20:38:41 +02:00
|
|
|
{
|
2024-02-23 11:54:12 +01:00
|
|
|
$limit = (int) $request->get('limit', 0);
|
|
|
|
|
$onlyMy = (bool) $request->get('onlymy', false);
|
2023-11-15 10:08:53 +01:00
|
|
|
|
2024-08-05 12:06:20 +02:00
|
|
|
$query = Template::query();
|
|
|
|
|
|
|
|
|
|
if (Auth::check()) {
|
2024-02-23 11:54:12 +01:00
|
|
|
if ($onlyMy) {
|
|
|
|
|
$query->where('creator_id', Auth::id());
|
|
|
|
|
} else {
|
2024-08-05 12:06:20 +02:00
|
|
|
$query->where(function ($q) {
|
|
|
|
|
$q->where('publicly_listed', true)
|
2024-08-27 16:49:43 +02:00
|
|
|
->orWhere('creator_id', Auth::id());
|
2024-02-23 11:54:12 +01:00
|
|
|
});
|
|
|
|
|
}
|
2024-08-05 12:06:20 +02:00
|
|
|
} else {
|
|
|
|
|
$query->where('publicly_listed', true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($limit > 0) {
|
|
|
|
|
$query->limit($limit);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$templates = $query->orderByDesc('created_at')->get();
|
2023-10-13 12:11:03 +02:00
|
|
|
|
2024-08-29 11:08:09 +02:00
|
|
|
return response()->json(array_merge(
|
|
|
|
|
FormTemplateResource::collection($templates)->toArray($request),
|
|
|
|
|
$this->getProdTemplates()
|
|
|
|
|
));
|
2022-10-02 20:38:41 +02:00
|
|
|
}
|
|
|
|
|
|
2023-09-08 13:00:28 +02:00
|
|
|
public function create(FormTemplateRequest $request)
|
2022-10-02 20:38:41 +02:00
|
|
|
{
|
2022-11-16 13:12:48 +01:00
|
|
|
$this->authorize('create', Template::class);
|
2022-10-02 20:38:41 +02:00
|
|
|
|
|
|
|
|
// Create template
|
|
|
|
|
$template = $request->getTemplate();
|
|
|
|
|
$template->save();
|
|
|
|
|
|
|
|
|
|
return $this->success([
|
2023-09-08 13:00:28 +02:00
|
|
|
'message' => 'Template was created.',
|
2023-10-13 12:11:03 +02:00
|
|
|
'template_id' => $template->id,
|
2024-02-23 11:54:12 +01:00
|
|
|
'data' => new FormTemplateResource($template),
|
2022-10-02 20:38:41 +02:00
|
|
|
]);
|
|
|
|
|
}
|
2023-09-08 13:00:28 +02:00
|
|
|
|
|
|
|
|
public function update(FormTemplateRequest $request, string $id)
|
|
|
|
|
{
|
|
|
|
|
$template = Template::findOrFail($id);
|
|
|
|
|
$this->authorize('update', $template);
|
|
|
|
|
|
|
|
|
|
$template->update($request->all());
|
|
|
|
|
|
|
|
|
|
return $this->success([
|
|
|
|
|
'message' => 'Template was updated.',
|
|
|
|
|
'template_id' => $template->id,
|
2024-02-23 11:54:12 +01:00
|
|
|
'data' => new FormTemplateResource($template),
|
2023-09-08 13:00:28 +02:00
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function destroy($id)
|
|
|
|
|
{
|
|
|
|
|
$template = Template::findOrFail($id);
|
|
|
|
|
$this->authorize('delete', $template);
|
|
|
|
|
|
|
|
|
|
$template->delete();
|
|
|
|
|
|
|
|
|
|
return $this->success([
|
|
|
|
|
'message' => 'Template was deleted.',
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function show(string $slug)
|
|
|
|
|
{
|
2024-08-29 11:08:09 +02:00
|
|
|
$template = Template::whereSlug($slug)->first();
|
|
|
|
|
return ($template) ? new FormTemplateResource($template) : $this->getProdTemplates($slug);
|
2023-09-08 13:00:28 +02:00
|
|
|
}
|
2022-10-02 20:38:41 +02:00
|
|
|
}
|