/**
 * Gets all necessary data for processed image.
 *
 * @param type $image
 * @return type
 */
function wpcf_fields_image_get_data($image)
{
    global $wpcf;
    // Check if already cached
    static $cache = array();
    $cache_key = md5($image);
    if (isset($cache[$cache_key])) {
        return $cache[$cache_key];
    }
    WPCF_Loader::loadView('image');
    $utils = Types_Image_Utils::getInstance();
    // Defaults
    $data = array('image' => basename($image), 'image_name' => '', 'extension' => '', 'abspath' => '', 'relpath' => dirname($image), 'fullabspath' => '', 'fullrelpath' => $image, 'is_outsider' => 1, 'is_in_upload_path' => 0, 'is_attachment' => 0, 'error' => '');
    // Strip GET vars
    if (!apply_filters('wpcf_allow_questionmark_in_image_url', false)) {
        $image = strtok($image, '?');
    }
    // Basic URL check
    if (strpos($image, 'http') != 0) {
        return array('error' => sprintf(__('Image %s not valid', 'wpcf'), $image));
    }
    // Extension check
    $data['extension'] = pathinfo($image, PATHINFO_EXTENSION);
    if (!in_array(strtolower($data['extension']), wpcf_fields_image_valid_extension())) {
        return array('error' => sprintf(__('Image %s not valid', 'wpcf'), $image));
    }
    // Check if it's on same domain
    $data['is_outsider'] = !$utils->onDomain($image);
    if (empty($data['is_outsider'])) {
        $data['is_in_upload_path'] = $utils->inUploadPath($image);
        $data['fullabspath'] = $utils->getAbsPath($image);
        $data['abspath'] = dirname($data['fullabspath']);
        // Check if it's attachment
        $data['is_attachment'] = wpcf_image_is_attachment($image);
    }
    // DEbug
    $wpcf_debug = array('image' => $image, 'docroot' => $_SERVER['DOCUMENT_ROOT']);
    // Set remote if enabled
    if ($data['is_outsider'] && wpcf_get_settings('images_remote')) {
        $remote = wpcf_fields_image_get_remote($image);
        // DEbug
        $wpcf_debug['remote'] = $remote;
        if (!is_wp_error($remote)) {
            $data['is_outsider'] = 0;
            $data['is_in_upload_path'] = 1;
            $data['abspath'] = dirname($remote['abspath']);
            $data['fullabspath'] = $remote['abspath'];
            $data['image'] = basename($remote['relpath']);
            $data['relpath'] = dirname($remote['relpath']);
            $data['fullrelpath'] = $remote['relpath'];
            $data['remotely_fetched'] = true;
        }
    }
    // Set rest of data
    $data['image_name'] = basename($data['image'], '.' . $data['extension']);
    $abspath_realpath = realpath($data['abspath']);
    $data['abspath'] = $abspath_realpath ? $abspath_realpath : $data['abspath'];
    $fullabspath_realpath = realpath($data['fullabspath']);
    $data['fullabspath'] = $fullabspath_realpath ? $fullabspath_realpath : $data['fullabspath'];
    // Cache it
    $cache[$cache_key] = $data;
    // DEbug
    $wpcf_debug['data'] = $data;
    $wpcf->debug->images['processed'][md5($image)] = $wpcf_debug;
    return $data;
}
예제 #2
0
/**
 * Gets all necessary data for processed image.
 * 
 * @global type $wpdb
 * @param type $image
 * @return type 
 */
