• File: ScreenOptions.php
  • Full Path: /home/matthif/www/wp-content/plugins/wpforms-lite/src/Admin/Payments/ScreenOptions.php
  • Date Modified: 02/16/2024 11:45 AM
  • File size: 4.72 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php

namespace WPForms\Admin\Payments;

use 
WP_Screen;

/**
 * Payments screen options.
 *
 * @since 1.8.2
 */
class ScreenOptions {

    
/**
     * Screen id.
     *
     * @since 1.8.2
     */
    
const SCREEN_ID 'wpforms_page_wpforms-payments';

    
/**
     * Screen option name.
     *
     * @since 1.8.2
     */
    
const PER_PAGE 'wpforms_payments_per_page';

    
/**
     * Screen option name.
     *
     * @since 1.8.2
     */
    
const SINGLE 'wpforms_payments_single';

    
/**
     * Initialize.
     *
     * @since 1.8.2
     */
    
public function init() {

        
$this->hooks();
    }

    
/**
     * Hooks.
     *
     * @since 1.8.2
     */
    
private function hooks() {

        
// Setup screen options - this needs to run early.
        
add_action'load-wpforms_page_wpforms-payments', [ $this'screen_options' ] );
        
add_filter'screen_settings', [ $this'single_screen_settings' ], 10);
        
add_filter'set-screen-option', [ $this'screen_options_set' ], 10);
        
add_filter'set_screen_option_wpforms_payments_per_page', [ $this'screen_options_set' ], 10);
        
add_filter'set_screen_option_wpforms_payments_single', [ $this'screen_options_set' ], 10);
    }

    
/**
     * Add per-page screen option to the Payments table.
     *
     * @since 1.8.2
     */
    
public function screen_options() {

        
$screen get_current_screen();

        if ( ! isset( 
$screen->id ) || $screen->id !== self::SCREEN_ID ) {
            return;
        }

        
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
        
if ( ! empty( $_GET['view'] ) && $_GET['view'] !== 'payments' ) {
            return;
        }

        
/**
         * Filter the number of payments per page default value.
         *
         * Notice, the filter will be applied to default value in Screen Options only and still will be able to provide other value.
         * If you want to change the number of payments per page, use the `wpforms_payments_per_page` filter.
         *
         * @since 1.8.2
         *
         * @param int $per_page Number of payments per page.
         */
        
$per_page = (int) apply_filters'wpforms_admin_payments_screen_options_per_page_default'20 );

        
add_screen_option(
            
'per_page',
            [
                
'label'   => esc_html__'Number of payments per page:''wpforms-lite' ),
                
'option'  => self::PER_PAGE,
                
'default' => $per_page,
            ]
        );
    }

    
/**
     * Returns the screen options markup for the payment single page.
     *
     * @since 1.8.2
     *
     * @param string    $status The current screen settings.
     * @param WP_Screen $args   WP_Screen object.
     *
     * @return string
     */
    
public function single_screen_settings$status$args ) {

        
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
        
if ( $args->id !== self::SCREEN_ID || empty( $_GET['view'] ) || $_GET['view'] !== 'payment' ) {
            return 
$status;
        }

        
$screen_options   self::get_single_page_options();
        
$advanced_options = [
            
'advanced' => __'Advanced details''wpforms-lite' ),
            
'log'      => __'Log''wpforms-lite' ),
        ];

        
$output  '<fieldset class="metabox-prefs">';
        
$output .= '<legend>' esc_html__'Additional information''wpforms-lite' ) . '</legend>';
        
$output .= '<div>';

        foreach ( 
$advanced_options as $key => $label ) {
            
$output .= sprintf(
                
'<input name="%1$s" type="checkbox" id="%1$s" value="true" %2$s /><label for="%1$s">%3$s</label>',
                
esc_attr$key ),
                ! empty( 
$screen_options$key ] ) ? 'checked="checked"' '',
                
esc_html$label )
            );
        }

        
$output .= '</div></fieldset>';
        
$output .= '<p class="submit">';
        
$output .= '<input type="hidden" name="wp_screen_options[option]" value="wpforms_payments_single">';
        
$output .= '<input type="hidden" name="wp_screen_options[value]" value="true">';
        
$output .= '<input type="submit" name="screen-options-apply" id="screen-options-apply" class="button button-primary" value="' esc_html__'Apply''wpforms-lite' ) . '">';
        
$output .= wp_nonce_field'screen-options-nonce''screenoptionnonce'falsefalse );
        
$output .= '</p>';

        return 
$output;
    }

    
/**
     * Get single page screen options.
     *
     * @since 1.8.2
     *
     * @return false|mixed
     */
    
public static function get_single_page_options() {

        return 
get_user_optionself::SINGLE );
    }

    
/**
     * Payments table per-page screen option value.
     *
     * @since 1.8.2
     *
     * @param mixed  $status The value to save instead of the option value.
     * @param string $option Screen option name.
     * @param mixed  $value  Screen option value.
     *
     * @return mixed
     */
    
public function screen_options_set$status$option$value ) {

        if ( 
$option === self::PER_PAGE ) {
            return 
$value;
        }

        
// phpcs:disable WordPress.Security.NonceVerification.Missing
        
if ( $option === self::SINGLE ) {
            return [
                
'advanced' => isset( $_POST['advanced'] ) && (bool) $_POST['advanced'],
                
'log'      => isset( $_POST['log'] ) && (bool) $_POST['log'],
            ];
        }
        
// phpcs:enable WordPress.Security.NonceVerification.Missing

        
return $status;
    }
}