Completed
Pull Request — master (#103)
by
unknown
02:41
created

Installer.php (2 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
/**
3
 * Part of ci-phpunit-test
4
 *
5
 * @author     Kenji Suzuki <https://github.com/kenjis>
6
 * @license    MIT License
7
 * @copyright  2015 Kenji Suzuki
8
 * @link       https://github.com/kenjis/ci-phpunit-test
9
 */
10
11
class Installer
12
{
13
    const TEST_FOLDER = 'application/tests';
14
15
    public static function install()
16
    {
17
        self::recursiveCopy(
18
            'vendor/kenjis/ci-phpunit-test/application/tests',
19
            static::TEST_FOLDER
20
        );
21
        self::fixPath();
22
    }
23
24
    /**
25
     * Fix paths in Bootstrap.php
26
     */
27
    private static function fixPath()
28
    {
29
        $file = static::TEST_FOLDER . '/Bootstrap.php';
30
        $contents = file_get_contents($file);
31
        
32 View Code Duplication
        if (! file_exists('system')) {
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
33
            if (file_exists('vendor/codeigniter/framework/system')) {
34
                $contents = str_replace(
35
                    '$system_path = \'../../system\';',
36
                    '$system_path = \'../../vendor/codeigniter/framework/system\';',
37
                    $contents
38
                );
39
            } else {
40
                throw new Exception('Can\'t find "system" folder.');
41
            }
42
        }
43
        
44 View Code Duplication
        if (! file_exists('index.php')) {
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
45
            if (file_exists('public/index.php')) {
46
                $contents = str_replace(
47
                    "define('FCPATH', realpath(dirname(__FILE__).'/../..').'/');",
48
                    "define('FCPATH', realpath(dirname(__FILE__).'/../../public').'/');",
49
                    $contents
50
                );
51
            } else {
52
                throw new Exception('Can\'t find "index.php".');
53
            }
54
        }
55
        
56
        file_put_contents($file, $contents);
57
    }
58
59
    public static function update()
60
    {
61
        self::recursiveUnlink('application/tests/_ci_phpunit_test');
62
        self::recursiveCopy(
63
            'vendor/kenjis/ci-phpunit-test/application/tests/_ci_phpunit_test',
64
            'application/tests/_ci_phpunit_test'
65
        );
66
    }
67
68
    /**
69
     * Recursive Copy
70
     *
71
     * @param string $src
72
     * @param string $dst
73
     */
74
    private static function recursiveCopy($src, $dst)
75
    {
76
        @mkdir($dst, 0755);
77
        
78
        $iterator = new \RecursiveIteratorIterator(
79
            new \RecursiveDirectoryIterator($src, \RecursiveDirectoryIterator::SKIP_DOTS),
80
            \RecursiveIteratorIterator::SELF_FIRST
81
        );
82
        
83
        foreach ($iterator as $file) {
84
            if ($file->isDir()) {
85
                @mkdir($dst . '/' . $iterator->getSubPathName());
86
            } else {
87
                $success = copy($file, $dst . '/' . $iterator->getSubPathName());
88
                if ($success) {
89
                    echo 'copied: ' . $dst . '/' . $iterator->getSubPathName() . PHP_EOL;
90
                }
91
            }
92
        }
93
    }
94
95
    /**
96
     * Recursive Unlink
97
     *
98
     * @param string $dir
99
     */
100 View Code Duplication
    private static function recursiveUnlink($dir)
101
    {
102
        $iterator = new \RecursiveIteratorIterator(
103
            new \RecursiveDirectoryIterator($dir, \RecursiveDirectoryIterator::SKIP_DOTS),
104
            \RecursiveIteratorIterator::CHILD_FIRST
105
        );
106
        
107
        foreach ($iterator as $file) {
108
            if ($file->isDir()) {
109
                rmdir($file);
110
            } else {
111
                unlink($file);
112
            }
113
        }
114
        
115
        rmdir($dir);
116
    }
117
}
118