Completed
Push — master ( 512542...4d85fd )
by Jan-Petter
02:22
created

TxtClient::cleanParam()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
namespace vipnytt\RobotsTxtParser;
3
4
use vipnytt\RobotsTxtParser\Client\Directives\CleanParamClient;
5
use vipnytt\RobotsTxtParser\Client\Directives\HostClient;
6
use vipnytt\RobotsTxtParser\Client\Directives\SitemapClient;
7
use vipnytt\RobotsTxtParser\Client\Directives\UserAgentClient;
8
use vipnytt\RobotsTxtParser\Client\Encoding\EncodingConverter;
9
use vipnytt\RobotsTxtParser\Exceptions\ClientException;
10
use vipnytt\RobotsTxtParser\Parser\RobotsTxtParser;
11
use vipnytt\RobotsTxtParser\Parser\UrlParser;
12
13
/**
14
 * Class TxtClient
15
 *
16
 * @package vipnytt\RobotsTxtParser
17
 */
18
class TxtClient extends RobotsTxtParser
19
{
20
    use UrlParser;
21
22
    /**
23
     * Status code
24
     * @var int|null
25
     */
26
    protected $statusCode;
27
28
    /**
29
     * Robots.txt content
30
     * @var string
31
     */
32
    private $content;
33
34
    /**
35
     * TxtClient constructor.
36
     *
37
     * @param string $baseUri
38
     * @param int $statusCode
39
     * @param string|null $content
40
     * @param string $encoding
41
     * @param int|null $byteLimit
42
     */
43
    public function __construct($baseUri, $statusCode, $content, $encoding = self::ENCODING, $byteLimit = self::BYTE_LIMIT)
44
    {
45
        $this->statusCode = $statusCode;
46
        $this->content = $content;
47
        $this->convertEncoding($encoding);
48
        $this->limitBytes($byteLimit);
49
        parent::__construct($baseUri, $this->content);
50
    }
51
52
    /**
53
     * Convert character encoding
54
     *
55
     * @param string $encoding
56
     * @return string
57
     */
58
    private function convertEncoding($encoding)
59
    {
60
        mb_internal_encoding(self::ENCODING);
61
        $convert = new EncodingConverter($this->content, $encoding);
62
        if (($result = $convert->auto()) !== false) {
63
            return $this->content = $result;
64
        }
65
        return $this->content;
66
    }
67
68
    /**
69
     * Byte limit
70
     *
71
     * @param int|null $bytes
72
     * @return string
73
     * @throws ClientException
74
     */
75
    private function limitBytes($bytes)
76
    {
77
        if ($bytes === null) {
78
            return $this->content;
79
        } elseif ($bytes < (self::BYTE_LIMIT * 0.25)) {
80
            throw new ClientException('Byte limit is set dangerously low! Default value=' . self::BYTE_LIMIT);
81
        }
82
        return $this->content = mb_strcut($this->content, 0, intval($bytes));
83
    }
84
85
    /**
86
     * Clean-param
87
     *
88
     * @return CleanParamClient
89
     */
90
    public function cleanParam()
91
    {
92
        return $this->handler->cleanParam()->client();
93
    }
94
95
    /**
96
     * Host
97
     *
98
     * @return HostClient
99
     */
100
    public function host()
101
    {
102
        return $this->handler->host()->client();
103
    }
104
105
    /**
106
     * Sitemaps
107
     *
108
     * @return SitemapClient
109
     */
110
    public function sitemap()
111
    {
112
        return $this->handler->sitemap()->client();
113
    }
114
115
    /**
116
     * Get User-agent list
117
     *
118
     * @return string[]
119
     */
120
    public function getUserAgents()
121
    {
122
        return $this->handler->userAgent()->getUserAgents();
123
    }
124
125
    /**
126
     * Client User-agent specific rules
127
     *
128
     * @param string $string
129
     * @return UserAgentClient
130
     */
131
    public function userAgent($string = self::USER_AGENT)
132
    {
133
        return $this->handler->userAgent()->client($string, $this->statusCode);
134
    }
135
}
136