HEX
Server: Apache
System: Linux server11 5.10.0-33-amd64 #1 SMP Debian 5.10.226-1 (2024-10-03) x86_64
User: web78 (5081)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/clients/client1/web78/web/wp-content/plugins/widget-logic/widget/admin.php
<?php
if (!defined('ABSPATH')) exit; // Exit if accessed directly

include_once 'logic.php';

function widget_logic_in_widget_form($widget, $return, $instance)
{
    $logic = isset($instance['widget_logic']) ? $instance['widget_logic'] : widget_logic_by_id($widget->id);

    ?>
    <p>
        <label for="<?php echo esc_attr($widget->get_field_id('widget_logic')); ?>">
            <?php esc_html_e('Widget logic:', 'widget-logic') ?>
        </label>
        <textarea
            class="widefat"
            name="<?php echo esc_attr($widget->get_field_name('widget_logic')); ?>"
            id="<?php echo esc_attr($widget->get_field_id('widget_logic')); ?>"
        >
            <?php echo esc_textarea($logic) ?>
        </textarea>
    </p>
    <?php
    return;
}


// CALLED VIA 'widget_update_callback' FILTER (ajax update of a widget)
function widget_logic_update_callback($instance, $new_instance, $old_instance, $this_widget)
{
    if (isset($new_instance['widget_logic'])) {
        $instance['widget_logic'] = $new_instance['widget_logic'];
    }

    return $instance;
}

// CALLED VIA 'sidebar_admin_setup' ACTION
// adds in the admin control per widget, but also processes import/export
function widget_logic_expand_control()
{
    global $wp_registered_widgets, $wp_registered_widget_controls, $wl_options;

    // EXPORT ALL OPTIONS
    if (
        isset($_GET['wl-options-export'])
        && isset($_GET['widget_logic_nonce'])
        && wp_verify_nonce(sanitize_text_field(wp_unslash($_GET['widget_logic_nonce'])), 'widget_logic_export')
    ) {
        header("Content-Disposition: attachment; filename=widget_logic_options.txt");
        header('Content-Type: text/plain; charset=utf-8');

        echo "[START=WIDGET LOGIC OPTIONS]\n";
        foreach ($wl_options as $id => $text) {
            echo esc_attr($id)."\t" . wp_json_encode($text) . "\n";
        }
        echo "[STOP=WIDGET LOGIC OPTIONS]";
        exit;
    }


    // IMPORT ALL OPTIONS
    if (
        isset($_POST['wl-options-import'])
        && current_user_can('administrator')
        && isset($_POST['widget_logic_nonce'])
        && wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['widget_logic_nonce'])), 'widget_logic_import')
    ) {
        if ($_FILES['wl-options-import-file']['tmp_name']) {
            $import = explode("\n", file_get_contents($_FILES['wl-options-import-file']['tmp_name'], false)); // @codingStandardsIgnoreLine file_get_contents used for file reading
            if (
                array_shift($import) == "[START=WIDGET LOGIC OPTIONS]"
                && array_pop($import) == "[STOP=WIDGET LOGIC OPTIONS]"
            ) {
                foreach ($import as $import_option) {
                    list($key, $value) = explode("\t", $import_option);
                    $wl_options[$key]  = json_decode($value);
                }
                $wl_options['msg'] = __('Success! Options file imported', 'widget-logic');
            } else {
                $wl_options['msg'] = __('Invalid options file', 'widget-logic');
            }

        } else {
            $wl_options['msg'] = __('No options file provided', 'widget-logic');
        }

        update_option('widget_logic', $wl_options);
        wp_redirect(admin_url('widgets.php'));
        exit;
    }

    // UPDATE OTHER WIDGET LOGIC OPTIONS
    // must update this to use http://codex.wordpress.org/Settings_API
    if (
        isset($_POST['widget_logic-options-submit'])
        && current_user_can('administrator')
        && isset($_POST['widget_logic_nonce'])
        && wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['widget_logic_nonce'])), 'widget_logic_settings')
    ) {
        if (!empty($_POST['widget_logic-options-filter'])) {
            $wl_options['widget_logic-options-filter'] = true;
        } else {
            unset($wl_options['widget_logic-options-filter']);
        }

        $wl_options['widget_logic-options-wp_reset_query'] = !empty($_POST['widget_logic-options-wp_reset_query']);
        $wl_options['widget_logic-options-show_errors']    = !empty($_POST['widget_logic-options-show_errors']);
        $wl_options['widget_logic-options-load_point']     = sanitize_text_field(wp_unslash($_POST['widget_logic-options-load_point']));
    }

    update_option('widget_logic', $wl_options);
}

