Files
wticreatorstudio/Modules/PageBuilderPlus/Http/Controllers/WidgetsController.php
T
2024-02-12 22:54:20 -05:00

213 lines
6.3 KiB
PHP

<?php
namespace Modules\PageBuilderPlus\Http\Controllers;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\PageBuilderPlus\Entities\GJSWidget;
class WidgetsController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index()
{
return view('pagebuilderplus::widgetsmanager.index');
}
/**
* Show the form for creating a new resource.
* @return Renderable
*/
public function create()
{
return view('pagebuilderplus::create');
}
/**
* Store a newly created resource in storage.
* @param Request $request
* @return Renderable
*/
public function store(Request $request)
{
//
}
/**
* Show the specified resource.
* @param int $id
* @return Renderable
*/
public function show($id)
{
return view('pagebuilderplus::show');
}
/**
* Show the form for editing the specified resource.
* @param int $id
* @return Renderable
*/
public function edit($id)
{
return view('pagebuilderplus::edit');
}
/**
* Update the specified resource in storage.
* @param Request $request
* @param int $id
* @return Renderable
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
* @param int $id
* @return Renderable
*/
public function destroy($id)
{
//
}
public function getWidgets() {
$widgets = GJSWidget::orderBy('label')->orderBy('category')->get();
return response()->json([
'message' => 'success',
'widgets' => $widgets
]);
$widgets = [
[
'id' => 'sample-widget',
'label' => 'Sample',
'media' => '',
'category' => 'Samples',
'attributes' => [
'title' => 'Insert sample widget'
],
'content' => view('pagebuilderplus::widgets._sample')->render()
]
];
return $widgets;
}
public function getBlocks() {
$widgets = GJSWidget::orderBy('label')->orderBy('category')->get();
foreach ($widgets as $widget) {
$widget['attributes'] = [
'title' => $widget->tooltip
];
if ($widget->blade) {
$widget['content'] = view($widget->blade)->render();
}
}
return $widgets;
}
public function createWidget(Request $request) {
$widget = GJSWidget::where('gid', $request->gid)->first();
if (!$widget) {
$widget = new GJSWidget();
$widget->fill($request->except(['_token']));
$widget->save();
if ($widget && $request->has('blade_file')) {
$file = $request->file('blade_file');
$destinationPath = module_path('PageBuilderPlus', 'Resources/views/widgets');
$file->move($destinationPath, $file->getClientOriginalName());
$filename = str_replace('.blade', '', pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME));
$blade = "pagebuilderplus::widgets.{$filename}";
$widget->blade = $blade;
$widget->update();
}
return response()->json([
'status' => 200,
'message' => 'New widget has been added.'
]);
}
return response()->json([
'status' => 409,
'message' => 'Widget already exists.'
]);
}
public function updateWidget(Request $request) {
$widget = GJSWidget::find($request->id);
if ($widget) {
$owidget = GJSWidget::where('gid', $request->gid)->where('id', '<>', $request->id)->first();
if (!$owidget) {
$widget->fill($request->except(['token']));
$widget->update();
if ($request->has('blade_file')) {
if (!empty($widget->blade)) {
$filename = str_replace('pagebuilderplus::widgets.', '', $widget->blade);
$path = module_path('PageBuilderPlus', "Resources/views/widgets/{$filename}.blade.php");
if (file_exists($path)) {
unlink($path);
}
}
$file = $request->file('blade_file');
$destinationPath = module_path('PageBuilderPlus', 'Resources/views/widgets');
$file->move($destinationPath, $file->getClientOriginalName());
$filename = str_replace('.blade', '', pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME));
$blade = "pagebuilderplus::widgets.{$filename}";
$widget->blade = $blade;
$widget->update();
}
return response()->json([
'status' => 200,
'message' => 'Widget has been successfully updated.'
]);
}
else {
return response()->json([
'status' => 409,
'message' => 'Widget ID already exists.'
]);
}
}
}
public function deleteWidget(Request $request) {
$widget = GJSWidget::find($request->id);
if ($widget) {
if (!empty($widget->blade)) {
$filename = str_replace('pagebuilderplus::widgets.', '', $widget->blade);
$path = module_path('PageBuilderPlus', "Resources/views/widgets/{$filename}.blade.php");
if (file_exists($path)) {
unlink($path);
}
}
$widget->delete();
return response()->json([
'status' => 200,
'message' => 'Widget has been successfully deleted.'
]);
}
}
}