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
|