Passed
Push — develop ( 9c6499...a5e1bf )
by Jens
02:46
created

FilesStorage::addFile()   B

Complexity

Conditions 3
Paths 3

Size

Total Lines 25
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 17
nc 3
nop 1
dl 0
loc 25
rs 8.8571
c 0
b 0
f 0
1
<?php
2
/**
3
 * Created by jensk on 17-3-2017.
4
 */
5
6
namespace CloudControl\Cms\storage\storage;
7
8
9
class FilesStorage extends AbstractStorage
10
{
11
	/**
12
	 * @return array
13
	 */
14
	public function getFiles() {
15
		$files = $this->repository->files;
16
		usort($files, array($this, 'compareFiles'));
17
18
		return $files;
19
	}
20
21
	/**
22
	 * @param $postValues
23
	 *
24
	 * @throws \Exception
25
	 */
26
	public function addFile($postValues)
27
	{
28
		$destinationPath = realpath(__DIR__ . '/../../../www/files/');
29
30
		$filename = $this->validateFilename($postValues['name'], $destinationPath);
31
		$destination = $destinationPath . '/' . $filename;
32
33
		if ($postValues['error'] != '0') {
34
			throw new \Exception('Error uploading file. Error code: ' . $postValues['error']);
35
		}
36
37
		if (move_uploaded_file($postValues['tmp_name'], $destination)) {
38
			$file = new \stdClass();
39
			$file->file = $filename;
40
			$file->type = $postValues['type'];
41
			$file->size = $postValues['size'];
42
43
			$files = $this->repository->files;
44
			$files[] = $file;
45
			$this->repository->files = $files;
46
			$this->save();
47
		} else {
48
			throw new \Exception('Error moving uploaded file');
49
		}
50
	}
51
52
	/**
53
	 * @param $filename
54
	 *
55
	 * @return null
56
	 */
57
	public function getFileByName($filename)
58
	{
59
		$files = $this->getFiles();
60
		foreach ($files as $file) {
61
			if ($filename == $file->file) {
62
				return $file;
63
			}
64
		}
65
66
		return null;
67
	}
68
69
	/**
70
	 * @param $filename
71
	 *
72
	 * @throws \Exception
73
	 */
74
	public function deleteFileByName($filename)
75
	{
76
		$destinationPath = realpath(__DIR__ . '/../../../www/files/');
77
		$destination = $destinationPath . '/' . $filename;
78
79
		if (file_exists($destination)) {
80
			$files = $this->getFiles();
81
			foreach ($files as $key => $file) {
82
				if ($file->file == $filename) {
83
					unlink($destination);
84
					unset($files[$key]);
85
				}
86
			}
87
88
			$files = array_values($files);
89
			$this->repository->files = $files;
90
			$this->save();
91
		}
92
	}
93
94
	/**
95
	 * @param $a
96
	 * @param $b
97
	 *
98
	 * @return int
99
	 */
100
	private function compareFiles($a, $b)
101
	{
102
		return strcmp($a->file, $b->file);
103
	}
104
}