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();
 | |
|     }
 | |
| }
 |