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
<?php
namespace Dotdigitalgroup\Email\Model\Adminhtml\Source\Customer\Attributes;
class Select
{
/**
* @var \Magento\Customer\Model\CustomerFactory
*/
private $customerFactory;
/**
* Escaper
*
* @var \Magento\Framework\Escaper
*/
private $escaper;
/**
* Select constructor.
*
* @param \Magento\Customer\Model\CustomerFactory $customerFactory
* @param \Magento\Framework\Escaper $escaper
*/
public function __construct(
\Magento\Customer\Model\CustomerFactory $customerFactory,
\Magento\Framework\Escaper $escaper
) {
$this->customerFactory = $customerFactory;
$this->escaper = $escaper;
}
/**
* Customer custom attributes.
*
* @return array
*/
public function toOptionArray()
{
$options = [];
//exclude attributes from mapping
$excluded = [
'created_at',
'created_in',
'dob',
'dotmailer_contact_id',
'email',
'firstname',
'lastname',
'gender',
'group_id',
'password_hash',
'prefix',
'rp_token',
'rp_token_create_at',
'website_id',
];
$attributes = $this->customerFactory->create()
->getAttributes();
foreach ($attributes as $attribute) {
if ($attribute->getFrontendLabel()) {
$code = $attribute->getAttributeCode();
//escape the label in case of quotes
$label = $this->escaper->escapeQuote($attribute->getFrontendLabel());
if (!in_array($code, $excluded)) {
$options[] = [
'value' => $attribute->getAttributeCode(),
'label' => $label,
];
}
}
}
return $options;
}
}