akaunting/app/Utilities/Widgets.php

86 lines
2.0 KiB
PHP
Raw Normal View History

2019-12-31 02:20:10 +03:00
<?php
namespace App\Utilities;
2020-01-04 11:49:59 +03:00
use App\Models\Common\Widget;
2019-12-31 02:20:10 +03:00
use App\Models\Module\Module;
2020-01-04 17:49:11 +03:00
use Illuminate\Support\Str;
2019-12-31 02:20:10 +03:00
class Widgets
{
public static function getClasses()
{
$classes = [];
2020-01-04 11:49:59 +03:00
$list = [
2019-12-31 02:20:10 +03:00
'App\Widgets\TotalIncome',
'App\Widgets\TotalExpenses',
'App\Widgets\TotalProfit',
'App\Widgets\CashFlow',
'App\Widgets\IncomeByCategory',
'App\Widgets\ExpensesByCategory',
'App\Widgets\AccountBalance',
'App\Widgets\LatestIncome',
'App\Widgets\LatestExpenses',
];
2020-01-04 11:49:59 +03:00
Module::enabled()->each(function ($module) use (&$list) {
2019-12-31 02:20:10 +03:00
$m = module($module->alias);
if (!$m || empty($m->get('widgets'))) {
2020-01-04 11:49:59 +03:00
return;
2019-12-31 02:20:10 +03:00
}
2020-01-04 11:49:59 +03:00
$list = array_merge($list, (array) $m->get('widgets'));
});
2019-12-31 02:20:10 +03:00
foreach ($list as $class) {
2020-01-04 17:49:11 +03:00
if (!class_exists($class) || !static::canRead($class)) {
2019-12-31 02:20:10 +03:00
continue;
}
2020-01-04 13:42:58 +03:00
$classes[$class] = (new $class())->getDefaultName();
2019-12-31 02:20:10 +03:00
}
2020-01-04 11:49:59 +03:00
return $classes;
2019-12-31 02:20:10 +03:00
}
2020-01-04 13:42:58 +03:00
public static function getClassInstance($model)
2019-12-31 02:20:10 +03:00
{
2020-01-04 11:49:59 +03:00
if (is_string($model)) {
$model = Widget::where('class', $model)->first();
}
if ((!$model instanceof Widget) || !class_exists($model->class)) {
return false;
}
2019-12-31 02:20:10 +03:00
$class = $model->class;
return new $class($model);
}
2020-01-04 11:49:59 +03:00
public static function show($model, ...$arguments)
2019-12-31 02:20:10 +03:00
{
2020-01-04 13:42:58 +03:00
if (!$class = static::getClassInstance($model)) {
2020-01-04 11:49:59 +03:00
return '';
}
return $class->show(...$arguments);
2019-12-31 02:20:10 +03:00
}
2020-01-04 17:49:11 +03:00
public static function canRead($class)
{
return user()->can(static::getPermission($class));
}
public static function getPermission($class)
{
$class_name = (new \ReflectionClass($class))->getShortName();
$permission = 'read-widgets-' . Str::kebab($class_name);
return $permission;
}
2019-12-31 02:20:10 +03:00
}