/**
  * Update the post categories based on all post category fields
  *
  * @since 1.17
  *
  * @param array $form Gravity Forms form array
  * @param int $entry_id Numeric ID of the entry that was updated
  *
  * @return array|false|WP_Error Array of term taxonomy IDs of affected categories. WP_Error or false on failure. false if there are no post category fields or connected post.
  */
 public function set_post_categories($form = array(), $entry_id = 0)
 {
     $entry = GFAPI::get_entry($entry_id);
     $post_id = rgar($entry, 'post_id');
     if (empty($post_id)) {
         return false;
     }
     $return = false;
     $post_category_fields = GFAPI::get_fields_by_type($form, 'post_category');
     if ($post_category_fields) {
         $updated_categories = array();
         foreach ($post_category_fields as $field) {
             // Get the value of the field, including $_POSTed value
             $field_cats = RGFormsModel::get_field_value($field);
             $field_cats = is_array($field_cats) ? array_values($field_cats) : (array) $field_cats;
             $field_cats = gv_map_deep($field_cats, 'intval');
             $updated_categories = array_merge($updated_categories, array_values($field_cats));
         }
         // Remove `0` values from intval()
         $updated_categories = array_filter($updated_categories);
         /**
          * @filter `gravityview/edit_entry/post_categories/append` Should post categories be added to or replaced?
          * @since 1.17
          * @param bool $append If `true`, don't delete existing categories, just add on. If `false`, replace the categories with the submitted categories. Default: `false`
          */
         $append = apply_filters('gravityview/edit_entry/post_categories/append', false);
         $return = wp_set_post_categories($post_id, $updated_categories, $append);
     }
     return $return;
 }
 /**
  * Check if the iDEAL condition is true
  *
  * @param mixed $form
  * @param mixed $feed
  */
 public static function is_condition_true($form, $feed)
 {
     if (!$feed->condition_enabled) {
         return true;
     }
     $field = RGFormsModel::get_field($form, $feed->condition_field_id);
     // Unknown field
     if (empty($field)) {
         return true;
     }
     $is_hidden = RGFormsModel::is_field_hidden($form, $field, array());
     // Ignore condition if the field is hidden
     if ($is_hidden) {
         return false;
     }
     $value = RGFormsModel::get_field_value($field, array());
     $is_match = RGFormsModel::is_value_match($value, $feed->condition_value);
     switch ($feed->condition_operator) {
         case Pronamic_WP_Pay_Extensions_GravityForms_GravityForms::OPERATOR_IS:
             $result = $is_match;
             break;
         case Pronamic_WP_Pay_Extensions_GravityForms_GravityForms::OPERATOR_IS_NOT:
             $result = !$is_match;
             break;
         default:
             $result = true;
     }
     return $result;
 }
Beispiel #3
0
 /**
  * Check if the iDEAL condition is true
  *
  * @param mixed $form
  * @param mixed $feed
  */
 public static function is_condition_true($form, $feed)
 {
     $result = true;
     if ($feed->condition_enabled) {
         $field = RGFormsModel::get_field($form, $feed->condition_field_id);
         if (empty($field)) {
             // unknown field
             $result = true;
         } else {
             $is_hidden = RGFormsModel::is_field_hidden($form, $field, array());
             if ($is_hidden) {
                 // if conditional is enabled, but the field is hidden, ignore conditional
                 $result = false;
             } else {
                 $value = RGFormsModel::get_field_value($field, array());
                 $is_match = RGFormsModel::is_value_match($value, $feed->condition_value);
                 switch ($feed->condition_operator) {
                     case Pronamic_WP_Pay_Extensions_GravityForms_GravityForms::OPERATOR_IS:
                         $result = $is_match;
                         break;
                     case Pronamic_WP_Pay_Extensions_GravityForms_GravityForms::OPERATOR_IS_NOT:
                         $result = !$is_match;
                         break;
                     default:
                         // unknown operator
                         $result = true;
                         break;
                 }
             }
         }
     } else {
         // condition is disabled, result is true
         $result = true;
     }
     return $result;
 }
