HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers47/leden.ehbocranendonck.nl/app/KommaApp/Kms/Core/Attributes/Link.php
<?php
/**
 *
 *
 * @author      Komma <info@komma.pro>
 * @copyright   (c) 2012-2016, Komma
 */

namespace App\KommaApp\Kms\Core\Attributes;

use App\KommaApp\Kms\Core\Attributes\Traits\LabelTrait;
use View;

class Link extends Attribute
{
    use LabelTrait;

    const TYPE_URL = 'url';
    const TYPE_ACTION = 'action';
    const TYPE_ROUTE = 'route';
    const TYPE_ASSET = 'asset';

    /** @var string */
    private $url;

    /** @var string */
    private $linkText;

    /**
     * Link constructor.
     * @param string $type
     * @param string $link
     * @param string $linkText
     * @param array $linkParams
     */
    function __construct(string $type, string $link, string $linkText, array $linkParams = [])
    {
        $this->url = $this->generateLink($type, $link, $linkParams);
        $this->linkText = $linkText;

        $this->validateType($type);
        parent::__construct();

        $uuid = uniqid('seperator', true);
        $this->mapValueFrom(Attribute::ValueFromItself, $uuid);
        parent::setValue($uuid);
    }

    /**
     * @param string $type
     */
    private function validateType(string $type)
    {
        $validTypes = [
            Link::TYPE_URL,
            Link::TYPE_ACTION,
            Link::TYPE_ROUTE,
            Link::TYPE_ASSET,
        ];

        if(!in_array($type, $validTypes, true)) throw new \RuntimeException('The given type of "'.$type.'" isn\'t valid. Valid types constants: '.implode(',', $validTypes));
    }

    /**
     * @return \Illuminate\Contracts\View\View
     */
    public function render()
    {
        return View::make('kms/attributes.link', [
            'attribute' => $this
        ]);
    }

    /**
     * @param string $type
     * @param string $link
     * @param array $parameters
     * @return \Illuminate\Contracts\Routing\UrlGenerator|string
     */
    private function generateLink(string $type, string $link, array $parameters = [])
    {
        switch($type)
        {
            case self::TYPE_URL:
                return url($link, $parameters);
            case self::TYPE_ACTION:
                return action($link, $parameters);
            case self::TYPE_ROUTE:
                return route($link, $parameters);
            case self::TYPE_ASSET:
                return asset($link, $parameters);
            default:
                return '';
        }
    }

    /**
     * @return string
     */
    public function getUrl(): string
    {
        return $this->url;
    }

    /**
     * @return string
     */
    public function getLinkText(): string
    {
        return $this->linkText;
    }
}