Skip to:
Content

BuddyPress.org

Changeset 10192


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