Example #1
0
 /**
  * Inserts an attachment.
  *
  * @since 0.0.1
  * @access public
  *
  * @param array  $object Attachment object.
  * @param string $file   File path of the attached image.
  * @return int           Attachment ID
  */
 public function insert_attachment($object, $file)
 {
     $attachment_id = hq_insert_attachment($object, $file);
     $metadata = hq_generate_attachment_metadata($attachment_id, $file);
     /**
      * Filter the site icon attachment metadata.
      *
      * @since 0.0.1
      *
      * @see hq_generate_attachment_metadata()
      *
      * @param array $metadata Attachment metadata.
      */
     $metadata = apply_filters('site_icon_attachment_metadata', $metadata);
     hq_update_attachment_metadata($attachment_id, $metadata);
     return $attachment_id;
 }
Example #2
0
/**
 * Handle importer uploading and add attachment.
 *
 * @since 0.0.1
 *
 * @return array Uploaded file's details on success, error message on failure
 */
function hq_import_handle_upload()
{
    if (!isset($_FILES['import'])) {
        return array('error' => __('File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini or by post_max_size being defined as smaller than upload_max_filesize in php.ini.'));
    }
    $overrides = array('test_form' => false, 'test_type' => false);
    $_FILES['import']['name'] .= '.txt';
    $upload = hq_handle_upload($_FILES['import'], $overrides);
    if (isset($upload['error'])) {
        return $upload;
    }
    // Construct the object array
    $object = array('post_title' => basename($upload['file']), 'post_content' => $upload['url'], 'post_mime_type' => $upload['type'], 'guid' => $upload['url'], 'context' => 'import', 'post_status' => 'private');
    // Save the data
    $id = hq_insert_attachment($object, $upload['file']);
    /*
     * Schedule a cleanup for one day from now in case of failed
     * import or missing hq_import_cleanup() call.
     */
    hq_schedule_single_event(time() + DAY_IN_SECONDS, 'importer_scheduled_cleanup', array($id));
    return array('file' => $upload['file'], 'id' => $id);
}
Example #3
0
 /**
  * Handle an Image upload for the background image.
  *
  * @since 0.0.1
  */
 public function handle_upload()
 {
     if (empty($_FILES)) {
         return;
     }
     check_admin_referer('custom-background-upload', '_hqnonce-custom-background-upload');
     $overrides = array('test_form' => false);
     $uploaded_file = $_FILES['import'];
     $hq_filetype = hq_check_filetype_and_ext($uploaded_file['tmp_name'], $uploaded_file['name']);
     if (!hq_match_mime_types('image', $hq_filetype['type'])) {
         hq_die(__('The uploaded file is not a valid image. Please try again.'));
     }
     $file = hq_handle_upload($uploaded_file, $overrides);
     if (isset($file['error'])) {
         hq_die($file['error']);
     }
     $url = $file['url'];
     $type = $file['type'];
     $file = $file['file'];
     $filename = basename($file);
     // Construct the object array
     $object = array('post_title' => $filename, 'post_content' => $url, 'post_mime_type' => $type, 'guid' => $url, 'context' => 'custom-background');
     // Save the data
     $id = hq_insert_attachment($object, $file);
     // Add the meta-data
     hq_update_attachment_metadata($id, hq_generate_attachment_metadata($id, $file));
     update_post_meta($id, '_hq_attachment_is_custom_background', get_option('stylesheet'));
     set_theme_mod('background_image', esc_url_raw($url));
     $thumbnail = hq_get_attachment_image_src($id, 'thumbnail');
     set_theme_mod('background_image_thumb', esc_url_raw($thumbnail[0]));
     /** This action is documented in hq-admin/custom-header.php */
     do_action('hq_create_file_in_uploads', $file, $id);
     // For replication
     $this->updated = true;
 }
Example #4
0
/**
 * Update a post with new post data.
 *
 * The date does not have to be set for drafts. You can set the date and it will
 * not be overridden.
 *
 * @since 0.0.1
 *
 * @param array|object $postarr  Optional. Post data. Arrays are expected to be escaped,
 *                               objects are not. Default array.
 * @param bool         $hq_error Optional. Allow return of HQ_Error on failure. Default false.
 * @return int|HQ_Error The value 0 or HQ_Error on failure. The post ID on success.
 */
