assets_js = UAVC_URL.'assets/js/'; $this->assets_css = UAVC_URL.'assets/css/'; $this->admin_js = UAVC_URL.'admin/js/'; $this->admin_css = UAVC_URL.'admin/css/'; $this->paths = wp_upload_dir(); $this->paths['fonts'] = 'smile_fonts'; $this->paths['temp'] = trailingslashit( $this->paths['fonts'] ) . 'smile_temp'; $this->paths['fontdir'] = trailingslashit( $this->paths['basedir'] ) . $this->paths['fonts']; $this->paths['tempdir'] = trailingslashit( $this->paths['basedir'] ) . $this->paths['temp']; $this->paths['fonturl'] = set_url_scheme( trailingslashit( $this->paths['baseurl'] ) . $this->paths['fonts'] ); $this->paths['tempurl'] = trailingslashit( $this->paths['baseurl'] ) . trailingslashit( $this->paths['temp'] ); $this->paths['config'] = 'charmap.php'; $this->vc_fonts = trailingslashit( $this->paths['basedir'] ) . $this->paths['fonts'] . '/Defaults'; $this->vc_fonts_dir = plugin_dir_path( __FILE__ ) . '../assets/fonts/'; //font file extract by ajax function add_action( 'wp_ajax_smile_ajax_add_zipped_font', array( $this, 'add_zipped_font' ) ); add_action( 'wp_ajax_smile_ajax_remove_zipped_font', array( $this, 'remove_zipped_font' ) ); if ( isset( $_GET['delete-bsf-fonts'] ) ) { $this->delete_all_fonts(); } //add_action('admin_menu',array($this,'icon_manager_menu')); $defaults = get_option( 'smile_fonts' ); if ( ! $defaults ) { add_action( 'admin_init', array( $this, 'AIO_move_fonts' ) ); } else if ( ( isset($defaults['Defaults'] ) && $defaults['Defaults'] == 'Array' ) ) { delete_option( 'smile_fonts' ); add_action( 'admin_init', array( $this, 'AIO_move_fonts' ) ); } } // Icon font manager public function get_icon_manager( $input_name, $icon ) { $font_manager = self::get_font_manager( $id ); $output = '
'; $output .= ''; $output .= '
'; $output .= ''; $output .= $font_manager; return $output; } function icon_manager_menu() { $page = add_submenu_page( "bsf-dashboard", __( "Icon Manager", "ultimate_vc" ), __( "Icon Manager", "ultimate_vc" ), "administrator", "font-icon-Manager", array( $this, 'icon_manager_dashboard' ) ); add_action( 'admin_print_scripts-' . $page, array( $this, 'admin_scripts' ) ); } function admin_scripts() { // enqueue js files on backend wp_enqueue_script( 'aio-admin-media', $this->admin_js . 'admin-media.js', array( 'jquery' ) ); wp_enqueue_script( 'media-upload' ); wp_enqueue_media(); wp_enqueue_style( 'aio-icon-manager-admin', $this->admin_css . 'icon-manager-admin.css' ); $fonts = get_option( 'smile_fonts' ); if ( is_array( $fonts ) ) { foreach ( $fonts as $font => $info ) { if ( strpos( $info['style'], 'http://' ) !== false ) { wp_enqueue_style( 'bsf-' . $font, $info['style'] ); } else { wp_enqueue_style( 'bsf-' . $font, trailingslashit( $this->paths['fonturl'] ) . $info['style'] ); } } } }// end AIO_admin_scripts function icon_manager_dashboard() { ?>

" data-type="application/zip" data-button="" data-trigger="smile_insert_zip" data-class="media-frame ">  

'; $output .= ''; return $output; } // Generate Icon Set Preview and settings page static function get_font_set() { $fonts = get_option( 'smile_fonts' ); $n = count( $fonts ); foreach ( $fonts as $font => $info ) { $icon_set = array(); $icons = array(); $upload_dir = wp_upload_dir(); $path = trailingslashit( $upload_dir['basedir'] ); $file = $path . $info['include'] . '/' . $info['config']; $output = '
'; $output .= '
'; include( $file ); if ( ! empty( $icons ) ) { $icon_set = array_merge( $icon_set, $icons ); } if ( ! empty( $icon_set ) ) { foreach ( $icon_set as $icons ) { $count = count( $icons ); } if ( $font == 'smt' || $font == 'Defaults' ) { $output .= '

' . __( "Default Icons", "smile" ) . ''; } else { $output .= '

' . esc_html(ucfirst( $font )) . ''; } $output .= '' . $count . ''; if ( $n != 1 ) { $output .= ''; } $output .= '

