Completed
Push — master ( 230a11...24b501 )
by
unknown
13s
created

Http::call()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 7
ccs 4
cts 4
cp 1
rs 9.4285
c 1
b 0
f 0
cc 1
eloc 3
nc 1
nop 4
crap 1
1
<?php
2
3
namespace eXpansion\Framework\Core\Helpers;
4
5
use eXpansion\Framework\Core\Helpers\JobRunner\Factory;
6
use eXpansion\Framework\Core\Helpers\Structures\HttpRequest;
7
use eXpansion\Framework\Core\Helpers\Structures\HttpResult;
8
use eXpansion\Framework\Core\Services\Application\AbstractApplication;
9
10
/**
11
 * Class Http
12
 *
13
 * @author    de Cramer Oliver<[email protected]>
14
 * @copyright 2017 Smile
15
 * @package eXpansion\Framework\Core\Helpers
16
 */
17
class Http
18
{
19
20
    /** @var Factory */
21
    protected $factory;
22
23
    /**
24
     * Http constructor.
25
     *
26
     * @param Factory $factory
27
     */
28 1
    public function __construct(Factory $factory)
29
    {
30 1
        $this->factory = $factory;
31 1
    }
32
33
    /**
34
     * Make a http query.
35
     *
36
     * @param string $url
37
     * @param callable $callback
38
     * @param null|mixed $additionalData If you need to pass additional metadata.
39
     *                                   You will get this back in the callback.
40
     * @param array $options curl options array
41
     */
42 1
    public function call($url, $callback, $additionalData = null, $options = [])
43
    {
44 1
        $curlJob = $this->factory->createCurlJob($url, $callback, $additionalData, $options);
45
46
        // Start job execution.
47 1
        $this->factory->startJob($curlJob);
48 1
    }
49
50
    /**
51
     * Make a get http query.
52
     *
53
     * @param string $url address
54
     * @param callable $callback callback
55
     * @param null|mixed $additionalData If you need to pass additional metadata.
56
     *                                          You will get this back in the callback.
57
     * @param array $options Single dimensional array of curl_setopt key->values
58
     */
59
    public function get($url, callable $callback, $additionalData = null, $options = [])
60
    {
61
62
        $defaultOptions = [
63
            CURLOPT_FOLLOWLOCATION => true,
64
            CURLOPT_USERAGENT => "eXpansionPluginPack v ".AbstractApplication::EXPANSION_VERSION,
65
        ];
66
67
        $options = $options + $defaultOptions;
68
        $additionalData['callback'] = $callback;
69
70
        $this->call($url, [$this, 'process'], $additionalData, $options);
71
    }
72
73
    /**
74
     * Make a post http query.
75
     *
76
     * @param string $url address
77
     * @param string|array $postFields
78
     * @param callable $callback callback with returning datas
79
     * @param null|mixed $additionalData If you need to pass additional metadata.
80
     *                                   You will get this back in the callback.
81
     * @param array $options Single dimensional array of curl_setopt key->values
82
     */
83
    public function post($url, $postFields, callable $callback, $additionalData = null, $options = [])
84
    {
85
        $defaultOptions = [
86
            CURLOPT_POST => true,
87
            CURLOPT_FOLLOWLOCATION => true,
88
            CURLOPT_USERAGENT => "eXpansionPluginPack v ".AbstractApplication::EXPANSION_VERSION,
89
        ];
90
91
        $options = $options + $defaultOptions;
92
93
        if (is_array($postFields)) {
94
            $query = http_build_query($postFields, '', '&');
95
        } else {
96
            $query = $postFields;
97
        }
98
99
        $options[CURLOPT_URL] = $url;
100
        $options[CURLOPT_POSTFIELDS] = $query;
101
102
        $additionalData['callback'] = $callback;
103
104
        $curlJob = $this->factory->createCurlJob($url, [$this, 'process'], $additionalData, $options);
105
106
        // Start job execution.
107
        $this->factory->startJob($curlJob);
108
    }
109
110
    /**
111
     * processes the request return value
112
     * @param HttpRequest $curl
113
     */
114
    public function process(HttpRequest $curl)
115
    {
116
        $data = $curl->getData();
117
        $additionalData = $curl->getAdditionalData();
118
        $callback = $additionalData['callback'];
119
        unset($additionalData['callback']);
120
121
        $obj = new HttpResult($data['response'], $data['curlInfo'], $curl->getCurlError(), $additionalData);
122
        call_user_func($callback, $obj);
123
    }
124
125
126
}
127
128