Beispiel #4
0
 public static function validate(&$form, $field_values, $page_number = 0)
 {
     $is_valid = true;
     foreach ($form["fields"] as &$field) {
         //If a page number is specified, only validates fields that are on current page
         if ($page_number > 0 && $field["pageNumber"] != $page_number) {
             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"];
             $is_valid = false;
         } else {
             if ($field["noDuplicates"] && RGFormsModel::is_duplicate($form["id"], $field, $value)) {
                 $field["failed_validation"] = true;
                 $field["validation_message"] = is_array($value) ? apply_filters("gform_duplicate_message_{$form["id"]}", apply_filters("gform_duplicate_message", __("This field requires an unique entry and the values you entered have been already been used", "gravityforms"), $form), $form) : apply_filters("gform_duplicate_message_{$form["id"]}", apply_filters("gform_duplicate_message", sprintf(__("This field requires an unique entry and '%s' has already been used", "gravityforms"), $value), $form), $form);
                 $is_valid = false;
             } else {
                 if (self::failed_state_validation($form["id"], $field, $value)) {
                     $field["failed_validation"] = true;
                     $field["validation_message"] = in_array($field["inputType"], array("singleproduct", "singleshipping")) ? __("Please enter a valid value.", "gravityforms") : __("Invalid selection. Please select one of the available choices.", "gravityforms");
                     $is_valid = false;
                 } 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");
                                 $is_valid = false;
                             } else {
                                 if ($field["passwordStrengthEnabled"] && !empty($field["minPasswordStrength"]) && !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"];
                                         $is_valid = false;
                                     }
                                 }
                             }
                             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"];
                                     $is_valid = false;
                                 }
                             }
                             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"];
                                     $is_valid = false;
                                 }
                             }
                             break;
                         case "email":
                             if (!empty($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"];
                                 $is_valid = false;
                             } 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");
                                         $is_valid = false;
                                     }
                                 }
                             }
                             break;
                         case "donation":
                         case "price":
                             if (!class_exists("RGCurrency")) {
                                 require_once "currency.php";
                             }
                             $donation = GFCommon::to_number($value);
                             if (!empty($value) && ($donation === false || $donation <= 0)) {
                                 $field["failed_validation"] = true;
                                 $field["validation_message"] = empty($field["errorMessage"]) ? __("Please enter a valid donation", "gravityforms") : $field["errorMessage"];
                                 $is_valid = false;
                             }
                             break;
                         case "number":
                             if (trim($value) != '' && !self::validate_range($field, $value)) {
                                 $field["failed_validation"] = true;
                                 $field["validation_message"] = empty($field["errorMessage"]) ? GFCommon::get_range_message($field) : $field["errorMessage"];
                                 $is_valid = false;
                             }
                             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"];
                                 }
                                 $is_valid = false;
                             }
                             break;
                         case "date":
                             if (is_array($value) && empty($value[0])) {
                                 $value = null;
                             }
                             if (!empty($value)) {
                                 $format = empty($field["dateFormat"]) ? "mdy" : $field["dateFormat"];
                                 $date = GFCommon::parse_date($value, $format);
                                 if (empty($date) || !checkdate($date["month"], $date["day"], $date["year"])) {
                                     $field["failed_validation"] = true;
                                     $field["validation_message"] = empty($field["errorMessage"]) ? sprintf(__("Please enter a valid date in the format (%s).", "gravityforms"), $format == "mdy" ? "mm/dd/yyyy" : "dd/mm/yyyy") : $field["errorMessage"];
                                     $is_valid = false;
                                 }
                             }
                             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);
                             if (!$is_valid_format || $hour <= 0 || $hour > 12 || $minute < 0 || $minute >= 60) {
                                 $field["failed_validation"] = true;
                                 $field["validation_message"] = empty($field["errorMessage"]) ? __("Please enter a valid time.", "gravityforms") : $field["errorMessage"];
                                 $is_valid = false;
                             }
                             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"];
                                     $is_valid = false;
                                 }
                             }
                             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"];
                                 $is_valid = false;
                             }
                             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"];
                                             $is_valid = false;
                                         }
                                         //removes current captcha file
                                         $captcha_obj->remove($prefix);
                                         //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"];
                                         $is_valid = false;
                                     }
                                     //removes current captcha file
                                     $captcha_obj->remove($prefix);
                                     //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"];
                                         $is_valid = false;
                                     }
                             }
                             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"];
                                 $is_valid = false;
                             } 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"];
                                     $is_valid = false;
                                 }
                             }
                             break;
                         case "singleproduct":
                             $quantity = rgget($field["id"] . "3", $value);
                             if (empty($quantity)) {
                                 $quantity = 0;
                             }
                             if (!is_numeric($quantity) || intval($quantity) != floatval($quantity)) {
                                 $field["failed_validation"] = true;
                                 $field["validation_message"] = __("Please enter a valid quantity", "gravityforms");
                                 $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;
 }
Beispiel #5
0
 public static function conditions_met($form, $zap)
 {
     $zap = $zap["meta"];
     $operator = isset($zap["zapier_conditional_operator"]) ? $zap["zapier_conditional_operator"] : "";
     $field = RGFormsModel::get_field($form, $zap["zapier_conditional_field_id"]);
     if (empty($field) || !$zap["zapier_conditional_enabled"]) {
         return true;
     }
     // if conditional is enabled, but the field is hidden, ignore conditional
     $is_visible = !RGFormsModel::is_field_hidden($form, $field, array());
     $field_value = RGFormsModel::get_field_value($field, array());
     $is_value_match = RGFormsModel::is_value_match($field_value, $zap["zapier_conditional_value"], $operator);
     $go_to_zapier = $is_value_match && $is_visible;
     return $go_to_zapier;
 }
 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;
 }
