/** * 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; }
/** * 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; }