Completed
Push — develop ( 56e698...1a7010 )
by Daniel
08:15
created

upload::get_user_dir()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 19
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 19
ccs 7
cts 7
cp 1
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 8
nc 3
nop 0
crap 3

1 Method

Rating   Name   Duplication   Size   Complexity  
A upload::set_allowed_extensions() 0 4 1
1
<?php
2
/**
3
 *
4
 * @package sitemaker
5
 * @copyright (c) 2017 Daniel A. (blitze)
6
 * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
7
 *
8
 */
9
10
namespace blitze\sitemaker\controller;
11
12
use Symfony\Component\HttpFoundation\JsonResponse;
13
14
class upload
15
{
16
	/** @var \phpbb\auth\auth */
17
	protected $auth;
18
19
	/** @var \phpbb\files\factory */
20
	protected $files_factory;
21
22
	/** @var \phpbb\language\language */
23
	protected $language;
24
25
	/** @var \blitze\sitemaker\services\filemanager\setup */
26
	protected $filemanager;
27
28
	/** @var array */
29
	protected $allowed_extensions = array('jpg', 'jpeg', 'png', 'gif', 'bmp', 'tiff', 'svg');
30
31
	/**
32
	 * Constructor
33
	 *
34
	 * @param \phpbb\auth\auth								$auth				Auth object
35
	 * @param \phpbb\files\factory							$files_factory		Files factory object
36
	 * @param \phpbb\language\language						$language			Language object
37
	 * @param \blitze\sitemaker\services\filemanager\setup	$filemanager		Filemanager object
38
	 */
39 5
	public function __construct(\phpbb\auth\auth $auth, \phpbb\files\factory $files_factory, \phpbb\language\language $language, \blitze\sitemaker\services\filemanager\setup $filemanager)
40
	{
41 5
		$this->auth = $auth;
42 5
		$this->files_factory = $files_factory;
43 5
		$this->language = $language;
44 5
		$this->filemanager = $filemanager;
45 5
	}
46
47
	/**
48
	 * @return \Symfony\Component\HttpFoundation\Response
49
	 */
50 5
	public function handle()
51
	{
52
		$json_data = array(
53 5
			'location'	=> '',
54 5
			'message'   => '',
55 5
		);
56
57 5
		if (!$this->auth->acl_get('u_sm_filemanager'))
58 5
		{
59 1
			$json_data['message'] = $this->language->lang('NOT_AUTHORISED');
60 1
			return new JsonResponse($json_data, 401);
61
		}
62
63 4
		$this->handle_upload($json_data);
64
65 4
		return new JsonResponse($json_data);
66
	}
67
68
	/**
69
	 * @param array $json_data
70
	 * @return void
71
	 */
72 4
	protected function handle_upload(array &$json_data)
73
	{
74 4
		$file = $this->files_factory->get('files.upload')
75 4
			->set_disallowed_content(array())
76 4
			->set_allowed_extensions($this->allowed_extensions)
77 4
			->handle_upload('files.types.form', 'file');
78
79 4
		$destination = $this->filemanager->get_upload_destination();
80 4
		$user_dir = $this->filemanager->get_user_dir();
81
82 4
		$this->set_filename($file);
83 4
		$file->move_file(rtrim($destination, '/'), true);
84
85 4
		if (sizeof($file->error))
86 4
		{
87 1
			$file->remove();
88 1
			$json_data['message'] = implode('<br />', $file->error);
89 1
		}
90
		else
91
		{
92 3
			$json_data['location'] = $user_dir . $file->get('realname');
93
		}
94 4
	}
95
96
	/**
97
	 * @param \phpbb\files\filespec $file
98
	 * @return void
99
	 */
100 4
	protected function set_filename(\phpbb\files\filespec &$file)
101
	{
102 4
		$mode = 'real';
103 4
		$prefix = '';
104
105 4
		if (preg_match('/^(blobid|imagetools)\d?/i', $file->get('realname')))
106 4
		{
107 2
			$mode = 'unique';
108 2
			$prefix = 'sm_';
109 2
		}
110
111 4
		$file->clean_filename($mode, $prefix);
112 4
	}
113
114
	/**
115
	 * @param array $allowed_extensions
116
	 * @return void
117
	 */
118 5
	public function set_allowed_extensions(array $allowed_extensions)
119
	{
120 5
		$this->allowed_extensions = $allowed_extensions;
121 5
	}
122
}
123