Form Templates for self hosted (#546)

Co-authored-by: Julien Nahum <julien@nahum.net>
This commit is contained in:
Chirag Chhatrala 2024-08-29 14:38:09 +05:30 committed by GitHub
parent 6736e15074
commit 8e777ecca6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 31 additions and 4 deletions

View File

@ -7,10 +7,34 @@ use App\Http\Resources\FormTemplateResource;
use App\Models\Template;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Http;
use App\Http\Controllers\Controller;
class TemplateController extends Controller
{
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;
}
public function index(Request $request)
{
$limit = (int) $request->get('limit', 0);
@ -37,7 +61,10 @@ class TemplateController extends Controller
$templates = $query->orderByDesc('created_at')->get();
return FormTemplateResource::collection($templates);
return response()->json(array_merge(
FormTemplateResource::collection($templates)->toArray($request),
$this->getProdTemplates()
));
}
public function create(FormTemplateRequest $request)
@ -83,8 +110,7 @@ class TemplateController extends Controller
public function show(string $slug)
{
return new FormTemplateResource(
Template::whereSlug($slug)->firstOrFail()
);
$template = Template::whereSlug($slug)->first();
return ($template) ? new FormTemplateResource($template) : $this->getProdTemplates($slug);
}
}

View File

@ -334,6 +334,7 @@ const canEditTemplate = computed(
() =>
authStore.check &&
template.value &&
template.value?.from_prod !== true &&
(authStore.user.admin ||
authStore.user.template_editor ||
template.value.creator_id === authStore.user.id),