Beispiel #7
0
 public static function has_paypal_condition($form, $config)
 {
     $config = $config["meta"];
     $operator = isset($config["paypal_conditional_operator"]) ? $config["paypal_conditional_operator"] : "";
     $field = RGFormsModel::get_field($form, $config["paypal_conditional_field_id"]);
     if (empty($field) || !$config["paypal_conditional_enabled"]) {
         return true;
     }
     // if conditional is enabled, but the field is hidden, ignore conditional
     $is_visible = !RGFormsModel::is_field_hidden($form, $field, array());
     $field_value = RGFormsModel::get_field_value($field, array());
     $is_value_match = RGFormsModel::is_value_match($field_value, $config["paypal_conditional_value"], $operator);
     $go_to_paypal = $is_value_match && $is_visible;
     return $go_to_paypal;
 }
 /**
  * Make validation work for Edit Entry
  *
  * Because we're calling the GFFormDisplay::validate() in an unusual way (as a front-end
  * form pretending to be a back-end form), validate() doesn't know we _can't_ edit post
  * fields. This goes through all the fields and if they're an invalid post field, we
  * set them as valid. If there are still issues, we'll return false.
  *
  * @param  [type] $validation_results [description]
  * @return [type]                     [description]
  */
 function custom_validation($validation_results)
 {
     do_action('gravityview_log_debug', 'GravityView_Edit_Entry[custom_validation] Validation results: ', $validation_results);
     do_action('gravityview_log_debug', 'GravityView_Edit_Entry[custom_validation] $_POSTed data (sanitized): ', esc_html(print_r($_POST, true)));
     $gv_valid = true;
     foreach ($validation_results['form']['fields'] as $key => &$field) {
         $value = RGFormsModel::get_field_value($field);
         $field_type = RGFormsModel::get_input_type($field);
         // Validate always
         switch ($field_type) {
             case 'fileupload':
                 // in case nothing is uploaded but there are already files saved
                 if (!empty($field->failed_validation) && !empty($field->isRequired) && !empty($value)) {
                     $field->failed_validation = false;
                     unset($field->validation_message);
                 }
                 // validate if multi file upload reached max number of files [maxFiles] => 2
                 if (rgar($field, 'maxFiles') && rgar($field, 'multipleFiles')) {
                     $input_name = 'input_' . $field->id;
                     //uploaded
                     $file_names = isset(GFFormsModel::$uploaded_files[$validation_results['form']['id']][$input_name]) ? GFFormsModel::$uploaded_files[$validation_results['form']['id']][$input_name] : array();
                     //existent
                     $entry = $this->get_entry();
                     $value = NULL;
                     if (isset($entry[$field->id])) {
                         $value = json_decode($entry[$field->id], true);
                     }
                     // count uploaded files and existent entry files
                     $count_files = count($file_names) + count($value);
                     if ($count_files > $field->maxFiles) {
                         $field->validation_message = __('Maximum number of files reached', 'gravityview');
                         $field->failed_validation = 1;
                         $gv_valid = false;
                         // in case of error make sure the newest upload files are removed from the upload input
                         GFFormsModel::$uploaded_files[$validation_results['form']['id']] = null;
                     }
                 }
                 break;
         }
         // This field has failed validation.
         if (!empty($field->failed_validation)) {
             do_action('gravityview_log_debug', 'GravityView_Edit_Entry[custom_validation] Field is invalid.', array('field' => $field, 'value' => $value));
             switch ($field_type) {
                 // Captchas don't need to be re-entered.
                 case 'captcha':
                     // Post Image fields aren't editable, so we un-fail them.
                 // Post Image fields aren't editable, so we un-fail them.
                 case 'post_image':
                     $field->failed_validation = false;
                     unset($field->validation_message);
                     break;
             }
             // You can't continue inside a switch, so we do it after.
             if (empty($field->failed_validation)) {
                 continue;
             }
             // checks if the No Duplicates option is not validating entry against itself, since
             // we're editing a stored entry, it would also assume it's a duplicate.
             if (!empty($field->noDuplicates)) {
                 $entry = $this->get_entry();
                 // If the value of the entry is the same as the stored value
                 // Then we can assume it's not a duplicate, it's the same.
                 if (!empty($entry) && $value == $entry[$field->id]) {
                     //if value submitted was not changed, then don't validate
                     $field->failed_validation = false;
                     unset($field->validation_message);
                     do_action('gravityview_log_debug', 'GravityView_Edit_Entry[custom_validation] Field not a duplicate; it is the same entry.', $entry);
                     continue;
                 }
             }
             // if here then probably we are facing the validation 'At least one field must be filled out'
             if (GFFormDisplay::is_empty($field, $this->form_id) && empty($field->isRequired)) {
                 unset($field->validation_message);
                 $field->validation_message = false;
                 continue;
             }
             $gv_valid = false;
         }
     }
     $validation_results['is_valid'] = $gv_valid;
     do_action('gravityview_log_debug', 'GravityView_Edit_Entry[custom_validation] Validation results.', $validation_results);
     // We'll need this result when rendering the form ( on GFFormDisplay::get_form )
     $this->form_after_validation = $validation_results['form'];
     return $validation_results;
 }
Beispiel #9
0
 public static function assign_group_allowed($form, $settings, $grouping, $group)
 {
     $config = $settings["meta"];
     $operator = $config["groups"][$grouping][$group]["operator"];
     $decision = $config["groups"][$grouping][$group]["decision"];
     $field = RGFormsModel::get_field($form, $config["groups"][$grouping][$group]["field_id"]);
     $field_value = RGFormsModel::get_field_value($field, array());
     $is_value_match = RGFormsModel::is_value_match($field_value, $config["groups"][$grouping][$group]["value"]);
     if (!$config["groups"][$grouping][$group]["enabled"]) {
         return false;
     } else {
         if ($decision == "always" || empty($field)) {
             return true;
         } else {
             if ($decision == "if" && ($operator == "is" && $is_value_match || $operator == "isnot" && !$is_value_match)) {
                 return true;
             }
         }
     }
     return false;
 }
 /**
  * @param $form
  * @param $feed
  *
  * @return bool
  */
 public function has_stripe_condition($form, $feed)
 {
     $feed = $feed['meta'];
     $operator = $feed['stripe_conditional_operator'];
     $field = RGFormsModel::get_field($form, $feed['stripe_conditional_field_id']);
     if (empty($field) || !$feed['stripe_conditional_enabled']) {
         return true;
     }
     // if conditional is enabled, but the field is hidden, ignore conditional
     $is_visible = !RGFormsModel::is_field_hidden($form, $field, array());
     //TODO: if !is_visible then skip field_value stuff
     $field_value = RGFormsModel::get_field_value($field, array());
     $is_value_match = RGFormsModel::is_value_match($field_value, $feed['stripe_conditional_value'], $operator);
     $do_stripe = $is_value_match && $is_visible;
     return $do_stripe;
 }
