These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | /* |
||
4 | * This file is part of EC-CUBE |
||
5 | * |
||
6 | * Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved. |
||
7 | * |
||
8 | * http://www.ec-cube.co.jp/ |
||
9 | * |
||
10 | * For the full copyright and license information, please view the LICENSE |
||
11 | * file that was distributed with this source code. |
||
12 | */ |
||
13 | |||
14 | namespace Eccube\Doctrine\Common\CsvDataFixtures; |
||
15 | |||
16 | use Doctrine\Common\DataFixtures\FixtureInterface; |
||
17 | use Symfony\Component\Finder\Finder; |
||
18 | use Symfony\Component\Yaml\Yaml; |
||
19 | |||
20 | /** |
||
21 | * CSVファイルのローダー. |
||
22 | * |
||
23 | * @see https://github.com/doctrine/data-fixtures/blob/master/lib/Doctrine/Common/DataFixtures/Loader.php |
||
24 | */ |
||
25 | class Loader |
||
26 | { |
||
27 | /** |
||
28 | * @var CsvFixture[] |
||
29 | */ |
||
30 | protected $fixtures; |
||
31 | |||
32 | /** |
||
33 | * Load fixtures from directory. |
||
34 | * |
||
35 | * 同一階層に, Fixture のロード順を定義した definition.yml が必要. |
||
36 | * |
||
37 | * @param string $dir |
||
38 | * |
||
39 | * @return array fixtures. |
||
40 | */ |
||
41 | 1 | public function loadFromDirectory($dir) |
|
42 | { |
||
43 | 1 | if (!dir($dir)) { |
|
44 | throw new \InvalidArgumentException(sprintf('"%s" does not exist', $dir)); |
||
45 | } |
||
46 | |||
47 | // import順序の定義ファイルを取得. |
||
48 | 1 | $file = $dir.'/definition.yml'; |
|
49 | 1 | if (!file_exists($file)) { |
|
50 | // 定義ファイルが存在しなければ取得した順序で処理 |
||
51 | $finder = Finder::create() |
||
52 | ->in($dir) |
||
53 | ->name('*.csv'); |
||
54 | } |
||
55 | 1 | $definition = Yaml::parse(file_get_contents($file)); |
|
56 | 1 | $definition = array_flip($definition); |
|
57 | |||
58 | 1 | $finder = Finder::create() |
|
59 | 1 | ->in($dir) |
|
60 | 1 | ->name('*.csv') |
|
61 | 1 | ->sort( |
|
62 | // 定義ファイルに記載の順にソート. |
||
63 | 1 | function (\SplFileInfo $a, \SplFileInfo $b) use ($definition) { |
|
64 | 1 | if (!isset($definition[$a->getFilename()])) { |
|
65 | throw new \Exception(sprintf('"%s" is undefined in %s', $a->getFilename())); |
||
66 | } |
||
67 | 1 | if (!isset($definition[$b->getFilename()])) { |
|
68 | throw new \Exception(sprintf('"%s" is undefined in %s', $b->getFilename())); |
||
69 | } |
||
70 | |||
71 | 1 | $a_sortNo = $definition[$a->getFilename()]; |
|
72 | 1 | $b_sortNo = $definition[$b->getFilename()]; |
|
73 | |||
74 | 1 | if ($a_sortNo < $b_sortNo) { |
|
75 | 1 | return -1; |
|
76 | } elseif ($a_sortNo > $b_sortNo) { |
||
77 | return 1; |
||
78 | } else { |
||
79 | return 0; |
||
80 | } |
||
81 | 1 | } |
|
82 | ) |
||
83 | 1 | ->files(); |
|
84 | |||
85 | 1 | return $this->loadFromIterator($finder->getIterator()); |
|
0 ignored issues
–
show
|
|||
86 | } |
||
87 | |||
88 | /** |
||
89 | * Load fixtures from Iterator. |
||
90 | * |
||
91 | * @param \Iterator $Iterator Iterator of \SplFileInfo |
||
92 | * |
||
93 | * @return array fixtures. |
||
94 | */ |
||
95 | 2 | public function loadFromIterator(\Iterator $Iterator) |
|
96 | { |
||
97 | 2 | $fixtures = []; |
|
98 | 2 | foreach ($Iterator as $fixture) { |
|
99 | // TODO $fixture が \SplFileInfo ではない場合の対応 |
||
100 | 2 | $CsvFixture = new CsvFixture($fixture->openFile()); |
|
101 | 2 | $this->addFixture($CsvFixture); |
|
102 | 2 | $fixtures[] = $CsvFixture; |
|
103 | } |
||
104 | |||
105 | 2 | return $fixtures; |
|
106 | } |
||
107 | |||
108 | 1 | public function getFixtures() |
|
109 | { |
||
110 | 1 | return $this->fixtures; |
|
111 | } |
||
112 | |||
113 | 3 | public function addFixture(FixtureInterface $fixture) |
|
114 | { |
||
115 | 3 | $this->fixtures[] = $fixture; |
|
116 | } |
||
117 | } |
||
118 |
This check looks at variables that are passed out again to other methods.
If the outgoing method call has stricter type requirements than the method itself, an issue is raised.
An additional type check may prevent trouble.