HEX
Server: Apache/2.4.57 (Unix) OpenSSL/1.1.1k
System: Linux tam.zee-supreme-vps.net 4.18.0-513.9.1.el8_9.x86_64 #1 SMP Sat Dec 2 05:23:44 EST 2023 x86_64
User: adltc (1070)
PHP: 7.4.33
Disabled: NONE
Upload Files
File: /home/adltc/public_html/wp-content/plugins/dynamicconditions/Admin/DynamicConditionsAdmin.php
<?php

namespace DynamicConditions\Admin;

use Elementor\Controls_Manager;
use Elementor\Core\Base\Document;
use Elementor\Element_Base;
use Elementor\Modules\DynamicTags\Module;
use DynamicConditions\Lib\Date;

/**
 * The admin-specific functionality of the plugin.
 *
 * @link       https://www.rto.de
 * @since      1.0.0
 *
 * @package    DynamicConditions
 * @subpackage DynamicConditions/admin
 */

// If this file is called directly, abort.
if ( !defined( 'ABSPATH' ) ) {
    die;
}

/**
 * The admin-specific functionality of the plugin.
 *
 * Defines the plugin name, version, and two examples hooks for how to
 * enqueue the admin-specific stylesheet and JavaScript.
 *
 * @package    DynamicConditions
 * @subpackage DynamicConditions/admin
 * @author     RTO GmbH <kundenhomepage@rto.de>
 */
class DynamicConditionsAdmin {
    private string $pluginName;
    private string $version;

    public function __construct( string $pluginName, string $version ) {

        $this->pluginName = $pluginName;
        $this->version = $version;

    }


    /**
     * Register the stylesheets for the admin area.
     *
     * @since    1.0.0
     */
    public function enqueueStyles(): void {

        wp_enqueue_style( $this->pluginName, DynamicConditions_URL . '/Admin/css/dynamic-conditions-admin.css', [], $this->version, 'all' );

    }

    public function addAdminNotices(): void {
        $message = '';
        $class = 'notice notice-error';

        if ( !defined( 'ELEMENTOR_VERSION' ) && !defined( 'ELEMENTOR_PRO_VERSION' ) ) {
            $message = __( 'Elementor and Elementor Pro not installed.', 'dynamic-conditions' );
        } else if ( !defined( 'ELEMENTOR_PRO_VERSION' ) ) {
            $message = __( 'Elementor Pro not installed.', 'dynamic-conditions' );
        } else if ( !defined( 'ELEMENTOR_VERSION' ) ) {
            $message = __( 'Elementor not installed.', 'dynamic-conditions' );
        }


        if ( empty( $message ) ) {
            return;
        }
        printf( '<div class="%1$s"><p>DynamicConditions: %2$s</p></div>', esc_attr( $class ), esc_html( $message ) );
    }


