62 lines
1.5 KiB
PHP
62 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Support\Facades\Event;
|
|
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
|
|
|
|
/**
|
|
* Class Widget
|
|
*/
|
|
class Widget extends Model
|
|
{
|
|
public $timestamps = true;
|
|
protected $fillable = [
|
|
'widget_type_handler',
|
|
'user_id',
|
|
'name',
|
|
'settings',
|
|
'description'
|
|
];
|
|
protected $guarded = [];
|
|
|
|
/**
|
|
* Create new widget of given type
|
|
*
|
|
* @param WidgetType $widgetType
|
|
* @param $data
|
|
*
|
|
* @return Widget
|
|
*/
|
|
public function createNew(WidgetType $widgetType, $data)
|
|
{
|
|
|
|
// convert array or whatever into object
|
|
if (!is_object($data)) {
|
|
$data = (object)$data;
|
|
}
|
|
|
|
// create new widget
|
|
$widget = new Widget();
|
|
$widget->widget_type_handler = $widgetType->handler;
|
|
$widget->language = LaravelLocalization::getCurrentLocale();
|
|
$widget->user_id = \Auth::user()->id;
|
|
$widget->name = $data->name;
|
|
|
|
// save description if available
|
|
if (isset($data->description)) {
|
|
$widget->description = $data->description;
|
|
}
|
|
|
|
$widget = call_user_func([$widgetType->handler, 'save'], $widget, $data);
|
|
|
|
// save into database
|
|
$widget->save();
|
|
|
|
// fire event with newly created widget
|
|
Event::fire(new \App\Events\CreateNewWidget($widget));
|
|
|
|
return $widget;
|
|
}
|
|
} |