'; $output .= '
'; $output .= '
'; $output .= ''; $output .= '
'; $output .= '
'; $output .= '
'; echo $output; } } $script = ''; echo $script; } public function add_zipped_font() { //check if referer is ok check_ajax_referer( 'smile-add-zipped-fonts-nonce', 'security' ); //check if capability is ok $cap = apply_filters( 'avf_file_upload_capability', 'update_plugins' ); if ( ! current_user_can( $cap ) ) { die( __( "Using this feature is reserved for Super Admins. You unfortunately don't have the necessary permissions.", "ultimate_vc" ) ); } //get the file path of the zip file $attachment = $_POST['values']; $path = realpath( get_attached_file( $attachment['id'] ) ); $unzipped = $this->zip_flatten( $path, array( '\.eot', '\.svg', '\.ttf', '\.woff', '\.json', '\.css' ) ); // if we were able to unzip the file and save it to our temp folder extract the svg file if ( $unzipped ) { $this->create_config(); } //if we got no name for the font dont add it and delete the temp folder if ( $this->font_name == 'unknown' ) { $this->delete_folder( $this->paths['tempdir'] ); die( __( 'Was not able to retrieve the Font name from your Uploaded Folder', 'ultimate_vc' ) ); } die( __( 'smile_font_added:', 'ultimate_vc' ) . $this->font_name ); } public function remove_zipped_font() { check_ajax_referer( 'smile-remove-zipped-fonts-nonce', 'security' ); //get the file path of the zip file $font = sanitize_text_field( $_POST['del_font'] ); $list = self::load_iconfont_list(); $delete = isset( $list[ $font ] ) ? $list[ $font ] : false; if ( $delete ) { $this->delete_folder( $delete['include'] ); $this->remove_font( $font ); die( __( 'smile_font_removed', 'ultimate_vc' ) ); } die( __( 'Was not able to remove Font', 'ultimate_vc' ) ); } //extract the zip file to a flat folder and remove the files that are not needed function zip_flatten( $zipfile, $filter ) { @ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', WP_MAX_MEMORY_LIMIT ) ); if ( is_dir( $this->paths['tempdir'] ) ) { $this->delete_folder( $this->paths['tempdir'] ); $tempdir = smile_backend_create_folder( $this->paths['tempdir'], false ); } else { $tempdir = smile_backend_create_folder( $this->paths['tempdir'], false ); } //$fontdir = smile_backend_create_folder($this->paths['fontdir'], false); if ( ! $tempdir ) { die( __( 'Wasn\'t able to create temp folder', 'ultimate_vc' ) ); } if ( class_exists( 'ZipArchive' ) ) { $zip = new ZipArchive; if ( $zip->open( $zipfile ) ) { for ( $i = 0; $i < $zip->numFiles; $i ++ ) { $entry = $zip->getNameIndex( $i ); if ( ! empty( $filter ) ) { $delete = true; $matches = array(); foreach ( $filter as $regex ) { preg_match( "!" . $regex . "$!", $entry, $matches ); if ( ! empty( $matches ) ) { $delete = false; break; } } } if ( substr( $entry, - 1 ) == '/' || ! empty( $delete ) ) { continue; } // skip directories and non matching files $fp = $zip->getStream( $entry ); $ofp = fopen( $this->paths['tempdir'] . '/' . basename( $entry ), 'w' ); if ( ! $fp ) { die( __( 'Unable to extract the file.', 'ultimate_vc' ) ); } while ( ! feof( $fp ) ) { fwrite( $ofp, fread( $fp, 8192 ) ); } fclose( $fp ); fclose( $ofp ); } $zip->close(); } } else { die( __( "Wasn't able to work with Zip Archive", 'ultimate_vc' ) ); } return true; } //iterate over xml file and extract the glyphs for the font function create_config() { $this->json_file = $this->find_json(); $this->svg_file = $this->find_svg(); if ( empty( $this->json_file ) || empty( $this->svg_file ) ) { $this->delete_folder( $this->paths['tempdir'] ); die( __( 'selection.json or SVG file not found. Was not able to create the necessary config files', 'ultimate_vc' ) ); } $json = ''; $response = ''; global $wp_filesystem; if ( empty( $wp_filesystem ) ) { require_once( ABSPATH . '/wp-admin/includes/file.php' ); WP_Filesystem(); } if ( file_exists( trailingslashit( $this->paths['tempdir'] ) . $this->svg_file ) ) { $response = $wp_filesystem->get_contents( trailingslashit( $this->paths['tempdir'] ) . $this->svg_file ); } if ( file_exists( trailingslashit( $this->paths['tempdir'] ) . $this->svg_file ) ) { $json = $wp_filesystem->get_contents( trailingslashit( $this->paths['tempdir'] ) . $this->json_file ); } if ( '' !== $json && '' !== $response ) { $xml = simplexml_load_string( $response ); $font_attr = $xml->defs->font->attributes(); $glyphs = $xml->defs->font->children(); $this->font_name = (string) $font_attr['id']; $unicodes = array(); foreach ( $glyphs as $item => $glyph ) { if ( $item == 'glyph' ) { $attributes = $glyph->attributes(); $unicode = (string) $attributes['unicode']; array_push( $unicodes, $unicode ); } } $font_folder = trailingslashit( $this->paths['fontdir'] ) . $this->font_name; if ( is_dir( $font_folder ) ) { $this->delete_folder( $this->paths['tempdir'] ); die( __( "It seems that the font with the same name is already exists! Please upload the font with different name.", "ultimate_vc" ) ); } $file_contents = json_decode( $json ); if ( ! isset( $file_contents->IcoMoonType ) ) { $this->delete_folder( $this->paths['tempdir'] ); die( __( 'Uploaded font is not from IcoMoon. Please upload fonts created with the IcoMoon App Only.', 'ultimate_vc' ) ); } $icons = $file_contents->icons; unset( $unicodes[0] ); $n = 1; foreach ( $icons as $icon ) { $icon_name = $icon->properties->name; $icon_class = str_replace( ' ', '', $icon_name ); $icon_class = str_replace( ',', ' ', $icon_class ); $tags = implode( ",", $icon->icon->tags ); $this->json_config[ $this->font_name ][ $icon_name ] = array( "class" => $icon_class, "tags" => $tags, "unicode" => $unicodes[ $n ] ); $n ++; } if ( ! empty( $this->json_config ) && $this->font_name != 'unknown' ) { $this->write_config(); $this->re_write_css(); $this->rename_files(); $this->rename_folder(); $this->add_font(); } } return false; } //writes the php config file for the font function write_config() { $charmap = $this->paths['tempdir'] . '/' . $this->paths['config']; $handle = @fopen( $charmap, 'w' ); if ( $handle ) { fwrite( $handle, 'json_config[ $this->font_name ] as $icon => $info ) { if ( ! empty( $info ) ) { $delimiter = "'"; fwrite( $handle, "\r\n" . '$icons[\'' . $this->font_name . '\'][' . $delimiter . $icon . $delimiter . '] = array("class"=>' . $delimiter . $info["class"] . $delimiter . ',"tags"=>' . $delimiter . $info["tags"] . $delimiter . ',"unicode"=>' . $delimiter . $info["unicode"] . $delimiter . ');' ); } else { $this->delete_folder( $this->paths['tempdir'] ); die( __( 'Was not able to write a config file', 'ultimate_vc' ) ); } } fclose( $handle ); } else { $this->delete_folder( $this->paths['tempdir'] ); die( __( 'Was not able to write a config file', 'ultimate_vc' ) ); } } //re-writes the php config file for the font function re_write_css() { $style = $this->paths['tempdir'] . '/style.css'; $file = @file_get_contents( $style ); if ( $file ) { $str = str_replace( 'fonts/', '', $file ); $str = str_replace( 'icon-', $this->font_name . '-', $str ); $str = str_replace( '.icon {', '[class^="' . $this->font_name . '-"], [class*=" ' . $this->font_name . '-"] {', $str ); $str = str_replace( 'i {', '[class^="' . $this->font_name . '-"], [class*=" ' . $this->font_name . '-"] {', $str ); /* remove comments */ $str = preg_replace( '!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $str ); /* remove tabs, spaces, newlines, etc. */ $str = str_replace( array( "\r\n", "\r", "\n", "\t", ' ', ' ', ' ' ), '', $str ); @file_put_contents( $style, $str ); } else { die( __( 'Unable to write css. Upload icons downloaded only from icomoon', 'ultimate_vc' ) ); } } function rename_files() { $extensions = array( 'eot', 'svg', 'ttf', 'woff', 'css' ); $folder = trailingslashit( $this->paths['tempdir'] ); foreach ( glob( $folder . '*' ) as $file ) { $path_parts = pathinfo( $file ); if ( strpos( $path_parts['filename'], '.dev' ) === false && in_array( $path_parts['extension'], $extensions ) ) { if ( $path_parts['filename'] !== $this->font_name ) { rename( $file, trailingslashit( $path_parts['dirname'] ) . $this->font_name . '.' . $path_parts['extension'] ); } } } } //rename the temp folder and all its font files function rename_folder() { $new_name = trailingslashit( $this->paths['fontdir'] ) . $this->font_name; //delete folder and contents if they already exist $this->delete_folder( $new_name ); if ( rename( $this->paths['tempdir'], $new_name ) ) { return true; } else { $this->delete_folder( $this->paths['tempdir'] ); die( __( "Unable to add this font. Please try again.", "ultimate_vc" ) ); } } //delete a folder function delete_folder( $new_name ) { //delete folder and contents if they already exist if ( is_dir( $new_name ) ) { $objects = scandir( $new_name ); foreach ( $objects as $object ) { if ( $object != "." && $object != ".." ) { unlink( $new_name . "/" . $object ); } } reset( $objects ); rmdir( $new_name ); } else { echo $new_name . ' no found
'; } } // delete_all_fonts function delete_all_fonts() { $new_name = $this->paths['fontdir']; $objects = scandir( $new_name ); foreach ( $objects as $object ) { if ( $object != "." && $object != ".." ) { $this->delete_folder( $new_name . '/' . $object ); } } delete_option( 'smile_fonts' ); wp_redirect( admin_url( 'admin.php?page=bsf-font-icon-manager' ) ); exit; } function add_font() { $fonts = get_option( 'smile_fonts' ); if ( empty( $fonts ) ) { $fonts = array(); } $fonts[ $this->font_name ] = array( 'include' => trailingslashit( $this->paths['fonts'] ) . $this->font_name, 'folder' => trailingslashit( $this->paths['fonts'] ) . $this->font_name, 'style' => $this->font_name . '/' . $this->font_name . '.css', 'config' => $this->paths['config'] ); update_option( 'smile_fonts', $fonts ); } function remove_font( $font ) { $fonts = get_option( 'smile_fonts' ); if ( isset( $fonts[ $font ] ) ) { unset( $fonts[ $font ] ); update_option( 'smile_fonts', $fonts ); } } //finds the json file we need to create the config function find_json() { $files = scandir( $this->paths['tempdir'] ); foreach ( $files as $file ) { if ( strpos( strtolower( $file ), '.json' ) !== false && $file[0] != '.' ) { return $file; } } } //finds the svg file we need to create the config function find_svg() { $files = scandir( $this->paths['tempdir'] ); foreach ( $files as $file ) { if ( strpos( strtolower( $file ), '.svg' ) !== false && $file[0] != '.' ) { return $file; } } } static function load_iconfont_list() { if ( ! empty( self::$iconlist ) ) { return self::$iconlist; } $extra_fonts = get_option( 'smile_fonts' ); if ( empty( $extra_fonts ) ) { $extra_fonts = array(); } $font_configs = $extra_fonts;//array_merge(SmileBuilder::$default_iconfont, $extra_fonts); //if we got any include the charmaps and add the chars to an array $upload_dir = wp_upload_dir(); $path = trailingslashit( $upload_dir['basedir'] ); $url = trailingslashit( $upload_dir['baseurl'] ); foreach ( $font_configs as $key => $config ) { if ( empty( $config['full_path'] ) ) { $font_configs[ $key ]['include'] = $path . $font_configs[ $key ]['include']; $font_configs[ $key ]['folder'] = $url . $font_configs[ $key ]['folder']; } } //cache the result self::$iconlist = $font_configs; return $font_configs; } function AIO_move_fonts() { // Make destination directory if ( ! is_dir( $this->vc_fonts ) ) { wp_mkdir_p( $this->vc_fonts ); } @chmod( $this->vc_fonts, 0777 ); foreach ( glob( $this->vc_fonts_dir . '*' ) as $file ) { $new_file = basename( $file ); @copy( $file, $this->vc_fonts . '/' . $new_file ); } $fonts['Defaults'] = array( 'include' => sanitize_text_field( trailingslashit( $this->paths['fonts'] ) ) . 'Defaults', 'folder' => sanitize_text_field( trailingslashit( $this->paths['fonts'] ) ) . 'Defaults', 'style' => 'Defaults' . '/' . 'Defaults' . '.css', 'config' => sanitize_text_field( $this->paths['config'] ) ); $defaults = get_option( 'smile_fonts' ); if ( ! $defaults ) { update_option( 'smile_fonts', $fonts ); } }// end AIO_move_fonts }// End class /* * creates a folder for the theme framework */ if ( ! function_exists( 'smile_backend_create_folder' ) ) { function smile_backend_create_folder( &$folder, $addindex = true ) { if ( is_dir( $folder ) && $addindex == false ) { return true; } $created = wp_mkdir_p( trailingslashit( $folder ) ); @chmod( $folder, 0777 ); if ( $addindex == false ) { return $created; } $index_file = trailingslashit( $folder ) . 'index.php'; if ( file_exists( $index_file ) ) { return $created; } $handle = @fopen( $index_file, 'w' ); if ( $handle ) { fwrite( $handle, " " ); fclose( $handle ); } return $created; } } // Instantiate the Icon Manager } $AIO_Icon_Manager = new AIO_Icon_Manager; add_action( 'wp_ajax_smile_ajax_add_zipped_font', array( $AIO_Icon_Manager, 'add_zipped_font' ) ); add_action( 'wp_ajax_smile_ajax_remove_zipped_font', array( $AIO_Icon_Manager, 'remove_zipped_font' ) );