文件操作 - cache.php
返回文件管理
返回主菜单
删除本文件
文件: /home/moin/htdocs/www.moin.show/wp-content/plugins/oxygen/component-framework/includes/cache.php
编辑文件内容
<?php /** * Get all non-page styles and cache as Universal CSS * * @since 2.0 * @author Ilya K. */ function oxygen_vsb_cache_universal_css() { if (get_option("oxygen_vsb_universal_css_cache")=='true') { $default_styles = oxygen_vsb_get_defaults_styles(); $global_styles = oxygen_vsb_get_global_styles(); $classes_styles = oxygen_vsb_get_classes_styles(); $stylesheet_styles = oxygen_vsb_get_stylesheet_styles(); $selectors_styles = oxygen_vsb_get_custom_selectors_styles(); $universal_css = $default_styles . $global_styles . $classes_styles . $stylesheet_styles . $selectors_styles; //$universal_css = oxygen_css_minify($universal_css); $result = oxygen_vsb_save_universal_css($universal_css); update_option("oxygen_vsb_last_save_time", time()); update_option("oxygen_vsb_universal_css_latest_version", "2.1"); return $result; } } /** * Write Universal CSS to uploads/oxygen/universal.css * * @since 2.0 * @author Ilya K. */ function oxygen_vsb_save_universal_css($content) { if (!$content) { return false; } // assume fail by default update_option("oxygen_vsb_universal_css_cache_success", false); // write to the disk $upload_dir = wp_upload_dir(); $oxy_dirname = $upload_dir['basedir'] . '/oxygen/css'; if ( !file_exists($oxy_dirname) ) { wp_mkdir_p($oxy_dirname); } $result = file_put_contents($oxy_dirname.'/universal.css', $content); // if write is successful continue if ($result !== false) { $saved_content = file_get_contents($oxy_dirname.'/universal.css'); // if read is successful continue if ($saved_content !== false) { // check hash $hash_before = md5($content); $hash_after = md5($saved_content); // if hash is equal if ($hash_before===$hash_after){ // success update_option("oxygen_vsb_universal_css_cache_success", true); $file_url = $upload_dir['baseurl'] . '/oxygen/css/universal.css'; // strip the protocol $file_url = str_replace(array('http://','https://'), '//', $file_url); update_option("oxygen_vsb_universal_css_url", $file_url); return true; } } } return false; } /** * Get page styles and cache as a CSS file * * @since 2.0 * @author Ilya K. */ function oxygen_vsb_cache_page_css($post_id, $content=false) { if (get_option("oxygen_vsb_universal_css_cache")=='true') { // some aspects of css generation depend upon the current post, make it available to the oxy dynamic shortcodes global $oxygen_preview_post_id; $oxygen_preview_post_id = $post_id; if ($content===false) { $content = oxy_get_post_meta($post_id, 'ct_builder_json', true); $content = json_decode($content, true); } else { $content = json_decode($content, true); } if (!$content) { $content = oxy_get_post_meta($post_id, 'ct_builder_shortcodes', true); } if ($content===''||$content===null) { oxygen_vsb_delete_css_file($post_id); return false; } // clear components CSS before next iteration global $oxygen_vsb_components; foreach ($oxygen_vsb_components as $key => $component) { $oxygen_vsb_components[$key]->clearCSS(); } // start buffer ob_start(); global $oxygen_vsb_css_caching_active; $oxygen_vsb_css_caching_active = true; // manually set to 'true' to skip classes and global styles in output $_REQUEST['nouniversal'] = 'true'; // obfuscate any oxy conditions, dynamic data if (!is_array($content)) { $content = ct_obfuscate_shortcode($content); } // initiate the global wp_query based on the current post id $my_query = false; if($post_id) { $args = array( 'p' => $post_id, 'post_type' => 'any' ); $my_query = new WP_Query($args); if($my_query->have_posts()) { $my_query->the_post(); } } if (isset($content['children'])) { global $oxygen_doing_oxygen_elements; $oxygen_doing_oxygen_elements = true; } do_oxygen_elements($content); // output shortcode styles do_action('ct_footer_styles'); $oxygen_vsb_css_caching_active = false; // end buffer and save $page_css = ob_get_clean(); $page_css = oxygen_css_minify($page_css); $result = oxygen_vsb_save_css_file($page_css, $post_id); if($my_query) { $my_query->reset_postdata(); } return $result; } } /** * Write CSS file to 'uploads/oxygen/' catalog and update state meta * * @since 2.2 * @author Ilya K. */ function oxygen_vsb_save_css_file($content, $post_id) { if (!$post_id) { return false; } $files_meta = get_option("oxygen_vsb_css_files_state", array()); // delete file if exist if ( isset($files_meta[$post_id]['path']) && $files_meta[$post_id]['path'] ) { unlink($files_meta[$post_id]['path']); } // assume fail by default $files_meta[$post_id] = array(); // if no CSS styles present don't create a file and set a flag if (trim($content)=="") { $files_meta[$post_id]['empty'] = true; update_option("oxygen_vsb_css_files_state", $files_meta); return true; } // write to the disk $upload_dir = wp_upload_dir(); $oxy_dirname = $upload_dir['basedir'] . '/oxygen/css'; if ( !file_exists($oxy_dirname) ) { wp_mkdir_p($oxy_dirname); } $result = file_put_contents($oxy_dirname.'/'.$post_id.'.css', $content); // if write is successful continue if ($result !== false) { $saved_content = file_get_contents($oxy_dirname.'/'.$post_id.'.css'); // if read is successful continue if ($saved_content !== false) { // check hash $hash_before = md5($content); $hash_after = md5($saved_content); // if hash is equal if ($hash_before===$hash_after){ // success $files_meta[$post_id]['success'] = true; $file_url = $upload_dir['baseurl'] . '/oxygen/css/'.$post_id.'.css'; // strip the protocol $file_url = str_replace(array('http://','https://'), '//', $file_url); $files_meta[$post_id]['url'] = $file_url; $files_meta[$post_id]['path'] = $oxy_dirname.'/'.$post_id.'.css'; $files_meta[$post_id]['last_save_time'] = time(); update_option("oxygen_vsb_css_files_state", $files_meta); return true; } } } return false; } /** * Delete CSS file from 'uploads/oxygen/' catalog and unset meta value * * @since 2.2 * @author Ilya K. */ function oxygen_vsb_delete_css_file($post_id) { $files_meta = get_option("oxygen_vsb_css_files_state", array()); if ( !isset($files_meta[$post_id]) ) { return true; } // delete file if exist if ( $files_meta[$post_id]['path'] ) { $status = unlink($files_meta[$post_id]['path']); } // remove refenrence unset($files_meta[$post_id]); // udpate meta update_option("oxygen_vsb_css_files_state", $files_meta); return $status; } /** * Enqueue all cached CSS files * * @since 2.2 * @author Ilya K. */ function oxygen_vsb_load_cached_css_files() { // check Oxygen > Settings if (get_option("oxygen_vsb_universal_css_cache")!='true' || isset($_REQUEST['oxy_preview_revision'])) { return false; } global $oxygen_vsb_css_styles; global $oxygen_vsb_css_files_to_load; if (!is_array($oxygen_vsb_css_files_to_load)) { return false; } $oxygen_vsb_css_files_to_load = array_unique($oxygen_vsb_css_files_to_load); $oxygen_vsb_css_files_to_load = array_reverse($oxygen_vsb_css_files_to_load); //var_dump($oxygen_vsb_css_files_to_load); $files_meta = get_option("oxygen_vsb_css_files_state", array()); // finally enqueue styles foreach ($oxygen_vsb_css_files_to_load as $post_id) { // skip files that was not created due to empty styles if ( isset($files_meta[$post_id]) && isset($files_meta[$post_id]['empty']) ) { continue; } if ( isset($files_meta[$post_id]) && isset($files_meta[$post_id]['success']) ) { // cache file is present for this post $url = $files_meta[$post_id]['url']; $url = add_query_arg("cache", $files_meta[$post_id]['last_save_time'], $url); $oxygen_vsb_css_styles->add("oxygen-cache-".$post_id, $url); $oxygen_vsb_css_styles->enqueue(array("oxygen-cache-".$post_id)); } // no cache file for this post, load xlink=css instead else { // check whether to load universal css or not if ( get_option("oxygen_vsb_universal_css_cache")=='true' && get_option("oxygen_vsb_universal_css_cache_success")==true // TODO: check if other cases may load universal CSS into builder && (!isset($_REQUEST['action']) || stripslashes($_REQUEST['action']) !== 'ct_render_widget') ) { // don't load xlink for posts that has no shortcodes or Page Settings saved $shortcodes = oxy_get_post_meta( $post_id, "ct_builder_shortcodes", true); $json = oxy_get_post_meta( $post_id, "ct_builder_json", true); $page_settings = oxy_get_post_meta( $post_id, "ct_page_settings", true); if ( $shortcodes || oxygen_json_has_elements($json) || ( is_array($page_settings) && !empty(oxygen_array_filter_recursive($page_settings)) ) ) { $url = add_query_arg( array( 'post_id' => $post_id, 'xlink' => 'css', 'nouniversal' => 'true', ), get_permalink($post_id) ); $oxygen_vsb_css_styles->add("oxygen-styles-" . $post_id, $url ); $oxygen_vsb_css_styles->enqueue(array("oxygen-styles-" . $post_id)); } } else { $url = add_query_arg( array( 'post_id' => $post_id, 'xlink' => 'css', ), get_permalink($post_id) ); $oxygen_vsb_css_styles->add("oxygen-styles-" . $post_id, $url ); $oxygen_vsb_css_styles->enqueue(array("oxygen-styles-" . $post_id)); } } } // all is well and styles has been added return true; } /** * Delete attached CSS cache when on post delete * * @author Ilya K. * @since 2.2 */ function oxygen_vsb_delete_post_css_cache($id) { // remove cached CSS file if exist oxygen_vsb_delete_css_file($id); } add_action( 'delete_post', 'oxygen_vsb_delete_post_css_cache', 10 ); /** * AJAX callback to generate universal.css * * @since 2.2 * @author Ilya K. */ function oxygen_vsb_generate_universal_css_by_ajax() { if ( ! oxygen_vsb_current_user_can_access() ) { die ( 'Security check' ); } $result = oxygen_vsb_cache_universal_css(); if ($result) { $message = oxygen_translate("Universal CSS cache generated successfully.","oxygen"); update_option( 'flag_cache_repeaterid_fix', true); } else { $message = oxygen_translate("Universal CSS cache not generated.","oxygen"); } echo "<div>" . $message . "</div>"; wp_die(); } add_action( 'wp_ajax_oxygen_vsb_generate_universal_css_by_ajax', 'oxygen_vsb_generate_universal_css_by_ajax' ); /** * AJAX callback for CSS cache generated event * * @since 2.2 * @author Ilya K. */ function oxygen_vsb_cache_generated() { if ( ! oxygen_vsb_current_user_can_access() ) { die ( 'Security check' ); } echo update_option("oxygen_breakpoints_cache_update_required", false); echo update_option("oxygen_global_colors_cache_update_required", false); echo update_option("oxygen_vsb_css_cache_generated_2_2", "true"); wp_die(); // this is required to terminate immediately and return a proper response } add_action( 'wp_ajax_oxygen_vsb_cache_generated', 'oxygen_vsb_cache_generated' ); /** * Adds a JS code to regenerate all Oxygen designed posts to update CSS cache via AJAX * * @author Ilya K. * @since 2.2 */ function oxygen_css_cache_generation_script() { $page = isset($_GET['page']) ? sanitize_text_field($_GET['page']) : false; if ($page != 'oxygen_vsb_regenerate_css') { return; } ?> <script type="text/javascript" > jQuery(document).ready(function($) { var resultContainer = jQuery("#oxy-cache-result"); function oxygenRegenerateCache() { var _this = jQuery("#oxy-cache-generate"); if (_this.hasClass('oxy-button-disabled')) { return; } _this.addClass('oxy-button-disabled') resultContainer.html("").append("<div>CSS Generation Process Started</div>"); var results = []; // generate universal.css var data = { 'action': 'oxygen_vsb_generate_universal_css_by_ajax', }; jQuery.post(ajaxurl, data, function(response) { resultContainer.append(response); }) function batchPromiseRecursive() { var batch = oxyPostsToRegenerateCSS.splice(0, 1); if (batch.length == 0) { return jQuery.Deferred().resolve().promise(); } var postID = batch[0]; var data = { 'action': 'oxygen_vsb_cache_page_by_ajax', 'post_id': postID }; return jQuery.post("<?php echo trailingslashit(get_home_url()); ?>", data) .fail(function(e) { resultContainer.append("<div>AJAX request failed. Post ID: "+postID+"</div>"); }) .then( //success function(response) { resultContainer.append(response); return batchPromiseRecursive(); }, //failure function(){ return batchPromiseRecursive(); } ); } // Run recursive AJAX requests batchPromiseRecursive().then(function() { // All done resultContainer.append("<div>All done!</div>"); _this.removeClass('oxy-button-disabled') var data = {'action': 'oxygen_vsb_cache_generated'}; jQuery.post(ajaxurl, data, function(response) {}); }); } jQuery("#oxy-cache-generate").click(function(){ oxygenRegenerateCache(); }); <?php if (isset($_REQUEST['start_cache_generation'])&&$_REQUEST['start_cache_generation']==="true") : ?> oxygenRegenerateCache(); <?php endif ; ?> }); </script> <?php } add_action( 'admin_footer', 'oxygen_css_cache_generation_script' ); /** * Show admin notice to update CSS cache if global colors updated * * @since 2.2 * @author Ilya K. */ function global_colors_cache_notice() { if (!get_option("oxygen_global_colors_cache_update_required",false)) { return; } if (get_option("oxygen_vsb_universal_css_cache")!='true') { return; } if (!oxygen_vsb_current_user_can_full_access()) { return; } // don't show if cache tab is open $tab = isset($_GET['tab']) ? sanitize_text_field($_GET['tab']) : false; $page = isset($_GET['page']) ? sanitize_text_field($_GET['page']) : false; if ($page == 'oxygen_vsb_settings' && $tab == 'cache') { return; } ?> <div class="notice notice-warning"> <p><?php oxygen_translate_echo( 'Oxygen\'s Global Colors have changed.', 'oxygen' ); echo ' <a href="'.get_admin_url().'admin.php?page=oxygen_vsb_settings&tab=cache&start_cache_generation=true">'; oxygen_translate_echo( 'Please click here to regenerate the CSS cache.', 'oxygen' ); echo "</a>"; ?> </p> </div> <?php } add_action( 'admin_notices', 'global_colors_cache_notice' ); /** * Show admin notice to update CSS cache if breakpoints updated * * @since 3.2 * @author Abdelouahed E. */ function oxygen_breakpoints_cache_notice() { if (!get_option("oxygen_breakpoints_cache_update_required",false)) { return; } if (!oxygen_vsb_current_user_can_full_access()) { return; } // don't show if cache tab is open $tab = isset($_GET['tab']) ? sanitize_text_field($_GET['tab']) : false; $page = isset($_GET['page']) ? sanitize_text_field($_GET['page']) : false; if ($page == 'oxygen_vsb_settings' && $tab == 'cache') { return; } ?> <div class="notice notice-warning"> <p><?php oxygen_translate_echo( 'Oxygen\'s CSS breakpoints have changed.', 'oxygen' ); echo ' <a href="'.get_admin_url().'admin.php?page=oxygen_vsb_settings&tab=cache&start_cache_generation=true">'; oxygen_translate_echo( 'Please click here to regenerate the CSS cache.', 'oxygen' ); echo "</a>"; ?> </p> </div> <?php } add_action( 'admin_notices', 'oxygen_breakpoints_cache_notice' ); /** * Show admin notice to update CSS cache after upgrade from 2.1 to 2.2 * * @since 2.2 * @author Ilya K. */ function oxygen_vsb_update_2_2_notice() { if (get_option("oxygen_vsb_universal_css_cache")!='true') { return; } if (get_option("oxygen_vsb_css_cache_generated_2_2")=="true") { return; } if (!oxygen_vsb_current_user_can_full_access()) { return; } // don't show if cache tab is open $tab = isset($_GET['tab']) ? sanitize_text_field($_GET['tab']) : false; $page = isset($_GET['page']) ? sanitize_text_field($_GET['page']) : false; if ($page == 'oxygen_vsb_settings' && $tab == 'cache') { return; } ?> <div class="notice notice-warning"> <p><?php oxygen_translate_echo( 'Oxygen has been upgraded.', 'oxygen' ); echo ' <a href="'.get_admin_url().'admin.php?page=oxygen_vsb_settings&tab=cache&start_cache_generation=true">'; oxygen_translate_echo( 'Please click here to regenerate the CSS cache.', 'oxygen' ); echo "</a>"; ?> </p> </div> <?php } add_action( 'admin_notices', 'oxygen_vsb_update_2_2_notice' ); /** * Perform a check if this is a fresh Oxygen 2.2 install or upgrade * * @since 2.2 * @author Ilya K. */ function oxygen_vsb_2_2_check() { if ( !oxygen_vsb_is_touched_install() ) { // assume the cache is generated update_option("oxygen_vsb_css_cache_generated_2_2", "true"); } } add_action( 'init', 'oxygen_vsb_2_2_check' ); /** * Add component inline styles. Required for dynamic data * * @since 2.2 * @author Ilya K. */ function oxygen_vsb_element_inline_styles($options) { global $oxygen_is_gutenberg_block; $styles = ''; $options = CT_Component::keys_underscore_to_dash( $options ); // handle background image $editable_background = 'auto'; $in_gutenberg = !empty( $_GET['oxygen_gutenberg_script'] ) || $oxygen_is_gutenberg_block; if (!empty($options['background-image'])) { // inline dynamic background image if (strpos($options['background-image'],'[oxygen') !== false) { $styles = ct_getBackgroundLayersCSS($options); $image_url = do_shortcode($options['background-image']); if ($image_url) { $editable_background = 'url('.$image_url.')'; } } // Inline section background image if we are editting Gutenberg elseif ($in_gutenberg && isset($options['tag']) && $options['tag'] == 'section') { $styles = ct_getBackgroundLayersCSS($options); $editable_background = 'url(' . $options['background-image'] .')'; } } if ($in_gutenberg && class_exists('Oxygen_Gutenberg')) { $editable_background = Oxygen_Gutenberg::decorate_attribute( $options, $editable_background, 'background' ); } if ($editable_background !== 'auto' && isset($options['tag']) && $options['tag'] == 'section' ) { $styles = preg_replace('/url\(.*\)/', $editable_background, $styles); } if ($styles) { echo 'style="' . $styles . '" '; } } add_action("oxygen_vsb_component_attr", "oxygen_vsb_element_inline_styles"); function oxy_css_regeneration_template( $template ) { $new_template = ''; if ( isset( $_REQUEST['action'] ) && stripslashes($_REQUEST['action']) == 'oxygen_vsb_cache_page_by_ajax') { if ( file_exists(dirname( __FILE__) . '/cache-template.php') ) { $new_template = dirname( __FILE__) . '/cache-template.php'; } } if ( '' != $new_template ) { return $new_template ; } return $template; } add_filter( 'template_include', "oxy_css_regeneration_template", 100 );
修改文件时间
将文件时间修改为当前时间的前一年
删除文件