Spaces:
No application file
No application file
File size: 2,547 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
<?php
declare(strict_types=1);
namespace Mautic\IntegrationsBundle\Helper;
use Doctrine\Common\Collections\ArrayCollection;
use Mautic\IntegrationsBundle\DTO\IntegrationObjectToken as Token;
class TokenParser
{
public const TOKEN = '{mapped-integration-object=(.*?)}';
public function findTokens(string $content): ArrayCollection
{
$tokens = new ArrayCollection();
preg_match_all('/'.self::TOKEN.'/', $content, $matches);
if (empty($matches[1])) {
return $tokens;
}
foreach ($matches[1] as $key => $tokenDataRaw) {
$token = new Token($matches[0][$key]);
$parts = $this->getPartsDividedByPipe($tokenDataRaw);
$token->setObjectName($parts[0]);
foreach ($parts as $part) {
$options = $this->trimArrayElements(explode('=', $part));
if (2 !== count($options)) {
continue;
}
$keyword = $options[0];
$value = $options[1];
if ('mapped-integration-object' === $keyword) {
$token->setObjectName($value);
}
if ('integration' === $keyword) {
$token->setIntegration($value);
}
if ('default' === $keyword) {
$token->setDefaultValue($value);
}
if ('link-text' == $keyword) {
$token->setLinkText($value);
}
if ('base-url' == $keyword) {
$token->setBaseURL($value);
}
}
$tokens->set($token->getToken(), $token);
}
return $tokens;
}
public function buildTokenWithDefaultOptions($integrationObjectName, $integration, $default, $linkText, $baseURL): string
{
return sprintf(
'{mapped-integration-object=%s | integration=%s | default=%s | link-text=%s | base-url=%s}',
$integrationObjectName,
$integration,
$default,
$linkText,
$baseURL
);
}
/**
* @return string[]
*/
private function getPartsDividedByPipe(string $tokenDataRaw): array
{
return $this->trimArrayElements(explode('|', $tokenDataRaw));
}
/**
* @param string[] $array
*
* @return string[]
*/
private function trimArrayElements(array $array): array
{
return array_map('trim', $array);
}
}
|