rinvex/cortex-foundation

View on GitHub
src/Support/helpers.php

Summary

Maintainability
A
45 mins
Test Coverage
<?php

declare(strict_types=1);

use Illuminate\Support\Str;

if (! function_exists('extract_title')) {
    /**
     * Extract page title from breadcrumbs.
     *
     * @param mixed $breadcrumbs
     *
     * @return string
     */
    function extract_title($breadcrumbs, string $separator = ' ยป ')
    {
        return Str::afterLast(preg_replace('/[\n\r\s]+/', ' ', strip_tags(Str::replaceLast($separator, '', str_replace('</li>', $separator, (string) $breadcrumbs)))), $separator)." {$separator} ".config('app.name');
    }
}

if (! function_exists('route_prefix')) {
    /**
     * Return route prefix.
     *
     * @param mixed $accessarea
     *
     * @return string
     */
    function route_prefix($accessarea)
    {
        $prefix = app('accessareas')->firstWhere('slug', $accessarea)?->prefix;

        return config('cortex.foundation.route.locale_prefix') ? "{locale}/{$prefix}" : $prefix;
    }
}

if (! function_exists('intend')) {
    /**
     * Return redirect response.
     *
     * @param array    $arguments
     * @param int|null $status
     *
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
     */
    function intend(array $arguments, int $status = null)
    {
        if (request()->expectsJson()) {
            $messages = collect($arguments['with'] ?? []);
            $errors = collect($arguments['withErrors'] ?? []);

            return $errors->isNotEmpty() ?
                response()->json(['message' => $messages->flatten()->first(), 'errors' => $errors], $status ?: 422) :
                response()->json(['message' => $messages->flatten()->first() ?: 'OK'], $status ?: 200);
        }

        $redirect = redirect(Arr::pull($arguments, 'url'), in_array($status, [201, 301, 302, 303, 307, 308]) ? $status : 302);

        foreach ($arguments as $key => $value) {
            $redirect = in_array($key, ['home', 'back']) ? $redirect->{$key}() : $redirect->{$key}($value);
        }

        return $redirect;
    }
}

if (! function_exists('route_domains')) {
    /**
     * Return route domains array.
     *
     * @param string|null $accessarea
     *
     * @return array
     */
    function route_domains(string $accessarea = null): array
    {
        static $cachedDomains = null;

        if (isset($cachedDomains[$accessarea])) {
            return $cachedDomains[$accessarea];
        }

        $routeDomains = $accessarea ? collect(config('app.domains'))->filter(fn ($accessareas) => in_array($accessarea, $accessareas))->keys() : collect(config('app.domains'))->keys();

        if (app()->has('request.tenant') && app('request.tenant') && in_array($accessarea, ['managerarea', 'tenantarea'])) {
            $routeDomains = $routeDomains->map(fn ($routeDomain) => app('request.tenant')->slug.'.'.$routeDomain);

            if (! empty(app('request.tenant')->domain)) {
                $routeDomains->prepend(app('request.tenant')->domain);
            }
        }

        return $cachedDomains[$accessarea] = $routeDomains->toArray();
    }
}

if (! function_exists('default_route_domains')) {
    /**
     * Return default route domains array.
     *
     * @return array
     */
    function default_route_domains(): array
    {
        $routeDomains = [];

        app('accessareas')->each(function ($accessarea) use (&$routeDomains) {
            $routeDomains[$accessarea->slug] = get_str_contains(request()->getHost(), $routeDomain = route_domains($accessarea->slug)) ?: $routeDomain[0] ?? route_domains('frontarea')[0];
        });

        return $routeDomains;
    }
}

if (! function_exists('route_pattern')) {
    /**
     * Return route pattern.
     *
     * @param string|null $accessarea
     *
     * @return string
     */
    function route_pattern(string $accessarea = null): string
    {
        $routeDomainsPattern = implode('|', array_map('preg_quote', route_domains($accessarea)));

        return "^($routeDomainsPattern)$";
    }
}