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;
}
}