public function get_field_input($form, $value = '', $entry = null) { $form_id = $form['id']; $is_entry_detail = $this->is_entry_detail(); $is_form_editor = $this->is_form_editor(); $id = (int) $this->id; $product_name = !is_array($value) || empty($value[$this->id . '.1']) ? esc_attr($this->label) : esc_attr($value[$this->id . '.1']); $price = !is_array($value) || empty($value[$this->id . '.2']) ? $this->basePrice : esc_attr($value[$this->id . '.2']); $quantity = is_array($value) ? esc_attr($value[$this->id . '.3']) : ''; if (rgblank($quantity)) { $quantity = 1; } if (empty($price)) { $price = 0; } $price = esc_attr($price); $has_quantity_field = sizeof(GFCommon::get_product_fields_by_type($form, array('quantity'), $this->id)) > 0; if ($has_quantity_field) { $this->disableQuantity = true; } $quantity_field = $has_quantity_field ? '' : "<input type='hidden' name='input_{$id}.3' value='" . esc_attr($quantity) . "' id='ginput_quantity_{$form_id}_{$this->id}' class='gform_hidden' />"; $product_name_field = "<input type='hidden' name='input_{$id}.1' value='{$product_name}' class='gform_hidden' />"; $disabled_text = $is_form_editor ? 'disabled="disabled"' : ''; $field_type = $is_entry_detail || $is_form_editor ? 'text' : 'hidden'; return $quantity_field . $product_name_field . "<input name='input_{$id}.2' id='ginput_base_price_{$form_id}_{$this->id}' type='{$field_type}' value='{$price}' class='gform_hidden ginput_amount' {$disabled_text}/>"; }
public function validate($value, $form) { // the POST value has already been converted from currency or decimal_comma to decimal_dot and then cleaned in get_field_value() $value = GFCommon::maybe_add_leading_zero($value); $raw_value = $_POST['input_' . $this->id]; //Raw value will be tested against the is_numeric() function to make sure it is in the right format. $requires_valid_number = !rgblank($raw_value) && !$this->has_calculation(); $is_valid_number = $this->validate_range($value) && GFCommon::is_numeric($raw_value, $this->numberFormat); if ($requires_valid_number && !$is_valid_number) { $this->failed_validation = true; $this->validation_message = empty($this->errorMessage) ? $this->get_range_message() : $this->errorMessage; } else { if ($this->type == 'quantity') { if (intval($value) != $value) { $this->failed_validation = true; $this->validation_message = empty($field['errorMessage']) ? __('Please enter a valid quantity. Quantity cannot contain decimals.', 'gravityforms') : $field['errorMessage']; } else { if (!empty($value) && (!is_numeric($value) || intval($value) != floatval($value) || intval($value) < 0)) { $this->failed_validation = true; $this->validation_message = empty($field['errorMessage']) ? __('Please enter a valid quantity', 'gravityforms') : $field['errorMessage']; } } } } }
function bb_click_array_field_input($input, $field, $value, $lead_id, $form_id) { if ($field["type"] == "bb_click_array") { $field_id = IS_ADMIN || $form_id == 0 ? "input_{$id}" : "input_" . $form_id . "_{$id}"; $input_name = $form_id . '_' . $field["id"]; $css = isset($field['cssClass']) ? $field['cssClass'] : ""; $disabled_text = IS_ADMIN && RG_CURRENT_VIEW != "entry" ? "disabled='disabled'" : ""; $amount = ''; $clicked = ''; if (is_array($value)) { $amount = esc_attr(rgget($field["id"] . ".1", $value)); $clicked = rgget($field["id"] . ".5", $value); } $html = "<div id='{$field_id}' class='ginput_container bb-click-array-" . count($field['choices']) . " " . esc_attr($css) . "'>" . "\n"; if (is_array($field["choices"])) { $choice_id = 0; $tabindex = GFCommon::get_tabindex(); foreach ($field["choices"] as $choice) { $id = $field["id"] . '_' . $choice_id; $field_value = !empty($choice["value"]) || rgar($field, "enableChoiceValue") ? $choice["value"] : $choice["text"]; if (rgblank($amount) && RG_CURRENT_VIEW != "entry") { $active = rgar($choice, "isSelected") ? "checked='checked'" : ""; } else { $active = RGFormsModel::choice_value_match($field, $choice, $amount) ? "checked='checked'" : ""; } if ($active) { $amount = $field_value; } $field_class = $active ? 's-active' : 's-passive'; if (rgar($field, 'field_bb_click_array_is_product')) { require_once GFCommon::get_base_path() . '/currency.php'; $currency = new RGCurrency(GFCommon::get_currency()); $field_value = $currency->to_money($field_value); $field_class .= ' s-currency'; } $html .= sprintf('<div data-clickarray-value="%s" data-choice-id="%s" class="s-html-wrapper %s" id="%s">', esc_attr($field_value), $choice_id, $field_class, $id); $html .= sprintf('<div class="s-html-value">%s</div>', $field_value); $html .= sprintf("<label for='choice_%s' id='label_%s'>%s</label>", $id, $id, $choice["text"]); $html .= '</div>'; $choice_id++; } $onblur = !IS_ADMIN ? 'if(jQuery(this).val().replace(" ", "") == "") { jQuery(this).val("' . $other_default_value . '"); }' : ''; $onkeyup = empty($field["conditionalLogicFields"]) || IS_ADMIN ? '' : "onchange='gf_apply_rules(" . $field["formId"] . "," . GFCommon::json_encode($field["conditionalLogicFields"]) . ");' onkeyup='clearTimeout(__gf_timeout_handle); __gf_timeout_handle = setTimeout(\"gf_apply_rules(" . $field["formId"] . "," . GFCommon::json_encode($field["conditionalLogicFields"]) . ")\", 300);'"; $value_exists = RGFormsModel::choices_value_match($field, $field["choices"], $value); $other_label = empty($field['field_bb_click_array_other_label']) ? 'My Best Gift' : $field['field_bb_click_array_other_label']; $other_class = rgar($field, 'enableOtherChoice') ? '' : 'hide'; $html .= "<label for='input_{$field["formId"]}_{$field["id"]}_1' class='ginput_bb_click_array_other_label " . $other_class . "'>" . $other_label . "</label>"; $other_class .= rgar($field, 'field_bb_click_array_is_product') ? ' ginput_amount gfield_price gfield_price_' . $field['formId'] . '_' . $field['id'] . '_1 gfield_product_' . $field['formId'] . '_' . $field['id'] . '_1' : ''; $html .= "<input id='input_{$field["formId"]}_{$field["id"]}_1' name='input_{$field["id"]}_1' type='text' value='" . esc_attr($amount) . "' class='ginput_bb ginput_click_array_other " . $other_class . " " . $field['size'] . "' onblur='{$onblur}' {$tabindex} {$onkeyup} {$disabled_text}>"; $html .= "<input id='input_{$field["formId"]}_{$field["id"]}_5' name='input_{$field["id"]}_5' type='hidden' value='" . esc_attr($clicked) . "' class='ginput_bb ginput_click_array_clicked'>"; } $html .= "</div>"; return $html; } return $input; }
public static function notification_page() { $form_id = rgget('id'); $notification_id = rgget("nid"); if (!rgblank($notification_id)) { self::notification_edit_page($form_id, $notification_id); } else { self::notification_list_page($form_id); } }
public function validate($value, $form) { if (!class_exists('RGCurrency')) { require_once GFCommon::get_base_path() . '/currency.php'; } $price = GFCommon::to_number($value); if (!rgblank($value) && ($price === false || $price < 0)) { $this->failed_validation = true; $this->validation_message = empty($this->errorMessage) ? __('Please enter a valid amount.', 'gravityforms') : $this->errorMessage; } }
public function validate($value, $form) { $quantity_id = $this->id . '.3'; $quantity = rgget($quantity_id, $value); if ($this->isRequired && rgblank($quantity) && !$this->disableQuantity) { $this->failed_validation = true; $this->validation_message = empty($this->errorMessage) ? esc_html__('This field is required.', 'gravityforms') : $this->errorMessage; } elseif (!empty($quantity) && (!is_numeric($quantity) || intval($quantity) != floatval($quantity) || intval($quantity) < 0)) { $this->failed_validation = true; $this->validation_message = esc_html__('Please enter a valid quantity', 'gravityforms'); } }
public function validate($value, $form) { $email = is_array($value) ? rgar($value, 0) : $value; // Form objects created in 1.8 will supply a string as the value. if (!rgblank($value) && !GFCommon::is_valid_email($email)) { $this->failed_validation = true; $this->validation_message = empty($this->errorMessage) ? __('Please enter a valid email address.', 'gravityforms') : $this->errorMessage; } elseif ($this->emailConfirmEnabled && !empty($email)) { $confirm = is_array($value) ? rgar($value, 1) : rgpost('input_' . $this->id . '_2'); if ($confirm != $email) { $this->failed_validation = true; $this->validation_message = __('Your emails do not match.', 'gravityforms'); } } }
/** * Make API request. * * @access public * @param string $action * @param array $options (default: array()) * @param string $method (default: 'GET') * @return void */ public function make_request($action = null, $options = array(), $method = 'GET', $expected_code = 200, $return_key = null) { /* Build request options string. */ $request_options = 'auth_token=' . $this->api_token; $request_options .= $method == 'GET' && !empty($options) ? '&' . http_build_query($options) : ''; /* Build request URL. */ $request_url = 'https://' . $this->account_url . '.batchbook.com/api/v1/' . $action . '.json?' . $request_options; /* Prepare request and execute. */ $args = array('method' => $method, 'headers' => array('Content-Type' => 'application/json')); if ($method == 'POST' || $method == 'PUT') { $args['body'] = json_encode($options); } $response = wp_remote_request($request_url, $args); /* If WP_Error, die. Otherwise, return decoded JSON. */ if (is_wp_error($response)) { die('Request failed. ' . $response->get_error_messages()); } else { if (strpos($response['headers']['content-type'], 'application/json') === FALSE) { throw new Exception('Invalid account URL.'); } else { $response_body = json_decode($response['body'], true); if (isset($response_body['error'])) { throw new Exception($response_body['error']); } if (isset($response_body['code']) && $response_body['code'] !== $expected_code) { throw new Exception($response_body['message']); } if (!rgblank($response_body)) { return empty($return_key) || !empty($return_key) && !isset($response_body[$return_key]) ? $response_body : $response_body[$return_key]; } /* If the body is empty, retrieve the ID from the location header. */ $id = explode('/', $response['headers']['location']); return end($id); } } }
/** * Validates settings fields. * Validates that all fields are valid. Fields can be invalid when they are blank and marked as required or if it fails a custom validation check. * To specify a custom validation, use the 'validation_callback' field meta property and implement the validation function with the custom logic. * @param $fields - A list of all fields from the field meta configuration * @param $settings - A list of submitted settings values * @return bool - Returns true if all fields have passed validation, and false otherwise. */ protected function validate_settings($fields, $settings) { foreach ($fields as $section) { foreach ($section['fields'] as $field) { $field_setting = rgar($settings, rgar($field, 'name')); if (is_callable(rgar($field, 'validation_callback'))) { call_user_func(rgar($field, 'validation_callback'), $field, $field_setting); } else { if (rgar($field, 'required')) { if (rgblank($field_setting)) { $this->set_field_error($field, rgar($field, 'error_message')); } } } } } $field_errors = $this->get_field_errors(); $is_valid = empty($field_errors); return $is_valid; }
/** * Get init script and all necessary data for conditional logic. * * @todo: Replace much of the field value retrieval with a get_original_value() method in GF_Field class. * * @param $form * @param array $field_values * * @return string */ private static function get_conditional_logic($form, $field_values = array()) { $logics = ''; $dependents = ''; $fields_with_logic = array(); $default_values = array(); foreach ($form['fields'] as $field) { /* @var GF_Field $field */ $field_deps = self::get_conditional_logic_fields($form, $field->id); $field_dependents[$field->id] = !empty($field_deps) ? $field_deps : array(); //use section's logic if one exists $section = RGFormsModel::get_section($form, $field->id); $section_logic = !empty($section) ? $section->conditionalLogic : null; $field_logic = $field->type != 'page' ? $field->conditionalLogic : null; //page break conditional logic will be handled during the next button click $next_button_logic = !empty($field->nextButton) && !empty($field->nextButton['conditionalLogic']) ? $field->nextButton['conditionalLogic'] : null; if (!empty($field_logic) || !empty($next_button_logic)) { $field_section_logic = array('field' => $field_logic, 'nextButton' => $next_button_logic, 'section' => $section_logic); $logics .= $field->id . ': ' . GFCommon::json_encode($field_section_logic) . ','; $fields_with_logic[] = $field->id; $peers = $field->type == 'section' ? GFCommon::get_section_fields($form, $field->id) : array($field); $peer_ids = array(); foreach ($peers as $peer) { $peer_ids[] = $peer->id; } $dependents .= $field->id . ': ' . GFCommon::json_encode($peer_ids) . ','; } //-- Saving default values so that they can be restored when toggling conditional logic --- $field_val = ''; $input_type = $field->get_input_type(); $inputs = $field->get_entry_inputs(); //get parameter value if pre-populate is enabled if ($field->allowsPrepopulate) { if ($input_type == 'checkbox') { $field_val = RGFormsModel::get_parameter_value($field->inputName, $field_values, $field); if (!is_array($field_val)) { $field_val = explode(',', $field_val); } } elseif (is_array($inputs)) { $field_val = array(); foreach ($inputs as $input) { $field_val["input_{$input['id']}"] = RGFormsModel::get_parameter_value(rgar($input, 'name'), $field_values, $field); } } elseif ($input_type == 'time') { // maintained for backwards compatibility. The Time field now has an inputs array. $parameter_val = RGFormsModel::get_parameter_value($field->inputName, $field_values, $field); if (!empty($parameter_val) && preg_match('/^(\\d*):(\\d*) ?(.*)$/', $parameter_val, $matches)) { $field_val = array(); $field_val[] = esc_attr($matches[1]); //hour $field_val[] = esc_attr($matches[2]); //minute $field_val[] = rgar($matches, 3); //am or pm } } elseif ($input_type == 'list') { $parameter_val = RGFormsModel::get_parameter_value($field->inputName, $field_values, $field); $field_val = is_array($parameter_val) ? $parameter_val : explode(',', str_replace('|', ',', $parameter_val)); if (is_array(rgar($field_val, 0))) { $list_values = array(); foreach ($field_val as $row) { $list_values = array_merge($list_values, array_values($row)); } $field_val = $list_values; } } else { $field_val = RGFormsModel::get_parameter_value($field->inputName, $field_values, $field); } } //use default value if pre-populated value is empty $field_val = $field->get_value_default_if_empty($field_val); if (is_array($field->choices) && $input_type != 'list') { //radio buttons start at 0 and checkboxes start at 1 $choice_index = $input_type == 'radio' ? 0 : 1; $is_pricing_field = GFCommon::is_pricing_field($field->type); foreach ($field->choices as $choice) { if ($input_type == 'checkbox' && $choice_index % 10 == 0) { $choice_index++; } $is_prepopulated = is_array($field_val) ? in_array($choice['value'], $field_val) : $choice['value'] == $field_val; $is_choice_selected = rgar($choice, 'isSelected') || $is_prepopulated; if ($is_choice_selected && $input_type == 'select') { $price = GFCommon::to_number(rgar($choice, 'price')) == false ? 0 : GFCommon::to_number(rgar($choice, 'price')); $val = $is_pricing_field && $field->type != 'quantity' ? $choice['value'] . '|' . $price : $choice['value']; $default_values[$field->id] = $val; } elseif ($is_choice_selected) { if (!isset($default_values[$field->id])) { $default_values[$field->id] = array(); } $default_values[$field->id][] = "choice_{$form['id']}_{$field->id}_{$choice_index}"; } $choice_index++; } } elseif (!rgblank($field_val)) { switch ($input_type) { case 'date': // for date fields; that are multi-input; and where the field value is a string // (happens with prepop, default value will always be an array for multi-input date fields) if (is_array($field->inputs) && (!is_array($field_val) || !isset($field_val['m']))) { $format = empty($field->dateFormat) ? 'mdy' : esc_attr($field->dateFormat); $date_info = GFcommon::parse_date($field_val, $format); // converts date to array( 'm' => 1, 'd' => '13', 'y' => '1987' ) $field_val = $field->get_date_array_by_format(array($date_info['month'], $date_info['day'], $date_info['year'])); } break; case 'time': if (is_array($field_val)) { $ampm_key = key(array_slice($field_val, -1, 1, true)); $field_val[$ampm_key] = strtolower($field_val[$ampm_key]); } break; case 'address': $state_input_id = sprintf('%s.4', $field->id); if (isset($field_val[$state_input_id]) && !$field_val[$state_input_id]) { $field_val[$state_input_id] = $field->defaultState; } $country_input_id = sprintf('%s.6', $field->id); if (isset($field_val[$country_input_id]) && !$field_val[$country_input_id]) { $field_val[$country_input_id] = $field->defaultCountry; } break; } $default_values[$field->id] = $field_val; } } $button_conditional_script = ''; //adding form button conditional logic if enabled if (isset($form['button']['conditionalLogic'])) { $logics .= '0: ' . GFCommon::json_encode(array('field' => $form['button']['conditionalLogic'], 'section' => null)) . ','; $dependents .= '0: ' . GFCommon::json_encode(array(0)) . ','; $fields_with_logic[] = 0; $button_conditional_script = "jQuery('#gform_{$form['id']}').submit(" . 'function(event, isButtonPress){' . ' var visibleButton = jQuery(".gform_next_button:visible, .gform_button:visible, .gform_image_button:visible");' . ' return visibleButton.length > 0 || isButtonPress == true;' . '}' . ');'; } if (!empty($logics)) { $logics = substr($logics, 0, strlen($logics) - 1); } //removing last comma; if (!empty($dependents)) { $dependents = substr($dependents, 0, strlen($dependents) - 1); } //removing last comma; $animation = rgar($form, 'enableAnimation') ? '1' : '0'; global $wp_locale; $number_format = $wp_locale->number_format['decimal_point'] == ',' ? 'decimal_comma' : 'decimal_dot'; $str = "if(window['jQuery']){" . "if(!window['gf_form_conditional_logic'])" . "window['gf_form_conditional_logic'] = new Array();" . "window['gf_form_conditional_logic'][{$form['id']}] = { logic: { {$logics} }, dependents: { {$dependents} }, animation: {$animation}, defaults: " . json_encode($default_values) . ", fields: " . json_encode($field_dependents) . " }; " . "if(!window['gf_number_format'])" . "window['gf_number_format'] = '" . $number_format . "';" . 'jQuery(document).ready(function(){' . "gf_apply_rules({$form['id']}, " . json_encode($fields_with_logic) . ', true);' . "jQuery('#gform_wrapper_{$form['id']}').show();" . "jQuery(document).trigger('gform_post_conditional_logic', [{$form['id']}, null, true]);" . $button_conditional_script . '} );' . '} '; return $str; }
public static function all_leads_page() { $view = rgget('view'); $lead_id = rgget('lid'); if ($view == 'entry' && (rgget('lid') || !rgblank(rgget('pos')))) { require_once GFCommon::get_base_path() . '/entry_detail.php'; GFEntryDetail::lead_detail_page(); } else { if ($view == 'entries' || empty($view)) { require_once GFCommon::get_base_path() . '/entry_list.php'; GFEntryList::all_leads_page(); } else { $form_id = rgget('id'); do_action('gform_entries_view', $view, $form_id, $lead_id); } } }
public static function entry_detail_pagination_link($pos, $label = '', $class = '', $icon = '') { $href = !rgblank($pos) ? 'href="' . add_query_arg(array('pos' => $pos), remove_query_arg(array('pos', 'lid'))) . '"' : ''; $class .= ' gf_entry_pagination_link'; $class .= $pos !== false ? ' gf_entry_pagination_link_active' : ' gf_entry_pagination_link_inactive'; return '<a ' . $href . ' class="' . $class . '" title="' . $label . '"><i class="fa-lg ' . $icon . '"></i></a></li>'; }
public static function update_lead_field_value($form, $lead, $field, $lead_detail_id, $input_id, $value) { global $wpdb; $lead_id = $lead['id']; $form_id = $form['id']; $lead_detail_table = self::get_lead_details_table_name(); $lead_detail_long_table = self::get_lead_details_long_table_name(); if (!rgblank($value)) { $value = apply_filters('gform_save_field_value', $value, $lead, $field, $form, $input_id); $truncated_value = GFCommon::safe_substr($value, 0, GFORMS_MAX_FIELD_LENGTH); if ($lead_detail_id > 0) { $result = $wpdb->update($lead_detail_table, array('value' => $truncated_value), array('id' => $lead_detail_id), array('%s'), array('%d')); if (false === $result) { return false; } //insert, update or delete long value $sql = $wpdb->prepare("SELECT count(0) FROM {$lead_detail_long_table} WHERE lead_detail_id=%d", $lead_detail_id); $has_long_field = intval($wpdb->get_var($sql)) > 0; //delete long field if value has been shortened if ($has_long_field && GFCommon::safe_strlen($value) <= GFORMS_MAX_FIELD_LENGTH) { $sql = $wpdb->prepare("DELETE FROM {$lead_detail_long_table} WHERE lead_detail_id=%d", $lead_detail_id); $result = $wpdb->query($sql); if (false === $result) { return false; } } else { if ($has_long_field) { $result = $wpdb->update($lead_detail_long_table, array('value' => $value), array('lead_detail_id' => $lead_detail_id), array('%s'), array('%d')); if (false === $result) { return false; } } else { if (GFCommon::safe_strlen($value) > GFORMS_MAX_FIELD_LENGTH) { $result = $wpdb->insert($lead_detail_long_table, array('lead_detail_id' => $lead_detail_id, 'value' => $value), array('%d', '%s')); if (false === $result) { return false; } } } } } else { $result = $wpdb->insert($lead_detail_table, array('lead_id' => $lead_id, 'form_id' => $form_id, 'field_number' => $input_id, 'value' => $truncated_value), array('%d', '%d', '%F', '%s')); if (false === $result) { return false; } if (GFCommon::safe_strlen($value) > GFORMS_MAX_FIELD_LENGTH) { //read newly created lead detal id $lead_detail_id = $wpdb->insert_id; //insert long value $result = $wpdb->insert($lead_detail_long_table, array('lead_detail_id' => $lead_detail_id, 'value' => $value), array('%d', '%s')); if (false === $result) { return false; } } } } else { //Deleting long field if there is one $sql = $wpdb->prepare("DELETE {$lead_detail_long_table} FROM {$lead_detail_long_table}\n\t\t\t\tJOIN (\n\t\t\t\t\tSELECT ld.id FROM {$lead_detail_table} ld\n\t\t\t\t\tWHERE lead_id=%d AND field_number BETWEEN %s AND %s\n\t\t\t\t) tmp\n\t\t\t\tON tmp.id = {$lead_detail_long_table}.lead_detail_id", $lead_id, doubleval($input_id) - 0.0001, doubleval($input_id) + 0.0001); $result = $wpdb->query($sql); if ($result === false) { return false; } //Deleting details for this field $sql = $wpdb->prepare("DELETE FROM {$lead_detail_table} WHERE lead_id=%d AND field_number BETWEEN %s AND %s ", $lead_id, doubleval($input_id) - 0.0001, doubleval($input_id) + 0.0001); $result = $wpdb->query($sql); if (false === $result) { return false; } } return true; }
/** * Initialized Zoho CRM API if credentials are valid. * * @access public * @return bool */ public function initialize_api() { if (!is_null($this->api)) { return true; } /* Include the API library. */ if (!class_exists('Zoho_CRM')) { require_once 'includes/class-zohocrm.php'; } /* Get the plugin settings */ $settings = $this->get_plugin_settings(); /* If the auth token, return null. */ if (rgblank($settings['authToken'])) { return null; } $this->log_debug(__METHOD__ . "(): Validating API credentials."); $zohocrm = new Zoho_CRM($settings['authToken']); try { /* Run API test. */ $zohocrm->get_users(); /* Log that test passed. */ $this->log_debug(__METHOD__ . '(): API credentials are valid.'); /* Assign Zoho CRM object to the class. */ $this->api = $zohocrm; return true; } catch (Exception $e) { /* Log that test failed. */ $this->log_error(__METHOD__ . '(): API credentials are invalid; ' . $e->getMessage()); return false; } }
public static function payment_details_box($lead, $form) { ?> <!-- PAYMENT BOX --> <div id="submitdiv" class="stuffbox"> <h3 class="hndle" style="cursor:default;"> <span><?php echo $lead['transaction_type'] == 2 ? esc_html__('Subscription Details', 'gravityforms') : esc_html__('Payment Details', 'gravityforms'); ?> </span> </h3> <div class="inside"> <div id="submitcomment" class="submitbox"> <div id="minor-publishing" style="padding:10px;"> <?php $payment_status = apply_filters('gform_payment_status', $lead['payment_status'], $form, $lead); if (!empty($payment_status)) { ?> <div id="gf_payment_status" class="gf_payment_detail"> <?php esc_html_e('Status', 'gravityforms'); ?> : <span id="gform_payment_status"><?php echo $payment_status; // May contain HTML ?> </span> </div> <?php $payment_date = apply_filters('gform_payment_date', GFCommon::format_date($lead['payment_date'], false, 'Y/m/d', $lead['transaction_type'] != 2), $form, $lead); if (!empty($payment_date)) { ?> <div id="gf_payment_date" class="gf_payment_detail"> <?php echo $lead['transaction_type'] == 2 ? esc_html__('Start Date', 'gravityforms') : esc_html__('Date', 'gravityforms'); ?> : <span id='gform_payment_date'><?php echo $payment_date; // May contain HTML ?> </span> </div> <?php } $transaction_id = apply_filters('gform_payment_transaction_id', $lead['transaction_id'], $form, $lead); if (!empty($transaction_id)) { ?> <div id="gf_payment_transaction_id" class="gf_payment_detail"> <?php echo $lead['transaction_type'] == 2 ? esc_html__('Subscription Id', 'gravityforms') : esc_html__('Transaction Id', 'gravityforms'); ?> : <span id='gform_payment_transaction_id'><?php echo $transaction_id; // May contain HTML ?> </span> </div> <?php } $payment_amount = apply_filters('gform_payment_amount', GFCommon::to_money($lead['payment_amount'], $lead['currency']), $form, $lead); if (!rgblank($payment_amount)) { ?> <div id="gf_payment_amount" class="gf_payment_detail"> <?php echo $lead['transaction_type'] == 2 ? esc_html__('Recurring Amount', 'gravityforms') : esc_html__('Amount', 'gravityforms'); ?> : <span id='gform_payment_amount'><?php echo $payment_amount; // May contain HTML ?> </span> </div> <?php } } do_action('gform_payment_details', $form['id'], $lead); ?> </div> </div> </div> </div> <?php }
public static function confirmations_page() { $form_id = rgget('id'); $confirmation_id = rgget('cid'); if (!rgblank($confirmation_id)) { self::confirmations_edit_page($form_id, $confirmation_id); } else { self::confirmations_list_page($form_id); } }
/** * Initializes HipChat API if credentials are valid. * * @access public * @return bool */ public function initialize_api() { if (!is_null($this->api)) { return true; } /* Load the API library. */ if (!class_exists('HipChat')) { require_once 'includes/class-hipchat.php'; } /* Get the OAuth token. */ $oauth_token = $this->get_plugin_setting('oauth_token'); /* If the OAuth token, do not run a validation check. */ if (rgblank($oauth_token)) { return null; } $this->log_debug(__METHOD__ . '(): Validating API Info.'); /* Setup a new HipChat object with the API credentials. */ /** * Enable or disable Verification of Hipchat SSL * * @param bool True or False to verify SSL */ $verify_ssl = apply_filters('gform_hipchat_verify_ssl', true); $hipchat = new HipChat($oauth_token, $verify_ssl); /* Run an authentication test. */ if ($hipchat->auth_test()) { $this->api = $hipchat; $this->log_debug(__METHOD__ . '(): API credentials are valid.'); return true; } else { $this->log_error(__METHOD__ . '(): API credentials are invalid.'); return false; } }
public static function is_section_empty($section_field, $form, $lead) { $fields = self::get_section_fields($form, $section_field["id"]); if (!is_array($fields)) { return true; } foreach ($fields as $field) { $val = RGFormsModel::get_lead_field_value($lead, $field); $val = GFCommon::get_lead_field_display($field, $val, rgar($lead, 'currency')); if (!self::is_product_field($field["type"]) && !rgblank($val)) { return false; } } return true; }
public function signature_input($input, $field, $value, $lead_id, $form_id) { if ($field['type'] != 'signature') { return $input; } $unique_id = IS_ADMIN || $form_id == 0 ? "input_{$field['id']}" : 'input_' . $form_id . "_{$field['id']}"; $supports_canvas = true; require_once 'super_signature/Browser.php'; $browser = new Browser(); if ($browser->getBrowser() == Browser::BROWSER_IE) { $supports_canvas = $browser->getVersion() >= 9; } $bgcolor = rgempty('backgroundColor', $field) ? '#FFFFFF' : rgar($field, 'backgroundColor'); $bordercolor = rgempty('borderColor', $field) ? '#DDDDDD' : rgar($field, 'borderColor'); $pencolor = rgempty('penColor', $field) ? '#000000' : rgar($field, 'penColor'); $boxwidth = rgblank(rgget('boxWidth', $field)) ? '300' : rgar($field, 'boxWidth'); $borderstyle = rgempty('borderStyle', $field) ? 'Dashed' : rgar($field, 'borderStyle'); $borderwidth = rgblank(rgget('borderWidth', $field)) ? '2' : rgar($field, 'borderWidth'); $pensize = rgblank(rgget('penSize', $field)) ? '2' : rgar($field, 'penSize'); if (RG_CURRENT_VIEW != 'entry' && is_admin()) { //box width is hardcoded in the admin $input = '<style>' . ".top_label .gf_signature_container {width: 460px;} " . ".left_label .gf_signature_container, .right_label .gf_signature_container {width: 300px;} " . "</style>" . "<div style='display:-moz-inline-stack; display: inline-block; zoom: 1; *display: inline;'><div class='gf_signature_container' style='height:180px; border: {$borderwidth}px {$borderstyle} {$bordercolor}; background-color:{$bgcolor};'></div></div>"; // if frontend OR entry detail } else { $input = ''; if (RG_CURRENT_VIEW == 'entry') { //include super signature script when viewing the entry in the admin $input = "<script src='" . $this->get_base_url() . '/super_signature/ss.js?ver=' . $this->_version . "' type='text/javascript'></script>"; } $signature_filename = !empty($value) ? $value : rgpost("{$unique_id}_signature_filename"); if (!empty($signature_filename)) { $input .= "<div id='{$unique_id}_signature_image'>" . "<img src='" . $this->get_signature_url($signature_filename) . "' width='{$boxwidth}px'/>" . " <div>"; if (RG_CURRENT_VIEW == 'entry' && $value) { //include the links to download/delete image $input .= " <a href='" . $this->get_signature_url($signature_filename) . "' target='_blank' alt='" . __('Download file', 'gravityformssignature') . "' title='" . __('Download file', 'gravityformssignature') . "'><img src='" . GFCommon::get_base_url() . '/images/download.png' . "' /></a>" . " <a href='javascript:void(0);' alt='" . __('Delete file', 'gravityformssignature') . "' title='" . __('Delete file', 'gravityformssignature') . "' onclick='deleteSignature(" . $lead_id . ', ' . $field['id'] . ");' ><img src='" . GFCommon::get_base_url() . '/images/delete.png' . "' style='margin-left:8px;'/></a>"; } else { $input .= " <a href='#' onclick='jQuery(\"#{$unique_id}_signature_filename\").val(\"\"); jQuery(\"#{$unique_id}_signature_image\").hide(); jQuery(\"#{$unique_id}_Container\").show(); jQuery(\"#{$unique_id}_resetbutton\").show(); return false;'>" . __('sign again', 'gravityformssignature') . '</a>'; } $input .= ' </div>' . "</div>" . "<input type='hidden' value='{$signature_filename}' name='{$unique_id}_signature_filename' id='{$unique_id}_signature_filename'/>" . "<style type='text/css'>#{$unique_id}_resetbutton {display:none}</style>"; } $display = !empty($signature_filename) ? 'display:none;' : ''; $form = RGFormsModel::get_form_meta($form_id); $container_style = $form['labelPlacement'] == 'top_label' ? '' : "style='display:-moz-inline-stack; display: inline-block; zoom: 1; *display: inline;'"; $input .= "<div {$container_style}>\n\t\t\t\t\t<div id='{$unique_id}_Container' style='height:180px; width: {$boxwidth}px; {$display}' >\n\t\t\t\t\t\t<input type='hidden' class='gform_hidden' name='{$unique_id}_valid' id='{$unique_id}_valid' />"; if ($supports_canvas) { $input .= "<canvas id='{$unique_id}' width='{$boxwidth}' height='180'></canvas>"; } else { $input .= "<div id='{$unique_id}' style='width:{$boxwidth}px; height:180px; border:{$borderstyle} {$borderwidth}px {$bordercolor}; background-color:{$bgcolor};'></div>"; } $input .= "\n\t\t\t\t\t</div>\n\t\t\t\t </div>\n\t\t\t\t <script type='text/javascript'>" . "if(typeof SuperSignature != 'undefined'){" . "var obj{$unique_id} = new SuperSignature({IeModalFix: false, SignObject:'{$unique_id}',BackColor: '{$bgcolor}', PenSize: '{$pensize}', PenColor: '{$pencolor}',SignWidth: '{$boxwidth}',SignHeight: '180' ,BorderStyle:'{$borderstyle}',BorderWidth: '{$borderwidth}px',BorderColor: '{$bordercolor}', RequiredPoints: '15',ClearImage:'" . $this->get_base_url() . "/super_signature/refresh.png', PenCursor:'" . $this->get_base_url() . "/super_signature/pen.cur', Visible: 'true', ErrorMessage: '', StartMessage: '', SuccessMessage: ''});" . "obj{$unique_id}.Init();" . "jQuery('#gform_{$form_id}').submit(function(){" . " jQuery('#{$unique_id}_valid').val(obj{$unique_id}.IsValid() || jQuery('#{$unique_id}_signature_filename').val() ? '1' : '');" . "});" . "}" . "</script>"; } return $input; }
public static function all_leads_page() { //displaying lead detail page if lead id is in the query string if (rgget('lid') || !rgblank(rgget('pos'))) { require_once GFCommon::get_base_path() . "/entry_detail.php"; GFEntryDetail::lead_detail_page(); } else { require_once GFCommon::get_base_path() . "/entry_list.php"; GFEntryList::all_leads_page(); } }
public static function is_section_empty($section_field, $form, $lead) { $cache_key = "GFCommon::is_section_empty_" . $form["id"] . "_" . $section_field["id"]; $value = GFCache::get($cache_key); if ($value !== false) { return $value == true; } $fields = self::get_section_fields($form, $section_field["id"]); if (!is_array($fields)) { GFCache::set($cache_key, 1); return true; } foreach ($fields as $field) { $val = RGFormsModel::get_lead_field_value($lead, $field); $val = GFCommon::get_lead_field_display($field, $val, rgar($lead, 'currency')); if (!self::is_product_field($field["type"]) && !rgblank($val)) { GFCache::set($cache_key, 0); return false; } } GFCache::set($cache_key, 1); return true; }
public static function payment_details_box($lead, $form) { ?> <!-- PAYMENT BOX --> <div id="submitdiv" class="stuffbox"> <h3 class="hndle" style="cursor:default;"> <span><?php echo $lead['transaction_type'] == 2 ? esc_html__('Subscription Details', 'gravityforms') : esc_html__('Payment Details', 'gravityforms'); ?> </span> </h3> <div class="inside"> <div id="submitcomment" class="submitbox"> <div id="minor-publishing" style="padding:10px;"> <?php $payment_status = apply_filters('gform_payment_status', $lead['payment_status'], $form, $lead); if (!empty($payment_status)) { ?> <div id="gf_payment_status" class="gf_payment_detail"> <?php esc_html_e('Status', 'gravityforms'); ?> : <span id="gform_payment_status"><?php echo $payment_status; // May contain HTML ?> </span> </div> <?php /** * Allows for modification on the form payment date format * * @param array $form The Form object to filter through * @param array $lead The Lead object to filter through */ $payment_date = apply_filters('gform_payment_date', GFCommon::format_date($lead['payment_date'], false, 'Y/m/d', $lead['transaction_type'] != 2), $form, $lead); if (!empty($payment_date)) { ?> <div id="gf_payment_date" class="gf_payment_detail"> <?php echo $lead['transaction_type'] == 2 ? esc_html__('Start Date', 'gravityforms') : esc_html__('Date', 'gravityforms'); ?> : <span id='gform_payment_date'><?php echo $payment_date; // May contain HTML ?> </span> </div> <?php } /** * Allows filtering through a payment transaction ID * * @param int $lead['transaction_id'] The transaction ID that can be modified * @param array $form The Form object to be filtered when modifying the transaction ID * @param array $lead The Lead object to be filtered when modifying the transaction ID */ $transaction_id = apply_filters('gform_payment_transaction_id', $lead['transaction_id'], $form, $lead); if (!empty($transaction_id)) { ?> <div id="gf_payment_transaction_id" class="gf_payment_detail"> <?php echo $lead['transaction_type'] == 2 ? esc_html__('Subscription Id', 'gravityforms') : esc_html__('Transaction Id', 'gravityforms'); ?> : <span id='gform_payment_transaction_id'><?php echo $transaction_id; // May contain HTML ?> </span> </div> <?php } /** * Filter through the way the Payment Amount is rendered * * @param string $lead['payment_amount'] The payment amount taken from the lead object * @param string $lead['currency'] The payment currency taken from the lead object * @param array $form The Form onject to filter through * @param array $lead The lead object to filter through */ $payment_amount = apply_filters('gform_payment_amount', GFCommon::to_money($lead['payment_amount'], $lead['currency']), $form, $lead); if (!rgblank($payment_amount)) { ?> <div id="gf_payment_amount" class="gf_payment_detail"> <?php echo $lead['transaction_type'] == 2 ? esc_html__('Recurring Amount', 'gravityforms') : esc_html__('Amount', 'gravityforms'); ?> : <span id='gform_payment_amount'><?php echo $payment_amount; // May contain HTML ?> </span> </div> <?php } } /** * Fires after the Form Payment Details (The type of payment, the cost, the ID, etc) * * @param int $form['id'] The current Form ID * @param array $lead The current Lead object */ do_action('gform_payment_details', $form['id'], $lead); ?> </div> </div> </div> </div> <?php }
protected function validate_field_map_settings($field, $settings) { $field_map = rgar($field, 'field_map'); if (empty($field_map)) { return; } foreach ($field_map as $child_field) { if (!$this->setting_dependency_met(rgar($child_field, 'dependency'))) { continue; } $child_field['name'] = $this->get_mapped_field_name($field, $child_field['name']); $setting_value = rgar($settings, $child_field['name']); if (rgar($child_field, 'required') && rgblank($setting_value)) { $this->set_field_error($child_field); } else { if (rgar($child_field, 'validation_callback') && is_callable(rgar($child_field, 'validation_callback'))) { call_user_func(rgar($child_field, 'validation_callback'), $child_field, $field); } } } }
public static function prepopulate_form($form, $config) { global $bp; $mapped_fields = array(); $meta = rgar($config, 'meta'); $user = wp_get_current_user(); foreach (array('username', 'lastname', 'firstname', 'email') as $meta_key) { $field_id = rgar($meta, $meta_key); if ($field_id) { $mapped_fields[(string) $field_id] = $user->get(self::convert_to_wp_meta_key($meta_key)); } } $custom_meta = rgars($config, 'meta/user_meta') ? rgars($config, 'meta/user_meta') : array(); foreach ($custom_meta as $meta_item) { if (rgar($meta_item, 'meta_value')) { $field_id = rgar($meta_item, 'meta_value'); $mapped_fields[(string) $field_id] = $user->get(rgar($meta_item, 'meta_name')); } } if (function_exists("xprofile_get_field_data")) { $buddypress_meta = rgars($config, 'meta/buddypress_meta') ? rgars($config, 'meta/buddypress_meta') : array(); foreach ($buddypress_meta as $meta_item) { if (rgar($meta_item, 'meta_value')) { $field_id = rgar($meta_item, 'meta_value'); $value = xprofile_get_field_data(rgar($meta_item, 'meta_name'), $user->ID); $mapped_fields[(string) $field_id] = is_array($value) ? array_map('html_entity_decode', $value) : html_entity_decode($value); } } } $mapped_fields = apply_filters('gform_user_registration_user_data_pre_populate', $mapped_fields, $form, $config); // get all fields for cheap check inside field loop $mapped_field_ids = array_map('intval', array_keys($mapped_fields)); foreach ($form['fields'] as &$field) { if (!in_array($field['id'], $mapped_field_ids)) { continue; } $value = false; switch (RGFormsModel::get_input_type($field)) { case 'fileupload': $value = rgar($mapped_fields, $field['id']); $path_info = pathinfo($value); // check if file has been "deleted" via form UI $upload_files = json_decode(rgpost('gform_uploaded_files'), ARRAY_A); $input_name = "input_{$field['id']}"; if (is_array($upload_files) && array_key_exists($input_name, $upload_files) && !$upload_files[$input_name]) { continue; } // if $uploaded_files array is not set for this form at all, init as array if (!isset(RGFormsModel::$uploaded_files[$form['id']])) { RGFormsModel::$uploaded_files[$form['id']] = array(); } // check if this field's key has been set in the $uploaded_files array, if not add this file (otherwise, a new image may have been uploaded so don't overwrite) if (!isset(RGFormsModel::$uploaded_files[$form['id']]["input_{$field['id']}"])) { RGFormsModel::$uploaded_files[$form['id']]["input_{$field['id']}"] = $path_info['basename']; } break; case 'checkbox': $value = rgar($mapped_fields, $field['id']); $cb_values = array(); if (is_array($value)) { $cb_values = $value; } else { $inputs = $field['inputs']; foreach ($inputs as &$input) { $cb_values[] = rgar($mapped_fields, (string) $input['id']); } $field['inputs'] = $inputs; } $value = implode(',', $cb_values); break; case 'list': $value = maybe_unserialize(rgar($mapped_fields, $field['id'])); $list_values = array(); if (is_array($value)) { foreach ($value as $vals) { if (!is_array($vals)) { $vals = array($vals); } $list_values = array_merge($list_values, array_values($vals)); } $value = $list_values; } break; case 'date': $value = GFCommon::date_display(rgar($mapped_fields, $field['id']), $field['dateFormat'], false); break; default: // handle complex fields $inputs = $field instanceof GF_Field ? $field->get_entry_inputs() : rgar($field, 'inputs'); if (is_array($inputs)) { foreach ($inputs as &$input) { $filter_name = self::prepopulate_input($input['id'], rgar($mapped_fields, (string) $input['id'])); $field['allowsPrepopulate'] = true; $input['name'] = $filter_name; } $field['inputs'] = $inputs; } else { $value = is_array(rgar($mapped_fields, $field['id'])) ? implode(',', rgar($mapped_fields, $field['id'])) : rgar($mapped_fields, $field['id']); } } if (rgblank($value)) { continue; } $value = self::maybe_get_category_id($field, $value); $filter_name = self::prepopulate_input($field['id'], $value); $field['allowsPrepopulate'] = true; $field['inputName'] = $filter_name; } return $form; }
public static function validate(&$form, $field_values, $page_number = 0, &$failed_validation_page = 0) { $form = apply_filters('gform_pre_validation', $form); // validate form schedule if (self::validate_form_schedule($form)) { return false; } // validate entry limit if (self::validate_entry_limit($form)) { return false; } foreach ($form["fields"] as &$field) { //If a page number is specified, only validates fields that are on current page $field_in_other_page = $page_number > 0 && $field["pageNumber"] != $page_number; //validate fields with "no duplicate" functionality when they are present on pages before the current page. $validate_duplicate_feature = $field["noDuplicates"] && $page_number > 0 && $field["pageNumber"] <= $page_number; if ($field_in_other_page && !$validate_duplicate_feature) { continue; } //ignore validation if field is hidden or admin only if (RGFormsModel::is_field_hidden($form, $field, $field_values) || $field["adminOnly"]) { continue; } $value = RGFormsModel::get_field_value($field); //display error message if field is marked as required and the submitted value is empty if ($field["isRequired"] && self::is_empty($field, $form["id"])) { $field["failed_validation"] = true; $field["validation_message"] = empty($field["errorMessage"]) ? __("This field is required.", "gravityforms") : $field["errorMessage"]; } else { if ($field["noDuplicates"] && RGFormsModel::is_duplicate($form["id"], $field, $value)) { $field["failed_validation"] = true; //set page number so the failed field displays if on multi-page form $failed_validation_page = $field["pageNumber"]; $input_type = RGFormsModel::get_input_type($field); switch ($input_type) { case "date": $default_message = __("This date has already been taken. Please select a new date.", "gravityforms"); break; default: $default_message = is_array($value) ? __("This field requires an unique entry and the values you entered have been already been used.", "gravityforms") : sprintf(__("This field requires an unique entry and '%s' has already been used", "gravityforms"), $value); break; } $field["validation_message"] = apply_filters("gform_duplicate_message_{$form["id"]}", apply_filters("gform_duplicate_message", $default_message, $form), $form); } else { if (self::failed_state_validation($form["id"], $field, $value)) { $field["failed_validation"] = true; $field["validation_message"] = in_array($field["inputType"], array("singleproduct", "singleshipping", "hiddenproduct")) ? __("Please enter a valid value.", "gravityforms") : __("Invalid selection. Please select one of the available choices.", "gravityforms"); } else { switch (RGFormsModel::get_input_type($field)) { case "password": $password = $_POST["input_" . $field["id"]]; $confirm = $_POST["input_" . $field["id"] . "_2"]; if ($password != $confirm) { $field["failed_validation"] = true; $field["validation_message"] = __("Your passwords do not match.", "gravityforms"); } else { if (rgar($field, "passwordStrengthEnabled") && !rgempty("minPasswordStrength", $field) && !empty($password)) { $strength = $_POST["input_" . $field["id"] . "_strength"]; $levels = array("short" => 1, "bad" => 2, "good" => 3, "strong" => 4); if ($levels[$strength] < $levels[$field["minPasswordStrength"]]) { $field["failed_validation"] = true; $field["validation_message"] = empty($field["errorMessage"]) ? __("Your password does not meet the required strength. <br/>Hint: To make it stronger, use upper and lower case letters, numbers and symbols like ! \" ? \$ % ^ & ).", "gravityforms") : $field["errorMessage"]; } } } break; case "name": if ($field["isRequired"] && $field["nameFormat"] != "simple") { $first = $_POST["input_" . $field["id"] . "_3"]; $last = $_POST["input_" . $field["id"] . "_6"]; if (empty($first) || empty($last)) { $field["failed_validation"] = true; $field["validation_message"] = empty($field["errorMessage"]) ? __("This field is required. Please enter the first and last name.", "gravityforms") : $field["errorMessage"]; } } break; case "address": if ($field["isRequired"]) { $street = $_POST["input_" . $field["id"] . "_1"]; $city = $_POST["input_" . $field["id"] . "_3"]; $state = $_POST["input_" . $field["id"] . "_4"]; $zip = $_POST["input_" . $field["id"] . "_5"]; $country = $_POST["input_" . $field["id"] . "_6"]; if (empty($street) || empty($city) || empty($zip) || empty($state) && !$field["hideState"] || empty($country) && !$field["hideCountry"]) { $field["failed_validation"] = true; $field["validation_message"] = empty($field["errorMessage"]) ? __("This field is required. Please enter a complete address.", "gravityforms") : $field["errorMessage"]; } } break; case "creditcard": $card_number = rgpost("input_" . $field["id"] . "_1"); $expiration_date = rgpost("input_" . $field["id"] . "_2"); $security_code = rgpost("input_" . $field["id"] . "_3"); if (rgar($field, "isRequired") && (empty($card_number) || empty($security_code) || empty($expiration_date[0]) || empty($expiration_date[1]))) { $field["failed_validation"] = true; $field["validation_message"] = empty($field["errorMessage"]) ? __("Please enter your credit card information.", "gravityforms") : $field["errorMessage"]; } else { if (!empty($card_number)) { $card_type = GFCommon::get_card_type($card_number); $security_code = rgpost("input_" . $field["id"] . "_3"); if (empty($security_code)) { $field["failed_validation"] = true; $field["validation_message"] = __("Please enter your card's security code.", "gravityforms"); } else { if (!$card_type) { $field["failed_validation"] = true; $field["validation_message"] = __("Invalid credit card number.", "gravityforms"); } else { if (!GFCommon::is_card_supported($field, $card_type["slug"])) { $field["failed_validation"] = true; $field["validation_message"] = $card_type["name"] . " " . __("is not supported. Please enter one of the supported credit cards.", "gravityforms"); } } } } } break; case "email": if (!rgblank($value) && !GFCommon::is_valid_email($value)) { $field["failed_validation"] = true; $field["validation_message"] = empty($field["errorMessage"]) ? __("Please enter a valid email address.", "gravityforms") : $field["errorMessage"]; } else { if (rgget("emailConfirmEnabled", $field) && !empty($value)) { $confirm = rgpost("input_" . $field["id"] . "_2"); if ($confirm != $value) { $field["failed_validation"] = true; $field["validation_message"] = __("Your emails do not match.", "gravityforms"); } } } break; case "donation": case "price": if (!class_exists("RGCurrency")) { require_once "currency.php"; } $donation = GFCommon::to_number($value); if (!rgblank($value) && ($donation === false || $donation < 0)) { $field["failed_validation"] = true; $field["validation_message"] = empty($field["errorMessage"]) ? __("Please enter a valid amount.", "gravityforms") : $field["errorMessage"]; } break; case "number": if (!rgblank($value) && !self::validate_range($field, $value) && !GFCommon::has_field_calculation($field)) { $field["failed_validation"] = true; $field["validation_message"] = empty($field["errorMessage"]) ? GFCommon::get_range_message($field) : $field["errorMessage"]; } else { if ($field["type"] == "quantity" && intval($value) != $value) { $field["failed_validation"] = true; $field["validation_message"] = empty($field["errorMessage"]) ? __("Please enter a valid quantity. Quantity cannot contain decimals.", "gravityforms") : $field["errorMessage"]; } } break; case "phone": $regex = '/^\\D?(\\d{3})\\D?\\D?(\\d{3})\\D?(\\d{4})$/'; if ($field["phoneFormat"] == "standard" && !empty($value) && !preg_match($regex, $value)) { $field["failed_validation"] = true; if (!empty($field["errorMessage"])) { $field["validation_message"] = $field["errorMessage"]; } } break; case "date": if (is_array($value) && rgempty(0, $value) && rgempty(1, $value) && rgempty(2, $value)) { $value = null; } if (!empty($value)) { $format = empty($field["dateFormat"]) ? "mdy" : $field["dateFormat"]; $date = GFCommon::parse_date($value, $format); if (empty($date) || !self::checkdate($date["month"], $date["day"], $date["year"])) { $field["failed_validation"] = true; $format_name = ""; switch ($format) { case "mdy": $format_name = "mm/dd/yyyy"; break; case "dmy": $format_name = "dd/mm/yyyy"; break; case "dmy_dash": $format_name = "dd-mm-yyyy"; break; case "dmy_dot": $format_name = "dd.mm.yyyy"; break; case "ymd_slash": $format_name = "yyyy/mm/dd"; break; case "ymd_dash": $format_name = "yyyy-mm-dd"; break; case "ymd_dot": $format_name = "yyyy.mm.dd"; break; } $message = $field["dateType"] == "datepicker" ? sprintf(__("Please enter a valid date in the format (%s).", "gravityforms"), $format_name) : __("Please enter a valid date.", "gravityforms"); $field["validation_message"] = empty($field["errorMessage"]) ? $message : $field["errorMessage"]; } } break; case "time": //create variable values if time came in one field if (!is_array($value) && !empty($value)) { preg_match('/^(\\d*):(\\d*) ?(.*)$/', $value, $matches); $value = array(); $value[0] = $matches[1]; $value[1] = $matches[2]; } $hour = $value[0]; $minute = $value[1]; if (empty($hour) && empty($minute)) { break; } $is_valid_format = is_numeric($hour) && is_numeric($minute); $min_hour = rgar($field, "timeFormat") == "24" ? 0 : 1; $max_hour = rgar($field, "timeFormat") == "24" ? 23 : 12; if (!$is_valid_format || $hour < $min_hour || $hour > $max_hour || $minute < 0 || $minute >= 60) { $field["failed_validation"] = true; $field["validation_message"] = empty($field["errorMessage"]) ? __("Please enter a valid time.", "gravityforms") : $field["errorMessage"]; } break; case "website": if (empty($value) || $value == "http://") { $value = ""; if ($field["isRequired"]) { $field["failed_validation"] = true; $field["validation_message"] = empty($field["errorMessage"]) ? __("This field is required.", "gravityforms") : $field["errorMessage"]; } } if (!empty($value) && !GFCommon::is_valid_url($value)) { $field["failed_validation"] = true; $field["validation_message"] = empty($field["errorMessage"]) ? __("Please enter a valid Website URL (i.e. http://www.gravityforms.com).", "gravityforms") : $field["errorMessage"]; } break; case "captcha": switch ($field["captchaType"]) { case "simple_captcha": if (class_exists("ReallySimpleCaptcha")) { $prefix = $_POST["input_captcha_prefix_{$field["id"]}"]; $captcha_obj = GFCommon::get_simple_captcha(); if (!$captcha_obj->check($prefix, str_replace(" ", "", $value))) { $field["failed_validation"] = true; $field["validation_message"] = empty($field["errorMessage"]) ? __("The CAPTCHA wasn't entered correctly. Go back and try it again.", "gravityforms") : $field["errorMessage"]; } //removes old files in captcha folder (older than 1 hour); $captcha_obj->cleanup(); } break; case "math": $prefixes = explode(",", $_POST["input_captcha_prefix_{$field["id"]}"]); $captcha_obj = GFCommon::get_simple_captcha(); //finding first number $first = 0; for ($first = 0; $first < 10; $first++) { if ($captcha_obj->check($prefixes[0], $first)) { break; } } //finding second number $second = 0; for ($second = 0; $second < 10; $second++) { if ($captcha_obj->check($prefixes[2], $second)) { break; } } //if it is a +, perform the sum if ($captcha_obj->check($prefixes[1], "+")) { $result = $first + $second; } else { $result = $first - $second; } if (intval($result) != intval($value)) { $field["failed_validation"] = true; $field["validation_message"] = empty($field["errorMessage"]) ? __("The CAPTCHA wasn't entered correctly. Go back and try it again.", "gravityforms") : $field["errorMessage"]; } //removes old files in captcha folder (older than 1 hour); $captcha_obj->cleanup(); break; default: if (!function_exists("recaptcha_get_html")) { require_once GFCommon::get_base_path() . '/recaptchalib.php'; } $privatekey = get_option("rg_gforms_captcha_private_key"); $resp = recaptcha_check_answer($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); if (!$resp->is_valid) { $field["failed_validation"] = true; $field["validation_message"] = empty($field["errorMessage"]) ? __("The reCAPTCHA wasn't entered correctly. Go back and try it again.", "gravityforms") : $field["errorMessage"]; } } break; case "fileupload": case "post_image": $info = pathinfo($_FILES["input_" . $field["id"]]["name"]); $allowedExtensions = self::clean_extensions(explode(",", strtolower($field["allowedExtensions"]))); $extension = strtolower(rgget("extension", $info)); if (empty($field["allowedExtensions"]) && in_array($extension, array("php", "asp", "exe", "com", "htaccess"))) { $field["failed_validation"] = true; $field["validation_message"] = empty($field["errorMessage"]) ? __("The uploaded file type is not allowed.", "gravityforms") : $field["errorMessage"]; } else { if (!empty($field["allowedExtensions"]) && !empty($info["basename"]) && !in_array($extension, $allowedExtensions)) { $field["failed_validation"] = true; $field["validation_message"] = empty($field["errorMessage"]) ? sprintf(__("The uploaded file type is not allowed. Must be one of the following: %s", "gravityforms"), strtolower($field["allowedExtensions"])) : $field["errorMessage"]; } } break; case "calculation": case "singleproduct": case "hiddenproduct": $quantity_id = $field["id"] . ".3"; $quantity = rgget($quantity_id, $value); if ($field["isRequired"] && rgblank($quantity) && !rgar($field, "disableQuantity")) { $field["failed_validation"] = true; $field["validation_message"] = rgempty("errorMessage", $field) ? __("This field is required.", "gravityforms") : rgar($field, "errorMessage"); } else { if (!empty($quantity) && (!is_numeric($quantity) || intval($quantity) != floatval($quantity))) { $field["failed_validation"] = true; $field["validation_message"] = __("Please enter a valid quantity", "gravityforms"); } } break; case "radio": if (rgar($field, 'enableOtherChoice') && $value == 'gf_other_choice') { $value = rgpost("input_{$field['id']}_other"); } if ($field["isRequired"] && rgar($field, 'enableOtherChoice') && $value == GFCommon::get_other_choice_value()) { $field["failed_validation"] = true; $field["validation_message"] = empty($field["errorMessage"]) ? __("This field is required.", "gravityforms") : $field["errorMessage"]; } break; } } } } $custom_validation_result = apply_filters("gform_field_validation", array("is_valid" => rgar($field, "failed_validation") ? false : true, "message" => rgar($field, "validation_message")), $value, $form, $field); $custom_validation_result = apply_filters("gform_field_validation_{$form["id"]}", $custom_validation_result, $value, $form, $field); $custom_validation_result = apply_filters("gform_field_validation_{$form["id"]}_{$field["id"]}", $custom_validation_result, $value, $form, $field); $field["failed_validation"] = rgar($custom_validation_result, "is_valid") ? false : true; $field["validation_message"] = rgar($custom_validation_result, "message"); } $is_valid = true; foreach ($form["fields"] as $f) { if (rgar($f, "failed_validation")) { $is_valid = false; break; } } $validation_result = apply_filters("gform_validation_{$form["id"]}", apply_filters("gform_validation", array("is_valid" => $is_valid, "form" => $form))); $is_valid = $validation_result["is_valid"]; $form = $validation_result["form"]; return $is_valid; }
/** * @param $lead * @param $form * @return mixed */ public static function payment_details_box($lead, $form) { ?> <!-- PAYMENT BOX --> <div id="submitdiv" class="stuffbox"> <h3> <span class="hndle"><?php echo $lead["transaction_type"] == 2 ? __("Subscription Details", "gravityforms") : __("Payment Details", "gravityforms"); ?> </span> </h3> <div class="inside"> <div id="submitcomment" class="submitbox"> <div id="minor-publishing" style="padding:10px;"> <br/> <?php if (!empty($lead["payment_status"])) { echo __("Status", "gravityforms"); ?> : <span id="gform_payment_status"><?php echo apply_filters("gform_payment_status", $lead["payment_status"], $form, $lead); ?> </span> <br/><br/> <?php if (!empty($lead["payment_date"])) { echo $lead["transaction_type"] == 2 ? __("Start Date", "gravityforms") : __("Date", "gravityforms"); ?> : <?php echo GFCommon::format_date($lead["payment_date"], false, "Y/m/d", $lead["transaction_type"] != 2); ?> <br/><br/> <?php } if (!empty($lead["transaction_id"])) { echo $lead["transaction_type"] == 2 ? __("Subscription Id", "gravityforms") : __("Transaction Id", "gravityforms"); ?> : <?php echo $lead["transaction_id"]; ?> <br/><br/> <?php } if (!rgblank($lead["payment_amount"])) { echo $lead["transaction_type"] == 2 ? __("Recurring Amount", "gravityforms") : __("Amount", "gravityforms"); ?> : <?php echo GFCommon::to_money($lead["payment_amount"], $lead["currency"]); ?> <br/><br/> <?php } } do_action("gform_payment_details", $form["id"], $lead); ?> </div> </div> </div> </div> <?php }
public static function create_post($form, &$lead) { $has_post_field = false; foreach ($form["fields"] as $field) { $is_hidden = self::is_field_hidden($form, $field, array(), $lead); if (!$is_hidden && in_array($field["type"], array("post_category", "post_title", "post_content", "post_excerpt", "post_tags", "post_custom_field", "post_image"))) { $has_post_field = true; break; } } //if this form does not have any post fields, don't create a post if (!$has_post_field) { return $lead; } //processing post fields $post_data = self::get_post_fields($form, $lead); //allowing users to change post fields before post gets created $post_data = apply_filters("gform_post_data_{$form["id"]}", apply_filters("gform_post_data", $post_data, $form, $lead), $form, $lead); //adding default title if none of the required post fields are in the form (will make sure wp_insert_post() inserts the post) if (empty($post_data["post_title"]) && empty($post_data["post_content"]) && empty($post_data["post_excerpt"])) { $post_data["post_title"] = self::get_default_post_title(); } //inserting post if (GFCommon::is_bp_active()) { //disable buddy press action so save_post is not called because the post data is not yet complete at this point remove_action("save_post", "bp_blogs_record_post"); } $post_id = wp_insert_post($post_data); //adding form id and entry id hidden custom fields add_post_meta($post_id, "_gform-form-id", $form["id"]); add_post_meta($post_id, "_gform-entry-id", $lead["id"]); //creating post images $post_images = array(); foreach ($post_data["images"] as $image) { $image_meta = array("post_excerpt" => $image["caption"], "post_content" => $image["description"]); //adding title only if it is not empty. It will default to the file name if it is not in the array if (!empty($image["title"])) { $image_meta["post_title"] = $image["title"]; } if (!empty($image["url"])) { $media_id = self::media_handle_upload($image["url"], $post_id, $image_meta); if ($media_id) { //save media id for post body/title template variable replacement (below) $post_images[$image["field_id"]] = $media_id; $lead[$image["field_id"]] .= "|:|{$media_id}"; // set featured image $field = RGFormsModel::get_field($form, $image["field_id"]); if (rgar($field, 'postFeaturedImage')) { set_post_thumbnail($post_id, $media_id); } } } } //adding custom fields foreach ($post_data["post_custom_fields"] as $meta_name => $meta_value) { if (!is_array($meta_value)) { $meta_value = array($meta_value); } $meta_index = 0; foreach ($meta_value as $value) { $custom_field = self::get_custom_field($form, $meta_name, $meta_index); //replacing template variables if template is enabled if ($custom_field && rgget("customFieldTemplateEnabled", $custom_field)) { //replacing post image variables $value = GFCommon::replace_variables_post_image($custom_field["customFieldTemplate"], $post_images, $lead); //replacing all other variables $value = GFCommon::replace_variables($value, $form, $lead, false, false, false); // replace conditional shortcodes $value = do_shortcode($value); } switch (RGFormsModel::get_input_type($custom_field)) { case "list": $value = maybe_unserialize($value); if (is_array($value)) { foreach ($value as $item) { if (is_array($item)) { $item = implode("|", $item); } if (!rgblank($item)) { add_post_meta($post_id, $meta_name, $item); } } } break; case "multiselect": case "checkbox": $value = explode(",", $value); if (is_array($value)) { foreach ($value as $item) { if (!rgblank($item)) { add_post_meta($post_id, $meta_name, $item); } } } break; case "date": $value = GFCommon::date_display($value, rgar($custom_field, "dateFormat")); if (!rgblank($value)) { add_post_meta($post_id, $meta_name, $value); } break; default: if (!rgblank($value)) { add_post_meta($post_id, $meta_name, $value); } break; } $meta_index++; } } $has_content_field = sizeof(GFCommon::get_fields_by_type($form, array("post_content"))) > 0; $has_title_field = sizeof(GFCommon::get_fields_by_type($form, array("post_title"))) > 0; //if a post field was configured with a content or title template, process template if (rgar($form, "postContentTemplateEnabled") && $has_content_field || rgar($form, "postTitleTemplateEnabled") && $has_title_field) { $post = get_post($post_id); if ($form["postContentTemplateEnabled"] && $has_content_field) { //replacing post image variables $post_content = GFCommon::replace_variables_post_image($form["postContentTemplate"], $post_images, $lead); //replacing all other variables $post_content = GFCommon::replace_variables($post_content, $form, $lead, false, false, false); //updating post content $post->post_content = $post_content; } if ($form["postTitleTemplateEnabled"] && $has_title_field) { //replacing post image variables $post_title = GFCommon::replace_variables_post_image($form["postTitleTemplate"], $post_images, $lead); //replacing all other variables $post_title = GFCommon::replace_variables($post_title, $form, $lead, false, false, false); // replace conditional shortcodes $post_title = do_shortcode($post_title); //updating post $post->post_title = $post_title; $post->post_name = $post_title; } if (GFCommon::is_bp_active()) { //re-enable buddy press action for save_post since the post data is complete at this point add_action('save_post', 'bp_blogs_record_post', 10, 2); } wp_update_post($post); } //adding post format if (current_theme_supports('post-formats') && rgar($form, 'postFormat')) { $formats = get_theme_support('post-formats'); $post_format = rgar($form, 'postFormat'); if (is_array($formats)) { $formats = $formats[0]; if (in_array($post_format, $formats)) { set_post_format($post_id, $post_format); } else { if ('0' == $post_format) { set_post_format($post_id, false); } } } } //update post_id field if a post was created $lead["post_id"] = $post_id; self::update_lead($lead); return $post_id; }
private static function remove_blank_custom_fields($merge_vars) { $i = 0; $count = count($merge_vars); for ($i = 0; $i < $count; $i++) { if (rgblank($merge_vars[$i]['value'])) { unset($merge_vars[$i]); } } //resort the array because items could have been removed, this will give an error from CRM if the keys are not in numeric sequence sort($merge_vars); return $merge_vars; }
public static function all_leads_page() { if (self::maybe_display_installation_wizard()) { return; } $view = rgget('view'); $lead_id = rgget('lid'); if ($view == 'entry' && (rgget('lid') || !rgblank(rgget('pos')))) { require_once GFCommon::get_base_path() . '/entry_detail.php'; GFEntryDetail::lead_detail_page(); } else { if ($view == 'entries' || empty($view)) { require_once GFCommon::get_base_path() . '/entry_list.php'; GFEntryList::all_leads_page(); } else { $form_id = rgget('id'); /** * Fires when viewing entries of a certain form * */ do_action('gform_entries_view', $view, $form_id, $lead_id); } } }
/** * Returns the field ID of the first field of the desired type. * * @access public * @param string $field_type * @param int $subfield_id (default: null) * @param int $form_id (default: null) * @return string */ public function get_first_field_by_type($field_type, $subfield_id = null, $form_id = null, $return_first_only = true) { /* Get the current form ID. */ if (rgblank($form_id)) { $form_id = rgget('id'); } /* Get the form. */ $form = GFAPI::get_form($form_id); /* Get the request field type for the form. */ $fields = GFAPI::get_fields_by_type($form, array($field_type)); if (count($fields) == 0 || count($fields) > 1 && $return_first_only) { return null; } else { if (rgblank($subfield_id)) { return $fields[0]->id; } else { return $fields[0]->id . '.' . $subfield_id; } } }