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;
 }
Exemple #2
0
 public static function get_lead_field_display($field, $value, $currency = "", $use_text = false, $format = "html", $media = "screen")
 {
     if ($field['type'] == 'post_category') {
         $value = self::prepare_post_category_value($value, $field);
     }
     switch (RGFormsModel::get_input_type($field)) {
         case "name":
             if (is_array($value)) {
                 $prefix = trim(rgget($field["id"] . ".2", $value));
                 $first = trim(rgget($field["id"] . ".3", $value));
                 $last = trim(rgget($field["id"] . ".6", $value));
                 $suffix = trim(rgget($field["id"] . ".8", $value));
                 $name = $prefix;
                 $name .= !empty($name) && !empty($first) ? " {$first}" : $first;
                 $name .= !empty($name) && !empty($last) ? " {$last}" : $last;
                 $name .= !empty($name) && !empty($suffix) ? " {$suffix}" : $suffix;
                 return $name;
             } else {
                 return $value;
             }
             break;
         case "creditcard":
             if (is_array($value)) {
                 $card_number = trim(rgget($field["id"] . ".1", $value));
                 $card_type = trim(rgget($field["id"] . ".4", $value));
                 $separator = $format == "html" ? "<br/>" : "\n";
                 return empty($card_number) ? "" : $card_type . $separator . $card_number;
             } else {
                 return "";
             }
             break;
         case "address":
             if (is_array($value)) {
                 $street_value = trim(rgget($field["id"] . ".1", $value));
                 $street2_value = trim(rgget($field["id"] . ".2", $value));
                 $city_value = trim(rgget($field["id"] . ".3", $value));
                 $state_value = trim(rgget($field["id"] . ".4", $value));
                 $zip_value = trim(rgget($field["id"] . ".5", $value));
                 $country_value = trim(rgget($field["id"] . ".6", $value));
                 $line_break = $format == "html" ? "<br />" : "\n";
                 $address_display_format = apply_filters("gform_address_display_format", "default");
                 if ($address_display_format == "zip_before_city") {
                     /*
                     Sample:
                     3333 Some Street
                     suite 16
                     2344 City, State
                     Country
                     */
                     $addr_ary = array();
                     $addr_ary[] = $street_value;
                     if (!empty($street2_value)) {
                         $addr_ary[] = $street2_value;
                     }
                     $zip_line = trim($zip_value . " " . $city_value);
                     $zip_line .= !empty($zip_line) && !empty($state_value) ? ", {$state_value}" : $state_value;
                     $zip_line = trim($zip_line);
                     if (!empty($zip_line)) {
                         $addr_ary[] = $zip_line;
                     }
                     if (!empty($country_value)) {
                         $addr_ary[] = $country_value;
                     }
                     $address = implode("<br />", $addr_ary);
                 } else {
                     $address = $street_value;
                     $address .= !empty($address) && !empty($street2_value) ? $line_break . $street2_value : $street2_value;
                     $address .= !empty($address) && (!empty($city_value) || !empty($state_value)) ? $line_break . $city_value : $city_value;
                     $address .= !empty($address) && !empty($city_value) && !empty($state_value) ? ", {$state_value}" : $state_value;
                     $address .= !empty($address) && !empty($zip_value) ? " {$zip_value}" : $zip_value;
                     $address .= !empty($address) && !empty($country_value) ? $line_break . $country_value : $country_value;
                 }
                 //adding map link
                 if (!empty($address) && $format == "html") {
                     $address_qs = str_replace($line_break, " ", $address);
                     //replacing <br/> and \n with spaces
                     $address_qs = urlencode($address_qs);
                     $address .= "<br/><a href='http://maps.google.com/maps?q={$address_qs}' target='_blank' class='map-it-link'>Map It</a>";
                 }
                 return $address;
             } else {
                 return "";
             }
             break;
         case "email":
             return GFCommon::is_valid_email($value) && $format == "html" ? "<a href='mailto:{$value}'>{$value}</a>" : $value;
             break;
         case "website":
             return GFCommon::is_valid_url($value) && $format == "html" ? "<a href='{$value}' target='_blank'>{$value}</a>" : $value;
             break;
         case "checkbox":
             if (is_array($value)) {
                 $items = '';
                 foreach ($value as $key => $item) {
                     if (!empty($item)) {
                         switch ($format) {
                             case "text":
                                 $items .= GFCommon::selection_display($item, $field, $currency, $use_text) . ", ";
                                 break;
                             default:
                                 $items .= "<li>" . GFCommon::selection_display($item, $field, $currency, $use_text) . "</li>";
                                 break;
                         }
                     }
                 }
                 if (empty($items)) {
                     return "";
                 } else {
                     if ($format == "text") {
                         return substr($items, 0, strlen($items) - 2);
                         //removing last comma
                     } else {
                         return "<ul class='bulleted'>{$items}</ul>";
                     }
                 }
             } else {
                 return $value;
             }
             break;
         case "post_image":
             $ary = explode("|:|", $value);
             $url = count($ary) > 0 ? $ary[0] : "";
             $title = count($ary) > 1 ? $ary[1] : "";
             $caption = count($ary) > 2 ? $ary[2] : "";
             $description = count($ary) > 3 ? $ary[3] : "";
             if (!empty($url)) {
                 $url = str_replace(" ", "%20", $url);
                 switch ($format) {
                     case "text":
                         $value = $url;
                         $value .= !empty($title) ? "\n\n" . $field["label"] . " (" . __("Title", "gravityforms") . "): " . $title : "";
                         $value .= !empty($caption) ? "\n\n" . $field["label"] . " (" . __("Caption", "gravityforms") . "): " . $caption : "";
                         $value .= !empty($description) ? "\n\n" . $field["label"] . " (" . __("Description", "gravityforms") . "): " . $description : "";
                         break;
                     default:
                         $value = "<a href='{$url}' target='_blank' title='" . __("Click to view", "gravityforms") . "'><img src='{$url}' width='100' /></a>";
                         $value .= !empty($title) ? "<div>Title: {$title}</div>" : "";
                         $value .= !empty($caption) ? "<div>Caption: {$caption}</div>" : "";
                         $value .= !empty($description) ? "<div>Description: {$description}</div>" : "";
                         break;
                 }
             }
             return $value;
         case "fileupload":
             $file_path = $value;
             if (!empty($file_path)) {
                 $info = pathinfo($file_path);
                 $file_path = esc_attr(str_replace(" ", "%20", $file_path));
                 $value = $format == "text" ? $file_path : "<a href='{$file_path}' target='_blank' title='" . __("Click to view", "gravityforms") . "'>" . $info["basename"] . "</a>";
             }
             return $value;
             break;
         case "date":
             return GFCommon::date_display($value, rgar($field, "dateFormat"));
             break;
         case "radio":
         case "select":
             return GFCommon::selection_display($value, $field, $currency, $use_text);
             break;
         case "multiselect":
             if (empty($value) || $format == "text") {
                 return $value;
             }
             $value = explode(",", $value);
             $items = '';
             foreach ($value as $item) {
                 $items .= "<li>" . GFCommon::selection_display($item, $field, $currency, $use_text) . "</li>";
             }
             return "<ul class='bulleted'>{$items}</ul>";
             break;
         case "calculation":
         case "singleproduct":
             if (is_array($value)) {
                 $product_name = trim($value[$field["id"] . ".1"]);
                 $price = trim($value[$field["id"] . ".2"]);
                 $quantity = trim($value[$field["id"] . ".3"]);
                 $product = $product_name . ", " . __("Qty: ", "gravityforms") . $quantity . ", " . __("Price: ", "gravityforms") . $price;
                 return $product;
             } else {
                 return "";
             }
             break;
         case "number":
             return GFCommon::format_number($value, rgar($field, "numberFormat"));
             break;
         case "singleshipping":
         case "donation":
         case "total":
         case "price":
             return GFCommon::to_money($value, $currency);
         case "list":
             if (empty($value)) {
                 return "";
             }
             $value = unserialize($value);
             $has_columns = is_array($value[0]);
             if (!$has_columns) {
                 $items = '';
                 foreach ($value as $key => $item) {
                     if (!empty($item)) {
                         switch ($format) {
                             case "text":
                                 $items .= $item . ", ";
                                 break;
                             case "url":
                                 $items .= $item . ",";
                                 break;
                             default:
                                 if ($media == "email") {
                                     $items .= "<li>{$item}</li>";
                                 } else {
                                     $items .= "<li>{$item}</li>";
                                 }
                                 break;
                         }
                     }
                 }
                 if (empty($items)) {
                     return "";
                 } else {
                     if ($format == "text") {
                         return substr($items, 0, strlen($items) - 2);
                         //removing last comma
                     } else {
                         if ($format == "url") {
                             return substr($items, 0, strlen($items) - 1);
                             //removing last comma
                         } else {
                             if ($media == "email") {
                                 return "<ul class='bulleted'>{$items}</ul>";
                             } else {
                                 return "<ul class='bulleted'>{$items}</ul>";
                             }
                         }
                     }
                 }
             } else {
                 if (is_array($value)) {
                     $columns = array_keys($value[0]);
                     $list = "";
                     switch ($format) {
                         case "text":
                             $is_first_row = true;
                             foreach ($value as $item) {
                                 if (!$is_first_row) {
                                     $list .= "\n\n" . $field["label"] . ": ";
                                 }
                                 $list .= implode(",", array_values($item));
                                 $is_first_row = false;
                             }
                             break;
                         case "url":
                             foreach ($value as $item) {
                                 $list .= implode("|", array_values($item)) . ",";
                             }
                             if (!empty($list)) {
                                 $list = substr($list, 0, strlen($list) - 1);
                             }
                             break;
                         default:
                             if ($media == "email") {
                                 $list = "<table class='gfield_list' style='border-top: 1px solid #DFDFDF; border-left: 1px solid #DFDFDF; border-spacing: 0; padding: 0; margin: 2px 0 6px; width: 100%'><thead><tr>";
                                 //reading columns from entry data
                                 foreach ($columns as $column) {
                                     $list .= "<th style='background-image: none; border-right: 1px solid #DFDFDF; border-bottom: 1px solid #DFDFDF; padding: 6px 10px; font-family: sans-serif; font-size: 12px; font-weight: bold; background-color: #F1F1F1; color:#333; text-align:left'>" . esc_html($column) . "</th>";
                                 }
                                 $list .= "</tr></thead>";
                                 $list .= "<tbody style='background-color: #F9F9F9'>";
                                 foreach ($value as $item) {
                                     $list .= "<tr>";
                                     foreach ($columns as $column) {
                                         $val = rgar($item, $column);
                                         $list .= "<td style='padding: 6px 10px; border-right: 1px solid #DFDFDF; border-bottom: 1px solid #DFDFDF; border-top: 1px solid #FFF; font-family: sans-serif; font-size:12px;'>{$val}</td>";
                                     }
                                     $list .= "</tr>";
                                 }
                                 $list .= "<tbody></table>";
                             } else {
                                 $list = "<table class='gfield_list'><thead><tr>";
                                 //reading columns from entry data
                                 foreach ($columns as $column) {
                                     $list .= "<th>" . esc_html($column) . "</th>";
                                 }
                                 $list .= "</tr></thead>";
                                 $list .= "<tbody>";
                                 foreach ($value as $item) {
                                     $list .= "<tr>";
                                     foreach ($columns as $column) {
                                         $val = rgar($item, $column);
                                         $list .= "<td>{$val}</td>";
                                     }
                                     $list .= "</tr>";
                                 }
                                 $list .= "<tbody></table>";
                             }
                             break;
                     }
                     return $list;
                 }
             }
             return "";
             break;
         default:
             if (!is_array($value)) {
                 return nl2br($value);
             }
             break;
     }
 }
 public static function handle_confirmation_edit_submission($confirmation, $form)
 {
     if (empty($_POST) || !check_admin_referer('gform_confirmation_edit', 'gform_confirmation_edit')) {
         return $confirmation;
     }
     $is_new_confirmation = !$confirmation;
     if ($is_new_confirmation) {
         $confirmation['id'] = uniqid();
     }
     $name = sanitize_text_field(rgpost('form_confirmation_name'));
     $confirmation['name'] = $name;
     $type = rgpost('form_confirmation');
     if (!in_array($type, array('message', 'page', 'redirect'))) {
         $type = 'message';
     }
     $confirmation['type'] = $type;
     $confirmation['message'] = rgpost('form_confirmation_message');
     $confirmation['disableAutoformat'] = (bool) rgpost('form_disable_autoformatting');
     $confirmation['pageId'] = absint(rgpost('form_confirmation_page'));
     $confirmation['url'] = rgpost('form_confirmation_url');
     $query_string = '' != rgpost('form_redirect_querystring') ? rgpost('form_redirect_querystring') : rgpost('form_page_querystring');
     $confirmation['queryString'] = wp_strip_all_tags($query_string);
     $confirmation['isDefault'] = (bool) rgpost('is_default');
     // if is default confirmation, override any submitted conditional logic with empty array
     $confirmation['conditionalLogic'] = $confirmation['isDefault'] ? array() : json_decode(rgpost('conditional_logic'), ARRAY_A);
     $confirmation['conditionalLogic'] = GFFormsModel::sanitize_conditional_logic($confirmation['conditionalLogic']);
     $failed_validation = false;
     if (!$confirmation['name']) {
         $failed_validation = true;
         GFCommon::add_error_message(__('You must specify a Confirmation Name.', 'gravityforms'));
     }
     switch ($type) {
         case 'page':
             if (empty($confirmation['pageId'])) {
                 $failed_validation = true;
                 GFCommon::add_error_message(__('You must select a Confirmation Page.', 'gravityforms'));
             }
             break;
         case 'redirect':
             if ((empty($confirmation['url']) || !GFCommon::is_valid_url($confirmation['url'])) && !GFCommon::has_merge_tag($confirmation['url'])) {
                 $failed_validation = true;
                 GFCommon::add_error_message(__('You must specify a valid Redirect URL.', 'gravityforms'));
             }
             break;
     }
     if ($failed_validation) {
         return $confirmation;
     }
     // allow user to filter confirmation before save
     $confirmation = gf_apply_filters('gform_pre_confirmation_save', $form['id'], $confirmation, $form, $is_new_confirmation);
     // trim values
     $confirmation = GFFormsModel::trim_conditional_logic_values_from_element($confirmation, $form);
     // add current confirmation to confirmations array
     $form['confirmations'][$confirmation['id']] = $confirmation;
     // save updated confirmations array
     $result = GFFormsModel::save_form_confirmations($form['id'], $form['confirmations']);
     if ($result !== false) {
         $url = remove_query_arg(array('cid', 'duplicatedcid'));
         GFCommon::add_message(sprintf(__('Confirmation saved successfully. %sBack to confirmations.%s', 'gravityforms'), '<a href="' . esc_url($url) . '">', '</a>'));
     } else {
         GFCommon::add_error_message(__('There was an issue saving this confirmation.', 'gravityforms'));
     }
     return $confirmation;
 }
 public function get_value_entry_detail($value, $currency = '', $use_text = false, $format = 'html', $media = 'screen')
 {
     return GFCommon::is_valid_url($value) && $format == 'html' ? "<a href='{$value}' target='_blank'>{$value}</a>" : $value;
 }
