updated widget utility

This commit is contained in:
denisdulici 2020-01-04 11:49:59 +03:00
parent 906b7045fa
commit bc46b1f8f6
2 changed files with 29 additions and 20 deletions

View File

@ -2,6 +2,7 @@
namespace App\Utilities; namespace App\Utilities;
use App\Models\Common\Widget;
use App\Models\Module\Module; use App\Models\Module\Module;
class Widgets class Widgets
@ -10,7 +11,7 @@ class Widgets
{ {
$classes = []; $classes = [];
$core_classes = [ $list = [
'App\Widgets\TotalIncome', 'App\Widgets\TotalIncome',
'App\Widgets\TotalExpenses', 'App\Widgets\TotalExpenses',
'App\Widgets\TotalProfit', 'App\Widgets\TotalProfit',
@ -22,26 +23,16 @@ class Widgets
'App\Widgets\LatestExpenses', 'App\Widgets\LatestExpenses',
]; ];
static::parseClasses($classes, $core_classes); Module::enabled()->each(function ($module) use (&$list) {
$modules = Module::enabled()->get();
foreach ($modules as $module) {
$m = module($module->alias); $m = module($module->alias);
// Check if the module exists and has widgets
if (!$m || empty($m->get('widgets'))) { if (!$m || empty($m->get('widgets'))) {
continue; return;
} }
static::parseClasses($classes, $m->get('widgets')); $list = array_merge($list, (array) $m->get('widgets'));
} });
return $classes;
}
protected static function parseClasses(&$classes, $list)
{
foreach ($list as $class) { foreach ($list as $class) {
if (!class_exists($class)) { if (!class_exists($class)) {
continue; continue;
@ -51,17 +42,31 @@ class Widgets
$classes[$class] = $name; $classes[$class] = $name;
} }
return $classes;
} }
public static function getInstance($model) public static function getInstance($model)
{ {
if (is_string($model)) {
$model = Widget::where('class', $model)->first();
}
if ((!$model instanceof Widget) || !class_exists($model->class)) {
return false;
}
$class = $model->class; $class = $model->class;
return new $class($model); return new $class($model);
} }
public static function show($model) public static function show($model, ...$arguments)
{ {
return static::getInstance($model)->show(); if (!$class = static::getInstance($model)) {
return '';
}
return $class->show(...$arguments);
} }
} }

View File

@ -41,12 +41,16 @@ if (!function_exists('company_date')) {
if (!function_exists('show_widget')) { if (!function_exists('show_widget')) {
/** /**
* Format the given date based on company settings. * Show a widget.
* *
* @return string * @return string
*/ */
function show_widget($model) function show_widget()
{ {
return Widgets::show($model); $arguments = func_get_args();
$model = array_shift($arguments);
return Widgets::show($model, ...$arguments);
} }
} }