<?php

function wpcf7_is_name($string)
{
    return preg_match('/^[A-Za-z][-A-Za-z0-9_:.]*$/', $string);
}
function wpcf7_is_email($email)
{
    $result = is_email($email);
    return apply_filters('wpcf7_is_email', $result, $email);
}
function wpcf7_is_url($url)
{
    $result = false !== filter_var($url, FILTER_VALIDATE_URL);
    return apply_filters('wpcf7_is_url', $result, $url);
}
function wpcf7_is_tel($tel)
{
    $pattern = '%^[+]?' . '(?:\\([0-9]+\\)|[0-9]+)' . '(?:[/ -]*' . '(?:\\([0-9]+\\)|[0-9]+)' . ')*$%';
    $result = preg_match($pattern, trim($tel));
    return apply_filters('wpcf7_is_tel', $result, $tel);
}
function wpcf7_is_number($number)
{
    $result = is_numeric($number);
    return apply_filters('wpcf7_is_number', $result, $number);
}
function wpcf7_is_date($date)
{
    $result = preg_match('/^([0-9]{4,})-([0-9]{2})-([0-9]{2})$/', $date, $matches);
    if ($result) {
        $result = checkdate($matches[2], $matches[3], $matches[1]);
    }
    return apply_filters('wpcf7_is_date', $result, $date);
}
function wpcf7_is_mailbox_list($mailbox_list)
{
    if (!is_array($mailbox_list)) {
        $mailbox_text = (string) $mailbox_list;
        $mailbox_text = preg_replace('/\\\\(?:\\"|\')/', 'esc-quote', $mailbox_text);
        $mailbox_text = preg_replace('/(?:\\".*?\\"|\'.*?\')/', 'quoted-string', $mailbox_text);
        $mailbox_list = explode(',', $mailbox_text);
    }
    $addresses = array();
    foreach ($mailbox_list as $mailbox) {
        if (!is_string($mailbox)) {
            return false;
        }
        $mailbox = trim($mailbox);
        if ('' === $mailbox) {
            continue;
        }
        if (preg_match('/<(.+)>$/', $mailbox, $matches)) {
            $addr_spec = $matches[1];
        } else {
            $addr_spec = $mailbox;
        }
        if (!wpcf7_is_email($addr_spec)) {
            return false;
        }
        $addresses[] = $addr_spec;
    }
    return $addresses;
}
function wpcf7_is_email_in_domain($email, $domain)
{
    $email_list = wpcf7_is_mailbox_list($email);
    $domain = strtolower($domain);
    foreach ($email_list as $email) {
        $email_domain = substr($email, strrpos($email, '@') + 1);
        $email_domain = strtolower($email_domain);
        $domain_parts = explode('.', $domain);
        do {
            $site_domain = implode('.', $domain_parts);
            if ($site_domain == $email_domain) {
                continue 2;
            }
            array_shift($domain_parts);
        } while ($domain_parts);
        return false;
    }
    return true;
}
function wpcf7_is_email_in_site_domain($email)
{
    if (wpcf7_is_localhost()) {
        return true;
    }
    $site_domain = strtolower($_SERVER['SERVER_NAME']);
    if (preg_match('/^[0-9.]+$/', $site_domain)) {
        return true;
    }
    if (wpcf7_is_email_in_domain($email, $site_domain)) {
        return true;
    }
    $home_url = home_url();
    if (is_multisite() and function_exists('domain_mapping_siteurl')) {
        $domain_mapping_siteurl = domain_mapping_siteurl(false);
        if ($domain_mapping_siteurl) {
            $home_url = $domain_mapping_siteurl;
        }
    }
    if (preg_match('%^https?://([^/]+)%', $home_url, $matches)) {
        $site_domain = strtolower($matches[1]);
        if ($site_domain != strtolower($_SERVER['SERVER_NAME']) and wpcf7_is_email_in_domain($email, $site_domain)) {
            return true;
        }
    }
    return false;
}
function wpcf7_is_file_path_in_content_dir($path)
{
    if ($real_path = realpath($path)) {
        $path = $real_path;
    } else {
        return false;
    }
    if (0 === strpos($path, realpath(WP_CONTENT_DIR))) {
        return true;
    }
    if (defined('UPLOADS') and 0 === strpos($path, realpath(ABSPATH . UPLOADS))) {
        return true;
    }
    return false;
}