HEX
Server: nginx/1.24.0
System: Linux DGT-WORDPRESS-VM-SERVER 6.14.0-1017-azure #17~24.04.1-Ubuntu SMP Mon Dec 1 20:10:50 UTC 2025 x86_64
User: ubuntu (1000)
PHP: 8.4.12
Disabled: NONE
Upload Files
File: /mnt/data/dreamssalon-wp/wp-content/plugins/dreamsalon-widgets/widgets/class-about-three.php
<?php
/**
 * DS About Three Widget (Team Section)
 *
 * @since 1.0.0
 */

namespace dreamsalonelementor\Widgets;

use Elementor\Widget_Base;
use Elementor\Controls_Manager;
use Elementor\Repeater;

if (!defined('ABSPATH')) {
    exit;
}

class DSAboutThree extends Widget_Base
{
    public function get_name() {
        return 'dreamsalon-ds-about-three';
    }

    public function get_title() {
        return __('DS About Three', 'dreamsalon_elementor');
    }

    public function get_icon() {
        return 'eicon-person';
    }

    public function get_categories() {
        return ['dreamsalon'];
    }

    public function get_script_depends() {
        return ['wowjs'];
    }

    protected function _register_controls() {

        /**
         * Section Header Controls
         */
        $this->start_controls_section(
            'section_header',
            [
                'label' => __('Section Header', 'dreamsalon_elementor'),
            ]
        );

        $this->add_control(
            'section_title',
            [
                'label' => __('Section Title', 'dreamsalon_elementor'),
                'type' => Controls_Manager::TEXT,
                'default' => __('Meet Our Experts', 'dreamsalon_elementor'),
            ]
        );

        // ✅ New control for image
        $this->add_control(
            'section_image',
            [
                'label' => __('Section Image', 'dreamsalon_elementor'),
                'type' => Controls_Manager::MEDIA,
                'default' => [
                    'url' => \Elementor\Utils::get_placeholder_image_src(),
                ],
            ]
        );

        $this->add_control(
            'section_description',
            [
                'label' => __('Section Description', 'dreamsalon_elementor'),
                'type' => Controls_Manager::TEXTAREA,
                'default' => __('Our experienced stylists and beauty experts are here to bring out your best look.', 'dreamsalon_elementor'),
            ]
        );

        $this->end_controls_section();

        /**
         * Team Member Controls
         */
        $this->start_controls_section(
            'team_section',
            [
                'label' => __('Team Members', 'dreamsalon_elementor'),
            ]
        );

        $repeater = new Repeater();

        $repeater->add_control(
            'member_image',
            [
                'label' => __('Team Image', 'dreamsalon_elementor'),
                'type' => Controls_Manager::MEDIA,
                'default' => [
                    'url' => \Elementor\Utils::get_placeholder_image_src(),
                ],
            ]
        );

        $repeater->add_control(
            'member_name',
            [
                'label' => __('Name', 'dreamsalon_elementor'),
                'type' => Controls_Manager::TEXT,
                'default' => __('John Doe', 'dreamsalon_elementor'),
            ]
        );

        $repeater->add_control(
            'member_position',
            [
                'label' => __('Position', 'dreamsalon_elementor'),
                'type' => Controls_Manager::TEXT,
                'default' => __('Hair Stylist', 'dreamsalon_elementor'),
            ]
        );

        $repeater->add_control(
            'member_link',
            [
                'label' => __('Profile Link', 'dreamsalon_elementor'),
                'type' => Controls_Manager::URL,
                'placeholder' => __('https://your-link.com', 'dreamsalon_elementor'),
            ]
        );

        $this->add_control(
            'team_members',
            [
                'label' => __('Team Members', 'dreamsalon_elementor'),
                'type' => Controls_Manager::REPEATER,
                'fields' => $repeater->get_controls(),
                'title_field' => '{{{ member_name }}}',
            ]
        );

        $this->end_controls_section();
    }

    protected function render() {
        $settings = $this->get_settings_for_display();
        ?>
        <!-- Start Team Section -->
        <section class="team-section section">
            <div class="container">

                <!-- Section Header -->
                <div class="row justify-content-center">
                    <div class="col-xxl-6 col-xl-7 col-lg-9">
                        <div class="section-header text-center wow fadeInUp" data-wow-delay="0.2s">
                            <h2 class="section-title"><?php echo esc_html($settings['section_title']); ?></h2>

                            <?php if (!empty($settings['section_image']['url'])) : ?>
                                <img src="<?php echo esc_url($settings['section_image']['url']); ?>" alt="section-image" class="img-fluid my-3">
                            <?php endif; ?>

                            <p><?php echo esc_html($settings['section_description']); ?></p>
                        </div>
                    </div>
                </div>

                <!-- Team Members -->
                <div class="row row-gap-4 mt-4">
                    <?php
                    if (!empty($settings['team_members'])) :
                        $delay = 0.2;
                        foreach ($settings['team_members'] as $member) :
                            $img_url = !empty($member['member_image']['url']) ? $member['member_image']['url'] : \Elementor\Utils::get_placeholder_image_src();
                            $name = $member['member_name'];
                            $position = $member['member_position'];
                            $link = !empty($member['member_link']['url']) ? $member['member_link']['url'] : '#';
                            ?>
                            <div class="col-lg-3 col-md-6 col-sm-6">
                                <div class="team-item mb-0 wow fadeInUp" data-wow-delay="<?php echo esc_attr($delay); ?>s">
                                    <div class="position-relative overflow-hidden mb-3 team-item-img">
                                        <img src="<?php echo esc_url($img_url); ?>" alt="<?php echo esc_attr($name); ?>" class="img-fluid">
                                    </div>
                                    <div>
                                        <h3 class="title mb-1">
                                            <a href="<?php echo esc_url($link); ?>"><?php echo esc_html($name); ?></a>
                                        </h3>
                                        <p class="mb-0"><?php echo esc_html($position); ?></p>
                                    </div>
                                </div>
                            </div>
                            <?php
                            $delay += 0.2;
                        endforeach;
                    endif;
                    ?>
                </div>

            </div>
        </section>
        <!-- End Team Section -->
        <?php
    }
}