1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
<?php
/** * Class SiteOrigin_Widget_Field_Widget */ class SiteOrigin_Widget_Field_Widget extends SiteOrigin_Widget_Field_Container_Base { /** * The class name of the widget to be included. * * @access protected * @var string */ protected $class; /** * A filter for the widget's form fields. In some cases we may want to filter some fields out of a sub-widget form. * * @access protected * @var callable */ protected $form_filter;
public function __construct( $base_name, $element_id, $element_name, $field_options, SiteOrigin_Widget $for_widget, $parent_container = array() ) { parent::__construct( $base_name, $element_id, $element_name, $field_options, $for_widget, $parent_container );
if( isset( $this->class ) ) { if( class_exists( $this->class ) ) { /* @var $sub_widget SiteOrigin_Widget */ $sub_widget = new $this->class; if( is_a( $sub_widget, 'SiteOrigin_Widget' ) ) { if ( ! empty( $this->form_filter ) && is_callable( $this->form_filter ) ) { $this->fields = call_user_func( $this->form_filter, $sub_widget->form_options( $this->for_widget ) ); } else { $this->fields = $sub_widget->form_options( $this->for_widget ); } } } } }
protected function render_field( $value, $instance ) { echo '<div class="siteorigin-widget-widget">'; if ( $this->collapsible ) { ?><div class="siteorigin-widget-section <?php if( $this->state == 'closed' ) echo 'siteorigin-widget-section-hide'; ?>"><?php }
if( ! class_exists( $this->class ) ) { printf( __( '%s does not exist', 'so-widgets-bundle' ), $this->class ); if ( $this->collapsible ) { echo '</div>'; } return; }
/* @var $sub_widget SiteOrigin_Widget */ $sub_widget = new $this->class; if( ! is_a( $sub_widget, 'SiteOrigin_Widget' ) ) { printf( __( '%s is not a SiteOrigin Widget', 'so-widgets-bundle' ), $this->class ); if ( $this->collapsible ) { echo '</div>'; } return; } $this->create_and_render_sub_fields( $value, array( 'name' => $this->base_name, 'type' => 'widget' ) ); if ( $this->collapsible ) { ?></div><?php } echo '</div>'; }
}
|