function wm_save_skin($value = array(), $old_value = array())
 {
     //Requirements check
     if (empty($value) && !is_array($value)) {
         return $value;
     }
     //Helper variables
     $skin_new = $skin_load = '';
     $wp_upload_dir = wp_upload_dir();
     $theme_skin_dir = apply_filters('wmhook_wm_save_skin_theme_skin_dir', trailingslashit($wp_upload_dir['basedir']) . 'wmtheme-' . WM_THEME_SHORTNAME . '/skins');
     //Preparing output
     //Set a new skin file name
     //New skin
     if (isset($value[WM_THEME_SETTINGS_PREFIX . 'skin-new'])) {
         $skin_new = trim(sanitize_title($value[WM_THEME_SETTINGS_PREFIX . 'skin-new']));
         unset($value[WM_THEME_SETTINGS_PREFIX . 'skin-new']);
     }
     //Load skin
     if (isset($value[WM_THEME_SETTINGS_PREFIX . 'skin-load'])) {
         $skin_load = trim($value[WM_THEME_SETTINGS_PREFIX . 'skin-load']);
         if ($pos = strpos($skin_load, trailingslashit(WM_SETUP_DIR) . 'skins')) {
             $skin_load = substr($skin_load, $pos, -4);
             if (is_child_theme()) {
                 $skin_load = trailingslashit(get_stylesheet_directory()) . $skin_load;
             } else {
                 $skin_load = trailingslashit(get_template_directory()) . $skin_load;
             }
             $skin_load .= 'json';
         }
         unset($value[WM_THEME_SETTINGS_PREFIX . 'skin-load']);
     }
     //Create a new skin
     if ($skin_new) {
         //Create the theme skins folder
         if (!wma_create_folder($theme_skin_dir)) {
             set_transient('wmamp-admin-notice', array("<strong>ERROR: Wasn't able to create a theme skins folder! Contact the theme support.</strong>", 'error', 'switch_themes', 2), 60 * 60 * 48);
             delete_option(WM_THEME_SETTINGS_PREFIX . WM_THEME_SHORTNAME . '-skins');
         }
         //Write the skin JSON file
         $json_path = apply_filters('wmhook_wm_save_skin_json_path', trailingslashit($theme_skin_dir) . $skin_new . '.json');
         $value = apply_filters('wmhook_wm_save_skin_output', $value);
         if (wma_write_local_file($json_path, json_encode($value))) {
             update_option(WM_THEME_SETTINGS_PREFIX . WM_THEME_SHORTNAME . '-skins', array_unique(array(WM_SKINS, WM_SKINS_CHILD, $theme_skin_dir)));
         } else {
             delete_option(WM_THEME_SETTINGS_PREFIX . WM_THEME_SHORTNAME . '-skins');
         }
         //Run additional actions
         do_action('wmhook_save_skin', $skin_new, $value, $old_value);
         //Load a selected skin
     } elseif ($skin_load && file_exists($skin_load)) {
         //Get the skin slug
         $skin_slug = str_replace(array('.json', WM_SKINS, WM_SKINS_CHILD, $theme_skin_dir), '', $skin_load);
         //We don't need to write to the file, so just open for reading.
         $skin_load = wma_read_local_file($skin_load);
         $replacements = (array) apply_filters('wmhook_generate_css_replacements', array());
         $skin_load = strtr($skin_load, $replacements);
         //Decoding new imported skin JSON string and converting object to array
         if (!empty($skin_load)) {
             $value = json_decode(trim($skin_load), true);
             update_option(WM_THEME_SETTINGS_PREFIX . WM_THEME_SHORTNAME . '-skin-used', $skin_slug);
         }
         //Run additional actions
         do_action('wmhook_load_skin', $skin_load, $value, $old_value);
     }
     //Output
     return $value;
 }
