/**
 * 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;
}
Exemple #2
0
 /**
  * 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 '&nbsp;';
            $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 '&nbsp;';
            $this->settings_text($delay_offset_field);
            $this->settings_select($unit_field);
            echo '&nbsp;';
            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 
        }