219 lines
6.3 KiB
PHP
219 lines
6.3 KiB
PHP
<?php
|
|
namespace WpAssetCleanUp;
|
|
|
|
/**
|
|
*
|
|
* Class BulkChanges
|
|
* @package WpAssetCleanUp
|
|
*/
|
|
class BulkChanges
|
|
{
|
|
/**
|
|
* @var string
|
|
*/
|
|
public $wpacuFor = 'everywhere';
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
public $wpacuPostType = 'post';
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
public $data = array();
|
|
|
|
/**
|
|
* Includes bulk unload rules, RegEx unloads & load exceptions
|
|
*
|
|
* BulkChanges constructor.
|
|
*/
|
|
public function __construct()
|
|
{
|
|
$this->wpacuFor = sanitize_text_field(Misc::getVar('request', 'wpacu_for', $this->wpacuFor));
|
|
$this->wpacuPostType = sanitize_text_field(Misc::getVar('request', 'wpacu_post_type', $this->wpacuPostType));
|
|
|
|
if (Misc::getVar('request', 'wpacu_update') == 1) {
|
|
$this->update();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getCount()
|
|
{
|
|
$values = array();
|
|
|
|
if ($this->wpacuFor === 'everywhere') {
|
|
$values = Main::instance()->getGlobalUnload();
|
|
} elseif ($this->wpacuFor === 'post_types') {
|
|
$values = Main::instance()->getBulkUnload('post_type', $this->wpacuPostType);
|
|
}
|
|
|
|
if (isset($values['styles']) && ! empty($values['styles'])) {
|
|
sort($values['styles']);
|
|
}
|
|
|
|
if (isset($values['scripts']) && ! empty($values['scripts'])) {
|
|
sort($values['scripts']);
|
|
}
|
|
|
|
return $values;
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public function pageBulkUnloads()
|
|
{
|
|
$this->data['assets_info'] = Main::getHandlesInfo();
|
|
$this->data['for'] = $this->wpacuFor;
|
|
|
|
if ($this->wpacuFor === 'post_types') {
|
|
$this->data['post_type'] = $this->wpacuPostType;
|
|
|
|
// Get All Post Types
|
|
$postTypes = get_post_types(array('public' => true));
|
|
$this->data['post_types_list'] = Misc::filterPostTypesList( $postTypes );
|
|
}
|
|
|
|
$this->data['values'] = $this->getCount();
|
|
|
|
$this->data['nonce_name'] = Update::NONCE_FIELD_NAME;
|
|
$this->data['nonce_action'] = Update::NONCE_ACTION_NAME;
|
|
|
|
$this->data['plugin_settings'] = Main::instance()->settings;
|
|
|
|
Main::instance()->parseTemplate('admin-page-settings-bulk-changes', $this->data, true);
|
|
}
|
|
|
|
/**
|
|
* @param $postTypes
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public function filterPostTypesList($postTypes)
|
|
{
|
|
foreach ($postTypes as $postTypeKey => $postTypeValue) {
|
|
// Exclude irrelevant custom post types
|
|
if (in_array($postTypeKey, MetaBoxes::$noMetaBoxesForPostTypes)) {
|
|
unset($postTypes[$postTypeKey]);
|
|
}
|
|
|
|
// Polish existing values
|
|
if ($postTypeKey === 'product' && Misc::isPluginActive('woocommerce/woocommerce.php')) {
|
|
$postTypes[$postTypeKey] = 'product ⟶ WooCommerce';
|
|
}
|
|
}
|
|
|
|
return $postTypes;
|
|
}
|
|
|
|
/**
|
|
* @param $postTypesList
|
|
* @param $currentPostType
|
|
*/
|
|
public static function buildPostTypesListDd($postTypesList, $currentPostType)
|
|
{
|
|
$ddList = array();
|
|
|
|
foreach ($postTypesList as $postTypeKey => $postTypeValue) {
|
|
if (in_array($postTypeKey, array('post', 'page', 'attachment'))) {
|
|
$ddList['WordPress (default)'][$postTypeKey] = $postTypeValue;
|
|
} else {
|
|
$ddList['Custom Post Types (Singular pages)'][$postTypeKey] = $postTypeValue;
|
|
|
|
$list = Main::instance()->getBulkUnload('custom_post_type_archive_'.$postTypeKey);
|
|
|
|
// At least one of the buckets ('styles' or 'scripts') needs to contain something
|
|
if (! empty($list['styles']) || ! empty($list['scripts'])) {
|
|
$ddList['Custom Post Types (Archive pages)'][ 'wpacu_custom_post_type_archive_'.$postTypeKey ] = $postTypeValue. ' (archive page)';
|
|
}
|
|
}
|
|
}
|
|
?>
|
|
<select id="wpacu_post_type_select" name="wpacu_post_type">
|
|
<?php
|
|
foreach ($ddList as $groupLabel => $groupPostTypesList) {
|
|
echo '<optgroup label="'.$groupLabel.'">';
|
|
|
|
foreach ($groupPostTypesList as $postTypeKey => $postTypeValue) {
|
|
?>
|
|
<option <?php if ($currentPostType === $postTypeKey) { echo 'selected="selected"'; } ?> value="<?php echo esc_attr($postTypeKey); ?>"><?php echo esc_html($postTypeValue); ?></option>
|
|
<?php
|
|
}
|
|
|
|
echo '</optgroup>';
|
|
}
|
|
?>
|
|
</select>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public function update()
|
|
{
|
|
if ( ! Misc::getVar('post', 'wpacu_bulk_unloads_update_nonce') ) {
|
|
return;
|
|
}
|
|
|
|
check_admin_referer('wpacu_bulk_unloads_update', 'wpacu_bulk_unloads_update_nonce');
|
|
|
|
$wpacuUpdate = new Update;
|
|
|
|
if ($this->wpacuFor === 'everywhere') {
|
|
$removed = $wpacuUpdate->removeEverywhereUnloads(array(), array(), 'post');
|
|
|
|
if ($removed) {
|
|
add_action('wpacu_admin_notices', array($this, 'noticeGlobalsRemoved'));
|
|
}
|
|
}
|
|
|
|
if ($this->wpacuFor === 'post_types') {
|
|
$removed = $wpacuUpdate->removeBulkUnloads($this->wpacuPostType);
|
|
|
|
if ($removed) {
|
|
add_action('wpacu_admin_notices', array($this, 'noticePostTypesRemoved'));
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public function noticeGlobalsRemoved()
|
|
{
|
|
?>
|
|
<div class="updated notice wpacu-notice is-dismissible">
|
|
<p><span class="dashicons dashicons-yes"></span>
|
|
<?php
|
|
_e('The selected styles/scripts were removed from the global unload list and they will now load in the pages/posts, unless you have other rules that would prevent them from loading.', 'wp-asset-clean-up');
|
|
?>
|
|
</p>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public function noticePostTypesRemoved()
|
|
{
|
|
?>
|
|
<div class="updated notice wpacu-notice is-dismissible">
|
|
<p><span class="dashicons dashicons-yes"></span>
|
|
<?php
|
|
echo sprintf(
|
|
__('The selected styles/scripts were removed from the unload list for <strong><u>%s</u></strong> post type and they will now load in the pages/posts, unless you have other rules that would prevent them from loading.', 'wp-asset-clean-up'),
|
|
$this->wpacuPostType
|
|
);
|
|
?>
|
|
</p>
|
|
</div>
|
|
<?php
|
|
}
|
|
}
|