Heray-Was-Here
Server : Apache/2.4.52 (Debian)
System : Linux 1b21ca041b67 5.10.0-44-amd64 #1 SMP Debian 5.10.257-1 (2026-05-27) x86_64
User : www-data ( 33)
PHP Version : 7.4.28
Disable Function : NONE
Directory :  /var/www/html/wp-content/plugins/widget-options/includes/pagebuilders/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/html/wp-content/plugins/widget-options/includes/pagebuilders/siteorigin.php
<?php

/**
 * Handle compatibility with Pagebuilder by SiteOrigin Plugin
 *
 * Process AJAX actions.
 *
 * @copyright   Copyright (c) 2016, Jeffrey Carandang
 * @since       3.0
 */
// Exit if accessed directly
if (! defined('ABSPATH')) exit;

if (!function_exists('widgetopts_siteorigin_panels_data')) {
    add_filter('siteorigin_panels_data', 'widgetopts_siteorigin_panels_data', 10, 4);
    function widgetopts_siteorigin_panels_data($panels_data, $post_id)
    {
        global $widget_options;
        if (!is_admin()) {
            if (isset($panels_data['widgets']) && !empty($panels_data['widgets']) && is_array($panels_data['widgets'])) {

                global $current_user;

                foreach ($panels_data['widgets'] as $key => $widgets) {
                    if (isset($widgets['extended_widget_opts']) && !empty($widgets['extended_widget_opts'])) {

                        if (isset($panels_data['widgets'][$key]) && 'activate' == $widget_options['logic']) {
                            // New snippet-based system
                            if (isset($widgets['extended_widget_opts']['class']['logic_snippet_id']) && !empty($widgets['extended_widget_opts']['class']['logic_snippet_id'])) {
                                $snippet_id = $widgets['extended_widget_opts']['class']['logic_snippet_id'];
                                if (class_exists('WidgetOpts_Snippets_API')) {
                                    $result = WidgetOpts_Snippets_API::execute_snippet($snippet_id);
                                    if ($result === false) {
                                        unset($panels_data['widgets'][$key]);
                                    }
                                }
                            }
                            // Legacy support for old inline logic
                            elseif (isset($widgets['extended_widget_opts']['class']['logic']) && !empty($widgets['extended_widget_opts']['class']['logic'])) {
                                // Flag that legacy migration is needed
                                if (!get_option('wopts_display_logic_migration_required', false)) {
                                    update_option('wopts_display_logic_migration_required', true);
                                }

                                $display_logic = stripslashes(trim($widgets['extended_widget_opts']['class']['logic']));
                                $display_logic = apply_filters('widget_options_logic_override', $display_logic);
                                if ($display_logic === false) {
                                    unset($panels_data['widgets'][$key]);
                                }
                                if ($display_logic === true) {
                                    // return true;
                                }
                                $display_logic = htmlspecialchars_decode($display_logic, ENT_QUOTES);
                                try {
                                    if (!widgetopts_safe_eval_trusted($display_logic)) {
                                        unset($panels_data['widgets'][$key]);
                                    }
                                } catch (ParseError $e) {
                                    unset($panels_data['widgets'][$key]);
                                }
                            }
                        }
                    }
                }
            }
        }
        return $panels_data;
    }
}

/**
 * Protect legacy display logic from modification/injection on SiteOrigin save.
 * Intercepts panels_data meta save, restores old logic values from DB.
 * 
 * @since 5.1
 */
if (!function_exists('widgetopts_siteorigin_protect_logic_on_save')) {
    add_filter('update_post_metadata', 'widgetopts_siteorigin_protect_logic_on_save', 10, 5);
    function widgetopts_siteorigin_protect_logic_on_save($check, $object_id, $meta_key, $meta_value, $prev_value) {
        if ($meta_key !== 'panels_data') return $check;

        static $processing = false;
        if ($processing) return $check;

        // No early-return when old data / old logic set is empty: that would
        // let a contributor smuggle class.logic through the first save.
        $old_data      = get_post_meta($object_id, 'panels_data', true);
        $old_logic_set = array();
        if (is_array($old_data) && !empty($old_data['widgets']) && is_array($old_data['widgets'])) {
            foreach ($old_data['widgets'] as $widget) {
                if (isset($widget['extended_widget_opts']['class']['logic'])
                    && $widget['extended_widget_opts']['class']['logic'] !== '') {
                    $old_logic_set[] = $widget['extended_widget_opts']['class']['logic'];
                }
            }
        }

        // Check new data
        $new_data = is_array($meta_value) ? $meta_value : maybe_unserialize($meta_value);
        if (!is_array($new_data) || empty($new_data['widgets'])) return $check;

        $modified = false;
        foreach ($new_data['widgets'] as &$widget) {
            if (!isset($widget['extended_widget_opts']['class'])) continue;

            $cls = &$widget['extended_widget_opts']['class'];
            $wopt_ver = isset($cls['wopt_version']) ? $cls['wopt_version'] : '';
            $has_snippet = !empty($cls['logic_snippet_id']);
            $has_legacy = !empty($cls['logic']);

            // If wopt_version >= 4.2: legacy logic is obsolete — clear it
            if ($wopt_ver !== '' && version_compare($wopt_ver, '4.2', '>=')) {
                if ($has_legacy) {
                    $cls['logic'] = '';
                    $modified = true;
                }
                unset($cls);
                continue;
            }

            // Auto-clear legacy logic if snippet_id is already set (migration done)
            if ($has_snippet && $has_legacy) {
                $cls['logic'] = '';
                $cls['wopt_version'] = WIDGETOPTS_VERSION;
                $modified = true;
                unset($cls);
                continue;
            }

            // User intentionally cleared legacy logic via Clear button
            if (!empty($cls['logic_cleared'])) {
                $cls['logic'] = '';
                unset($cls['logic_cleared']);
                $cls['wopt_version'] = WIDGETOPTS_VERSION;
                $modified = true;
                unset($cls);
                continue;
            }

            if (!isset($cls['logic'])) {
                unset($cls);
                continue;
            }
            $val = $cls['logic'];
            if ($val !== '' && !in_array($val, $old_logic_set, true)) {
                // Injected value not in old data — strip
                $cls['logic'] = '';
                $modified = true;
            }

            unset($cls);
        }

        if ($modified) {
            $processing = true;
            update_post_meta($object_id, 'panels_data', $new_data);
            $processing = false;
            return true; // Short-circuit original update
        }

        return $check;
    }
}

if (!function_exists('widgetopts_siteorigin_panels_widget_classes')) {
    add_filter('siteorigin_panels_widget_classes', 'widgetopts_siteorigin_panels_widget_classes', 10, 4);
    function widgetopts_siteorigin_panels_widget_classes($classes, $widget, $instance, $widget_info)
    {
        if (isset($instance['extended_widget_opts'])) {
            global $widget_options;

            $get_classes    = widgetopts_classes_generator($instance['extended_widget_opts'], $widget_options, $widget_options['settings'], true);
            $get_classes[]  = 'widgetopts-SO';

            $classes = apply_filters('widgetopts_siteorigin_panels_widget_classes', array_merge($classes, $get_classes), $widget_info);
        }

        return $classes;
    }
}

Hry