• File: class-paper-presenter.php
  • Full Path: /home/matthif/www/wp-content/plugins/wordpress-seo/admin/class-paper-presenter.php
  • Date Modified: 02/24/2024 11:29 PM
  • File size: 3.52 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?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_variablesEXTR_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',
        ];
    }
}