WordPress.org

Plugin Directory

Changeset 1762403


Ignore:
Timestamp:
11/10/17 00:50:05 (13 days ago)
Author:
katzwebdesign
Message:

Version 2.0

Location:
gravity-forms-business-hours
Files:
4 added
8 edited
4 copied

Legend:

Unmodified
Added
Removed
  • gravity-forms-business-hours/tags/2.0

    • Property svn:ignore
      •  

        old new  
        22.gitignore 
        33node_modules 
         4.idea 
  • gravity-forms-business-hours/tags/2.0/Gruntfile.js

    r1048620 r1762403  
    8686 
    8787 
    88     grunt.registerTask( 'default', ['uglify','exec:transifex','potomo','watch'] ); 
     88    grunt.registerTask( 'default', ['uglify','exec:transifex','potomo','wp_readme_to_markdown','watch'] ); 
    8989 
    9090}; 
  • gravity-forms-business-hours/tags/2.0/assets/js/public.js

    r1048620 r1762403  
    11/** 
    2  * Part of GravityView_Ratings_Reviews plugin. This script is enqueued when in 
     2 * Part of Gravity Forms Business Hours plugin. This script is enqueued when in 
    33 * admin page. 
    44 * 
  • gravity-forms-business-hours/tags/2.0/gravity-forms-business-hours.php

    r1109883 r1762403  
    44Plugin URI: https://gravityview.co 
    55Description: Add a Business Hours field to your Gravity Forms form. Brought to you by <a href="https://gravityview.co">GravityView</a>, the best plugin for displaying Gravity Forms entries. 
    6 Version: 1.2.1 
     6Version: 2.0 
    77Author: GravityView 
    88Author URI: https://gravityview.co 
     
    1111 
    1212------------------------------------------------------------------------ 
    13 Copyright 2015 Katz Web Services, Inc. 
     13Copyright 2017 Katz Web Services, Inc. 
    1414 
    1515This program is free software; you can redistribute it and/or modify 
     
    3333    GFForms::include_addon_framework(); 
    3434 
     35    include_once plugin_dir_path( __FILE__ ) . 'class-gf-field-business-hours.php'; 
     36    include_once plugin_dir_path( __FILE__ ) . 'helper-functions.php'; 
     37 
    3538    class GFBusinessHours extends GFAddOn { 
    3639 
    37         protected $_version = "1.2.1"; 
    38         protected $_min_gravityforms_version = "1.7.9999"; 
     40        protected $_version = "2.0"; 
     41        protected $_min_gravityforms_version = "2.0"; 
    3942        protected $_slug = 'gravity-forms-business-hours'; 
    4043        protected $_path = 'gravity-forms-business-hours/gravity-forms-business-hours.php'; 
     
    4245        protected $_title = 'Gravity Forms Business Hours by GravityView'; 
    4346        protected $_short_title = 'Business Hours'; 
    44  
    45         /** 
    46          * Register functions to be called on the frontend 
    47          * @return void 
    48          */ 
    49         public function init_frontend() { 
    50             parent::init_frontend(); 
    51  
    52             add_action('gform_entry_field_value', array($this, 'display_entry_field_value'), 10, 4); 
    53  
    54             add_filter('gform_save_field_value', array($this, 'save_field_value'), 10, 4); 
    55  
    56             add_filter('gform_field_validation', array( $this, 'validate'), 10, 4 ); 
    57  
    58             add_filter('gform_field_input', array( $this, 'business_hours_field'), 10, 5 ); 
    59         } 
    60  
    61         /** 
    62          * Validate the field value. 
    63          * 
    64          * @param  array $status Status array with `is_valid` and `message` keys 
    65          * @param  mixed $value  Field value 
    66          * @param  array $form   Gravity Forms form array 
    67          * @param  array $field  Gravity Forms field array 
    68          * @return array         Status array 
    69          */ 
    70         function validate( $status, $value, $form, $field ) { 
    71  
    72             if( $field['type'] !== 'business_hours' ) { 
    73                 return $status; 
    74             } 
    75  
    76             $return = $status; 
    77  
    78             $json_value = json_decode( $value ); 
    79  
    80             if( !empty( $field['isRequired'] ) && ( empty( $value ) || $value === 'null' || is_null( $json_value ) ) ) { 
    81  
    82                 $return = array( 
    83                     'is_valid'  => false, 
    84                     'message'   => __('This field is required.', 'gravity-forms-business-hours'), 
    85                 ); 
    86  
    87             } 
    88  
    89             return $return; 
    90         } 
    91  
    92         /** 
    93          * Register functions to be called when DOING_AJAX 
    94          * @return void 
    95          */ 
    96         public function init_ajax() { 
    97             parent::init_ajax(); 
    98  
    99             add_filter('gform_field_content', array($this, 'business_hours_field_admin'), 10, 5); 
    100         } 
    101  
    102         /** 
    103          * Register functions to be called in the admin 
    104          * @return void 
    105          */ 
    106         public function init_admin() { 
    107             parent::init_admin(); 
    108  
    109             add_action('gform_entries_field_value', array($this, 'business_hours_entries'), 10, 3); 
    110  
    111             add_action('gform_entry_field_value', array($this, 'display_entry_field_value'), 10, 4); 
    112             add_filter('gform_add_field_buttons', array($this, 'add_field_button')); 
    113  
    114             add_action('gform_editor_js', array($this, 'editor_script')); 
    115  
    116             add_action('gform_editor_js_set_default_values', array($this, 'set_defaults')); 
    117  
    118             add_filter('gform_field_content', array($this, 'business_hours_field_admin'), 10, 5); 
    119  
    120             add_filter('gform_field_type_title', array($this, 'field_type_title'), 10 ); 
    121         } 
    122  
    123         /** 
    124          * Modify the name of the field type in the Form Editor 
    125          * @param  string $type Field type string 
    126          * @return string       Field type string 
    127          */ 
    128         public function field_type_title( $type = '' ) { 
    129  
    130             if( $type === 'business_hours' ) { 
    131                 return __('Business Hours', 'gravity-forms-business-hours'); 
    132             } 
    133  
    134             return $type; 
    135  
    136         } 
    137  
    138         /** 
    139          * If on Edit Entry screen, show default editing fields. In Edit Form, show placeholder content. 
    140          * @param  [type] $content [description] 
    141          * @param  [type] $field   [description] 
    142          * @param  [type] $value   [description] 
    143          * @param  [type] $lead_id [description] 
    144          * @param  [type] $form_id [description] 
    145          * @return [type]          [description] 
    146          */ 
    147         public function business_hours_field_admin($content, $field, $value, $lead_id, $form_id) { 
    148  
    149             if( $field['type'] !== 'business_hours' ) { 
    150                 return $content; 
    151             } 
    152  
    153             $alternative_content = ''; 
    154  
    155             $edit_form_page = ( rgget('page') === 'gf_edit_forms' && !empty( $_GET['id'] ) ); 
    156  
    157             $add_field_ajax = ( defined('DOING_AJAX') && DOING_AJAX ) && (rgpost('action') === 'rg_add_field'); 
    158  
    159             // If on Edit Entry screen, show default editing fields 
    160             if ( rgget('page') === 'gf_entries' && rgget('view') === 'entry' && rgpost('screen_mode') === 'edit' ) { 
    161  
    162                 $alternative_content = $this->business_hours_field('', $field, $value, $lead_id, $form_id ); 
    163  
    164             } 
    165             // A field is already saved, or the field is being added 
    166             else if( $edit_form_page || $add_field_ajax ) { 
    167  
    168                 $alternative_content = "<div class='gf-html-container gf-business-hours-container'><span class='gf_blockheader'><i class='dashicons dashicons-clock'></i> " . __('Business Hours', 'gravity-forms-business-hours') . '</span><span>' . __('This is a content placeholder. Preview this form to view the Business Hours field.', 'gravity-forms-business-hours') . "</span></div>"; 
    169             } 
    170  
    171             return str_replace('</label>', '</label>' . $alternative_content, $content); 
    172         } 
    173  
    174         /** 
    175          * Get an array of days 
    176          * @filter gravityforms_business_hours_days Modify the days array 
    177          * @return array Array of days of the week (displayed using PHP "D" formatting) 
    178          */ 
    179         private static function get_days() { 
    180  
    181             /** 
    182              * Modify the date format for how the days appear, in PHP Date formatting 
    183              * @param string $date PHP Date format 
    184              */ 
    185             $day_format = apply_filters( 'gravityforms_business_hours_day_format', 'D' ); 
    186  
    187             $days = array( 
    188                 'Monday' => date_i18n($day_format, strtotime('Monday this week')), 
    189                 'Tuesday' => date_i18n($day_format, strtotime('Tuesday this week')), 
    190                 'Wednesday' => date_i18n($day_format, strtotime('Wednesday this week')), 
    191                 'Thursday' => date_i18n($day_format, strtotime('Thursday this week')), 
    192                 'Friday' => date_i18n($day_format, strtotime('Friday this week')), 
    193                 'Saturday' => date_i18n($day_format, strtotime('Saturday this week')), 
    194                 'Sunday' => date_i18n($day_format, strtotime('Sunday this week')), 
    195             ); 
    196  
    197             /** 
    198              * Modify the day values. Don't change the keys! 
    199              * @var array 
    200              */ 
    201             $days = apply_filters( 'gravityforms_business_hours_days', $days ); 
    202  
    203             return $days; 
    204         } 
    205  
    206         /** 
    207          * Set the field value on the Entries page 
    208          * @param  [type] $value    [description] 
    209          * @param  [type] $form_id  [description] 
    210          * @param  [type] $field_id [description] 
    211          * @return [type]           [description] 
    212          */ 
    213         public function business_hours_entries($value, $form_id, $field_id) { 
    214  
    215             $form = GFAPI::get_form($form_id); 
    216             $field = RGFormsModel::get_field($form, $field_id); 
    217  
    218             return self::display_entry_field_value( $value, $field, array(), $form ); 
    219         } 
    220  
    221         /** 
    222          * Display the populated field value - not editable 
    223          * 
    224          * @param  mixed $value  Field value 
    225          * @param  array $field  Gravity Forms field array 
    226          * @param  array $lead  Gravity Forms entry array 
    227          * @param  array $form   Gravity Forms form array 
    228          * @return string        HTML output of the field 
    229          */ 
    230         public static function display_entry_field_value($value, $field, $lead = array(), $form = array() ) { 
    231  
    232             $return = $value; 
    233  
    234             if ($field['type'] === 'business_hours') { 
    235  
    236                 $content = ''; 
    237  
    238                 $days = self::get_days(); 
    239  
    240                 $filled_days = array(); 
    241  
    242                 $list = self::get_list_from_value( $value ); 
    243  
    244                 if (!empty($list) && is_array($list)) { 
    245  
    246                     /** 
    247                      * @link http://schema.org/LocalBusiness 
    248                      */ 
    249                     $content = '<div class="business_hours_list_item" itemscope itemtype="http://schema.org/LocalBusiness">'; 
    250  
    251                     foreach ($list as $time_span) { 
    252  
    253                         // Mark this day as open, so closed days can be processed below. 
    254                         $filled_days[] = $time_span['day']; 
    255  
    256                         /** 
    257                          * Generate schema.org markup 
    258                          * @link http://schema.org/openingHours 
    259                          */ 
    260                         $datetime = sprintf( '%s %s-%s', substr($time_span['day'], 0, 2), $time_span['fromtime'], str_replace('+', '', $time_span['totime'] ) ); 
    261  
    262                         $output_template = ' 
    263                         <div class="business-hours business-hours-open"> 
    264                             <time itemprop="openingHoursSpecification" itemscope itemtype="http://schema.org/OpeningHoursSpecification" datetime="{{datetime}}"> 
    265                                 <strong itemprop="dayOfWeek" itemscope itemtype="http://schema.org/DayOfWeek" rel="{{daylabel}}"><span itemprop="name" content="{{day}}">{{daylabel}}</span></strong> 
    266                                 <span itemprop="opens" content="{{fromtime}}">{{fromtimelabel}}</span> - <span itemprop="closes" content="{{totime}}">{{totimelabel}}</span> 
    267                                 {{open_label}} 
    268                             </time> 
    269                         </div>'; 
    270  
    271                         $replacements = array( 
    272                             '{{datetime}}' => $datetime, 
    273                             '{{day}}' => $time_span['day'], 
    274                             '{{daylabel}}' => (isset( $days[$time_span['day']] ) ? $days[$time_span['day']] : $time_span['day'] ), 
    275                             '{{fromtime}}' => $time_span['fromtime'], 
    276                             '{{fromtimelabel}}' => ( isset( $time_span['fromtimelabel'] ) ? $time_span['fromtimelabel'] : $time_span['fromtime'] ), 
    277                             '{{totime}}' => $time_span['totime'], 
    278                             '{{totimelabel}}' => ( isset( $time_span['totimelabel'] ) ? $time_span['totimelabel'] : $time_span['totime'] ), 
    279                             '{{open_label}}' => self::open_label( $time_span ), 
    280                         ); 
    281  
    282                         /** 
    283                          * Modify the output of the open days. Data inside {{brackets}} will be replaced with the appropriate values. 
    284                          * @param string $output_template HTML code 
    285                          * @param  array $time_span description 
    286                          * @param  array $replacements Default values to replace with 
    287                          */ 
    288                         $output_template = apply_filters( 'gravityforms_business_hours_output_template', $output_template, $time_span, $replacements ); 
    289  
    290                         // Replace the keys ({{placeholders}}) with the data values 
    291                         $item_output = str_replace( array_keys( $replacements ), array_values( $replacements), $output_template ); 
    292  
    293                         // Add to output 
    294                         $content .= $item_output; 
    295  
    296                     } 
    297  
    298                     // Array of days that are set 
    299                     $filled_days = array_unique( $filled_days ); 
    300  
    301                     // Find what days aren't entered 
    302                     $empty_days = array_diff( array_keys($days), $filled_days ); 
    303  
    304                     if( !empty( $empty_days ) ) { 
    305  
    306                         // And set them as closed 
    307                         foreach( $empty_days as $day ) { 
    308  
    309                             $output_template = ' 
    310                             <div class="business-hours business-hours-closed"> 
    311                                 <strong>{{day}}</strong> <span>{{closed_label}}</span> 
    312                             </div>'; 
    313  
    314                             $replacements = array( 
    315                                 '{{day}}' => $days[ $day ], // Custom value at key of full day name 
    316                                 '{{closed_label}}' => __('Closed', 'gravity-forms-business-hours'), 
    317                             ); 
    318  
    319                             /** 
    320                              * Modify the output of the open days. Data inside {{brackets}} will be replaced with the appropriate values. 
    321                              * @param string $output_template HTML code 
    322                              * @param  string $day Day of the week value 
    323                              * @param  array $replacements Default values to replace with 
    324                              */ 
    325                             $output_template = apply_filters( 'gravityforms_business_hours_output_closed_template', $output_template, $days[ $day ], $replacements ); 
    326  
    327                             // Replace the keys ({{placeholders}}) with the data values 
    328                             $item_output = str_replace( array_keys( $replacements ), array_values( $replacements), $output_template ); 
    329  
    330                             // Add to output 
    331                             $content .= $item_output; 
    332  
    333                         } 
    334                     } 
    335  
    336                     $content .= "</div>"; 
    337                 } 
    338  
    339                 $return = $content; 
    340             } 
    341  
    342             return $return; 
    343         } 
    344  
    345         /** 
    346          * Add a Business Hours field to the Advanced Fields group 
    347          * @param [type] $field_groups [description] 
    348          */ 
    349         public function add_field_button($field_groups) { 
    350  
    351             foreach ($field_groups as &$group) { 
    352  
    353                 if ($group['name'] === 'advanced_fields' ) { 
    354  
    355                     $group['fields'][] = array( 
    356                         'class' => 'button', 
    357                         'value' => __('Business Hours', 'gravity-forms-business-hours'), 
    358                         'onclick' => "StartAddField('business_hours');" 
    359                     ); 
    360  
    361                     break; 
    362                 } 
    363             } 
    364  
    365             return $field_groups; 
    366         } 
    367  
    368         /** 
    369          * Change the default field label 
    370          */ 
    371         public function set_defaults() { 
    372             ?> 
    373             //this hook is fired in the middle of a switch statement, 
    374             //so we need to add a case for our new field type 
    375             case "business_hours" : 
    376                 field.inputs = null; 
    377                 field.label = "<?php echo esc_js( __('Business Hours', 'gravity-forms-business-hours') ); ?>"; //setting the default field label 
    378             break; 
    379         <?php 
    380         } 
    381  
    382         /** 
    383          * Set the inputs for the field type 
    384          * @return void 
    385          */ 
    386         public function editor_script() { 
    387             ?> 
    388             <script type='text/javascript'> 
    389                 fieldSettings['business_hours'] = ".label_setting, .visibility_setting, .admin_label_setting, .rules_setting, .description_setting, .conditional_logic_field_setting, .css_class_setting"; 
    390             </script> 
    391         <?php 
    392         } 
    393  
    394         /** 
    395          * Convert the field value into an array of days 
    396          * @param  string $value Value of the field 
    397          * @return array|NULL        NULL if not valid or empty; array if exists and is JSON 
    398          */ 
    399         public static function get_list_from_value( $value ) { 
    400  
    401             $list = json_decode( html_entity_decode( $value ), true ); 
    402  
    403             // Sometimes it's double-encoded 
    404             if( is_string( $list ) ) { 
    405                 $list = json_decode( $list, true ); 
    406             } 
    407  
    408             if( empty( $list ) ) { 
    409                 return NULL; 
    410             } 
    411  
    412             // Sort the days of the week 
    413             usort( $list, array('GFBusinessHours', 'sort_days') ); 
    414  
    415             return $list; 
    416         } 
    417  
    418         /** 
    419          * Sort the list by the day and times entered 
    420          * @param  array $a Item 1 to be compared 
    421          * @param  array $b Item 2 to be compared 
    422          * @return int    0 no change; -1 move down; +1 move up 
    423          */ 
    424         static function sort_days( $a, $b ) { 
    425  
    426             // Generate a timestamp for the different options 
    427             $a_time = self::get_timestamp_from_time_span( $a ); 
    428             $b_time = self::get_timestamp_from_time_span( $b ); 
    429  
    430             // If same time, don't up/down sort 
    431             if( $a_time === $b_time ) { 
    432                 return 0; 
    433             } 
    434  
    435             // If A > B, move down the list (+1). Otherwise, move up (-1). 
    436             return ( $a_time > $b_time ) ? +1 : -1; 
    437         } 
    438  
    439         /** 
    440          * Convert a timespan item into a timestamp for the blog's timezone 
    441          * @param  array $time_span Timespan array with at least day, fromtime keys 
    442          * @return float            Timestamp in float format, since that's what WP's `current_time()` returns 
    443          */ 
    444         public static function get_timestamp_from_time_span( $time_span, $from_or_to = 'from' ) { 
    445  
    446             // Only allow from or to 
    447             if( $from_or_to !== 'from' ) { 
    448                 $from_or_to = 'to'; 
    449             } 
    450  
    451             // `fromtime` or `totime` 
    452             $time_value = $time_span[$from_or_to.'time']; 
    453  
    454             // Full weekday in English 
    455             $day_value = $time_span['day']; 
    456  
    457             // After midnight! 
    458             // We add a day to the strtotime value 
    459             // And strip the + from the time to use the standard `H:i` value 
    460             if( substr( $time_value, 0, 1 ) === '+' ) { 
    461                 $day_value .= ' +1 day'; 
    462                 $time_value = str_replace('+', '', $time_value); 
    463             } 
    464  
    465             // strtotime sentence 
    466             $str_to_time_string = $day_value .' this week '.$time_value; 
    467  
    468             // Blog timestamp 
    469             $current_time = current_time( 'timestamp' ); 
    470  
    471             $timestamp = strtotime($str_to_time_string , $current_time ); 
    472  
    473             return floatval( $timestamp ); 
    474         } 
    475  
    476         /** 
    477          * Is the business open now for the passed time span? 
    478          * @param  array  $time_span Time span with `day` `fromtime` and `totime` 
    479          * @return boolean            True: open; False: not open 
    480          */ 
    481         public static function is_open_now( $time_span ) { 
    482  
    483             // Blog timestamp 
    484             $current_time = current_time( 'timestamp' ); 
    485  
    486             $from_time = self::get_timestamp_from_time_span( $time_span, 'from' ); 
    487             $to_time = self::get_timestamp_from_time_span( $time_span, 'to' ); 
    488  
    489             if( $current_time < $from_time ) { 
    490                 return false; 
    491             } 
    492  
    493             if( $current_time > $to_time ) { 
    494                 return false; 
    495             } 
    496  
    497             return true; 
    498         } 
    499  
    500         /** 
    501          * Generate the Open Now lael 
    502          * @param  array $time_span Time span array 
    503          * @return string            HTML output, if open. Empty string if not. 
    504          */ 
    505         public static function open_label( $time_span ) { 
    506  
    507             $output = ''; 
    508  
    509             if( self::is_open_now( $time_span ) ) { 
    510  
    511                 $output = '<span class="open_label">'; 
    512                 $output .= esc_html__('Open Now', 'gravity-forms-business-hours'); 
    513                 $output .= '</span>'; 
    514             } 
    515  
    516             /** 
    517              * Modify the label for Open now 
    518              * @var string 
    519              */ 
    520             $output = apply_filters('gravityforms_business_hours_open_label', $output, $time_span ); 
    521  
    522             return $output; 
    523         } 
    524  
    525         /** 
    526          * Display field to be shown in Form and when editing entry 
    527          * @param  [type] $content [description] 
    528          * @param  [type] $field   [description] 
    529          * @param  [type] $value   [description] 
    530          * @param  [type] $lead_id [description] 
    531          * @param  [type] $form_id [description] 
    532          * @return [type]          [description] 
    533          */ 
    534         function business_hours_field($content, $field, $value, $lead_id, $form_id) { 
    535  
    536             if ($field['type'] !== 'business_hours') { 
    537                 return $content; 
    538             } 
    539  
    540             $return = $content; 
    541  
    542             $list = self::get_list_from_value( $value ); 
    543  
    544             $list_string = ''; 
    545  
    546             // Populate existing list items 
    547             if (!empty($list)) { 
    548  
    549                 foreach ($list as $list_value) { 
    550                     $list_string .= '<div class="business_hours_list_item">'; 
    551  
    552                     $list_string .= '<strong>' . $list_value['daylabel'] . '</strong>'; 
    553                     $list_string .= '<span>' . $list_value['fromtimelabel'] . '</span>'; 
    554                     $list_string .= ' - '; 
    555                     $list_string .= '<span>' . $list_value['totimelabel'] . '</span>'; 
    556                     $list_string .= '<a href="#" class="business_hours_remove_button"><i class="dashicons dashicons-dismiss"></i></a>'; 
    557                     $list_string .= '</div>'; 
    558                 } 
    559             } 
    560  
    561             $return .= ' 
    562                 <div rel="business_hours_' . $field['id'] . '" class="business_hours field_setting business_hours_item" > 
    563                     <input type="hidden" name="input_' . $field['id'] . '" value=\'' . json_encode( $list ) . '\' /> 
    564                         <div class="business_hours_list">' . $list_string . '</div> 
    565                        <div class="business_hours_add_form"> 
    566                             '; 
    567             $return .= self::get_day_select(); 
    568  
    569             /** 
    570              * Change the default start time. 
    571              * @param string $time Time in 'H:i' format 
    572              */ 
    573             $default_start_time = apply_filters( 'gravityforms_business_hours_default_start_time', '09:00' ); 
    574  
    575             /** 
    576              * Change the default end time 
    577              * @param string $time Time in 'H:i' format 
    578              */ 
    579             $default_end_time = apply_filters( 'gravityforms_business_hours_default_end_time', '17:00' ); 
    580  
    581             $return .= self::get_times_select('item_fromtime', $default_start_time, false); 
    582             $return .= self::get_times_select('item_totime', $default_end_time, true); 
    583  
    584             $return .= '<a href="#" class="button gform_button business_hours_add_button"><i class="dashicons dashicons-plus-alt"></i> ' . __('Add Hours', 'gravity-forms-business-hours') . '</a> 
    585                        </div> 
    586                 </div> 
    587             '; 
    588  
    589             return $return; 
    590         } 
    591  
    592         /** 
    593          * Generate the HTML for the times select 
    594          * 
    595          * @param string $class Class for the select input 
    596          * @param string $default Default value 
    597          * @param boolean $with_after_midnight Include the hours after midnight of the next day? 
    598          * 
    599          * @return string HTML <select> of time options 
    600          */ 
    601         static function get_times_select( $class = 'item_fromtime', $default = '', $with_after_midnight = false ) { 
    602  
    603             $output_times = self::get_times( $with_after_midnight ); 
    604  
    605             $output = '<select class="'.sanitize_html_class( $class ).'">'; 
    606  
    607             foreach( $output_times as $value => $label ) { 
    608                 $selected = selected( $default, $value, false ); 
    609  
    610                 $output .= '<option value="' . esc_attr( $value ) .'"'.$selected.'>' . $label . '</option>'; 
    611             } 
    612  
    613             $output .= '</select>'; 
    614  
    615             return $output; 
    616         } 
    617  
    618         /** 
    619          * Generate array of times with key in `H:i` format and after-midnight in `+H:i` format 
    620          * 
    621          * @param  boolean $with_after_midnight Include times for next day 
    622          * @return [type]                       [description] 
    623          */ 
    624         static function get_times( $with_after_midnight = false ) { 
    625  
    626  
    627             $key_format = 'H:i'; 
    628  
    629             /** 
    630              * Modify the time format for the displayed value 
    631              * @param string 
    632              */ 
    633             $value_format = apply_filters( 'gravityforms_business_hours_time_format', 'g:i a' ); 
    634  
    635             $starttime = '00:00'; 
    636             $time = new DateTime( $starttime ); 
    637  
    638             /** 
    639              * Time interval for the time dropdown options 
    640              * @var int 
    641              */ 
    642             $interval_minutes = apply_filters( 'gravityforms_business_hours_interval', 30 ); 
    643             $interval_minutes = intval( $interval_minutes ); 
    644             $interval = new DateInterval('PT'.$interval_minutes.'M'); 
    645  
    646             $temptime = ''; 
    647  
    648             $times = array(); 
    649  
    650             do { 
    651  
    652                $key = $time->format( $key_format ); 
    653  
    654                // 12:30 am 
    655                $value = $time->format( $value_format ); 
    656  
    657                $times[ $key ] = $value; 
    658  
    659                // Increase by 30 minute intervals 
    660                $time->add($interval); 
    661  
    662                $temptime = $time->format( $key_format ); 
    663  
    664             } while( $temptime !== $starttime ); 
    665  
    666             // Build additional times for the next day closing times 
    667             if( $with_after_midnight ) { 
    668  
    669                 $next_day = __('next day', 'gravity-forms-business-hours'); 
    670  
    671                 foreach( $times as $key => $time ) { 
    672  
    673                     $times[ '+'.$key ] = sprintf( '%s (%s)', $time, $next_day ); 
    674  
    675                     // Only show "Next day" times until 7am 
    676                     if( $key === '07:00' ) { 
    677                         break; 
    678                     } 
    679                 } 
    680  
    681             } 
    682  
    683             return $times; 
    684         } 
    685  
    686         /** 
    687          * Build a select field with the full name of the day as the value and abreviation as the label 
    688          * @return string HTML <select> field 
    689          */ 
    690         static function get_day_select() { 
    691  
    692             $output = '<select class="item_day">'; 
    693  
    694             $days = self::get_days(); 
    695  
    696             foreach ($days as $key => $value) { 
    697                 $output .= '<option value="'.esc_attr( $key ).'">'.esc_html( $value ).'</option>'; 
    698             } 
    699  
    700             $output .= '</select>'; 
    701  
    702             return $output; 
    703         } 
    704  
    705         /** 
    706          * Encode the field value 
    707          * @param  [type] $value [description] 
    708          * @param  [type] $lead  [description] 
    709          * @param  [type] $field [description] 
    710          * @param  [type] $form  [description] 
    711          * @return [type]        [description] 
    712          */ 
    713         public function save_field_value($value, $lead, $field, $form) { 
    714  
    715             if (!empty($field['type']) && $field['type'] === 'business_hours') { 
    716  
    717                 $is_already_json = json_decode( $value ); 
    718  
    719                 // Don't double-encode 
    720                 if( is_null( $is_already_json ) ) { 
    721                     return json_encode( $value ); 
    722                 } 
    723             } 
    724  
    725             return $value; 
    726         } 
    72747 
    72848        /** 
     
    76484        public function localize_scripts() { 
    76585 
    766             $days = self::get_days(); 
     86            $days = gf_business_hours_get_days(); 
    76787 
    76888            $strings = array( 
     
    77191 
    77292            wp_localize_script('business_hours_app', 'GFBusinessHours', $strings); 
     93 
    77394 
    77495            wp_localize_script('business_hours_app_admin', 'GFBusinessHours', $strings); 
  • gravity-forms-business-hours/tags/2.0/readme.md

    r1109883 r1762403  
    22**Tags:** gravityview,gravity forms, gravity,gravity form,business, hours, time, field, form   
    33**Requires at least:** 3.3   
    4 **Tested up to:** 4.2   
     4**Tested up to:** 4.9   
    55**Stable tag:** trunk   
    6 **Contributors:** katzwebdesign,katzwebservices   
     6**Contributors:** katzwebdesign,katzwebservices,gravityview   
    77**License:** GPL 3 or higher   
    88**Donate link:** https://gravityview.co   
     
    5959## Changelog ## 
    6060 
     61### 2.0 on November 8, 2017 ### 
     62 
     63* Email notifications now show a list of hours instead of code 
     64* Improved output in GravityView by stripping extra whitespace 
     65* Major code rewrite for a better structure (using Gravity Forms `GF_Field` class) 
     66* Developers: All public methods have been removed. This is a breaking change, if you're building on top of Version 1.x 
     67 
    6168### 1.2.1 on March 10, 2015 ### 
    6269* Fixed: Business Hours field would be shown as Required in GravityView Edit Entry mode 
  • gravity-forms-business-hours/tags/2.0/readme.txt

    r1109883 r1762403  
    22Tags: gravityview,gravity forms, gravity,gravity form,business, hours, time, field, form 
    33Requires at least: 3.3 
    4 Tested up to: 4.2 
     4Tested up to: 4.9 
    55Stable tag: trunk 
    6 Contributors: katzwebdesign,katzwebservices 
     6Contributors: katzwebdesign,katzwebservices,gravityview 
    77License: GPL 3 or higher 
    88Donate link: https://gravityview.co 
     
    5353== Changelog == 
    5454 
     55= 2.0 on November 8, 2017 = 
     56 
     57* Email notifications now show a list of hours instead of code 
     58* Improved output in GravityView by stripping extra whitespace 
     59* Major code rewrite for a better structure (using Gravity Forms `GF_Field` class) 
     60* Developers: All public methods have been removed. This is a breaking change, if you're building on top of Version 1.x 
     61 
    5562= 1.2.1 on March 10, 2015 = 
    5663* Fixed: Business Hours field would be shown as Required in GravityView Edit Entry mode 
  • gravity-forms-business-hours/trunk

    • Property svn:ignore
      •  

        old new  
        22.gitignore 
        33node_modules 
         4.idea 
  • gravity-forms-business-hours/trunk/Gruntfile.js

    r1048620 r1762403  
    8686 
    8787 
    88     grunt.registerTask( 'default', ['uglify','exec:transifex','potomo','watch'] ); 
     88    grunt.registerTask( 'default', ['uglify','exec:transifex','potomo','wp_readme_to_markdown','watch'] ); 
    8989 
    9090}; 
  • gravity-forms-business-hours/trunk/assets/js/public.js

    r1048620 r1762403  
    11/** 
    2  * Part of GravityView_Ratings_Reviews plugin. This script is enqueued when in 
     2 * Part of Gravity Forms Business Hours plugin. This script is enqueued when in 
    33 * admin page. 
    44 * 
  • gravity-forms-business-hours/trunk/gravity-forms-business-hours.php

    r1109883 r1762403  
    44Plugin URI: https://gravityview.co 
    55Description: Add a Business Hours field to your Gravity Forms form. Brought to you by <a href="https://gravityview.co">GravityView</a>, the best plugin for displaying Gravity Forms entries. 
    6 Version: 1.2.1 
     6Version: 2.0 
    77Author: GravityView 
    88Author URI: https://gravityview.co 
     
    1111 
    1212------------------------------------------------------------------------ 
    13 Copyright 2015 Katz Web Services, Inc. 
     13Copyright 2017 Katz Web Services, Inc. 
    1414 
    1515This program is free software; you can redistribute it and/or modify 
     
    3333    GFForms::include_addon_framework(); 
    3434 
     35    include_once plugin_dir_path( __FILE__ ) . 'class-gf-field-business-hours.php'; 
     36    include_once plugin_dir_path( __FILE__ ) . 'helper-functions.php'; 
     37 
    3538    class GFBusinessHours extends GFAddOn { 
    3639 
    37         protected $_version = "1.2.1"; 
    38         protected $_min_gravityforms_version = "1.7.9999"; 
     40        protected $_version = "2.0"; 
     41        protected $_min_gravityforms_version = "2.0"; 
    3942        protected $_slug = 'gravity-forms-business-hours'; 
    4043        protected $_path = 'gravity-forms-business-hours/gravity-forms-business-hours.php'; 
     
    4245        protected $_title = 'Gravity Forms Business Hours by GravityView'; 
    4346        protected $_short_title = 'Business Hours'; 
    44  
    45         /** 
    46          * Register functions to be called on the frontend 
    47          * @return void 
    48          */ 
    49         public function init_frontend() { 
    50             parent::init_frontend(); 
    51  
    52             add_action('gform_entry_field_value', array($this, 'display_entry_field_value'), 10, 4); 
    53  
    54             add_filter('gform_save_field_value', array($this, 'save_field_value'), 10, 4); 
    55  
    56             add_filter('gform_field_validation', array( $this, 'validate'), 10, 4 ); 
    57  
    58             add_filter('gform_field_input', array( $this, 'business_hours_field'), 10, 5 ); 
    59         } 
    60  
    61         /** 
    62          * Validate the field value. 
    63          * 
    64          * @param  array $status Status array with `is_valid` and `message` keys 
    65          * @param  mixed $value  Field value 
    66          * @param  array $form   Gravity Forms form array 
    67          * @param  array $field  Gravity Forms field array 
    68          * @return array         Status array 
    69          */ 
    70         function validate( $status, $value, $form, $field ) { 
    71  
    72             if( $field['type'] !== 'business_hours' ) { 
    73                 return $status; 
    74             } 
    75  
    76             $return = $status; 
    77  
    78             $json_value = json_decode( $value ); 
    79  
    80             if( !empty( $field['isRequired'] ) && ( empty( $value ) || $value === 'null' || is_null( $json_value ) ) ) { 
    81  
    82                 $return = array( 
    83                     'is_valid'  => false, 
    84                     'message'   => __('This field is required.', 'gravity-forms-business-hours'), 
    85                 ); 
    86  
    87             } 
    88  
    89             return $return; 
    90         } 
    91  
    92         /** 
    93          * Register functions to be called when DOING_AJAX 
    94          * @return void 
    95          */ 
    96         public function init_ajax() { 
    97             parent::init_ajax(); 
    98  
    99             add_filter('gform_field_content', array($this, 'business_hours_field_admin'), 10, 5); 
    100         } 
    101  
    102         /** 
    103          * Register functions to be called in the admin 
    104          * @return void 
    105          */ 
    106         public function init_admin() { 
    107             parent::init_admin(); 
    108  
    109             add_action('gform_entries_field_value', array($this, 'business_hours_entries'), 10, 3); 
    110  
    111             add_action('gform_entry_field_value', array($this, 'display_entry_field_value'), 10, 4); 
    112             add_filter('gform_add_field_buttons', array($this, 'add_field_button')); 
    113  
    114             add_action('gform_editor_js', array($this, 'editor_script')); 
    115  
    116             add_action('gform_editor_js_set_default_values', array($this, 'set_defaults')); 
    117  
    118             add_filter('gform_field_content', array($this, 'business_hours_field_admin'), 10, 5); 
    119  
    120             add_filter('gform_field_type_title', array($this, 'field_type_title'), 10 ); 
    121         } 
    122  
    123         /** 
    124          * Modify the name of the field type in the Form Editor 
    125          * @param  string $type Field type string 
    126          * @return string       Field type string 
    127          */ 
    128         public function field_type_title( $type = '' ) { 
    129  
    130             if( $type === 'business_hours' ) { 
    131                 return __('Business Hours', 'gravity-forms-business-hours'); 
    132             } 
    133  
    134             return $type; 
    135  
    136         } 
    137  
    138         /** 
    139          * If on Edit Entry screen, show default editing fields. In Edit Form, show placeholder content. 
    140          * @param  [type] $content [description] 
    141          * @param  [type] $field   [description] 
    142          * @param  [type] $value   [description] 
    143          * @param  [type] $lead_id [description] 
    144          * @param  [type] $form_id [description] 
    145          * @return [type]          [description] 
    146          */ 
    147         public function business_hours_field_admin($content, $field, $value, $lead_id, $form_id) { 
    148  
    149             if( $field['type'] !== 'business_hours' ) { 
    150                 return $content; 
    151             } 
    152  
    153             $alternative_content = ''; 
    154  
    155             $edit_form_page = ( rgget('page') === 'gf_edit_forms' && !empty( $_GET['id'] ) ); 
    156  
    157             $add_field_ajax = ( defined('DOING_AJAX') && DOING_AJAX ) && (rgpost('action') === 'rg_add_field'); 
    158  
    159             // If on Edit Entry screen, show default editing fields 
    160             if ( rgget('page') === 'gf_entries' && rgget('view') === 'entry' && rgpost('screen_mode') === 'edit' ) { 
    161  
    162                 $alternative_content = $this->business_hours_field('', $field, $value, $lead_id, $form_id ); 
    163  
    164             } 
    165             // A field is already saved, or the field is being added 
    166             else if( $edit_form_page || $add_field_ajax ) { 
    167  
    168                 $alternative_content = "<div class='gf-html-container gf-business-hours-container'><span class='gf_blockheader'><i class='dashicons dashicons-clock'></i> " . __('Business Hours', 'gravity-forms-business-hours') . '</span><span>' . __('This is a content placeholder. Preview this form to view the Business Hours field.', 'gravity-forms-business-hours') . "</span></div>"; 
    169             } 
    170  
    171             return str_replace('</label>', '</label>' . $alternative_content, $content); 
    172         } 
    173  
    174         /** 
    175          * Get an array of days 
    176          * @filter gravityforms_business_hours_days Modify the days array 
    177          * @return array Array of days of the week (displayed using PHP "D" formatting) 
    178          */ 
    179         private static function get_days() { 
    180  
    181             /** 
    182              * Modify the date format for how the days appear, in PHP Date formatting 
    183              * @param string $date PHP Date format 
    184              */ 
    185             $day_format = apply_filters( 'gravityforms_business_hours_day_format', 'D' ); 
    186  
    187             $days = array( 
    188                 'Monday' => date_i18n($day_format, strtotime('Monday this week')), 
    189                 'Tuesday' => date_i18n($day_format, strtotime('Tuesday this week')), 
    190                 'Wednesday' => date_i18n($day_format, strtotime('Wednesday this week')), 
    191                 'Thursday' => date_i18n($day_format, strtotime('Thursday this week')), 
    192                 'Friday' => date_i18n($day_format, strtotime('Friday this week')), 
    193                 'Saturday' => date_i18n($day_format, strtotime('Saturday this week')), 
    194                 'Sunday' => date_i18n($day_format, strtotime('Sunday this week')), 
    195             ); 
    196  
    197             /** 
    198              * Modify the day values. Don't change the keys! 
    199              * @var array 
    200              */ 
    201             $days = apply_filters( 'gravityforms_business_hours_days', $days ); 
    202  
    203             return $days; 
    204         } 
    205  
    206         /** 
    207          * Set the field value on the Entries page 
    208          * @param  [type] $value    [description] 
    209          * @param  [type] $form_id  [description] 
    210          * @param  [type] $field_id [description] 
    211          * @return [type]           [description] 
    212          */ 
    213         public function business_hours_entries($value, $form_id, $field_id) { 
    214  
    215             $form = GFAPI::get_form($form_id); 
    216             $field = RGFormsModel::get_field($form, $field_id); 
    217  
    218             return self::display_entry_field_value( $value, $field, array(), $form ); 
    219         } 
    220  
    221         /** 
    222          * Display the populated field value - not editable 
    223          * 
    224          * @param  mixed $value  Field value 
    225          * @param  array $field  Gravity Forms field array 
    226          * @param  array $lead  Gravity Forms entry array 
    227          * @param  array $form   Gravity Forms form array 
    228          * @return string        HTML output of the field 
    229          */ 
    230         public static function display_entry_field_value($value, $field, $lead = array(), $form = array() ) { 
    231  
    232             $return = $value; 
    233  
    234             if ($field['type'] === 'business_hours') { 
    235  
    236                 $content = ''; 
    237  
    238                 $days = self::get_days(); 
    239  
    240                 $filled_days = array(); 
    241  
    242                 $list = self::get_list_from_value( $value ); 
    243  
    244                 if (!empty($list) && is_array($list)) { 
    245  
    246                     /** 
    247                      * @link http://schema.org/LocalBusiness 
    248                      */ 
    249                     $content = '<div class="business_hours_list_item" itemscope itemtype="http://schema.org/LocalBusiness">'; 
    250  
    251                     foreach ($list as $time_span) { 
    252  
    253                         // Mark this day as open, so closed days can be processed below. 
    254                         $filled_days[] = $time_span['day']; 
    255  
    256                         /** 
    257                          * Generate schema.org markup 
    258                          * @link http://schema.org/openingHours 
    259                          */ 
    260                         $datetime = sprintf( '%s %s-%s', substr($time_span['day'], 0, 2), $time_span['fromtime'], str_replace('+', '', $time_span['totime'] ) ); 
    261  
    262                         $output_template = ' 
    263                         <div class="business-hours business-hours-open"> 
    264                             <time itemprop="openingHoursSpecification" itemscope itemtype="http://schema.org/OpeningHoursSpecification" datetime="{{datetime}}"> 
    265                                 <strong itemprop="dayOfWeek" itemscope itemtype="http://schema.org/DayOfWeek" rel="{{daylabel}}"><span itemprop="name" content="{{day}}">{{daylabel}}</span></strong> 
    266                                 <span itemprop="opens" content="{{fromtime}}">{{fromtimelabel}}</span> - <span itemprop="closes" content="{{totime}}">{{totimelabel}}</span> 
    267                                 {{open_label}} 
    268                             </time> 
    269                         </div>'; 
    270  
    271                         $replacements = array( 
    272                             '{{datetime}}' => $datetime, 
    273                             '{{day}}' => $time_span['day'], 
    274                             '{{daylabel}}' => (isset( $days[$time_span['day']] ) ? $days[$time_span['day']] : $time_span['day'] ), 
    275                             '{{fromtime}}' => $time_span['fromtime'], 
    276                             '{{fromtimelabel}}' => ( isset( $time_span['fromtimelabel'] ) ? $time_span['fromtimelabel'] : $time_span['fromtime'] ), 
    277                             '{{totime}}' => $time_span['totime'], 
    278                             '{{totimelabel}}' => ( isset( $time_span['totimelabel'] ) ? $time_span['totimelabel'] : $time_span['totime'] ), 
    279                             '{{open_label}}' => self::open_label( $time_span ), 
    280                         ); 
    281  
    282                         /** 
    283                          * Modify the output of the open days. Data inside {{brackets}} will be replaced with the appropriate values. 
    284                          * @param string $output_template HTML code 
    285                          * @param  array $time_span description 
    286                          * @param  array $replacements Default values to replace with 
    287                          */ 
    288                         $output_template = apply_filters( 'gravityforms_business_hours_output_template', $output_template, $time_span, $replacements ); 
    289  
    290                         // Replace the keys ({{placeholders}}) with the data values 
    291                         $item_output = str_replace( array_keys( $replacements ), array_values( $replacements), $output_template ); 
    292  
    293                         // Add to output 
    294                         $content .= $item_output; 
    295  
    296                     } 
    297  
    298                     // Array of days that are set 
    299                     $filled_days = array_unique( $filled_days ); 
    300  
    301                     // Find what days aren't entered 
    302                     $empty_days = array_diff( array_keys($days), $filled_days ); 
    303  
    304                     if( !empty( $empty_days ) ) { 
    305  
    306                         // And set them as closed 
    307                         foreach( $empty_days as $day ) { 
    308  
    309                             $output_template = ' 
    310                             <div class="business-hours business-hours-closed"> 
    311                                 <strong>{{day}}</strong> <span>{{closed_label}}</span> 
    312                             </div>'; 
    313  
    314                             $replacements = array( 
    315                                 '{{day}}' => $days[ $day ], // Custom value at key of full day name 
    316                                 '{{closed_label}}' => __('Closed', 'gravity-forms-business-hours'), 
    317                             ); 
    318  
    319                             /** 
    320                              * Modify the output of the open days. Data inside {{brackets}} will be replaced with the appropriate values. 
    321                              * @param string $output_template HTML code 
    322                              * @param  string $day Day of the week value 
    323                              * @param  array $replacements Default values to replace with 
    324                              */ 
    325                             $output_template = apply_filters( 'gravityforms_business_hours_output_closed_template', $output_template, $days[ $day ], $replacements ); 
    326  
    327                             // Replace the keys ({{placeholders}}) with the data values 
    328                             $item_output = str_replace( array_keys( $replacements ), array_values( $replacements), $output_template ); 
    329  
    330                             // Add to output 
    331                             $content .= $item_output; 
    332  
    333                         } 
    334                     } 
    335  
    336                     $content .= "</div>"; 
    337                 } 
    338  
    339                 $return = $content; 
    340             } 
    341  
    342             return $return; 
    343         } 
    344  
    345         /** 
    346          * Add a Business Hours field to the Advanced Fields group 
    347          * @param [type] $field_groups [description] 
    348          */ 
    349         public function add_field_button($field_groups) { 
    350  
    351             foreach ($field_groups as &$group) { 
    352  
    353                 if ($group['name'] === 'advanced_fields' ) { 
    354  
    355                     $group['fields'][] = array( 
    356                         'class' => 'button', 
    357                         'value' => __('Business Hours', 'gravity-forms-business-hours'), 
    358                         'onclick' => "StartAddField('business_hours');" 
    359                     ); 
    360  
    361                     break; 
    362                 } 
    363             } 
    364  
    365             return $field_groups; 
    366         } 
    367  
    368         /** 
    369          * Change the default field label 
    370          */ 
    371         public function set_defaults() { 
    372             ?> 
    373             //this hook is fired in the middle of a switch statement, 
    374             //so we need to add a case for our new field type 
    375             case "business_hours" : 
    376                 field.inputs = null; 
    377                 field.label = "<?php echo esc_js( __('Business Hours', 'gravity-forms-business-hours') ); ?>"; //setting the default field label 
    378             break; 
    379         <?php 
    380         } 
    381  
    382         /** 
    383          * Set the inputs for the field type 
    384          * @return void 
    385          */ 
    386         public function editor_script() { 
    387             ?> 
    388             <script type='text/javascript'> 
    389                 fieldSettings['business_hours'] = ".label_setting, .visibility_setting, .admin_label_setting, .rules_setting, .description_setting, .conditional_logic_field_setting, .css_class_setting"; 
    390             </script> 
    391         <?php 
    392         } 
    393  
    394         /** 
    395          * Convert the field value into an array of days 
    396          * @param  string $value Value of the field 
    397          * @return array|NULL        NULL if not valid or empty; array if exists and is JSON 
    398          */ 
    399         public static function get_list_from_value( $value ) { 
    400  
    401             $list = json_decode( html_entity_decode( $value ), true ); 
    402  
    403             // Sometimes it's double-encoded 
    404             if( is_string( $list ) ) { 
    405                 $list = json_decode( $list, true ); 
    406             } 
    407  
    408             if( empty( $list ) ) { 
    409                 return NULL; 
    410             } 
    411  
    412             // Sort the days of the week 
    413             usort( $list, array('GFBusinessHours', 'sort_days') ); 
    414  
    415             return $list; 
    416         } 
    417  
    418         /** 
    419          * Sort the list by the day and times entered 
    420          * @param  array $a Item 1 to be compared 
    421          * @param  array $b Item 2 to be compared 
    422          * @return int    0 no change; -1 move down; +1 move up 
    423          */ 
    424         static function sort_days( $a, $b ) { 
    425  
    426             // Generate a timestamp for the different options 
    427             $a_time = self::get_timestamp_from_time_span( $a ); 
    428             $b_time = self::get_timestamp_from_time_span( $b ); 
    429  
    430             // If same time, don't up/down sort 
    431             if( $a_time === $b_time ) { 
    432                 return 0; 
    433             } 
    434  
    435             // If A > B, move down the list (+1). Otherwise, move up (-1). 
    436             return ( $a_time > $b_time ) ? +1 : -1; 
    437         } 
    438  
    439         /** 
    440          * Convert a timespan item into a timestamp for the blog's timezone 
    441          * @param  array $time_span Timespan array with at least day, fromtime keys 
    442          * @return float            Timestamp in float format, since that's what WP's `current_time()` returns 
    443          */ 
    444         public static function get_timestamp_from_time_span( $time_span, $from_or_to = 'from' ) { 
    445  
    446             // Only allow from or to 
    447             if( $from_or_to !== 'from' ) { 
    448                 $from_or_to = 'to'; 
    449             } 
    450  
    451             // `fromtime` or `totime` 
    452             $time_value = $time_span[$from_or_to.'time']; 
    453  
    454             // Full weekday in English 
    455             $day_value = $time_span['day']; 
    456  
    457             // After midnight! 
    458             // We add a day to the strtotime value 
    459             // And strip the + from the time to use the standard `H:i` value 
    460             if( substr( $time_value, 0, 1 ) === '+' ) { 
    461                 $day_value .= ' +1 day'; 
    462                 $time_value = str_replace('+', '', $time_value); 
    463             } 
    464  
    465             // strtotime sentence 
    466             $str_to_time_string = $day_value .' this week '.$time_value; 
    467  
    468             // Blog timestamp 
    469             $current_time = current_time( 'timestamp' ); 
    470  
    471             $timestamp = strtotime($str_to_time_string , $current_time ); 
    472  
    473             return floatval( $timestamp ); 
    474         } 
    475  
    476         /** 
    477          * Is the business open now for the passed time span? 
    478          * @param  array  $time_span Time span with `day` `fromtime` and `totime` 
    479          * @return boolean            True: open; False: not open 
    480          */ 
    481         public static function is_open_now( $time_span ) { 
    482  
    483             // Blog timestamp 
    484             $current_time = current_time( 'timestamp' ); 
    485  
    486             $from_time = self::get_timestamp_from_time_span( $time_span, 'from' ); 
    487             $to_time = self::get_timestamp_from_time_span( $time_span, 'to' ); 
    488  
    489             if( $current_time < $from_time ) { 
    490                 return false; 
    491             } 
    492  
    493             if( $current_time > $to_time ) { 
    494                 return false; 
    495             } 
    496  
    497             return true; 
    498         } 
    499  
    500         /** 
    501          * Generate the Open Now lael 
    502          * @param  array $time_span Time span array 
    503          * @return string            HTML output, if open. Empty string if not. 
    504          */ 
    505         public static function open_label( $time_span ) { 
    506  
    507             $output = ''; 
    508  
    509             if( self::is_open_now( $time_span ) ) { 
    510  
    511                 $output = '<span class="open_label">'; 
    512                 $output .= esc_html__('Open Now', 'gravity-forms-business-hours'); 
    513                 $output .= '</span>'; 
    514             } 
    515  
    516             /** 
    517              * Modify the label for Open now 
    518              * @var string 
    519              */ 
    520             $output = apply_filters('gravityforms_business_hours_open_label', $output, $time_span ); 
    521  
    522             return $output; 
    523         } 
    524  
    525         /** 
    526          * Display field to be shown in Form and when editing entry 
    527          * @param  [type] $content [description] 
    528          * @param  [type] $field   [description] 
    529          * @param  [type] $value   [description] 
    530          * @param  [type] $lead_id [description] 
    531          * @param  [type] $form_id [description] 
    532          * @return [type]          [description] 
    533          */ 
    534         function business_hours_field($content, $field, $value, $lead_id, $form_id) { 
    535  
    536             if ($field['type'] !== 'business_hours') { 
    537                 return $content; 
    538             } 
    539  
    540             $return = $content; 
    541  
    542             $list = self::get_list_from_value( $value ); 
    543  
    544             $list_string = ''; 
    545  
    546             // Populate existing list items 
    547             if (!empty($list)) { 
    548  
    549                 foreach ($list as $list_value) { 
    550                     $list_string .= '<div class="business_hours_list_item">'; 
    551  
    552                     $list_string .= '<strong>' . $list_value['daylabel'] . '</strong>'; 
    553                     $list_string .= '<span>' . $list_value['fromtimelabel'] . '</span>'; 
    554                     $list_string .= ' - '; 
    555                     $list_string .= '<span>' . $list_value['totimelabel'] . '</span>'; 
    556                     $list_string .= '<a href="#" class="business_hours_remove_button"><i class="dashicons dashicons-dismiss"></i></a>'; 
    557                     $list_string .= '</div>'; 
    558                 } 
    559             } 
    560  
    561             $return .= ' 
    562                 <div rel="business_hours_' . $field['id'] . '" class="business_hours field_setting business_hours_item" > 
    563                     <input type="hidden" name="input_' . $field['id'] . '" value=\'' . json_encode( $list ) . '\' /> 
    564                         <div class="business_hours_list">' . $list_string . '</div> 
    565                        <div class="business_hours_add_form"> 
    566                             '; 
    567             $return .= self::get_day_select(); 
    568  
    569             /** 
    570              * Change the default start time. 
    571              * @param string $time Time in 'H:i' format 
    572              */ 
    573             $default_start_time = apply_filters( 'gravityforms_business_hours_default_start_time', '09:00' ); 
    574  
    575             /** 
    576              * Change the default end time 
    577              * @param string $time Time in 'H:i' format 
    578              */ 
    579             $default_end_time = apply_filters( 'gravityforms_business_hours_default_end_time', '17:00' ); 
    580  
    581             $return .= self::get_times_select('item_fromtime', $default_start_time, false); 
    582             $return .= self::get_times_select('item_totime', $default_end_time, true); 
    583  
    584             $return .= '<a href="#" class="button gform_button business_hours_add_button"><i class="dashicons dashicons-plus-alt"></i> ' . __('Add Hours', 'gravity-forms-business-hours') . '</a> 
    585                        </div> 
    586                 </div> 
    587             '; 
    588  
    589             return $return; 
    590         } 
    591  
    592         /** 
    593          * Generate the HTML for the times select 
    594          * 
    595          * @param string $class Class for the select input 
    596          * @param string $default Default value 
    597          * @param boolean $with_after_midnight Include the hours after midnight of the next day? 
    598          * 
    599          * @return string HTML <select> of time options 
    600          */ 
    601         static function get_times_select( $class = 'item_fromtime', $default = '', $with_after_midnight = false ) { 
    602  
    603             $output_times = self::get_times( $with_after_midnight ); 
    604  
    605             $output = '<select class="'.sanitize_html_class( $class ).'">'; 
    606  
    607             foreach( $output_times as $value => $label ) { 
    608                 $selected = selected( $default, $value, false ); 
    609  
    610                 $output .= '<option value="' . esc_attr( $value ) .'"'.$selected.'>' . $label . '</option>'; 
    611             } 
    612  
    613             $output .= '</select>'; 
    614  
    615             return $output; 
    616         } 
    617  
    618         /** 
    619          * Generate array of times with key in `H:i` format and after-midnight in `+H:i` format 
    620          * 
    621          * @param  boolean $with_after_midnight Include times for next day 
    622          * @return [type]                       [description] 
    623          */ 
    624         static function get_times( $with_after_midnight = false ) { 
    625  
    626  
    627             $key_format = 'H:i'; 
    628  
    629             /** 
    630              * Modify the time format for the displayed value 
    631              * @param string 
    632              */ 
    633             $value_format = apply_filters( 'gravityforms_business_hours_time_format', 'g:i a' ); 
    634  
    635             $starttime = '00:00'; 
    636             $time = new DateTime( $starttime ); 
    637  
    638             /** 
    639              * Time interval for the time dropdown options 
    640              * @var int 
    641              */ 
    642             $interval_minutes = apply_filters( 'gravityforms_business_hours_interval', 30 ); 
    643             $interval_minutes = intval( $interval_minutes ); 
    644             $interval = new DateInterval('PT'.$interval_minutes.'M'); 
    645  
    646             $temptime = ''; 
    647  
    648             $times = array(); 
    649  
    650             do { 
    651  
    652                $key = $time->format( $key_format ); 
    653  
    654                // 12:30 am 
    655                $value = $time->format( $value_format ); 
    656  
    657                $times[ $key ] = $value; 
    658  
    659                // Increase by 30 minute intervals 
    660                $time->add($interval); 
    661  
    662                $temptime = $time->format( $key_format ); 
    663  
    664             } while( $temptime !== $starttime ); 
    665  
    666             // Build additional times for the next day closing times 
    667             if( $with_after_midnight ) { 
    668  
    669                 $next_day = __('next day', 'gravity-forms-business-hours'); 
    670  
    671                 foreach( $times as $key => $time ) { 
    672  
    673                     $times[ '+'.$key ] = sprintf( '%s (%s)', $time, $next_day ); 
    674  
    675                     // Only show "Next day" times until 7am 
    676                     if( $key === '07:00' ) { 
    677                         break; 
    678                     } 
    679                 } 
    680  
    681             } 
    682  
    683             return $times; 
    684         } 
    685  
    686         /** 
    687          * Build a select field with the full name of the day as the value and abreviation as the label 
    688          * @return string HTML <select> field 
    689          */ 
    690         static function get_day_select() { 
    691  
    692             $output = '<select class="item_day">'; 
    693  
    694             $days = self::get_days(); 
    695  
    696             foreach ($days as $key => $value) { 
    697                 $output .= '<option value="'.esc_attr( $key ).'">'.esc_html( $value ).'</option>'; 
    698             } 
    699  
    700             $output .= '</select>'; 
    701  
    702             return $output; 
    703         } 
    704  
    705         /** 
    706          * Encode the field value 
    707          * @param  [type] $value [description] 
    708          * @param  [type] $lead  [description] 
    709          * @param  [type] $field [description] 
    710          * @param  [type] $form  [description] 
    711          * @return [type]        [description] 
    712          */ 
    713         public function save_field_value($value, $lead, $field, $form) { 
    714  
    715             if (!empty($field['type']) && $field['type'] === 'business_hours') { 
    716  
    717                 $is_already_json = json_decode( $value ); 
    718  
    719                 // Don't double-encode 
    720                 if( is_null( $is_already_json ) ) { 
    721                     return json_encode( $value ); 
    722                 } 
    723             } 
    724  
    725             return $value; 
    726         } 
    72747 
    72848        /** 
     
    76484        public function localize_scripts() { 
    76585 
    766             $days = self::get_days(); 
     86            $days = gf_business_hours_get_days(); 
    76787 
    76888            $strings = array( 
     
    77191 
    77292            wp_localize_script('business_hours_app', 'GFBusinessHours', $strings); 
     93 
    77394 
    77495            wp_localize_script('business_hours_app_admin', 'GFBusinessHours', $strings); 
  • gravity-forms-business-hours/trunk/readme.md

    r1109883 r1762403  
    22**Tags:** gravityview,gravity forms, gravity,gravity form,business, hours, time, field, form   
    33**Requires at least:** 3.3   
    4 **Tested up to:** 4.2   
     4**Tested up to:** 4.9   
    55**Stable tag:** trunk   
    6 **Contributors:** katzwebdesign,katzwebservices   
     6**Contributors:** katzwebdesign,katzwebservices,gravityview   
    77**License:** GPL 3 or higher   
    88**Donate link:** https://gravityview.co   
     
    5959## Changelog ## 
    6060 
     61### 2.0 on November 8, 2017 ### 
     62 
     63* Email notifications now show a list of hours instead of code 
     64* Improved output in GravityView by stripping extra whitespace 
     65* Major code rewrite for a better structure (using Gravity Forms `GF_Field` class) 
     66* Developers: All public methods have been removed. This is a breaking change, if you're building on top of Version 1.x 
     67 
    6168### 1.2.1 on March 10, 2015 ### 
    6269* Fixed: Business Hours field would be shown as Required in GravityView Edit Entry mode 
  • gravity-forms-business-hours/trunk/readme.txt

    r1109883 r1762403  
    22Tags: gravityview,gravity forms, gravity,gravity form,business, hours, time, field, form 
    33Requires at least: 3.3 
    4 Tested up to: 4.2 
     4Tested up to: 4.9 
    55Stable tag: trunk 
    6 Contributors: katzwebdesign,katzwebservices 
     6Contributors: katzwebdesign,katzwebservices,gravityview 
    77License: GPL 3 or higher 
    88Donate link: https://gravityview.co 
     
    5353== Changelog == 
    5454 
     55= 2.0 on November 8, 2017 = 
     56 
     57* Email notifications now show a list of hours instead of code 
     58* Improved output in GravityView by stripping extra whitespace 
     59* Major code rewrite for a better structure (using Gravity Forms `GF_Field` class) 
     60* Developers: All public methods have been removed. This is a breaking change, if you're building on top of Version 1.x 
     61 
    5562= 1.2.1 on March 10, 2015 = 
    5663* Fixed: Business Hours field would be shown as Required in GravityView Edit Entry mode 
Note: See TracChangeset for help on using the changeset viewer.