diff --git a/app/Http/Controllers/Admin/EditWidget.php b/app/Http/Controllers/Admin/EditWidget.php new file mode 100644 index 00000000..acad239a --- /dev/null +++ b/app/Http/Controllers/Admin/EditWidget.php @@ -0,0 +1,65 @@ +settings); + + $widget->containerClass = $settings->containerClass; + $widget->code = $settings->code; + + $presenter = call_user_func([$widget->widget_type_handler, 'getPresenter']); + + return call_user_func([$presenter, 'renderEditForm'], $widget); + } + + public function postEdit(EditWidgetRequest $request, $widget) + { + // create new widget + $widget = Widget::findOrFail($widget); + + // update name + $widget->name = $request->name; + + // save description if available + if (isset($request->description)) { + $widget->description = $request->description; + } + + // try to save this widget + try { + $widget = call_user_func([$widget->widget_type_handler, 'save'], $widget, $request); + } catch (MissingParameterException $e) { + // user omitted some value + return $this->invalidWidget($e->getMessage()); + } catch (\Exception $e) { + // something went wrong + return $this->invalidWidget(trans('admin/widgets.cannotSave', ['exception' => $e->getMessage()])); + } + + // save into database + $widget->save(); + + // redirect with success notification + return redirect() + ->route('widgets.overview') + ->with('success', trans('admin/widgets.successfullyEdited')); + } + + private function invalidWidget($error) + { + return redirect() + ->route('widgets.overview') + ->withInput() + ->with('error', $error); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Admin/WidgetsOverview.php b/app/Http/Controllers/Admin/WidgetsOverview.php new file mode 100644 index 00000000..31506334 --- /dev/null +++ b/app/Http/Controllers/Admin/WidgetsOverview.php @@ -0,0 +1,14 @@ + $widgets]); + } +} \ No newline at end of file diff --git a/app/Http/Requests/EditWidgetRequest.php b/app/Http/Requests/EditWidgetRequest.php new file mode 100644 index 00000000..55b93954 --- /dev/null +++ b/app/Http/Requests/EditWidgetRequest.php @@ -0,0 +1,18 @@ + 'required' + ]; + } +} diff --git a/app/Models/WidgetArea.php b/app/Models/WidgetArea.php index 1d5cb431..7646b0d0 100644 --- a/app/Models/WidgetArea.php +++ b/app/Models/WidgetArea.php @@ -3,22 +3,28 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\DB; /** * Class WidgetArea */ class WidgetArea extends Model { - public $timestamps = true; - protected $fillable = [ 'name', 'code', 'description' ]; - protected $guarded = []; - + public function getWidgets($uniqueCode) + { + return DB::table('widget_areas') + ->select('widget_areas.*', 'widgets.widget_type_handler', 'widgets.name as widget_name', 'widgets.settings') + ->where('code', $uniqueCode) + ->join('widget_in_widget_area', 'widget_in_widget_area.widget_area_id', '=', 'widget_areas.id') + ->join('widgets', 'widget_in_widget_area.widget_id', '=', 'widgets.id') + ->orderBy('widget_in_widget_area.position'); + } } \ No newline at end of file diff --git a/app/Models/WidgetInWidgetArea.php b/app/Models/WidgetInWidgetArea.php index a5ebcef7..9699ee44 100644 --- a/app/Models/WidgetInWidgetArea.php +++ b/app/Models/WidgetInWidgetArea.php @@ -9,16 +9,25 @@ use Illuminate\Database\Eloquent\Model; */ class WidgetInWidgetArea extends Model { - + protected $table = 'widget_in_widget_area'; public $timestamps = false; - protected $fillable = [ 'widget_id', 'widget_area_id', 'position' ]; - protected $guarded = []; - + public static function getWidgetIdsFromArea($widgetAreaId) + { + $models = WidgetInWidgetArea::where('widget_area_id', $widgetAreaId) + ->get(); + + $ids = []; + foreach ($models as $model) { + $ids[] = $model->widget_id; + } + + return $ids; + } } \ No newline at end of file diff --git a/resources/views/admin/widgets/overview.blade.php b/resources/views/admin/widgets/overview.blade.php new file mode 100644 index 00000000..fefb34d6 --- /dev/null +++ b/resources/views/admin/widgets/overview.blade.php @@ -0,0 +1,50 @@ +@extends('admin.layout') + +@section('pageName', @trans('admin/widgets.overview')) + +@section('content') + +
+

@lang('admin/widgets.overview')

+
+ +
+ + @if (session('success')) +
+ {{ session('success') }} +
+ @endif + + @if (session('error')) +
+ {{ session('error') }} +
+ @endif + + @if (!empty($widgets)) + + + + + + + + @foreach($widgets as $widget) + + + + + + + @endforeach +
@lang('admin/widgets.widgetType')@lang('admin/widgets.name')@lang('admin/widgets.description')@lang('admin/widgets.actions')
{{trans(call_user_func([$widget->widget_type_handler, 'getName']))}}{{$widget->name}}{{$widget->description}} + +
+ + {!! $widgets->render() !!} + @else + @lang('admin/widgets.noEntries') + @endif +
+@stop \ No newline at end of file