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'] ) ? 0 : 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 ); } }
|