Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
90.62% covered (success)
90.62%
29 / 32
50.00% covered (danger)
50.00%
2 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
local_storage
90.62% covered (success)
90.62%
29 / 32
50.00% covered (danger)
50.00%
2 / 4
9.07
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 upload
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
2
 local_upload
93.75% covered (success)
93.75%
15 / 16
0.00% covered (danger)
0.00%
0 / 1
4.00
 get_upload_ary
80.00% covered (warning)
80.00%
8 / 10
0.00% covered (danger)
0.00%
0 / 1
2.03
1<?php
2/**
3 *
4 * This file is part of the phpBB Forum Software package.
5 *
6 * @copyright (c) phpBB Limited <https://www.phpbb.com>
7 * @license GNU General Public License, version 2 (GPL-2.0)
8 *
9 * For full copyright and license information, please see
10 * the docs/CREDITS.txt file.
11 *
12 */
13
14namespace phpbb\files\types;
15
16use bantu\IniGetWrapper\IniGetWrapper;
17use phpbb\files\factory;
18use phpbb\files\filespec_storage;
19use phpbb\language\language;
20use phpbb\request\request_interface;
21
22class local_storage extends base
23{
24    /** @var factory Files factory */
25    protected $factory;
26
27    /** @var language */
28    protected $language;
29
30    /** @var IniGetWrapper */
31    protected $php_ini;
32
33    /** @var request_interface */
34    protected $request;
35
36    /** @var \phpbb\files\upload */
37    protected $upload;
38
39    /**
40     * Construct a form upload type
41     *
42     * @param factory $factory Files factory
43     * @param language $language Language class
44     * @param IniGetWrapper $php_ini ini_get() wrapper
45     * @param request_interface $request Request object
46     */
47    public function __construct(factory $factory, language $language, IniGetWrapper $php_ini, request_interface $request)
48    {
49        $this->factory = $factory;
50        $this->language = $language;
51        $this->php_ini = $php_ini;
52        $this->request = $request;
53    }
54
55    /**
56     * {@inheritdoc}
57     */
58    public function upload()
59    {
60        $args = func_get_args();
61        return $this->local_upload($args[0], isset($args[1]) ? $args[1] : false);
62    }
63
64    /**
65     * Move file from another location to phpBB
66     *
67     * @param string $source_file Filename of source file
68     * @param array|bool $filedata Array with filedata or false
69     *
70     * @return filespec_storage Object "filespec_storage" is returned, all further operations can be done with this object
71     */
72    protected function local_upload($source_file, $filedata = false)
73    {
74        $upload = $this->get_upload_ary($source_file, $filedata);
75
76        /** @var filespec_storage $file */
77        $file = $this->factory->get('filespec_storage');
78        $file->set_upload_ary($upload)
79            ->set_upload_namespace($this->upload);
80
81        if ($file->init_error())
82        {
83            $file->error[] = '';
84            return $file;
85        }
86
87        // PHP Upload file size check
88        /** @var filespec_storage $file */
89        $file = $this->check_upload_size($file);
90        if (count($file->error))
91        {
92            return $file;
93        }
94
95        // Not correctly uploaded
96        if (!$file->is_uploaded())
97        {
98            $file->error[] = $this->language->lang($this->upload->error_prefix . 'NOT_UPLOADED');
99            return $file;
100        }
101
102        $this->upload->common_checks($file);
103        $this->request->overwrite('local', $upload, request_interface::FILES);
104
105        return $file;
106    }
107
108    /**
109     * Retrieve upload array
110     *
111     * @param string $source_file Source file name
112     * @param array|bool $filedata File data array
113     *
114     * @return array Upload array
115     */
116    protected function get_upload_ary($source_file, $filedata)
117    {
118        $upload = array();
119
120        $upload['local_mode'] = true;
121        $upload['tmp_name'] = $source_file;
122
123        if ($filedata === false)
124        {
125            $upload['name'] = utf8_basename($source_file);
126            $upload['size'] = 0;
127        }
128        else
129        {
130            $upload['name'] = $filedata['realname'];
131            $upload['size'] = $filedata['size'];
132            $upload['type'] = $filedata['type'];
133        }
134
135        return $upload;
136    }
137}