function wpcf_fields_image_get_data($image)
{
    global $current_user;
    // Check if already cached
    static $cache = array();
    if (isset($cache[md5($image)])) {
        return $cache[md5($image)];
    }
    // Defaults
    $data = array('image' => basename($image), 'image_name' => '', 'extension' => '', 'abspath' => '', 'relpath' => dirname($image), 'fullabspath' => '', 'fullrelpath' => $image, 'is_outsider' => 1, 'is_in_upload_path' => 0, 'is_attachment' => 0, 'error' => '');
    // Strip GET vars
    $image = strtok($image, '?');
    // Basic URL check
    if (strpos($image, 'http') != 0) {
        return array('error' => sprintf(__('Image %s not valid', 'wpcf'), $image));
    }
    // Extension check
    $data['extension'] = pathinfo($image, PATHINFO_EXTENSION);
    if (!in_array(strtolower($data['extension']), array('jpg', 'jpeg', 'gif', 'png'))) {
        return array('error' => sprintf(__('Image %s not valid', 'wpcf'), $image));
    }
    // Parse URL
    $parsed = parse_url($image);
    $parsed_wp = parse_url(get_site_url());
    if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\\-]{1,63}\\.[a-z\\.]{2,6})$/i', $parsed['host'], $regs)) {
        $parsed['domain'] = $regs['domain'];
    } else {
        $parsed['domain'] = $parsed['host'];
    }
    if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\\-]{1,63}\\.[a-z\\.]{2,6})$/i', $parsed_wp['host'], $regs)) {
        $parsed_wp['domain'] = $regs['domain'];
    } else {
        $parsed_wp['domain'] = $parsed_wp['host'];
    }
    // Check if it's on same domain
    $data['is_outsider'] = $parsed['domain'] == $parsed_wp['domain'] ? 0 : 1;
    if (!$data['is_outsider']) {
        // Check if it's in upload path
        $upload_dir = wp_upload_dir();
        $upload_dir_parsed = parse_url($upload_dir['baseurl']);
        // Determine if in upload path and calculate abspath
        //
        // This works for regular installation and main blog on multisite
        if ((!is_multisite() || is_main_site()) && strpos($parsed['path'], $upload_dir_parsed['path']) === 0) {
            $data['is_in_upload_path'] = 1;
            if (!empty($parsed_wp['path'])) {
                $data['abspath'] = dirname(str_replace($parsed_wp['path'] . '/', ABSPATH, $parsed['path']));
            } else {
                $data['abspath'] = ABSPATH . dirname($parsed['path']);
            }
            $data['fullabspath'] = $data['abspath'] . DIRECTORY_SEPARATOR . basename($image);
            //
            // Check Multisite
        } else {
            if (is_multisite() && !is_main_site()) {
                if (strpos($parsed['path'], $upload_dir_parsed['path']) === 0) {
                    $data['is_in_upload_path'] = 1;
                }
                $multisite_parsed = explode('/files/', $parsed['path']);
                if (isset($multisite_parsed[1])) {
                    $data['is_in_upload_path'] = 1;
                    $data['abspath'] = $upload_dir['basedir'] . DIRECTORY_SEPARATOR . dirname($multisite_parsed[1]);
                    $data['fullabspath'] = $data['abspath'] . DIRECTORY_SEPARATOR . basename($image);
                }
            }
        }
        // Manual upload
        if (empty($data['abspath'])) {
            if (!empty($parsed_wp['path'])) {
                $data['abspath'] = dirname(str_replace($parsed_wp['path'] . '/', ABSPATH, $parsed['path']));
            } else {
                $data['abspath'] = ABSPATH . dirname($parsed['path']);
            }
            $data['fullabspath'] = $data['abspath'] . DIRECTORY_SEPARATOR . basename($image);
        }
        // Check if it's attachment
        global $wpdb;
        $data['is_attachment'] = $wpdb->get_var($wpdb->prepare("SELECT ID FROM {$wpdb->posts}\r\n    WHERE post_type = 'attachment' AND guid=%s", $image));
    }
    // Set remote if enabled
    if ($data['is_outsider'] && wpcf_get_settings('images_remote')) {
        $remote = wpcf_fields_image_get_remote($image);
        if (!is_wp_error($remote)) {
            $data['is_outsider'] = 0;
            $data['is_in_upload_path'] = 1;
            $data['abspath'] = dirname($remote['abspath']);
            $data['fullabspath'] = $remote['abspath'];
            $data['image'] = $remote['relpath'];
            $data['relpath'] = dirname($remote['relpath']);
            $data['fullrelpath'] = $remote['relpath'];
        }
    }
    // Set rest of data
    $data['image_name'] = basename($data['image'], '.' . $data['extension']);
    $abspath_realpath = realpath($data['abspath']);
    $data['abspath'] = $abspath_realpath ? $abspath_realpath : $data['abspath'];
    $fullabspath_realpath = realpath($data['fullabspath']);
    $data['fullabspath'] = $fullabspath_realpath ? $fullabspath_realpath : $data['fullabspath'];
    // Cache it
    $cache[md5($data['image'])] = $data;
    return $data;
}