ldc-poule-et-toque/content/plugins/wordpress-seo/admin/menu/class-replacevar-editor.php

123 lines
3.7 KiB
PHP
Raw Normal View History

2018-08-10 10:36:18 +02:00
<?php
/**
* WPSEO plugin file.
*
* @package WPSEO\Admin\Menu
*/
/**
* Renders a replacement variable editor.
*/
class WPSEO_Replacevar_Editor {
2021-04-12 15:54:29 +02:00
2018-08-10 10:36:18 +02:00
/**
2021-04-12 15:54:29 +02:00
* Yoast Forms instance.
*
* @var Yoast_Form
2018-08-10 10:36:18 +02:00
*/
private $yform;
/**
2021-04-12 15:54:29 +02:00
* The arguments required for the div to render.
2018-08-10 10:36:18 +02:00
*
2021-04-12 15:54:29 +02:00
* @var array {
2018-08-10 10:36:18 +02:00
* @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.
* }
*/
private $arguments;
/**
* Constructs the object.
*
2021-04-12 15:54:29 +02:00
* @param Yoast_Form $yform Yoast forms.
2018-08-10 10:36:18 +02:00
* @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.
* }
*/
public function __construct( Yoast_Form $yform, $arguments ) {
$arguments = wp_parse_args(
$arguments,
2021-04-12 15:54:29 +02:00
[
2018-08-10 10:36:18 +02:00
'paper_style' => true,
2021-04-12 15:54:29 +02:00
]
2018-08-10 10:36:18 +02:00
);
$this->validate_arguments( $arguments );
$this->yform = $yform;
2021-04-12 15:54:29 +02:00
$this->arguments = [
2018-08-10 10:36:18 +02:00
'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'],
2021-04-12 15:54:29 +02:00
];
2018-08-10 10:36:18 +02:00
}
/**
* 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'] );
2021-04-12 15:54:29 +02:00
printf(
'<div
2018-08-10 10:36:18 +02:00
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"></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'] )
);
}
/**
2021-04-12 15:54:29 +02:00
* Validates the replacement variable editor arguments.
*
2018-08-10 10:36:18 +02:00
* @param array $arguments The arguments to validate.
*
* @throws InvalidArgumentException Thrown when not all required arguments are present.
*/
protected function validate_arguments( array $arguments ) {
2021-04-12 15:54:29 +02:00
$required_arguments = [
2018-08-10 10:36:18 +02:00
'title',
'description',
'page_type_recommended',
'page_type_specific',
'paper_style',
2021-04-12 15:54:29 +02:00
];
2018-08-10 10:36:18 +02:00
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
)
);
}
}
}
}