_comment.php
4 months ago
_db.php
4 months ago
_hidden.php
4 months ago
_label.php
4 months ago
_row.php
4 months ago
attachment.php
4 months ago
checkbox.php
4 months ago
cleditor.php
4 months ago
codemirror.php
4 months ago
color.php
4 months ago
currency.php
4 months ago
date.php
4 months ago
datetime.php
4 months ago
email.php
4 months ago
link.php
4 months ago
number.php
4 months ago
oembed.php
4 months ago
password.php
4 months ago
phone.php
4 months ago
radio.php
4 months ago
select.php
4 months ago
slider.php
4 months ago
slug.php
4 months ago
text.php
4 months ago
textarea.php
4 months ago
time.php
4 months ago
tinymce.php
4 months ago
website.php
4 months ago
datetime.php
212 lines
| 1 | <?php |
| 2 | |
| 3 | // Don't load directly. |
| 4 | if ( ! defined( 'ABSPATH' ) ) { |
| 5 | die( '-1' ); |
| 6 | } |
| 7 | |
| 8 | // phpcs:ignoreFile WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound |
| 9 | |
| 10 | /** |
| 11 | * @var string $form_field_type |
| 12 | * @var array $options |
| 13 | * @var $value |
| 14 | */ |
| 15 | |
| 16 | $use_time = ( 'time' === $form_field_type || 'datetime' === $form_field_type ); |
| 17 | $use_date = ( 'date' === $form_field_type || 'datetime' === $form_field_type ); |
| 18 | |
| 19 | wp_enqueue_script( 'jquery-ui-datepicker' ); |
| 20 | pods_form_enqueue_style( 'pods-styles' ); |
| 21 | |
| 22 | if ( $use_time ) { |
| 23 | wp_enqueue_script( 'jquery-ui-timepicker' ); |
| 24 | wp_enqueue_style( 'jquery-ui-timepicker' ); |
| 25 | } |
| 26 | |
| 27 | PodsForm::field_method( $form_field_type, 'enqueue_jquery_ui_i18n' ); |
| 28 | |
| 29 | $attributes = array(); |
| 30 | |
| 31 | $html5 = false; |
| 32 | $type = 'text'; |
| 33 | |
| 34 | if ( pods_v( $form_field_type . '_html5', $options, false ) ) { |
| 35 | $html5 = true; |
| 36 | $type = $form_field_type; |
| 37 | } |
| 38 | |
| 39 | $attributes['type'] = $type; |
| 40 | $attributes['tabindex'] = 2; |
| 41 | |
| 42 | $format = PodsForm::field_method( $form_field_type, 'format_' . $form_field_type, $options ); |
| 43 | |
| 44 | $method = $form_field_type . 'picker'; |
| 45 | |
| 46 | $mysql_date_format = 'Y-m-d'; |
| 47 | $mysql_time_format = 'H:i:s'; |
| 48 | |
| 49 | $args = array( |
| 50 | 'altField' => '', // Done with JS. |
| 51 | 'altFieldTimeOnly' => false, |
| 52 | ); |
| 53 | |
| 54 | if ( $use_date ) { |
| 55 | $args['dateFormat'] = PodsForm::field_method( $form_field_type, 'format_date', $options, true ); |
| 56 | $args['altFormat'] = PodsForm::field_method( $form_field_type, 'convert_format', $mysql_date_format, array( 'type' => 'date' ) ); |
| 57 | $args['changeMonth'] = true; |
| 58 | $args['changeYear'] = true; |
| 59 | $args['firstDay'] = (int) get_option( 'start_of_week', 0 ); |
| 60 | |
| 61 | $year_range = pods_v( $form_field_type . '_year_range_custom', $options, '' ); |
| 62 | if ( $year_range ) { |
| 63 | $args['yearRange'] = $year_range; |
| 64 | } |
| 65 | } |
| 66 | if ( $use_time ) { |
| 67 | $args['timeFormat'] = PodsForm::field_method( $form_field_type, 'format_time', $options, true ); |
| 68 | $args['altTimeFormat'] = PodsForm::field_method( $form_field_type, 'convert_format', $mysql_time_format, array( 'type' => 'time' ) ); |
| 69 | $args['ampm'] = ( false !== stripos( $args['timeFormat'], 'tt' ) ); |
| 70 | $args['parse'] = 'loose'; |
| 71 | } |
| 72 | |
| 73 | $mysql_format = ''; |
| 74 | |
| 75 | switch ( $form_field_type ) { |
| 76 | case 'datetime': |
| 77 | $mysql_format = $mysql_date_format . ' ' . $mysql_time_format; |
| 78 | |
| 79 | $format_value = pods_v( $form_field_type . '_format', $options, 'mdy', true ); |
| 80 | |
| 81 | if ( 'format' === pods_v( $form_field_type . '_type', $options, 'format', true ) && 'c' === $format_value ) { |
| 82 | $args['ampm'] = false; |
| 83 | $args['separator'] = 'T'; |
| 84 | $args['timeFormat'] = 'HH:mm:ssz'; |
| 85 | |
| 86 | // $args[ 'showTimezone' ] = true; |
| 87 | $timezone = (int) get_option( 'gmt_offset' ); |
| 88 | $timezone *= 60; |
| 89 | |
| 90 | if ( 0 <= $timezone ) { |
| 91 | $timezone = '+' . (string) $timezone; |
| 92 | } |
| 93 | |
| 94 | $args['timezone'] = (string) $timezone; |
| 95 | } |
| 96 | |
| 97 | break; |
| 98 | case 'date': |
| 99 | $mysql_format = $mysql_date_format; |
| 100 | break; |
| 101 | case 'time': |
| 102 | $mysql_format = $mysql_time_format; |
| 103 | break; |
| 104 | } |
| 105 | |
| 106 | $date = PodsForm::field_method( $form_field_type, 'createFromFormat', $format, (string) $value ); |
| 107 | $date_default = PodsForm::field_method( $form_field_type, 'createFromFormat', $mysql_format, (string) $value ); |
| 108 | |
| 109 | $formatted_value = PodsForm::field_method( $form_field_type, 'format_value_display', $value, $options, true ); |
| 110 | $mysql_value = $value; |
| 111 | |
| 112 | if ( |
| 113 | pods_v( $form_field_type . '_allow_empty', $options, true ) |
| 114 | && PodsForm::field_method( $form_field_type, 'is_empty', $value ) |
| 115 | ) { |
| 116 | $formatted_value = ''; |
| 117 | $value = ''; |
| 118 | } else { |
| 119 | |
| 120 | if ( false !== $date ) { |
| 121 | $mysql_value = $date->format( $mysql_format ); |
| 122 | } elseif ( false !== $date_default ) { |
| 123 | $mysql_value = $date_default->format( $mysql_format ); |
| 124 | } elseif ( ! empty( $value ) ) { |
| 125 | $mysql_value = date_i18n( $mysql_format, strtotime( (string) $value ) ); |
| 126 | } else { |
| 127 | $mysql_value = date_i18n( $mysql_format ); |
| 128 | } |
| 129 | |
| 130 | if ( $html5 ) { |
| 131 | /** |
| 132 | * HTML5 uses mysql date format separated with a T. |
| 133 | * @link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/datetime-local |
| 134 | */ |
| 135 | $value = str_replace( ' ', 'T', $mysql_value ); |
| 136 | } else { |
| 137 | $value = $formatted_value; |
| 138 | } |
| 139 | } |
| 140 | |
| 141 | $args = apply_filters( 'pods_form_ui_field_' . $form_field_type . '_args', $args, $type, $options, $attributes, $name, $form_field_type ); |
| 142 | |
| 143 | $attributes['value'] = $value; |
| 144 | |
| 145 | if ( $html5 && 'datetime' === $type ) { |
| 146 | // Fix deprecated `datetime` input type. |
| 147 | $type = 'datetime-local'; |
| 148 | $attributes['type'] = 'datetime-local'; |
| 149 | } |
| 150 | |
| 151 | $attributes = PodsForm::merge_attributes( $attributes, $name, $form_field_type, $options ); |
| 152 | ?> |
| 153 | <input<?php PodsForm::attributes( $attributes, $name, $form_field_type, $options ); ?> /> |
| 154 | |
| 155 | <script> |
| 156 | jQuery( function ( $ ) { |
| 157 | var $container = $( '<div>' ).appendTo( 'body' ).addClass( 'pods-compat-container' ), |
| 158 | $element = $( 'input#<?php echo esc_js( $attributes['id'] ); ?>' ), |
| 159 | $alt = null, |
| 160 | args = <?php echo wp_json_encode( $args ); ?>; |
| 161 | |
| 162 | <?php |
| 163 | if ( 'text' !== $type ) { |
| 164 | ?> |
| 165 | // Test whether or not the browser supports date inputs |
| 166 | function podsCheckHtml5 () { |
| 167 | var input = document.createElement('input'); |
| 168 | input.setAttribute( 'type', '<?php echo esc_js( $type ); ?>' ); |
| 169 | |
| 170 | var notADateValue = 'not-a-date'; |
| 171 | input.setAttribute( 'value', notADateValue ); |
| 172 | |
| 173 | return ( input.value !== notADateValue ); |
| 174 | } |
| 175 | |
| 176 | if ( ! podsCheckHtml5() ) { |
| 177 | $element.val( '<?php echo esc_js( $formatted_value ); ?>' ); |
| 178 | jQueryField(); |
| 179 | } |
| 180 | <?php |
| 181 | } else { |
| 182 | ?> |
| 183 | jQueryField(); |
| 184 | <?php |
| 185 | } //end if |
| 186 | ?> |
| 187 | function jQueryField() { |
| 188 | |
| 189 | // Create alt field. |
| 190 | $alt = $element.clone(); |
| 191 | $alt.attr( 'type', 'hidden' ); |
| 192 | $alt.val( '<?php echo esc_attr( $mysql_value ) ?>' ); |
| 193 | $element.after( $alt ); |
| 194 | $element.attr( 'name', $element.attr( 'name' ) + '__ui' ); |
| 195 | $element.attr( 'id', $element.attr( 'id' ) + '__ui' ); |
| 196 | |
| 197 | // Add alt field option. |
| 198 | args.altField = 'input#' + $alt.attr( 'id' ); |
| 199 | // Fix manual user input changes. |
| 200 | args.onClose = function() { |
| 201 | $element.<?php echo esc_js( $method ); ?>( 'setDate', $element.val() ); |
| 202 | }; |
| 203 | // Wrapper. |
| 204 | args.beforeShow = function( textbox, instance ) { |
| 205 | $( '#ui-datepicker-div' ).appendTo( $container ); |
| 206 | }; |
| 207 | |
| 208 | $element.<?php echo esc_js( $method ); ?>( args ); |
| 209 | } |
| 210 | } ); |
| 211 | </script> |
| 212 |