1
<?php
2
defined('ABSPATH') || exit;
3
require_once __DIR__ . '/elementor-widget-base.php';
4
if (!class_exists('FRESH_OO_Property_Meta_Widget') && class_exists('FRESH_OO_Widget_Base')) {
5
class FRESH_OO_Property_Meta_Widget extends FRESH_OO_Widget_Base {
6
public function get_name(): string { return 'fresh-oo-property-meta'; }
7
public function get_title(): string { return 'onOffice Objekt-Meta'; }
8
public function get_icon(): string { return 'eicon-tags'; }
9
public function get_keywords(): array { return ['onoffice','badges','meta','objektart','vermarktung']; }
10
protected function register_controls(): void {
11
$this->start_controls_section('content',['label'=>'Objekt-Meta']);
12
$this->add_control('show_object_type',['label'=>'Objektart','type'=>\Elementor\Controls_Manager::SWITCHER,'default'=>'yes']);
13
$this->add_control('show_subtype',['label'=>'Objekttyp','type'=>\Elementor\Controls_Manager::SWITCHER,'default'=>'yes']);
14
$this->add_control('show_marketing',['label'=>'Vermarktungsart','type'=>\Elementor\Controls_Manager::SWITCHER,'default'=>'yes']);
15
$this->add_control('show_usage',['label'=>'Nutzungsart','type'=>\Elementor\Controls_Manager::SWITCHER,'default'=>'']);
16
$this->add_control('show_number',['label'=>'Objektnummer','type'=>\Elementor\Controls_Manager::SWITCHER,'default'=>'yes']);
17
$this->add_control('number_prefix',['label'=>'Objektnummer-Präfix','type'=>\Elementor\Controls_Manager::TEXT,'default'=>'Objekt','condition'=>['show_number'=>'yes']]);
18
$this->add_control('show_year',['label'=>'Baujahr','type'=>\Elementor\Controls_Manager::SWITCHER,'default'=>'']);
19
$this->add_control('show_floor',['label'=>'Etage','type'=>\Elementor\Controls_Manager::SWITCHER,'default'=>'']);
20
$this->add_control('show_condition',['label'=>'Zustand','type'=>\Elementor\Controls_Manager::SWITCHER,'default'=>'']);
21
$this->add_control('show_available',['label'=>'Verfügbar ab','type'=>\Elementor\Controls_Manager::SWITCHER,'default'=>'']);
22
$this->add_control('show_icons',['label'=>'Icons anzeigen','type'=>\Elementor\Controls_Manager::SWITCHER,'default'=>'']);
23
$this->add_control('layout',['label'=>'Darstellung','type'=>\Elementor\Controls_Manager::SELECT,'default'=>'pills','options'=>['pills'=>'Badges / Pills','inline'=>'Inline mit Trennern','stacked'=>'Vertikale Liste'],'prefix_class'=>'fresh-oo-property-meta--']);
24
$this->add_control('separator',['label'=>'Trenner','type'=>\Elementor\Controls_Manager::TEXT,'default'=>'·','condition'=>['layout'=>'inline']]);
25
$this->end_controls_section();
26
$this->start_controls_section('style',['label'=>'Styling','tab'=>\Elementor\Controls_Manager::TAB_STYLE]);
27
$this->add_control('color',['label'=>'Textfarbe','type'=>\Elementor\Controls_Manager::COLOR,'selectors'=>['{{WRAPPER}} .fresh-oo-property-meta'=>'color:{{VALUE}};']]);
28
$this->add_control('icon_color',['label'=>'Icon-Farbe','type'=>\Elementor\Controls_Manager::COLOR,'selectors'=>['{{WRAPPER}} .fresh-oo-property-meta__icon'=>'color:{{VALUE}};']]);
29
$this->add_responsive_control('icon_size',['label'=>'Icon-Größe','type'=>\Elementor\Controls_Manager::SLIDER,'range'=>['px'=>['min'=>8,'max'=>48]],'selectors'=>['{{WRAPPER}} .fresh-oo-property-meta__icon svg'=>'width:{{SIZE}}{{UNIT}};height:{{SIZE}}{{UNIT}};']]);
30
$this->add_control('bg',['label'=>'Badge-Hintergrund','type'=>\Elementor\Controls_Manager::COLOR,'selectors'=>['{{WRAPPER}} .fresh-oo-property-meta__item'=>'background:{{VALUE}};']]);
31
$this->add_group_control(\Elementor\Group_Control_Border::get_type(),['name'=>'border','selector'=>'{{WRAPPER}} .fresh-oo-property-meta__item']);
32
$this->add_responsive_control('radius',['label'=>'Radius','type'=>\Elementor\Controls_Manager::DIMENSIONS,'selectors'=>['{{WRAPPER}} .fresh-oo-property-meta__item'=>'border-radius:{{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};']]);
33
$this->add_responsive_control('padding',['label'=>'Innenabstand','type'=>\Elementor\Controls_Manager::DIMENSIONS,'selectors'=>['{{WRAPPER}} .fresh-oo-property-meta__item'=>'padding:{{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};']]);
34
$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-property-meta'=>'justify-content:{{VALUE}};']]);
35
$this->add_responsive_control('gap',['label'=>'Abstand','type'=>\Elementor\Controls_Manager::SLIDER,'range'=>['px'=>['min'=>0,'max'=>50]],'selectors'=>['{{WRAPPER}} .fresh-oo-property-meta'=>'gap:{{SIZE}}{{UNIT}};']]);
36
$this->add_group_control(\Elementor\Group_Control_Typography::get_type(),['name'=>'typo','selector'=>'{{WRAPPER}} .fresh-oo-property-meta']);
37
$this->end_controls_section();
38
}
39
protected function render(): void {
40
$s=$this->get_settings_for_display();$items=[];
41
$map=[
42
['show_object_type','oo_objektart','fas fa-home',''],
43
['show_subtype','oo_objekttyp','fas fa-building',''],
44
['show_marketing','oo_vermarktungsart','fas fa-tag',''],
45
['show_usage','oo_nutzungsart','fas fa-key',''],
46
['show_number','oo_objektnr_extern','fas fa-hashtag','number'],
47
['show_year','oo_baujahr','fas fa-calendar-alt','Baujahr'],
48
['show_floor','oo_etage','fas fa-layer-group','Etage'],
49
['show_condition','oo_zustand','fas fa-check-circle',''],
50
['show_available','oo_verfuegbar_ab','far fa-calendar-check','Verfügbar ab'],
51
];
52
foreach($map as [$toggle,$key,$icon,$prefix]){
53
if(($s[$toggle]??'')!=='yes')continue;
54
$v=$this->meta($key);if(!$this->meaningful_value($v,$key))continue;
55
if($key==='oo_objektnr_extern') $label=trim((string)($s['number_prefix']??'Objekt')).' '.trim((string)$v);
56
elseif($key==='oo_etage' && is_numeric($v)) $label='Etage '.$this->format_number($v,0,false);
57
else { $formatted=$this->pretty_value($v,$key); $label=$prefix!=='' ? trim($prefix.' '.$formatted) : $formatted; }
58
$items[]=[$label,$icon,[]];
59
}
60
if(!$items){$this->editor_empty('Keine Objekt-Metadaten vorhanden.');return;}
61
$inline=($s['layout']??'pills')==='inline';echo '<div class="fresh-oo-property-meta">';foreach($items as $i=>$row){[$item,$icon,$customIcon]=array_pad($row,3,[]);if($inline&&$i>0)echo '<span class="fresh-oo-property-meta__separator" aria-hidden="true">'.esc_html((string)($s['separator']??'·')).'</span>';echo '<span class="fresh-oo-property-meta__item">';if(($s['show_icons']??'')==='yes'){if(!empty($customIcon['value']))$this->render_selected_icon($customIcon,'fresh-oo-property-meta__icon');else $this->render_selected_icon(['value'=>$icon,'library'=>'fa-solid'],'fresh-oo-property-meta__icon');}echo '<span>'.esc_html($item).'</span></span>';}echo '</div>';
62
}
63
}
64
}
65