Exemple #5
0
 public static function get_lead_field_display($field, $value, $currency = "", $use_text = false)
 {
     switch (RGFormsModel::get_input_type($field)) {
         case "name":
             if (is_array($value)) {
                 $prefix = trim($value[$field["id"] . ".2"]);
                 $first = trim($value[$field["id"] . ".3"]);
                 $last = trim($value[$field["id"] . ".6"]);
                 $suffix = trim($value[$field["id"] . ".8"]);
                 $name = $prefix;
                 $name .= !empty($name) && !empty($first) ? " {$first}" : $first;
                 $name .= !empty($name) && !empty($last) ? " {$last}" : $last;
                 $name .= !empty($name) && !empty($suffix) ? " {$suffix}" : $suffix;
                 return $name;
             } else {
                 return $value;
             }
             break;
         case "address":
             if (is_array($value)) {
                 $street_value = trim($value[$field["id"] . ".1"]);
                 $street2_value = trim($value[$field["id"] . ".2"]);
                 $city_value = trim($value[$field["id"] . ".3"]);
                 $state_value = trim($value[$field["id"] . ".4"]);
                 $zip_value = trim($value[$field["id"] . ".5"]);
                 $country_value = trim($value[$field["id"] . ".6"]);
                 $address_display_format = apply_filters("gform_address_display_format", "street,city,state,zip,country");
                 if ($address_display_format == "zip_before_city") {
                     /*
                     Sample:
                     3333 Some Street
                     suite 16
                     2344 City, State
                     Country
                     */
                     $addr_ary = array();
                     $addr_ary[] = $street_value;
                     if (!empty($street2_value)) {
                         $addr_ary[] = $street2_value;
                     }
                     $zip_line = trim($zip_value . " " . $city_value);
                     $zip_line .= !empty($zip_line) && !empty($state_value) ? ", {$state_value}" : $state_value;
                     $zip_line = trim($zip_line);
                     if (!empty($zip_line)) {
                         $addr_ary[] = $zip_line;
                     }
                     if (!empty($country_value)) {
                         $addr_ary[] = $country_value;
                     }
                     $address = implode("<br />", $addr_ary);
                 } else {
                     $address = $street_value;
                     $address .= !empty($address) && !empty($street2_value) ? "<br />{$street2_value}" : $street2_value;
                     $address .= !empty($address) && (!empty($city_value) || !empty($state_value)) ? "<br />{$city_value}" : $city_value;
                     $address .= !empty($address) && !empty($city_value) && !empty($state_value) ? ", {$state_value}" : $state_value;
                     $address .= !empty($address) && !empty($zip_value) ? " {$zip_value}" : $zip_value;
                     $address .= !empty($address) && !empty($country_value) ? "<br />{$country_value}" : $country_value;
                 }
                 //adding map link
                 if (!empty($address)) {
                     $address_qs = str_replace("<br />", " ", $address);
                     //replacing <br/> with spaces
                     $address_qs = urlencode($address_qs);
                     $address .= "<br/><a href='http://maps.google.com/maps?q={$address_qs}' target='_blank' class='map-it-link'>Map It</a>";
                 }
                 return $address;
             } else {
                 return "";
             }
             break;
         case "email":
             return GFCommon::is_valid_email($value) ? "<a href='mailto:{$value}'>{$value}</a>" : $value;
             break;
         case "website":
             return GFCommon::is_valid_url($value) ? "<a href='{$value}' target='_blank'>{$value}</a>" : $value;
             break;
         case "checkbox":
             if (is_array($value)) {
                 foreach ($value as $key => $item) {
                     if (!empty($item)) {
                         $items .= "<li>" . GFCommon::selection_display($item, $field, $currency, $use_text) . "</li>";
                     }
                 }
                 return empty($items) ? "" : "<ul class='bulleted'>{$items}</ul>";
             } else {
                 return $value;
             }
             break;
         case "post_image":
             list($url, $title, $caption, $description) = explode("|:|", $value);
             if (!empty($url)) {
                 $url = str_replace(" ", "%20", $url);
                 $value = "<a href='{$url}' target='_blank' title='" . __("Click to view", "gravityforms") . "'><img src='{$url}' width='100' /></a>";
                 $value .= !empty($title) ? "<div>Title: {$title}</div>" : "";
                 $value .= !empty($caption) ? "<div>Caption: {$caption}</div>" : "";
                 $value .= !empty($description) ? "<div>Description: {$description}</div>" : "";
             }
             return $value;
         case "fileupload":
             $file_path = $value;
             if (!empty($file_path)) {
                 $info = pathinfo($file_path);
                 $file_path = esc_attr(str_replace(" ", "%20", $file_path));
                 $value = "<a href='{$file_path}' target='_blank' title='" . __("Click to view", "gravityforms") . "'>" . $info["basename"] . "</a>";
             }
             return $value;
             break;
         case "date":
             return GFCommon::date_display($value, $field["dateFormat"]);
             break;
         case "radio":
         case "select":
             return GFCommon::selection_display($value, $field, $currency, $use_text);
             break;
         case "singleproduct":
             if (is_array($value)) {
                 $product_name = trim($value[$field["id"] . ".1"]);
                 $price = trim($value[$field["id"] . ".2"]);
                 $quantity = trim($value[$field["id"] . ".3"]);
                 $product = $product_name . ", " . __("Qty: ", "gravityforms") . $quantity . ", " . __("Price: ", "gravityforms") . $price;
                 return $product;
             } else {
                 return "";
             }
             break;
         case "singleshipping":
         case "donation":
         case "total":
         case "price":
             return GFCommon::to_money($value, $currency);
         default:
             return nl2br($value);
             break;
     }
 }
