E; } return $value; } function cookie_set_safe($name, $value, $expiration = 0, $domain = '') { $enc = base64_encode(json_encode($value)); return cookie_set($name, $enc, $expiration, '/', $domain); } function cookie_set($name, $value = '', $expire = 0, $path = '', $domain = '', $secure = FALSE, $httponly = FALSE) { $_COOKIE[$name] = $value; if (!empty($expire)) { $expire = time() + $expire; } return setcookie($name, $value, $expire, $path, $domain, $secure, $httponly); } function cookie_delete($name, $path = '', $domain = '', $secure = FALSE, $httponly = FALSE) { $value = time() - 1314000; $_COOKIE[$name] = $value; return setcookie($name, '', $value, $path, $domain, $secure, $httponly); } function session_init($id = "") { if (session_status() == PHP_SESSION_NONE) { if (!empty($id)) { session_id($id); } session_start(); } return TRUE; } function session_set($key = "", $value = "") { session_init(); if (empty($key)) { return FALSE; } $_SESSION[$key] = json_encode($value); return TRUE; } function session_id_get() { session_init(); return session_id(); } function session_get($key = "") { session_init(); if (empty($key)) { return FALSE; } $data = isset($_SESSION[$key]) ? json_decode($_SESSION[$key], TRUE) : NULL; return $data; } function session_delete($key = "") { session_init(); if (empty($key)) { return FALSE; } unset($_SESSION[$key]); return TRUE; } function get_ip_address() { // check cloudflare // Try to use Enable Pseudo IPv4 on CF. If client use IPv6 it will be in Cf-Connecting-IPv6 header. if (isset($_SERVER["HTTP_CF_CONNECTING_IP"]) && validate_ip($_SERVER['HTTP_X_FORWARDED'])) { $ip = $_SERVER["HTTP_CF_CONNECTING_IP"]; $ip = \App\Helpers\IPHelper::ensureIPv4($ip); return $ip; } // check for shared internet/ISP IP if (!empty($_SERVER['HTTP_CLIENT_IP']) && validate_ip($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER["HTTP_CLIENT_IP"]; $ip = \App\Helpers\IPHelper::ensureIPv4($ip); return $ip; } // check for IPs passing through proxies if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { // check if multiple ips exist in var if (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') !== FALSE) { $iplist = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); foreach ($iplist as $ip) { if (validate_ip($ip)) return $ip; } } else { if (validate_ip($_SERVER['HTTP_X_FORWARDED_FOR'])) return $_SERVER['HTTP_X_FORWARDED_FOR']; } } if (!empty($_SERVER['HTTP_X_FORWARDED']) && validate_ip($_SERVER['HTTP_X_FORWARDED'])) return $_SERVER['HTTP_X_FORWARDED']; if (!empty($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']) && validate_ip($_SERVER['HTTP_X_CLUSTER_CLIENT_IP'])) return $_SERVER['HTTP_X_CLUSTER_CLIENT_IP']; if (!empty($_SERVER['HTTP_FORWARDED_FOR']) && validate_ip($_SERVER['HTTP_FORWARDED_FOR'])) return $_SERVER['HTTP_FORWARDED_FOR']; if (!empty($_SERVER['HTTP_FORWARDED']) && validate_ip($_SERVER['HTTP_FORWARDED'])) return $_SERVER['HTTP_FORWARDED']; // return unreliable ip since all else failed return $_SERVER['REMOTE_ADDR']; } function listing_get_detail($id = "", $options = array()) { if (empty($id)) { return FALSE; } $precheck = TRUE; if (!isset($options['x_table'])) { $precheck = FALSE; } if ($precheck) { $x_table = set_value_of($options['x_table'], $options['table']); $x_table_data = $x_table . "_data"; $data = querytorowarray("select * from `$x_table_data`" . " where id='$id' limit 1"); if (array_is_valid($data)) { $_options_format = array(); if (isset($options['cat'])) { $_options_format['cat'] = $options['cat']; } if (isset($options['category'])) { $_options_format['category'] = $options['category']; } if (isset($options['current_city'])) { $_options_format['current_city'] = $options['current_city']; } if (isset($options['current_state'])) { $_options_format['current_state'] = $options['current_state']; } if (isset($options['current_country'])) { $_options_format['current_country'] = $options['current_country']; } if (isset($options['current_longitude'])) { $_options_format['current_longitude'] = $options['current_longitude']; } if (isset($options['current_latitude'])) { $_options_format['current_latitude'] = $options['current_latitude']; } if (isset($options['address_formatter'])) { $_options_format['address_formatter'] = $options['address_formatter']; } $_options_format['table'] = $x_table; $data = __format_listing_item_data($data, $_options_format); return $data; } } return FALSE; } function url_title($str, $separator = 'dash', $lowercase = FALSE) { if ($separator == 'dash') { $search = '_'; $replace = '-'; } else { $search = '-'; $replace = '_'; } $trans = array( '&\#\d+?;' => '', '&\S+?;' => '', '\s+' => $replace, '\.' => $replace, '[^a-z0-9\-_]' => '', $replace . '+' => $replace, $replace . '$' => $replace, '^' . $replace => $replace, '\.+$' => '', ); $str = strip_tags($str); foreach ($trans as $key => $val) { $str = preg_replace("#" . $key . "#i", $val, $str); } if ($lowercase === TRUE) { $str = strtolower($str); } return trim(stripslashes($str), $replace); } function url_state_generate($options = array()) { $url_mapping = url_mapping_get(GeneralEnum::URL_MAPPING_TYPE_S); switch ($options['type']) { default: $href = "/" . $url_mapping . "/" . link_encode($options['state']) . "/" . link_encode($options['subcat_slug']); $text = $options['text']; break; case "301edback": $href = "/" . $url_mapping . "/" . link_encode($options['state']) . "/" . link_encode($options['subcat_slug']); $text = $options['text']; break; case "mainkeyword": $href = "/" . $url_mapping . "/" . link_encode($options['state']) . "/" . link_encode($options['main_keyword']) . "/" . link_encode($options['subcat_slug']); $text = $options['text']; break; case "sitemap": $href = "/" . $url_mapping . "/" . link_encode($options['state']) . "/" . $options['subcat_slug']; $text = $options['text']; break; case "sitemap_301": $href = "/" . $url_mapping . "/" . link_encode($options['state']) . "/" . $options['other']; $text = $options['text']; break; } if ($options['return_type'] == "href") { return $href; } if ($options['return_type'] == "text") { return $text; } $link = "" . $text . ""; return $link; } function url_cityorcounty_generate($options = array()) { return url_city_generate($options); } function url_categories_generate($options = array()) { return url_city_generate($options); } function url_geo_generate($options = array()) { return url_city_generate($options); } function url_tos_generate($options = array()) { $url_mapping = url_mapping_get(GeneralEnum::URL_MAPPING_TYPE_TOS); $href = "/" . $url_mapping; $text = "TOS"; if ($options['return_type'] == "href") { return $href; } if ($options['return_type'] == "text") { return $text; } $link = "" . $text . ""; return $link; } function url_privacypolicy_generate($options = array()) { $url_mapping = url_mapping_get(GeneralEnum::URL_MAPPING_TYPE_PRIVACY_POLICY); $href = "/" . $url_mapping; $text = "Privacy"; if ($options['return_type'] == "href") { return $href; } if ($options['return_type'] == "href_full") { $domain = (!empty($options['domain'])) ? $options['domain'] : __domainCertainly(); $domain = domain_certainly($domain); return "http://" . $domain . $href; } if ($options['return_type'] == "text") { return $text; } $link = "" . $text . ""; return $link; } function url_trustedpartners_generate($options = array()) { $url_mapping = url_mapping_get(GeneralEnum::URL_MAPPING_TYPE_TRUSTED_PARTNERS); $href = "/" . $url_mapping; $text = "Trusted Partners"; if ($options['return_type'] == "href") { return $href; } if ($options['return_type'] == "href_full") { $domain = (!empty($options['domain'])) ? $options['domain'] : __domainCertainly(); $domain = domain_certainly($domain); return "http://" . $domain . $href; } if ($options['return_type'] == "text") { return $text; } $link = "" . $text . ""; return $link; } function url_linkpool_generate($options = array()) { $url_mapping = url_mapping_get(GeneralEnum::URL_MAPPING_TYPE_L); $href = "/" . $url_mapping; $text = "Links"; if ($options['return_type'] == "href") { return $href; } if ($options['return_type'] == "href_full") { $domain = (!empty($options['domain'])) ? $options['domain'] : __domainCertainly(); $domain = domain_certainly($domain); return "http://" . $domain . $href; } if ($options['return_type'] == "text") { return $text; } $link = "" . $text . ""; return $link; } function url_rycntrctr_generate($options = array()) { $href = "/contractor"; //$href = "/go/rycntrctr"; $text = "Signup as a Contractor"; if ($options['return_type'] == "href") { return $href; } if ($options['return_type'] == "href_full") { $domain = (!empty($options['domain'])) ? $options['domain'] : __domainCertainly(); $domain = domain_certainly($domain); return "https://" . $domain . $href; } if ($options['return_type'] == "text") { return $text; } $link = "" . $text . ""; return $link; } function url_ccpa_generate($options = array()) { $url_mapping = url_mapping_get(GeneralEnum::URL_MAPPING_TYPE_CCPA); $href = "/" . $url_mapping; $text = "CCPA"; if ($options['return_type'] == "href") { return $href; } if ($options['return_type'] == "href_full") { $domain = (!empty($options['domain'])) ? $options['domain'] : __domainCertainly(); $domain = domain_certainly($domain); return "http://" . $domain . $href; } if ($options['return_type'] == "text") { return $text; } $link = "" . $text . ""; return $link; } function url_ccpa_anchor() { return "California Privacy"; } function url_donotsell_anchor() { return "Do Not Sell My Personal Information"; } function url_accessibility_anchor() { return "Accessibility"; } function url_copyright_anchor() { return "Copyright"; } function url_donotsell_generate($options = array()) { $url_mapping = url_mapping_get(GeneralEnum::URL_MAPPING_TYPE_DO_NOT_SELL); if ($options['return_type'] == "mapping") { return $url_mapping; } $href = "/" . $url_mapping; $text = url_donotsell_anchor(); if ($options['return_type'] == "href") { return $href; } if ($options['return_type'] == "href_full") { $domain = (!empty($options['domain'])) ? $options['domain'] : __domainCertainly(); $domain = domain_certainly($domain); return "http://" . $domain . $href; } if ($options['return_type'] == "text") { return $text; } $link = "" . $text . ""; return $link; } function url_accessibility_generate($options = array()) { $url_mapping = url_mapping_get(GeneralEnum::URL_MAPPING_TYPE_ACCESSIBILITY); $href = "/" . $url_mapping; $text = url_accessibility_anchor(); if ($options['return_type'] == "href") { return $href; } if ($options['return_type'] == "href_full") { $domain = (!empty($options['domain'])) ? $options['domain'] : __domainCertainly(); $domain = domain_certainly($domain); return "http://" . $domain . $href; } if ($options['return_type'] == "text") { return $text; } $link = "" . $text . ""; return $link; } function url_copyright_generate($options = array()) { $url_mapping = url_mapping_get(GeneralEnum::URL_MAPPING_TYPE_COPYRIGHT); $href = "/" . $url_mapping; $text = url_copyright_anchor(); if ($options['return_type'] == "href") { return $href; } if ($options['return_type'] == "href_full") { $domain = (!empty($options['domain'])) ? $options['domain'] : __domainCertainly(); $domain = domain_certainly($domain); return "http://" . $domain . $href; } if ($options['return_type'] == "text") { return $text; } $link = "" . $text . ""; return $link; } function url_d_generate($options = array()) { $url_mapping = url_mapping_get(GeneralEnum::URL_MAPPING_TYPE_D); switch ($options['type']) { default: $href = "/" . $url_mapping . "/" . link_encode($options['main_keyword']); $text = $options['text']; break; case "301": $href = $url_mapping . "/" . link_encode($options['main_keyword']); $text = $options['text']; break; case "301edback": $href = "/"; $text = $options['text']; break; } switch ($options['text_format']) { default: break; } if ($options['return_type'] == "href") { return $href; } if ($options['return_type'] == "text") { return $text; } $link = "" . $text . ""; return $link; } function url_dp_generate($options = array()) { $url_mapping = url_mapping_get(GeneralEnum::URL_MAPPING_TYPE_DP); switch ($options['type']) { default: $href = "/" . $url_mapping . "/" . link_encode($options['main_keyword']); $text = $options['text']; break; case "301": $href = $url_mapping . "/" . link_encode($options['main_keyword']); $text = $options['text']; break; case "301edback": $href = "/"; $text = $options['text']; break; } switch ($options['text_format']) { default: break; } if ($options['return_type'] == "href") { return $href; } if ($options['return_type'] == "text") { return $text; } $link = "" . $text . ""; return $link; } function url_dc_generate($options = array()) { $url_mapping = url_mapping_get(GeneralEnum::URL_MAPPING_TYPE_DC); switch ($options['type']) { default: $href = "/" . $url_mapping . "/" . link_encode($options['main_keyword']); $text = $options['text']; break; case "301": $href = $url_mapping . "/" . link_encode($options['main_keyword']); $text = $options['text']; break; case "301edback": $href = "/"; $text = $options['text']; break; } switch ($options['text_format']) { default: break; } if ($options['return_type'] == "href") { return $href; } if ($options['return_type'] == "text") { return $text; } $link = "" . $text . ""; return $link; } function url_city_generate($options = array()) { if (!country_settings_property("state")) { $options['state'] = url_mapping_get(GeneralEnum::URL_MAPPING_TYPE_LOCATION); } switch ($options['type']) { default: $href = "/" . link_encode($options['slug']) . "/" . link_encode($options['state']) . "/" . link_encode($options['geo']) . "/" . link_encode($options['subcat_slug']); $text = $options['text']; break; case "sitemap": $href = "/" . link_encode($options['slug']) . "/" . link_encode($options['state']) . "/" . link_encode($options['geo']) . "/" . link_encode($options['subcat_slug']); $text = $options['text']; break; case "only_location": $href = "/" . link_encode($options['geo']); $text = $options['text']; break; case "sitemap_only_location": $href = "/" . link_encode($options['geo']); $text = $options['text']; break; } switch ($options['text_format']) { default: $text = ucwords(strtolower($text)); break; case "none": break; } if ($options['return_type'] == "href") { return $href; } if ($options['return_type'] == "text") { return $text; } $link = "" . $text . ""; return $link; } function url_county_generate($options = array()) { switch ($options['type']) { default: $href = "/" . link_encode($options['slug']) . "/" . link_encode($options['state']) . "/" . link_encode($options['geo']) . "/" . link_encode($options['subcat_slug']); $text = $options['text']; break; case "sitemap": $href = "/" . link_encode($options['slug']) . "/" . link_encode($options['state']) . "/" . link_encode($options['geo']) . "/" . link_encode($options['subcat_slug']); $text = $options['text']; break; case "only_location": $href = "/" . link_encode($options['geo']); $text = $options['text']; break; case "sitemap_only_location": $href = "/" . link_encode($options['geo']); $text = $options['text']; break; } switch ($options['text_format']) { default: $text = ucwords(strtolower($text)); break; case "none": break; } if ($options['return_type'] == "href") { return $href; } if ($options['return_type'] == "text") { return $text; } $link = "" . $text . ""; return $link; } function url_location_generate($options = array()) { $url_mapping = url_mapping_get(GeneralEnum::URL_MAPPING_TYPE_LOCATION); switch ($options['type']) { default: $href = "/" . link_encode($options['slug']) . "/" . $url_mapping . "/" . link_encode($options['geo']) . "/" . link_encode($options['subcat_slug']); $text = $options['text']; break; case "sitemap": $href = "/" . link_encode($options['slug']) . "/" . $url_mapping . "/" . link_encode($options['geo']) . "/" . link_encode($options['subcat_slug']); $text = $options['text']; break; } switch ($options['text_format']) { default: $text = ucwords(strtolower($text)); break; case "none": break; } if ($options['return_type'] == "href") { return $href; } if ($options['return_type'] == "text") { return $text; } $link = "" . $text . ""; return $link; } function str_with_prefix_suffix($str = "", $prefix = "", $suffix = "") { $ret = ""; if (!empty($prefix)) { $ret = $prefix . " "; } $ret .= $str; if (!empty($suffix)) { $ret .= " " . $suffix; } return $ret; } function locations_seo_get($options = array()) { $params = array(); if (!empty($options['geo'])) { $params['geo'] = strtoupper($options['geo']); } if (!empty($options['state'])) { $params['state'] = strtoupper($options['state']); } if (array_key_exists("geo_type", $options)) { $params['geo_type'] = $options['geo_type']; } if (!array_is_valid($params)) { return FALSE; } static $instance; $instance_key = ""; if (array_is_valid($options)) { $instance_key .= "_" . sha1(json_encode($options)); } if (is_null($instance[$instance_key])) { $instance[$instance_key] = FALSE; $sql = "select * from zip_geo_high_rev_city where 1=1 "; if (array_key_exists("geo", $params)) { $sql .= " and geo = '" . $params['geo'] . "' "; } if (array_key_exists("state", $params)) { $sql .= " and state = '" . $params['state'] . "' "; } if (array_key_exists("geo_type", $params)) { $sql .= " and geo_type = '" . $params['geo_type'] . "' "; } $sql .= " order by other_loc ASC"; $data = querytorowarray($sql); if (array_is_valid($data)) { $arr = explode("*", $data['other_loc']); if (array_is_valid($arr)) { $ret = array(); $parse_other_loc = FALSE; $need_parse_types = array(""); if (in_array($options['return_type'], $need_parse_types)) { $parse_other_loc = TRUE; } foreach ($arr as $k => $v) { if ($parse_other_loc) { $item_arr = explode(",", $v); $__geo = $v['0']; $__state = $v['1']; } switch ($options['return_type']) { default: case "list_city_stateabr": if (!empty($v)) { $ret[] = $v; } break; } } $instance[$instance_key] = $ret; } } } return $instance[$instance_key]; } function array_sort_by_field($original, $field, $descending = FALSE) { $sortArr = array(); foreach ($original as $key => $value) { $sortArr[$key] = $value[$field]; } if ($descending) { arsort($sortArr); } else { asort($sortArr); } $resultArr = array(); foreach ($sortArr as $key => $value) { $resultArr[$key] = $original[$key]; } return $resultArr; } function location_to_content($zipcode = "", $options = array()) { $country_settings = country_settings_get(); $output = array("status" => FALSE, "message" => "Please try again later"); if (empty($zipcode)) { if (country_settings_property("state") === TRUE) { $output = array("status" => FALSE, "message" => "Please enter your zipcode"); } else { $output = array("status" => FALSE, "message" => "Please enter your location"); } return $output; } $domain = set_value_of($options['domain'], current_domain()); $precheck = TRUE; if (empty($domain)) { $precheck = FALSE; } if ($precheck) { $category = set_value_of($options['category'], ""); $category_slug = set_value_of($options['category_slug'], ""); $precheck_category = TRUE; if (empty($category)) { $category_list = categories_for_domain($domain); $category_found = $category_list['0']; if (array_is_valid($category_found)) { $category = link_encode($category_found['subcat_name']); $category_slug = link_encode($category_found['subcat_slug']); if (empty($category)) { $precheck_category = FALSE; } } } if ($precheck_category) { $precheck_category_data = TRUE; $slug = x_table_category_category_slug($domain, $category); $subcat_slug = x_table_category_category_subcat_slug($domain, $category); if (empty($slug)) { $precheck_category_data = FALSE; } if ($precheck_category_data) { if (country_settings_property("state") === TRUE) { $zipvalid = is_valid_zipcode($zipcode, array("type" => "us")); if (empty($zipcode) || !$zipvalid) { $output = array("status" => FALSE, "message" => "Please enter zipcode"); } else { $zip_row = zip_zip_get_row($zipcode); if (array_is_valid($zip_row)) { $url = url_cityorcounty_generate(array("return_type" => "href", "slug" => $slug, "state" => $zip_row['state'], "geo" => $zip_row['city'], "subcat_slug" => $subcat_slug)); $output = array("status" => TRUE, "message" => "", "url" => $url); } } } else { $other_location = $zipcode; $url = url_location_generate(array("return_type" => "href", "slug" => $slug, "geo" => $other_location, "subcat_slug" => $subcat_slug)); $output = array("status" => TRUE, "message" => "", "url" => $url); } } else { $output = array("status" => FALSE, "message" => "Please select category"); } } else { $output = array("status" => FALSE, "message" => "Please select category"); } } return $output; } function location_finder_view_detail($options = array()) { $domain = (!empty($options['domain'])) ? $options['domain'] : current_domain(); $category_current_id = (!empty($options['current_category_id'])) ? $options['current_category_id'] : ""; if (!empty($domain)) { country_init($domain); $country_id = country_settings_property("country_id"); $category_list = categories_for_domain($domain); $category_list_sorted = array_sort_by_field($category_list, "subcat_name", FALSE); $ret['country'] = $country_id; $ret['category_list'] = $category_list_sorted; $ret['category_current_id'] = $category_current_id; $ret['category_multi'] = (array_is_valid($category_list) && count($category_list) > 0) ? TRUE : FALSE; $ret['hide_dom_locations'] = FALSE; $ret['show_category'] = FALSE; if (empty($category_current_id) && $ret['category_multi']) { $ret['show_category'] = TRUE; } if (country_settings_property("state") === TRUE) { $ret['show_zip'] = TRUE; } else { $domain_arr = c_domain_get($domain); if (!empty($GLOBALS['__country_domain_variant'])) { $domain_arr = c_domain_get_with_country_variant($GLOBALS['__country_domain_variant']); } $options_zwglbcid = array(); $options_zwglbcid['latitude'] = $domain_arr['geotarget_latitude']; $options_zwglbcid['longitude'] = $domain_arr['geotarget_longitude']; $options_zwglbcid['radius'] = $domain_arr['geotarget_radius']; $zip_world_get_location_by_country_id = zip_world_get_location_by_country_id($country_id, $options_zwglbcid); $ret['show_location_other'] = FALSE; if (empty($__tdata_view['other_location'])) { $ret['show_location_other'] = TRUE; } $ret['other_location_list'] = $zip_world_get_location_by_country_id; } /** * Override view_data * This can be used for geotable_simulated_content to change titles to Models, Manufacturer and etc */ //$ret['view_custom_data']['title'] = ""; return $ret; } return FALSE; } function state_get_name($state = "") { if (empty($state)) { return FALSE; } $state = strtoupper($state); static $instance; $instance_key = $state; if (is_null($instance[$instance_key])) { $instance[$instance_key] = FALSE; $data = dataprovider_state_list(array("state" => $state)); if (array_is_valid($data)) { $instance[$instance_key] = $data['statefullname']; } } return $instance[$instance_key]; } function tcpa_render($text = "", $options = []) { $submit_button_text = $options['submit_button_text']; if (empty($submit_button_text)) { $submit_button_text = "Submit"; } $text = str_replace("{{Submit}}", $submit_button_text, $text); $text = str_replace("{{SubmitButton}}", $submit_button_text, $text); return $text; } function tcpa_get($domain = "", $options = []) { //$cacheKey = $domain."|".sha1(json_encode($options)) //$options["tcpa_column"] = "tcpa_wizard_phone_last"; $__tcpaOverride = \App\Support\ViewData::isTCPAOverride($options); if ($__tcpaOverride['status'] === TRUE) { $text = $__tcpaOverride['tcpa']; } else { $consentCompany_stonecanyon = ConsentEnum::TCPA_COMPANY_STONECANYONAI; $consentCompany_angi = ConsentEnum::TCPA_COMPANY_ANGI; $consentCompany_networx = ConsentEnum::TCPA_COMPANY_NETWORX; $trustedPartnersText = "trusted partners"; /* if (date("Y-m-d") < "2025-01-27") { } */ $trustedPartnersText = 'trusted Home Improvement partners'; $angiTermsLink = \App\Support\TcpaHelper::getAngiTermsLink(); $angiPrivacyPolicyLink = \App\Support\TcpaHelper::getAngiPrivacyPolicyLink(); // We are using hidden fields to store the data in db as consent data although there are no checkboxes /* $text = << By clicking “{{Submit}}” below, I am providing my ESIGN signature and express written consent agreement to permit our $trustedPartnersText such as Angi, StoneCanyonAI and parties calling on their behalf to contact me at the number provided above for marketing purposes including through the use of automated technology, SMS/MMS messages, AI generated call or text, and prerecorded and/or artificial voice messages. By clicking “{{Submit}}” below, you agree to our Terms of Service as well as to Angi Terms of Service and Privacy Policy. Consent to contact doesn’t require you to purchase service. EOF; */ // Changed on 2025-05-08 $text = << By clicking “{{Submit}}” below, I am providing my ESIGN signature and express written consent agreement to permit up to four of our $trustedPartnersText such as Angi, StoneCanyonAI and parties calling on their behalf to contact me at the number provided above for marketing purposes including through the use of automated technology, SMS/MMS messages, AI generated call or text, and prerecorded and/or artificial voice messages. By clicking “{{Submit}}” below, you agree to our Terms of Service as well as to Angi Terms of Service and Privacy Policy. Consent is not a condition of purchase.