    /**
     * Creates section for dynamic conditions in elementor-widgets
     * @param Element_Base|Document $element
     */
    public function addConditionFields( $element, $section_id = null, ?array $args = null ): void {
        $valueCondition = [
            'equal',
            'not_equal',
            'contains',
            'not_contains',
            'less',
            'greater',
            'between',
            'in_array',
            'in_array_contains',
        ];

        $allCondition = [
            'equal',
            'not_equal',
            'contains',
            'not_contains',
            'less',
            'greater',
            'between',
            'empty',
            'not_empty',
        ];

        $type = 'element';
        $renderType = 'template';
        if ( !empty( $element ) && is_object( $element ) && method_exists( $element, 'get_type' ) ) {
            $type = $element->get_type();
        }

        $categories = [
            Module::BASE_GROUP,
            Module::TEXT_CATEGORY,
            Module::URL_CATEGORY,
            Module::GALLERY_CATEGORY,
            Module::IMAGE_CATEGORY,
            Module::MEDIA_CATEGORY,
            Module::POST_META_CATEGORY,
        ];

        $categoriesTextOnly = [
            Module::BASE_GROUP,
            Module::TEXT_CATEGORY,
            Module::URL_CATEGORY,
            Module::POST_META_CATEGORY,
        ];

        if ( defined( Module::class . '::COLOR_CATEGORY' ) ) {
            $categories[] = Module::COLOR_CATEGORY;
        }

        $element->start_controls_section(
            'dynamicconditions_section',
            [
                'tab' => Controls_Manager::TAB_ADVANCED,
                'label' => __( 'Dynamic Conditions', 'dynamicconditions' ),
            ]
        );

        $element->add_control(
            'dynamicconditions_dynamic',
            [
                'label' => __( 'Dynamic Tag', 'dynamicconditions' ),
                'type' => Controls_Manager::MEDIA,
                'dynamic' => [
                    'active' => true,
                    'categories' => $categories,
                ],
                'render_type' => $renderType,
                'placeholder' => __( 'Select condition field', 'dynamicconditions' ),
            ]
        );

        $element->add_control(
            'dynamicconditions_visibility',
            [
                'label' => __( 'Show/Hide', 'dynamicconditions' ),
                'type' => Controls_Manager::SELECT,
                'default' => 'hide',
                'options' => [
                    'show' => __( 'Show when condition met', 'dynamicconditions' ),
                    'hide' => __( 'Hide when condition met', 'dynamicconditions' ),
                ],
                'render_type' => $renderType,
                'separator' => 'before',
            ]
        );

        $element->add_control(
            'dynamicconditions_condition',
            [
                'label' => __( 'Condition', 'dynamicconditions' ),
                'type' => Controls_Manager::SELECT2,
                'multiple' => false,
                'label_block' => true,
                'options' => [
                    'equal' => __( 'Is equal to', 'dynamicconditions' ),
                    'not_equal' => __( 'Is not equal to', 'dynamicconditions' ),
                    'contains' => __( 'Contains', 'dynamicconditions' ),
                    'not_contains' => __( 'Does not contain', 'dynamicconditions' ),
                    'empty' => __( 'Is empty', 'dynamicconditions' ),
                    'not_empty' => __( 'Is not empty', 'dynamicconditions' ),
                    'between' => __( 'Between', 'dynamicconditions' ),
                    'less' => __( 'Less than', 'dynamicconditions' ),
                    'greater' => __( 'Greater than', 'dynamicconditions' ),
                    'in_array' => __( 'In array', 'dynamicconditions' ),
                    'in_array_contains' => __( 'In array contains', 'dynamicconditions' ),
                ],
                'description' => __( 'Select your condition for this widget visibility.', 'dynamicconditions' ),

                'prefix_class' => 'dc-has-condition dc-condition-',
                'render_type' => 'template',
            ]
        );

        $element->add_control(
            'dynamicconditions_type',
            [
                'label' => __( 'Compare Type', 'dynamicconditions' ),
                'type' => Controls_Manager::SELECT,
                'multiple' => false,
                'label_block' => true,
                'options' => [
                    'default' => __( 'Text', 'dynamicconditions' ),
                    'date' => __( 'Date', 'dynamicconditions' ),
                    'days' => __( 'Weekdays', 'dynamicconditions' ),
                    'months' => __( 'Months', 'dynamicconditions' ),
                    'strtotime' => __( 'String to time', 'dynamicconditions' ),
                    'int' => __( 'Integer', 'dynamicconditions' ),
                ],
                'default' => 'default',
                'render_type' => $renderType,
                'description' => __( 'Select what do you want to compare', 'dynamicconditions' ),
                'condition' => [
                    'dynamicconditions_condition' => $valueCondition,
                ],
            ]
        );

        $element->add_control(
            'dynamicconditions_value',
            [
                'type' => Controls_Manager::TEXTAREA,
                'label' => __( 'Conditional value', 'dynamicconditions' ),
                'description' => __( 'Add your conditional value to compare here.', 'dynamicconditions' ),
                'render_type' => $renderType,

                'dynamic' => [
                    'active' => true,
                    'categories' => $categoriesTextOnly,
                ],
                'condition' => [
                    'dynamicconditions_condition' => $valueCondition,
                    'dynamicconditions_type' => [ 'default', 'strtotime', 'int' ],
                ],
            ]
        );

        $element->add_control(
            'dynamicconditions_value2',
            [
                'type' => Controls_Manager::TEXTAREA,
                'label' => __( 'Conditional value', 'dynamicconditions' ) . ' 2',
                'description' => __( 'Add a second condition value, if between is selected', 'dynamicconditions' ),
                'render_type' => $renderType,
                'dynamic' => [
                    'active' => true,
                    'categories' => $categoriesTextOnly,
                ],

                'condition' => [
                    'dynamicconditions_condition' => [ 'between' ],
                    'dynamicconditions_type' => [ 'default', 'strtotime', 'int' ],
                ],
            ]
        );


        $element->add_control(
            'dynamicconditions_date_value',
            [
                'type' => Controls_Manager::DATE_TIME,
                'label' => __( 'Conditional value', 'dynamicconditions' ),
                'description' => __( 'Add your conditional value to compare here.', 'dynamicconditions' ),
                'render_type' => $renderType,

                'condition' => [
                    'dynamicconditions_condition' => $valueCondition,
                    'dynamicconditions_type' => 'date',
                ],
            ]
        );

        $element->add_control(
            'dynamicconditions_date_value2',
            [
                'type' => Controls_Manager::DATE_TIME,
                'label' => __( 'Conditional value', 'dynamicconditions' ) . ' 2',
                'description' => __( 'Add a second condition value, if between is selected', 'dynamicconditions' ),
                'render_type' => $renderType,
                'condition' => [
                    'dynamicconditions_condition' => [ 'between' ],
                    'dynamicconditions_type' => 'date',
                ],
            ]
        );

        $element->add_control(
            'dynamicconditions_day_array_value',
            [
                'type' => Controls_Manager::SELECT2,
                'label' => __( 'Conditional value', 'dynamicconditions' ),
                'render_type' => $renderType,
                'condition' => [
                    'dynamicconditions_condition' => [ 'in_array' ],
                    'dynamicconditions_type' => 'days',
                ],
                'description' => __( 'Add your conditional value to compare here.', 'dynamicconditions' ),
                'options' => Date::getDaysTranslated(),
                'multiple' => true,
            ]
        );
        $element->add_control(
            'dynamicconditions_day_value',
            [
                'type' => Controls_Manager::SELECT,
                'label' => __( 'Conditional value', 'dynamicconditions' ),
                'render_type' => $renderType,
                'condition' => [
                    'dynamicconditions_condition' => array_diff( $valueCondition, [ 'in_array' ] ),
                    'dynamicconditions_type' => 'days',
                ],
                'description' => __( 'Add your conditional value to compare here.', 'dynamicconditions' ),
                'options' => Date::getDaysTranslated(),
            ]
        );

        $element->add_control(
            'dynamicconditions_day_value2',
            [
                'type' => Controls_Manager::SELECT,
                'label' => __( 'Conditional value', 'dynamicconditions' ) . ' 2',
                'render_type' => $renderType,
                'condition' => [
                    'dynamicconditions_condition' => [ 'between' ],
                    'dynamicconditions_type' => 'days',
                ],
                'description' => __( 'Add a second condition value, if between is selected', 'dynamicconditions' ),
                'options' => Date::getDaysTranslated(),
            ]
        );

        $element->add_control(
            'dynamicconditions_month_array_value',
            [
                'type' => Controls_Manager::SELECT2,
                'label' => __( 'Conditional value', 'dynamicconditions' ),
                'render_type' => $renderType,
                'condition' => [
                    'dynamicconditions_condition' => [ 'in_array' ],
                    'dynamicconditions_type' => 'months',
                ],
                'description' => __( 'Add your conditional value to compare here.', 'dynamicconditions' ),
                'options' => Date::getMonthsTranslated(),
                'multiple' => true,
            ]
        );

        $element->add_control(
            'dynamicconditions_month_value',
            [
                'type' => Controls_Manager::SELECT,
                'label' => __( 'Conditional value', 'dynamicconditions' ),
                'render_type' => $renderType,
                'condition' => [
                    'dynamicconditions_condition' => array_diff( $valueCondition, [ 'in_array' ] ),
                    'dynamicconditions_type' => 'months',
                ],
                'description' => __( 'Add your conditional value to compare here.', 'dynamicconditions' ),
                'options' => Date::getMonthsTranslated(),
            ]
        );

        $element->add_control(
            'dynamicconditions_month_value2',
            [
                'type' => Controls_Manager::SELECT,
                'label' => __( 'Conditional value', 'dynamicconditions' ) . ' 2',
                'render_type' => $renderType,
                'condition' => [
                    'dynamicconditions_condition' => [ 'between' ],
                    'dynamicconditions_type' => 'months',
                ],
                'description' => __( 'Add a second condition value, if between is selected', 'dynamicconditions' ),
                'options' => Date::getMonthsTranslated(),
            ]
        );


        $element->add_control(
            'dynamicconditions_in_array_description',
            [
                'type' => Controls_Manager::RAW_HTML,
                'label' => __( 'Conditional value', 'dynamicconditions' ) . ' 2',
                'render_type' => $renderType,
                'condition' => [
                    'dynamicconditions_condition' => [ 'in_array' ],
                ],
                'show_label' => false,
                'raw' => __( 'Use comma-separated values, to check if dynamic-value is equal with one of each item.', 'dynamicconditions' ),
            ]
        );

        $element->add_control(
            'dynamicconditions_in_array_contains_description',
            [
                'type' => Controls_Manager::RAW_HTML,
                'label' => __( 'Conditional value', 'dynamicconditions' ) . ' 2',
                'render_type' => $renderType,
                'condition' => [
                    'dynamicconditions_condition' => [ 'in_array_contains' ],
                ],
                'show_label' => false,
                'raw' => __( 'Use comma-separated values, to check if dynamic-value contains one of each item.', 'dynamicconditions' ),
            ]
        );

        $languageArray = explode( '_', get_locale() );
        $language = array_shift( $languageArray );
        $element->add_control(
            'dynamicconditions_date_description',
            [
                'type' => Controls_Manager::RAW_HTML,
                'label' => __( 'Conditional value', 'dynamicconditions' ) . ' 2',
                'render_type' => $renderType,
                'condition' => [
                    'dynamicconditions_condition' => $valueCondition,
                    'dynamicconditions_type' => 'strtotime',
                ],
                'show_label' => false,
                'raw' => '<div class="elementor-control-field-description">'
                    . '<a href="https://php.net/manual/' . $language . '/function.strtotime.php" target="_blank">'
                    . __( 'Supported Date and Time Formats', 'dynamicconditions' ) . '</a></div>',
            ]
        );

        $element->add_control(
            'dynamicconditions_hr',
            [
                'type' => Controls_Manager::DIVIDER,
                'style' => 'thick',
                'condition' => [
                    'dynamicconditions_condition' => $valueCondition,
                ],
            ]
        );

        $element->add_control(
            'dynamicconditions_hideContentOnly',
            [
                'type' => Controls_Manager::SWITCHER,
                'label' => __( 'Hide only content', 'dynamicconditions' ),
                'description' => __( 'If checked, only the inner content will be hidden, so you will see an empty section', 'dynamicconditions' ),
                'return_value' => 'on',
                'render_type' => $renderType,
                'condition' => [
                    'dynamicconditions_condition' => $allCondition,
                ],
            ]
        );

        $element->add_control(
            'dynamicconditions_removeStyles',
            [
                'type' => Controls_Manager::SWITCHER,
                'label' => __( 'Remove Styles', 'dynamicconditions' ),
                'description' => __( 'If checked, all style- and link-tags will be removed from the element. Can affect other elements.', 'dynamicconditions' ),
                'return_value' => 'on',
                'render_type' => $renderType,
                'condition' => [
                    'dynamicconditions_condition' => $allCondition,
                ],
            ]
        );

        if ( $type === 'column' ) {
            $element->add_control(
                'dynamicconditions_resizeOtherColumns',
                [
                    'type' => Controls_Manager::SWITCHER,
                    'label' => __( 'Resize other columns', 'dynamicconditions' ),
                    'render_type' => $renderType,
                    'condition' => [
                        'dynamicconditions_condition' => $allCondition,
                        'dynamicconditions_hideContentOnly!' => 'on',
                    ],
                    'return_value' => 'on',
                ]
            );
        }


        $element->add_control(
            'dynamicconditions_headline_expert',
            [
                'label' => __( 'Expert', 'dynamicconditions' ),
                'type' => Controls_Manager::HEADING,
                'separator' => 'before',
            ]
        );

        $element->add_control(
            'dynamicconditions_parse_shortcodes',
            [
                'type' => Controls_Manager::SWITCHER,
                'label' => __( 'Parse shortcodes', 'dynamicconditions' ),
                'render_type' => $renderType,
            ]
        );

        $element->add_control(
            'dynamicconditions_prevent_date_parsing',
            [
                'type' => Controls_Manager::SWITCHER,
                'label' => __( 'Prevent date parsing', 'dynamicconditions' ),
                'render_type' => $renderType,
            ]
        );


        $element->add_control(
            'dynamicconditions_hr3',
            [
                'type' => Controls_Manager::DIVIDER,
                'style' => 'thick',
            ]
        );


        $element->add_control(
            'dynamicconditions_hideWrapper',
            [
                'type' => Controls_Manager::TEXT,
                'label' => __( 'Hide wrapper', 'dynamicconditions' ),
                'description' => __( 'Will hide a parent matching the selector.', 'dynamicconditions' ),
                'placeholder' => 'selector',
                'render_type' => $renderType,
            ]
        );

        $element->add_control(
            'dynamicconditions_hideOthers',
            [
                'type' => Controls_Manager::TEXT,
                'label' => __( 'Hide other elements', 'dynamicconditions' ),
                'description' => __( 'Will hide all other elements matching the selector.', 'dynamicconditions' ),
                'placeholder' => 'selector',
                'render_type' => $renderType,
            ]
        );

        $element->add_control(
            'dynamicconditions_hr4',
            [
                'type' => Controls_Manager::DIVIDER,
                'style' => 'thick',
            ]
        );

        $element->add_control(
            'dynamicconditions_widget_id',
            [
                'type' => Controls_Manager::TEXT,
                'label' => __( 'Widget-ID', 'dynamicconditions' ),
                'render_type' => $renderType,
                'description' => '<script>
                    $dcWidgetIdInput = jQuery(\'.elementor-control-dynamicconditions_widget_id input\');
                    $dcWidgetIdInput.val(elementor.getCurrentElement().model.id);
                    $dcWidgetIdInput.attr(\'readonly\', true);
                    $dcWidgetIdInput.on(\'focus click\', function() { this.select();document.execCommand(\'copy\'); });
                    </script>',
            ]
        );

        $element->add_control(
            'dynamicconditions_hr5',
            [
                'type' => Controls_Manager::DIVIDER,
                'style' => 'thick',
            ]
        );

        $element->add_control(
            'dynamicconditions_debug',
            [
                'type' => Controls_Manager::SWITCHER,
                'label' => __( 'Debug-Mode', 'dynamicconditions' ),
                'render_type' => $renderType,
            ]
        );

        $element->end_controls_section();
    }
}