class-replacevar-editor.php
5.92 KB
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
147
148
149
150
151
152
153
154
155
156
157
<?php
/**
* WPSEO plugin file.
*
* @package WPSEO\Admin\Menu
*/
/**
* Renders a replacement variable editor.
*/
class WPSEO_Replacevar_Editor {
/**
* Yoast Forms instance.
*
* @var Yoast_Form
*/
private $yform;
/**
* The arguments required for the div to render.
*
* @var array {
* @type string $title The title field id.
* @type string $description The description field id.
* @type string $page_type_recommended The page type for the context of the recommended replace vars.
* @type string $page_type_specific The page type for the context of the editor specific replace vars.
* @type bool $paper_style Optional. Whether the editor has paper style.
* @type string $label_title Optional. The label to use for the title field.
* @type string $label_description Optional. The label to use for the description field.
* @type string $description_placeholder Optional. The placeholder text to use for the description field.
* @type bool $has_new_badge Optional. Whether to show the "New" badge.
* @type bool $has_premium_badge Optional. Whether to show the "Premium" badge.
* }
*/
private $arguments;
/**
* Constructs the object.
*
* @param Yoast_Form $yform Yoast forms.
* @param array $arguments {
* The arguments that can be given.
*
* @type string $title The title field id.
* @type string $description The description field id.
* @type string $page_type_recommended The page type for the context of the recommended replace vars.
* @type string $page_type_specific The page type for the context of the editor specific replace vars.
* @type bool $paper_style Optional. Whether the editor has paper style.
* @type string $label_title Optional. The label to use for the title field.
* @type string $label_description Optional. The label to use for the description field.
* @type string $description_placeholder Optional. The placeholder text to use for the description field.
* @type bool $has_new_badge Optional. Whether to show the "New" badge.
* @type bool $has_premium_badge Optional. Whether to show the "Premium" badge.
* }
*/
public function __construct( Yoast_Form $yform, $arguments ) {
$arguments = wp_parse_args(
$arguments,
[
'paper_style' => true,
'label_title' => '',
'label_description' => '',
'description_placeholder' => '',
'has_new_badge' => false,
'is_disabled' => false,
'has_premium_badge' => false,
]
);
$this->validate_arguments( $arguments );
$this->yform = $yform;
$this->arguments = [
'title' => (string) $arguments['title'],
'description' => (string) $arguments['description'],
'page_type_recommended' => (string) $arguments['page_type_recommended'],
'page_type_specific' => (string) $arguments['page_type_specific'],
'paper_style' => (bool) $arguments['paper_style'],
'label_title' => (string) $arguments['label_title'],
'label_description' => (string) $arguments['label_description'],
'description_placeholder' => (string) $arguments['description_placeholder'],
'has_new_badge' => (bool) $arguments['has_new_badge'],
'is_disabled' => (bool) $arguments['is_disabled'],
'has_premium_badge' => (bool) $arguments['has_premium_badge'],
];
}
/**
* Renders a div for the react application to mount to, and hidden inputs where
* the app should store it's value so they will be properly saved when the form
* is submitted.
*
* @return void
*/
public function render() {
$this->yform->hidden( $this->arguments['title'], $this->arguments['title'] );
$this->yform->hidden( $this->arguments['description'], $this->arguments['description'] );
printf(
'<div
data-react-replacevar-editor
data-react-replacevar-title-field-id="%1$s"
data-react-replacevar-metadesc-field-id="%2$s"
data-react-replacevar-page-type-recommended="%3$s"
data-react-replacevar-page-type-specific="%4$s"
data-react-replacevar-paper-style="%5$s"
data-react-replacevar-label-title="%6$s"
data-react-replacevar-label-description="%7$s"
data-react-replacevar-description-placeholder="%8$s"
data-react-replacevar-has-new-badge="%9$s"
data-react-replacevar-is-disabled="%10$s"
data-react-replacevar-has-premium-badge="%11$s"
></div>',
esc_attr( $this->arguments['title'] ),
esc_attr( $this->arguments['description'] ),
esc_attr( $this->arguments['page_type_recommended'] ),
esc_attr( $this->arguments['page_type_specific'] ),
esc_attr( $this->arguments['paper_style'] ),
esc_attr( $this->arguments['label_title'] ),
esc_attr( $this->arguments['label_description'] ),
esc_attr( $this->arguments['description_placeholder'] ),
esc_attr( $this->arguments['has_new_badge'] ),
esc_attr( $this->arguments['is_disabled'] ),
esc_attr( $this->arguments['has_premium_badge'] )
);
}
/**
* Validates the replacement variable editor arguments.
*
* @param array $arguments The arguments to validate.
*
* @throws InvalidArgumentException Thrown when not all required arguments are present.
*/
protected function validate_arguments( array $arguments ) {
$required_arguments = [
'title',
'description',
'page_type_recommended',
'page_type_specific',
'paper_style',
];
foreach ( $required_arguments as $field_name ) {
if ( ! array_key_exists( $field_name, $arguments ) ) {
throw new InvalidArgumentException(
sprintf(
/* translators: %1$s expands to the missing field name. */
__( 'Not all required fields are given. Missing field %1$s', 'wordpress-seo' ),
$field_name
)
);
}
}
}
}