Completed
Push — master ( 57eaac...84ae94 )
by Kenji
03:19 queued 12s
created

Installer.php (6 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
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class must be in a namespace of at least one level to avoid collisions.

You can fix this by adding a namespace to your class:

namespace YourVendor;

class YourClass { }

When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.

Loading history...
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);
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition here. This can introduce security issues, and is generally not recommended.

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
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());
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition here. This can introduce security issues, and is generally not recommended.

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
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)
0 ignored issues
show
This method seems to be duplicated in 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...
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