Exemple #6
0
 public static function pdf_get_lead_field_display($field, $value, $currency = '', $use_text = false, $format = 'html', $media = 'screen')
 {
     if ($field['type'] == 'post_category') {
         $value = GFCommon::prepare_post_category_value($value, $field);
     }
     switch (RGFormsModel::get_input_type($field)) {
         case 'name':
             if (is_array($value)) {
                 $prefix = trim(rgget($field['id'] . '.2', $value));
                 $first = trim(rgget($field['id'] . '.3', $value));
                 $middle = trim(rgget($field['id'] . '.4', $value));
                 $last = trim(rgget($field['id'] . '.6', $value));
                 $suffix = trim(rgget($field['id'] . '.8', $value));
                 $name = $prefix;
                 $name .= !empty($name) && !empty($first) ? " {$first}" : $first;
                 $name .= !empty($name) && !empty($middle) ? " {$middle}" : $middle;
                 $name .= !empty($name) && !empty($last) ? " {$last}" : $last;
                 $name .= !empty($name) && !empty($suffix) ? " {$suffix}" : $suffix;
                 return $name;
             } else {
                 return $value;
             }
             break;
         case 'creditcard':
             if (is_array($value)) {
                 $card_number = trim(rgget($field['id'] . '.1', $value));
                 $card_type = trim(rgget($field['id'] . '.4', $value));
                 $separator = $format == 'html' ? '<br/>' : '\\n';
                 return empty($card_number) ? '' : $card_type . $separator . $card_number;
             } else {
                 return '';
             }
             break;
         case 'address':
             if (is_array($value)) {
                 $street_value = trim(rgget($field['id'] . '.1', $value));
                 $street2_value = trim(rgget($field['id'] . '.2', $value));
                 $city_value = trim(rgget($field['id'] . '.3', $value));
                 $state_value = trim(rgget($field['id'] . '.4', $value));
                 $zip_value = trim(rgget($field['id'] . '.5', $value));
                 $country_value = trim(rgget($field['id'] . '.6', $value));
                 $line_break = $format == 'html' ? '<br />' : '\\n';
                 $address_display_format = apply_filters('gform_address_display_format', 'default');
                 if ($address_display_format == 'zip_before_city') {
                     /*
                     Sample:
                     3333 Some Street
                     suite 16
                     2344 City, State
                     Country
                     */
                     $addr_ary = array();
                     $addr_ary[] = $street_value;
                     if (!empty($street2_value)) {
                         $addr_ary[] = $street2_value;
                     }
                     $zip_line = trim($zip_value . ' ' . $city_value);
                     $zip_line .= !empty($zip_line) && !empty($state_value) ? ", {$state_value}" : $state_value;
                     $zip_line = trim($zip_line);
                     if (!empty($zip_line)) {
                         $addr_ary[] = $zip_line;
                     }
                     if (!empty($country_value)) {
                         $addr_ary[] = $country_value;
                     }
                     $address = implode('<br />', $addr_ary);
                 } else {
                     $address = $street_value;
                     $address .= !empty($address) && !empty($street2_value) ? $line_break . $street2_value : $street2_value;
                     $address .= !empty($address) && (!empty($city_value) || !empty($state_value)) ? $line_break . $city_value : $city_value;
                     $address .= !empty($address) && !empty($city_value) && !empty($state_value) ? ", {$state_value}" : $state_value;
                     $address .= !empty($address) && !empty($zip_value) ? " {$zip_value}" : $zip_value;
                     $address .= !empty($address) && !empty($country_value) ? $line_break . $country_value : $country_value;
                 }
                 return $address;
             } else {
                 return '';
             }
             break;
         case 'email':
             return GFCommon::is_valid_email($value) && $format == 'html' ? '<a href="mailto:' . $value . '">' . $value . '</a>' : $value;
             break;
         case 'website':
             return GFCommon::is_valid_url($value) && $format == 'html' ? '<a href="' . $value . '" target="_blank">' . $value . '</a>' : $value;
             break;
         case 'checkbox':
             if (is_array($value)) {
                 $items = '';
                 foreach ($value as $key => $item) {
                     if (!empty($item)) {
                         switch ($format) {
                             case 'text':
                                 $items .= GFCommon::selection_display($item, $field, $currency, true) . ', ';
                                 break;
                             default:
                                 $items .= '<li>' . GFCommon::selection_display($item, $field, $currency, true) . '</li>';
                                 break;
                         }
                     }
                 }
                 if (empty($items)) {
                     return '';
                 } else {
                     if ($format == 'text') {
                         return substr($items, 0, strlen($items) - 2);
                         //removing last comma
                     } else {
                         return '<ul class="bulleted">' . $items . '</ul>';
                     }
                 }
             } else {
                 return $value;
             }
             break;
         case 'post_image':
             $ary = explode('|:|', $value);
             $url = count($ary) > 0 ? $ary[0] : '';
             $title = count($ary) > 1 ? $ary[1] : '';
             $caption = count($ary) > 2 ? $ary[2] : '';
             $description = count($ary) > 3 ? $ary[3] : '';
             if (!empty($url)) {
                 $url = str_replace(' ', '%20', $url);
                 switch ($format) {
                     case 'text':
                         $value = $url;
                         $value .= !empty($title) ? '\\n\\n' . $field['label'] . ' (' . __('Title', 'gravityforms') . '): ' . $title : '';
                         $value .= !empty($caption) ? '\\n\\n' . $field['label'] . ' (' . __('Caption', 'gravityforms') . '): ' . $caption : '';
                         $value .= !empty($description) ? '\\n\\n' . $field['label'] . ' (' . __('Description', 'gravityforms') . '): ' . $description : '';
                         break;
                     default:
                         $path = str_replace(site_url() . '/', ABSPATH, $url);
                         $value = "<a href='{$url}' target='_blank' title='" . __("Click to view", "gravityforms") . "'><img src='{$path}' width='100' /></a>";
                         $value .= !empty($title) ? "<div>Title: {$title}</div>" : "";
                         $value .= !empty($caption) ? "<div>Caption: {$caption}</div>" : "";
                         $value .= !empty($description) ? "<div>Description: {$description}</div>" : "";
                         break;
                 }
             }
             return $value;
         case 'fileupload':
             $output = '';
             $output_arr = array();
             if (!empty($value)) {
                 $output .= '<ul>';
                 $file_paths = rgar($field, 'multipleFiles') ? json_decode($value) : array($value);
                 foreach ($file_paths as $file_path) {
                     $info = pathinfo($file_path);
                     $file_path = esc_attr(str_replace(' ', '%20', $file_path));
                     $output_arr[] = '<li><a href="' . $file_path . '" target="_blank" title="' . __('Click to view', 'gravityforms') . '">' . $info['basename'] . '</a></li>';
                 }
                 $output .= join(PHP_EOL, $output_arr);
                 $output .= '</ul>';
             }
             return $output;
             break;
         case 'date':
             return GFCommon::date_display($value, rgar($field, 'dateFormat'));
             break;
         case 'radio':
         case 'select':
             return GFCommon::selection_display($value, $field, $currency, true);
             break;
         case 'multiselect':
             if (empty($value) || $format == 'text') {
                 return $value;
             }
             if (!is_array($value)) {
                 $value = explode(',', $value);
             }
             $items = '';
             foreach ($value as $item) {
                 $items .= '<li>' . GFCommon::selection_display($item, $field, $currency, true) . '</li>';
             }
             return '<ul class="bulleted">' . $items . '</ul>';
             break;
         case 'calculation':
         case 'singleproduct':
             if (is_array($value)) {
                 $product_name = trim($value[$field['id'] . '.1']);
                 $price = trim($value[$field['id'] . '.2']);
                 $quantity = trim($value[$field['id'] . '.3']);
                 $product = $product_name . ', ' . __('Qty: ', 'gravityforms') . $quantity . ', ' . __('Price: ', 'gravityforms') . $price;
                 return $product;
             } else {
                 return '';
             }
             break;
         case 'number':
             return GFCommon::format_number($value, rgar($field, 'numberFormat'));
             break;
         case 'singleshipping':
         case 'donation':
         case 'total':
         case 'price':
             return GFCommon::to_money($value, $currency);
         case 'list':
             if (empty($value)) {
                 return '';
             }
             $value = unserialize($value);
             $has_columns = is_array($value[0]);
             if (!$has_columns) {
                 $items = '';
                 foreach ($value as $key => $item) {
                     if (!empty($item)) {
                         switch ($format) {
                             case 'text':
                                 $items .= $item . ', ';
                                 break;
                             case 'url':
                                 $items .= $item . ',';
                                 break;
                             default:
                                 if ($media == 'email') {
                                     $items .= '<li>' . htmlspecialchars($item) . '</li>';
                                 } else {
                                     $items .= '<li>' . htmlspecialchars($item) . '</li>';
                                 }
                                 break;
                         }
                     }
                 }
                 if (empty($items)) {
                     return '';
                 } else {
                     if ($format == 'text') {
                         return substr($items, 0, strlen($items) - 2);
                         //removing last comma
                     } else {
                         if ($format == 'url') {
                             return substr($items, 0, strlen($items) - 1);
                             //removing last comma
                         } else {
                             return '<ul class="bulleted">' . $items . '</ul>';
                         }
                     }
                 }
             } else {
                 if (is_array($value)) {
                     $columns = array_keys($value[0]);
                     $list = '';
                     switch ($format) {
                         case 'text':
                             $is_first_row = true;
                             foreach ($value as $item) {
                                 if (!$is_first_row) {
                                     $list .= '\\n\\n' . $field['label'] . ': ';
                                 }
                                 $list .= implode(',', array_values($item));
                                 $is_first_row = false;
                             }
                             break;
                         case 'url':
                             foreach ($value as $item) {
                                 $list .= implode('|', array_values($item)) . ',';
                             }
                             if (!empty($list)) {
                                 $list = substr($list, 0, strlen($list) - 1);
                             }
                             break;
                         default:
                             if ($media == 'email') {
                                 $list = '<table autosize="1" class="gfield_list" style="border-top: 1px solid #DFDFDF; border-left: 1px solid #DFDFDF; border-spacing: 0; padding: 0; margin: 2px 0 6px; width: 100%"><thead><tr>';
                                 //reading columns from entry data
                                 foreach ($columns as $column) {
                                     $list .= '<th style="background-image: none; border-right: 1px solid #DFDFDF; border-bottom: 1px solid #DFDFDF; padding: 6px 10px; font-family: sans-serif; font-size: 12px; font-weight: bold; background-color: #F1F1F1; color:#333; text-align:left">' . esc_html($column) . '</th>';
                                 }
                                 $list .= '</tr></thead>';
                                 $list .= '<tbody style="background-color: #F9F9F9">';
                                 foreach ($value as $item) {
                                     $list .= '<tr>';
                                     foreach ($columns as $column) {
                                         $val = rgar($item, $column);
                                         $list .= '<td style="padding: 6px 10px; border-right: 1px solid #DFDFDF; border-bottom: 1px solid #DFDFDF; border-top: 1px solid #FFF; font-family: sans-serif; font-size:12px;">{$val}</td>';
                                     }
                                     $list .= '</tr>';
                                 }
                                 $list .= '</tbody></table>';
                             } else {
                                 $list = '<table autosize="1" class="gfield_list"><thead><tr>';
                                 //reading columns from entry data
                                 foreach ($columns as $column) {
                                     $list .= '<th>' . esc_html($column) . '</th>';
                                 }
                                 $list .= '</tr></thead>';
                                 $list .= '<tbody>';
                                 foreach ($value as $item) {
                                     $list .= '<tr>';
                                     foreach ($columns as $column) {
                                         $val = rgar($item, $column);
                                         $list .= '<td>' . htmlspecialchars($val) . '</td>';
                                     }
                                     $list .= '</tr>';
                                 }
                                 $list .= '</tbody></table>';
                             }
                             break;
                     }
                     return $list;
                 }
             }
             return '';
             break;
         default:
             if (!is_array($value)) {
                 return nl2br($value);
             }
             break;
     }
 }
