h The width of the thumbnail. * @param int $thumbnail_height The height of the thumbnail. * @param bool $crop Whether to crop or not. * * @return array|false An array of the filename, thumbnail width, and thumbnail height, * or false on failure to resize such as the thumbnail being larger than the fullsize image. */ public function get_thumbnail( $editor, $fullsize_width, $fullsize_height, $thumbnail_width, $thumbnail_height, $crop ) { $dims = image_resize_dimensions( $fullsize_width, $fullsize_height, $thumbnail_width, $thumbnail_height, $crop ); if ( ! $dims ) { return false; } list( , , , , $dst_w, $dst_h ) = $dims; $suffix = "{$dst_w}x{$dst_h}"; $file_ext = strtolower( pathinfo( $this->get_fullsizepath(), PATHINFO_EXTENSION ) ); return array( 'filename' => $editor->generate_filename( $suffix, null, $file_ext ), 'width' => $dst_w, 'height' => $dst_h, ); } /** * Update the post content of any public post types (posts and pages by default) * that make use of this attachment. * * @since 3.0.0 * * @param array|string $args { * Optional. Array or string of arguments for controlling the updating. * * @type array $post_type The post types to update. Defaults to public post types (posts and pages by default). * @type array $post_ids Specific post IDs to update as opposed to any that uses the attachment. * @type int $posts_per_loop How many posts to query at a time to keep memory usage down. You shouldn't need to modify this. * } * * @return array|WP_Error List of post IDs that were modified. The key is the post ID and the value is either the post ID again or a WP_Error object if wp_update_post() failed. */ public function update_usages_in_posts( $args = array() ) { // Temporarily disabled until it can be even better tested for edge cases return array(); $args = wp_parse_args( $args, array( 'post_type' => array(), 'post_ids' => array(), 'posts_per_loop' => 10, ) ); if ( empty( $args['post_type'] ) ) { $args['post_type'] = array_values( get_post_types( array( 'public' => true ) ) ); unset( $args['post_type']['attachment'] ); } $offset = 0; $posts_updated = array(); while ( true ) { $posts = get_posts( array( 'numberposts' => $args['posts_per_loop'], 'offset' => $offset, 'orderby' => 'ID', 'order' => 'ASC', 'include' => $args['post_ids'], 'post_type' => $args['post_type'], 's' => 'wp-image-' . $this->attachment->ID, // For faster queries. 'update_post_meta_cache' => false, 'update_post_term_cache' => false, ) ); if ( ! $posts ) { break; } $offset += $args['posts_per_loop']; foreach ( $posts as $post ) { $content = $post->post_content; $search = array(); $replace = array(); // Find all tags for this attachment and update them. preg_match_all( '#]+wp-image-' . $this->attachment->ID . '[^>]+/>#i', $content, $matches, PREG_SET_ORDER ); if ( $matches ) { foreach ( $matches as $img_tag ) { preg_match( '# class="([^"]+)?size-([^" ]+)#i', $img_tag[0], $thumbnail_size ); if ( $thumbnail_size ) { $thumbnail = image_downsize( $this->attachment->ID, $thumbnail_size[2] ); if ( ! $thumbnail ) { continue; } $search[] = $img_tag[0]; $img_tag[0] = preg_replace( '# src="[^"]+"#i', ' src="' . esc_url( $thumbnail[0] ) . '"', $img_tag[0] ); $img_tag[0] = preg_replace( '# width="[^"]+" height="[^"]+"#i', ' width="' . esc_attr( $thumbnail[1] ) . '" height="' . esc_attr( $thumbnail[2] ) . '"', $img_tag[0] ); $replace[] = $img_tag[0]; } } } $content = str_replace( $search, $replace, $content ); $search = array(); $replace = array(); // Update the width in any [caption] shortcodes. preg_match_all( '#\[caption id="attachment_' . $this->attachment->ID . '"([^\]]+)? width="[^"]+"\]([^\[]+)size-([^" ]+)([^\[]+)\[\/caption\]#i', $content, $matches, PREG_SET_ORDER ); if ( $matches ) { foreach ( $matches as $match ) { $thumbnail = image_downsize( $this->attachment->ID, $match[3] ); if ( ! $thumbnail ) { continue; } $search[] = $match[0]; $replace[] = '[caption id="attachment_' . $this->attachment->ID . '"' . $match[1] . ' width="' . esc_attr( $thumbnail[1] ) . '"]' . $match[2] . 'size-' . $match[3] . $match[4] . '[/caption]'; } } $content = str_replace( $search, $replace, $content ); $updated_post_object = (object) array( 'ID' => $post->ID, 'post_content' => $content, ); $posts_updated[ $post->ID ] = wp_update_post( $updated_post_object, true ); } } return $posts_updated; } /** * Returns information about the current attachment for use in the REST API. * * @since 3.0.0 * * @return array|WP_Error The attachment name, fullsize URL, registered thumbnail size status, and any unregistered sizes, or WP_Error on error. */ public function get_attachment_info() { $fullsizepath = $this->get_fullsizepath(); if ( is_wp_error( $fullsizepath ) ) { $fullsizepath->add_data( array( 'attachment' => $this->attachment ) ); return $fullsizepath; } $editor = wp_get_image_editor( $fullsizepath ); if ( is_wp_error( $editor ) ) { // Display a more helpful error message. if ( 'image_no_editor' === $editor->get_error_code() ) { $editor = new WP_Error( 'image_no_editor', __( 'The current image editor cannot process this file type.', 'regenerate-thumbnails' ) ); } $editor->add_data( array( 'attachment' => $this->attachment, 'status' => 415, ) ); return $editor; } $metadata = wp_get_attachment_metadata( $this->attachment->ID ); if ( false === $metadata || ! is_array( $metadata ) ) { return new WP_Error( 'regenerate_thumbnails_regenerator_no_metadata', __( 'Unable to load the metadata for this attachment.', 'regenerate-thumbnails' ), array( 'status' => 404, 'attachment' => $this->attachment, ) ); } if ( ! isset( $metadata['sizes'] ) ) { $metadata['sizes'] = array(); } // PDFs don't have width/height set. $width = ( isset( $metadata['width'] ) ) ? $metadata['width'] : null; $height = ( isset( $metadata['height'] ) ) ? $metadata['height'] : null; require_once( ABSPATH . '/wp-admin/includes/image.php' ); $preview = false; if ( file_is_displayable_image( $fullsizepath ) ) { $preview = wp_get_attachment_url( $this->attachment->ID ); } elseif ( is_array( $metadata['sizes'] ) && is_array( $metadata['sizes']['full'] ) && ! empty( $metadata['sizes']['full']['file'] ) ) { $preview = str_replace( wp_basename( $fullsizepath ), $metadata['sizes']['full']['file'], wp_get_attachment_url( $this->attachment->ID ) ); if ( ! file_exists( $preview ) ) { $preview = false; } } $response = array( 'name' => ( $this->attachment->post_title ) ? $this->attachment->post_title : sprintf( __( 'Attachment %d', 'regenerate-thumbnails' ), $this->attachment->ID ), 'preview' => $preview, 'relative_path' => _wp_get_attachment_relative_path( $fullsizepath ) . DIRECTORY_SEPARATOR . wp_basename( $fullsizepath ), 'edit_url' => get_edit_post_link( $this->attachment->ID, 'raw' ), 'width' => $width, 'height' => $height, 'registered_sizes' => array(), 'unregistered_sizes' => array(), ); $wp_upload_dir = dirname( $fullsizepath ) . DIRECTORY_SEPARATOR; $registered_sizes = RegenerateThumbnails()->get_thumbnail_sizes(); if ( 'application/pdf' === get_post_mime_type( $this->attachment ) ) { $registered_sizes = array_intersect_key( $registered_sizes, array( 'thumbnail' => true, 'medium' => true, 'large' => true, ) ); } // Check the status of all currently registered sizes. foreach ( $registered_sizes as $size ) { // Width and height are needed to generate the thumbnail filename. if ( $width && $height ) { $thumbnail = $this->get_thumbnail( $editor, $width, $height, $size['width'], $size['height'], $size['crop'] ); if ( $thumbnail ) { $size['filename'] = wp_basename( $thumbnail['filename'] ); $size['fileexists'] = file_exists( $thumbnail['filename'] ); } else { $size['filename'] = false; $size['fileexists'] = false; } } elseif ( ! empty( $metadata['sizes'][ $size['label'] ]['file'] ) ) { $size['filename'] = wp_basename( $metadata['sizes'][ $size['label'] ]['file'] ); $size['fileexists'] = file_exists( $wp_upload_dir . $metadata['sizes'][ $size['label'] ]['file'] ); } else { $size['filename'] = false; $size['fileexists'] = false; } $response['registered_sizes'][] = $size; } if ( ! $width && ! $height && is_array( $metadata['sizes']['full'] ) ) { $response['registered_sizes'][] = array( 'label' => 'full', 'width' => $metadata['sizes']['full']['width'], 'height' => $metadata['sizes']['full']['height'], 'filename' => $metadata['sizes']['full']['file'], 'fileexists' => file_exists( $wp_upload_dir . $metadata['sizes']['full']['file'] ), ); } // Look at the attachment metadata and see if we have any extra files from sizes that are no longer registered. foreach ( $metadata['sizes'] as $label => $size ) { if ( ! file_exists( $wp_upload_dir . $size['file'] ) ) { continue; } // An unregistered size could match a registered size's dimensions. Ignore these. foreach ( $response['registered_sizes'] as $registered_size ) { if ( $size['file'] === $registered_size['filename'] ) { continue 2; } } if ( ! empty( $registered_sizes[ $label ] ) ) { /* translators: Used for listing old sizes of currently registered thumbnails */ $label = sprintf( __( '%s (old)', 'regenerate-thumbnails' ), $label ); } $response['unregistered_sizes'][] = array( 'label' => $label, 'width' => $size['width'], 'height' => $size['height'], 'filename' => $size['file'], 'fileexists' => true, ); } return $response; } } IT Support - Afinite

Need Urgent Help?
Get in touch with our Emergency Support Team:

0113 887 3999

Most businesses do not have or need permanent IT staff, however they do need their systems to be designed, implemented and supported in a professional and reliable manner. At aFinite we pride ourselves on our track record in working with our clients and partners to deliver a complete IT service. Whether you need help with a simple issue, virus removal, assistance in the setup of a network, an office move or data recovery, we can help.

While we are more than happy to help our new customers to troubleshoot issues, we find the best thing to do next is to carry out an audit of your systems and work with you to ensure your systems are secure and protected by appropriate backup and anti-virus solutions as well as being completely fit for purpose.

By making sure things are right in the first place and that the right processes are followed, we can work with you to reduce your support needs and improve your productivity at the same time.

We offer support services in several ways:

In addition to these support services, we provide assistance for IT Project work to help you deliver a specific project, such as the implementation of a server virtualisation project, SAN deployment or other infrastructure project.

Being an IT service provider, we operate an IT Helpdesk service for our clients where our engineers provide 1st, 2nd and 3rd line support operated using industry leading tools that include Zendesk, Solarwinds and Microsoft Dynamics 365.

Find out more using the tiles below or get in touch with us directly to find out how aFinite can help you with your IT system and support.

Latest Blog Posts

12th April 2021

Even before COVID-19 turned our lives upside down, a new generation of digital tools was opening up new possibilities for the future of work. What we didn’t expect was that…

9th March 2021

With so much of what we do day to day, especially with more of us working remotely, we’re all really reliant on being able to securely work on files and…

Get In Touch

Whether you’re having a complete system overhaul or whether it’s
something specific you’re having a problem with.
We’re here to help.

Contact Us

Or Call Us On:

0113 887 3999

Talk to us now