Beispiel #11
0
 public static function validate(&$form, $field_values)
 {
     $is_valid = true;
     foreach ($form["fields"] as &$field) {
         //ignore validation if field is hidden
         if (RGFormsModel::is_field_hidden($form, $field, $field_values)) {
             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)) {
             $field["failed_validation"] = true;
             $field["validation_message"] = empty($field["errorMessage"]) ? __("This field is required. Please enter a value.", "gravityforms") : $field["errorMessage"];
             $is_valid = false;
         } else {
             if ($field["noDuplicates"] && RGFormsModel::is_duplicate($form["id"], $field, $value)) {
                 $field["failed_validation"] = true;
                 $field["validation_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", $value), "gravityforms");
                 $is_valid = false;
             } else {
                 switch (RGFormsModel::get_input_type($field)) {
                     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"];
                                 $is_valid = false;
                             }
                         }
                         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($state) || empty($zip) || empty($country)) {
                                 $field["failed_validation"] = true;
                                 $field["validation_message"] = empty($field["errorMessage"]) ? __("This field is required. Please enter a complete address.", "gravityforms") : $field["errorMessage"];
                                 $is_valid = false;
                             }
                         }
                         break;
                     case "email":
                         if (!empty($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"];
                             $is_valid = false;
                         }
                         break;
                     case "number":
                         if (trim($value) != '' && !self::validate_range($field, $value)) {
                             $field["failed_validation"] = true;
                             $field["validation_message"] = empty($field["errorMessage"]) ? GFCommon::get_range_message($field) : $field["errorMessage"];
                             $is_valid = false;
                         }
                         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"];
                             }
                             $is_valid = false;
                         }
                         break;
                     case "date":
                         if (is_array($value) && empty($value[0])) {
                             $value = null;
                         }
                         if (!empty($value)) {
                             $format = empty($field["dateFormat"]) ? "mdy" : $field["dateFormat"];
                             $date = GFCommon::parse_date($value, $format);
                             if (empty($date) || !checkdate($date["month"], $date["day"], $date["year"])) {
                                 $field["failed_validation"] = true;
                                 $field["validation_message"] = empty($field["errorMessage"]) ? __(sprintf("Please enter a valid date in the format (%s).", $format == "mdy" ? "mm/dd/yyyy" : "dd/mm/yyyy"), "gravityforms") : $field["errorMessage"];
                                 $is_valid = false;
                             }
                         }
                         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);
                         if (!$is_valid_format || $hour <= 0 || $hour > 12 || $minute < 0 || $minute >= 60) {
                             $field["failed_validation"] = true;
                             $field["validation_message"] = empty($field["errorMessage"]) ? __("Please enter a valid time.", "gravityforms") : $field["errorMessage"];
                             $is_valid = false;
                         }
                         break;
                     case "website":
                         if ($value == "http://") {
                             $value = "";
                             if ($field["isRequired"]) {
                                 $field["failed_validation"] = true;
                                 $field["validation_message"] = empty($field["errorMessage"]) ? __("This field is required. Please enter a value.", "gravityforms") : $field["errorMessage"];
                                 $is_valid = false;
                             }
                         }
                         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"];
                             $is_valid = false;
                         }
                         break;
                     case "captcha":
                         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"];
                             $is_valid = false;
                         }
                         break;
                     case "fileupload":
                     case "post_image":
                         $info = pathinfo($_FILES["input_" . $field["id"]]["name"]);
                         $allowedExtensions = self::clean_extensions(explode(",", strtolower($field["allowedExtensions"])));
                         $extension = strtolower($info["extension"]);
                         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"];
                             $is_valid = false;
                         } 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"];
                                 $is_valid = false;
                             }
                         }
                         break;
                 }
             }
         }
     }
     return $is_valid;
 }
