Files
roi-theme/wp-content/plugins/advanced-ads/includes/admin/class-screen-options.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

192 lines
4.6 KiB
PHP
Executable File

<?php
/**
* Admin Screen Options.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.48.2
*/
namespace AdvancedAds\Admin;
use WP_Screen;
use AdvancedAds\Options;
use AdvancedAds\Utilities\Conditional;
use AdvancedAds\Framework\Utilities\Params;
use AdvancedAds\Framework\Interfaces\Integration_Interface;
defined( 'ABSPATH' ) || exit;
/**
* Admin Screen Options.
*/
class Screen_Options implements Integration_Interface {
const USER_META_KEY = 'advanced-ads-screen-options';
/**
* Array key for screen options.
*
* @var string
*/
private $screen_key = '';
/**
* Hook into WordPress.
*
* @return void
*/
public function hooks(): void {
add_filter( 'screen_settings', [ $this, 'add_screen_options' ], 10, 2 );
add_action( 'wp_loaded', [ $this, 'save_screen_options' ] );
add_action( 'load-edit.php', [ $this, 'set_screen_options' ] );
}
/**
* Return true if the current screen is the ad or placement list.
*
* @return bool
*/
private function is_screen(): bool {
return Conditional::is_screen( [ 'edit-advanced_ads', 'edit-advanced_ads_plcmnt' ] );
}
/**
* Register custom screen options on the ad overview page.
*
* @param string $options Screen options HTML.
* @param WP_Screen $screen Screen object.
*
* @return string
*/
public function add_screen_options( $options, WP_Screen $screen ) {
if ( ! $this->is_screen() ) {
return $options;
}
$selected_filters = $screen->get_option( 'filters_to_show' ) ?? [];
$is_filter_permanent = boolval( $screen->get_option( 'show-filters' ) );
$optional_filters = $this->get_optional_filters();
// If the default WordPress screen options don't exist, we have to force the submit button to show.
add_filter( 'screen_options_show_submit', '__return_true' );
ob_start();
require ADVADS_ABSPATH . 'views/admin/screen-options.php';
return $options . ob_get_clean();
}
/**
* Add the screen options to the WP_Screen options
*
* @return void
*/
public function set_screen_options(): void {
$screen_options = $this->get_screen_options();
// Early bail!!
if ( ! $this->is_screen() || empty( $screen_options ) ) {
return;
}
$screen_key = $this->get_screen_key( get_current_screen()->id );
$screen_options = $screen_options[ $screen_key ] ?? [];
foreach ( $screen_options as $option_name => $value ) {
add_screen_option( $option_name, $value );
}
}
/**
* Save the screen option setting.
*
* @return void
*/
public function save_screen_options() {
$options = Params::post( self::USER_META_KEY, false, FILTER_DEFAULT, FILTER_REQUIRE_ARRAY );
$user = wp_get_current_user();
// Early bail!!
if ( ! $options || ! $user ) {
return;
}
check_admin_referer( 'screen-options-nonce', 'screenoptionnonce' );
$screen_options = $this->get_screen_options();
$screen_key = $this->get_screen_key( $options['screen-id'] );
// no need to save it.
unset( $options['screen-id'] );
$screen_options[ $screen_key ] = $options;
update_user_meta( $user->ID, self::USER_META_KEY, $screen_options );
}
/**
* Get the current user screen options from DB.
*
* @return array
*/
private function get_screen_options() {
$screen_options = get_user_meta( get_current_user_id(), self::USER_META_KEY, true );
if ( ! is_array( $screen_options ) ) {
return [];
}
return $screen_options;
}
/**
* Get the screen key for DB use.
*
* @param string $screen_id Screen ID.
*
* @return string
*/
private function get_screen_key( $screen_id = false ) {
if ( ! $screen_id && ! empty( $this->screen_key ) ) {
return $this->screen_key;
}
switch ( $screen_id ) {
case 'edit-advanced_ads':
$this->screen_key = 'ad';
break;
case 'edit-advanced_ads_plcmnt':
$this->screen_key = 'placement';
break;
default:
$this->screen_key = false;
}
return $this->screen_key;
}
/**
* Get optional filters.
*
* @return array The optional filters.
*/
private function get_optional_filters() {
// $optional_filters array order determines display sequence.
$optional_filters = [];
if ( Conditional::is_screen( [ 'edit-advanced_ads' ] ) ) {
$optional_filters ['all_debug_mode'] = __( 'Debug Mode', 'advanced-ads' );
$optional_filters['all_authors'] = __( 'Author', 'advanced-ads' );
// show only when privacy setting is enabled.
if ( Options::instance()->get( 'privacy.enabled' ) ) {
$optional_filters['all_privacyignore'] = __( 'Privacy Ignore', 'advanced-ads' );
}
$optional_filters = apply_filters( 'advanced_ads_optional_filters', $optional_filters );
}
return $optional_filters;
}
}