Completed
Push — master ( 1a7ce7...1ad772 )
by recca
06:25 queued 04:18
created

Receiver::callback()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 19
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 13
CRAP Score 1.0003

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 19
ccs 13
cts 14
cp 0.9286
rs 9.4285
cc 1
eloc 14
nc 1
nop 0
crap 1.0003
1
<?php
2
3
namespace Recca0120\Upload;
4
5
use Closure;
6
use Illuminate\Support\Arr;
7
use Illuminate\Http\JsonResponse;
8
use Recca0120\Upload\Apis\FileAPI;
9
use Recca0120\Upload\Apis\Plupload;
10
use Recca0120\Upload\Contracts\Api;
11
use Symfony\Component\HttpFoundation\File\UploadedFile;
12
use Recca0120\Upload\Exceptions\ChunkedResponseException;
13
14
class Receiver
15
{
16
    /**
17
     * $api.
18
     *
19
     * @var \Recca0120\Upload\Contracts\Api
20
     */
21
    protected $api;
22
23
    /**
24
     * $url.
25
     *
26
     * @var string
27
     */
28
    protected $url;
29
30
    /**
31
     * __construct.
32
     *
33
     * @param \Recca0120\Upload\Contracts\Api $api
34
     */
35 6
    public function __construct(Api $api)
36
    {
37 6
        $this->api = $api;
38 6
    }
39
40
    /**
41
     * setUrl.
42
     *
43
     * @param string $url
44
     * @return $this
45
     */
46
    public function setUrl($url)
47
    {
48
        $this->url = $url;
49
50
        return $this;
51
    }
52
53
    /**
54
     * receive.
55
     *
56
     * @param string $inputName
57
     * @param \Closure $callback
58
     * @return \Symfony\Component\HttpFoundation\Response
59
     */
60 3
    public function receive($inputName = 'file', Closure $callback = null)
61
    {
62
        try {
63 3
            $callback = $callback ?: $this->callback();
64 3
            $response = $callback(
65 3
                $uploadedFile = $this->api->receive($inputName),
66 2
                $this->api->path(),
67 2
                $this->api->domain(),
68 2
                $this->api
69 2
            );
70
71 1
            return $this->api->deleteUploadedFile($uploadedFile)->completedResponse($response);
72 2
        } catch (ChunkedResponseException $e) {
73 1
            return $e->getResponse();
74
        }
75
    }
76
77
    /**
78
     * callback.
79
     *
80
     * @return \Closure
81
     */
82
    protected function callback()
83
    {
84 1
        return function (UploadedFile $uploadedFile, $path, $domain) {
85 1
            $clientOriginalName = $uploadedFile->getClientOriginalName();
86 1
            $clientOriginalExtension = strtolower($uploadedFile->getClientOriginalExtension());
87 1
            $basename = pathinfo($uploadedFile->getBasename(), PATHINFO_FILENAME);
88 1
            $filename = $basename.'.'.$clientOriginalExtension;
89
            $response = [
90 1
                'name' => $clientOriginalName,
91 1
                'tmp_name' => $path.$filename,
92 1
                'type' => $uploadedFile->getMimeType(),
93 1
                'size' => $uploadedFile->getSize(),
94 1
                'url' => $domain.$path.$filename,
95 1
            ];
96 1
            $uploadedFile->move($path, $filename);
97
            
98
            return new JsonResponse($response);
99 1
        };
100
    }
101
102
    /**
103
     * factory.
104
     *
105
     * @param array $config
106
     * @param string $class
107
     * @return \Recca0120\Upload\Contracts\Api
108
     */
109 1
    public static function factory($config = [], $class = FileAPI::class)
110
    {
111 1
        $class = Arr::get([
112 1
            'fileapi' => FileAPI::class,
113 1
            'plupload' => Plupload::class,
114 1
        ], strtolower($class), $class);
115
116 1
        return new static(new $class($config));
117
    }
118
}
119