// CALLED VIA 'sidebar_admin_page' ACTION
// output extra HTML
// to update using http://codex.wordpress.org/Settings_API asap
function widget_logic_options_control()
{
    global $wp_registered_widget_controls, $wl_options;

    if (isset($wl_options['msg'])) {
        $isError = "OK" != substr($wl_options['msg'], 0, 2);
        $msgClass = $isError ? 'error' : 'updated';

        echo '<div id="message" class="'.esc_attr($msgClass).'"><p>Widget Logic – '.esc_html($wl_options['msg']).'</p></div>';
        unset($wl_options['msg']);
        update_option('widget_logic', $wl_options);
    }


    ?>
    <div class="wrap">
        <h2><?php esc_html_e('Widget Logic options', 'widget-logic'); ?></h2>
        <form method="POST" style="float:left; width:45%">
            <ul>
                <?php if (!empty($wl_options['widget_logic-options-filter'])): ?>
                    <li>
                        <label for="widget_logic-options-filter"
                            title="<?php esc_attr_e('Adds a new WP filter you can use in your own code. Not needed for main Widget Logic functionality.', 'widget-logic'); ?>">
                            <input
                                id="widget_logic-options-filter"
                                name="widget_logic-options-filter"
                                type="checkbox"
                                value="checked"
                                class="checkbox"
                                <?php if (!empty($wl_options['widget_logic-options-filter'])) echo "checked" ?>
                            />
                            <?php esc_html_e('Add \'widget_content\' filter', 'widget-logic'); ?>
                        </label>
                    </li>
                <?php endif ?>
                <li><label for="widget_logic-options-wp_reset_query"
                        title="<?php esc_attr_e('Resets a theme\'s custom queries before your Widget Logic is checked', 'widget-logic'); ?>">
                        <input
                            id="widget_logic-options-wp_reset_query"
                            name="widget_logic-options-wp_reset_query"
                            type="checkbox"
                            value="checked"
                            class="checkbox"
                            <?php if (!empty($wl_options['widget_logic-options-wp_reset_query'])) echo "checked" ?>
                        />
                        <?php esc_html_e('Use \'wp_reset_query\' fix', 'widget-logic'); ?>
                    </label>
                </li>
                <li><label for="widget_logic-options-load_point"
                        title="<?php esc_attr_e('Delays widget logic code being evaluated til various points in the WP loading process', 'widget-logic'); ?>"><?php esc_html_e('Load logic', 'widget-logic'); ?>
                        <select
                            id="widget_logic-options-load_point"
                            name="widget_logic-options-load_point"
                        >
                            <?php
                                $wl_load_points = array(
                                    'parse_query'       => __('after query variables set (default)', 'widget-logic'),
                                    'plugins_loaded'    => __('when plugin starts', 'widget-logic'),
                                    'after_setup_theme' => __('after theme loads', 'widget-logic'),
                                    'wp_loaded'         => __('when all PHP loaded', 'widget-logic'),
                                    'wp_head'           => __('during page header', 'widget-logic')
                                );
                                foreach ($wl_load_points as $action => $action_desc) {
                                    echo "<option value='" . esc_attr($action) . "'";
                                    if (
                                        isset($wl_options['widget_logic-options-load_point'])
                                        && $action == $wl_options['widget_logic-options-load_point']
                                    ) {
                                        echo " selected ";
                                    }
                                    echo ">" . esc_html($action_desc) . "</option>";
                                }
                            ?>
                        </select>
                    </label>
                </li>
                <li>
                    <label for="widget_logic-options-show_errors">
                        <input
                            id="widget_logic-show_errors"
                            name="widget_logic-options-show_errors"
                            type="checkbox"
                            value="1"
                            class="checkbox"
                            <?php if (!empty($wl_options['widget_logic-options-show_errors'])) echo "checked" ?>
                        />
                        <?php esc_html_e('Display logic errors to admin', 'widget-logic'); ?>
                    </label>
            </ul>

            <?php wp_nonce_field('widget_logic_settings', 'widget_logic_nonce'); ?>
            <?php submit_button(__('Save WL options', 'widget-logic'), 'button-primary', 'widget_logic-options-submit', false); ?>
        </form>
        <form method="POST" enctype="multipart/form-data" style="float:left; width:45%">
            <a
                class="submit button"
                href="<?php echo esc_url(wp_nonce_url('?wl-options-export', 'widget_logic_export', 'widget_logic_nonce')); ?>"
                title="<?php esc_attr_e('Save all WL options to a plain text config file', 'widget-logic'); ?>"
            >
                <?php esc_html_e('Export options', 'widget-logic'); ?>
            </a>
            <p>
                <?php submit_button(
                    __('Import options', 'widget-logic'),
                    'button',
                    'wl-options-import',
                    false,
                    array('title' => __('Load all WL options from a plain text config file', 'widget-logic'))
                ); ?>
                <input
                    type="file"
                    name="wl-options-import-file"
                    id="wl-options-import-file"
                    title="<?php esc_attr_e('Select file for importing', 'widget-logic'); ?>"
                />
            </p>

            <?php wp_nonce_field('widget_logic_import', 'widget_logic_nonce'); ?>
        </form>

    </div>

    <?php
}

