Skip to:
Content

Changeset 10192


Ignore:
Timestamp:
10/05/15 23:56:42 (2 years ago)
Author:
imath
Message:

Cover Image: improve the modularity of the upload process

Create a specific function to generate the cover image file according to the settings of the feature, the upload process will use.

See #6570

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-core/bp-core-attachments.php

    r10191 r10192  
    888888 
    889889/** 
     890 * Generate the cover image file. 
     891 * 
     892 * @since 2.4.0 
     893 * 
     894 * @param  array  $args { 
     895 *     @type string $file            The absolute path to the image. Required. 
     896 *     @type string $component       The component for the object (eg: groups, xprofile). Required. 
     897 *     @type string $cover_image_dir The Cover image dir to write the image into. Required. 
     898 * } 
     899 * @param  BP_Attachment_Cover_Image $cover_image_class The class to use to fit the cover image. 
     900 * @return bool|array          An array containing cover image data on success, false otherwise. 
     901 */ 
     902function bp_attachments_cover_image_generate_file( $args = array(), $cover_image_class = null ) { 
     903    // Bail if an argument is missing 
     904    if ( empty( $args['file'] ) || empty( $args['component'] ) || empty( $args['cover_image_dir'] ) ) { 
     905        return false; 
     906    } 
     907 
     908    // Get advised dimensions for the cover image 
     909    $dimensions = bp_attachments_get_cover_image_dimensions( $args['component'] ); 
     910 
     911    // No dimensions or the file does not match with the cover image dir, stop! 
     912    if ( false === $dimensions || $args['file'] !== $args['cover_image_dir'] . '/' . wp_basename( $args['file'] ) ) { 
     913        return false; 
     914    } 
     915 
     916    if ( ! is_a( $cover_image_class, 'BP_Attachment_Cover_Image' ) ) { 
     917        $cover_image_class = new BP_Attachment_Cover_Image(); 
     918    } 
     919 
     920    // Make sure the file is inside the Cover Image Upload path. 
     921    if ( false === strpos( $args['file'], $cover_image_class->upload_path ) ) { 
     922        return false; 
     923    } 
     924 
     925    // Resize the image so that it fit with the cover image dimensions 
     926    $cover_image  = $cover_image_class->fit( $args['file'], $dimensions ); 
     927    $is_too_small = false; 
     928 
     929    // Image is too small in width and height 
     930    if ( empty( $cover_image ) ) { 
     931        $cover_file = $cover_image_class->generate_filename( $args['file'] ); 
     932        @rename( $args['file'], $cover_file ); 
     933 
     934        // It's too small! 
     935        $is_too_small = true; 
     936    } elseif ( ! empty( $cover_image['path'] ) ) { 
     937        $cover_file = $cover_image['path']; 
     938 
     939        // Image is too small in width or height 
     940        if ( $cover_image['width'] < $dimensions['width'] || $cover_image['height'] < $dimensions['height'] ) { 
     941            $is_too_small = true; 
     942        } 
     943    } 
     944 
     945    // We were not able to generate the cover image file. 
     946    if ( empty( $cover_file ) ) { 
     947        return false; 
     948    } 
     949 
     950    // Do some clean up with old cover image, now a new one is set. 
     951    $cover_basename = wp_basename( $cover_file ); 
     952 
     953    if ( $att_dir = opendir( $args['cover_image_dir'] ) ) { 
     954        while ( false !== ( $attachment_file = readdir( $att_dir ) ) ) { 
     955            // skip directories and the new cover image 
     956            if ( 2 < strlen( $attachment_file ) && 0 !== strpos( $attachment_file, '.' ) && $cover_basename !== $attachment_file ) { 
     957                @unlink( $args['cover_image_dir'] . '/' . $attachment_file ); 
     958            } 
     959        } 
     960    } 
     961 
     962    // Finally return needed data. 
     963    return array( 
     964        'cover_file'     => $cover_file, 
     965        'cover_basename' => $cover_basename, 
     966        'is_too_small'   => $is_too_small 
     967    ); 
     968} 
     969 
     970/** 
    890971 * Ajax Upload and set a cover image 
    891972 * 
     
    9901071    } 
    9911072 
    992     // Get advised dimensions for the cover image 
    993     $dimensions = bp_attachments_get_cover_image_dimensions( $object_data['component'] ); 
    994  
    995     // Resize the image so that it fit with the cover image dimensions 
    996     $cover_image  = $cover_image_attachment->fit( $uploaded['file'], $dimensions ); 
    997     $is_too_small = false; 
    998  
    999     // Image is too small in width and height 
    1000     if ( empty( $cover_image ) ) { 
    1001         $cover_file = $cover_image_attachment->generate_filename( $uploaded['file'] ); 
    1002         @rename( $uploaded['file'], $cover_file ); 
    1003  
    1004         // It's too small! 
    1005         $is_too_small = true; 
    1006     } elseif ( ! empty( $cover_image['path'] ) ) { 
    1007         $cover_file   = $cover_image['path']; 
    1008  
    1009         if ( $cover_image['width'] < $dimensions['width'] || $cover_image['height'] < $dimensions['height'] ) { 
    1010             $is_too_small = true; 
    1011         } 
    1012     } 
    1013  
    10141073    // Default error message 
    10151074    $error_message = __( 'There was a problem uploading the cover image.', 'buddypress' ); 
    1016  
    1017     if ( empty( $cover_file ) ) { 
    1018         // Upload error response 
    1019         bp_attachments_json_response( false, $is_html4, array( 
    1020             'type'    => 'upload_error', 
    1021             'message' => $error_message, 
    1022         ) ); 
    1023     } 
    1024  
    1025     // Set the basename for the cover file 
    1026     $cover_basename = wp_basename( $cover_file ); 
    10271075 
    10281076    // Get BuddyPress Attachments Uploads Dir datas 
     
    10401088    } 
    10411089 
    1042     // Clean up the cover dir to only keep the uploaded cover image 
    1043     if ( $att_dir = opendir( $cover_dir ) ) { 
    1044         while ( false !== ( $attachment_file = readdir( $att_dir ) ) ) { 
    1045             // skip directories and the new cover image 
    1046             if ( 2 < strlen( $attachment_file ) && 0 !== strpos( $attachment_file, '.' ) && $cover_basename !== $attachment_file ) { 
    1047                 @unlink( $cover_dir . '/' . $attachment_file ); 
    1048             } 
    1049         } 
     1090    /** 
     1091     * Generate the cover image so that it fit to feature's dimensions 
     1092     * 
     1093     * Unlike the Avatar, Uploading and generating the cover image is happening during 
     1094     * the same Ajax request, as we already instantiated the BP_Attachment_Cover_Image 
     1095     * class, let's use it. 
     1096     */ 
     1097    $cover = bp_attachments_cover_image_generate_file( array( 
     1098        'file'            => $uploaded['file'], 
     1099        'component'       => $object_data['component'], 
     1100        'cover_image_dir' => $cover_dir 
     1101    ), $cover_image_attachment ); 
     1102 
     1103    if ( ! $cover ) { 
     1104        // Upload error response 
     1105        bp_attachments_json_response( false, $is_html4, array( 
     1106            'type'    => 'upload_error', 
     1107            'message' => $error_message, 
     1108        ) ); 
    10501109    } 
    10511110 
    10521111    // Build the url to the file 
    1053     $cover_url = trailingslashit( $bp_attachments_uploads_dir['baseurl'] ) . $cover_subdir . '/' . $cover_basename; 
     1112    $cover_url = trailingslashit( $bp_attachments_uploads_dir['baseurl'] ) . $cover_subdir . '/' . $cover['cover_basename']; 
    10541113 
    10551114    // Init Feedback code, 1 is success 
     
    10571116 
    10581117    // 0 is the size warning 
    1059     if ( $is_too_small ) { 
     1118    if ( $cover['is_too_small'] ) { 
    10601119        $feedback_code = 0; 
    10611120    } 
Note: See TracChangeset for help on using the changeset viewer.