• File: PriceListChild.php
  • Full Path: /home/matthif/www/wp-content/plugins/supreme-modules-for-divi/includes/modules/PriceListChild/PriceListChild.php
  • Date Modified: 01/16/2026 10:21 PM
  • File size: 14.14 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php

class DSM_PriceList_Child extends ET_Builder_Module {

    public 
$slug       'dsm_pricelist_child';
    public 
$vb_support 'on';
    public 
$type       'child';

    protected 
$module_credits = array(
        
'module_uri' => 'https://divisupreme.com/',
        
'author'     => 'Divi Supreme',
        
'author_uri' => 'https://divisupreme.com/',
    );

    public function 
init() {
        
$this->name                        esc_html__'Price List Item''supreme-modules-for-divi' );
        
$this->advanced_setting_title_text esc_html__'Price List Item''supreme-modules-for-divi' );
        
$this->settings_text               esc_html__'Price List Item Settings''supreme-modules-for-divi' );
        
$this->child_title_var             'admin_title';
        
$this->child_title_fallback_var    'title';

        
$this->settings_modal_toggles = array(
            
'general'    => array(
                
'toggles' => array(
                    
'main_content' => esc_html__'Text''supreme-modules-for-divi' ),
                    
'link'         => esc_html__'Link''supreme-modules-for-divi' ),
                    
'image'        => esc_html__'Image''supreme-modules-for-divi' ),
                ),
            ),
            
'advanced'   => array(
                
'toggles' => array(
                    
'icon_settings' => esc_html__'Image''supreme-modules-for-divi' ),
                    
'text'          => array(
                        
'title'    => esc_html__'Text''supreme-modules-for-divi' ),
                        
'priority' => 49,
                    ),
                    
'width'         => array(
                        
'title'    => esc_html__'Sizing''supreme-modules-for-divi' ),
                        
'priority' => 65,
                    ),
                ),
            ),
            
'custom_css' => array(
                
'toggles' => array(
                    
'attributes' => array(
                        
'title'    => esc_html__'Attributes''supreme-modules-for-divi' ),
                        
'priority' => 95,
                    ),
                ),
            ),
        );
    }

    public function 
get_advanced_fields_config() {
        return array(
            
'fonts'           => false,
            
'text'            => array(
                
'use_text_orientation'  => false,
                
'use_background_layout' => false,
                
'css'                   => array(
                    
'text_shadow' => '%%order_class%% .dsm_pricelist_item_wrapper',
                ),
            ),
            
'borders'         => array(
                
'default' => array(),
                
'image'   => array(
                    
'css'          => array(
                        
'main' => array(
                            
'border_radii'  => '%%order_class%% .dsm-pricelist-image img',
                            
'border_styles' => '%%order_class%% .dsm-pricelist-image img',
                        ),
                    ),
                    
'label_prefix' => esc_html__'Image''supreme-modules-for-divi' ),
                    
'tab_slug'     => 'advanced',
                    
'toggle_slug'  => 'icon_settings',
                ),
            ),
            
'box_shadow'      => array(
                
'default' => array(),
                
'image'   => array(
                    
'label'             => esc_html__'Image Box Shadow''supreme-modules-for-divi' ),
                    
'option_category'   => 'layout',
                    
'tab_slug'          => 'advanced',
                    
'toggle_slug'       => 'icon_settings',
                    
'css'               => array(
                        
'main' => '%%order_class%% .dsm-pricelist-image img',
                    ),
                    
'default_on_fronts' => array(
                        
'color'    => '',
                        
'position' => '',
                    ),
                ),
            ),
            
'margin_padding'  => array(
                
'css' => array(
                    
'main'      => '%%order_class%%',
                    
'important' => 'all',
                ),
            ),
            
'button'          => false,
            
'filters'         => array(
                
'child_filters_target' => array(
                    
'tab_slug'    => 'advanced',
                    
'toggle_slug' => 'icon_settings',
                ),
            ),
            
