1
<?php
2
defined('ABSPATH') || exit;
3
require_once __DIR__ . '/elementor-widget-base.php';
4
if (!class_exists('FRESH_OO_Price_Widget') && class_exists('FRESH_OO_Widget_Base')) {
5
class FRESH_OO_Price_Widget extends FRESH_OO_Widget_Base {
6
public function get_name(): string { return 'fresh-oo-price'; }
7
public function get_title(): string { return 'onOffice Preis'; }
8
public function get_icon(): string { return 'eicon-price-table'; }
9
protected function register_controls(): void {
10
$this->start_controls_section('content',['label'=>'Preis']);
11
$this->add_control('mode',['label'=>'Preis wählen','type'=>\Elementor\Controls_Manager::SELECT,'default'=>'auto','options'=>['auto'=>'Intelligent automatisch','kaufpreis'=>'Kaufpreis','kaltmiete'=>'Kaltmiete','warmmiete'=>'Warmmiete','custom'=>'Eigenes Feld']]);
12
$this->add_control('custom_field',['label'=>'Eigenes Preisfeld','type'=>\Elementor\Controls_Manager::SELECT2,'options'=>$this->field_options(true),'condition'=>['mode'=>'custom'],'label_block'=>true]);
13
$this->add_control('price_on_request',['label'=>'Fallback bei 0 / leer','type'=>\Elementor\Controls_Manager::TEXT,'default'=>'Preis auf Anfrage']);
14
$this->add_control('show_type',['label'=>'Preisart anzeigen','type'=>\Elementor\Controls_Manager::SWITCHER,'default'=>'yes']);
15
$this->add_control('show_period',['label'=>'/ Monat bei Miete','type'=>\Elementor\Controls_Manager::SWITCHER,'default'=>'yes']);
16
$this->add_control('show_secondary',['label'=>'Passenden Zusatzpreis anzeigen','type'=>\Elementor\Controls_Manager::SWITCHER,'default'=>'yes']);
17
$this->add_control('show_commission',['label'=>'Provision anzeigen','type'=>\Elementor\Controls_Manager::SWITCHER,'default'=>'yes']);
18
$this->end_controls_section();
19
$this->start_controls_section('style_box',['label'=>'Box','tab'=>\Elementor\Controls_Manager::TAB_STYLE]);$this->add_common_card_style_controls('box','{{WRAPPER}} .fresh-oo-price');$this->add_responsive_control('align',['label'=>'Ausrichtung','type'=>\Elementor\Controls_Manager::CHOOSE,'options'=>['flex-start'=>['title'=>'Links','icon'=>'eicon-text-align-left'],'center'=>['title'=>'Mitte','icon'=>'eicon-text-align-center'],'flex-end'=>['title'=>'Rechts','icon'=>'eicon-text-align-right']],'default'=>'flex-start','selectors'=>['{{WRAPPER}} .fresh-oo-price'=>'align-items:{{VALUE}};']]);$this->end_controls_section();
20
$this->start_controls_section('style_price',['label'=>'Typografie','tab'=>\Elementor\Controls_Manager::TAB_STYLE]);
21
$this->add_control('type_color',['label'=>'Preisart-Farbe','type'=>\Elementor\Controls_Manager::COLOR,'selectors'=>['{{WRAPPER}} .fresh-oo-price__type'=>'color:{{VALUE}};']]);$this->add_group_control(\Elementor\Group_Control_Typography::get_type(),['name'=>'type_typo','selector'=>'{{WRAPPER}} .fresh-oo-price__type']);
22
$this->add_control('price_color',['label'=>'Preis-Farbe','type'=>\Elementor\Controls_Manager::COLOR,'selectors'=>['{{WRAPPER}} .fresh-oo-price__value'=>'color:{{VALUE}};']]);$this->add_group_control(\Elementor\Group_Control_Typography::get_type(),['name'=>'price_typo','selector'=>'{{WRAPPER}} .fresh-oo-price__value']);
23
$this->add_control('meta_color',['label'=>'Zusatztext-Farbe','type'=>\Elementor\Controls_Manager::COLOR,'selectors'=>['{{WRAPPER}} .fresh-oo-price__meta'=>'color:{{VALUE}};']]);$this->add_group_control(\Elementor\Group_Control_Typography::get_type(),['name'=>'meta_typo','selector'=>'{{WRAPPER}} .fresh-oo-price__meta']);
24
$this->end_controls_section();
25
}
26
private function chosen(array $s): array {
27
$mode=$s['mode']??'auto';
28
if($mode==='auto')$key=$this->is_rental()?'oo_kaltmiete':'oo_kaufpreis';elseif($mode==='custom')$key=(string)($s['custom_field']??'');else$key='oo_'.$mode;
29
$labels=['oo_kaufpreis'=>'Kaufpreis','oo_kaltmiete'=>'Kaltmiete','oo_warmmiete'=>'Warmmiete'];return[$key,$labels[$key]??'Preis'];
30
}
31
protected function render(): void {
32
$s=$this->get_settings_for_display();[$key,$label]=$this->chosen($s);$v=$this->meta($key);$numeric=is_numeric($v)?(float)$v:0.0;$isRent=in_array($key,['oo_kaltmiete','oo_warmmiete'],true);$hasPrice=$numeric>0;
33
$price=$hasPrice?$this->format_number($numeric).' €':trim((string)($s['price_on_request']??'Preis auf Anfrage'));if($price==='')return;
34
$secondary='';if(($s['show_secondary']??'yes')==='yes'){if($key==='oo_kaltmiete'&&$this->meaningful_value($this->meta('oo_warmmiete'),'oo_warmmiete',true))$secondary='Warmmiete '.$this->format_number($this->meta('oo_warmmiete')).' €';elseif($key==='oo_kaufpreis'&&$this->meaningful_value($this->meta('oo_hausgeld'),'oo_hausgeld',true))$secondary='Hausgeld '.$this->format_number($this->meta('oo_hausgeld')).' € / Monat';}
35
$commission=trim((string)$this->meta('oo_aussen_courtage'));echo '<div class="fresh-oo-price"';if($hasPrice)echo ' itemprop="offers" itemscope itemtype="https://schema.org/Offer"';echo '>';if(($s['show_type']??'yes')==='yes')echo '<div class="fresh-oo-price__type">'.esc_html($label).'</div>';echo '<div class="fresh-oo-price__value">';if($hasPrice)echo '<span itemprop="price" content="'.esc_attr((string)$numeric).'">'.esc_html($price).'</span>';else echo '<span>'.esc_html($price).'</span>';if($isRent&&($s['show_period']??'yes')==='yes'&&$hasPrice)echo '<small> / Monat</small>';echo '</div>';if($hasPrice)echo '<meta itemprop="priceCurrency" content="EUR">';if($secondary!=='')echo '<div class="fresh-oo-price__meta">'.esc_html($secondary).'</div>';if(($s['show_commission']??'yes')==='yes'&&$commission!=='')echo '<div class="fresh-oo-price__meta">Provision: '.esc_html($commission).'</div>';echo '</div>';
36
}
37
}
38
}
39