e8801477 by Jeff Balicki

plugin updates

Signed-off-by: Jeff <jeff@gotenzing.com>
1 parent 0cd79ae5
...@@ -5,7 +5,7 @@ Plugin URI: http://www.nsp-code.com ...@@ -5,7 +5,7 @@ Plugin URI: http://www.nsp-code.com
5 Description: Posts Order and Post Types Objects Order using a Drag and Drop Sortable javascript capability 5 Description: Posts Order and Post Types Objects Order using a Drag and Drop Sortable javascript capability
6 Author: Nsp Code 6 Author: Nsp Code
7 Author URI: http://www.nsp-code.com 7 Author URI: http://www.nsp-code.com
8 Version: 2.1 8 Version: 2.1.1
9 Text Domain: post-types-order 9 Text Domain: post-types-order
10 Domain Path: /languages/ 10 Domain Path: /languages/
11 */ 11 */
......
...@@ -3,8 +3,8 @@ Contributors: nsp-code, tdgu ...@@ -3,8 +3,8 @@ Contributors: nsp-code, tdgu
3 Donate link: http://www.nsp-code.com/donate.php 3 Donate link: http://www.nsp-code.com/donate.php
4 Tags: post order, posts order, sort, post sort, posts sort, post type order, custom order, admin posts order 4 Tags: post order, posts order, sort, post sort, posts sort, post type order, custom order, admin posts order
5 Requires at least: 2.8 5 Requires at least: 2.8
6 Tested up to: 6.3 6 Tested up to: 6.4.1
7 Stable tag: 2.1 7 Stable tag: 2.1.1
8 8
9 Sort Posts and custom Post Type Objects (custom post types) using a Drag and Drop Sortable JavaScript AJAX interface or default WordPress dashboard. 9 Sort Posts and custom Post Type Objects (custom post types) using a Drag and Drop Sortable JavaScript AJAX interface or default WordPress dashboard.
10 10
...@@ -94,6 +94,9 @@ Consider upgrading to our advanced version of this plugin at a very resonable pr ...@@ -94,6 +94,9 @@ Consider upgrading to our advanced version of this plugin at a very resonable pr
94 94
95 == Change Log == 95 == Change Log ==
96 96
97 = 2.1.1 =
98 - WordPress 6.4.1 compatibility check and tag
99
97 = 2.1 = 100 = 2.1 =
98 - Trigger wp_cache_flush when saving the order to clear the internal caches 101 - Trigger wp_cache_flush when saving the order to clear the internal caches
99 - WordPress 6.3 compatibility check and tag 102 - WordPress 6.3 compatibility check and tag
......
...@@ -2,15 +2,15 @@ import MixPanel from "../mixpanel"; ...@@ -2,15 +2,15 @@ import MixPanel from "../mixpanel";
2 2
3 class ProductAnalytics { 3 class ProductAnalytics {
4 init() { 4 init() {
5 this.trackUltraModal(); 5 this.trackUltraLinks();
6 } 6 }
7 7
8 trackUltraModal() { 8 trackUltraLinks() {
9 const ultraModals = document.querySelectorAll( '.wp-smush-ultra-compression-modal' ); 9 const ultraUpsellLinks = document.querySelectorAll( '.wp-smush-upsell-ultra-compression' );
10 if ( ! ultraModals ) { 10 if ( ! ultraUpsellLinks ) {
11 return; 11 return;
12 } 12 }
13 const getLocation = ( modalId ) => { 13 const getLocation = ( ultraLink ) => {
14 const locations = { 14 const locations = {
15 'settings': 'bulksmush_settings', 15 'settings': 'bulksmush_settings',
16 'dashboard': 'dash_summary', 16 'dashboard': 'dash_summary',
...@@ -20,44 +20,18 @@ class ProductAnalytics { ...@@ -20,44 +20,18 @@ class ProductAnalytics {
20 'cdn': 'cdn_summary', 20 'cdn': 'cdn_summary',
21 'webp': 'webp_summary', 21 'webp': 'webp_summary',
22 }; 22 };
23 const locationId = modalId.includes( '__settings' ) ? 'settings' : this.getCurrentPageSlug(); 23 const locationId = ultraLink.classList.contains( 'wp-smush-ultra-compression-link' ) ? 'settings' : this.getCurrentPageSlug();
24 return locations[locationId] || 'bulksmush_settings'; 24 return locations[locationId] || 'bulksmush_settings';
25 } 25 }
26 26
27 ultraModals.forEach( ( modal ) => { 27 ultraUpsellLinks.forEach( ( ultraLink ) => {
28 const eventName = 'ultra_upsell_modal'; 28 const eventName = 'ultra_upsell_modal';
29 let modalAction; 29 ultraLink.addEventListener( 'click', (e) => {
30 let location;
31 modal.addEventListener( 'click', (e) => {
32 if ( 'A' !== e.target?.nodeName ) {
33 return;
34 }
35 const action = e.target.dataset?.action;
36 const actions = {
37 'upgrade': 'cta_clicked',
38 'connect_dash': 'connect_dash',
39 }
40
41 modalAction = actions[action] || 'connect_site';
42 MixPanel.getInstance().track( eventName, { 30 MixPanel.getInstance().track( eventName, {
43 'Location': location, 31 'Location': getLocation( e.target ),
44 'Modal Action': modalAction, 32 'Modal Action': 'direct_cta',
45 }); 33 });
46 }); 34 });
47
48 modal.addEventListener( 'close', (e) => {
49 setTimeout( () => {
50 if ( modalAction && 'closed' !== modalAction ) {
51 return;
52 }
53 modalAction = 'closed';
54 MixPanel.getInstance().track( eventName, {
55 'Location': location || getLocation( e.target.id ),
56 'Modal Action': modalAction,
57 });
58 }, 1000);
59 } );
60
61 }); 35 });
62 } 36 }
63 37
......
...@@ -6,9 +6,17 @@ ...@@ -6,9 +6,17 @@
6 .sui-wrap .smush-upsell-link, 6 .sui-wrap .smush-upsell-link,
7 .sui-wrap a.smush-upsell-link { 7 .sui-wrap a.smush-upsell-link {
8 color: $purple; 8 color: $purple;
9 > span:before {
10 color: $purple;
11 }
9 &:hover:not(.sui-button), 12 &:hover:not(.sui-button),
10 &:focus:not(.sui-button), 13 &:focus:not(.sui-button),
11 &:active:not(.sui-button) { color: #64007e; } 14 &:active:not(.sui-button) {
15 color: #64007e;
16 > span:before {
17 color: #64007e;
18 }
19 }
12 } 20 }
13 21
14 /** 22 /**
......
...@@ -1139,114 +1139,17 @@ ...@@ -1139,114 +1139,17 @@
1139 } 1139 }
1140 } 1140 }
1141 1141
1142 .wp-smush-ultra-compression-modal { 1142 .wp-smush-ultra-compression-link {
1143 @media screen and (min-width: 782px) { 1143 background-color: #F1E7FF!important;
1144 max-width: 660px !important; 1144 color: $purple!important;
1145 span:before {
1146 color: $purple;
1145 } 1147 }
1146 .sui-box-body { 1148
1147 .sui-description { 1149 &:hover {
1148 margin-top: 8px!important; 1150 color: #64007e!important;
1149 margin-bottom: 30px!important; 1151 span:before {
1150 } 1152 color: #64007e;
1151 .smush-footer-link {
1152 font-size: 13px;
1153 line-height: 21px;
1154 }
1155 }
1156 .sui-box-footer {
1157 flex-direction: column;
1158 }
1159 .sui-box-footer {
1160 .sui-box-title {
1161 font-size: 13px;
1162 font-weight: 500;
1163 width:100%;
1164 margin-bottom: 11px;
1165 // padding-left: 7px;
1166 }
1167 .wp-smush-pro-features {
1168 display: flex;
1169 ul {
1170 font-size: 12px;
1171 margin:0;
1172 padding:0;
1173 li {
1174 display: flex;
1175 flex-direction: column;
1176 .wp-smush-pro-features_item {
1177 display: flex;
1178 align-self: stretch;
1179 align-items: flex-start;
1180 width: 100%;
1181 gap: 10px;
1182 margin-bottom: 7px;
1183 // padding-left: 7px;
1184 .sui-icon-box{
1185 display: block;
1186 border-radius: 6px;
1187 padding:3px;
1188 border: 1px solid #ddd;
1189 justify-content: center;
1190 >span{
1191 width:20px;
1192 height: 20px;
1193 justify-content: center;
1194 align-items: center;
1195 display: flex;
1196 }
1197 }
1198 .sui-content-box {
1199 margin:0;
1200 h5 {
1201 line-height: 16px;
1202 margin:0 0 3px 0;
1203 font-weight: 600;
1204 font-size: inherit;
1205 display: flex;
1206 align-self: stretch;
1207 letter-spacing: 0;
1208 }
1209 p {
1210 margin:0;
1211 font-size: 12px;
1212 line-height: 20px;
1213 }
1214 }
1215 }
1216 @media screen and (min-width: 480px) {
1217 flex-direction: row;
1218 .wp-smush-pro-features_item {
1219 width: 50%;
1220 &:last-child{
1221 padding-left: 7px;
1222 }
1223 }
1224 }
1225 }
1226 }
1227 }
1228 > p {
1229 --purple: #8D00B1;
1230 width:100%;
1231 margin-top: 16px;
1232 .sui-button-ghost {
1233 font-size: 13px;
1234 display: block;
1235 color: var( --purple );
1236 background-color: #F8F8F8;
1237 text-align: center;
1238 padding: 7px 12px;
1239 transition: all 0.3s ease;
1240 line-height: 22px;
1241 span {
1242 &:before {
1243 color: var( --purple );
1244 }
1245 }
1246 &:hover{
1247 text-decoration: underline;
1248 }
1249 }
1250 } 1153 }
1251 } 1154 }
1252 } 1155 }
......
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
...@@ -379,7 +379,6 @@ abstract class Abstract_Page { ...@@ -379,7 +379,6 @@ abstract class Abstract_Page {
379 private function prepare_modals() { 379 private function prepare_modals() {
380 $this->prepare_onboarding_modal(); 380 $this->prepare_onboarding_modal();
381 $this->prepare_upgrade_modal(); 381 $this->prepare_upgrade_modal();
382 $this->prepare_ultra_compression_modal();
383 } 382 }
384 383
385 /** 384 /**
...@@ -458,17 +457,6 @@ abstract class Abstract_Page { ...@@ -458,17 +457,6 @@ abstract class Abstract_Page {
458 ); 457 );
459 } 458 }
460 459
461 private function prepare_ultra_compression_modal() {
462 if ( WP_Smush::is_pro() ) {
463 return;
464 }
465
466 $is_dashboard_page = 'smush' === $this->get_slug();
467 $this->modals['ultra-compression'] = array(
468 'location' => $is_dashboard_page ? 'dashboard_summary' : 'summary_box',
469 );
470 }
471
472 /** 460 /**
473 * Get the current screen tab 461 * Get the current screen tab
474 * 462 *
......
1 <?php
2 /**
3 * Ultra Compression Modal.
4 *
5 * @package WP_Smush
6 *
7 * @var string $location Where to tracking ultra compression.
8 */
9 use Smush\Core\Helper;
10
11 if ( ! defined( 'WPINC' ) ) {
12 die;
13 }
14 $utm_campain_locations = array(
15 'settings' => array(
16 'upgrade_link' => 'smush_ultra_bulksmush_radio',
17 ),
18 'summary_box' => array(
19 'upgrade_link' => 'smush_ultra_bulksmush_summary',
20 ),
21 'dashboard_summary' => array(
22 'upgrade_link' => 'smush_ultra_dashboard_summary',
23 ),
24 );
25
26 $location = isset( $location ) && isset( $utm_campain_locations[ $location ] ) ? $location : 'settings';
27 $utm_campains = $utm_campain_locations[ $location ];
28
29 $upgrade_utm_link = Helper::get_url( $utm_campains['upgrade_link'] );
30 $connect_site_url = $this->get_connect_site_link();
31
32
33 $modal_id = "wp-smush-ultra-compression-modal__{$location}";
34 ?>
35
36 <div class="sui-modal sui-modal-md">
37 <div
38 role="dialog"
39 id="<?php echo esc_attr( $modal_id ); ?>"
40 class="sui-modal-content wp-smush-modal-dark-background wp-smush-ultra-compression-modal"
41 aria-modal="true"
42 aria-labelledby="smush-title-updated-dialog"
43 >
44 <div class="sui-box">
45 <div class="sui-box-header sui-flatten sui-content-center sui-spacing-sides--20">
46 <figure class="sui-box-banner" aria-hidden="true">
47 <img src="<?php echo esc_url( WP_SMUSH_URL . 'app/assets/images/bulk-smush/smush-ultra-compression.jpg' ); ?>"
48 srcset="<?php echo esc_url( WP_SMUSH_URL . 'app/assets/images/bulk-smush/smush-ultra-compression.jpg' ); ?> 1x, <?php echo esc_url( WP_SMUSH_URL . 'app/assets/images/bulk-smush/smush-ultra-compression' ); ?>@2x.jpg 2x"
49 alt="<?php esc_attr_e( 'Smush Ultra Compression', 'wp-smushit' ); ?>" class="sui-image sui-image-center">
50 </figure>
51
52 <button type="button" class="sui-button-icon sui-button-float--right sui-button-white" style="box-shadow:none!important" data-esc-close="true" data-modal-close="">
53 <i class="sui-icon-close sui-md" aria-hidden="true"></i>
54 </button>
55 </div>
56
57 <div class="sui-box-body sui-content-center sui-spacing-sides--30 sui-spacing-top--50 sui-spacing-bottom--20">
58 <h3 class="sui-box-title sui-lg" id="smush-title-updated-dialog" style="white-space: normal">
59 <?php esc_html_e( 'Serve images faster with Ultra Smush', 'wp-smushit' ); ?>
60 </h3>
61
62 <p class="sui-description">
63 <?php esc_html_e( 'Experience up to 5x better compression than Super Smush. Optimize your images even further and make your pages load faster than ever. Level up your site performance with Ultra Smush now.', 'wp-smushit' ); ?>
64 </p>
65 <a target="_blank" data-action="upgrade" href="<?php echo esc_url( $upgrade_utm_link ); ?>" class="sui-button sui-button-blue wp-smush-modal-link-close" >
66 <?php esc_html_e( 'Find out more', 'wp-smushit' ); ?>
67 </a>
68 <?php
69 if ( $connect_site_url ) :
70 $to_dash_page = strpos( $connect_site_url, 'page=wpmudev' );
71 ?>
72 <p class="smush-footer-link"><?php esc_html_e( 'Already a member?', 'wp-smushit' ); ?> <a target="<?php echo $to_dash_page ? '_self' : '_blank'; ?>" data-action="<?php echo $to_dash_page ? 'connect_dash' : 'connect_site'; ?>" class="wp-smush-modal-link-close" href="<?php echo esc_url( $connect_site_url ); ?>"><?php esc_html_e( 'Connect site', 'wp-smushit' ); ?></a></p>
73 <?php endif; ?>
74 </div>
75
76 <div class="sui-box-footer sui-flatten sui-spacing-bottom--30">
77 <h4 class="sui-box-title"><?php esc_html_e( 'Get the following Smush Pro features', 'wp-smushit' ); ?></h4>
78 <div class="wp-smush-pro-features">
79 <ul>
80 <li>
81 <div class="wp-smush-pro-features_item">
82 <div class="sui-icon-box">
83 <span class="sui-icon-unlock" aria-hidden="true"></span>
84 </div>
85 <div class="sui-content-box">
86 <h5><?php esc_html_e( 'No Limits, no restrictions', 'wp-smushit' ); ?></h5>
87 <p><?php esc_html_e( "One-click bulk optimization, it's quick and easy to compress unlimited images.", 'wp-smushit' ); ?></p>
88 </div>
89 </div>
90 <div class="wp-smush-pro-features_item">
91 <div class="sui-icon-box">
92 <span class="sui-icon-loader" aria-hidden="true"></span>
93 </div>
94 <div class="sui-content-box">
95 <h5><?php esc_html_e( 'Compress images in the background', 'wp-smushit' ); ?></h5>
96 <p><?php esc_html_e( 'With background optimization, Smush will keep working even if you leave the page.', 'wp-smushit' ); ?></p>
97 </div>
98 </div>
99 </li>
100 <li>
101 <div class="wp-smush-pro-features_item">
102 <div class="sui-icon-box">
103 <span class="sui-icon-web-globe-world" aria-hidden="true"></span>
104 </div>
105 <div class="sui-content-box">
106 <h5><?php esc_html_e( 'Streamline your images with Smush CDN', 'wp-smushit' ); ?></h5>
107 <p><?php esc_html_e( 'Serve images faster and closer than ever from 114 data centers all over the globe.', 'wp-smushit' ); ?></p>
108 </div>
109 </div>
110 <div class="wp-smush-pro-features_item">
111 <div class="sui-icon-box">
112 <span class="sui-icon-wand-magic" aria-hidden="true"></span>
113 </div>
114 <div class="sui-content-box">
115 <h5><?php esc_html_e( 'Auto-convert PNGs to JPEGs (lossy)', 'wp-smushit' ); ?></h5>
116 <p><?php esc_html_e( 'Enjoy more savings and speed by auto-converting to the ideal file format.', 'wp-smushit' ); ?></p>
117 </div>
118 </div>
119 </li>
120 <li>
121 <div class="wp-smush-pro-features_item">
122 <div class="sui-icon-box">
123 <span class="sui-icon-photo-picture" aria-hidden="true"></span>
124 </div>
125 <div class="sui-content-box">
126 <h5><?php esc_html_e( 'Serve next-gen WebP images', 'wp-smushit' ); ?></h5>
127 <p><?php esc_html_e( 'Serve lighter and more streamlined WebP images without losing quality.', 'wp-smushit' ); ?></p>
128 </div>
129 </div>
130 <div class="wp-smush-pro-features_item">
131 <div class="sui-icon-box">
132 <span class="sui-icon-hummingbird" aria-hidden="true"></span>
133 </div>
134 <div class="sui-content-box">
135 <h5><?php esc_html_e( 'Faster sites with Hummingbird Pro', 'wp-smushit' ); ?></h5>
136 <p><?php esc_html_e( 'Optimize the performance of your sites further with a full caching suite and automatic asset optimization.', 'wp-smushit' ); ?></p>
137 </div>
138 </div>
139 </li>
140 </ul>
141 </div>
142 </div>
143 </div>
144 </div>
145 </div>
...@@ -102,10 +102,16 @@ $level_notices = array( ...@@ -102,10 +102,16 @@ $level_notices = array(
102 aria-describedby="<?php echo esc_attr( $name . '-desc' ); ?>" 102 aria-describedby="<?php echo esc_attr( $name . '-desc' ); ?>"
103 value="<?php echo (int) $level_ultra; ?>" 103 value="<?php echo (int) $level_ultra; ?>"
104 <?php checked( $lossy_level_setting, $level_ultra, true ); ?> /> 104 <?php checked( $lossy_level_setting, $level_ultra, true ); ?> />
105 <?php else : ?> 105 <?php else :
106 <a href="#" class="sui-tab-item" data-modal-open="wp-smush-ultra-compression-modal__settings"> 106 $utm_link = $this->get_utm_link(
107 <?php echo esc_html( $settings->get_lossy_level_label( $level_ultra ) ); ?> 107 array(
108 <span class="sui-tag sui-tag-pro"><?php esc_html_e( 'Pro', 'wp-smushit' ); ?></span> 108 'utm_campaign' => 'smush_ultra_bulksmush_radio',
109 )
110 );
111 ?>
112 <a target="_blank" href="<?php echo esc_url( $utm_link ); ?>" class="sui-tab-item wp-smush-ultra-compression-link wp-smush-upsell-ultra-compression">
113 <?php esc_html_e( '🚀 Ultra - unlock 5x more compression', 'wp-smushit' ); ?>
114 <span class="sui-icon-open-new-window" aria-hidden="true"></span>
109 </a> 115 </a>
110 <?php endif; ?> 116 <?php endif; ?>
111 </div> 117 </div>
...@@ -165,7 +171,3 @@ $level_notices = array( ...@@ -165,7 +171,3 @@ $level_notices = array(
165 </div> 171 </div>
166 </div> 172 </div>
167 </div> 173 </div>
168 <?php
169 if ( ! WP_Smush::is_pro() ) {
170 $this->view( 'ultra-compression', array(), 'modals' );
171 }
......
...@@ -6,12 +6,16 @@ $lossy_level_setting = Settings::get_instance()->get_lossy_level_setting(); ...@@ -6,12 +6,16 @@ $lossy_level_setting = Settings::get_instance()->get_lossy_level_setting();
6 $is_ultra_active = Settings::LEVEL_ULTRA_LOSSY === $lossy_level_setting; 6 $is_ultra_active = Settings::LEVEL_ULTRA_LOSSY === $lossy_level_setting;
7 $is_super_active = Settings::LEVEL_SUPER_LOSSY === $lossy_level_setting; 7 $is_super_active = Settings::LEVEL_SUPER_LOSSY === $lossy_level_setting;
8 $is_pro = WP_Smush::is_pro(); 8 $is_pro = WP_Smush::is_pro();
9 $is_dashboard_page = 'smush' === $this->get_slug();
10 $location = $is_dashboard_page ? 'dashboard_summary' : 'summary_box';
11 $modal_id = "wp-smush-ultra-compression-modal__{$location}";
12 $class_names = array(); 9 $class_names = array();
13 if ( ! $is_pro ) { 10 if ( ! $is_pro ) {
14 $class_names[] = 'smush-upsell-link'; 11 $class_names[] = 'smush-upsell-link wp-smush-upsell-ultra-compression';
12 $is_dashboard_page = 'smush' === $this->get_slug();
13 $location = $is_dashboard_page ? 'dashboard_summary' : 'bulksmush_summary';
14 $utm_link = $this->get_utm_link(
15 array(
16 'utm_campaign' => "smush_ultra_{$location}",
17 )
18 );
15 } elseif ( $is_ultra_active ) { 19 } elseif ( $is_ultra_active ) {
16 $class_names[] = 'sui-hidden'; 20 $class_names[] = 'sui-hidden';
17 } 21 }
...@@ -20,8 +24,13 @@ if ( ! $is_pro ) { ...@@ -20,8 +24,13 @@ if ( ! $is_pro ) {
20 <span class="sui-list-label"><?php esc_html_e( 'Smush Mode', 'wp-smushit' ); ?></span> 24 <span class="sui-list-label"><?php esc_html_e( 'Smush Mode', 'wp-smushit' ); ?></span>
21 <span class="sui-list-detail"> 25 <span class="sui-list-detail">
22 <span class="wp-smush-current-compression-level sui-tag sui-tag-green"><?php echo esc_html( Settings::get_instance()->get_current_lossy_level_label() ); ?></span> 26 <span class="wp-smush-current-compression-level sui-tag sui-tag-green"><?php echo esc_html( Settings::get_instance()->get_current_lossy_level_label() ); ?></span>
23 <a href="<?php echo esc_url( $this->get_url( 'smush-bulk' ) ); ?>#lossy-settings-row" class="<?php echo esc_attr( join( ' ', $class_names ) ); ?>" <?php echo $is_pro ? '' : ' data-modal-open="' . esc_attr( $modal_id ) . '"'; ?> title="<?php esc_attr_e( 'Choose the level of compression that suits your needs.', 'wp-smushit' ); ?>"> 27 <a target="<?php echo $is_pro ? '_self' : '_blank'; ?>" href="<?php echo isset( $utm_link ) ? esc_url( $utm_link ) : esc_url( $this->get_url( 'smush-bulk' ) ) . '#lossy-settings-row'; ?>" class="<?php echo esc_attr( join( ' ', $class_names ) ); ?>" title="<?php esc_attr_e( 'Choose the level of compression that suits your needs.', 'wp-smushit' ); ?>">
24 <?php esc_html_e( 'Improve page speed with Ultra', 'wp-smushit' ); ?> 28 <?php if ( $is_pro ) : ?>
29 <?php esc_html_e( 'Improve page speed with Ultra', 'wp-smushit' ); ?>
30 <?php else : ?>
31 <?php esc_html_e( '5x your compression with Ultra', 'wp-smushit' ); ?>
32 <span class="sui-icon-open-new-window" aria-hidden="true"></span>
33 <?php endif; ?>
25 </a> 34 </a>
26 </span> 35 </span>
27 </li> 36 </li>
......
1 <?php
2
3 namespace Smush\Core\Backups;
4
5 use Smush\Core\Controller;
6 use Smush\Core\File_System;
7 use Smush\Core\Media\Media_Item;
8 use Smush\Core\Media\Media_Item_Cache;
9
10 class Backups_Backward_Compatibility extends Controller {
11 const ORIGINAL_FILE_META_KEY = 'wp-smush-original_file';
12 const PNG_PATH_INDEX = 'smush_png_path';
13
14 private $media_item_cache;
15 /**
16 * @var File_System
17 */
18 private $fs;
19
20 public function __construct() {
21 $this->media_item_cache = Media_Item_Cache::get_instance();
22 $this->fs = new File_System();
23
24 // TODO: deprecate the png2jpg backup hook in favor of the fallback size hook
25 }
26
27 public function init() {
28 parent::init();
29
30 add_action( 'delete_attachment', array( $this, 'delete_old_backup_files' ) );
31
32 $this->add_backup_sizes_filter();
33 }
34
35 public function stop() {
36 $this->remove_backup_sizes_filter();
37
38 remove_action( 'delete_attachment', array( $this, 'delete_old_backup_files' ) );
39
40 parent::stop();
41 }
42
43 public function maybe_use_deprecated_backup_sizes_meta( $original, $attachment_id, $meta_key ) {
44 if ( $meta_key !== Media_Item::BACKUP_SIZES_META_KEY ) {
45 return $original;
46 }
47
48 $media_item = $this->media_item_cache->get( $attachment_id );
49 if ( ! $media_item->is_image() ) {
50 return $original;
51 }
52
53 $actual_backup_sizes_meta = $this->get_unfiltered_backup_sizes_meta( $attachment_id );
54 if ( ! empty( $actual_backup_sizes_meta[ Media_Item::DEFAULT_BACKUP_KEY ] ) ) {
55 /**
56 * If {@see Media_Item::DEFAULT_BACKUP_KEY} is already set then we don't want to overwrite it with an older, potentially inaccurate value
57 */
58 return $original;
59 }
60
61 $new_meta = $this->maybe_use_original_file_meta( $media_item, $actual_backup_sizes_meta );
62 if ( $new_meta ) {
63 return array( $new_meta );
64 }
65
66 $new_meta = $this->maybe_use_smush_png_path( $media_item, $actual_backup_sizes_meta );
67 if ( $new_meta ) {
68 return array( $new_meta );
69 }
70
71 return $original;
72 }
73
74 private function maybe_use_original_file_meta( $media_item, $backup_sizes_meta ) {
75 $attachment_id = $media_item->get_id();
76 $meta_key = self::ORIGINAL_FILE_META_KEY;
77 $original_file_meta = get_post_meta( $attachment_id, $meta_key, true );
78 if ( empty( $original_file_meta ) ) {
79 return false;
80 }
81
82 delete_post_meta( $attachment_id, $meta_key );
83
84 $original_file_meta_path = $this->get_original_file_path( $original_file_meta );
85 if ( ! $this->fs->file_exists( $original_file_meta_path ) ) {
86 return false;
87 }
88
89 $new_backup_meta = $this->make_new_backup_meta(
90 $backup_sizes_meta,
91 $original_file_meta_path
92 );
93 $this->update_backup_sizes_meta( $attachment_id, $new_backup_meta );
94
95 return $new_backup_meta;
96 }
97
98 private function maybe_use_smush_png_path( $media_item, $backup_sizes_meta ) {
99 $attachment_id = $media_item->get_id();
100 $png_path_key = self::PNG_PATH_INDEX;
101 if ( empty( $backup_sizes_meta[ $png_path_key ]['file'] ) ) {
102 return false;
103 }
104 $smush_png_file = $backup_sizes_meta[ $png_path_key ]['file'];
105 $smush_png_path = $this->file_name_to_path( $media_item, $smush_png_file );
106
107 unset( $backup_sizes_meta[ $png_path_key ] );
108 $backup_sizes_meta = $this->make_new_backup_meta( $backup_sizes_meta, $smush_png_path );
109 $this->update_backup_sizes_meta( $attachment_id, $backup_sizes_meta );
110
111 if ( $this->fs->file_exists( $smush_png_path ) ) {
112 return $backup_sizes_meta;
113 } else {
114 return false;
115 }
116 }
117
118 private function make_new_backup_meta( $existing_backup_meta, $file_path ) {
119 list( $width, $height ) = $this->fs->getimagesize( $file_path );
120
121 $existing_backup_meta[ Media_Item::DEFAULT_BACKUP_KEY ] = array(
122 'file' => basename( $file_path ),
123 'width' => $width,
124 'height' => $height,
125 );
126
127 return $existing_backup_meta;
128 }
129
130 /**
131 * @param $attachment_id
132 *
133 * @return mixed
134 */
135 private function get_unfiltered_backup_sizes_meta( $attachment_id ) {
136 $this->remove_backup_sizes_filter();
137 $post_meta = get_post_meta( $attachment_id, Media_Item::BACKUP_SIZES_META_KEY, true );
138 $this->add_backup_sizes_filter();
139
140 return empty( $post_meta ) ? array() : $post_meta;
141 }
142
143 private function update_backup_sizes_meta( $attachment_id, $meta_value ) {
144 $this->remove_backup_sizes_filter();
145
146 if ( empty( $meta_value ) ) {
147 delete_post_meta( $attachment_id, Media_Item::BACKUP_SIZES_META_KEY );
148 } else {
149 update_post_meta( $attachment_id, Media_Item::BACKUP_SIZES_META_KEY, $meta_value );
150 }
151
152 $this->add_backup_sizes_filter();
153 }
154
155 /**
156 * @return void
157 */
158 private function add_backup_sizes_filter() {
159 add_action( 'get_post_metadata', array( $this, 'maybe_use_deprecated_backup_sizes_meta' ), 10, 3 );
160 }
161
162 /**
163 * @return void
164 */
165 private function remove_backup_sizes_filter() {
166 remove_filter( 'get_post_metadata', array( $this, 'maybe_use_deprecated_backup_sizes_meta' ) );
167 }
168
169 public function delete_old_backup_files( $attachment_id ) {
170 $this->remove_backup_sizes_filter();
171 $this->_delete_old_backup_files( $attachment_id );
172 $this->add_backup_sizes_filter();
173 }
174
175 private function _delete_old_backup_files( $attachment_id ) {
176 $media_item = $this->media_item_cache->get( $attachment_id );
177 if ( $media_item->is_valid() ) {
178 $this->delete_original_file( $attachment_id, $media_item );
179 $this->delete_png_meta_value_and_file( $media_item );
180 $this->delete_backup_files_for_sizes( $media_item );
181 }
182 }
183
184 /**
185 * @param $attachment_id
186 * @param Media_Item $media_item
187 *
188 * @return void
189 */
190 private function delete_original_file( $attachment_id, $media_item ) {
191 $meta_key = self::ORIGINAL_FILE_META_KEY;
192 $original_file_meta = get_post_meta( $attachment_id, $meta_key, true );
193 if ( ! empty( $original_file_meta ) ) {
194 $original_file_meta_path = $this->get_original_file_path( $original_file_meta );
195 if ( $this->fs->file_exists( $original_file_meta_path ) ) {
196 $this->fs->unlink( $original_file_meta_path );
197 }
198 }
199 }
200
201 private function get_original_file_path( $original_file_meta ) {
202 $upload_dir = wp_upload_dir();
203 $basedir = trailingslashit( $upload_dir['basedir'] );
204 return path_join( $basedir, $original_file_meta );
205 }
206
207 private function delete_png_meta_value_and_file( $media_item ) {
208 $attachment_id = $media_item->get_id();
209 $png_path_key = self::PNG_PATH_INDEX;
210 $backup_sizes_meta = $this->get_unfiltered_backup_sizes_meta( $attachment_id );
211 if ( empty( $backup_sizes_meta[ $png_path_key ]['file'] ) ) {
212 return;
213 }
214 $smush_png_file = $backup_sizes_meta[ $png_path_key ]['file'];
215 $smush_png_path = $this->file_name_to_path( $media_item, $smush_png_file );
216
217 unset( $backup_sizes_meta[ $png_path_key ] );
218 $backup_sizes_meta = $this->make_new_backup_meta( $backup_sizes_meta, $smush_png_path );
219 $this->update_backup_sizes_meta( $attachment_id, $backup_sizes_meta );
220
221 if ( $this->fs->file_exists( $smush_png_path ) ) {
222 $this->fs->unlink( $smush_png_path );
223 }
224 }
225
226 /**
227 * @param Media_Item $media_item
228 * @param $original_file_meta
229 *
230 * @return string
231 */
232 private function file_name_to_path( $media_item, $original_file_meta ) {
233 return path_join( $media_item->get_dir(), $original_file_meta );
234 }
235
236 /**
237 * @param $media_item Media_Item
238 *
239 * @return void
240 */
241 private function delete_backup_files_for_sizes( $media_item ) {
242 foreach ( $media_item->get_sizes() as $size ) {
243 $backup_file_path = $size->get_dir() . $size->get_file_name_without_extension() . '.bak.' . $size->get_extension();
244 if ( $this->fs->file_exists( $backup_file_path ) ) {
245 $this->fs->unlink( $backup_file_path );
246 }
247 }
248 }
249 }
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
10 10
11 namespace Smush\Core; 11 namespace Smush\Core;
12 12
13 use Smush\Core\Backups\Backups_Backward_Compatibility;
14 use Smush\Core\Backups\Backups_Controller; 13 use Smush\Core\Backups\Backups_Controller;
15 use Smush\Core\Media\Media_Item_Controller; 14 use Smush\Core\Media\Media_Item_Controller;
16 use Smush\Core\Media_Library\Ajax_Media_Library_Scanner; 15 use Smush\Core\Media_Library\Ajax_Media_Library_Scanner;
...@@ -151,9 +150,6 @@ class Modules { ...@@ -151,9 +150,6 @@ class Modules {
151 $s3_controller = new S3_Controller(); 150 $s3_controller = new S3_Controller();
152 $s3_controller->init(); 151 $s3_controller->init();
153 152
154 $this->backward_compatibility = new Backups_Backward_Compatibility();
155 $this->backward_compatibility->init();
156
157 $backups_controller = new Backups_Controller(); 153 $backups_controller = new Backups_Controller();
158 $backups_controller->init(); 154 $backups_controller->init();
159 155
......
...@@ -2,14 +2,14 @@ ...@@ -2,14 +2,14 @@
2 # This file is distributed under the GPLv2. 2 # This file is distributed under the GPLv2.
3 msgid "" 3 msgid ""
4 msgstr "" 4 msgstr ""
5 "Project-Id-Version: Smush Pro 3.15.0\n" 5 "Project-Id-Version: Smush Pro 3.15.1\n"
6 "Report-Msgid-Bugs-To: https://wpmudev.com\n" 6 "Report-Msgid-Bugs-To: https://wpmudev.com\n"
7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" 7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
8 "Language-Team: LANGUAGE <LL@li.org>\n" 8 "Language-Team: LANGUAGE <LL@li.org>\n"
9 "MIME-Version: 1.0\n" 9 "MIME-Version: 1.0\n"
10 "Content-Type: text/plain; charset=UTF-8\n" 10 "Content-Type: text/plain; charset=UTF-8\n"
11 "Content-Transfer-Encoding: 8bit\n" 11 "Content-Transfer-Encoding: 8bit\n"
12 "POT-Creation-Date: 2023-11-02T08:17:53+00:00\n" 12 "POT-Creation-Date: 2023-11-15T11:57:59+00:00\n"
13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14 "X-Generator: WP-CLI 2.9.0\n" 14 "X-Generator: WP-CLI 2.9.0\n"
15 "X-Domain: wp-smushit\n" 15 "X-Domain: wp-smushit\n"
...@@ -63,24 +63,24 @@ msgstr "" ...@@ -63,24 +63,24 @@ msgstr ""
63 msgid "Install Plugin" 63 msgid "Install Plugin"
64 msgstr "" 64 msgstr ""
65 65
66 #: app/class-abstract-page.php:685 66 #: app/class-abstract-page.php:673
67 msgid "Lets you check if any images can be further optimized. Useful after changing settings." 67 msgid "Lets you check if any images can be further optimized. Useful after changing settings."
68 msgstr "" 68 msgstr ""
69 69
70 #: app/class-abstract-page.php:688 70 #: app/class-abstract-page.php:676
71 #: _src/react/bulk/media-library-scanner.js:35 71 #: _src/react/bulk/media-library-scanner.js:35
72 msgid "Re-Check Images" 72 msgid "Re-Check Images"
73 msgstr "" 73 msgstr ""
74 74
75 #: app/class-abstract-page.php:692 75 #: app/class-abstract-page.php:680
76 msgid "Check Complete" 76 msgid "Check Complete"
77 msgstr "" 77 msgstr ""
78 78
79 #: app/class-abstract-page.php:699 79 #: app/class-abstract-page.php:687
80 msgid "Documentation" 80 msgid "Documentation"
81 msgstr "" 81 msgstr ""
82 82
83 #: app/class-abstract-page.php:743 83 #: app/class-abstract-page.php:731
84 #: app/class-admin.php:503 84 #: app/class-admin.php:503
85 #: app/class-admin.php:707 85 #: app/class-admin.php:707
86 #: app/class-admin.php:751 86 #: app/class-admin.php:751
...@@ -90,36 +90,36 @@ msgstr "" ...@@ -90,36 +90,36 @@ msgstr ""
90 msgid "Dismiss" 90 msgid "Dismiss"
91 msgstr "" 91 msgstr ""
92 92
93 #: app/class-abstract-page.php:770 93 #: app/class-abstract-page.php:758
94 msgid "Your settings have been updated!" 94 msgid "Your settings have been updated!"
95 msgstr "" 95 msgstr ""
96 96
97 #: app/class-abstract-page.php:777 97 #: app/class-abstract-page.php:765
98 #: app/pages/class-cdn.php:90 98 #: app/pages/class-cdn.php:90
99 msgid "Your settings have been saved and changes are now propagating to the CDN. Changes can take up to 30 minutes to take effect but your images will continue to be served in the meantime, please be patient." 99 msgid "Your settings have been saved and changes are now propagating to the CDN. Changes can take up to 30 minutes to take effect but your images will continue to be served in the meantime, please be patient."
100 msgstr "" 100 msgstr ""
101 101
102 #. translators: %1$s - <a>, %2$s - </a> 102 #. translators: %1$s - <a>, %2$s - </a>
103 #: app/class-abstract-page.php:790 103 #: app/class-abstract-page.php:778
104 msgid "You have images that need smushing. %1$sBulk smush now!%2$s" 104 msgid "You have images that need smushing. %1$sBulk smush now!%2$s"
105 msgstr "" 105 msgstr ""
106 106
107 #: app/class-abstract-page.php:922 107 #: app/class-abstract-page.php:910
108 #: app/class-admin.php:318 108 #: app/class-admin.php:318
109 #: app/views/settings/permissions-meta-box.php:92 109 #: app/views/settings/permissions-meta-box.php:92
110 #: core/class-settings.php:1172 110 #: core/class-settings.php:1172
111 msgid "Tutorials" 111 msgid "Tutorials"
112 msgstr "" 112 msgstr ""
113 113
114 #: app/class-abstract-page.php:926 114 #: app/class-abstract-page.php:914
115 msgid "Loading tutorials..." 115 msgid "Loading tutorials..."
116 msgstr "" 116 msgstr ""
117 117
118 #: app/class-abstract-page.php:927 118 #: app/class-abstract-page.php:915
119 msgid "min read" 119 msgid "min read"
120 msgstr "" 120 msgstr ""
121 121
122 #: app/class-abstract-page.php:928 122 #: app/class-abstract-page.php:916
123 msgid "Read article" 123 msgid "Read article"
124 msgstr "" 124 msgstr ""
125 125
...@@ -1103,87 +1103,6 @@ msgstr "" ...@@ -1103,87 +1103,6 @@ msgstr ""
1103 msgid "Background stop scanning modal" 1103 msgid "Background stop scanning modal"
1104 msgstr "" 1104 msgstr ""
1105 1105
1106 #: app/modals/ultra-compression.php:49
1107 msgid "Smush Ultra Compression"
1108 msgstr ""
1109
1110 #: app/modals/ultra-compression.php:59
1111 msgid "Serve images faster with Ultra Smush"
1112 msgstr ""
1113
1114 #: app/modals/ultra-compression.php:63
1115 #: app/modals/updated.php:45
1116 msgid "Experience up to 5x better compression than Super Smush. Optimize your images even further and make your pages load faster than ever. Level up your site performance with Ultra Smush now."
1117 msgstr ""
1118
1119 #: app/modals/ultra-compression.php:66
1120 msgid "Find out more"
1121 msgstr ""
1122
1123 #: app/modals/ultra-compression.php:72
1124 msgid "Already a member?"
1125 msgstr ""
1126
1127 #: app/modals/ultra-compression.php:72
1128 msgid "Connect site"
1129 msgstr ""
1130
1131 #: app/modals/ultra-compression.php:77
1132 msgid "Get the following Smush Pro features"
1133 msgstr ""
1134
1135 #: app/modals/ultra-compression.php:86
1136 msgid "No Limits, no restrictions"
1137 msgstr ""
1138
1139 #: app/modals/ultra-compression.php:87
1140 msgid "One-click bulk optimization, it's quick and easy to compress unlimited images."
1141 msgstr ""
1142
1143 #: app/modals/ultra-compression.php:95
1144 #: app/views/smush-upgrade-page.php:129
1145 msgid "Compress images in the background"
1146 msgstr ""
1147
1148 #: app/modals/ultra-compression.php:96
1149 msgid "With background optimization, Smush will keep working even if you leave the page."
1150 msgstr ""
1151
1152 #: app/modals/ultra-compression.php:106
1153 #: app/views/smush-upgrade-page.php:135
1154 msgid "Streamline your images with Smush CDN"
1155 msgstr ""
1156
1157 #: app/modals/ultra-compression.php:107
1158 msgid "Serve images faster and closer than ever from 114 data centers all over the globe."
1159 msgstr ""
1160
1161 #: app/modals/ultra-compression.php:115
1162 #: app/views/smush-upgrade-page.php:145
1163 #: core/class-settings.php:307
1164 msgid "Auto-convert PNGs to JPEGs (lossy)"
1165 msgstr ""
1166
1167 #: app/modals/ultra-compression.php:116
1168 msgid "Enjoy more savings and speed by auto-converting to the ideal file format."
1169 msgstr ""
1170
1171 #: app/modals/ultra-compression.php:126
1172 msgid "Serve next-gen WebP images"
1173 msgstr ""
1174
1175 #: app/modals/ultra-compression.php:127
1176 msgid "Serve lighter and more streamlined WebP images without losing quality."
1177 msgstr ""
1178
1179 #: app/modals/ultra-compression.php:135
1180 msgid "Faster sites with Hummingbird Pro"
1181 msgstr ""
1182
1183 #: app/modals/ultra-compression.php:136
1184 msgid "Optimize the performance of your sites further with a full caching suite and automatic asset optimization."
1185 msgstr ""
1186
1187 #: app/modals/updated.php:31 1106 #: app/modals/updated.php:31
1188 msgid "Smush Updated Modal" 1107 msgid "Smush Updated Modal"
1189 msgstr "" 1108 msgstr ""
...@@ -1192,6 +1111,10 @@ msgstr "" ...@@ -1192,6 +1111,10 @@ msgstr ""
1192 msgid "New: Serve images faster with Ultra Smush" 1111 msgid "New: Serve images faster with Ultra Smush"
1193 msgstr "" 1112 msgstr ""
1194 1113
1114 #: app/modals/updated.php:45
1115 msgid "Experience up to 5x better compression than Super Smush. Optimize your images even further and make your pages load faster than ever. Level up your site performance with Ultra Smush now."
1116 msgstr ""
1117
1195 #: app/modals/updated.php:51 1118 #: app/modals/updated.php:51
1196 msgid "Go to Settings" 1119 msgid "Go to Settings"
1197 msgstr "" 1120 msgstr ""
...@@ -1317,7 +1240,6 @@ msgid "New" ...@@ -1317,7 +1240,6 @@ msgid "New"
1317 msgstr "" 1240 msgstr ""
1318 1241
1319 #: app/pages/class-bulk.php:642 1242 #: app/pages/class-bulk.php:642
1320 #: app/views/bulk/lossy-level.php:108
1321 #: app/views/dashboard/cdn/meta-box-header.php:21 1243 #: app/views/dashboard/cdn/meta-box-header.php:21
1322 #: app/views/dashboard/summary-meta-box.php:69 1244 #: app/views/dashboard/summary-meta-box.php:69
1323 #: app/views/dashboard/summary-meta-box.php:105 1245 #: app/views/dashboard/summary-meta-box.php:105
...@@ -1533,6 +1455,10 @@ msgstr "" ...@@ -1533,6 +1455,10 @@ msgstr ""
1533 msgid "%1$sUltra:%2$s Unlock unprecedented compression levels up to 5x greater than Super, while preserving remarkable image quality. The ultimate choice for unparalleled performance." 1455 msgid "%1$sUltra:%2$s Unlock unprecedented compression levels up to 5x greater than Super, while preserving remarkable image quality. The ultimate choice for unparalleled performance."
1534 msgstr "" 1456 msgstr ""
1535 1457
1458 #: app/views/bulk/lossy-level.php:113
1459 msgid "🚀 Ultra - unlock 5x more compression"
1460 msgstr ""
1461
1536 #: app/views/bulk/media-lib-empty.php:5 1462 #: app/views/bulk/media-lib-empty.php:5
1537 #: app/views/nextgen/meta-box.php:25 1463 #: app/views/nextgen/meta-box.php:25
1538 msgid "No attachments found - Upload some images" 1464 msgid "No attachments found - Upload some images"
...@@ -2472,10 +2398,18 @@ msgstr "" ...@@ -2472,10 +2398,18 @@ msgstr ""
2472 msgid "Need a one-click bulk optimization solution to quickly and easily compress your entire image library? Remove the ‘per batch’ bulk smushing restriction and increase the image size limit from 5MB to completely unlimited." 2398 msgid "Need a one-click bulk optimization solution to quickly and easily compress your entire image library? Remove the ‘per batch’ bulk smushing restriction and increase the image size limit from 5MB to completely unlimited."
2473 msgstr "" 2399 msgstr ""
2474 2400
2401 #: app/views/smush-upgrade-page.php:129
2402 msgid "Compress images in the background"
2403 msgstr ""
2404
2475 #: app/views/smush-upgrade-page.php:130 2405 #: app/views/smush-upgrade-page.php:130
2476 msgid "Thanks to Background Optimization, you can leave the plugin interface while images are still being compressed. Smush will continue to work its magic in the background, leaving you free to do other things!" 2406 msgid "Thanks to Background Optimization, you can leave the plugin interface while images are still being compressed. Smush will continue to work its magic in the background, leaving you free to do other things!"
2477 msgstr "" 2407 msgstr ""
2478 2408
2409 #: app/views/smush-upgrade-page.php:135
2410 msgid "Streamline your images with Smush CDN"
2411 msgstr ""
2412
2479 #: app/views/smush-upgrade-page.php:136 2413 #: app/views/smush-upgrade-page.php:136
2480 msgid "Use the blazing-fast Smush image CDN to automatically resize your files to the perfect size and serve WebP files (25% smaller than PNG and JPG) from 114 locations around the globe." 2414 msgid "Use the blazing-fast Smush image CDN to automatically resize your files to the perfect size and serve WebP files (25% smaller than PNG and JPG) from 114 locations around the globe."
2481 msgstr "" 2415 msgstr ""
...@@ -2488,6 +2422,11 @@ msgstr "" ...@@ -2488,6 +2422,11 @@ msgstr ""
2488 msgid "Prefer not to use Smush CDN? Our standalone WebP feature allows you to serve next-gen images without sacrificing quality. You can also gracefully fall back to the older image formats for browsers that aren't compatible." 2422 msgid "Prefer not to use Smush CDN? Our standalone WebP feature allows you to serve next-gen images without sacrificing quality. You can also gracefully fall back to the older image formats for browsers that aren't compatible."
2489 msgstr "" 2423 msgstr ""
2490 2424
2425 #: app/views/smush-upgrade-page.php:145
2426 #: core/class-settings.php:307
2427 msgid "Auto-convert PNGs to JPEGs (lossy)"
2428 msgstr ""
2429
2491 #: app/views/smush-upgrade-page.php:146 2430 #: app/views/smush-upgrade-page.php:146
2492 msgid "Smush looks for additional savings and automatically converts PNG files to JPEG if it will further reduce the size without a visible drop in quality. Now that's smart image compression." 2431 msgid "Smush looks for additional savings and automatically converts PNG files to JPEG if it will further reduce the size without a visible drop in quality. Now that's smart image compression."
2493 msgstr "" 2432 msgstr ""
...@@ -2556,19 +2495,23 @@ msgstr "" ...@@ -2556,19 +2495,23 @@ msgstr ""
2556 msgid "by WPMU DEV" 2495 msgid "by WPMU DEV"
2557 msgstr "" 2496 msgstr ""
2558 2497
2559 #: app/views/summary/lossy-level.php:20 2498 #: app/views/summary/lossy-level.php:24
2560 #: core/class-settings.php:268 2499 #: core/class-settings.php:268
2561 msgid "Smush Mode" 2500 msgid "Smush Mode"
2562 msgstr "" 2501 msgstr ""
2563 2502
2564 #: app/views/summary/lossy-level.php:23 2503 #: app/views/summary/lossy-level.php:27
2565 msgid "Choose the level of compression that suits your needs." 2504 msgid "Choose the level of compression that suits your needs."
2566 msgstr "" 2505 msgstr ""
2567 2506
2568 #: app/views/summary/lossy-level.php:24 2507 #: app/views/summary/lossy-level.php:29
2569 msgid "Improve page speed with Ultra" 2508 msgid "Improve page speed with Ultra"
2570 msgstr "" 2509 msgstr ""
2571 2510
2511 #: app/views/summary/lossy-level.php:31
2512 msgid "5x your compression with Ultra"
2513 msgstr ""
2514
2572 #: app/views/tabs.php:29 2515 #: app/views/tabs.php:29
2573 msgid "Navigate" 2516 msgid "Navigate"
2574 msgstr "" 2517 msgstr ""
......
1 === Smush - Optimize, Compress and Lazy Load Images === 1 === Smush - Optimize, Compress and Lazy Load Images ===
2 Plugin Name: Smush - Lazy Load Images, Optimize & Compress Images 2 Plugin Name: Smush - Lazy Load Images, Optimize & Compress Images
3 Version: 3.15.0 3 Version: 3.15.1
4 Author: WPMU DEV 4 Author: WPMU DEV
5 Author URI: https://wpmudev.com/ 5 Author URI: https://wpmudev.com/
6 Contributors: WPMUDEV, alexdunae 6 Contributors: WPMUDEV, alexdunae
7 Tags: image optimization, optimize images, compress images, lazy load, resize images, convert webp, optimize, images, convert, webp, compress, optimization, lossless 7 Tags: optimize images, convert webp, webp, image optimization, compress images, lazy load, resize images, image optimizer, image compressor, performance, reduce image size
8 Requires at least: 5.3 8 Requires at least: 5.3
9 Tested up to: 6.4 9 Tested up to: 6.4
10 Stable tag: 3.15.0 10 Stable tag: 3.15.1
11 Requires PHP: 5.6 11 Requires PHP: 7.4
12 License: GPL v2 - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html 12 License: GPL v2 - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
13 13
14 Compress images & optimize images with built-in lossless compression, lazy load, WebP conversion, and resize detection to make your site load amazingly fast. 14 Compress images & optimize images with built-in lossless compression, lazy load, WebP conversion, and resize detection to make your site load amazingly fast.
...@@ -55,7 +55,7 @@ Discover the features that set Smush apart from other image optimization plugins ...@@ -55,7 +55,7 @@ Discover the features that set Smush apart from other image optimization plugins
55 - **Incorrect Image Size Detection** - Quickly locate images that are slowing down your site. 55 - **Incorrect Image Size Detection** - Quickly locate images that are slowing down your site.
56 - **Directory Smush** - Optimize images even if they aren't in the default WordPress media library. 56 - **Directory Smush** - Optimize images even if they aren't in the default WordPress media library.
57 - **Automated Optimization** - Asynchronously auto-smush your attachments for super fast compression on upload. 57 - **Automated Optimization** - Asynchronously auto-smush your attachments for super fast compression on upload.
58 - **No Monthly Limits** - Enjoy free optimization of all your images forever (no daily, monthly, or annual limits). 58 - **No Monthly Limits** - Optimize all of your images (up to 5 MB in size) free forever (no daily, monthly, or annual limits).
59 - **Gutenberg Block Integration** - View image compression information directly in image blocks. 59 - **Gutenberg Block Integration** - View image compression information directly in image blocks.
60 - **Multisite Compatible** - Flexible global and subsite settings for multisite installations. 60 - **Multisite Compatible** - Flexible global and subsite settings for multisite installations.
61 - **Optimize All Media Files, Not Just Images** - Smush supports optimization for PNG, JPEG, and GIF files. 61 - **Optimize All Media Files, Not Just Images** - Smush supports optimization for PNG, JPEG, and GIF files.
...@@ -232,6 +232,9 @@ It depends what side of the pond you live on... but whether you say optimize, op ...@@ -232,6 +232,9 @@ It depends what side of the pond you live on... but whether you say optimize, op
232 232
233 == Changelog == 233 == Changelog ==
234 234
235 = 3.15.1 ( 2023-11-15 ) =
236 - Improvement: Code stability improvements
237
235 = 3.15.0 ( 2023-10-11 ) = 238 = 3.15.0 ( 2023-10-11 ) =
236 - Improvement: Image size limit increased for pro version 239 - Improvement: Image size limit increased for pro version
237 - Fix: Query running frequently and causing performance issues on some sites 240 - Fix: Query running frequently and causing performance issues on some sites
......
...@@ -4,4 +4,4 @@ ...@@ -4,4 +4,4 @@
4 4
5 require_once __DIR__ . '/composer/autoload_real.php'; 5 require_once __DIR__ . '/composer/autoload_real.php';
6 6
7 return ComposerAutoloaderInit1dd71c43a072960b069e698ead0e3a45::getLoader(); 7 return ComposerAutoloaderInitde32100e640aa612e24a9247e5992884::getLoader();
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
2 2
3 // autoload_real.php @generated by Composer 3 // autoload_real.php @generated by Composer
4 4
5 class ComposerAutoloaderInit1dd71c43a072960b069e698ead0e3a45 5 class ComposerAutoloaderInitde32100e640aa612e24a9247e5992884
6 { 6 {
7 private static $loader; 7 private static $loader;
8 8
...@@ -22,15 +22,15 @@ class ComposerAutoloaderInit1dd71c43a072960b069e698ead0e3a45 ...@@ -22,15 +22,15 @@ class ComposerAutoloaderInit1dd71c43a072960b069e698ead0e3a45
22 return self::$loader; 22 return self::$loader;
23 } 23 }
24 24
25 spl_autoload_register(array('ComposerAutoloaderInit1dd71c43a072960b069e698ead0e3a45', 'loadClassLoader'), true, true); 25 spl_autoload_register(array('ComposerAutoloaderInitde32100e640aa612e24a9247e5992884', 'loadClassLoader'), true, true);
26 self::$loader = $loader = new \Composer\Autoload\ClassLoader(); 26 self::$loader = $loader = new \Composer\Autoload\ClassLoader();
27 spl_autoload_unregister(array('ComposerAutoloaderInit1dd71c43a072960b069e698ead0e3a45', 'loadClassLoader')); 27 spl_autoload_unregister(array('ComposerAutoloaderInitde32100e640aa612e24a9247e5992884', 'loadClassLoader'));
28 28
29 $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); 29 $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
30 if ($useStaticLoader) { 30 if ($useStaticLoader) {
31 require_once __DIR__ . '/autoload_static.php'; 31 require_once __DIR__ . '/autoload_static.php';
32 32
33 call_user_func(\Composer\Autoload\ComposerStaticInit1dd71c43a072960b069e698ead0e3a45::getInitializer($loader)); 33 call_user_func(\Composer\Autoload\ComposerStaticInitde32100e640aa612e24a9247e5992884::getInitializer($loader));
34 } else { 34 } else {
35 $map = require __DIR__ . '/autoload_namespaces.php'; 35 $map = require __DIR__ . '/autoload_namespaces.php';
36 foreach ($map as $namespace => $path) { 36 foreach ($map as $namespace => $path) {
...@@ -51,19 +51,19 @@ class ComposerAutoloaderInit1dd71c43a072960b069e698ead0e3a45 ...@@ -51,19 +51,19 @@ class ComposerAutoloaderInit1dd71c43a072960b069e698ead0e3a45
51 $loader->register(true); 51 $loader->register(true);
52 52
53 if ($useStaticLoader) { 53 if ($useStaticLoader) {
54 $includeFiles = Composer\Autoload\ComposerStaticInit1dd71c43a072960b069e698ead0e3a45::$files; 54 $includeFiles = Composer\Autoload\ComposerStaticInitde32100e640aa612e24a9247e5992884::$files;
55 } else { 55 } else {
56 $includeFiles = require __DIR__ . '/autoload_files.php'; 56 $includeFiles = require __DIR__ . '/autoload_files.php';
57 } 57 }
58 foreach ($includeFiles as $fileIdentifier => $file) { 58 foreach ($includeFiles as $fileIdentifier => $file) {
59 composerRequire1dd71c43a072960b069e698ead0e3a45($fileIdentifier, $file); 59 composerRequirede32100e640aa612e24a9247e5992884($fileIdentifier, $file);
60 } 60 }
61 61
62 return $loader; 62 return $loader;
63 } 63 }
64 } 64 }
65 65
66 function composerRequire1dd71c43a072960b069e698ead0e3a45($fileIdentifier, $file) 66 function composerRequirede32100e640aa612e24a9247e5992884($fileIdentifier, $file)
67 { 67 {
68 if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { 68 if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
69 require $file; 69 require $file;
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
4 4
5 namespace Composer\Autoload; 5 namespace Composer\Autoload;
6 6
7 class ComposerStaticInit1dd71c43a072960b069e698ead0e3a45 7 class ComposerStaticInitde32100e640aa612e24a9247e5992884
8 { 8 {
9 public static $files = array ( 9 public static $files = array (
10 '1f155afceeab454b94183cdd8d5248a6' => __DIR__ . '/..' . '/mixpanel/mixpanel-php/lib/Mixpanel.php', 10 '1f155afceeab454b94183cdd8d5248a6' => __DIR__ . '/..' . '/mixpanel/mixpanel-php/lib/Mixpanel.php',
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * Plugin Name: Smush 13 * Plugin Name: Smush
14 * Plugin URI: http://wordpress.org/plugins/wp-smushit/ 14 * Plugin URI: http://wordpress.org/plugins/wp-smushit/
15 * Description: Reduce image file sizes, improve performance and boost your SEO using the free <a href="https://wpmudev.com/">WPMU DEV</a> WordPress Smush API. 15 * Description: Reduce image file sizes, improve performance and boost your SEO using the free <a href="https://wpmudev.com/">WPMU DEV</a> WordPress Smush API.
16 * Version: 3.15.0 16 * Version: 3.15.1
17 * Author: WPMU DEV 17 * Author: WPMU DEV
18 * Author URI: https://profiles.wordpress.org/wpmudev/ 18 * Author URI: https://profiles.wordpress.org/wpmudev/
19 * License: GPLv2 19 * License: GPLv2
...@@ -48,7 +48,7 @@ if ( ! defined( 'WPINC' ) ) { ...@@ -48,7 +48,7 @@ if ( ! defined( 'WPINC' ) ) {
48 } 48 }
49 49
50 if ( ! defined( 'WP_SMUSH_VERSION' ) ) { 50 if ( ! defined( 'WP_SMUSH_VERSION' ) ) {
51 define( 'WP_SMUSH_VERSION', '3.15.0' ); 51 define( 'WP_SMUSH_VERSION', '3.15.1' );
52 } 52 }
53 // Used to define body class. 53 // Used to define body class.
54 if ( ! defined( 'WP_SHARED_UI_VERSION' ) ) { 54 if ( ! defined( 'WP_SHARED_UI_VERSION' ) ) {
......