142 lines
3.5 KiB
PHP
142 lines
3.5 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* WPSEO plugin file.
|
||
|
*
|
||
|
* @package WPSEO\Admin
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Class WPSEO_presenter_paper.
|
||
|
*/
|
||
|
class WPSEO_Paper_Presenter {
|
||
|
|
||
|
/**
|
||
|
* Title of the paper.
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
private $title;
|
||
|
|
||
|
/**
|
||
|
* The view variables.
|
||
|
*
|
||
|
* @var array
|
||
|
*/
|
||
|
private $settings;
|
||
|
|
||
|
/**
|
||
|
* The path to the view file.
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
private $view_file;
|
||
|
|
||
|
/**
|
||
|
* WPSEO_presenter_paper constructor.
|
||
|
*
|
||
|
* @param string $title The title of the paper.
|
||
|
* @param string|null $view_file Optional. The path to the view file. Use the content setting
|
||
|
* if do not wish to use a view file.
|
||
|
* @param array $settings Optional. Settings for the paper.
|
||
|
*/
|
||
|
public function __construct( $title, $view_file = null, array $settings = [] ) {
|
||
|
$defaults = [
|
||
|
'paper_id' => null,
|
||
|
'paper_id_prefix' => 'wpseo-',
|
||
|
'collapsible' => false,
|
||
|
'collapsible_header_class' => '',
|
||
|
'expanded' => false,
|
||
|
'help_text' => '',
|
||
|
'title_after' => '',
|
||
|
'class' => '',
|
||
|
'content' => '',
|
||
|
'view_data' => [],
|
||
|
];
|
||
|
|
||
|
$this->settings = wp_parse_args( $settings, $defaults );
|
||
|
$this->title = $title;
|
||
|
$this->view_file = $view_file;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Renders the collapsible paper and returns it as a string.
|
||
|
*
|
||
|
* @return string The rendered paper.
|
||
|
*/
|
||
|
public function get_output() {
|
||
|
$view_variables = $this->get_view_variables();
|
||
|
|
||
|
extract( $view_variables, EXTR_SKIP );
|
||
|
|
||
|
$content = $this->settings['content'];
|
||
|
|
||
|
if ( $this->view_file !== null ) {
|
||
|
ob_start();
|
||
|
require $this->view_file;
|
||
|
$content = ob_get_clean();
|
||
|
}
|
||
|
|
||
|
ob_start();
|
||
|
require WPSEO_PATH . 'admin/views/paper-collapsible.php';
|
||
|
$rendered_output = ob_get_clean();
|
||
|
|
||
|
return $rendered_output;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Retrieves the view variables.
|
||
|
*
|
||
|
* @return array The view variables.
|
||
|
*/
|
||
|
private function get_view_variables() {
|
||
|
if ( $this->settings['help_text'] instanceof WPSEO_Admin_Help_Panel === false ) {
|
||
|
$this->settings['help_text'] = new WPSEO_Admin_Help_Panel( '', '', '' );
|
||
|
}
|
||
|
|
||
|
$view_variables = [
|
||
|
'class' => $this->settings['class'],
|
||
|
'collapsible' => $this->settings['collapsible'],
|
||
|
'collapsible_config' => $this->collapsible_config(),
|
||
|
'collapsible_header_class' => $this->settings['collapsible_header_class'],
|
||
|
'title_after' => $this->settings['title_after'],
|
||
|
'help_text' => $this->settings['help_text'],
|
||
|
'view_file' => $this->view_file,
|
||
|
'title' => $this->title,
|
||
|
'paper_id' => $this->settings['paper_id'],
|
||
|
'paper_id_prefix' => $this->settings['paper_id_prefix'],
|
||
|
'yform' => Yoast_Form::get_instance(),
|
||
|
];
|
||
|
|
||
|
return array_merge( $this->settings['view_data'], $view_variables );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Retrieves the collapsible config based on the settings.
|
||
|
*
|
||
|
* @return array The config.
|
||
|
*/
|
||
|
protected function collapsible_config() {
|
||
|
if ( empty( $this->settings['collapsible'] ) ) {
|
||
|
return [
|
||
|
'toggle_icon' => '',
|
||
|
'class' => '',
|
||
|
'expanded' => '',
|
||
|
];
|
||
|
}
|
||
|
|
||
|
if ( ! empty( $this->settings['expanded'] ) ) {
|
||
|
return [
|
||
|
'toggle_icon' => 'dashicons-arrow-up-alt2',
|
||
|
'class' => 'toggleable-container',
|
||
|
'expanded' => 'true',
|
||
|
];
|
||
|
}
|
||
|
|
||
|
return [
|
||
|
'toggle_icon' => 'dashicons-arrow-down-alt2',
|
||
|
'class' => 'toggleable-container toggleable-container-hidden',
|
||
|
'expanded' => 'false',
|
||
|
];
|
||
|
}
|
||
|
}
|