alias = (module($alias) === null) ? 'core': $alias; $this->group = $group; $this->page = $page; $this->docsCategory = $docsCategory; $this->title = $this->getTitle($title); $this->description = $this->getDescription($description); $this->imageEmptyPage = $imageEmptyPage; $this->image = $this->getImage($page, $image); $this->checkPermissionCreate = $checkPermissionCreate; $this->permissionCreate = $this->getPermissionCreate($page, $group, $permissionCreate); $this->hideButtonCreate = $hideButtonCreate; $this->hideButtonImport = $hideButtonImport; $this->hideDocsDescription = $hideDocsDescription; $this->buttons = $this->getButtons($page, $group, $buttons); $this->suggestions = $this->getSuggestionModules(); $this->suggestion = $this->getSuggestionModule(); } /** * Get the view / contents that represent the component. * * @return \Illuminate\Contracts\View\View|string */ public function render() { return view('components.empty-page'); } protected function getTitle($title = null, $number = 2) { if (! empty($title)) { return $title; } switch ($this->alias) { case 'core': $text = 'general.' . $this->page; $text2 = 'general.' . Str::replace('-', '_', $this->page); break; default: $text = $this->alias . '::general.' . $this->page; $text2 = $this->alias . '::general.' . Str::replace('-', '_', $this->page); } $title = trans_choice($text, $number); if ($title == $text) { $title = trans_choice($text2, $number); } return $title; } protected function getDescription($description) { if (! empty($description)) { return $description; } switch ($this->alias) { case 'core': $text = 'general.empty.' . $this->page; $text2 = 'general.empty.' . Str::replace('-', '_', $this->page); break; default: $text = $this->alias . '::general.empty.' . $this->page; $text2 = $this->alias . '::general.empty.' . Str::replace('-', '_', $this->page); } $description = trans($text); if ($description == $text) { $description = trans($text2); } if ($this->hideDocsDescription) { $docs_url = $this->getDocsUrl(); if (! empty($docs_url)) { $description .= ' ' . trans('general.empty.documentation', ['url' => $docs_url]); } } return $description; } protected function getDocsUrl() { switch ($this->alias) { case 'core': $docs_path = 'user-manual/'; if (! empty($this->group)) { $docs_path .= $this->group . '/'; } $docs_path .= $this->page; break; default: $docs_path = 'app-manual/' . $this->docsCategory . '/' . $this->alias; } return 'https://akaunting.com/docs/' . $docs_path; } protected function getImage($page, $image) { if (! empty($image)) { return $image; } if (! empty($this->imageEmptyPage)) { return asset($this->imageEmptyPage); } $path = 'public/img/empty_pages/' . $page . '.png'; if ($this->alias != 'core') { $path = 'modules/' . Str::studly($this->alias) . '/Resources/assets/img/empty-' . $page . '.png'; if (! file_exists($path)) { $path = 'public/img/empty_pages/default.png'; } } return asset($path); } protected function getPermissionCreate($page, $group, $permissionCreate) { if (! empty($permissionCreate)) { return $permissionCreate; } $pages = [ 'reconciliations' => 'create-banking-reconciliations', 'transfers' => 'create-banking-transfers', 'vendors' => 'create-purchases-vendors', 'customers' => 'create-sales-customers', 'taxes' => 'create-settings-taxes', 'items' => 'create-common-items', ]; if (array_key_exists($page, $pages)) { $permissionCreate = $pages[$page]; } if (empty($permissionCreate) && !empty($group)) { $permissionCreate = 'create-' . $group . '-' . $page; } return $permissionCreate; } protected function getButtons($page, $group, $buttons) { if (! empty($buttons)) { $suggestion = $this->getSuggestionModule(); if (! empty($suggestion)) { return array_slice($buttons, 0, 2); } else { return array_slice($buttons, 0, 3); } } if (! $this->hideButtonCreate) { $buttons[] = $this->getCreateButton($page, $group); } if (! $this->hideButtonImport) { $buttons[] = $this->getImportButton(); } return $buttons; } protected function getCreateButton($page, $group) { try { $route = route($group . '.' . $page . '.create'); } catch (\Exception $e) { $route = route($page . '.create'); } $title = $this->getTitle(null, 1); return [ 'url' => $route, 'permission' => $this->permissionCreate, 'text' => trans('general.title.new', ['type' => $title]), 'description' => trans('general.empty.actions.new', ['type' => strtolower($title)]), 'active_badge' => true, ]; } protected function getImportButton() { $importRoute = $this->getImportRoute($this->importRoute); $importRouteParameters = $this->getImportRouteParameters($this->importRouteParameters); $title = $this->getTitle(); return [ 'url' => route($importRoute, $importRouteParameters), 'permission' => $this->permissionCreate, 'text' => trans('import.title', ['type' => $title]), 'description' => trans('general.empty.actions.import', ['type' => strtolower($title)]), 'active_badge' => false, ]; } protected function getImportRoute($importRoute) { if (! empty($importRoute)) { return $importRoute; } $route = 'import.create'; return $route; } protected function getImportRouteParameters($importRouteParameters) { if (! empty($importRouteParameters)) { return $importRouteParameters; } return array_slice(request()->segments(), -2, 2, true) ; } 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; } }