URL::create()   A
last analyzed

Complexity

Conditions 5
Paths 8

Size

Total Lines 41
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 5
eloc 21
c 1
b 0
f 0
nc 8
nop 3
dl 0
loc 41
rs 9.2728
1
<?php
2
/**
3
 * File containing the class {@see \Mailcode\Factory\CommandSets\Set\Show\URL}.
4
 *
5
 * @package Mailcode
6
 * @subpackage Factory
7
 * @see \Mailcode\Factory\CommandSets\Set\Show\URL
8
 */
9
10
declare(strict_types=1);
11
12
namespace Mailcode\Factory\CommandSets\Set\Show;
13
14
use Mailcode\Mailcode_Commands_Command_ShowURL;
15
use Mailcode\Mailcode_Exception;
16
use Mailcode\Mailcode_Factory_CommandSets_Set;
17
use Mailcode\Mailcode_Factory_Exception;
18
use Mailcode\Parser\PreParser;
19
20
/**
21
 * Factory class for the `showurl` command.
22
 *
23
 * @package Mailcode
24
 * @subpackage Factory
25
 * @author Sebastian Mordziol <[email protected]>
26
 */
27
class URL extends Mailcode_Factory_CommandSets_Set
28
{
29
    /**
30
     * @param string $url The target URL. Can contain Mailcode.
31
     * @param string|null $trackingID If not set, an auto-generated tracking ID will be used.
32
     * @param array<string,string> $queryParams
33
     * @return Mailcode_Commands_Command_ShowURL
34
     * @throws Mailcode_Factory_Exception
35
     */
36
    public function create(string $url, ?string $trackingID=null, array $queryParams=array()) : Mailcode_Commands_Command_ShowURL
37
    {
38
        $contentID = PreParser::storeContent($url);
39
40
        $params = array();
41
        $params[] = (string)$contentID;
42
43
        if($trackingID !== null)
44
        {
45
            $params[] = sprintf('"%s"', $trackingID);
46
        }
47
48
        if(!empty($queryParams))
49
        {
50
            foreach($queryParams as $name => $value)
51
            {
52
                $params[] = sprintf(
53
                    '"%s=%s"',
54
                    $name,
55
                    $value
56
                );
57
            }
58
        }
59
60
        $paramsString = implode(' ', $params);
61
62
        $cmd = $this->commands->createCommand(
63
            'ShowURL',
64
            '',
65
            $paramsString,
66
            '{showurl: '.$paramsString.'}'
67
        );
68
69
        $this->instantiator->checkCommand($cmd);
70
71
        if($cmd instanceof Mailcode_Commands_Command_ShowURL)
72
        {
73
            return $cmd;
74
        }
75
76
        throw $this->instantiator->exceptionUnexpectedType('ShowURL', $cmd);
77
    }
78
}
79