Beispiel #12
0
 public static function is_optin($form, $settings, $entry)
 {
     $config = $settings["meta"];
     $field = RGFormsModel::get_field($form, $config["optin_field_id"]);
     if (empty($field) || !$config["optin_enabled"]) {
         return true;
     }
     $operator = isset($config["optin_operator"]) ? $config["optin_operator"] : "";
     $field_value = RGFormsModel::get_field_value($field, array());
     $is_value_match = RGFormsModel::is_value_match($field_value, $config["optin_value"], $operator);
     $is_visible = !RGFormsModel::is_field_hidden($form, $field, array(), $entry);
     $is_optin = $is_value_match && $is_visible;
     return $is_optin;
 }
 public function get_issuer_id()
 {
     $fields = GFCommon::get_fields_by_type($this->form, array(Pronamic_WP_Pay_Extensions_GravityForms_IssuersField::TYPE));
     foreach ($fields as $field) {
         if (!RGFormsModel::is_field_hidden($this->form, $field, array())) {
             return RGFormsModel::get_field_value($field);
         }
     }
 }
 public static function save_incomplete_submission($form, $entry, $field_values, $page_number, $files, $form_unique_id, $ip, $source_url, $resume_token = '')
 {
     if (!is_array($form['fields'])) {
         return;
     }
     global $wpdb;
     $table = self::get_incomplete_submissions_table_name();
     $submitted_values = array();
     foreach ($form['fields'] as $field) {
         /* @var GF_Field $field */
         if ($field->type == 'creditcard') {
             continue;
         }
         $submitted_values[$field->id] = RGFormsModel::get_field_value($field, $field_values);
     }
     /**
      * Allows the modification of submitted values before the incomplete submission is saved.
      *
      * @since 1.9
      *
      * @param array $submitted_values The submitted values
      * @param array $form             The Form object
      */
     $submitted_values = apply_filters('gform_submission_values_pre_save', $submitted_values, $form);
     $submission['submitted_values'] = $submitted_values;
     $submission['partial_entry'] = $entry;
     $submission['field_values'] = $field_values;
     $submission['page_number'] = $page_number;
     $submission['files'] = $files;
     $submission['gform_unique_id'] = $form_unique_id;
     // Issue a new token if no longer valid
     if (!empty($resume_token)) {
         $sql = $wpdb->prepare("SELECT COUNT(*) FROM {$table} WHERE uuid = %s", $resume_token);
         $count = $wpdb->get_var($sql);
         if ($count != 1) {
             $resume_token = false;
         }
     }
     if (empty($resume_token)) {
         $resume_token = self::get_uuid();
         $result = $wpdb->insert($table, array('uuid' => $resume_token, 'form_id' => $form['id'], 'date_created' => current_time('mysql', true), 'submission' => json_encode($submission), 'ip' => $ip, 'source_url' => $source_url), array('%s', '%d', '%s', '%s', '%s', '%s'));
     } else {
         $result = $wpdb->update($table, array('form_id' => $form['id'], 'date_created' => current_time('mysql', true), 'submission' => json_encode($submission), 'ip' => $ip, 'source_url' => $source_url), array('uuid' => $resume_token), array('%d', '%s', '%s', '%s', '%s'), array('%s'));
     }
     /**
      * Fires after an incomplete submission is saved
      *
      * @since 1.9
      *
      * @param array  $submission   Contains the partially submitted entry, fields, values, and files.
      * @param string $resume_token The unique resume token that was generated for this partial submission
      * @param array  $form         The Form object
      * @param array  $entry        The Entry object
      */
     do_action('gform_incomplete_submission_post_save', $submission, $resume_token, $form, $entry);
     return $result ? $resume_token : $result;
 }
 public static function is_optin($form, $settings)
 {
     $config = $settings["meta"];
     $operator = isset($config["optin_operator"]) ? $config["optin_operator"] : "";
     $field = RGFormsModel::get_field($form, $config["optin_field_id"]);
     $field_value = RGFormsModel::get_field_value($field, array());
     if (empty($field) || !$config["optin_enabled"]) {
         return true;
     }
     $is_value_match = RGFormsModel::is_value_match($field_value, rgar($config, "optin_value"), $operator);
     return $is_value_match;
 }
Beispiel #16
0
 public static function save_incomplete_submission($form, $entry, $field_values, $page_number, $files, $form_unique_id, $ip, $source_url, $resume_token = '')
 {
     if (!is_array($form['fields'])) {
         return;
     }
     global $wpdb;
     $submitted_values = array();
     foreach ($form['fields'] as $field) {
         /* @var GF_Field $field */
         $submitted_values[$field->id] = RGFormsModel::get_field_value($field, $field_values);
     }
     $submitted_values = apply_filters('gform_submission_values_pre_save', $submitted_values, $form);
     $submission['submitted_values'] = $submitted_values;
     $submission['partial_entry'] = $entry;
     $submission['field_values'] = $field_values;
     $submission['page_number'] = $page_number;
     $submission['files'] = $files;
     $submission['gform_unique_id'] = $form_unique_id;
     if (empty($resume_token)) {
         $resume_token = self::get_uuid();
         $result = $wpdb->insert(self::get_incomplete_submissions_table_name(), array('uuid' => $resume_token, 'form_id' => $form['id'], 'date_created' => current_time('mysql', true), 'submission' => json_encode($submission), 'ip' => $ip, 'source_url' => $source_url), array('%s', '%d', '%s', '%s', '%s', '%s'));
     } else {
         $result = $wpdb->update(self::get_incomplete_submissions_table_name(), array('form_id' => $form['id'], 'date_created' => current_time('mysql', true), 'submission' => json_encode($submission), 'ip' => $ip, 'source_url' => $source_url), array('uuid' => $resume_token), array('%d', '%s', '%s', '%s', '%s'), array('%s'));
     }
     do_action('gform_incomplete_submission_post_save', $submission, $resume_token, $form, $entry);
     return $result ? $resume_token : $result;
 }
Beispiel #17
0
 public function get_issuer_id()
 {
     $issuer_id = null;
     $issuer_field = null;
     $issuer_fields = GFCommon::get_fields_by_type($this->form, array(Pronamic_WP_Pay_Extensions_GravityForms_IssuerDropDown::TYPE));
     foreach ($issuer_fields as $field) {
         if (!RGFormsModel::is_field_hidden($this->form, $field, array())) {
             $issuer_field = $field;
             break;
         }
     }
     if (null !== $issuer_field) {
         $issuer_id = RGFormsModel::get_field_value($issuer_field);
     }
     return $issuer_id;
 }
