| <?php |
|
|
| namespace Kanboard\Core\ExternalLink; |
|
|
| use Kanboard\Core\Base; |
|
|
| |
| |
| |
| |
| |
| |
| class ExternalLinkManager extends Base |
| { |
| |
| |
| |
| |
| |
| const TYPE_AUTO = 'auto'; |
|
|
| |
| |
| |
| |
| |
| |
| private $providers = array(); |
|
|
| |
| |
| |
| |
| |
| |
| private $userInputType = ''; |
|
|
| |
| |
| |
| |
| |
| |
| private $userInputText = ''; |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public function register(ExternalLinkProviderInterface $provider) |
| { |
| array_unshift($this->providers, $provider); |
| return $this; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| public function getProvider($type) |
| { |
| foreach ($this->providers as $provider) { |
| if ($provider->getType() === $type) { |
| return $provider; |
| } |
| } |
|
|
| throw new ExternalLinkProviderNotFound('Unable to find link provider: '.$type); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public function getTypes() |
| { |
| $types = array(); |
|
|
| foreach ($this->providers as $provider) { |
| $types[$provider->getType()] = $provider->getName(); |
| } |
|
|
| asort($types); |
|
|
| return array(self::TYPE_AUTO => t('Auto')) + $types; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| public function getDependencyLabel($type, $dependency) |
| { |
| $provider = $this->getProvider($type); |
| $dependencies = $provider->getDependencies(); |
| return isset($dependencies[$dependency]) ? $dependencies[$dependency] : $dependency; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function find() |
| { |
| if ($this->userInputType === self::TYPE_AUTO) { |
| $provider = $this->findProvider(); |
| } else { |
| $provider = $this->getProvider($this->userInputType); |
| $provider->setUserTextInput($this->userInputText); |
|
|
| if (! $provider->match()) { |
| throw new ExternalLinkProviderNotFound('Unable to parse URL with selected provider'); |
| } |
| } |
|
|
| if ($provider === null) { |
| throw new ExternalLinkProviderNotFound('Unable to find link information from provided information'); |
| } |
|
|
| return $provider; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function setUserInput(array $values) |
| { |
| $this->userInputType = empty($values['type']) ? self::TYPE_AUTO : $values['type']; |
| $this->userInputText = empty($values['text']) ? '' : trim($values['text']); |
| return $this; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function setUserInputType($userInputType) |
| { |
| $this->userInputType = $userInputType; |
| return $this; |
| } |
|
|
| |
| |
| |
| |
| |
| public function setUserInputText($userInputText) |
| { |
| $this->userInputText = $userInputText; |
| return $this; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| private function findProvider() |
| { |
| foreach ($this->providers as $provider) { |
| $provider->setUserTextInput($this->userInputText); |
|
|
| if ($provider->match()) { |
| return $provider; |
| } |
| } |
|
|
| return null; |
| } |
| } |
|
|