Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
32 / 32
100.00% covered (success)
100.00%
4 / 4
CRAP
100.00% covered (success)
100.00%
1 / 1
local
100.00% covered (success)
100.00%
32 / 32
100.00% covered (success)
100.00%
4 / 4
9
100.00% covered (success)
100.00%
1 / 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
100.00% covered (success)
100.00%
16 / 16
100.00% covered (success)
100.00%
1 / 1
4
 get_upload_ary
100.00% covered (success)
100.00%
10 / 10
100.00% covered (success)
100.00%
1 / 1
2
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;
19use phpbb\language\language;
20use phpbb\request\request_interface;
21
22class local extends base
23{
24    /** @var factory Files factory */
25    protected $factory;
26
27    /** @var request_interface */
28    protected $request;
29
30    /**
31     * Construct a form upload type
32     *
33     * @param factory $factory Files factory
34     * @param language $language Language class
35     * @param IniGetWrapper $php_ini ini_get() wrapper
36     * @param request_interface $request Request object
37     */
38    public function __construct(factory $factory, language $language, IniGetWrapper $php_ini, request_interface $request)
39    {
40        $this->factory = $factory;
41        $this->language = $language;
42        $this->php_ini = $php_ini;
43        $this->request = $request;
44    }
45
46    /**
47     * {@inheritdoc}
48     */
49    public function upload()
50    {
51        $args = func_get_args();
52        return $this->local_upload($args[0], isset($args[1]) ? $args[1] : false);
53    }
54
55    /**
56     * Move file from another location to phpBB
57     *
58     * @param string $source_file Filename of source file
59     * @param array|bool $filedata Array with filedata or false
60     *
61     * @return filespec Object "filespec" is returned, all further operations can be done with this object
62     */
63    protected function local_upload($source_file, $filedata = false)
64    {
65        $upload = $this->get_upload_ary($source_file, $filedata);
66
67        /** @var filespec $file */
68        $file = $this->factory->get('filespec');
69        $file->set_upload_ary($upload)
70            ->set_upload_namespace($this->upload);
71
72        if ($file->init_error())
73        {
74            $file->error[] = '';
75            return $file;
76        }
77
78        // PHP Upload file size check
79        $file = $this->check_upload_size($file);
80        if (count($file->error))
81        {
82            return $file;
83        }
84
85        // Not correctly uploaded
86        if (!$file->is_uploaded())
87        {
88            $file->error[] = $this->language->lang($this->upload->error_prefix . 'NOT_UPLOADED');
89            return $file;
90        }
91
92        $this->upload->common_checks($file);
93        $this->request->overwrite('local', $upload, request_interface::FILES);
94
95        return $file;
96    }
97
98    /**
99     * Retrieve upload array
100     *
101     * @param string $source_file Source file name
102     * @param array|bool $filedata File data array
103     *
104     * @return array Upload array
105     */
106    protected function get_upload_ary($source_file, $filedata)
107    {
108        $upload = array();
109
110        $upload['local_mode'] = true;
111        $upload['tmp_name'] = $source_file;
112
113        if ($filedata === false)
114        {
115            $upload['name'] = utf8_basename($source_file);
116            $upload['size'] = 0;
117        }
118        else
119        {
120            $upload['name'] = $filedata['realname'];
121            $upload['size'] = $filedata['size'];
122            $upload['type'] = $filedata['type'];
123        }
124
125        return $upload;
126    }
127}