first
This commit is contained in:
@ -0,0 +1,315 @@
|
||||
<?php
|
||||
namespace ShortPixel\Helper;
|
||||
|
||||
if ( ! defined( 'ABSPATH' ) ) {
|
||||
exit; // Exit if accessed directly.
|
||||
}
|
||||
|
||||
use ShortPixel\ShortPixelLogger\ShortPixelLogger as Log;
|
||||
use ShortPixel\Controller\OptimizeController as OptimizeController;
|
||||
use ShortPixel\Controller\BulkController as BulkController;
|
||||
use ShortPixel\Controller\FileSystemController as FileSystemController;
|
||||
use ShortPixel\Controller\AdminNoticesController as AdminNoticesController;
|
||||
use ShortPixel\Controller\StatsController as StatsController;
|
||||
use ShortPixel\Controller\ApiKeyController as ApiKeyController;
|
||||
use ShortPixel\Helper\UtilHelper as UtilHelper;
|
||||
|
||||
|
||||
class InstallHelper
|
||||
{
|
||||
|
||||
public static function activatePlugin()
|
||||
{
|
||||
self::deactivatePlugin();
|
||||
$settings = \wpSPIO()->settings();
|
||||
|
||||
$env = wpSPIO()->env();
|
||||
|
||||
if(\WPShortPixelSettings::getOpt('deliverWebp') == 3 && ! $env->is_nginx) {
|
||||
UtilHelper::alterHtaccess(true,true); //add the htaccess lines. Both are true because even if one option is now off in the past both fileformats could have been generated.
|
||||
}
|
||||
|
||||
self::checkTables();
|
||||
|
||||
AdminNoticesController::resetOldNotices();
|
||||
\WPShortPixelSettings::onActivate();
|
||||
|
||||
$optimizeController = new OptimizeController();
|
||||
$q = $optimizeController->getQueue('media');
|
||||
$q->getShortQ()->install(); // create table.
|
||||
|
||||
$settings->currentVersion = SHORTPIXEL_IMAGE_OPTIMISER_VERSION;
|
||||
}
|
||||
|
||||
public static function deactivatePlugin()
|
||||
{
|
||||
|
||||
$settings = \wpSPIO()->settings();
|
||||
$settings::onDeactivate();
|
||||
|
||||
$env = wpSPIO()->env();
|
||||
|
||||
if (! $env->is_nginx)
|
||||
{
|
||||
UtilHelper::alterHtaccess(false, false);
|
||||
}
|
||||
|
||||
// save remove.
|
||||
$fs = new FileSystemController();
|
||||
$log = $fs->getFile(SHORTPIXEL_BACKUP_FOLDER . "/shortpixel_log");
|
||||
|
||||
if ($log->exists())
|
||||
$log->delete();
|
||||
|
||||
global $wpdb;
|
||||
$sql = "delete from " . $wpdb->options . " where option_name like '%_transient_shortpixel%'";
|
||||
$wpdb->query($sql); // remove transients.
|
||||
|
||||
// saved in settings object, reset all stats.
|
||||
StatsController::getInstance()->reset();
|
||||
}
|
||||
|
||||
public static function uninstallPlugin()
|
||||
{
|
||||
OptimizeController::uninstallPlugin();
|
||||
ApiKeyController::uninstallPlugin();
|
||||
|
||||
delete_transient('bulk-secret');
|
||||
delete_transient('othermedia_refresh_folder_delay');
|
||||
delete_transient('avif_server_check');
|
||||
delete_transient('quotaData');
|
||||
|
||||
}
|
||||
|
||||
// Removes everything of SPIO 5.x . Not recommended.
|
||||
public static function hardUninstall()
|
||||
{
|
||||
$env = \wpSPIO()->env();
|
||||
$settings = \wpSPIO()->settings();
|
||||
|
||||
|
||||
$nonce = (isset($_POST['tools-nonce'])) ? sanitize_key($_POST['tools-nonce']) : null;
|
||||
if ( ! wp_verify_nonce( $nonce, 'remove-all' ) ) {
|
||||
wp_nonce_ays( '' );
|
||||
}
|
||||
|
||||
self::deactivatePlugin(); // deactivate
|
||||
self::uninstallPlugin(); // uninstall
|
||||
|
||||
// Bulk Log
|
||||
BulkController::uninstallPlugin();
|
||||
|
||||
$settings::resetOptions();
|
||||
|
||||
if (! $env->is_nginx)
|
||||
{
|
||||
insert_with_markers( get_home_path() . '.htaccess', 'ShortPixelWebp', '');
|
||||
}
|
||||
|
||||
self::removeTables();
|
||||
|
||||
// Remove Backups
|
||||
$dir = \wpSPIO()->filesystem()->getDirectory(SHORTPIXEL_BACKUP_FOLDER);
|
||||
$dir->recursiveDelete();
|
||||
|
||||
$plugin = basename(SHORTPIXEL_PLUGIN_DIR) . '/' . basename(SHORTPIXEL_PLUGIN_FILE);
|
||||
deactivate_plugins($plugin);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static function deactivateConflictingPlugin()
|
||||
{
|
||||
if ( ! isset($_GET['_wpnonce']) || ! wp_verify_nonce( sanitize_key($_GET['_wpnonce']), 'sp_deactivate_plugin_nonce' ) ) {
|
||||
wp_nonce_ays( 'Nononce' );
|
||||
}
|
||||
|
||||
$referrer_url = wp_get_referer();
|
||||
$url = wp_get_referer();
|
||||
$plugin = (isset($_GET['plugin'])) ? sanitize_text_field(wp_unslash($_GET['plugin'])) : null; // our target.
|
||||
|
||||
if (! is_null($plugin))
|
||||
deactivate_plugins($plugin);
|
||||
|
||||
wp_safe_redirect($url);
|
||||
die();
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if TableName exists
|
||||
* @param $tableName The Name of the Table without Prefix.
|
||||
*/
|
||||
public static function checkTableExists($tableName)
|
||||
{
|
||||
global $wpdb;
|
||||
$tableName = $wpdb->prefix . $tableName;
|
||||
$sql = $wpdb->prepare("
|
||||
SHOW TABLES LIKE %s
|
||||
", $tableName);
|
||||
|
||||
$result = intval($wpdb->query($sql));
|
||||
|
||||
if ($result == 0)
|
||||
return false;
|
||||
else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static function checkTables()
|
||||
{
|
||||
global $wpdb;
|
||||
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
|
||||
|
||||
dbDelta(self::getFolderTableSQL());
|
||||
dbDelta(self::getMetaTableSQL());
|
||||
dbDelta(self::getPostMetaSQL());
|
||||
|
||||
self::checkIndexes();
|
||||
}
|
||||
|
||||
private static function checkIndexes()
|
||||
{
|
||||
global $wpdb;
|
||||
|
||||
$definitions = array(
|
||||
'shortpixel_meta' => array(
|
||||
'path' => 'path'
|
||||
),
|
||||
'shortpixel_folders' => array(
|
||||
'path' => 'path'
|
||||
),
|
||||
'shortpixel_postmeta' => array(
|
||||
'attach_id' => 'attach_id',
|
||||
'parent' => 'parent',
|
||||
'size' => 'size',
|
||||
'status' => 'status',
|
||||
'compression_type' => 'compression_type'
|
||||
)
|
||||
);
|
||||
|
||||
foreach($definitions as $raw_tableName => $indexes)
|
||||
{
|
||||
$tableName = $wpdb->prefix . $raw_tableName;
|
||||
foreach($indexes as $indexName => $fieldName)
|
||||
{
|
||||
// Check exists
|
||||
$sql = 'SHOW INDEX FROM ' . $tableName . ' WHERE Key_name = %s';
|
||||
$sql = $wpdb->prepare($sql, $indexName);
|
||||
|
||||
$res = $wpdb->get_row($sql);
|
||||
|
||||
if (is_null($res))
|
||||
{
|
||||
// can't prepare for those, also not any user data here.
|
||||
$sql = 'CREATE INDEX ' . $indexName . ' ON ' . $tableName . ' ( ' . $fieldName . ')';
|
||||
$res = $wpdb->query($sql);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static function removeTables()
|
||||
{
|
||||
global $wpdb;
|
||||
if (self::checkTableExists('shortpixel_folders') === true)
|
||||
{
|
||||
$sql = 'DROP TABLE ' . $wpdb->prefix . 'shortpixel_folders';
|
||||
$wpdb->query($sql);
|
||||
}
|
||||
if (self::checkTableExists('shortpixel_meta') === true)
|
||||
{
|
||||
$sql = 'DROP TABLE ' . $wpdb->prefix . 'shortpixel_meta';
|
||||
$wpdb->query($sql);
|
||||
}
|
||||
if (self::checkTableExists('shortpixel_postmeta') === true)
|
||||
{
|
||||
$sql = 'DROP TABLE ' . $wpdb->prefix . 'shortpixel_postmeta';
|
||||
error_log('Dropping postmeta' . $sql);
|
||||
$wpdb->query($sql);
|
||||
}
|
||||
}
|
||||
|
||||
public static function getFolderTableSQL() {
|
||||
global $wpdb;
|
||||
$charsetCollate = $wpdb->get_charset_collate();
|
||||
$prefix = $wpdb->prefix;
|
||||
|
||||
return "CREATE TABLE {$prefix}shortpixel_folders (
|
||||
id mediumint(9) NOT NULL AUTO_INCREMENT,
|
||||
path varchar(512),
|
||||
name varchar(150),
|
||||
path_md5 char(32),
|
||||
file_count int,
|
||||
status SMALLINT NOT NULL DEFAULT 0,
|
||||
parent SMALLINT DEFAULT 0,
|
||||
ts_checked timestamp,
|
||||
ts_updated timestamp,
|
||||
ts_created timestamp,
|
||||
PRIMARY KEY id (id)
|
||||
) $charsetCollate;";
|
||||
|
||||
}
|
||||
|
||||
public static function getMetaTableSQL() {
|
||||
global $wpdb;
|
||||
$charsetCollate = $wpdb->get_charset_collate();
|
||||
$prefix = $wpdb->prefix;
|
||||
|
||||
return "CREATE TABLE {$prefix}shortpixel_meta (
|
||||
id mediumint(10) NOT NULL AUTO_INCREMENT,
|
||||
folder_id mediumint(9) NOT NULL,
|
||||
ext_meta_id int(10),
|
||||
path varchar(512),
|
||||
name varchar(150),
|
||||
path_md5 char(32),
|
||||
compressed_size int(10) NOT NULL DEFAULT 0,
|
||||
compression_type tinyint,
|
||||
keep_exif tinyint DEFAULT 0,
|
||||
cmyk2rgb tinyint DEFAULT 0,
|
||||
resize tinyint,
|
||||
resize_width smallint,
|
||||
resize_height smallint,
|
||||
backup tinyint DEFAULT 0,
|
||||
status SMALLINT NOT NULL DEFAULT 0,
|
||||
retries tinyint NOT NULL DEFAULT 0,
|
||||
message varchar(255),
|
||||
ts_added timestamp,
|
||||
ts_optimized timestamp,
|
||||
extra_info LONGTEXT,
|
||||
PRIMARY KEY sp_id (id)
|
||||
) $charsetCollate;";
|
||||
|
||||
}
|
||||
|
||||
public static function getPostMetaSQL()
|
||||
{
|
||||
global $wpdb;
|
||||
$charsetCollate = $wpdb->get_charset_collate();
|
||||
$prefix = $wpdb->prefix;
|
||||
|
||||
$sql = "CREATE TABLE {$prefix}shortpixel_postmeta (
|
||||
id bigint unsigned NOT NULL AUTO_INCREMENT ,
|
||||
attach_id bigint unsigned NOT NULL,
|
||||
parent bigint unsigned NOT NULL,
|
||||
image_type tinyint default 0,
|
||||
size varchar(200),
|
||||
status tinyint default 0,
|
||||
compression_type tinyint,
|
||||
compressed_size int,
|
||||
original_size int,
|
||||
tsAdded timestamp,
|
||||
tsOptimized timestamp,
|
||||
extra_info LONGTEXT,
|
||||
PRIMARY KEY id (id)
|
||||
) $charsetCollate;";
|
||||
|
||||
return $sql;
|
||||
}
|
||||
|
||||
|
||||
} // InstallHelper
|
Reference in New Issue
Block a user