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

Maintenance   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2

Importance

Changes 0
Metric Value
dl 0
loc 44
rs 10
c 0
b 0
f 0
wmc 10
lcom 0
cbo 2

1 Method

Rating   Name   Duplication   Size   Complexity  
D deleteObsoleteTempDirs() 0 37 10
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