ajax
5 years ago
capabilities
4 years ago
endpoints
5 years ago
exceptions
7 years ago
filters
4 years ago
formatter
4 years ago
google_search_console
5 years ago
import
4 years ago
listeners
8 years ago
menu
4 years ago
metabox
4 years ago
notifiers
4 years ago
pages
4 years ago
roles
5 years ago
ryte
5 years ago
services
5 years ago
statistics
5 years ago
taxonomy
4 years ago
tracking
4 years ago
views
4 years ago
watchers
5 years ago
admin-settings-changed-listener.php
5 years ago
ajax.php
4 years ago
class-admin-asset-analysis-worker-location.php
5 years ago
class-admin-asset-dev-server-location.php
5 years ago
class-admin-asset-location.php
8 years ago
class-admin-asset-manager.php
4 years ago
class-admin-asset-seo-location.php
4 years ago
class-admin-asset-yoast-components-l10n.php
5 years ago
class-admin-editor-specific-replace-vars.php
5 years ago
class-admin-gutenberg-compatibility-notification.php
5 years ago
class-admin-help-panel.php
5 years ago
class-admin-init.php
4 years ago
class-admin-recommended-replace-vars.php
6 years ago
class-admin-user-profile.php
6 years ago
class-admin-utils.php
5 years ago
class-admin.php
4 years ago
class-asset.php
5 years ago
class-bulk-description-editor-list-table.php
5 years ago
class-bulk-editor-list-table.php
4 years ago
class-bulk-title-editor-list-table.php
6 years ago
class-collector.php
6 years ago
class-config.php
4 years ago
class-customizer.php
5 years ago
class-database-proxy.php
5 years ago
class-export.php
5 years ago
class-expose-shortlinks.php
4 years ago
class-gutenberg-compatibility.php
4 years ago
class-helpscout.php
5 years ago
class-meta-columns.php
5 years ago
class-my-yoast-proxy.php
5 years ago
class-option-tab.php
4 years ago
class-option-tabs-formatter.php
5 years ago
class-option-tabs.php
5 years ago
class-paper-presenter.php
5 years ago
class-plugin-availability.php
5 years ago
class-plugin-conflict.php
4 years ago
class-premium-popup.php
5 years ago
class-premium-upsell-admin-block.php
4 years ago
class-primary-term-admin.php
5 years ago
class-product-upsell-notice.php
5 years ago
class-remote-request.php
5 years ago
class-schema-person-upgrade-notification.php
4 years ago
class-suggested-plugins.php
4 years ago
class-yoast-columns.php
5 years ago
class-yoast-dashboard-widget.php
4 years ago
class-yoast-form.php
4 years ago
class-yoast-input-validation.php
5 years ago
class-yoast-network-admin.php
5 years ago
class-yoast-network-settings-api.php
4 years ago
class-yoast-notification-center.php
4 years ago
class-yoast-notification.php
5 years ago
class-yoast-notifications.php
5 years ago
class-yoast-plugin-conflict.php
4 years ago
index.php
10 years ago
interface-collection.php
7 years ago
interface-installable.php
8 years ago
class-paper-presenter.php
142 lines
| 1 | <?php |
| 2 | /** |
| 3 | * WPSEO plugin file. |
| 4 | * |
| 5 | * @package WPSEO\Admin |
| 6 | */ |
| 7 | |
| 8 | /** |
| 9 | * Class WPSEO_presenter_paper. |
| 10 | */ |
| 11 | class WPSEO_Paper_Presenter { |
| 12 | |
| 13 | /** |
| 14 | * Title of the paper. |
| 15 | * |
| 16 | * @var string |
| 17 | */ |
| 18 | private $title; |
| 19 | |
| 20 | /** |
| 21 | * The view variables. |
| 22 | * |
| 23 | * @var array |
| 24 | */ |
| 25 | private $settings; |
| 26 | |
| 27 | /** |
| 28 | * The path to the view file. |
| 29 | * |
| 30 | * @var string |
| 31 | */ |
| 32 | private $view_file; |
| 33 | |
| 34 | /** |
| 35 | * WPSEO_presenter_paper constructor. |
| 36 | * |
| 37 | * @param string $title The title of the paper. |
| 38 | * @param string|null $view_file Optional. The path to the view file. Use the content setting |
| 39 | * if do not wish to use a view file. |
| 40 | * @param array $settings Optional. Settings for the paper. |
| 41 | */ |
| 42 | public function __construct( $title, $view_file = null, array $settings = [] ) { |
| 43 | $defaults = [ |
| 44 | 'paper_id' => null, |
| 45 | 'paper_id_prefix' => 'wpseo-', |
| 46 | 'collapsible' => false, |
| 47 | 'collapsible_header_class' => '', |
| 48 | 'expanded' => false, |
| 49 | 'help_text' => '', |
| 50 | 'title_after' => '', |
| 51 | 'class' => '', |
| 52 | 'content' => '', |
| 53 | 'view_data' => [], |
| 54 | ]; |
| 55 | |
| 56 | $this->settings = wp_parse_args( $settings, $defaults ); |
| 57 | $this->title = $title; |
| 58 | $this->view_file = $view_file; |
| 59 | } |
| 60 | |
| 61 | /** |
| 62 | * Renders the collapsible paper and returns it as a string. |
| 63 | * |
| 64 | * @return string The rendered paper. |
| 65 | */ |
| 66 | public function get_output() { |
| 67 | $view_variables = $this->get_view_variables(); |
| 68 | |
| 69 | extract( $view_variables, EXTR_SKIP ); |
| 70 | |
| 71 | $content = $this->settings['content']; |
| 72 | |
| 73 | if ( $this->view_file !== null ) { |
| 74 | ob_start(); |
| 75 | require $this->view_file; |
| 76 | $content = ob_get_clean(); |
| 77 | } |
| 78 | |
| 79 | ob_start(); |
| 80 | require WPSEO_PATH . 'admin/views/paper-collapsible.php'; |
| 81 | $rendered_output = ob_get_clean(); |
| 82 | |
| 83 | return $rendered_output; |
| 84 | } |
| 85 | |
| 86 | /** |
| 87 | * Retrieves the view variables. |
| 88 | * |
| 89 | * @return array The view variables. |
| 90 | */ |
| 91 | private function get_view_variables() { |
| 92 | if ( $this->settings['help_text'] instanceof WPSEO_Admin_Help_Panel === false ) { |
| 93 | $this->settings['help_text'] = new WPSEO_Admin_Help_Panel( '', '', '' ); |
| 94 | } |
| 95 | |
| 96 | $view_variables = [ |
| 97 | 'class' => $this->settings['class'], |
| 98 | 'collapsible' => $this->settings['collapsible'], |
| 99 | 'collapsible_config' => $this->collapsible_config(), |
| 100 | 'collapsible_header_class' => $this->settings['collapsible_header_class'], |
| 101 | 'title_after' => $this->settings['title_after'], |
| 102 | 'help_text' => $this->settings['help_text'], |
| 103 | 'view_file' => $this->view_file, |
| 104 | 'title' => $this->title, |
| 105 | 'paper_id' => $this->settings['paper_id'], |
| 106 | 'paper_id_prefix' => $this->settings['paper_id_prefix'], |
| 107 | 'yform' => Yoast_Form::get_instance(), |
| 108 | ]; |
| 109 | |
| 110 | return array_merge( $this->settings['view_data'], $view_variables ); |
| 111 | } |
| 112 | |
| 113 | /** |
| 114 | * Retrieves the collapsible config based on the settings. |
| 115 | * |
| 116 | * @return array The config. |
| 117 | */ |
| 118 | protected function collapsible_config() { |
| 119 | if ( empty( $this->settings['collapsible'] ) ) { |
| 120 | return [ |
| 121 | 'toggle_icon' => '', |
| 122 | 'class' => '', |
| 123 | 'expanded' => '', |
| 124 | ]; |
| 125 | } |
| 126 | |
| 127 | if ( ! empty( $this->settings['expanded'] ) ) { |
| 128 | return [ |
| 129 | 'toggle_icon' => 'dashicons-arrow-up-alt2', |
| 130 | 'class' => 'toggleable-container', |
| 131 | 'expanded' => 'true', |
| 132 | ]; |
| 133 | } |
| 134 | |
| 135 | return [ |
| 136 | 'toggle_icon' => 'dashicons-arrow-down-alt2', |
| 137 | 'class' => 'toggleable-container toggleable-container-hidden', |
| 138 | 'expanded' => 'false', |
| 139 | ]; |
| 140 | } |
| 141 | } |
| 142 |