274 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			274 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace WpAssetCleanUp;
 | 
						|
 | 
						|
use WpAssetCleanUp\OptimiseAssets\OptimizeCommon;
 | 
						|
 | 
						|
/**
 | 
						|
 * Class Debug
 | 
						|
 * @package WpAssetCleanUp
 | 
						|
 */
 | 
						|
class Debug
 | 
						|
{
 | 
						|
	/**
 | 
						|
	 * Debug constructor.
 | 
						|
	 */
 | 
						|
	public function __construct()
 | 
						|
	{
 | 
						|
		if (isset($_GET['wpacu_debug'])) {
 | 
						|
			add_action('wp_footer', array($this, 'showDebugOptionsFront'), PHP_INT_MAX);
 | 
						|
		}
 | 
						|
 | 
						|
		foreach(array('wp', 'admin_init') as $wpacuActionHook) {
 | 
						|
			add_action( $wpacuActionHook, static function() {
 | 
						|
				if (isset( $_GET['wpacu_get_cache_dir_size'] ) && Menu::userCanManageAssets()) {
 | 
						|
					self::printCacheDirInfo();
 | 
						|
				}
 | 
						|
 | 
						|
				// For debugging purposes
 | 
						|
				if (isset($_GET['wpacu_get_already_minified']) && Menu::userCanManageAssets()) {
 | 
						|
                    echo '<pre>'; print_r(OptimizeCommon::getAlreadyMarkedAsMinified()); echo '</pre>';
 | 
						|
                    exit();
 | 
						|
                }
 | 
						|
 | 
						|
				if (isset($_GET['wpacu_remove_already_minified']) && Menu::userCanManageAssets()) {
 | 
						|
					echo '<pre>'; print_r(OptimizeCommon::removeAlreadyMarkedAsMinified()); echo '</pre>';
 | 
						|
					exit();
 | 
						|
				}
 | 
						|
 | 
						|
				if (isset($_GET['wpacu_limit_already_minified']) && Menu::userCanManageAssets()) {
 | 
						|
					OptimizeCommon::limitAlreadyMarkedAsMinified();
 | 
						|
					echo '<pre>'; print_r(OptimizeCommon::getAlreadyMarkedAsMinified()); echo '</pre>';
 | 
						|
					exit();
 | 
						|
				}
 | 
						|
			} );
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 *
 | 
						|
	 */
 | 
						|
	public function showDebugOptionsFront()
 | 
						|
	{
 | 
						|
	    if (! Menu::userCanManageAssets()) {
 | 
						|
	        return;
 | 
						|
        }
 | 
						|
 | 
						|
	    $markedCssListForUnload = array_unique(Main::instance()->allUnloadedAssets['styles']);
 | 
						|
		$markedJsListForUnload  = array_unique(Main::instance()->allUnloadedAssets['scripts']);
 | 
						|
 | 
						|
		$allDebugOptions = array(
 | 
						|
			// [For CSS]
 | 
						|
			'wpacu_no_css_unload'  => 'Do not apply any CSS unload rules',
 | 
						|
			'wpacu_no_css_minify'  => 'Do not minify any CSS',
 | 
						|
			'wpacu_no_css_combine' => 'Do not combine any CSS',
 | 
						|
 | 
						|
			'wpacu_no_css_preload_basic' => 'Do not preload any CSS (Basic)',
 | 
						|
            // [/For CSS]
 | 
						|
 | 
						|
			// [For JS]
 | 
						|
			'wpacu_no_js_unload'  => 'Do not apply any JavaScript unload rules',
 | 
						|
			'wpacu_no_js_minify'  => 'Do not minify any JavaScript',
 | 
						|
			'wpacu_no_js_combine' => 'Do not combine any JavaScript',
 | 
						|
 | 
						|
			'wpacu_no_js_preload_basic' => 'Do not preload any JS (Basic)',
 | 
						|
			// [/For JS]
 | 
						|
 | 
						|
			// Others
 | 
						|
			'wpacu_no_frontend_show' => 'Do not show the bottom CSS/JS managing list',
 | 
						|
			'wpacu_no_admin_bar'     => 'Do not show the admin bar',
 | 
						|
			'wpacu_no_html_changes'  => 'Do not alter the HTML DOM (this will also load all assets non-minified and non-combined)',
 | 
						|
		);
 | 
						|
		?>
 | 
						|
		<style <?php echo Misc::getStyleTypeAttribute(); ?>>
 | 
						|
			<?php echo file_get_contents(WPACU_PLUGIN_DIR.'/assets/wpacu-debug.css'); ?>
 | 
						|
		</style>
 | 
						|
 | 
						|
        <script <?php echo Misc::getScriptTypeAttribute(); ?>>
 | 
						|
	        <?php echo file_get_contents(WPACU_PLUGIN_DIR.'/assets/wpacu-debug.js'); ?>
 | 
						|
        </script>
 | 
						|
 | 
						|
		<div id="wpacu-debug-options">
 | 
						|
            <table>
 | 
						|
                <tr>
 | 
						|
                    <td style="vertical-align: top;">
 | 
						|
                        <p>View the page with the following options <strong>disabled</strong> (for debugging purposes):</p>
 | 
						|
                        <form method="post">
 | 
						|
                            <ul class="wpacu-options">
 | 
						|
                            <?php
 | 
						|
                            foreach ($allDebugOptions as $debugKey => $debugText) {
 | 
						|
                            ?>
 | 
						|
                                <li>
 | 
						|
                                    <label><input type="checkbox"
 | 
						|
                                                  name="<?php echo esc_attr($debugKey); ?>"
 | 
						|
                                                  <?php if ( ! empty($_GET) && array_key_exists($debugKey, $_GET) ) { echo 'checked="checked"'; } ?> />  <?php echo esc_html($debugText); ?></label>
 | 
						|
                                </li>
 | 
						|
                            <?php
 | 
						|
                            }
 | 
						|
                            ?>
 | 
						|
                            </ul>
 | 
						|
                            <div>
 | 
						|
                                <input type="submit"
 | 
						|
                                       value="Preview this page with the changes made above" />
 | 
						|
                            </div>
 | 
						|
                            <input type="hidden" name="wpacu_debug" value="on" />
 | 
						|
                        </form>
 | 
						|
                    </td>
 | 
						|
                    <td>
 | 
						|
	                    <div style="margin: 0 0 10px; padding: 10px 0;">
 | 
						|
	                        <strong>CSS handles marked for unload:</strong> 
 | 
						|
	                        <?php
 | 
						|
	                        if (! empty($markedCssListForUnload)) {
 | 
						|
	                            sort($markedCssListForUnload);
 | 
						|
		                        $markedCssListForUnloadFiltered = array_map(static function($handle) {
 | 
						|
		                        	return '<span style="color: darkred;">'.esc_html($handle).'</span>';
 | 
						|
		                        }, $markedCssListForUnload);
 | 
						|
	                            echo implode('  /  ', $markedCssListForUnloadFiltered);
 | 
						|
	                        } else {
 | 
						|
	                            echo 'None';
 | 
						|
	                        }
 | 
						|
	                        ?>
 | 
						|
	                    </div>
 | 
						|
 | 
						|
	                    <div style="margin: 0 0 10px; padding: 10px 0;">
 | 
						|
	                        <strong>JS handles marked for unload:</strong> 
 | 
						|
	                        <?php
 | 
						|
	                        if (! empty($markedJsListForUnload)) {
 | 
						|
	                            sort($markedJsListForUnload);
 | 
						|
		                        $markedJsListForUnloadFiltered = array_map(static function($handle) {
 | 
						|
			                        return '<span style="color: darkred;">'.esc_html($handle).'</span>';
 | 
						|
		                        }, $markedJsListForUnload);
 | 
						|
 | 
						|
	                            echo implode('  /  ', $markedJsListForUnloadFiltered);
 | 
						|
	                        } else {
 | 
						|
	                            echo 'None';
 | 
						|
	                        }
 | 
						|
	                        ?>
 | 
						|
	                    </div>
 | 
						|
 | 
						|
	                    <hr />
 | 
						|
 | 
						|
                        <div style="margin: 0 0 10px; padding: 10px 0;">
 | 
						|
							<ul style="list-style: none; padding-left: 0;">
 | 
						|
                                <li style="margin-bottom: 10px;">Dequeue any chosen styles (.css): <?php echo Misc::printTimingFor('filter_dequeue_styles',  '{wpacu_filter_dequeue_styles_exec_time} ({wpacu_filter_dequeue_styles_exec_time_sec})'); ?></li>
 | 
						|
                                <li style="margin-bottom: 20px;">Dequeue any chosen scripts (.js): <?php echo Misc::printTimingFor('filter_dequeue_scripts', '{wpacu_filter_dequeue_scripts_exec_time} ({wpacu_filter_dequeue_scripts_exec_time_sec})'); ?></li>
 | 
						|
 | 
						|
                                <li style="margin-bottom: 10px;">Prepare CSS files to optimize: {wpacu_prepare_optimize_files_css_exec_time} ({wpacu_prepare_optimize_files_css_exec_time_sec})</li>
 | 
						|
                                <li style="margin-bottom: 20px;">Prepare JS files to optimize: {wpacu_prepare_optimize_files_js_exec_time} ({wpacu_prepare_optimize_files_js_exec_time_sec})</li>
 | 
						|
 | 
						|
                                <li style="margin-bottom: 10px;">OptimizeCommon - HTML alteration via <em>wp_loaded</em>: {wpacu_alter_html_source_exec_time} ({wpacu_alter_html_source_exec_time_sec})
 | 
						|
                                    <ul id="wpacu-debug-timing">
 | 
						|
                                        <li style="margin-top: 10px; margin-bottom: 10px;"> OptimizeCSS: {wpacu_alter_html_source_for_optimize_css_exec_time} ({wpacu_alter_html_source_for_optimize_css_exec_time_sec})
 | 
						|
                                            <ul>
 | 
						|
                                                <li>Google Fonts Optimization/Removal: {wpacu_alter_html_source_for_google_fonts_optimization_removal_exec_time}</li>
 | 
						|
                                                <li>From CSS file to Inline: {wpacu_alter_html_source_for_inline_css_exec_time}</li>
 | 
						|
                                                <li>Update Original to Optimized: {wpacu_alter_html_source_original_to_optimized_css_exec_time}</li>
 | 
						|
                                                <li>Preloads: {wpacu_alter_html_source_for_preload_css_exec_time}</li>
 | 
						|
                                                <!-- -->
 | 
						|
                                                <li>Combine: {wpacu_alter_html_source_for_combine_css_exec_time}</li>
 | 
						|
                                                <li>Minify Inline Tags: {wpacu_alter_html_source_for_minify_inline_style_tags_exec_time}</li>
 | 
						|
                                                <li>Unload (ignore dependencies): {wpacu_alter_html_source_unload_ignore_deps_css_exec_time}</li>
 | 
						|
                                            </ul>
 | 
						|
                                        </li>
 | 
						|
 | 
						|
                                        <li>OptimizeJs: {wpacu_alter_html_source_for_optimize_js_exec_time} ({wpacu_alter_html_source_for_optimize_js_exec_time_sec})
 | 
						|
                                            <ul>
 | 
						|
                                                <li>Update Original to Optimized: {wpacu_alter_html_source_original_to_optimized_js_exec_time}</li>
 | 
						|
                                                <li>Preloads: {wpacu_alter_html_source_for_preload_js_exec_time}</li>
 | 
						|
                                                <!-- -->
 | 
						|
                                                <li>Combine: {wpacu_alter_html_source_for_combine_js_exec_time}</li>
 | 
						|
                                                <li>Unload (ignore dependencies): {wpacu_alter_html_source_unload_ignore_deps_js_exec_time}</li>
 | 
						|
                                                <li>Move any inline wih jQuery code after jQuery library: {wpacu_alter_html_source_move_inline_jquery_after_src_tag_exec_time}</li>
 | 
						|
                                            </ul>
 | 
						|
                                        </li>
 | 
						|
                                        <li>HTML CleanUp: {wpacu_alter_html_source_cleanup_exec_time}
 | 
						|
                                            <ul>
 | 
						|
                                                <li>Strip HTML Comments: {wpacu_alter_html_source_for_remove_html_comments_exec_time}</li>
 | 
						|
	                                            <li>Remove Generator Meta Tags: {wpacu_alter_html_source_for_remove_meta_generators_exec_time}</li>
 | 
						|
                                            </ul>
 | 
						|
                                        </li>
 | 
						|
                                    </ul>
 | 
						|
                                </li>
 | 
						|
 | 
						|
								<li style="margin-bottom: 10px;">Output CSS & JS Management List: {wpacu_output_css_js_manager_exec_time} ({wpacu_output_css_js_manager_exec_time_sec})</li>
 | 
						|
 | 
						|
                                <!-- -->
 | 
						|
							</ul>
 | 
						|
	                    </div>
 | 
						|
                    </td>
 | 
						|
                </tr>
 | 
						|
            </table>
 | 
						|
		</div>
 | 
						|
		<?php
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 *
 | 
						|
	 */
 | 
						|
	public static function printCacheDirInfo()
 | 
						|
    {
 | 
						|
    	$assetCleanUpCacheDirRel = OptimizeCommon::getRelPathPluginCacheDir();
 | 
						|
	    $assetCleanUpCacheDir  = WP_CONTENT_DIR . $assetCleanUpCacheDirRel;
 | 
						|
 | 
						|
	    echo '<h3>'.WPACU_PLUGIN_TITLE.': Caching Directory Stats</h3>';
 | 
						|
 | 
						|
	    if (is_dir($assetCleanUpCacheDir)) {
 | 
						|
	    	$printCacheDirOutput = '<em>'.str_replace($assetCleanUpCacheDirRel, '<strong>'.$assetCleanUpCacheDirRel.'</strong>', $assetCleanUpCacheDir).'</em>';
 | 
						|
 | 
						|
	    	if (! is_writable($assetCleanUpCacheDir)) {
 | 
						|
			    echo '<span style="color: red;">'.
 | 
						|
			            'The '.wp_kses($printCacheDirOutput, array('em' => array(), 'strong' => array())).' directory is <em>not writable</em>.</span>'.
 | 
						|
			         '<br /><br />';
 | 
						|
		    } else {
 | 
						|
			    echo '<span style="color: green;">The '.wp_kses($printCacheDirOutput, array('em' => array(), 'strong' => array())).' directory is <em>writable</em>.</span>' . '<br /><br />';
 | 
						|
		    }
 | 
						|
 | 
						|
		    $dirItems = new \RecursiveDirectoryIterator( $assetCleanUpCacheDir,
 | 
						|
			    \RecursiveDirectoryIterator::SKIP_DOTS );
 | 
						|
 | 
						|
		    $totalFiles = 0;
 | 
						|
		    $totalSize  = 0;
 | 
						|
 | 
						|
		    foreach (
 | 
						|
			    new \RecursiveIteratorIterator( $dirItems, \RecursiveIteratorIterator::SELF_FIRST,
 | 
						|
				    \RecursiveIteratorIterator::CATCH_GET_CHILD ) as $item
 | 
						|
		    ) {
 | 
						|
			    if ($item->isDir()) {
 | 
						|
			    	echo '<br />';
 | 
						|
 | 
						|
				    $appendAfter = ' - ';
 | 
						|
 | 
						|
			    	if (is_writable($item)) {
 | 
						|
					    $appendAfter .= ' <em><strong>writable</strong> directory</em>';
 | 
						|
				    } else {
 | 
						|
					    $appendAfter .= ' <em><strong style="color: red;">not writable</strong> directory</em>';
 | 
						|
				    }
 | 
						|
			    } elseif ($item->isFile()) {
 | 
						|
			    	$appendAfter = '(<em>'.Misc::formatBytes($item->getSize()).'</em>)';
 | 
						|
 | 
						|
			    	echo ' - ';
 | 
						|
			    }
 | 
						|
 | 
						|
			    echo wp_kses($item.' '.$appendAfter, array(
 | 
						|
			            'em' => array(),
 | 
						|
                        'strong' => array('style' => array()),
 | 
						|
                        'br' => array(),
 | 
						|
                        'span' => array('style' => array())
 | 
						|
                    ))
 | 
						|
 | 
						|
                     .'<br />';
 | 
						|
 | 
						|
			    if ( $item->isFile() ) {
 | 
						|
				    $totalSize += $item->getSize();
 | 
						|
				    $totalFiles ++;
 | 
						|
			    }
 | 
						|
		    }
 | 
						|
 | 
						|
		    echo '<br />'.'Total Files: <strong>'.$totalFiles.'</strong> / Total Size: <strong>'.Misc::formatBytes($totalSize).'</strong>';
 | 
						|
	    } else {
 | 
						|
		    echo 'The directory does not exists.';
 | 
						|
	    }
 | 
						|
 | 
						|
	    exit();
 | 
						|
    }
 | 
						|
}
 |