Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
10/05/2015 11:56:42 PM (9 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.