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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Eav\Model\Attribute\Data;
use Magento\Framework\App\RequestInterface;
/**
* EAV Entity Attribute Multiply line Data Model
*
* @author Magento Core Team <core@magentocommerce.com>
*/
class Multiline extends \Magento\Eav\Model\Attribute\Data\Text
{
/**
* Extract data from request and return value
*
* @param RequestInterface $request
* @return array|string
*/
public function extractValue(RequestInterface $request)
{
$value = $this->_getRequestValue($request);
if (!is_array($value)) {
$value = false;
} else {
$value = array_map([$this, '_applyInputFilter'], $value);
}
return $value;
}
/**
* Validate data
* Return true or array of errors
*
* @param array|string $value
* @return bool|array
*/
public function validateValue($value)
{
$errors = [];
$lines = $this->processValue($value);
$attribute = $this->getAttribute();
if ($attribute->getIsRequired() && empty($lines)) {
$attributeLabel = __($attribute->getStoreLabel());
$errors[] = __('"%1" is a required value.', $attributeLabel);
}
$maxAllowedLineCount = $attribute->getMultilineCount();
if (count($lines) > $maxAllowedLineCount) {
$attributeLabel = __($attribute->getStoreLabel());
$errors[] = __('"%1" cannot contain more than %2 lines.', $attributeLabel, $maxAllowedLineCount);
}
foreach ($lines as $lineIndex => $line) {
// First line must be always validated
if ($lineIndex == 0 || !empty($line)) {
$result = parent::validateValue($line);
if ($result !== true) {
$errors = array_merge($errors, $result);
}
}
}
return (count($errors) == 0) ? true : $errors;
}
/**
* Process value before validation
*
* @param bool|string|array $value
* @return array list of lines represented by given value
*/
protected function processValue($value)
{
if ($value === false) {
// try to load original value and validate it
$attribute = $this->getAttribute();
$entity = $this->getEntity();
$value = $entity->getDataUsingMethod($attribute->getAttributeCode());
}
if (!is_array($value)) {
$value = explode("\n", $value);
}
return $value;
}
/**
* Export attribute value to entity model
*
* @param array|string $value
* @return $this
*/
public function compactValue($value)
{
if (is_array($value)) {
$value = trim(implode("\n", $value));
}
return parent::compactValue($value);
}
/**
* Restore attribute value from SESSION to entity model
*
* @param array|string $value
* @return $this
* @codeCoverageIgnore
*/
public function restoreValue($value)
{
return $this->compactValue($value);
}
/**
* Return formatted attribute value from entity model
*
* @param string $format
* @return array|string
*/
public function outputValue($format = \Magento\Eav\Model\AttributeDataFactory::OUTPUT_FORMAT_TEXT)
{
$values = $this->getEntity()->getData($this->getAttribute()->getAttributeCode());
if (!is_array($values)) {
$values = explode("\n", $values);
}
$values = array_map([$this, '_applyOutputFilter'], $values);
switch ($format) {
case \Magento\Eav\Model\AttributeDataFactory::OUTPUT_FORMAT_ARRAY:
$output = $values;
break;
case \Magento\Eav\Model\AttributeDataFactory::OUTPUT_FORMAT_HTML:
$output = implode("<br />", $values);
break;
case \Magento\Eav\Model\AttributeDataFactory::OUTPUT_FORMAT_ONELINE:
$output = implode(" ", $values);
break;
default:
$output = implode("\n", $values);
break;
}
return $output;
}
}