1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Setup\Model\Complex;
/**
* Complex pattern class for complex generator (used for creating configurable products)
*
*
*/
class Pattern
{
/**
* Pattern headers set
*
* @var array
*/
protected $_headers;
/**
* Rows set - array of rows pattern, can contain as many rows as you need
*
* @var array(array)
*/
protected $_rowsSet;
/**
* Position
*
* @var int
*/
protected $_position = 0;
/**
* Set headers
*
* @param array $headers
*
* @return Pattern
*/
public function setHeaders(array $headers)
{
$this->_headers = $headers;
return $this;
}
/**
* Get headers array
*
* @return array
*/
public function getHeaders()
{
return $this->_headers;
}
/**
* Set combined rows set
*
* @param array $rowsSet
*
* @return Pattern
* @throws \Exception
*/
public function setRowsSet(array $rowsSet)
{
if (!count($rowsSet)) {
throw new \Exception("Rows set must contain at least 1 array representing a row pattern");
}
$this->_rowsSet = $rowsSet;
if (!isset($this->_headers)) {
$this->_headers = array_keys($rowsSet[0]);
}
return $this;
}
/**
* Add row
*
* @param array $row
*
* @return Pattern
*/
public function addRow(array $row)
{
$this->_rowsSet[] = $row;
return $this;
}
/**
* Get row
*
* @param int $index
* @param int $generatorKey
*
* @return array|null
*/
public function getRow($index, $generatorKey)
{
$row = $this->_rowsSet[$generatorKey % count($this->_rowsSet)];
foreach ($this->getHeaders() as $key) {
if (isset($row[$key])) {
if (is_callable($row[$key])) {
$row[$key] = call_user_func($row[$key], $index, $generatorKey);
} else {
$row[$key] = str_replace('%s', $index, $row[$key]);
}
} else {
$row[$key] = '';
}
}
return $row;
}
/**
* Get rows count
*
* @return int
*/
public function getRowsCount()
{
return count($this->_rowsSet);
}
}