Exemple #7
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;
 }
 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;
 }
Exemple #9
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;
 }
Exemple #10
0
 public static function get_lead_field_display($field, $value)
 {
     switch (RGFormsModel::get_input_type($field)) {
         case "name":
             if (is_array($value)) {
                 $prefix = trim($value[$field["id"] . ".2"]);
                 $first = trim($value[$field["id"] . ".3"]);
                 $last = trim($value[$field["id"] . ".6"]);
                 $suffix = trim($value[$field["id"] . ".8"]);
                 $name = $prefix;
                 $name .= !empty($name) && !empty($first) ? " {$first}" : $first;
                 $name .= !empty($name) && !empty($last) ? " {$last}" : $last;
                 $name .= !empty($name) && !empty($suffix) ? " {$suffix}" : $suffix;
                 return $name;
             } else {
                 return $value;
             }
             break;
         case "address":
             if (is_array($value)) {
                 $street_value = trim($value[$field["id"] . ".1"]);
                 $street2_value = trim($value[$field["id"] . ".2"]);
                 $city_value = trim($value[$field["id"] . ".3"]);
                 $state_value = trim($value[$field["id"] . ".4"]);
                 $zip_value = trim($value[$field["id"] . ".5"]);
                 $country_value = trim($value[$field["id"] . ".6"]);
                 $address = $street_value;
                 $address .= !empty($address) && !empty($street2_value) ? " {$street2_value}" : $street2_value;
                 $address .= !empty($address) && (!empty($city_value) || !empty($state_value)) ? "<br />{$city_value}" : $city_value;
                 $address .= !empty($address) && !empty($city_value) && !empty($state_value) ? ", {$state_value}" : $state_value;
                 $address .= !empty($address) && !empty($zip_value) ? " {$zip_value}" : $zip_value;
                 $address .= !empty($address) && !empty($country_value) ? "<br />{$country_value}" : $country_value;
                 //adding map link
                 if (!empty($address)) {
                     $address_qs = str_replace("<br />", " ", $address);
                     //replacing <br/> with spaces
                     $address_qs = urlencode($address_qs);
                     $address .= "<br/><a href='http://maps.google.com/maps?q={$address_qs}' target='_blank' class='map-it-link'>Map It</a>";
                 }
                 return $address;
             } else {
                 return "";
             }
             break;
         case "email":
             return GFCommon::is_valid_email($value) ? "<a href='mailto:{$value}'>{$value}</a>" : $value;
             break;
         case "website":
             return GFCommon::is_valid_url($value) ? "<a href='{$value}' target='_blank'>{$value}</a>" : $value;
             break;
         case "checkbox":
             if (is_array($value)) {
                 foreach ($value as $key => $item) {
                     if (!empty($item)) {
                         $items .= "<li>{$item}</li>";
                     }
                 }
                 return empty($items) ? "" : "<ul class='bulleted'>{$items}</ul>";
             } else {
                 return $value;
             }
             break;
         case "post_image":
             list($url, $title, $caption, $description) = explode("|:|", $value);
             if (!empty($url)) {
                 $url = str_replace(" ", "%20", $url);
                 $value = "<a href='{$url}' target='_blank' title='" . __("Click to view", "gravityforms") . "'><img src='{$url}' width='100' /></a>";
                 $value .= !empty($title) ? "<div>Title: {$title}</div>" : "";
                 $value .= !empty($caption) ? "<div>Caption: {$caption}</div>" : "";
                 $value .= !empty($description) ? "<div>Description: {$description}</div>" : "";
             }
             return $value;
         case "fileupload":
             $file_path = $value;
             if (!empty($file_path)) {
                 $info = pathinfo($file_path);
                 $file_path = esc_attr(str_replace(" ", "%20", $file_path));
                 $value = "<a href='{$file_path}' target='_blank' title='" . __("Click to view", "gravityforms") . "'>" . $info["basename"] . "</a>";
             }
             return $value;
             break;
         case "date":
             return GFCommon::date_display($value, $field["dateFormat"]);
             break;
         default:
             return nl2br($value);
             break;
     }
 }