/var/www/hkosl.com/aga/wp-content/plugins/so-widgets-bundle/base/inc/fields/date-range.class.php


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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?php

/**
 * Class SiteOrigin_Widget_Field_Date_Range
 */
class SiteOrigin_Widget_Field_Date_Range extends SiteOrigin_Widget_Field_Base {

    
/**
     * Either 'relative' or 'specific'. Whether to allow relative or specific date selection.
     *
     * @access protected
     * @var array
     */
    
protected $date_type;

    protected function 
render_field$value$instance ) {

        if ( 
$this->date_type == 'specific' ) {
            
$this->render_specific_date_selector();
        } else {
            
$this->render_relative_date_selector$value );
        }
        
?><input type="hidden"
                 class="siteorigin-widget-input"
                 value="<?php echo esc_attr$value ?>"
                 name="<?php echo esc_attr$this->element_name ?>" /><?php
    
}

    private function 
render_specific_date_selector() {
        
?><div class="sowb-specific-date-after"><span><?php
        _ex
'From''From this date''so-widgets-bundle' );
        
?></span><input type="text" class="datepicker after-picker"/></div><?php
        ?>
<div class="sowb-specific-date-before"><span><?php
        _e
'to''so-widgets-bundle' );
        
?></span><input type="text" class="datepicker before-picker"/></div><?php
    
}

    private function 
render_relative_date_selector$value ) {
        
$value json_decode(
            
$value,
            
true
        
);

        
$from = ! empty( $value['from'] ) ? $value['from'] : array();
        
$this->render_relative_date_selector_part'from'__'From''so-widgets-bundle' ), $from );

        
$to = ! empty( $value['to'] ) ? $value['to'] : array();
        
$this->render_relative_date_selector_part'to'__'to''so-widgets-bundle' ), $to );
    }

    private function 
render_relative_date_selector_part$name$label$value ) {
        
$units $this->get_units();

        
$val = ! empty( $value['value'] ) ? $value['value'] : 0;
        
$unit = ! empty( $value['unit'] ) ? $value['unit'] : 'days';

        
?><div class="sowb-relative-date" data-name="<?php echo esc_attr$name ?>"><span><?php
            
echo esc_html$label );
            
?></span><input type="number" min="0" step="1" class="sowb-relative-date-value" value="<?php echo esc_attr$val ?>"/>
        <select class="sowb-relative-date-unit">
            <?php foreach( $units as $value => $label) : ?>
                <option value="<?php echo esc_attr$value ?><?php selected$value$unit ?>><?php echo $label ?></option>
            <?php endforeach; ?>
        </select><span><?php _e'ago''so-widgets-bundle' ); ?></span></div><?php
    
}

    private function 
get_units() {
        return array(
            
'days' => __'days''so-widgets-bundle' ),
            
'weeks' => __'weeks''so-widgets-bundle' ),
            
'months' => __'months''so-widgets-bundle' ),
            
'years' => __'years''so-widgets-bundle' ),
        );
    }

    public function 
enqueue_scripts() {
        
wp_enqueue_style(
            
'so-date-range-field',
            
plugin_dir_url(__FILE__) . 'css/date-range-field.css',
            array( 
'sowb-pikaday' ),
            
SOW_BUNDLE_VERSION
        
);
        
wp_enqueue_script(
            
'so-date-range-field',
            
plugin_dir_url(__FILE__) . 'js/date-range-field' SOW_BUNDLE_JS_SUFFIX '.js',
            array( 
'jquery''sowb-pikaday' ),
            
SOW_BUNDLE_VERSION
        
);
    }

    protected function 
sanitize_field_input$value$instance ) {
        if ( 
$this->date_type == 'specific' ) {
            if ( ! empty( 
$value ) ) {
                
$value json_decode(
                    
$value,
                    
true
                
);
                if ( ! empty( 
$value['after'] ) ) {
                    
$value_after    = new DateTime$value['after'] );
                    
$value['after'] = $value_after->format'Y-m-d' );
                }
                if ( ! empty( 
$value['before'] ) ) {
                    
$value_before    = new DateTime$value['before'] );
                    
$value['before'] = $value_before->format'Y-m-d' );
                }
            } else {
                
$value = array( 'after' => '''before' => '' );
            }
        } else if ( 
$this->date_type == 'relative' ) {
            if ( ! empty( 
$value ) ) {
                
$value json_decode(
                    
$value,
                    
true
                
);
                
$unit_keys array_keys$this->get_units() );
                foreach( array( 
'from''to' ) as $key ) {
                    if ( empty( 
$value[$key] ) ) {
                        
$value[$key] = array();
                    }
                    
$item $value[$key];
                    
$val = empty( $item['value'] ) ? intval$item['value'] );
                    
$unit = ( ! empty( $item['unit'] ) && in_array$item['unit'], $unit_keys ) ) ? $item['unit'] : $unit_keys[0];
                    
$value[$key] = array( 'value' => $val'unit' => $unit );
                }
            } else {
                
$value = array( 'from' => array(), 'to' => array() );
            }
        }
        return 
json_encode$value );
    }
}