Beispiel #2
0
 function wm_generate_main_css($args = array())
 {
     //Requirements check
     if (!function_exists('wma_amplifier')) {
         return false;
     }
     //Helper viariables
     $args = wp_parse_args($args, apply_filters('wmhook_wm_generate_main_css_args', array('gzip' => false, 'message' => __("<big>The main theme CSS stylesheet was regenerated.<br /><strong>Please refresh your web browser's and server's cache</strong> <em>(if you are using a website server caching solution)</em>.</big>", 'wm_domain'), 'message_after' => '', 'message_before' => '', 'type' => '')));
     $output = $output_min = '';
     if (!$args['gzip']) {
         $args['gzip'] = wm_option('general-gzip') || wm_option('skin-gzip');
     }
     $args['gzip'] = apply_filters('wmhook_wm_generate_main_css_gzip', $args['gzip'], $args);
     $args['type'] = trim($args['type']);
     //Preparing output
     //Get the file content with output buffering
     if ($args['gzip']) {
         //GZIP enabled
         ob_start('ob_gzhandler');
     } else {
         //no GZIP
         ob_start();
     }
     //Get the file from child theme if exists
     $css_dir_child = get_stylesheet_directory() . '/assets/css/';
     $css_generator_file = '_generate' . $args['type'] . '-css.php';
     if (file_exists($css_dir_child . $css_generator_file)) {
         $css_generator_file_check = $css_dir_child . $css_generator_file;
     } else {
         $css_generator_file_check = get_template_directory() . '/assets/css/' . $css_generator_file;
     }
     if (file_exists($css_generator_file_check)) {
         locate_template('assets/css/' . $css_generator_file, true);
     }
     $output = ob_get_clean();
     if (!$output) {
         return false;
     }
     //Minify output if set
     $output_min = apply_filters('wmhook_wm_generate_main_css_output_min', $output, $args);
     //Output
     //Create the theme CSS folder
     $wp_upload_dir = wp_upload_dir();
     $theme_css_url = trailingslashit($wp_upload_dir['baseurl']) . 'wmtheme-' . WM_THEME_SHORTNAME;
     $theme_css_dir = trailingslashit($wp_upload_dir['basedir']) . 'wmtheme-' . WM_THEME_SHORTNAME;
     if (!wma_create_folder($theme_css_dir)) {
         set_transient('wmamp-admin-notice', array("<strong>ERROR: Wasn't able to create a theme CSS folder! Contact the theme support.</strong>", 'error', 'switch_themes', 2), 60 * 60 * 48);
         delete_option(WM_THEME_SETTINGS_PREFIX . WM_THEME_SHORTNAME . $args['type'] . '-css');
         delete_option(WM_THEME_SETTINGS_PREFIX . WM_THEME_SHORTNAME . $args['type'] . '-files');
         return false;
     }
     $css_file_name = apply_filters('wmhook_wm_generate_main_css_css_file_name', 'global' . $args['type'], $args);
     $global_css_path = apply_filters('wmhook_wm_generate_main_css_global_css_path', trailingslashit($theme_css_dir) . $css_file_name . '.css', $args, $css_file_name);
     $global_css_url = apply_filters('wmhook_wm_generate_main_css_global_css_url', trailingslashit($theme_css_url) . $css_file_name . '.css', $args, $css_file_name);
     $global_css_path_dev = apply_filters('wmhook_wm_generate_main_css_global_css_path_dev', trailingslashit($theme_css_dir) . $css_file_name . '.dev.css', $args, $css_file_name);
     if ($output) {
         wma_write_local_file($global_css_path, $output_min);
         wma_write_local_file($global_css_path_dev, $output);
         //Store the CSS files paths and urls in DB
         update_option(WM_THEME_SETTINGS_PREFIX . WM_THEME_SHORTNAME . $args['type'] . '-css', $global_css_url);
         update_option(WM_THEME_SETTINGS_PREFIX . WM_THEME_SHORTNAME . '-files', str_replace($wp_upload_dir['basedir'], '', $theme_css_dir));
         //Admin notice
         set_transient('wmamp-admin-notice', array($args['message_before'] . $args['message'] . $args['message_after'], '', 'switch_themes'), 60 * 60 * 24);
         //Run custom actions
         do_action('wmhook_wm_generate_main_css', $args);
         return true;
     }
     delete_option(WM_THEME_SETTINGS_PREFIX . WM_THEME_SHORTNAME . $args['type'] . '-css');
     delete_option(WM_THEME_SETTINGS_PREFIX . WM_THEME_SHORTNAME . $args['type'] . '-files');
     return false;
 }
 /**
  * Extracts the ZIP file to a flat folder and removes obsolete files
  * And replaces the font file URLs in "fontello.css" file
  *
  * @since   1.0
  * @access  private
  * @uses    PHP ZipArchive class
  *
  * @param   string $file   ZIP file name
  * @param   array  $filter Array of file extensions to keep
  *
  * @return  boolean True if ZIP processed successfully
  */
 private function zip_flatten($file = '', $filter = array())
 {
     //Set the memory limit
     @ini_set('memory_limit', apply_filters('admin_memory_limit', WP_MAX_MEMORY_LIMIT));
     //Create the temporary folder
     $tempdir = wma_create_folder($this->paths['tempdir']);
     if (!$tempdir) {
         exit("Wasn't able to create a temporary folder");
     }
     //Use the PHP ZipArchive class
     $zip = new ZipArchive();
     if ($zip->open($file)) {
         //Parse the ZIP archive
         for ($i = 0; $i < $zip->numFiles; $i++) {
             $delete = false;
             //Get ZIP file entry (file, folder, subfolder)
             $entry = $zip->getNameIndex($i);
             //Filter allowed files
             if (!empty($filter)) {
                 $delete = true;
                 $matches = array();
                 foreach ($filter as $regex) {
                     preg_match('!' . $regex . '!', $entry, $matches);
                     if (!empty($matches)) {
                         $delete = false;
                         break;
                     }
                 }
             }
             //Skip directories and obsolete files
             if ('/' == substr($entry, -1) || $delete) {
                 continue;
             }
             //Copy files from ZIP to a new file in temporary directory
             $source_file = $zip->getStream($entry);
             $target_file = fopen($this->paths['tempdir'] . '/' . basename($entry), 'w');
             if (!$source_file) {
                 exit('Unable to extract the file');
             }
             while (!feof($source_file)) {
                 $new_content = fread($source_file, 8192);
                 //Replace font paths in "fontello.css" file
                 if ('fontello.css' == basename($entry)) {
                     $new_content = str_replace(array('../font/', 'margin-right: .2em;', 'margin-left: .2em;'), array('', '/* margin-right: .2em; */', '/* margin-left: .2em; */'), $new_content);
                 }
                 fwrite($target_file, $new_content);
             }
             fclose($source_file);
             fclose($target_file);
         }
         //Close the ZIP file processing
         $zip->close();
     } else {
         exit("Wasn't able to process the ZIP archive");
     }
     //Return
     return true;
 }