function hq_update_post($postarr = array(), $hq_error = false)
{
    if (is_object($postarr)) {
        // Non-escaped post was passed.
        $postarr = get_object_vars($postarr);
        $postarr = hq_slash($postarr);
    }
    // First, get all of the original fields.
    $post = get_post($postarr['ID'], ARRAY_A);
    if (is_null($post)) {
        if ($hq_error) {
            return new HQ_Error('invalid_post', __('Invalid post ID.'));
        }
        return 0;
    }
    // Escape data pulled from DB.
    $post = hq_slash($post);
    // Passed post category list overwrites existing category list if not empty.
    if (isset($postarr['post_category']) && is_array($postarr['post_category']) && 0 != count($postarr['post_category'])) {
        $post_cats = $postarr['post_category'];
    } else {
        $post_cats = $post['post_category'];
    }
    // Drafts shouldn't be assigned a date unless explicitly done so by the user.
    if (isset($post['post_status']) && in_array($post['post_status'], array('draft', 'pending', 'auto-draft')) && empty($postarr['edit_date']) && '0000-00-00 00:00:00' == $post['post_date_gmt']) {
        $clear_date = true;
    } else {
        $clear_date = false;
    }
    // Merge old and new fields with new fields overwriting old ones.
    $postarr = array_merge($post, $postarr);
    $postarr['post_category'] = $post_cats;
    if ($clear_date) {
        $postarr['post_date'] = current_time('mysql');
        $postarr['post_date_gmt'] = '';
    }
    if ($postarr['post_type'] == 'attachment') {
        return hq_insert_attachment($postarr);
    }
    return hq_insert_post($postarr, $hq_error);
}
Example #5
0
/**
 * Generate post thumbnail attachment meta data.
 *
 * @since 0.0.1
 *
 * @global array $_hq_additional_image_sizes
 *
 * @param int $attachment_id Attachment Id to process.
 * @param string $file Filepath of the Attached image.
 * @return mixed Metadata for attachment.
 */
