public function compress_image_for_bulk() { if (!$this->check_ajax_referer()) { exit; } if (!current_user_can('upload_files')) { $message = esc_html__("You don't have permission to upload files.", 'tiny-compress-images'); echo json_encode(array('error' => $message)); exit; } if (empty($_POST['id'])) { $message = esc_html__('Not a valid media file.', 'tiny-compress-images'); echo json_encode(array('error' => $message)); exit; } $id = intval($_POST['id']); $metadata = wp_get_attachment_metadata($id); if (!is_array($metadata)) { $message = esc_html__('Could not find metadata of media file.', 'tiny-compress-images'); echo json_encode(array('error' => $message)); exit; } $tiny_image_before = new Tiny_Image($this->settings, $id, $metadata); $image_statistics_before = $tiny_image_before->get_statistics(); $size_before = $image_statistics_before['optimized_total_size']; $tiny_image = new Tiny_Image($this->settings, $id, $metadata); $result = $tiny_image->compress($this->settings); $image_statistics = $tiny_image->get_statistics(); wp_update_attachment_metadata($id, $tiny_image->get_wp_metadata()); $current_library_size = intval($_POST['current_size']); $size_after = $image_statistics['optimized_total_size']; $new_library_size = $current_library_size + $size_after - $size_before; $result['message'] = $tiny_image->get_latest_error(); $result['image_sizes_optimized'] = $image_statistics['image_sizes_optimized']; $result['initial_total_size'] = size_format($image_statistics['initial_total_size'], 1); $result['optimized_total_size'] = size_format($image_statistics['optimized_total_size'], 1); $result['savings'] = $tiny_image->get_savings($image_statistics); $result['status'] = $this->settings->get_status(); $result['thumbnail'] = wp_get_attachment_image($id, array('30', '30'), true, array('class' => 'pinkynail', 'alt' => '')); $result['size_change'] = $size_after - $size_before; $result['human_readable_library_size'] = size_format($new_library_size, 2); echo json_encode($result); exit; }
public static function get_optimization_statistics($settings, $result = null) { global $wpdb; if (is_null($result)) { // Select posts that have "_wp_attachment_metadata" image metadata // and optionally contain "tiny_compress_images" metadata. $query = "SELECT\n\t\t\t\t\t{$wpdb->posts}.ID,\n\t\t\t\t\t{$wpdb->posts}.post_title,\n\t\t\t\t\t{$wpdb->postmeta}.meta_value,\n\t\t\t\t\twp_postmeta_file.meta_value AS unique_attachment_name,\n\t\t\t\t\twp_postmeta_tiny.meta_value AS tiny_meta_value\n\t\t\t\tFROM {$wpdb->posts}\n\t\t\t\tLEFT JOIN {$wpdb->postmeta}\n\t\t\t\t\tON {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id\n\t\t\t\tLEFT JOIN {$wpdb->postmeta} AS wp_postmeta_file\n\t\t\t\t\tON {$wpdb->posts}.ID = wp_postmeta_file.post_id\n\t\t\t\t\t\tAND wp_postmeta_file.meta_key = '_wp_attached_file'\n\t\t\t\tLEFT JOIN {$wpdb->postmeta} AS wp_postmeta_tiny\n\t\t\t\t\tON {$wpdb->posts}.ID = wp_postmeta_tiny.post_id\n\t\t\t\t\t\tAND wp_postmeta_tiny.meta_key = '" . self::META_KEY . "'\n\t\t\t\tWHERE {$wpdb->posts}.post_type = 'attachment'\n\t\t\t\t\tAND (\n\t\t\t\t\t\t{$wpdb->posts}.post_mime_type = 'image/jpeg' OR\n\t\t\t\t\t\t{$wpdb->posts}.post_mime_type = 'image/png'\n\t\t\t\t\t)\n\t\t\t\t\tAND {$wpdb->postmeta}.meta_key = '_wp_attachment_metadata'\n\t\t\t\tGROUP BY unique_attachment_name\n\t\t\t\tORDER BY ID DESC"; $result = $wpdb->get_results($query, ARRAY_A); } $stats = array(); $stats['uploaded-images'] = 0; $stats['optimized-image-sizes'] = 0; $stats['available-unoptimised-sizes'] = 0; $stats['optimized-library-size'] = 0; $stats['unoptimized-library-size'] = 0; $stats['available-for-optimization'] = array(); for ($i = 0; $i < sizeof($result); $i++) { $wp_metadata = unserialize($result[$i]['meta_value']); $tiny_metadata = unserialize($result[$i]['tiny_meta_value']); if (!is_array($tiny_metadata)) { $tiny_metadata = array(); } $tiny_image = new Tiny_Image($settings, $result[$i]['ID'], $wp_metadata, $tiny_metadata); $image_stats = $tiny_image->get_statistics(); $stats['uploaded-images']++; $stats['available-unoptimised-sizes'] += $image_stats['available_unoptimized_sizes']; $stats['optimized-image-sizes'] += $image_stats['image_sizes_optimized']; $stats['optimized-library-size'] += $image_stats['optimized_total_size']; $stats['unoptimized-library-size'] += $image_stats['initial_total_size']; if ($image_stats['available_unoptimized_sizes'] > 0) { $stats['available-for-optimization'][] = array('ID' => $result[$i]['ID'], 'post_title' => $result[$i]['post_title']); } } return $stats; }