Completed
Push — fix-inspection ( 204a0e )
by Yuichi
06:47
created

File::post()   B

Complexity

Conditions 2
Paths 2

Size

Total Lines 24
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
dl 0
loc 24
rs 8.9713
c 2
b 0
f 0
cc 2
eloc 14
nc 2
nop 2
1
<?php
2
3
namespace CybozuHttp\Api\Kintone;
4
5
use CybozuHttp\Client;
6
use CybozuHttp\Api\KintoneApi;
7
use CybozuHttp\Middleware\JsonStream;
8
9
10
/**
11
 * @author ochi51 <[email protected]>
12
 */
13
class File
14
{
15
    /**
16
     * @var Client
17
     */
18
    private $client;
19
20
    public function __construct(Client $client)
21
    {
22
        $this->client = $client;
23
    }
24
25
    /**
26
     * Get file
27
     * https://cybozudev.zendesk.com/hc/ja/articles/202166180#step1
28
     *
29
     * @param string $fileKey
30
     * @param int $guestSpaceId
31
     * @return string
32
     */
33
    public function get($fileKey, $guestSpaceId = null)
34
    {
35
        $options = ['json' => ['fileKey' => $fileKey]];
36
        $response = $this->client->get(KintoneApi::generateUrl('file.json', $guestSpaceId), $options);
37
38
        return (string)$response->getBody();
39
    }
40
41
    /**
42
     * Post file
43
     * https://cybozudev.zendesk.com/hc/ja/articles/201941824#step1
44
     *
45
     * @param string $filename
46
     * @param int $guestSpaceId
47
     * @return string
48
     */
49
    public function post($filename, $guestSpaceId = null)
50
    {
51
        $options = ['multipart' =>  [
52
            [
53
                'name' => 'file',
54
                'filename' => self::getFilename($filename),
55
                'contents' => fopen($filename, 'rb'),
56
                'headers' => [
57
                    'Content-Type' => mime_content_type($filename)
58
                ]
59
            ]
60
        ]];
61
        $baseUri = $this->client->getConfig('base_uri');
62
        if (strpos($baseUri->getHost(), 'cybozu.com') > 0) { // Japanese kintone
63
            setlocale(LC_ALL, 'ja_JP.UTF-8');
64
        }
65
66
        /** @var JsonStream $stream */
67
        $stream = $this->client
68
            ->post(KintoneApi::generateUrl('file.json', $guestSpaceId), $options)
69
            ->getBody();
70
71
        return $stream->jsonSerialize()['fileKey'];
72
    }
73
74
    /**
75
     * Returns locale independent base name of the given path.
76
     *
77
     * @param string $name The new file name
78
     * @return string containing
79
     */
80
    public static function getFilename($name)
81
    {
82
        $originalName = str_replace('\\', '/', $name);
83
        $pos = strrpos($originalName, '/');
84
        $originalName = false === $pos ? $originalName : substr($originalName, $pos + 1);
85
86
        return $originalName;
87
    }
88
}