akaunting/app/Traits/ViewComponents.php
2022-07-21 11:46:18 +03:00

756 lines
20 KiB
PHP

<?php
namespace App\Traits;
use Akaunting\Module\Module;
use App\Events\Common\BulkActionsAdding;
use App\Traits\Modules;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Str;
trait ViewComponents
{
use Modules;
public function setParentData()
{
$excludes = [
'componentName',
'attributes',
'except',
];
foreach ($this as $key => $value) {
if (in_array($key, $excludes)) {
continue;
}
$this->{$key} = $this->getParentData($key, $value);
}
}
public function getTextFromConfig($type, $config_key, $default_key = '', $trans_type = 'trans')
{
$translation = '';
// if set config translation config_key
if ($translation = config('type.' . static::OBJECT_TYPE . '.' . $type . '.translation.' . $config_key)) {
return $translation;
}
$alias = config('type.' . static::OBJECT_TYPE . '.' . $type . '.alias');
$prefix = config('type.' . static::OBJECT_TYPE . '.' . $type . '.translation.prefix');
if (! empty($alias)) {
$alias .= '::';
}
// This magic trans key..
$translations = [
'general' => $alias . 'general.' . $default_key,
'prefix' => $alias . $prefix . '.' . $default_key,
'config_general' => $alias . 'general.' . $config_key,
'config_prefix' => $alias . $prefix . '.' . $config_key,
];
switch ($trans_type) {
case 'trans':
foreach ($translations as $trans) {
if (trans($trans) !== $trans) {
return $trans;
}
}
break;
case 'trans_choice':
foreach ($translations as $trans_choice) {
if (trans_choice($trans_choice, 1) !== $trans_choice) {
return $trans_choice;
}
}
break;
}
return $translation;
}
public function getRouteFromConfig($type, $config_key, $config_parameters = [], $modal = false)
{
$route = '';
// if set config trasnlation config_key
if ($route = config('type.' . static::OBJECT_TYPE . '.' . $type . '.route.' . $config_key)) {
return $route;
}
$alias = config('type.' . static::OBJECT_TYPE . '.' . $type . '.alias');
$prefix = config('type.' . static::OBJECT_TYPE . '.' . $type . '.route.prefix');
// if use module set module alias
if (! empty($alias)) {
$route .= $alias . '.';
}
if ($modal == true) {
$route .= 'modals.';
}
if (! empty($prefix)) {
$route .= $prefix . '.';
}
$route .= $config_key;
try {
route($route, $config_parameters);
} catch (\Exception $e) {
try {
$route = Str::plural($type, 2) . '.' . $config_key;
route($route, $config_parameters);
} catch (\Exception $e) {
$route = '';
}
}
return $route;
}
public function getPermissionFromConfig($type, $config_key)
{
$permission = '';
// if set config trasnlation config_key
if ($permission = config('type.' . static::OBJECT_TYPE . '.' . $type . '.permission.' . $config_key)) {
return $permission;
}
$alias = config('type.' . static::OBJECT_TYPE . '.' . $type . '.alias');
$group = config('type.' . static::OBJECT_TYPE . '.' . $type . '.group');
$prefix = config('type.' . static::OBJECT_TYPE . '.' . $type . '.permission.prefix');
$permission = $config_key . '-';
// if use module set module alias
if (! empty($alias)) {
$permission .= $alias . '-';
}
// if controller in folder it must
if (! empty($group)) {
$permission .= $group . '-';
}
$permission .= $prefix;
return $permission;
}
public function getHideFromConfig($type, $config_key)
{
$hide = false;
$hides = config('type.' . static::OBJECT_TYPE . '.' . $type . '.hide');
if (! empty($hides) && (in_array($config_key, $hides))) {
$hide = true;
}
return $hide;
}
public function getClassFromConfig($type, $config_key)
{
$class_key = 'type.' . $type . '.class.' . $config_key;
return config($class_key, '');
}
public function getCategoryFromConfig($type)
{
$category_type = '';
// if set config trasnlation config_key
if ($category_type = config('type.' . static::OBJECT_TYPE . '.' . $type . '.category_type')) {
return $category_type;
}
switch ($type) {
case 'bill':
case 'expense':
case 'purchase':
$category_type = 'expense';
break;
case 'item':
$category_type = 'item';
break;
case 'other':
$category_type = 'other';
break;
case 'transfer':
$category_type = 'transfer';
break;
default:
$category_type = 'income';
break;
}
return $category_type;
}
public function getScriptFromConfig($type, $config_key)
{
$script_key = config('type.' . static::OBJECT_TYPE . '.' . $type . '.script.' . $config_key, '');
return $script_key;
}
protected function getTextPage($type, $textPage)
{
if (! empty($textPage)) {
return $textPage;
}
$config_route_prefix = config('type.' . static::OBJECT_TYPE . '.' . $type . '.route.prefix', static::DEFAULT_PLURAL_TYPE);
$page = str_replace('-', '_', $config_route_prefix);
$translation = $this->getTextFromConfig($type, 'page', $page);
if (! empty($translation)) {
return $translation;
}
return 'general.' . $page;
}
protected function getGroup($type, $group)
{
if (! empty($group)) {
return $group;
}
return config('type.' . static::OBJECT_TYPE . '.' . $type . '.group', static::DEFAULT_PLURAL_TYPE);
}
protected function getPage($type, $page)
{
if (! empty($page)) {
return $page;
}
return Str::plural($type);
}
protected function getPermissionCreate($type, $permissionCreate)
{
if (! empty($permissionCreate)) {
return $permissionCreate;
}
$permissionCreate = $this->getPermissionFromConfig($type, 'create');
return $permissionCreate;
}
protected function getPermissionUpdate($type, $permissionUpdate)
{
if (! empty($permissionUpdate)) {
return $permissionUpdate;
}
$permissionUpdate = $this->getPermissionFromConfig($type, 'update');
return $permissionUpdate;
}
protected function getPermissionDelete($type, $permissionDelete)
{
if (! empty($permissionDelete)) {
return $permissionDelete;
}
$permissionDelete = $this->getPermissionFromConfig($type, 'delete');
return $permissionDelete;
}
protected function getIndexRoute($type, $indexRoute)
{
if (! empty($indexRoute)) {
return $indexRoute;
}
$route = $this->getRouteFromConfig($type, 'index');
if (!empty($route)) {
return $route;
}
return static::DEFAULT_PLURAL_TYPE . '.index';
}
protected function getShowRoute($type, $showRoute)
{
if (! empty($showRoute)) {
return $showRoute;
}
$route = $this->getRouteFromConfig($type, 'show', 1);
if (!empty($route)) {
return $route;
}
return static::DEFAULT_PLURAL_TYPE . '.show';
}
protected function getCreateRoute($type, $createRoute)
{
if (! empty($createRoute)) {
return $createRoute;
}
$route = $this->getRouteFromConfig($type, 'create');
if (! empty($route)) {
return $route;
}
return static::DEFAULT_PLURAL_TYPE . '.create';
}
protected function getEditRoute($type, $editRoute)
{
if (! empty($editRoute)) {
return $editRoute;
}
$route = $this->getRouteFromConfig($type, 'edit', 1);
if (! empty($route)) {
return $route;
}
return static::DEFAULT_PLURAL_TYPE . '.edit';
}
protected function getDuplicateRoute($type, $duplicateRoute)
{
if (! empty($duplicateRoute)) {
return $duplicateRoute;
}
$route = $this->getRouteFromConfig($type, 'duplicate', 1);
if (! empty($route)) {
return $route;
}
return static::DEFAULT_PLURAL_TYPE . '.duplicate';
}
protected function getDeleteRoute($type, $deleteRoute)
{
if (! empty($deleteRoute)) {
return $deleteRoute;
}
$route = $this->getRouteFromConfig($type, 'destroy', 1);
if (! empty($route)) {
return $route;
}
return static::DEFAULT_PLURAL_TYPE . '.destroy';
}
protected function getCancelRoute($type, $cancelRoute)
{
if (! empty($cancelRoute)) {
return $cancelRoute;
}
$route = $this->getRouteFromConfig($type, 'index');
if (! empty($route)) {
return $route;
}
return static::DEFAULT_PLURAL_TYPE . '.index';
}
protected function getImportRoute($importRoute)
{
if (! empty($importRoute)) {
return $importRoute;
}
$route = 'import.create';
return $route;
}
protected function getImportRouteParameters($type, $importRouteParameters)
{
if (! empty($importRouteParameters)) {
return $importRouteParameters;
}
$alias = config('type.' . static::OBJECT_TYPE . '.' . $type . '.alias');
$group = config('type.' . static::OBJECT_TYPE . '.' . $type . '.group');
$prefix = config('type.' . static::OBJECT_TYPE . '.' . $type . '.route.prefix');
if (empty($group) && ! empty($alias)){
$group = $alias;
} else if (empty($group) && empty($alias)) {
$group = 'sales';
}
$importRouteParameters = [
'group' => $group,
'type' => $prefix,
];
return $importRouteParameters;
}
protected function getExportRoute($type, $exportRoute)
{
if (! empty($exportRoute)) {
return $exportRoute;
}
$route = $this->getRouteFromConfig($type, 'export');
if (! empty($route)) {
return $route;
}
return static::DEFAULT_PLURAL_TYPE . '.export';
}
protected function getSearchStringModel($type, $searchStringModel)
{
if (! empty($searchStringModel)) {
return $searchStringModel;
}
$search_string_model = config('type.' . static::OBJECT_TYPE . '.' . $type . '.search_string_model');
if (! empty($search_string_model)) {
return $search_string_model;
}
if ($group = config('type.' . static::OBJECT_TYPE . '.' . $type . '.group')) {
$group = Str::studly(Str::singular($group)) . '\\';
}
$prefix = Str::studly(Str::singular(config('type.' . static::OBJECT_TYPE . '.' . $type . '.route.prefix')));
if ($alias = config('type.' . static::OBJECT_TYPE . '.' . $type . '.alias')) {
$searchStringModel = 'Modules\\' . Str::studly($alias) .'\Models\\' . $group . $prefix;
} else {
$searchStringModel = 'App\Models\\' . $group . $prefix;
}
return $searchStringModel;
}
protected function getBulkActionClass($type, $bulkActionClass)
{
if (! empty($bulkActionClass)) {
return $bulkActionClass;
}
$bulk_actions = config('type.' . static::OBJECT_TYPE . '.' . $type . '.bulk_actions');
if (! empty($bulk_actions)) {
return $bulk_actions;
}
$file_name = '';
if ($group = config('type.' . static::OBJECT_TYPE . '.' . $type . '.group')) {
$file_name .= Str::studly($group) . '\\';
}
if ($prefix = config('type.' . static::OBJECT_TYPE . '.' . $type . '.route.prefix')) {
$file_name .= Str::studly($prefix);
}
if ($alias = config('type.' . static::OBJECT_TYPE . '.' . $type . '.alias')) {
$module = module($alias);
if (! $module instanceof Module) {
$b = new \stdClass();
$b->actions = [];
event(new BulkActionsAdding($b));
return $b->actions;
}
$bulkActionClass = 'Modules\\' . $module->getStudlyName() . '\BulkActions\\' . $file_name;
} else {
$bulkActionClass = 'App\BulkActions\\' . $file_name;
}
return $bulkActionClass;
}
protected function getBulkActionRouteParameters($type, $bulkActionRouteParameters)
{
if (! empty($bulkActionRouteParameters)) {
return $bulkActionRouteParameters;
}
$group = config('type.' . static::OBJECT_TYPE . '.' . $type . '.group');
if (! empty(config('type.' . static::OBJECT_TYPE . '.' . $type . '.alias'))) {
$group = config('type.' . static::OBJECT_TYPE . '.' . $type . '.alias');
}
$bulkActionRouteParameters = [
'group' => $group,
'type' => config('type.' . static::OBJECT_TYPE . '.' . $type . '.route.prefix')
];
return $bulkActionRouteParameters;
}
protected function getClassBulkAction($type, $classBulkAction)
{
if (! empty($classBulkAction)) {
return $classBulkAction;
}
$class = $this->getClassFromConfig($type, 'bulk_action');
if (! empty($class)) {
return $class;
}
return 'ltr:pr-6 rtl:pl-6 hidden sm:table-cell';
}
protected function getImageEmptyPage($type, $imageEmptyPage)
{
if (! empty($imageEmptyPage)) {
return $imageEmptyPage;
}
$image_empty_page = config('type.' . static::OBJECT_TYPE . '.' . $type . '.image_empty_page');
if (! empty($image_empty_page)) {
return $image_empty_page;
}
$page = str_replace('-', '_', config('type.' . static::OBJECT_TYPE . '.' . $type . '.route.prefix', 'invoices'));
$image_path = 'public/img/empty_pages/' . $page . '.png';
if ($alias = config('type.' . static::OBJECT_TYPE . '.' . $type . '.alias')) {
$image_path = 'modules/' . Str::studly($alias) . '/Resources/assets/img/empty_pages/' . $page . '.png';
}
return $image_path;
}
protected function getTextEmptyPage($type, $textEmptyPage)
{
if (! empty($textEmptyPage)) {
return $textEmptyPage;
}
$page = str_replace('-', '_', config('type.' . static::OBJECT_TYPE . '.' . $type . '.route.prefix', 'invoices'));
$translation = $this->getTextFromConfig($type, 'empty_page', 'empty.' . $page);
if (! empty($translation)) {
return $translation;
}
return 'general.empty.' . $page;
}
protected function getTextSectionTitle($type, $key, $default_key = '')
{
$translation = $this->getTextFromConfig($type, 'section_'. $key . '_title', $key);
if (! empty($translation)) {
return $translation;
}
if ($default_key) {
return $default_key;
}
return 'general.' . $key;
}
protected function getTextSectionDescription($type, $key, $default_key = '')
{
$translation = $this->getTextFromConfig($type, 'section_'. $key . '_description', 'form_description.' . $key);
if (! empty($translation)) {
return $translation;
}
if ($default_key) {
return $default_key;
}
return 'general.form_description.' . $key;
}
protected function getUrlDocsPath($type, $urlDocsPath)
{
if (! empty($urlDocsPath)) {
return $urlDocsPath;
}
$docs_path = config('type.' . static::OBJECT_TYPE . '.' . $type . '.docs_path');
if (! empty($docs_path)) {
return $docs_path;
}
switch ($type) {
case 'bill':
case 'expense':
case 'purchase':
$docsPath = 'purchases/bills';
break;
case 'vendor':
$docsPath = 'purchases/vendors';
break;
case 'customer':
$docsPath = 'sales/customers';
break;
case 'transaction':
$docsPath = 'banking/transactions';
break;
default:
$docsPath = 'sales/invoices';
break;
}
return 'https://akaunting.com/docs/user-manual/' . $docsPath;
}
public function getSuggestionModule()
{
return !empty($this->suggestions) ? Arr::random($this->suggestions) : false;
}
public function getSuggestionModules()
{
if ((! $user = user()) || $user->cannot('read-modules-home')) {
return [];
}
if (! $path = Route::current()->uri()) {
return [];
}
$path = str_replace('{company_id}/', '', $path);
if (! $suggestions = $this->getSuggestions($path)) {
return [];
}
$modules = [];
foreach ($suggestions->modules as $s_module) {
if ($this->moduleIsEnabled($s_module->alias)) {
continue;
}
$s_module->action_url = company_id() . '/' . $s_module->action_url;
$modules[] = $s_module;
}
if (empty($modules)) {
return [];
}
return $modules;
}
protected function getFormRoute($type, $formRoute, $model = false)
{
if (! empty($formRoute)) {
return $formRoute;
}
$prefix = 'store';
$parameters = [];
if (! empty($model)) {
$prefix = 'update';
$parameters = [$model->id];
}
$route = $this->getRouteFromConfig($type, $prefix, $parameters);
return (! empty($model)) ? [$route, $model->id] : $route;
}
protected function getFormMethod($type, $formMethod, $model = false)
{
if (! empty($formMethod)) {
return $formMethod;
}
$method = 'POST';
if (! empty($model)) {
$method = 'PATCH';
}
return $method;
}
protected function getAlias($type, $alias)
{
if (!empty($alias)) {
return $alias;
}
if ($alias = config('type.' . static::OBJECT_TYPE . '.' . $type . '.alias')) {
return $alias;
}
return 'core';
}
protected function getScriptFolder($type, $folder)
{
if (!empty($folder)) {
return $folder;
}
if ($folder = config('type.' . static::OBJECT_TYPE . '.' . $type . '.script.folder')) {
return $folder;
}
return '';
}
protected function getScriptFile($type, $file)
{
if (!empty($file)) {
return $file;
}
if ($file = config('type.' . static::OBJECT_TYPE . '.' . $type . '.script.file')) {
return $file;
}
return '';
}
}