Beispiel #18
0
 public static function send_admin_notification($form, $lead)
 {
     $form_id = $form["id"];
     //handling admin notification email
     $subject = GFCommon::replace_variables($form["notification"]["subject"], $form, $lead, false, false);
     $message = GFCommon::replace_variables($form["notification"]["message"], $form, $lead, false, false, !$form["notification"]["disableAutoformat"]);
     $message = do_shortcode($message);
     $from = empty($form["notification"]["fromField"]) ? $form["notification"]["from"] : $lead[$form["notification"]["fromField"]];
     if (empty($form["notification"]["fromNameField"])) {
         $from_name = $form["notification"]["fromName"];
     } else {
         $field = RGFormsModel::get_field($form, $form["notification"]["fromNameField"]);
         $value = RGFormsModel::get_lead_field_value($lead, $field);
         $from_name = GFCommon::get_lead_field_display($field, $value);
     }
     $replyTo = empty($form["notification"]["replyToField"]) ? $form["notification"]["replyTo"] : $lead[$form["notification"]["replyToField"]];
     if (empty($form["notification"]["routing"])) {
         $email_to = $form["notification"]["to"];
     } else {
         $email_to = array();
         foreach ($form["notification"]["routing"] as $routing) {
             $source_field = RGFormsModel::get_field($form, $routing["fieldId"]);
             $field_value = RGFormsModel::get_field_value($source_field, array());
             $is_value_match = is_array($field_value) ? in_array($routing["value"], $field_value) : $field_value == $routing["value"];
             if ($routing["operator"] == "is" && $is_value_match || $routing["operator"] == "isnot" && !$is_value_match) {
                 $email_to[] = $routing["email"];
             }
         }
         $email_to = join(",", $email_to);
     }
     //Running through variable replacement
     $email_to = GFCommon::replace_variables($email_to, $form, $lead, false, false);
     $from = GFCommon::replace_variables($from, $form, $lead, false, false);
     $bcc = GFCommon::replace_variables($form["notification"]["bcc"], $form, $lead, false, false);
     $reply_to = GFCommon::replace_variables($replyTo, $form, $lead, false, false);
     $from_name = GFCommon::replace_variables($from_name, $form, $lead, false, false);
     //Filters the admin notification email to address. Allows users to change email address before notification is sent
     $to = apply_filters("gform_notification_email_{$form_id}", apply_filters("gform_notification_email", $email_to, $lead), $lead);
     self::send_email($from, $to, $bcc, $replyTo, $subject, $message, $from_name);
 }
 public static function send_admin_notification($form, $lead, $override_options = false)
 {
     $form_id = $form["id"];
     //handling admin notification email
     $subject = GFCommon::replace_variables(rgget("subject", $form["notification"]), $form, $lead, false, false);
     $message_format = apply_filters("gform_notification_format_{$form["id"]}", apply_filters("gform_notification_format", "html", "admin", $form, $lead), "admin", $form, $lead);
     $message = GFCommon::replace_variables(rgget("message", $form["notification"]), $form, $lead, false, false, !rgget("disableAutoformat", $form["notification"]), $message_format);
     $message = do_shortcode($message);
     $version_info = self::get_version_info();
     $is_expired = !rgempty("expiration_time", $version_info) && $version_info["expiration_time"] < time();
     if (!$version_info["is_valid_key"] && $is_expired) {
         $message .= "<br/><br/>Your Gravity Forms License Key has expired. In order to continue receiving support and software updates you must renew your license key. You can do so by following the renewal instructions on the Gravity Forms Settings page in your WordPress Dashboard or by <a href='http://www.gravityhelp.com/renew-license/?key=" . self::get_key() . "'>clicking here</a>.";
     }
     $from = rgempty("fromField", $form["notification"]) ? rgget("from", $form["notification"]) : rgget($form["notification"]["fromField"], $lead);
     if (rgempty("fromNameField", $form["notification"])) {
         $from_name = rgget("fromName", $form["notification"]);
     } else {
         $field = RGFormsModel::get_field($form, rgget("fromNameField", $form["notification"]));
         $value = RGFormsModel::get_lead_field_value($lead, $field);
         $from_name = GFCommon::get_lead_field_display($field, $value);
     }
     $replyTo = rgempty("replyToField", $form["notification"]) ? rgget("replyTo", $form["notification"]) : rgget($form["notification"]["replyToField"], $lead);
     if (rgempty("routing", $form["notification"])) {
         $email_to = rgget("to", $form["notification"]);
     } else {
         $email_to = array();
         foreach ($form["notification"]["routing"] as $routing) {
             $source_field = RGFormsModel::get_field($form, $routing["fieldId"]);
             $field_value = RGFormsModel::get_field_value($source_field, array());
             $is_value_match = is_array($field_value) ? in_array($routing["value"], $field_value) : $field_value == $routing["value"];
             if ($routing["operator"] == "is" && $is_value_match || $routing["operator"] == "isnot" && !$is_value_match) {
                 $email_to[] = $routing["email"];
             }
         }
         $email_to = join(",", $email_to);
     }
     //Running through variable replacement
     $email_to = GFCommon::replace_variables($email_to, $form, $lead, false, false);
     $from = GFCommon::replace_variables($from, $form, $lead, false, false);
     $bcc = GFCommon::replace_variables(rgget("bcc", $form["notification"]), $form, $lead, false, false);
     $reply_to = GFCommon::replace_variables($replyTo, $form, $lead, false, false);
     $from_name = GFCommon::replace_variables($from_name, $form, $lead, false, false);
     //Filters the admin notification email to address. Allows users to change email address before notification is sent
     $to = apply_filters("gform_notification_email_{$form_id}", apply_filters("gform_notification_email", $email_to, $lead), $lead);
     // override default values if override options provided
     if ($override_options && is_array($override_options)) {
         foreach ($override_options as $override_key => $override_value) {
             ${$override_key} = $override_value;
         }
     }
     self::send_email($from, $to, $bcc, $replyTo, $subject, $message, $from_name, $message_format);
 }
Beispiel #20
0
 public static function is_optin($form, $settings)
 {
     $config = $settings["meta"];
     $operator = $config["optin_operator"];
     $field = RGFormsModel::get_field($form, $config["optin_field_id"]);
     $field_value = RGFormsModel::get_field_value($field, array());
     $is_value_match = RGFormsModel::is_value_match($field_value, $config["optin_value"]);
     return !$config["optin_enabled"] || empty($field) || $operator == "is" && $is_value_match || $operator == "isnot" && !$is_value_match;
 }
 public static function registration_condition_met($form, $config)
 {
     $config = $config["meta"];
     $operator = isset($config["reg_condition_operator"]) ? $config["reg_condition_operator"] : "";
     $field = RGFormsModel::get_field($form, $config["reg_condition_field_id"]);
     if (empty($field) || !$config["reg_condition_enabled"]) {
         return true;
     }
     $is_visible = !RGFormsModel::is_field_hidden($form, $field, array());
     $field_value = RGFormsModel::get_field_value($field, array());
     $is_value_match = RGFormsModel::is_value_match($field_value, $config["reg_condition_value"], $operator);
     $create_user = $is_value_match && $is_visible;
     return $create_user;
 }