'icon_settings'   => array(
                
'css' => array(
                    
'main' => '%%order_class%% .dsm-pricelist-image img',
                ),
            ),
            
'position_fields' => false,
        );
    }

    public function 
get_fields() {
        
$et_accent_color et_builder_accent_color();

        return array(
            
'module_id'       => array(
                
'label'           => esc_html__'CSS ID''supreme-modules-for-divi' ),
                
'type'            => 'text',
                
'option_category' => 'configuration',
                
'description'     => esc_html__"Assign a unique CSS ID to the element which can be used to assign custom CSS styles from within your child theme or from within Divi's custom CSS inputs."'supreme-modules-for-divi' ),
                
'tab_slug'        => 'custom_css',
                
'toggle_slug'     => 'classes',
                
'option_class'    => 'et_pb_custom_css_regular',
            ),
            
'module_class'    => array(
                
'label'           => esc_html__'CSS Class''supreme-modules-for-divi' ),
                
'type'            => 'text',
                
'option_category' => 'configuration',
                
'description'     => esc_html__"Assign any number of CSS Classes to the element, separated by spaces, which can be used to assign custom CSS styles from within your child theme or from within Divi's custom CSS inputs."'supreme-modules-for-divi' ),
                
'tab_slug'        => 'custom_css',
                
'toggle_slug'     => 'classes',
                
'option_class'    => 'et_pb_custom_css_regular',
            ),
            
'admin_title'     => array(
                
'label'       => esc_html__'Admin Label''supreme-modules-for-divi' ),
                
'type'        => 'text',
                
'description' => esc_html__'This will change the label of the business hours item in the builder for easy identification.''supreme-modules-for-divi' ),
                
'toggle_slug' => 'admin_label',
            ),
            
'price'           => array(
                
'label'            => esc_html__'Price''supreme-modules-for-divi' ),
                
'type'             => 'text',
                
'option_category'  => 'basic_option',
                
'description'      => esc_html__'Add the price of the item''supreme-modules-for-divi' ),
                
'toggle_slug'      => 'main_content',
                
'default'          => '$8',
                
'default_on_front' => '$8',
                
'dynamic_content'  => 'text',
                
'mobile_options'   => true,

            ),
            
'title'           => array(
                
'label'            => esc_html__'Title''supreme-modules-for-divi' ),
                
'type'             => 'text',
                
'option_category'  => 'basic_option',
                
'description'      => esc_html__'Text entered here will appear as title.''supreme-modules-for-divi' ),
                
'toggle_slug'      => 'main_content',
                
'default_on_front' => 'The title of the first pricing item',
                
'dynamic_content'  => 'text',
                
'mobile_options'   => true,

            ),
            
'image'           => array(
                
'label'              => esc_html__'Image''supreme-modules-for-divi' ),
                
'type'               => 'upload',
                
'option_category'    => 'basic_option',
                
'upload_button_text' => esc_attr__'Upload an image''supreme-modules-for-divi' ),
                
'choose_text'        => esc_attr__'Choose an Image''supreme-modules-for-divi' ),
                
'update_text'        => esc_attr__'Set As Image''supreme-modules-for-divi' ),
                
'depends_show_if'    => 'off',
                
'description'        => esc_html__'Upload an image to display at the top of your blurb.''supreme-modules-for-divi' ),
                
'toggle_slug'        => 'image',
                
'dynamic_content'    => 'image',
            ),
            
'alt'             => array(
                
'label'           => esc_html__'Image Alt Text''supreme-modules-for-divi' ),
                
'type'            => 'text',
                
'option_category' => 'basic_option',
                
'description'     => esc_html__'Define the HTML ALT text for your image here.''supreme-modules-for-divi' ),
                
'depends_show_if' => 'off',
                
'tab_slug'        => 'custom_css',
                
'toggle_slug'     => 'attributes',
                
'dynamic_content' => 'text',
            ),
            
'content'         => array(
                
'label'           => esc_html__'Content''supreme-modules-for-divi' ),
                
'type'            => 'tiny_mce',
                
'option_category' => 'basic_option',
                