function hq_generate_attachment_metadata($attachment_id, $file)
{
    $attachment = get_post($attachment_id);
    $metadata = array();
    $support = false;
    if (preg_match('!^image/!', get_post_mime_type($attachment)) && file_is_displayable_image($file)) {
        $imagesize = getimagesize($file);
        $metadata['width'] = $imagesize[0];
        $metadata['height'] = $imagesize[1];
        // Make the file path relative to the upload dir.
        $metadata['file'] = _hq_relative_upload_path($file);
        // Make thumbnails and other intermediate sizes.
        global $_hq_additional_image_sizes;
        $sizes = array();
        foreach (get_intermediate_image_sizes() as $s) {
            $sizes[$s] = array('width' => '', 'height' => '', 'crop' => false);
            if (isset($_hq_additional_image_sizes[$s]['width'])) {
                $sizes[$s]['width'] = intval($_hq_additional_image_sizes[$s]['width']);
            } else {
                $sizes[$s]['width'] = get_option("{$s}_size_w");
            }
            // For default sizes set in options
            if (isset($_hq_additional_image_sizes[$s]['height'])) {
                $sizes[$s]['height'] = intval($_hq_additional_image_sizes[$s]['height']);
            } else {
                $sizes[$s]['height'] = get_option("{$s}_size_h");
            }
            // For default sizes set in options
            if (isset($_hq_additional_image_sizes[$s]['crop'])) {
                $sizes[$s]['crop'] = $_hq_additional_image_sizes[$s]['crop'];
            } else {
                $sizes[$s]['crop'] = get_option("{$s}_crop");
            }
            // For default sizes set in options
        }
        /**
         * Filter the image sizes automatically generated when uploading an image.
         *
         * @since 0.0.1
         *
         * @param array $sizes An associative array of image sizes.
         */
        $sizes = apply_filters('intermediate_image_sizes_advanced', $sizes);
        if ($sizes) {
            $editor = hq_get_image_editor($file);
            if (!is_hq_error($editor)) {
                $metadata['sizes'] = $editor->multi_resize($sizes);
            }
        } else {
            $metadata['sizes'] = array();
        }
        // Fetch additional metadata from EXIF/IPTC.
        $image_meta = hq_read_image_metadata($file);
        if ($image_meta) {
            $metadata['image_meta'] = $image_meta;
        }
    } elseif (hq_attachment_is('video', $attachment)) {
        $metadata = hq_read_video_metadata($file);
        $support = current_theme_supports('post-thumbnails', 'attachment:video') || post_type_supports('attachment:video', 'thumbnail');
    } elseif (hq_attachment_is('audio', $attachment)) {
        $metadata = hq_read_audio_metadata($file);
        $support = current_theme_supports('post-thumbnails', 'attachment:audio') || post_type_supports('attachment:audio', 'thumbnail');
    }
    if ($support && !empty($metadata['image']['data'])) {
        // Check for existing cover.
        $hash = md5($metadata['image']['data']);
        $posts = get_posts(array('fields' => 'ids', 'post_type' => 'attachment', 'post_mime_type' => $metadata['image']['mime'], 'post_status' => 'inherit', 'posts_per_page' => 1, 'meta_key' => '_cover_hash', 'meta_value' => $hash));
        $exists = reset($posts);
        if (!empty($exists)) {
            update_post_meta($attachment_id, '_thumbnail_id', $exists);
        } else {
            $ext = '.jpg';
            switch ($metadata['image']['mime']) {
                case 'image/gif':
                    $ext = '.gif';
                    break;
                case 'image/png':
                    $ext = '.png';
                    break;
            }
            $basename = str_replace('.', '-', basename($file)) . '-image' . $ext;
            $uploaded = hq_upload_bits($basename, '', $metadata['image']['data']);
            if (false === $uploaded['error']) {
                $image_attachment = array('post_mime_type' => $metadata['image']['mime'], 'post_type' => 'attachment', 'post_content' => '');
                /**
                 * Filter the parameters for the attachment thumbnail creation.
                 *
                 * @since 0.0.1
                 *
                 * @param array $image_attachment An array of parameters to create the thumbnail.
                 * @param array $metadata         Current attachment metadata.
                 * @param array $uploaded         An array containing the thumbnail path and url.
                 */
                $image_attachment = apply_filters('attachment_thumbnail_args', $image_attachment, $metadata, $uploaded);
                $sub_attachment_id = hq_insert_attachment($image_attachment, $uploaded['file']);
                add_post_meta($sub_attachment_id, '_cover_hash', $hash);
                $attach_data = hq_generate_attachment_metadata($sub_attachment_id, $uploaded['file']);
                hq_update_attachment_metadata($sub_attachment_id, $attach_data);
                update_post_meta($attachment_id, '_thumbnail_id', $sub_attachment_id);
            }
        }
    }
    // Remove the blob of binary data from the array.
    unset($metadata['image']['data']);
    /**
     * Filter the generated attachment meta data.
     *
     * @since 0.0.1
     *
     * @param array $metadata      An array of attachment meta data.
     * @param int   $attachment_id Current attachment ID.
     */
    return apply_filters('hq_generate_attachment_metadata', $metadata, $attachment_id);
}
Example #6
0
 /**
  * Insert an attachment and its metadata.
  *
  * @param array  $object  Attachment object.
  * @param string $cropped Cropped image URL.
  *
  * @return int Attachment ID.
  */
 public final function insert_attachment($object, $cropped)
 {
     $attachment_id = hq_insert_attachment($object, $cropped);
     $metadata = hq_generate_attachment_metadata($attachment_id, $cropped);
     /**
      * Filter the header image attachment metadata.
      *
      * @since 0.0.1
      *
      * @see hq_generate_attachment_metadata()
      *
      * @param array $metadata Attachment metadata.
      */
     $metadata = apply_filters('hq_header_image_attachment_metadata', $metadata);
     hq_update_attachment_metadata($attachment_id, $metadata);
     return $attachment_id;
 }