327 lines
11 KiB
PHP
327 lines
11 KiB
PHP
|
<?php
|
||
|
namespace WpAssetCleanUp;
|
||
|
|
||
|
use WpAssetCleanUp\OptimiseAssets\OptimizeCommon;
|
||
|
|
||
|
/**
|
||
|
* Class ImportExport
|
||
|
* @package WpAssetCleanUp
|
||
|
*/
|
||
|
class ImportExport
|
||
|
{
|
||
|
/***** BEGIN EXPORT ******/
|
||
|
/**
|
||
|
* @return string
|
||
|
*/
|
||
|
public function jsonSettings()
|
||
|
{
|
||
|
$wpacuSettings = new Settings();
|
||
|
$settingsArray = $wpacuSettings->getAll();
|
||
|
|
||
|
// Some "Site-wide Common Unloads" values are fetched outside the "Settings" option values
|
||
|
// e.g. jQuery Migrate, Comment Reply
|
||
|
$globalUnloadList = Main::instance()->getGlobalUnload();
|
||
|
|
||
|
// CSS
|
||
|
$settingsArray['disable_dashicons_for_guests'] = in_array( 'dashicons', $globalUnloadList['styles'] );
|
||
|
$settingsArray['disable_wp_block_library'] = in_array( 'wp-block-library', $globalUnloadList['styles'] );
|
||
|
|
||
|
// JS
|
||
|
$settingsArray['disable_jquery_migrate'] = in_array( 'jquery-migrate', $globalUnloadList['scripts'] );
|
||
|
$settingsArray['disable_comment_reply'] = in_array( 'comment-reply', $globalUnloadList['scripts'] );
|
||
|
|
||
|
return wp_json_encode($settingsArray);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Was the "Export" button clicked? Do verifications and send the right headers
|
||
|
*/
|
||
|
public function doExport()
|
||
|
{
|
||
|
if (! Menu::userCanManageAssets()) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (! Misc::getVar('post', 'wpacu_do_export_nonce')) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$wpacuExportFor = Misc::getVar('post', 'wpacu_export_for');
|
||
|
|
||
|
if (! $wpacuExportFor) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Last important check
|
||
|
\check_admin_referer('wpacu_do_export', 'wpacu_do_export_nonce');
|
||
|
|
||
|
$exportComment = 'Exported [exported_text] via '.WPACU_PLUGIN_TITLE.' (v'.WPACU_PLUGIN_VERSION.') - Timestamp: '.time();
|
||
|
|
||
|
// "Settings" values (could be just default ones if none are found in the database)
|
||
|
if ($wpacuExportFor === 'settings') {
|
||
|
$exportComment = str_replace('[exported_text]', 'Settings', $exportComment);
|
||
|
|
||
|
$settingsJson = $this->jsonSettings();
|
||
|
|
||
|
$valuesArray = array(
|
||
|
'__comment' => $exportComment,
|
||
|
'settings' => json_decode($settingsJson, ARRAY_A)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if ($wpacuExportFor === 'everything') {
|
||
|
$exportComment = str_replace('[exported_text]', 'Everything', $exportComment);
|
||
|
|
||
|
// "Settings"
|
||
|
$settingsJson = $this->jsonSettings();
|
||
|
|
||
|
// "Homepage"
|
||
|
$frontPageNoLoad = get_option(WPACU_PLUGIN_ID . '_front_page_no_load');
|
||
|
$frontPageNoLoadArray = json_decode($frontPageNoLoad, ARRAY_A);
|
||
|
|
||
|
$frontPageExceptionsListJson = get_option(WPACU_PLUGIN_ID . '_front_page_load_exceptions');
|
||
|
$frontPageExceptionsListArray = json_decode($frontPageExceptionsListJson, ARRAY_A);
|
||
|
|
||
|
// "Site-wide" Unloads
|
||
|
$globalUnloadListJson = get_option(WPACU_PLUGIN_ID . '_global_unload');
|
||
|
$globalUnloadArray = json_decode($globalUnloadListJson, ARRAY_A);
|
||
|
|
||
|
// "Bulk" unloads (for all pages, posts, custom post type)
|
||
|
$bulkUnloadListJson = get_option(WPACU_PLUGIN_ID . '_bulk_unload');
|
||
|
$bulkUnloadArray = json_decode($bulkUnloadListJson, ARRAY_A);
|
||
|
|
||
|
// Post type: load exceptions
|
||
|
$postTypeLoadExceptionsJson = get_option(WPACU_PLUGIN_ID . '_post_type_load_exceptions');
|
||
|
$postTypeLoadExceptionsArray = json_decode($postTypeLoadExceptionsJson, ARRAY_A);
|
||
|
|
||
|
$globalDataListJson = get_option(WPACU_PLUGIN_ID . '_global_data');
|
||
|
$globalDataListArray = json_decode($globalDataListJson, ARRAY_A);
|
||
|
|
||
|
// [wpacu_pro]
|
||
|
// Load exceptions for extras: is_archive(), author, search, 404 pages
|
||
|
$extrasLoadExceptionsListJson = get_option(WPACU_PLUGIN_ID . '_extras_load_exceptions');
|
||
|
$extrasLoadExceptionsArray = json_decode($extrasLoadExceptionsListJson, ARRAY_A);
|
||
|
|
||
|
// Load exceptions for pages that have certain taxonomies set
|
||
|
$postTypeViaTaxLoadExceptionsJson = get_option(WPACU_PLUGIN_ID . '_post_type_via_tax_load_exceptions');
|
||
|
$postTypeViaTaxLoadExceptionsArray = json_decode($postTypeViaTaxLoadExceptionsJson, ARRAY_A);
|
||
|
// [/wpacu_pro]
|
||
|
|
||
|
global $wpdb;
|
||
|
|
||
|
$allMetaResults = array();
|
||
|
|
||
|
$metaKeyLike = '_' . WPACU_PLUGIN_ID . '_%';
|
||
|
|
||
|
$tableList = array($wpdb->postmeta);
|
||
|
|
||
|
foreach ($tableList as $tableName) {
|
||
|
if ( $tableName === $wpdb->postmeta ) {
|
||
|
$sqlFetchPostsMetas = <<<SQL
|
||
|
SELECT post_id, meta_key, meta_value FROM `{$wpdb->postmeta}` WHERE meta_key LIKE '{$metaKeyLike}'
|
||
|
SQL;
|
||
|
$allMetaResults['postmeta'] = $wpdb->get_results( $sqlFetchPostsMetas, ARRAY_A );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Export Field Names should be kept as they are and in case
|
||
|
// they are changed later on, a fallback should be in place
|
||
|
$valuesArray = array(
|
||
|
'__comment' => $exportComment,
|
||
|
'settings' => json_decode($settingsJson, ARRAY_A),
|
||
|
|
||
|
'homepage' => array(
|
||
|
'unloads' => $frontPageNoLoadArray,
|
||
|
'load_exceptions' => $frontPageExceptionsListArray
|
||
|
),
|
||
|
|
||
|
'global_unload' => $globalUnloadArray,
|
||
|
'bulk_unload' => $bulkUnloadArray,
|
||
|
|
||
|
'post_type_exceptions' => $postTypeLoadExceptionsArray,
|
||
|
|
||
|
// [wpacu_pro]
|
||
|
'post_type_via_tax_exceptions' => $postTypeViaTaxLoadExceptionsArray,
|
||
|
// [/wpacu_pro]
|
||
|
|
||
|
'global_data' => $globalDataListArray,
|
||
|
|
||
|
// [wpacu_pro]
|
||
|
'extras_exceptions' => $extrasLoadExceptionsArray,
|
||
|
// [/wpacu_pro]
|
||
|
|
||
|
'posts_metas' => $allMetaResults['postmeta'],
|
||
|
);
|
||
|
} else {
|
||
|
return; // has to be "Settings" or "Everything"
|
||
|
}
|
||
|
|
||
|
// Was the right selection made? Continue
|
||
|
$date = date('j-M-Y-H.i');
|
||
|
$host = parse_url(site_url(), PHP_URL_HOST);
|
||
|
|
||
|
$wpacuExportForPartOfFileName = str_replace('_', '-', $wpacuExportFor);
|
||
|
|
||
|
header('Content-Type: application/json');
|
||
|
header('Content-Disposition: attachment; filename="asset-cleanup-lite-exported-'.$wpacuExportForPartOfFileName.'-from-'.$host.'-'.$date.'.json"');
|
||
|
|
||
|
echo wp_json_encode($valuesArray);
|
||
|
exit();
|
||
|
}
|
||
|
/***** END EXPORT ******/
|
||
|
|
||
|
/***** BEGIN IMPORT ******/
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
public function doImport()
|
||
|
{
|
||
|
if (! Menu::userCanManageAssets()) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (! Misc::getVar('post', 'wpacu_do_import_nonce')) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$jsonTmpName = isset($_FILES['wpacu_import_file']['tmp_name']) ? $_FILES['wpacu_import_file']['tmp_name'] : false;
|
||
|
|
||
|
if (! $jsonTmpName) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Last important check
|
||
|
\check_admin_referer('wpacu_do_import', 'wpacu_do_import_nonce');
|
||
|
|
||
|
if (! is_file($jsonTmpName)) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$valuesJson = FileSystem::fileGetContents($jsonTmpName);
|
||
|
|
||
|
$valuesArray = json_decode($valuesJson, ARRAY_A);
|
||
|
|
||
|
if ( ! (JSON_ERROR_NONE === Misc::jsonLastError())) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$importedList = array();
|
||
|
|
||
|
// NOTE: The values are not replaced, but added to the existing ones (if any)
|
||
|
|
||
|
// "Settings" (Replace)
|
||
|
if (isset($valuesArray['settings']) && ! empty($valuesArray['settings'])) {
|
||
|
$wpacuSettings = new Settings();
|
||
|
|
||
|
// "Site-wide Common Unloads" - apply settings
|
||
|
|
||
|
// JS
|
||
|
$disableJQueryMigrate = isset( $valuesArray['settings']['disable_jquery_migrate'] ) ? $valuesArray['settings']['disable_jquery_migrate'] : false;
|
||
|
$disableCommentReply = isset( $valuesArray['settings']['disable_comment_reply'] ) ? $valuesArray['settings']['disable_comment_reply'] : false;
|
||
|
|
||
|
// CSS
|
||
|
$disableGutenbergCssBlockLibrary = isset( $valuesArray['settings']['disable_wp_block_library'] ) ? $valuesArray['settings']['disable_wp_block_library'] : false;
|
||
|
$disableDashiconsForGuests = isset( $valuesArray['settings']['disable_dashicons_for_guests'] ) ? $valuesArray['settings']['disable_dashicons_for_guests'] : false;
|
||
|
|
||
|
$wpacuSettings->updateSiteWideRuleForCommonAssets(
|
||
|
array(
|
||
|
// JS
|
||
|
'jquery_migrate' => $disableJQueryMigrate,
|
||
|
'comment_reply' => $disableCommentReply,
|
||
|
|
||
|
// CSS
|
||
|
'wp_block_library' => $disableGutenbergCssBlockLibrary,
|
||
|
'dashicons' => $disableDashiconsForGuests,
|
||
|
)
|
||
|
);
|
||
|
|
||
|
Misc::addUpdateOption(WPACU_PLUGIN_ID . '_settings', wp_json_encode($valuesArray['settings']));
|
||
|
$importedList[] = 'settings';
|
||
|
}
|
||
|
|
||
|
// "Homepage" Unloads
|
||
|
if (isset($valuesArray['homepage']['unloads']['scripts'])
|
||
|
|| isset($valuesArray['homepage']['unloads']['styles'])) {
|
||
|
Misc::addUpdateOption(WPACU_PLUGIN_ID . '_front_page_no_load', wp_json_encode($valuesArray['homepage']['unloads']));
|
||
|
$importedList[] = 'homepage_unloads';
|
||
|
}
|
||
|
|
||
|
// "Homepage" Load Exceptions
|
||
|
if (isset($valuesArray['homepage']['load_exceptions']['scripts'])
|
||
|
|| isset($valuesArray['homepage']['load_exceptions']['styles'])) {
|
||
|
Misc::addUpdateOption(WPACU_PLUGIN_ID . '_front_page_load_exceptions', wp_json_encode($valuesArray['homepage']['load_exceptions']));
|
||
|
$importedList[] = 'homepage_exceptions';
|
||
|
}
|
||
|
|
||
|
// "Site-Wide" (Everywhere) Unloads
|
||
|
if (isset($valuesArray['global_unload']['scripts'])
|
||
|
|| isset($valuesArray['global_unload']['styles'])) {
|
||
|
Misc::addUpdateOption(WPACU_PLUGIN_ID . '_global_unload', wp_json_encode($valuesArray['global_unload']));
|
||
|
$importedList[] = 'sitewide_unloads';
|
||
|
}
|
||
|
|
||
|
// Bulk Unloads (e.g. Unload on all pages of product post type)
|
||
|
if (isset($valuesArray['bulk_unload']['scripts'])
|
||
|
|| isset($valuesArray['bulk_unload']['styles'])) {
|
||
|
Misc::addUpdateOption(WPACU_PLUGIN_ID . '_bulk_unload', wp_json_encode($valuesArray['bulk_unload']));
|
||
|
$importedList[] = 'bulk_unload';
|
||
|
}
|
||
|
|
||
|
// Post type: load exception
|
||
|
if (isset($valuesArray['post_type_exceptions']) && ! empty($valuesArray['post_type_exceptions'])) {
|
||
|
Misc::addUpdateOption(WPACU_PLUGIN_ID . '_post_type_load_exceptions', wp_json_encode($valuesArray['post_type_exceptions']));
|
||
|
$importedList[] = 'post_type_load_exceptions';
|
||
|
}
|
||
|
|
||
|
// [wpacu_pro]
|
||
|
// Post type: load exception via taxonomy
|
||
|
if (isset($valuesArray['post_type_via_tax_exceptions']) && ! empty($valuesArray['post_type_via_tax_exceptions'])) {
|
||
|
Misc::addUpdateOption(WPACU_PLUGIN_ID . '_post_type_via_tax_exceptions', wp_json_encode($valuesArray['post_type_via_tax_exceptions']));
|
||
|
$importedList[] = 'post_type_via_tax_exceptions';
|
||
|
}
|
||
|
// [/wpacu_pro]
|
||
|
|
||
|
// Global Data
|
||
|
if (isset($valuesArray['global_data']['scripts'])
|
||
|
|| isset($valuesArray['global_data']['styles'])) {
|
||
|
Misc::addUpdateOption(WPACU_PLUGIN_ID . '_global_data', wp_json_encode($valuesArray['global_data']));
|
||
|
$importedList[] = 'global_data';
|
||
|
}
|
||
|
|
||
|
// [START] All Posts Metas (per page unloads, load exceptions, page options from side meta box)
|
||
|
$targetKey = 'posts_metas';
|
||
|
|
||
|
if (isset($valuesArray[$targetKey]) && ! empty($valuesArray[$targetKey])) {
|
||
|
foreach ($valuesArray[$targetKey] as $metaValues) {
|
||
|
// It needs to have a post ID and meta key starting with _' . WPACU_PLUGIN_ID . '
|
||
|
if ( ! (isset($metaValues['post_id'], $metaValues['meta_key'])
|
||
|
&& strpos($metaValues['meta_key'], '_' . WPACU_PLUGIN_ID) === 0) ) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
$postId = $metaValues['post_id'];
|
||
|
$metaKey = $metaValues['meta_key'];
|
||
|
$metaValue = $metaValues['meta_value']; // already JSON encoded
|
||
|
|
||
|
if (! add_post_meta($postId, $metaKey, $metaValue, true)) {
|
||
|
update_post_meta($postId, $metaKey, $metaValue);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$importedList[] = 'posts_metas';
|
||
|
}
|
||
|
// [END] All Posts Metas (per page unloads, load exceptions, page options from side meta box)
|
||
|
|
||
|
if (! empty($importedList)) {
|
||
|
// After import was completed, clear all CSS/JS cache
|
||
|
OptimizeCommon::clearCache();
|
||
|
|
||
|
set_transient('wpacu_import_done', $importedList, 30);
|
||
|
|
||
|
wp_redirect(admin_url('admin.php?page=wpassetcleanup_tools&wpacu_for=import_export&wpacu_import_done=1&wpacu_time=' . time()));
|
||
|
exit();
|
||
|
}
|
||
|
}
|
||
|
/***** END IMPORT ******/
|
||
|
}
|