Beispiel #22
0
 public static function validate(&$form, $field_values, $page_number = 0, &$failed_validation_page = 0)
 {
     $form = gf_apply_filters(array('gform_pre_validation', $form['id']), $form);
     // validate form schedule
     if (self::validate_form_schedule($form)) {
         return false;
     }
     // validate entry limit
     if (self::validate_entry_limit($form)) {
         return false;
     }
     // Prevent tampering with the submitted form
     if (empty($_POST['is_submit_' . $form['id']])) {
         return false;
     }
     $is_valid = true;
     foreach ($form['fields'] as &$field) {
         /* @var GF_Field $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;
         }
         // don't validate adminOnly fields.
         if ($field->adminOnly) {
             continue;
         }
         //ignore validation if field is hidden
         if (RGFormsModel::is_field_hidden($form, $field, $field_values)) {
             $field->is_field_hidden = true;
             continue;
         }
         $value = RGFormsModel::get_field_value($field);
         $input_type = RGFormsModel::get_input_type($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;
                 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 a unique entry and the values you entered have been already been used.', 'gravityforms') : sprintf(__("This field requires a unique entry and '%s' has already been used", 'gravityforms'), $value);
                         break;
                 }
                 $field->validation_message = gf_apply_filters(array('gform_duplicate_message', $form['id']), $default_message, $form, $field, $value);
             } 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 {
                     $field->validate($value, $form);
                 }
             }
         }
         $custom_validation_result = gf_apply_filters(array('gform_field_validation', $form['id'], $field->id), array('is_valid' => $field->failed_validation ? false : true, 'message' => $field->validation_message), $value, $form, $field);
         $field->failed_validation = rgar($custom_validation_result, 'is_valid') ? false : true;
         $field->validation_message = rgar($custom_validation_result, 'message');
         if ($field->failed_validation) {
             $is_valid = false;
         }
     }
     $is_last_page = self::get_target_page($form, $page_number, $field_values) == '0';
     if ($is_valid && $is_last_page && self::is_form_empty($form)) {
         foreach ($form['fields'] as &$field) {
             $field->failed_validation = true;
             $field->validation_message = esc_html__('At least one field must be filled out', 'gravityforms');
             $is_valid = false;
             unset($field->is_field_hidden);
         }
     }
     $validation_result = gf_apply_filters(array('gform_validation', $form['id']), array('is_valid' => $is_valid, 'form' => $form, 'failed_validation_page' => $failed_validation_page));
     $is_valid = $validation_result['is_valid'];
     $form = $validation_result['form'];
     $failed_validation_page = $validation_result['failed_validation_page'];
     return $is_valid;
 }
 private function validate(&$form, $field_values)
 {
     $form = apply_filters('gform_pre_validation', $form);
     foreach ($form["fields"] as &$field) {
         /*
          * Skip over the following fields as we aren't processing any of them
          */
         $skip_field = false;
         switch (RGFormsModel::get_input_type($field)) {
             case "captcha":
             case "html":
             case "password":
             case "product":
             case "coupon":
             case "quantity":
             case "shipping":
             case "donation":
             case "total":
             case "singleproduct":
             case "hiddenproduct":
             case "singleshipping":
             case "creditcard":
             case "page":
             case "post_image":
             case "fileupload":
                 //ignore certain fields
                 $skip_field = true;
                 break;
         }
         if (isset($field['productField']) && (int) $field['productField'] > 0 || $field['type'] == 'shipping') {
             $skip_field = true;
         }
         /* ignore validation if field is hidden or admin only */
         if (RGFormsModel::is_field_hidden($form, $field, $field_values) || isset($field['adminOnly']) && $field['adminOnly']) {
             $skip_field = true;
         }
         /* ignore user-defined restricted fields or hidden fields */
         if (in_array($field['id'], $this->atts['restricted_fields']) || in_array($field['id'], $this->atts['hidden_fields'])) {
             $skip_field = true;
         }
         if ($skip_field) {
             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"] && GFFormDisplay::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;
                 $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 a unique entry and the values you entered have been already been used.", "gravityforms") : sprintf(__("This field requires a 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, $field, $value), $form, $field, $value);
             } else {
                 if (GFFormDisplay::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 "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 "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 "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":
                             // 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_" . $field["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) && !GFCommon::has_field_calculation($field);
                             $is_valid_number = self::validate_range($field, $value) && GFCommon::is_numeric($raw_value, $field["numberFormat"]);
                             if ($requires_valid_number && !$is_valid_number) {
                                 $field["failed_validation"] = true;
                                 $field["validation_message"] = empty($field["errorMessage"]) ? GFCommon::get_range_message($field) : $field["errorMessage"];
                             } else {
                                 if ($field['type'] == 'quantity') {
                                     if (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'];
                                     } else {
                                         if (!empty($value) && (!is_numeric($value) || intval($value) != floatval($value) || intval($value) < 0)) {
                                             $field['failed_validation'] = true;
                                             $field['validation_message'] = empty($field['errorMessage']) ? __('Please enter a valid quantity', 'gravityforms') : $field['errorMessage'];
                                         }
                                     }
                                 }
                             }
                             break;
                         case "phone":
                             $regex = '/^\\D?(\\d{3})\\D?\\D?(\\d{3})\\D?(\\d{4})$/';
                             if ($field["phoneFormat"] == "standard" && $value !== "" && $value !== 0 && !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) || !GFFormDisplay::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 "calculation":
                             $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) || intval($quantity) < 0)) {
                                     $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;
 }
 public static function save_incomplete_submission($form, $entry, $field_values, $page_number, $files, $form_unique_id, $ip, $source_url, $resume_token = '')
 {
     if (!is_array($form['fields'])) {
         return;
     }
     global $wpdb;
     $table = self::get_incomplete_submissions_table_name();
     $submitted_values = array();
     foreach ($form['fields'] as $field) {
         /* @var GF_Field $field */
         if ($field->type == 'creditcard') {
             continue;
         }
         $submitted_values[$field->id] = RGFormsModel::get_field_value($field, $field_values);
     }
     $submitted_values = apply_filters('gform_submission_values_pre_save', $submitted_values, $form);
     $submission['submitted_values'] = $submitted_values;
     $submission['partial_entry'] = $entry;
     $submission['field_values'] = $field_values;
     $submission['page_number'] = $page_number;
     $submission['files'] = $files;
     $submission['gform_unique_id'] = $form_unique_id;
     // Issue a new token if no longer valid
     if (!empty($resume_token)) {
         $sql = $wpdb->prepare("SELECT COUNT(*) FROM {$table} WHERE uuid = %s", $resume_token);
         $count = $wpdb->get_var($sql);
         if ($count != 1) {
             $resume_token = false;
         }
     }
     if (empty($resume_token)) {
         $resume_token = self::get_uuid();
         $result = $wpdb->insert($table, array('uuid' => $resume_token, 'form_id' => $form['id'], 'date_created' => current_time('mysql', true), 'submission' => json_encode($submission), 'ip' => $ip, 'source_url' => $source_url), array('%s', '%d', '%s', '%s', '%s', '%s'));
     } else {
         $result = $wpdb->update($table, array('form_id' => $form['id'], 'date_created' => current_time('mysql', true), 'submission' => json_encode($submission), 'ip' => $ip, 'source_url' => $source_url), array('uuid' => $resume_token), array('%d', '%s', '%s', '%s', '%s'), array('%s'));
     }
     do_action('gform_incomplete_submission_post_save', $submission, $resume_token, $form, $entry);
     return $result ? $resume_token : $result;
 }