function widget_logic_add_controls()
{
    global $wp_registered_widget_controls, $wp_registered_widgets, $wp_registered_widget_updates;

    foreach ($wp_registered_widgets as $id => $widget) {
        if (preg_match('/^(.+)-(\d+)$/', $id)) {
            continue;
        }

        if (!isset($wp_registered_widget_controls[$id])) {
            wp_register_widget_control($id, $id, 'widget_logic_extra_control', array(), $id, null);
            continue;
        }

        if (@$wp_registered_widget_controls[$id]['callback'] != 'widget_logic_extra_control') {
            $wp_registered_widget_controls[$id]['params'][] = $id;
            $wp_registered_widget_controls[$id]['params'][] = @$wp_registered_widget_controls[$id]['callback'];
            $wp_registered_widget_controls[$id]['callback'] = 'widget_logic_extra_control';

            $wp_registered_widget_updates[$id]['params'][] = $id;
            $wp_registered_widget_updates[$id]['params'][] = @$wp_registered_widget_updates[$id]['callback'];
            $wp_registered_widget_updates[$id]['callback'] = 'widget_logic_extra_control';
        }
    }
}

// added to widget functionality in 'widget_logic_expand_control' (above)
function widget_logic_extra_control()
{
    global $wp_customize;
    $args = func_get_args();

    $callback  = array_pop($args);
    $widget_id = array_pop($args);

    if (is_callable($callback)) {
        call_user_func_array($callback, $args);
    }

    if (
        isset($_POST["widget-$widget_id"]['widget_logic'])
        && current_user_can('administrator')
        && isset($_POST['widget_logic_nonce'])
        && wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['widget_logic_nonce'])), 'widget_logic_save')
    ) {
        $logic = sanitize_text_field(wp_unslash($_POST["widget-$widget_id"]['widget_logic']));
        widget_logic_save($widget_id, $logic);
    } else {
        $logic = widget_logic_by_id($widget_id);
    }

    $input_id   = "widget-$widget_id-widget_logic";
    $input_name = "widget-{$widget_id}[widget_logic]";
    ?>
    <p>
        <label for="<?php echo esc_attr($input_id) ?>">
            <?php esc_html_e('Widget logic:', 'widget-logic') ?>
        </label>
        <?php if (!empty($wp_customize) && $wp_customize->is_preview()): ?>
            <textarea class="widefat" id="<?php echo esc_attr($input_id) ?>" readonly>
                <?php echo esc_textarea($logic) ?>
            </textarea>
            <br>
            <span class="description">
                <?php
                // Translators: %1$s is the link to widget page
                printf(esc_html__(
                        'This is a "wp register sidebar widget" and is different from regular widgets. Hence it can only be edited from the %s page.',
                        'widget-logic'
                    ),
                    sprintf(
                        '<a href="%s" target="_blank">%s</a>',
                        esc_attr(admin_url('widgets.php')),
                        esc_attr__('widgets', 'widget-logic')
                    )
                )
                ?>
            </span>
        <?php else: ?>
            <textarea
                class="widefat"
                name="<?php echo esc_attr($input_name) ?>"
                id="<?php echo esc_attr($input_id) ?>"
            >
                <?php echo esc_textarea($logic) ?>
            </textarea>
        <?php endif ?>
        <?php wp_nonce_field('widget_logic_save', 'widget_logic_nonce'); ?>
    </p>
    <?php
    return true;
}