%PDF- %PDF-
| Direktori : /home/graphicd/public_html/vebto/common/Core/Bootstrap/ |
| Current File : /home/graphicd/public_html/vebto/common/Core/Bootstrap/BaseBootstrapData.php |
<?php namespace Common\Core\Bootstrap;
use App\User;
use Arr;
use Common\Admin\Appearance\Themes\CssTheme;
use Common\Auth\Roles\Role;
use Common\Localizations\Localization;
use Common\Localizations\LocalizationsRepository;
use Common\Localizations\UserLocaleController;
use Common\Settings\Settings;
use Cookie;
use Illuminate\Http\Request;
use Negotiation\LanguageNegotiator;
class BaseBootstrapData implements BootstrapData
{
/**
* @var Settings
*/
protected $settings;
/**
* @var Request
*/
protected $request;
/**
* @var LocalizationsRepository
*/
protected $localizationRepository;
/**
* @var Role
*/
protected $role;
/**
* @var array
*/
protected $data = [];
public function __construct(
Settings $settings,
Request $request,
Role $role,
LocalizationsRepository $localizationsRepository
) {
$this->role = $role;
$this->request = $request;
$this->settings = $settings;
$this->localizationRepository = $localizationsRepository;
}
public function getEncoded(): string
{
if ($this->data['user']) {
$this->data['user'] = $this->data['user']->toArray();
}
return base64_encode(json_encode($this->data));
}
public function get($key = null)
{
return $key ? Arr::get($this->data, $key) : $this->data;
}
public function getSelectedTheme($key = null)
{
$selected = $this->get('themes.selected') ?: 'light';
$value = Arr::get($this->data['themes'][$selected], $key);
return $key === 'name' ? strtolower($value) : $value;
}
public function init()
{
$this->data['settings'] = $this->settings->all();
$this->data['csrf_token'] = csrf_token();
$this->data['settings']['base_url'] = config('app.url');
$this->data['settings']['version'] = config('common.site.version');
$this->data['user'] = $this->getCurrentUser();
$this->data['guests_role'] = $this->role
->where('guests', 1)
->with('permissions')
->first();
$this->data['i18n'] = $this->getLocalizationData() ?: null;
$this->data['themes'] = $this->getThemes();
$this->data['language'] = $this->data['i18n']
? $this->data['i18n']['model']['language']
: 'en';
if (
config('common.site.notifications_integrated') &&
$this->data['user']
) {
$this->data['user']->unread_notifications_count = $this->data[
'user'
]
->unreadNotifications()
->count();
}
return $this;
}
public function getThemes(): array
{
$themes = app(CssTheme::class)
->where('default_dark', true)
->orWhere('default_light', true)
->get();
$defaultDark = new CssTheme([
'name' => 'dark',
'is_dark' => true,
'colors' => config('common.themes.dark'),
]);
$defaultLight = new CssTheme([
'name' => 'light',
'is_light' => true,
'colors' => config('common.themes.light'),
]);
$cookieName = slugify(config('app.name')) . '_theme';
$defaultMode = $this->settings->get('themes.default_mode', 'light');
if ($this->settings->get('themes.user_change')) {
if ($themeFromUrl = $this->request->get('be-mode')) {
$selectedTheme = $themeFromUrl === 'light' ? 'light' : 'dark';
} else {
$selectedTheme = Arr::get($_COOKIE, $cookieName);
}
} else {
$selectedTheme = $defaultMode;
}
return [
'dark' =>
$themes->where('default_dark', true)->first() ?: $defaultDark,
'light' =>
$themes->where('default_light', true)->first() ?: $defaultLight,
'selected' => $selectedTheme ?: $defaultMode,
];
}
/**
* Load current user and his roles.
*/
public function getCurrentUser(): ?User
{
$user = $this->request->user();
if ($user) {
// load user subscriptions, if billing is enabled
if (
app(Settings::class)->get('billing.enable') &&
!$user->relationLoaded('subscriptions')
) {
$user->load('subscriptions.plan');
}
// load user roles, if not already loaded
if (!$user->relationLoaded('roles')) {
$user->load('roles');
}
if (!$user->relationLoaded('permissions')) {
$user->loadPermissions();
}
}
return $user;
}
protected function getLocalizationData(): ?array
{
if (!$this->settings->get('i18n.enable')) {
return null;
}
// Priority: Query param > account settings > cookie > browser preferences > default
$langCode =
$this->request->get('lang') ??
$this->request->user()->language ??
Cookie::get(UserLocaleController::COOKIE_NAME);
if (
!$langCode &&
($header = $this->request->header('Accept-Language'))
) {
$bestLanguage = (new LanguageNegotiator())->getBest(
$header,
Localization::pluck('language')->toArray(),
);
$langCode = $bestLanguage ? $bestLanguage->getBasePart() : null;
}
if (!$langCode) {
$langCode = config('app.locale');
}
return $this->localizationRepository->getByNameOrCode($langCode);
}
}