Beispiel #25
0
 public static function send_admin_notification($form, $lead, $override_options = false)
 {
     $form_id = $form["id"];
     //handling admin notification email
     $subject = GFCommon::replace_variables(rgget("subject", $form["notification"]), $form, $lead, false, false);
     $message_format = apply_filters("gform_notification_format_{$form["id"]}", apply_filters("gform_notification_format", "html", "admin", $form, $lead), "admin", $form, $lead);
     $message = GFCommon::replace_variables(rgget("message", $form["notification"]), $form, $lead, false, false, !rgget("disableAutoformat", $form["notification"]), $message_format);
     $message = do_shortcode($message);
     $version_info = self::get_version_info();
     $from = rgempty("fromField", $form["notification"]) ? rgget("from", $form["notification"]) : rgget($form["notification"]["fromField"], $lead);
     if (rgempty("fromNameField", $form["notification"])) {
         $from_name = rgget("fromName", $form["notification"]);
     } else {
         $field = RGFormsModel::get_field($form, rgget("fromNameField", $form["notification"]));
         $value = RGFormsModel::get_lead_field_value($lead, $field);
         $from_name = GFCommon::get_lead_field_display($field, $value);
     }
     $replyTo = rgempty("replyToField", $form["notification"]) ? rgget("replyTo", $form["notification"]) : rgget($form["notification"]["replyToField"], $lead);
     if (rgempty("routing", $form["notification"])) {
         $email_to = rgget("to", $form["notification"]);
     } else {
         $email_to = array();
         foreach ($form["notification"]["routing"] as $routing) {
             $source_field = RGFormsModel::get_field($form, $routing["fieldId"]);
             $field_value = RGFormsModel::get_field_value($source_field, array());
             $is_value_match = is_array($field_value) ? in_array($routing["value"], $field_value) : $field_value == $routing["value"];
             if ($routing["operator"] == "is" && $is_value_match || $routing["operator"] == "isnot" && !$is_value_match) {
                 $email_to[] = $routing["email"];
             }
         }
         $email_to = join(",", $email_to);
     }
     //Running through variable replacement
     $email_to = GFCommon::replace_variables($email_to, $form, $lead, false, false);
     $from = GFCommon::replace_variables($from, $form, $lead, false, false);
     $bcc = GFCommon::replace_variables(rgget("bcc", $form["notification"]), $form, $lead, false, false);
     $reply_to = GFCommon::replace_variables($replyTo, $form, $lead, false, false);
     $from_name = GFCommon::replace_variables($from_name, $form, $lead, false, false);
     //Filters the admin notification email to address. Allows users to change email address before notification is sent
     $to = apply_filters("gform_notification_email_{$form_id}", apply_filters("gform_notification_email", $email_to, $lead), $lead);
     // override default values if override options provided
     if ($override_options && is_array($override_options)) {
         foreach ($override_options as $override_key => $override_value) {
             ${$override_key} = $override_value;
         }
     }
     $attachments = apply_filters("gform_admin_notification_attachments_{$form_id}", apply_filters("gform_admin_notification_attachments", array(), $lead, $form), $lead, $form);
     self::send_email($from, $to, $bcc, $replyTo, $subject, $message, $from_name, $message_format, $attachments);
 }