'description'     => esc_html__'Content entered here will appear inside the module.''supreme-modules-for-divi' ),
                
'toggle_slug'     => 'main_content',
                
'dynamic_content' => 'text',
                
'mobile_options'  => true,

            ),
            
'image_max_width' => array(
                
'label'            => esc_html__'Image Width''supreme-modules-for-divi' ),
                
'type'             => 'range',
                
'option_category'  => 'layout',
                
'tab_slug'         => 'advanced',
                
'toggle_slug'      => 'icon_settings',
                
'validate_unit'    => true,
                
'depends_show_if'  => 'off',
                
'default'          => '50%',
                
'default_unit'     => '%',
                
'default_on_front' => '',
                
'allow_empty'      => true,
                
'range_settings'   => array(
                    
'min'  => '0',
                    
'max'  => '50',
                    
'step' => '1',
                ),
                
'mobile_options'   => true,
                
'responsive'       => true,
                
'hover'            => 'tabs',
            ),
            
'image_spacing'   => array(
                
'label'            => esc_html__'Image Gap Spacing''supreme-modules-for-divi' ),
                
'type'             => 'range',
                
'option_category'  => 'layout',
                
'tab_slug'         => 'advanced',
                
'toggle_slug'      => 'icon_settings',
                
'validate_unit'    => true,
                
'default'          => '25px',
                
'default_unit'     => 'px',
                
'default_on_front' => '',
                
'allow_empty'      => true,
                
'range_settings'   => array(
                    
'min'  => '0',
                    
'max'  => '50',
                    
'step' => '1',
                ),
                
'mobile_options'   => true,
                
'responsive'       => true,
                
'hover'            => 'tabs',
            ),

        );
    }

    public function 
get_transition_fields_css_props() {
        
$fields parent::get_transition_fields_css_props();

        
$fields['image_spacing'] = array(
            
'margin-right' => '%%order_class%%.dsm_pricelist_child .dsm-pricelist-image',
        );

        
$fields['image_max_width'] = array(
            
'max-width' => '%%order_class%%.dsm_pricelist_child .dsm-pricelist-image',
        );

        return 
$fields;
    }

    public function 
render$attrs$content$render_slug ) {
        
$multi_view                  et_pb_multi_view_options$this );
        
$title                       $this->props['title'];
        
$price                       $this->props['price'];
        
$image                       $this->props['image'];
        
$alt                         $this->props['alt'];
        
$image_spacing_hover         $this->get_hover_value'image_spacing' );
        
$image_spacing               $this->props['image_spacing'];
        
$image_spacing_tablet        $this->props['image_spacing_tablet'];
        
$image_spacing_phone         $this->props['image_spacing_phone'];
        
$image_spacing_last_edited   $this->props['image_spacing_last_edited'];
        
$image_max_width_hover       $this->get_hover_value'image_max_width' );
        
$image_max_width             $this->props['image_max_width'];
        
$image_max_width_tablet      $this->props['image_max_width_tablet'];
        
$image_max_width_phone       $this->props['image_max_width_phone'];
        
$image_max_width_last_edited $this->props['image_max_width_last_edited'];

        if ( 
'' !== $image_max_width_tablet || '' !== $image_max_width_phone || '' !== $image_max_width ) {
            
$image_max_width_responsive_active et_pb_get_responsive_status$image_max_width_last_edited );

            
$image_max_width_values = array(
                
'desktop' => $image_max_width,
                
'tablet'  => $image_max_width_responsive_active $image_max_width_tablet '',
                
'phone'   => $image_max_width_responsive_active $image_max_width_phone '',
            );

            
