217 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			217 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace ShortPixel\Model;
 | |
| 
 | |
| if ( ! defined( 'ABSPATH' ) ) {
 | |
|  exit; // Exit if accessed directly.
 | |
| }
 | |
| 
 | |
| use ShortPixel\ShortPixelLogger\ShortPixelLogger as Log;
 | |
| 
 | |
| class SettingsModel
 | |
| {
 | |
| 		protected static $instance;
 | |
| 
 | |
| 		private $option_name = 'spio_settings';
 | |
| 		private $state_name = 'spio_states';
 | |
| 
 | |
| 		protected $model = array(
 | |
|         'apiKey' => array('s' => 'string'), // string
 | |
|         'verifiedKey' => array('s' => 'int'), // string
 | |
|         'compressionType' => array('s' => 'int'), // int
 | |
|         'resizeWidth' => array('s' => 'int'), // int
 | |
|         'resizeHeight' => array('s' => 'int'), // int
 | |
|         'processThumbnails' => array('s' => 'boolean'), // checkbox
 | |
| 				'useSmartcrop' => array('s' => 'boolean'),
 | |
|         'backupImages' => array('s' => 'boolean'), // checkbox
 | |
|         'keepExif' => array('s' => 'int'), // checkbox
 | |
|         'resizeImages' => array('s' => 'boolean'),
 | |
|         'resizeType' => array('s' => 'string'),
 | |
|         'includeNextGen' => array('s' => 'boolean'), // checkbox
 | |
|         'png2jpg' => array('s' => 'int'), // checkbox
 | |
|         'CMYKtoRGBconversion' => array('s' => 'boolean'), //checkbox
 | |
|         'createWebp' => array('s' => 'boolean'), // checkbox
 | |
|         'createAvif' => array('s' => 'boolean'),  // checkbox
 | |
|         'deliverWebp' => array('s' => 'int'), // checkbox
 | |
|         'optimizeRetina' => array('s' => 'boolean'), // checkbox
 | |
|         'optimizeUnlisted' => array('s' => 'boolean'), // $checkbox
 | |
|         'optimizePdfs' => array('s' => 'boolean'), //checkbox
 | |
|         'excludePatterns' => array('s' => 'exception'), //  - processed, multi-layer, so skip
 | |
|         'siteAuthUser' => array('s' => 'string'), // string
 | |
|         'siteAuthPass' => array('s' => 'string'), // string
 | |
|         'frontBootstrap' => array('s' =>'boolean'), // checkbox
 | |
|         'autoMediaLibrary' => array('s' => 'boolean'), // checkbox
 | |
|         'excludeSizes' => array('s' => 'array'), // Array
 | |
|         'cloudflareEmail' => array('s' => 'string'), // string
 | |
|         'cloudflareAuthKey' => array('s' => 'string'), // string
 | |
|         'cloudflareZoneID' => array('s' => 'string'), // string
 | |
|         'cloudflareToken' => array('s' => 'string'),
 | |
|         'savedSpace' => array('s' => 'skip'),
 | |
|         'fileCount' => array('s' => 'skip'), // int
 | |
|         'under5Percent' => array('s' => 'skip'), // int
 | |
|     );
 | |
| 
 | |
| 		protected $state = array(
 | |
| 
 | |
| 		);
 | |
| 
 | |
| 		protected $settings;
 | |
| 		protected $states;
 | |
| 
 | |
| 		public function __construct()
 | |
| 		{
 | |
| 			 $this->checkLegacy();
 | |
| 			 $this->load();
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 		public static function getInstance()
 | |
| 		{
 | |
| 			 if (is_null(self::$instance))
 | |
| 			 {
 | |
| 					self::$instance = new SettingsModel;
 | |
| 			 }
 | |
| 			 return self::$instance;
 | |
| 		}
 | |
| 
 | |
| 		protected function load()
 | |
| 		{
 | |
| 			 $settings = get_option($this->option_name);
 | |
| 		}
 | |
| 
 | |
| 		protected function save()
 | |
| 		{
 | |
| 				update_option($this->option_name, $this->settings);
 | |
| 		}
 | |
| 
 | |
| 		public function __get($name)
 | |
| 		{
 | |
| 			 if (isset($this->settings[$name]))
 | |
| 			 {
 | |
| 				  return $this->sanitize($name, $this->settings[$name]);
 | |
| 			 }
 | |
| 		}
 | |
| 
 | |
| 		protected function checkLegacy()
 | |
| 		{
 | |
| 				$this->deleteLegacy(); // very legacy, unused
 | |
| 			//	$this->convertLegacy(); // legacy, move to new format.
 | |
| 		}
 | |
| 
 | |
| 		public function convertLegacy()
 | |
| 		{
 | |
| 				$options = array(
 | |
| 		        //optimization options
 | |
| 		        'apiKey' => array('key' => 'wp-short-pixel-apiKey'),
 | |
| 		        'verifiedKey' => array('key' => 'wp-short-pixel-verifiedKey'),
 | |
| 		        'compressionType' => array('key' => 'wp-short-pixel-compression'),
 | |
| 		        'processThumbnails' => array('key' => 'wp-short-process_thumbnails'),
 | |
| 						'useSmartcrop' => array('key' => 'wpspio-usesmartcrop'),
 | |
| 		        'keepExif' => array('key' => 'wp-short-pixel-keep-exif'),
 | |
| 		        'CMYKtoRGBconversion' => array('key' => 'wp-short-pixel_cmyk2rgb'),
 | |
| 		        'createWebp' => array('key' => 'wp-short-create-webp'),
 | |
| 		        'createAvif' => array('key' => 'wp-short-create-avif'),
 | |
| 		        'deliverWebp' => array('key' => 'wp-short-pixel-create-webp-markup'),
 | |
| 		        'optimizeRetina' => array('key' => 'wp-short-pixel-optimize-retina'),
 | |
| 		        'optimizeUnlisted' => array('key' => 'wp-short-pixel-optimize-unlisted'),
 | |
| 		        'backupImages' => array('key' => 'wp-short-backup_images'),
 | |
| 		        'resizeImages' => array('key' => 'wp-short-pixel-resize-images'),
 | |
| 		        'resizeType' => array('key' => 'wp-short-pixel-resize-type'),
 | |
| 		        'resizeWidth' => array('key' => 'wp-short-pixel-resize-width'),
 | |
| 		        'resizeHeight' => array('key' => 'wp-short-pixel-resize-height'),
 | |
| 		        'siteAuthUser' => array('key' => 'wp-short-pixel-site-auth-user'),
 | |
| 		        'siteAuthPass' => array('key' => 'wp-short-pixel-site-auth-pass'),
 | |
| 		        'autoMediaLibrary' => array('key' => 'wp-short-pixel-auto-media-library'),
 | |
| 		        'optimizePdfs' => array('key' => 'wp-short-pixel-optimize-pdfs'),
 | |
| 		        'excludePatterns' => array('key' => 'wp-short-pixel-exclude-patterns'),
 | |
| 		        'png2jpg' => array('key' => 'wp-short-pixel-png2jpg'),
 | |
| 		        'excludeSizes' => array('key' => 'wp-short-pixel-excludeSizes'),
 | |
| 						'currentVersion' => array('key' => 'wp-short-pixel-currentVersion'),
 | |
| 
 | |
| 		        //CloudFlare
 | |
| 		        'cloudflareEmail'   => array( 'key' => 'wp-short-pixel-cloudflareAPIEmail'),
 | |
| 		        'cloudflareAuthKey' => array( 'key' => 'wp-short-pixel-cloudflareAuthKey'),
 | |
| 		        'cloudflareZoneID'  => array( 'key' => 'wp-short-pixel-cloudflareAPIZoneID'),
 | |
| 		        'cloudflareToken'   => array( 'key' => 'wp-short-pixel-cloudflareToken'),
 | |
| 
 | |
| 		        //optimize other images than the ones in Media Library
 | |
| 		        'includeNextGen' => array('key' => 'wp-short-pixel-include-next-gen'),
 | |
| 		        'hasCustomFolders' => array('key' => 'wp-short-pixel-has-custom-folders'),
 | |
| 		        'customBulkPaused' => array('key' => 'wp-short-pixel-custom-bulk-paused'),
 | |
| 
 | |
| 		        //stats, notices, etc.
 | |
| 						// @todo Most of this can go. See state machine comment.
 | |
| 
 | |
| 		        'currentStats' => array('key' => 'wp-short-pixel-current-total-files'),
 | |
| 		        'fileCount' => array('key' => 'wp-short-pixel-fileCount'),
 | |
| 		        'thumbsCount' => array('key' => 'wp-short-pixel-thumbnail-count'),
 | |
| 		        'under5Percent' => array('key' => 'wp-short-pixel-files-under-5-percent'),
 | |
| 		        'savedSpace' => array('key' => 'wp-short-pixel-savedSpace'),
 | |
| 		        'apiRetries' => array('key' => 'wp-short-pixel-api-retries'),
 | |
| 		        'totalOptimized' => array('key' => 'wp-short-pixel-total-optimized'),
 | |
| 		        'totalOriginal' => array('key' => 'wp-short-pixel-total-original'),
 | |
| 		        'quotaExceeded' => array('key' => 'wp-short-pixel-quota-exceeded'),
 | |
| 		        'httpProto' => array('key' => 'wp-short-pixel-protocol'),
 | |
| 		        'downloadProto' => array('key' => 'wp-short-pixel-download-protocol'),
 | |
| 
 | |
| 						'downloadArchive' => array('key' => 'wp-short-pixel-download-archive'),
 | |
| 
 | |
| 		        'activationDate' => array('key' => 'wp-short-pixel-activation-date'),
 | |
| 		        'mediaLibraryViewMode' => array('key' => 'wp-short-pixel-view-mode'),
 | |
| 		        'redirectedSettings' => array('key' => 'wp-short-pixel-redirected-settings'),
 | |
| 		        'convertedPng2Jpg' => array('key' => 'wp-short-pixel-converted-png2jpg'),
 | |
| 		    );
 | |
| 		}
 | |
| 
 | |
| 		private function deleteLegacy()
 | |
| 		{
 | |
| 			delete_option('wp-short-pixel-activation-notice');
 | |
| 			delete_option('wp-short-pixel-bulk-last-status'); // legacy shizzle
 | |
| 			delete_option('wp-short-pixel-current-total-files');
 | |
| 			delete_option('wp-short-pixel-remove-settings-on-delete-plugin');
 | |
| 
 | |
| 			// Bulk State machine legacy
 | |
| 			$bulkLegacyOptions = array(
 | |
| 					'wp-short-pixel-bulk-type',
 | |
| 					'wp-short-pixel-bulk-last-status',
 | |
| 					'wp-short-pixel-query-id-start',
 | |
| 					'wp-short-pixel-query-id-stop',
 | |
| 					'wp-short-pixel-bulk-count',
 | |
| 					'wp-short-pixel-bulk-previous-percent',
 | |
| 					'wp-short-pixel-bulk-processed-items',
 | |
| 					'wp-short-pixel-bulk-done-count',
 | |
| 					'wp-short-pixel-last-bulk-start-time',
 | |
| 					'wp-short-pixel-last-bulk-success-time',
 | |
| 					'wp-short-pixel-bulk-running-time',
 | |
| 					'wp-short-pixel-cancel-pointer',
 | |
| 					'wp-short-pixel-skip-to-custom',
 | |
| 					'wp-short-pixel-bulk-ever-ran',
 | |
| 					'wp-short-pixel-flag-id',
 | |
| 					'wp-short-pixel-failed-imgs',
 | |
| 					'bulkProcessingStatus',
 | |
| 					'wp-short-pixel-prioritySkip',
 | |
| 			);
 | |
| 
 | |
| 			$removedStats = array(
 | |
| 					'wp-short-pixel-helpscout-optin',
 | |
| 					'wp-short-pixel-activation-notice',
 | |
| 					'wp-short-pixel-dismissed-notices',
 | |
| 					'wp-short-pixel-media-alert',
 | |
| 			);
 | |
| 
 | |
| 			$removedOptions = array(
 | |
| 					'wp-short-pixel-remove-settings-on-delete-plugin',
 | |
| 					'wp-short-pixel-custom-bulk-paused',
 | |
| 					'wp-short-pixel-last-back-action',
 | |
| 					'wp-short-pixel-front-bootstrap',
 | |
| 			);
 | |
| 
 | |
| 			$toRemove = array_merge($bulkLegacyOptions, $removedStats, $removedOptions);
 | |
| 
 | |
| 			foreach($toRemove as $option)
 | |
| 			{
 | |
| 				 delete_option($option);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| } // class
 |