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
|
|
|
|
{
|
2021-03-30 00:12:51 +03:00
|
|
|
public static function getClasses($alias = 'core', $check_permission = true)
|
2019-12-31 02:20:10 +03:00
|
|
|
{
|
2021-03-30 00:12:51 +03:00
|
|
|
$classes = $list = [];
|
|
|
|
|
|
|
|
if (in_array($alias, ['core', 'all'])) {
|
|
|
|
$list = [
|
|
|
|
'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',
|
|
|
|
'App\Widgets\Currencies',
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
Module::enabled()->each(function ($module) use (&$list, $alias) {
|
|
|
|
if (!in_array($alias, [$module->alias, 'all'])) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
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 21:53:10 +03:00
|
|
|
if (!class_exists($class) || ($check_permission && !static::canRead($class))) {
|
2019-12-31 02:20:10 +03:00
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
2020-02-06 17:08:20 +03:00
|
|
|
$classes[$class] = static::getDefaultName($class);
|
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)) {
|
2020-01-16 14:20:08 +03:00
|
|
|
$class_name = $model;
|
2020-01-04 11:49:59 +03:00
|
|
|
|
2020-01-16 14:20:08 +03:00
|
|
|
if (!class_exists($class_name)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
$model = Widget::where('dashboard_id', session('dashboard_id'))->where('class', $class_name)->first();
|
|
|
|
|
|
|
|
if (!$model instanceof Widget) {
|
|
|
|
$class = (new $class_name());
|
2020-01-04 11:49:59 +03:00
|
|
|
|
2020-01-16 14:20:08 +03:00
|
|
|
$model = new Widget();
|
|
|
|
$model->id = 0;
|
2021-04-16 00:59:43 +03:00
|
|
|
$model->company_id = company_id();
|
2020-01-16 14:20:08 +03:00
|
|
|
$model->dashboard_id = session('dashboard_id');
|
|
|
|
$model->class = $class_name;
|
|
|
|
$model->name = $class->getDefaultName();
|
|
|
|
$model->sort = 99;
|
|
|
|
$model->settings = $class->getDefaultSettings();
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if ((!$model instanceof Widget) || !class_exists($model->class)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
$class_name = $model->class;
|
|
|
|
}
|
2019-12-31 02:20:10 +03:00
|
|
|
|
2020-01-16 14:20:08 +03:00
|
|
|
return new $class_name($model);
|
2019-12-31 02:20:10 +03:00
|
|
|
}
|
|
|
|
|
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
|
|
|
|
2020-06-13 00:13:39 +03:00
|
|
|
public static function canShow($class)
|
|
|
|
{
|
|
|
|
return (static::isModuleEnabled($class) && static::canRead($class));
|
|
|
|
}
|
|
|
|
|
2020-01-04 17:49:11 +03:00
|
|
|
public static function canRead($class)
|
|
|
|
{
|
|
|
|
return user()->can(static::getPermission($class));
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function getPermission($class)
|
|
|
|
{
|
2020-01-06 14:42:14 +03:00
|
|
|
$arr = explode('\\', $class);
|
2020-01-04 17:49:11 +03:00
|
|
|
|
2020-01-06 14:42:14 +03:00
|
|
|
$prefix = 'read-';
|
|
|
|
|
|
|
|
// Add module
|
2020-06-13 00:13:39 +03:00
|
|
|
if ($alias = static::getModuleAlias($arr)) {
|
2020-06-12 17:32:00 +03:00
|
|
|
$prefix .= $alias . '-';
|
2020-01-06 14:42:14 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
$prefix .= 'widgets-';
|
|
|
|
|
|
|
|
$class_name = end($arr);
|
|
|
|
|
|
|
|
$permission = $prefix . Str::kebab($class_name);
|
2020-01-04 17:49:11 +03:00
|
|
|
|
2020-01-28 16:15:12 +03:00
|
|
|
return str_replace('--', '-', $permission);
|
2020-01-04 17:49:11 +03:00
|
|
|
}
|
2020-02-06 17:08:20 +03:00
|
|
|
|
|
|
|
public static function getDefaultName($class)
|
|
|
|
{
|
|
|
|
return (new $class())->getDefaultName();
|
|
|
|
}
|
2020-06-12 17:32:00 +03:00
|
|
|
|
2020-06-13 00:13:39 +03:00
|
|
|
public static function isModuleEnabled($class)
|
|
|
|
{
|
|
|
|
if (!$alias = static::getModuleAlias($class)) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (Module::alias($alias)->enabled()->first()) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2020-06-12 17:32:00 +03:00
|
|
|
public static function isModule($class)
|
|
|
|
{
|
2020-06-13 00:13:39 +03:00
|
|
|
$arr = is_array($class) ? $class : explode('\\', $class);
|
2020-06-12 17:32:00 +03:00
|
|
|
|
|
|
|
return (strtolower($arr[0]) == 'modules');
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function getModuleAlias($class)
|
|
|
|
{
|
|
|
|
if (!static::isModule($class)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2020-06-13 00:13:39 +03:00
|
|
|
$arr = is_array($class) ? $class : explode('\\', $class);
|
2020-06-12 17:32:00 +03:00
|
|
|
|
|
|
|
return Str::kebab($arr[1]);
|
|
|
|
}
|
2019-12-31 02:20:10 +03:00
|
|
|
}
|