Passed
Push — master ( 8a1751...f19d09 )
by Stefan
05:36
created

Maintenance::deleteObsoleteTempDirs()   D

Complexity

Conditions 10
Paths 14

Size

Total Lines 37
Code Lines 27

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 10
eloc 27
nc 14
nop 0
dl 0
loc 37
rs 4.8196
c 0
b 0
f 0

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
/*
4
 * ******************************************************************************
5
 * Copyright 2011-2017 DANTE Ltd. and GÉANT on behalf of the GN3, GN3+, GN4-1 
6
 * and GN4-2 consortia
7
 *
8
 * License: see the web/copyright.php file in the file structure
9
 * ******************************************************************************
10
 */
11
12
namespace web\lib\admin;
13
14
/**
15
 * This class factors out some functions which are done both interactively in
16
 * the superadmin area and by scripts in utils/ to avoid code duplication across
17
 * the two.
18
 */
19
class Maintenance {
20
21
    /**
22
     * delete our various cache and temp dirs if they are not needed any more
23
     * @return int the number of deleted temporary directories
24
     */
25
    public static function deleteObsoleteTempDirs() {
26
        $downloadsDirs = [
27
            'site_installers' => dirname(dirname(dirname(dirname(__FILE__)))) . "/var/installer_cache",
28
            'silverbullet' => dirname(dirname(dirname(dirname(__FILE__)))) . "/var/silverbullet"
29
        ];
30
        $tm = time();
31
        $i = 0;
32
        $Cache = [];
33
        $dbHandle = \core\DBConnection::handle("FRONTEND");
34
        $result = $dbHandle->exec("SELECT download_path FROM downloads WHERE download_path IS NOT NULL");
35
        while ($r = mysqli_fetch_row($result)) {
36
            $e = explode('/', $r[0]);
37
            $Cache[$e[count($e) - 2]] = 1;
38
        }
39
        foreach ($downloadsDirs as $downloads) {
40
            if ($handle = opendir($downloads)) {
41
                /* This is the correct way to loop over the directory. */
42
                while (false !== ($entry = readdir($handle))) {
43
                    if ($entry === '.' || $entry === '..' || $entry === '.gitignore') {
44
                        continue;
45
                    }
46
                    $ftime = $tm - filemtime($downloads . '/' . $entry);
47
                    if ($ftime < 3600) {
48
                        continue;
49
                    }
50
                    if (isset($Cache[$entry])) {
51
                        continue;
52
                    }
53
                    \core\common\Entity::rrmdir($downloads . '/' . $entry);
54
                    $i = $i + 1;
55
                    print "$entry\n";
56
                }
57
                closedir($handle);
58
            }
59
        }
60
        return $i;
61
    }
62
}
63