et_pb_responsive_options()->generate_responsive_css$image_max_width_values'%%order_class%%.dsm_pricelist_child .dsm-pricelist-image''max-width'$render_slug );
        }
        if ( 
et_builder_is_hover_enabled'image_max_width'$this->props ) ) {
            
ET_Builder_Element::set_style(
                
$render_slug,
                array(
                    
'selector'    => $this->add_hover_to_order_class'%%order_class%%.dsm_pricelist_child .dsm-pricelist-image' ),
                    
'declaration' => sprintf(
                        
'max-width: %1$s;',
                        
esc_html$image_max_width_hover )
                    ),
                )
            );
        }

        if ( 
'' !== $image_spacing_tablet || '' !== $image_spacing_phone || '' !== $image_spacing ) {
            
$image_spacing_responsive_active et_pb_get_responsive_status$image_spacing_last_edited );

            
$image_spacing_values = array(
                
'desktop' => $image_spacing,
                
'tablet'  => $image_spacing_responsive_active $image_spacing_tablet '',
                
'phone'   => $image_spacing_responsive_active $image_spacing_phone '',
            );

            
et_pb_responsive_options()->generate_responsive_css$image_spacing_values'%%order_class%%.dsm_pricelist_child .dsm-pricelist-image''margin-right'$render_slug );
        }
        if ( 
et_builder_is_hover_enabled'image_spacing'$this->props ) ) {
            
ET_Builder_Element::set_style(
                
$render_slug,
                array(
                    
'selector'    => $this->add_hover_to_order_class'%%order_class%%.dsm_pricelist_child .dsm-pricelist-image' ),
                    
'declaration' => sprintf(
                        
'margin-right: %1$s;',
                        
esc_html$image_spacing_hover )
                    ),
                )
            );
        }

        if ( 
'' !== $title ) {
            
$title $multi_view->render_element(
                array(
                    
'tag'     => 'div',
                    
'content' => '{{title}}',
                    
'attrs'   => array(
                        
'class' => 'dsm-pricelist-title et_pb_module_header',
                    ),
                )
            );
        }

        if ( 
'' !== $price ) {
            
$price $multi_view->render_element(
                array(
                    
'tag'     => 'div',
                    
'content' => '{{price}}',
                    
'attrs'   => array(
                        
'class' => 'dsm-pricelist-price',
                    ),
                )
            );
        }

        if ( 
'' !== $this->content ) {
            
$content $multi_view->render_element(
                array(
                    
'tag'     => 'div',
                    
'content' => '{{content}}',
                    
'attrs'   => array(
                        
'class' => 'dsm-pricelist-description',
                    ),
                )
            );
        }

        
$image = ( '' !== trim$image ) ) ? sprintf(
            
'<img src="%1$s" alt="%2$s" />',
            
esc_url$image ),
            
esc_attr$alt )
            
// esc_attr( " et_pb_animation_{$animation}" )
        
) : '';

        
// Images: Add CSS Filters and Mix Blend Mode rules (if set)
        
$generate_css_image_filters '';
        if ( 
$image && array_key_exists'icon_settings'$this->advanced_fields ) && array_key_exists'css'$this->advanced_fields['icon_settings'] ) ) {
            
$generate_css_image_filters $this->generate_css_filters(
                
$render_slug,
                
'child_',
                
self::$data_utils->array_get$this->advanced_fields['icon_settings']['css'], 'main''%%order_class%%' )
            );
        }

        
$image $image sprintf(
            
'<div class="dsm-pricelist-image%2$s">%1$s</div>',
            
$image,
            
esc_attr$generate_css_image_filters )
        ) : 
'';

        
$video_background          $this->video_background();
        
$parallax_image_background $this->get_parallax_image_background();

        
$this->module_idtrue );

        
// Module classnames.
        
$this->remove_classname'et_pb_module' );
        
// Render module content.
        
return sprintf(
            
'%7$s
            %6$s
            %3$s
            <div class="dsm_pricelist_item_wrapper%5$s">
                <div class="dsm-pricelist-header">
                    %1$s
                    <div class="dsm-pricelist-separator"></div>
                    %2$s
                </div>
                %4$s
                %5$s
            </div>'
,
            
$title,
            
$price,
            
$image,
            
'' !== $this->content $content '',
            
$this->get_text_orientation_classname(),
            
$video_background,
            
$parallax_image_background
        
);
    }
}

new 
DSM_PriceList_Child();