Filesystem   A
last analyzed

Complexity

Total Complexity 26

Size/Duplication

Total Lines 157
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 73.75%

Importance

Changes 0
Metric Value
wmc 26
lcom 1
cbo 5
dl 0
loc 157
ccs 59
cts 80
cp 0.7375
rs 10
c 0
b 0
f 0

9 Methods

Rating   Name   Duplication   Size   Complexity  
A getDirectoriesToCreate() 0 4 1
A addDirectoriesToCreate() 0 4 1
A getDirectoriesToClean() 0 4 1
A addDirectoriesToClean() 0 4 1
A getSymlinksRelativeToCreate() 0 4 1
A addSymlinksRelativeToCreate() 0 7 2
A getFilesToCopy() 0 4 1
A addFilesToCopy() 0 9 2
C execute() 0 57 16
1
<?php
2
3
4
namespace Genesis\Commands\Filesystem;
5
6
use Genesis\Cli;
7
use Genesis\Commands\Command;
8
9
10
/**
11
 * @author Adam Bisek <[email protected]>
12
 */
13
class Filesystem extends Command
14
{
15
16
	const ERROR = 'error',
17
		SKIP = 'skip',
18
		REWRITE = 'rewrite';
19
20
	private $directoriesToCreate = [];
21
22
	private $directoriesToClean = [];
23
24
	private $filesToCopy = [];
25
26
	//private $symlinksToCreate; // TODO
27
28
	private $symlinksRelativeToCreate = [];
29
30
31
	/**
32
	 * @return array
33
	 */
34
	public function getDirectoriesToCreate()
35
	{
36
		return $this->directoriesToCreate;
37
	}
38
39
40
	/**
41
	 * @param array $directoriesToCreate
42
	 */
43 1
	public function addDirectoriesToCreate(array $directoriesToCreate)
44
	{
45 1
		$this->directoriesToCreate = array_merge($this->directoriesToCreate, $directoriesToCreate);
46 1
	}
47
48
49
	/**
50
	 * @return array
51
	 */
52
	public function getDirectoriesToClean()
53
	{
54
		return $this->directoriesToClean;
55
	}
56
57
58
	/**
59
	 * @param array $directoriesToClean
60
	 */
61 2
	public function addDirectoriesToClean(array $directoriesToClean)
62
	{
63 2
		$this->directoriesToClean = array_merge($this->directoriesToClean, $directoriesToClean);
64 2
	}
65
66
67
	/**
68
	 * @return array
69
	 */
70
	public function getSymlinksRelativeToCreate()
71
	{
72
		return $this->symlinksRelativeToCreate;
73
	}
74
75
76
	/**
77
	 * @param array $symlinksRelativeToCreate
78
	 */
79 1
	public function addSymlinksRelativeToCreate(array $symlinksRelativeToCreate, $baseDir)
80
	{
81 1
		if (!isset($this->symlinksRelativeToCreate[$baseDir])) {
82 1
			$this->symlinksRelativeToCreate[$baseDir] = [];
83 1
		}
84 1
		$this->symlinksRelativeToCreate[$baseDir] = array_merge($this->symlinksRelativeToCreate[$baseDir], $symlinksRelativeToCreate);
85 1
	}
86
87
88
	/**
89
	 * @return array
90
	 */
91
	public function getFilesToCopy()
92
	{
93
		return $this->filesToCopy;
94
	}
95
96
97
	/**
98
	 * @param array $filesToCopy
99
	 */
100 1
	public function addFilesToCopy(array $filesToCopy, $onDuplicate = 'error')
101
	{
102 1
		foreach ($filesToCopy as $destination => $source) {
103 1
			$this->filesToCopy[$destination] = [
104 1
				'source' => $source,
105 1
				'onDuplicate' => $onDuplicate,
106
			];
107 1
		}
108 1
	}
109
110
111 2
	public function execute()
112
	{
113 2
		if (count($this->directoriesToCreate) > 0) {
114 1
			$this->log(Cli::getColoredString('Creating directories', 'light_blue'));
115 1
			$command = new Directory();
116 1
			foreach ($this->directoriesToCreate as $directory => $chmod) {
117 1
				if (is_dir($directory)) {
118
					$this->log("Directory '$directory' already exists, skipping ...");
119
					continue;
120
				}
121 1
				$command->create($directory, $chmod);
122 1
				$this->log("Directory '$directory' created.");
123 1
			}
124 1
		}
125 2
		if (count($this->directoriesToClean) > 0) {
126 2
			$this->log(Cli::getColoredString('Cleaning directories', 'light_blue'));
127 2
			$command = new Directory();
128 2
			foreach ($this->directoriesToClean as $directory) {
129 2
				$command->clean($directory);
130 2
				$this->log("Directory '$directory' cleaned.");
131 2
			}
132 2
		}
133 2
		if (count($this->filesToCopy) > 0) {
134 1
			$this->log(Cli::getColoredString('Copying files', 'light_blue'));
135 1
			$command = new File();
136 1
			foreach ($this->filesToCopy as $destination => $options) {
137 1
				if (is_file($destination)) {
138
					if ($options['onDuplicate'] == self::ERROR) {
139
						$this->error("File '$destination' already exists.");
140
					}elseif ($options['onDuplicate'] == self::SKIP) {
141
						$this->log("File '$destination' already exists, skipping ...");
142
						continue;
143
					}elseif ($options['onDuplicate'] == self::REWRITE) {
144
						$command->delete($destination);
145
					}
146
				}
147 1
				$command->copy($options['source'], $destination);
148 1
				$this->log("File '$options[source]' copied to '$destination'.");
149 1
			}
150 1
		}
151 2
		if (count($this->symlinksRelativeToCreate) > 0) {
152 1
			$this->log(Cli::getColoredString('Creating symlinks', 'light_blue'));
153 1
			$command = new \Genesis\Commands\Filesystem\Symlink();
154 1
			foreach ($this->symlinksRelativeToCreate as $baseDir => $symlinks) {
155 1
				foreach ($symlinks as $link => $target) {
156 1
					$absoluteLinkPath = $baseDir . '/' . $link;
157 1
					if (is_link($absoluteLinkPath)) {
158
						$this->log("Symlink '$link' already exists, skipping ...");
159
						continue;
160
					}
161 1
					$command->createRelative($baseDir, $target, $link);
162 1
					$this->log("Symlink '$link' created.");
163 1
				}
164 1
			}
165 1
		}
166
167 2
	}
168
169
}