/** * Determine whether a View has a single checkbox or single radio input * @see GravityView_frontend::add_scripts_and_styles() * @since 1.15 * @param array $form Gravity Forms form * @param array $view_fields GravityView fields array */ function gravityview_view_has_single_checkbox_or_radio($form, $view_fields) { if ($form_fields = GFFormsModel::get_fields_by_type($form, array('checkbox', 'radio'))) { /** @var GF_Field_Radio|GF_Field_Checkbox $form_field */ foreach ($form_fields as $form_field) { $field_id = $form_field->id; foreach ($view_fields as $zone) { // ACF compatibility; ACF-added fields aren't arrays if (!is_array($zone)) { continue; } foreach ($zone as $field) { // If it's an input, not the parent and the parent ID matches a checkbox or radio if (strpos($field['id'], '.') > 0 && floor($field['id']) === floor($field_id)) { return true; } } } } } return false; }
/** * Returns an array containing the form fields of the specified type or types. * * @since 1.9.9.8 * * @param array $form * @param array|string $types * @param bool $use_input_type * * @return GF_Field[] */ public static function get_fields_by_type($form, $types, $use_input_type = false) { return GFFormsModel::get_fields_by_type($form, $types, $use_input_type); }
public function settings_schedule($field) { $form = $this->get_current_form(); $scheduled = array('name' => 'scheduled', 'type' => 'checkbox', 'choices' => array(array('label' => esc_html__('Schedule this step', 'gravityflow'), 'name' => 'scheduled'))); $schedule_type = array('name' => 'schedule_type', 'type' => 'radio', 'horizontal' => true, 'default_value' => 'delay', 'choices' => array(array('label' => esc_html__('Delay'), 'value' => 'delay'), array('label' => esc_html__('Date'), 'value' => 'date'))); $date_fields = GFFormsModel::get_fields_by_type($form, 'date'); $date_field_choices = array(); if (!empty($date_fields)) { $schedule_type['choices'][] = array('label' => esc_html__('Date Field'), 'value' => 'date_field'); foreach ($date_fields as $date_field) { $date_field_choices[] = array('value' => $date_field->id, 'label' => GFFormsModel::get_label($date_field)); } } $schedule_date_fields = array('name' => 'schedule_date_field', 'label' => esc_html__('Schedule Date Field', 'gravityflow'), 'choices' => $date_field_choices); $schedule_date = array('id' => 'schedule_date', 'name' => 'schedule_date', 'placeholder' => 'yyyy-mm-dd', 'class' => 'datepicker datepicker_with_icon ymd_dash', 'label' => esc_html__('Schedule', 'gravityflow'), 'type' => 'text'); $delay_offset_field = array('name' => 'schedule_delay_offset', 'class' => 'small-text', 'label' => esc_html__('Schedule', 'gravityflow'), 'type' => 'text'); $unit_field = array('name' => 'schedule_delay_unit', 'label' => esc_html__('Schedule', 'gravityflow'), 'default_value' => 'hours', 'choices' => array(array('label' => esc_html__('Minute(s)', 'gravityflow'), 'value' => 'minutes'), array('label' => esc_html__('Hour(s)', 'gravityflow'), 'value' => 'hours'), array('label' => esc_html__('Day(s)', 'gravityflow'), 'value' => 'days'), array('label' => esc_html__('Week(s)', 'gravityflow'), 'value' => 'weeks'))); $this->settings_checkbox($scheduled); $enabled = $this->get_setting('scheduled', false); $schedule_type_setting = $this->get_setting('schedule_type', 'delay'); $schedule_style = $enabled ? '' : 'style="display:none;"'; $schedule_date_style = $schedule_type_setting == 'date' ? '' : 'style="display:none;"'; $schedule_delay_style = $schedule_type_setting == 'delay' ? '' : 'style="display:none;"'; $schedule_date_fields_style = $schedule_type_setting == 'date_field' ? '' : 'style="display:none;"'; ?> <div class="gravityflow-schedule-settings" <?php echo $schedule_style; ?> > <div class="gravityflow-schedule-type-container"> <?php $this->settings_radio($schedule_type); ?> </div> <div class="gravityflow-schedule-date-container" <?php echo $schedule_date_style; ?> > <?php esc_html_e('Start this step on', 'gravityflow'); echo ' '; $this->settings_text($schedule_date); ?> <input type="hidden" id="gforms_calendar_icon_schedule_date" class="gform_hidden" value="<?php echo GFCommon::get_base_url() . '/images/calendar.png'; ?> " /> </div> <div class="gravityflow-schedule-delay-container" <?php echo $schedule_delay_style; ?> > <?php esc_html_e('Start this step', 'gravityflow'); echo ' '; $this->settings_text($delay_offset_field); $this->settings_select($unit_field); echo ' '; esc_html_e('after the workflow step is triggered.'); ?> </div> <div class="gravityflow-schedule-date-field-container" <?php echo $schedule_date_fields_style; ?> > <?php esc_html_e('Start this step on the date specified in the selected field.', 'gravityflow'); echo '<br />'; $this->settings_select($schedule_date_fields); ?> </div> </div> <script> (function($) { $( '#scheduled' ).click(function(){ $('.gravityflow-schedule-settings').slideToggle(); }); $( '#schedule_type0' ).click(function(){ $('.gravityflow-schedule-delay-container').show(); $('.gravityflow-schedule-date-container').hide(); $('.gravityflow-schedule-date-field-container').hide(); }); $( '#schedule_type1' ).click(function(){ $('.gravityflow-schedule-delay-container').hide(); $('.gravityflow-schedule-date-container').show(); $('.gravityflow-schedule-date-field-container').hide(); }); $( '#schedule_type2' ).click(function(){ $('.gravityflow-schedule-delay-container').hide(); $('.gravityflow-schedule-date-container').hide(); $('.gravityflow-schedule-date-field-container').show(); }); })(jQuery); </script> <?php }