HEX
Server: Apache
System: Linux webm004.cluster121.gra.hosting.ovh.net 5.15.167-ovh-vps-grsec-zfs-classid #1 SMP Tue Sep 17 08:14:20 UTC 2024 x86_64
User: grainesdfo (155059)
PHP: 5.4.45
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/grainesdfo/www/wp-content/plugins/easing-slider/src/Plugin/Support/AttachmentImageResizer.php
<?php

namespace EasingSlider\Plugin\Support;

/**
 * Exit if accessed directly
 */
if ( ! defined('ABSPATH')) {
	exit;
}

class AttachmentImageResizer
{
	/**
	 * The attachment image ID
	 *
	 * @var int
	 */
	protected $attachmentId;

	/**
	 * Constructor
	 *
	 * @param  int $attachmentId
	 * @return void
	 */
	public function __construct($attachmentId)
	{
		$this->attachmentId = $attachmentId;
	}

	/**
	 * Resizes an attachment image
	 *
	 * @param int     $width
	 * @param int     $height
	 * @param boolean $crop
	 * @param int     $quality
	 * @return array
	 */
	public function resize($width, $height, $crop = true, $quality = 100)
	{
		global $wpdb;

		// Get the attachment
		$attachmentUrl = wp_get_attachment_url($this->attachmentId, 'full');

		// Bail if we don't have an attachment URL
		if ( ! $attachmentUrl) {
			return array('url' => $attachmentUrl, 'width' => $width, 'height' => $height);
		}

		// Get the image file path
		$filePath = parse_url($attachmentUrl);
		$filePath = $_SERVER['DOCUMENT_ROOT'] . $filePath['path'];
		
		// Additional handling for multisite
		if (is_multisite()) {
			global $blog_id;
			$blogDetails = get_blog_details($blog_id);
			$filePath    = str_replace($blogDetails->path . 'files/', '/wp-content/blogs.dir/'. $blog_id .'/files/', $filePath);
		}

		// Destination width and height variables
		$destWidth  = apply_filters('easingslider_resize_image_width',  $width,  $attachmentUrl);
		$destHeight = apply_filters('easingslider_resize_image_height', $height, $attachmentUrl);

		// File name suffix (appended to original file name)
		$suffix = "{$destWidth}x{$destHeight}";

		// Some additional info about the image
		$info = pathinfo($filePath);
		$dir  = $info['dirname'];
		$ext  = $info['extension'];
		$name = wp_basename($filePath, ".$ext");

		// Suffix applied to filename
		$suffix = "{$destWidth}x{$destHeight}";

		// Get the destination file name
		$destFileName = "{$dir}/{$name}-{$suffix}.{$ext}";

		// Execute the resizing if resized image doesn't already exist.
		if ( ! file_exists($destFileName)) {

			// Load Wordpress Image Editor
			$editor = wp_get_image_editor($filePath);

			// Bail if we encounter a WP_Error
			if (is_wp_error($editor)) {
				return array('url' => $attachmentUrl, 'width' => $width, 'height' => $height);
			}

			// Set the quality
			$editor->set_quality($quality);

			// Get the original image size
			$size       = $editor->get_size();
			$origWidth  = $size['width'];
			$origHeight = $size['height'];

			$srcX = $srcY = 0;
			$srcW = $origWidth;
			$srcH = $origHeight;

			// Handle cropping
			if ($crop) {

				$cmpX = $origWidth / $destWidth;
				$cmpY = $origHeight / $destHeight;

				// Calculate x or y coordinate, and width or height of source
				if ($cmpX > $cmpY) {
					$srcW = round($origWidth / $cmpX * $cmpY);
					$srcX = round(($origWidth - ($origWidth / $cmpX * $cmpY)) / 2);
				}
				else if ($cmpY > $cmpX) {
					$srcH = round($origHeight / $cmpY * $cmpX);
					$srcY = round(($origHeight - ($origHeight / $cmpY * $cmpX)) / 2);
				}

			}

			// Time to crop the image
			$editor->crop($srcX, $srcY, $srcW, $srcH, $destWidth, $destHeight);

			// Now let's save the image
			$saved = $editor->save($destFileName);

			// Get resized image information
			$resizedUrl    = str_replace(basename($attachmentUrl), basename($saved['path']), $attachmentUrl);
			$resizedWidth  = $saved['width'];
			$resizedHeight = $saved['height'];
			$resizedType   = $saved['mime-type'];

			/**
			 * Add the resized dimensions to original image metadata
			 * 
			 * This ensures our resized images are deleted when the original image is deleted from the Media Library
			 */
			$metadata = wp_get_attachment_metadata($this->attachmentId);
			if (isset($metadata['image_meta'])) {
				$metadata['image_meta']['resized_images'][] = $resizedWidth .'x'. $resizedHeight;
				wp_update_attachment_metadata($this->attachmentId, $metadata);
			}

			// Create the image array
			$resizedImage = array(
				'url'    => $resizedUrl,
				'width'  => $resizedWidth,
				'height' => $resizedHeight,
				'type'   => $resizedType
			);

		}
		else {
			$resizedImage = array(
				'url'    => str_replace(basename($attachmentUrl), basename($destFileName), $attachmentUrl),
				'width'  => $destWidth,
				'height' => $destHeight,
				'type'   => $ext
			);
		}

		// And we're done!
		return $resizedImage;
	}
}