Directory::clearDirectory()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
c 0
b 0
f 0
ccs 3
cts 3
cp 1
rs 10
cc 1
nc 1
nop 0
crap 1
1
<?php
2
namespace Redaxscript\Filesystem;
3
4
use RecursiveIteratorIterator;
5
use function is_dir;
6
use function mkdir;
7
use function rmdir;
8
use function unlink;
9
10
/**
11
 * children class to handle a directory in the filesystem
12
 *
13
 * @since 3.2.0
14
 *
15
 * @category Filesystem
16
 * @package Redaxscript
17
 * @author Henry Ruhs
18
 */
19
20
class Directory extends File
21
{
22
	/**
23
	 * create the directory
24
	 *
25
	 * @since 3.2.0
26
	 *
27
	 * @param string $directory name of the directory
28
	 * @param int $mode file access mode
29
	 *
30
	 * @return bool
31
	 */
32
33 2
	public function createDirectory(string $directory = null, int $mode = 0777) : bool
34
	{
35 2
		$path = $this->_root . DIRECTORY_SEPARATOR . $directory;
36 2
		return !is_dir($path) && mkdir($path, $mode);
37
	}
38
39
	/**
40
	 * remove the directory
41
	 *
42
	 * @since 3.2.0
43
	 *
44
	 * @param string $directory name of the directory
45
	 *
46
	 * @return bool
47
	 */
48
49 3
	public function removeDirectory(string $directory = null) : bool
50
	{
51 3
		if ($directory)
0 ignored issues
show
Bug Best Practice introduced by
The expression $directory of type null|string is loosely compared to true; this is ambiguous if the string can be empty. You might want to explicitly use !== null instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For string values, the empty string '' is a special case, in particular the following results might be unexpected:

''   == false // true
''   == null  // true
'ab' == false // false
'ab' == null  // false

// It is often better to use strict comparison
'' === false // false
'' === null  // false
Loading history...
52
		{
53 2
			$path = $this->_root . DIRECTORY_SEPARATOR . $directory;
54 2
			$this->_remove($path);
55 2
			return rmdir($path);
56
		}
57 1
		return false;
58
	}
59
60
	/**
61
	 * clear the directory
62
	 *
63
	 * @since 3.2.0
64
	 */
65
66 2
	public function clearDirectory() : void
67
	{
68 2
		$this->_remove($this->_root);
69 2
	}
70
71
	/**
72
	 * remove the directory
73
	 *
74
	 * @param string $directory name of the directory
75
	 */
76
77 4
	protected function _remove(string $directory = null) : void
78
	{
79 4
		$iterator = $this->_scan($directory);
80
81
		/* handle recursive */
82
83 4
		if ($this->_recursive)
84
		{
85 3
			$iterator = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::CHILD_FIRST);
86
		}
87
88
		/* process iterator */
89
90 4
		foreach ($iterator as $item)
91
		{
92 4
			$path = $item->getPathName();
93 4
			$item->isDir() ? rmdir($path) : unlink($path);
94
		}
95 4
	}
96
}
97