<?php if ( ! defined( 'ABSPATH' ) ) { die( 'You are not allowed to call this page directly.' ); } class FrmProFileImport { public static function import_attachment( $val, $field ) { if ( $field->type != 'file' || is_numeric( $val ) || empty( $val ) ) { return $val; } $should_import_files = FrmAppHelper::get_param( 'csv_files', '', 'REQUEST', 'absint' ); if ( ! $should_import_files ) { return $val; } // Set up global vars to track uploaded files self::setup_global_media_import_vars( $field ); // set the form id for the upload path $_POST['form_id'] = $field->form_id; global $wpdb, $frm_vars; $vals = self::convert_to_array( $val ); $new_val = array(); foreach ( (array) $vals as $v ) { $v = trim( $v ); //check to see if the attachment already exists on this site $exists = $wpdb->get_var( $wpdb->prepare( 'SELECT ID FROM ' . $wpdb->posts . ' WHERE guid = %s', $v ) ); if ( $exists ) { $new_val[] = $exists; } else { // Get media ID for newly uploaded image $mid = self::curl_image( $v ); $new_val[] = $mid; if ( is_numeric( $mid ) ) { // Add newly uploaded images to the global media IDs for this field. $frm_vars['media_id'][ $field->id ][] = $mid; } } unset( $v ); } $val = self::convert_to_string( $new_val ); return $val; } /** * Set up global media_id vars. This will be used for post fields. */ private static function setup_global_media_import_vars( $field ) { global $frm_vars; // If it hasn't been set yet, set it now if ( ! isset( $frm_vars['media_id'] ) ) { $frm_vars['media_id'] = array(); } // Clear out old values $frm_vars['media_id'][ $field->id ] = array(); } private static function convert_to_array( $val ) { if ( is_array( $val ) ) { $vals = $val; } else { $vals = str_replace( '<br/>', ',', $val ); $vals = explode( ',', $vals ); } return $vals; } private static function convert_to_string( $val ) { if ( count( $val ) == 1 ) { $val = reset( $val ); } else { $val = implode( ',', $val ); } return $val; } private static function curl_image( $img_url ) { $ch = curl_init( str_replace( array( ' ' ), array( '%20' ), $img_url ) ); $uploads = self::get_upload_dir(); $filename = wp_unique_filename( $uploads['path'], basename( $img_url ) ); $path = trailingslashit( $uploads['path'] ); $fp = fopen( $path . $filename, 'wb' ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_FILE, $fp ); curl_setopt( $ch, CURLOPT_HEADER, 0 ); $user_agent = apply_filters( 'http_headers_useragent', 'WordPress/' . get_bloginfo( 'version' ) . '; ' . get_bloginfo( 'url' ) ); curl_setopt( $ch, CURLOPT_USERAGENT, $user_agent ); curl_setopt( $ch, CURLOPT_REFERER, FrmAppHelper::site_url() ); curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true ); $result = curl_exec( $ch ); curl_close( $ch ); fclose( $fp ); if ( $result ) { $img_url = self::attach_existing_image( $filename ); } else { unlink( $path . $filename ); //echo "<p>Failed to download image $img_url"; } return $img_url; } /** * Get the upload directory for the current form * * @since 3.04.03 */ private static function get_upload_dir() { add_filter( 'upload_dir', array( 'FrmProFileField', 'upload_dir' ) ); $uploads = wp_upload_dir(); remove_filter( 'upload_dir', array( 'FrmProFileField', 'upload_dir' ) ); return $uploads; } private static function attach_existing_image( $filename ) { $attachment = array(); self::prepare_attachment( $filename, $attachment ); $uploads = self::get_upload_dir(); $file = $uploads['path'] . '/' . $filename; $id = wp_insert_attachment( $attachment, $file ); if ( ! function_exists('wp_generate_attachment_metadata') ) { require_once( ABSPATH . 'wp-admin/includes/image.php' ); } wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) ); return $id; } /** * Construct the attachment array */ private static function prepare_attachment( $filename, &$attachment ) { $uploads = self::get_upload_dir(); $attachment = array( 'guid' => $uploads['url'] . '/' . $filename, 'post_content' => '', ); $file = $uploads['path'] . '/' . $filename; self::get_mime_type( $file, $attachment ); self::get_attachment_name( $file, $attachment ); } private static function get_mime_type( $file, &$attachment ) { if ( function_exists('finfo_file') ) { $finfo = finfo_open( FILEINFO_MIME_TYPE ); // return mime type ala mimetype extension $type = finfo_file( $finfo, $file ); finfo_close( $finfo ); unset( $finfo ); } else { $type = mime_content_type( $file ); } $attachment['post_mime_type'] = $type; } private static function get_attachment_name( $file, &$attachment ) { $name_parts = pathinfo( $file ); $name = trim( substr( $name_parts['basename'], 0, - ( 1 + strlen( $name_parts['extension'] ) ) ) ); $attachment['post_title'] = $name; } }