Completed
Pull Request — master (#2)
by Jan-Petter
02:43
created

Basic::convertEncoding()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

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