public static function get_field_filter_settings($form) { $all_fields = $form['fields']; // set up filters $fields = $all_fields; $exclude_types = array('rank', 'page', 'html'); $operators_by_input_type = array('default' => array('is', 'isnot', '>', '<'), 'name' => array('is', 'isnot', '>', '<', 'contains'), 'address' => array('is', 'isnot', '>', '<', 'contains'), 'text' => array('is', 'isnot', '>', '<', 'contains'), 'textarea' => array('is', 'isnot', '>', '<', 'contains'), 'checkbox' => array('is'), 'multiselect' => array('contains'), 'number' => array('is', 'isnot', '>', '<'), 'select' => array('is', 'isnot', '>', '<'), 'likert' => array('is', 'isnot'), 'list' => array('contains')); for ($i = 0; $i < count($all_fields); $i++) { $input_type = GFFormsmodel::get_input_type($all_fields[$i]); if (in_array($input_type, $exclude_types)) { unset($fields[$i]); } } $fields = array_values($fields); $field_filters = array(array('key' => '0', 'text' => esc_html__('Any form field', 'gravityforms'), 'operators' => array('contains', 'is'), 'preventMultiple' => false)); foreach ($fields as $field) { $input_type = GFFormsModel::get_input_type($field); $operators = isset($operators_by_input_type[$input_type]) ? $operators_by_input_type[$input_type] : $operators_by_input_type['default']; if ($field->type == 'product' && in_array($input_type, array('radio', 'select'))) { $operators = array('is'); } elseif (!isset($field->choices) && !in_array('contains', $operators)) { $operators[] = 'contains'; } $field_filter = array(); $key = $field->id; if ($input_type == 'likert' && $field->gsurveyLikertEnableMultipleRows) { // multi-row likert fields $field_filter['key'] = $key; $field_filter['group'] = true; $field_filter['text'] = GFFormsModel::get_label($field); $sub_filters = array(); $rows = $field->gsurveyLikertRows; foreach ($rows as $row) { $sub_filter = array(); $sub_filter['key'] = $key . '|' . rgar($row, 'value'); $sub_filter['text'] = rgar($row, 'text'); $sub_filter['type'] = 'field'; $sub_filter['preventMultiple'] = false; $sub_filter['operators'] = $operators; $sub_filter['values'] = $field->choices; $sub_filters[] = $sub_filter; } $field_filter['filters'] = $sub_filters; } elseif ($input_type == 'name' && $field->nameFormat == '' || $input_type == 'address') { // standard two input name field $field_filter['key'] = $key; $field_filter['group'] = true; $field_filter['text'] = GFFormsModel::get_label($field); $sub_filters = array(); $inputs = $field->inputs; foreach ($inputs as $input) { $sub_filter = array(); $sub_filter['key'] = rgar($input, 'id'); $sub_filter['text'] = rgar($input, 'label'); $sub_filter['preventMultiple'] = false; $sub_filter['operators'] = $operators; $sub_filters[] = $sub_filter; } $field_filter['filters'] = $sub_filters; } elseif ($input_type == 'date') { $field_filter['key'] = $key; $field_filter['preventMultiple'] = false; $field_filter['text'] = GFFormsModel::get_label($field); $field_filter['operators'] = $operators; $field_filter['placeholder'] = esc_html__('yyyy-mm-dd', 'gravityforms'); $field_filter['cssClass'] = 'datepicker ymd_dash'; } else { $field_filter['key'] = $key; $field_filter['preventMultiple'] = false; $field_filter['text'] = GFFormsModel::get_label($field); $field_filter['operators'] = $operators; if (isset($field->choices)) { $field_filter['values'] = $field->choices; } } $field_filters[] = $field_filter; } $form_id = $form['id']; $entry_meta_filters = self::get_entry_meta_filter_settings($form_id); $field_filters = array_merge($field_filters, $entry_meta_filters); $field_filters = array_values($field_filters); // reset the numeric keys in case some filters have been unset $info_filters = self::get_entry_info_filter_settings(); $field_filters = array_merge($field_filters, $info_filters); $field_filters = array_values($field_filters); return $field_filters; }
public function results_page($form_id, $page_title, $gf_page, $gf_view) { if (empty($form_id)) { $forms = RGFormsModel::get_forms(); if (!empty($forms)) { $form_id = $forms[0]->id; } } $form = GFFormsModel::get_form_meta($form_id); $form = apply_filters("gform_form_pre_results_{$form_id}", apply_filters("gform_form_pre_results", $form)); // set up filter vars $start_date = rgget("start"); $end_date = rgget("end"); $all_fields = $form["fields"]; // set up filters $fields = $all_fields; $exclude_types = array("rank", "page"); for ($i = 0; $i < count($all_fields); $i++) { $field_type = GFFormsmodel::get_input_type($all_fields[$i]); if (in_array($field_type, $exclude_types)) { unset($fields[$i]); } } $fields = array_values($fields); $field_filters = array(); foreach ($fields as $field) { $operators = array(); $field_type = GFFormsmodel::get_input_type($field); $operators[] = "is"; if ($field_type != "checkbox") { $operators[] = "isnot"; } $field_filter = array(); $key = $field["id"]; if ($field_type == "likert" && rgar($field, "gsurveyLikertEnableMultipleRows")) { $field_filter["key"] = $key; $field_filter["type"] = "group"; $field_filter["text"] = rgar($field, "label"); $sub_filters = array(); $rows = rgar($field, "gsurveyLikertRows"); foreach ($rows as $row) { $sub_filter = array(); $sub_filter["key"] = $key . "|" . rgar($row, "value"); $sub_filter["text"] = rgar($row, "text"); $sub_filter["type"] = "field"; $sub_filter["preventMultiple"] = false; $sub_filter["operators"] = $operators; $sub_filter["values"] = $field["choices"]; $sub_filters[] = $sub_filter; } $field_filter["filters"] = $sub_filters; } else { $field_filter["key"] = $key; $field_filter["type"] = "field"; $field_filter["preventMultiple"] = false; $field_filter["text"] = rgar($field, "label"); if (isset($field["choices"])) { $field_filter["values"] = $field["choices"]; } else { $operators[] = "contains"; } $field_filter["operators"] = $operators; } $field_filters[] = $field_filter; } $entry_meta_filters = self::get_entry_meta_filters($form_id); $field_filters = array_merge($field_filters, $entry_meta_filters); $field_filters = apply_filters("gform_filters_pre_results", $field_filters, $form); $field_filters = array_values($field_filters); // reset the numeric keys in case some filters have been unset ?> <script type="text/javascript"> var gresultsFields = <?php echo json_encode($all_fields); ?> ; var gresultsFilters = <?php echo json_encode($field_filters); ?> ; </script> <link rel="stylesheet" href="<?php echo GFCommon::get_base_url(); ?> /css/admin.css?ver=<?php echo GFCommon::$version; ?> " type="text/css"/> <div class="wrap gforms_edit_form <?php echo GFCommon::get_browser_class(); ?> "> <div class="icon32" id="gravity-entry-icon"><br></div> <h2><?php echo empty($form_id) ? $page_title : $page_title . " : " . esc_html($form["title"]); ?> </h2> <?php RGForms::top_toolbar(); ?> <?php if (false === empty($all_fields)) { ?> <div class="gresults-filter-loading" style="display:none;float:left;margin-right:5px;"> <img style="vertical-align:middle;" src="<?php echo GFCommon::get_base_url(); ?> /images/spinner.gif" alt="loading..."/> <a href="javascript:void(0);" onclick="javascript:gresultsAjaxRequest.abort()">Cancel</a> </div> <div id="poststuff" class="metabox-holder has-right-sidebar"> <div id="gresults-results-wrapper"> <div id="gresults-results"> </div> </div> <div id="gresults-results-filter" class="postbox"> <h3 style="cursor: default;"><?php _e("Results Filters", "gravityforms"); ?> </h3> <div id="gresults-results-filter-content"> <form id="gresults-results-filter-form" action="" method="GET"> <input type="hidden" id="gresults-page-slug" name="page" value="<?php echo esc_attr($gf_page); ?> "> <input type="hidden" id="gresults-view-slug" name="view" value="<?php echo esc_attr($gf_view); ?> "> <input type="hidden" id="gresults-form-id" name="id" value="<?php echo esc_attr($form_id); ?> "> <div class='gresults-results-filter-section-label'> <?php _e("Filters", "gravityforms"); ?> <?php gform_tooltip("gresults_filters", "tooltip_bottomleft"); ?> </div> <div id="gresults-results-field-filters-container"> <div id="gresults-results-field-filters"> <!-- placeholder populated by js --> </div> </div> <div class='gresults-results-filter-section-label'> <?php _e("Date Range", "gravityforms"); ?> <?php gform_tooltip("gresults_date_range", "tooltip_left"); ?> </div> <div style="width:90px; float:left; "> <label for="gresults-results-filter-date-start"><?php _e("Start", "gravityforms"); ?> </label> <input type="text" id="gresults-results-filter-date-start" name="start" style="width:80px" class="gresults-datepicker" value="<?php echo $start_date; ?> "/> </div> <div style="width:90px; float:left; "> <label for="gresults-results-filter-date-end"><?php _e("End", "gravityforms"); ?> </label> <input type="text" id="gresults-results-filter-date-end" name="end" style="width:80px" class="gresults-datepicker" value="<?php echo $end_date; ?> "/> </div> <br style="clear:both"/> <div id="gresults-results-filter-buttons"> <input type="submit" id="gresults-results-filter-submit-button" class="button button-primary button-large" value="Apply filters"> <input type="button" id="gresults-results-filter-clear-button" class="button button-secondary button-large" value="Clear" onclick="gresults.clearFilterForm();"> <div class="gresults-filter-loading" style="display:none; float:right; margin-top:5px;"> <img src="<?php echo GFCommon::get_base_url(); ?> /images/spinner.gif" alt="loading..."/> </div> </div> </form> </div> </div> </div> <?php } else { _e("This form does not have any fields that can be used for results", "gravityforms"); } ?> </div> <?php }
public static function get_field_filter_settings($form) { $all_fields = $form["fields"]; // set up filters $fields = $all_fields; $exclude_types = array("rank", "page", "html"); $operators_by_field_type = array("default" => array("is", "isnot", ">", "<"), "checkbox" => array("is"), "multiselect" => array("contains"), "number" => array("is", "isnot", ">", "<"), "likert" => array("is", "isnot"), "list" => array("contains")); for ($i = 0; $i < count($all_fields); $i++) { $field_type = GFFormsmodel::get_input_type($all_fields[$i]); if (in_array($field_type, $exclude_types)) { unset($fields[$i]); } } $fields = array_values($fields); $field_filters = array(array("key" => "0", "text" => __("Any form field", "gravityforms"), "operators" => array("contains", "is"))); foreach ($fields as $field) { $field_type = GFFormsModel::get_input_type($field); $operators = isset($operators_by_field_type[$field_type]) ? $operators_by_field_type[$field_type] : $operators_by_field_type["default"]; if (!isset($field["choices"]) && !in_array("contains", $operators)) { $operators[] = "contains"; } $field_filter = array(); $key = $field["id"]; if ($field_type == "likert" && rgar($field, "gsurveyLikertEnableMultipleRows")) { // multi-row likert fields $field_filter["key"] = $key; $field_filter["group"] = true; $field_filter["text"] = GFFormsModel::get_label($field); $sub_filters = array(); $rows = rgar($field, "gsurveyLikertRows"); foreach ($rows as $row) { $sub_filter = array(); $sub_filter["key"] = $key . "|" . rgar($row, "value"); $sub_filter["text"] = rgar($row, "text"); $sub_filter["type"] = "field"; $sub_filter["preventMultiple"] = false; $sub_filter["operators"] = $operators; $sub_filter["values"] = $field["choices"]; $sub_filters[] = $sub_filter; } $field_filter["filters"] = $sub_filters; } elseif ($field_type == "name" && rgar($field, "nameFormat") == "" || $field_type == "address") { // standard two input name field $field_filter["key"] = $key; $field_filter["group"] = true; $field_filter["text"] = GFFormsModel::get_label($field); $sub_filters = array(); $inputs = rgar($field, "inputs"); foreach ($inputs as $input) { $sub_filter = array(); $sub_filter["key"] = rgar($input, "id"); $sub_filter["text"] = rgar($input, "label"); $sub_filter["preventMultiple"] = false; $sub_filter["operators"] = $operators; $sub_filters[] = $sub_filter; } $field_filter["filters"] = $sub_filters; } else { $field_filter["key"] = $key; $field_filter["preventMultiple"] = false; $field_filter["text"] = GFFormsModel::get_label($field); $field_filter["operators"] = $operators; if (isset($field["choices"])) { $field_filter["values"] = $field["choices"]; } } $field_filters[] = $field_filter; } $form_id = $form["id"]; $entry_meta_filters = self::get_entry_meta_filter_settings($form_id); $field_filters = array_merge($field_filters, $entry_meta_filters); $field_filters = array_values($field_filters); // reset the numeric keys in case some filters have been unset $info_filters = self::get_entry_info_filter_settings(); $field_filters = array_merge($field_filters, $info_filters); $field_filters = array_values($field_filters); return $field_filters; }