TeaThemeOptions/TeaThemeOptions

View on GitHub
src/Core/Hook/HookBackend.php

Summary

Maintainability
D
3 days
Test Coverage
<?php

namespace crewstyle\OlympusZeus\Core\Hook;

use crewstyle\OlympusZeus\OlympusZeus;

/**
 * Gets its own hooks.
 *
 * @package Olympus Zeus
 * @subpackage Core\Hook\HookBackend
 * @author Achraf Chouk <achrafchouk@gmail.com>
 * @since 4.0.0
 *
 */

class HookBackend
{
    /**
     * Constructor.
     *
     * @since 4.0.0
     */
    public function __construct()
    {
        //Admin panel
        if (!OLZ_ISADMIN) {
            return;
        }
    }

    /**
     * Build admin hooks.
     *
     * @since 4.0.0
     */
    public function makeHooks()
    {
        //Admin panel
        if (!OLZ_ISADMIN) {
            return;
        }

        //i18n
        $locale = apply_filters('theme_locale', get_locale(), OLZ_I18N);
        load_textdomain(OLZ_I18N, OLZ_PATH.'/languages/'.$locale.'.mo');

        //Add custom CSS colors ~ Earth
        wp_admin_css_color(
            'olzcss-earth',
            OlympusZeus::translate('Olympus ~ Earth'),
            OLZ_URI.'/assets/css/olz.admin.earth.css?ver=v'.OLZ_VERSION_NUM,
            array('#222', '#303231', '#55bb3a', '#91d04d')
        );
        //Add custom CSS colors ~ Ocean
        wp_admin_css_color(
            'olzcss-ocean',
            OlympusZeus::translate('Olympus ~ Ocean'),
            OLZ_URI.'/assets/css/olz.admin.ocean.css?ver=v'.OLZ_VERSION_NUM,
            array('#222', '#303231', '#3a80bb', '#4d9dd0')
        );
        //Add custom CSS colors ~ Vulcan
        wp_admin_css_color(
            'olzcss-vulcan',
            OlympusZeus::translate('Olympus ~ Vulcan'),
            OLZ_URI.'/assets/css/olz.admin.vulcan.css?ver=v'.OLZ_VERSION_NUM,
            array('#222', '#303231', '#bb3a3a', '#d04d4d')
        );
        //Add custom CSS colors ~ Wind
        wp_admin_css_color(
            'olzcss-wind',
            OlympusZeus::translate('Olympus ~ Wind'),
            OLZ_URI.'/assets/css/olz.admin.wind.css?ver=v'.OLZ_VERSION_NUM,
            array('#222', '#303231', '#69d2e7', '#a7dbd8')
        );

        //Hooks
        add_action('admin_menu',                    array(&$this, 'hookAssets'), 999);

        //Get configs
        $hooks = OlympusZeus::getConfigs('backendhooks');
        $modules = OlympusZeus::getConfigs('modules');

        if (isset($hooks['emojicons']) && $hooks['emojicons']) {
            add_action('init',                      array(&$this, 'hookDisableWPEmojicons'));
        }

        if (isset($hooks['versioncheck']) && $hooks['versioncheck']) {
            add_action('after_setup_theme',         array(&$this, 'hookRemoveAdminWPVersionCheck'));
        }

        if (isset($hooks['baricons']) && $hooks['baricons']) {
            add_action('wp_before_admin_bar_render',array(&$this, 'hookRemoveBarIcons'));
        }

        if (isset($hooks['menus']) && $hooks['menus']) {
            add_action('admin_menu',                array(&$this, 'hookRemoveMenus'));
        }

        if (isset($modules['sanitizedfilename']) && $modules['sanitizedfilename']) {
            add_filter('sanitize_file_name',        array(&$this, 'hookSanitizeFilename'), 10);
        }
    }

    /**
     * Hook building assets.
     *
     * @since 3.3.0
     */
    public function hookAssets()
    {
        add_action('admin_print_scripts', array(&$this, 'hookAssetsScripts'));
        add_action('admin_print_styles', array(&$this, 'hookAssetsStyles'));
    }

    /**
     * Hook building scripts.
     *
     * @uses wp_enqueue_media_olz()
     * @uses wp_enqueue_script()
     *
     * @since 4.0.0
     */
    public function hookAssetsScripts()
    {
        //Admin panel
        if (!OLZ_ISADMIN) {
            return;
        }

        //Get jQuery
        $jq = array('jquery');

        //Enqueue media and colorpicker scripts
        self::wp_enqueue_media_olz();
        wp_enqueue_script('wp-color-picker');
        wp_enqueue_script('accordion');

        //Enqueue all minified scripts
        wp_enqueue_script('tea-to', OLZ_URI.'/assets/js/olz.min.js', $jq, 'v'.OLZ_VERSION_NUM);
    }

    /**
     * Hook building styles.
     *
     * @uses wp_enqueue_style()
     *
     * @since 4.0.0
     */
    public function hookAssetsStyles()
    {
        //Admin panel
        if (!OLZ_ISADMIN) {
            return;
        }

        //Enqueue usefull styles
        wp_enqueue_style('media-views');
        wp_enqueue_style('farbtastic');
        wp_enqueue_style('wp-color-picker');

        //Enqueue all minified styles
        wp_enqueue_style('olz-css', OLZ_URI.'/assets/css/olz.min.css', array(), 'v'.OLZ_VERSION_NUM);
    }

    /**
     * Disable emojicons introduced with WP 4.2 in backend panel.
     *
     * @uses remove_action()
     * @uses add_filter()
     *
     * @since 3.3.0
     */
    public function hookDisableWPEmojicons()
    {
        //All actions related to emojis
        remove_action('admin_print_styles', 'print_emoji_styles');
        remove_action('admin_print_scripts', 'print_emoji_detection_script');
        remove_filter('wp_mail', 'wp_staticize_emoji_for_email');

        //Filter function used to remove the tinymce emoji plugin
        add_filter('tiny_mce_plugins', array(&$this, 'hookDisableWPEmojiconsTinymce'));
    }
    public function hookDisableWPEmojiconsTinymce($plugins)
    {
        if (is_array($plugins)) {
            return array_diff($plugins, array('wpemoji'));
        }
        return array();
    }

    /**
     * Sets up WP version check for admin panel.
     *
     * @uses current_user_can() To know if current user has permissions.
     * @uses add_action() To add a hook action.
     * @uses add_filter() To add a hook filter.
     *
     * @since 3.3.0
     */
    public function hookRemoveAdminWPVersionCheck()
    {
        //Remove WORDPRESS update in the administration to all users, except the admin
        if (!current_user_can('edit_users')) {
            add_action('init', create_function('$a', "remove_action('init', 'wp_version_check');"), 2);
            add_filter('pre_option_update_core', create_function('$a', "return null;"));
        }
    }

    /**
     * Remove menu items from WordPress admin bar.
     *
     * @uses remove_menu() To remove specific menu.
     *
     * @since 3.3.0
     */
    public function hookRemoveBarIcons()
    {
        global $wp_admin_bar;

        //Remove all useless WP bar menus
        $wp_admin_bar->remove_menu('wp-logo');
        $wp_admin_bar->remove_menu('about');
        $wp_admin_bar->remove_menu('comments');
        $wp_admin_bar->remove_menu('new-content');
        $wp_admin_bar->remove_menu('wporg');
        $wp_admin_bar->remove_menu('documentation');
        $wp_admin_bar->remove_menu('support-forums');
        $wp_admin_bar->remove_menu('feedback');
        $wp_admin_bar->remove_menu('view-site');
    }

    /**
     * Remove dashboard menus to editor.
     *
     * @uses current_user_can() To know if current user has permissions.
     * @uses remove_menu_page() To remove a menu page.
     * @uses remove_submenu_page() To remove a submenu page.
     *
     * @since 3.3.0
     */
    public function hookRemoveMenus()
    {
        //Remove WORDPRESS pages in the administration to all users, except the admin
        if (!current_user_can('edit_users')) {
            remove_submenu_page('themes.php', 'themes.php');
            remove_menu_page('plugins.php');
            remove_submenu_page('index.php', 'update-core.php');
            remove_submenu_page('options-general.php', 'options-media.php');
            remove_menu_page('link-manager.php');
            remove_menu_page('tools.php');
        }
    }

    /**
     * Sanitize filenames.
     *
     * @param string $filename Name of the file to sanitize
     * @uses remove_accents() Converts all accent characters to ASCII characters
     *
     * @since 3.3.0
     */
    public function hookSanitizeFilename($filename)
    {
        //Invalid characters
        $invalid = array(
            'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä€'=>'A', 'Ä‚'=>'A', 'Ȧ'=>'A', 'Ä'=>'A', 'Ả'=>'A', 'Ã…'=>'A', 'Ǎ'=>'A', 'È€'=>'A', 'È‚'=>'A', 'Ä„'=>'A', 'Ạ'=>'A', 'Ḁ'=>'A', 'Ầ'=>'A', 'Ấ'=>'A', 'Ẫ'=>'A', 'Ẩ'=>'A', 'Ằ'=>'A', 'Ắ'=>'A', 'Ẵ'=>'A', 'Ẳ'=>'A', 'Ç '=>'A', 'Çž'=>'A', 'Ǻ'=>'A', 'Ậ'=>'A', 'Ặ'=>'A',
            'Æ'=>'AE', 'Ǽ'=>'AE', 'Ǣ'=>'AE',
            'Ḃ'=>'B', 'Ɓ'=>'B', 'Ḅ'=>'B', 'Ḇ'=>'B', 'Ƃ'=>'B', 'Ƅ'=>'B', 'Þ'=>'B',
            'Ĉ'=>'C', 'Ċ'=>'C', 'Č'=>'C', 'Ƈ'=>'C', 'Ç'=>'C', 'Ḉ'=>'C',
            'Ḋ'=>'D', 'Ɗ'=>'D', 'Ḍ'=>'D', 'Ḏ'=>'D', 'Ḑ'=>'D', 'Ḓ'=>'D', 'Ď'=>'D',
            'Đ'=>'Dj', 'Ɖ'=>'Dj',
            'È'=>'E', 'É'=>'E', 'Ê'=>'E', 'Ẽ'=>'E', 'Ē'=>'E', 'Ĕ'=>'E', 'Ė'=>'E', 'Ë'=>'E', 'Ẻ'=>'E', 'Ě'=>'E', 'Ȅ'=>'E', 'Ȇ'=>'E', 'Ẹ'=>'E', 'Ȩ'=>'E', 'Ę'=>'E', 'Ḙ'=>'E', 'Ḛ'=>'E', 'Ề'=>'E', 'Ế'=>'E', 'Ễ'=>'E', 'Ể'=>'E', 'Ḕ'=>'E', 'Ḗ'=>'E', 'Ệ'=>'E', 'Ḝ'=>'E', 'Ǝ'=>'E', 'Ɛ'=>'E',
            'Ḟ'=>'F', 'Ƒ'=>'F',
            'Ç´'=>'G', 'Äœ'=>'G', 'Ḡ'=>'G', 'Äž'=>'G', 'Ä '=>'G', 'Ǧ'=>'G', 'Æ“'=>'G', 'Ä¢'=>'G', 'Ǥ'=>'G',
            'Ĥ'=>'H', 'Ḧ'=>'H', 'Ȟ'=>'H', 'Ƕ'=>'H', 'Ḥ'=>'H', 'Ḩ'=>'H', 'Ḫ'=>'H', 'Ħ'=>'H',
            'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ĩ'=>'I', 'Ī'=>'I', 'Ĭ'=>'I', 'İ'=>'I', 'Ï'=>'I', 'Ỉ'=>'I', 'Ǐ'=>'I', 'Ị'=>'I', 'Į'=>'I', 'Ȉ'=>'I', 'Ȋ'=>'I', 'Ḭ'=>'I', 'Ɨ'=>'I', 'Ḯ'=>'I',
            'IJ'=>'IJ',
            'Ä´'=>'J',
            'Ḱ'=>'K', 'Ǩ'=>'K', 'Ḵ'=>'K', 'Ƙ'=>'K', 'Ḳ'=>'K', 'Ķ'=>'K', 'Ĺ'=>'L', 'Ḻ'=>'L', 'Ḷ'=>'L', 'Ļ'=>'L', 'Ḽ'=>'L', 'Ľ'=>'L', 'Ŀ'=>'L', 'Ł'=>'L', 'Ḹ'=>'L',
            'Ḿ'=>'M', 'á¹€'=>'M', 'Ṃ'=>'M', 'Æœ'=>'M', 'Ñ'=>'N', 'Ǹ'=>'N', 'Ń'=>'N', 'Ñ'=>'N', 'Ṅ'=>'N', 'Ň'=>'N', 'ÅŠ'=>'N', 'Ɲ'=>'N', 'Ṇ'=>'N', 'Å…'=>'N', 'Ṋ'=>'N', 'Ṉ'=>'N', 'È '=>'N',
            'Ã’'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'ÅŒ'=>'O', 'ÅŽ'=>'O', 'È®'=>'O', 'Ö'=>'O', 'Ỏ'=>'O', 'Ő'=>'O', 'Ç‘'=>'O', 'ÈŒ'=>'O', 'ÈŽ'=>'O', 'Æ '=>'O', 'Ǫ'=>'O', 'Ọ'=>'O', 'ÆŸ'=>'O', 'Ø'=>'O', 'á»’'=>'O', 'Ố'=>'O', 'á»–'=>'O', 'á»”'=>'O', 'È°'=>'O', 'Ȫ'=>'O', 'Ȭ'=>'O', 'Ṍ'=>'O', 'Ṑ'=>'O', 'á¹’'=>'O', 'Ờ'=>'O', 'Ớ'=>'O', 'á» '=>'O', 'Ở'=>'O', 'Ợ'=>'O', 'Ǭ'=>'O', 'Ộ'=>'O', 'Ǿ'=>'O', 'Ɔ'=>'O', 'Å’'=>'OE',
            'Ṕ'=>'P', 'Ṗ'=>'P', 'Ƥ'=>'P',
            'Ŕ'=>'R', 'Ṙ'=>'R', 'Ř'=>'R',   'Ȑ'=>'R', 'Ȓ'=>'R', 'Ṛ'=>'R', 'Ŗ'=>'R', 'Ṟ'=>'R', 'Ṝ'=>'R', 'Ʀ'=>'R',
            'Ś'=>'S', 'Ŝ'=>'S', 'Ṡ'=>'S', 'Š'=>'S', 'Ṣ'=>'S', 'Ș'=>'S', 'Ş'=>'S', 'Ṥ'=>'S', 'Ṧ'=>'S', 'Ṩ'=>'S',
            'Ṫ'=>'T', 'Ť'=>'T', 'Ƭ'=>'T', 'Ʈ'=>'T', 'Ṭ'=>'T', 'Ț'=>'T', 'Ţ'=>'T', 'Ṱ'=>'T', 'Ṯ'=>'T', 'Ŧ'=>'T',
            'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ũ'=>'U', 'Ū'=>'U', 'Ŭ'=>'U', 'Ü'=>'U', 'Ủ'=>'U', 'Ů'=>'U', 'Ű'=>'U', 'Ǔ'=>'U', 'Ȕ'=>'U', 'Ȗ'=>'U', 'Ư'=>'U', 'Ụ'=>'U', 'Ṳ'=>'U', 'Ų'=>'U', 'Ṷ'=>'U', 'Ṵ'=>'U',   'Ṹ'=>'U', 'Ṻ'=>'U', 'Ǜ'=>'U', 'Ǘ'=>'U', 'Ǖ'=>'U', 'Ǚ'=>'U', 'Ừ'=>'U',     'Ứ'=>'U', 'Ữ'=>'U', 'Ử'=>'U', 'Ự'=>'U',
            'Ṽ'=>'V', 'Ṿ'=>'V', 'Ʋ'=>'V',
            'Ẁ'=>'W', 'Ẃ'=>'W', 'Ŵ'=>'W', 'Ẇ'=>'W', 'Ẅ'=>'W', 'Ẉ'=>'W',
            'Ẋ'=>'X', 'Ẍ'=>'X',
            'Ỳ'=>'Y', 'Ý'=>'Y', 'Ŷ'=>'Y', 'Ỹ'=>'Y', 'Ȳ'=>'Y', 'Ẏ'=>'Y', 'Ÿ'=>'Y', 'Ỷ'=>'Y', 'Ƴ'=>'Y', 'Ỵ'=>'Y',
            'Ź'=>'Z', 'Ẑ'=>'Z', 'Ż'=>'Z', 'Ž'=>'Z', 'Ȥ'=>'Z', 'Ẓ'=>'Z', 'Ẕ'=>'Z', 'Ƶ'=>'Z',
            'à '=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ā'=>'a', 'ă'=>'a', 'ȧ'=>'a', 'ä'=>'a', 'ả'=>'a', 'å'=>'a', 'ǎ'=>'a', 'ȁ'=>'a', 'ą'=>'a', 'ạ'=>'a', 'ḁ'=>'a', 'ẚ'=>'a', 'ầ'=>'a', 'ấ'=>'a', 'ẫ'=>'a', 'ẩ'=>'a', 'ằ'=>'a', 'ắ'=>'a', 'ẵ'=>'a', 'ẳ'=>'a', 'ǡ'=>'a', 'ǟ'=>'a', 'ǻ'=>'a', 'ậ'=>'a', 'ặ'=>'a',
            'æ'=>'ae', 'ǽ'=>'ae', 'ǣ'=>'ae',
            'ḃ'=>'b', 'ɓ'=>'b', 'ḅ'=>'b', 'ḇ'=>'b', 'ƀ'=>'b', 'ƃ'=>'b', 'ƅ'=>'b', 'þ'=>'b',
            'ć'=>'c', 'ĉ'=>'c', 'ċ'=>'c', 'č'=>'c', 'ƈ'=>'c', 'ç'=>'c', 'ḉ'=>'c',
            'ḋ'=>'d', 'ɗ'=>'d', 'ḍ'=>'d', 'ḏ'=>'d', 'ḑ'=>'d', 'ḓ'=>'d', 'ď'=>'d', 'đ'=>'d', 'ƌ'=>'d', 'ȡ'=>'d',
            'Ä‘'=>'dj',
            'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ẽ'=>'e', 'ē'=>'e', 'ĕ'=>'e', 'ė'=>'e', 'ë'=>'e', 'ẻ'=>'e', 'ě'=>'e', 'ȅ'=>'e', 'ȇ'=>'e', 'ẹ'=>'e', 'ȩ'=>'e', 'ę'=>'e', 'ḙ'=>'e', 'ḛ'=>'e', 'ề'=>'e', 'ế'=>'e',             'ễ'=>'e', 'ể'=>'e', 'ḕ'=>'e', 'ḗ'=>'e', 'ệ'=>'e', 'ḝ'=>'e', 'ǝ'=>'e', 'ɛ'=>'e',
            'ḟ'=>'f', 'ƒ'=>'f',
            'ǵ'=>'g', 'ĝ'=>'g', 'ḡ'=>'g', 'ÄŸ'=>'g', 'Ä¡'=>'g', 'ǧ'=>'g', 'É '=>'g', 'Ä£'=>'g', 'Ç¥'=>'g',
            'ĥ'=>'h', 'ḣ'=>'h', 'ḧ'=>'h', 'ȟ'=>'h', 'ƕ'=>'h', 'ḥ'=>'h', 'ḩ'=>'h', 'ḫ'=>'h', 'ẖ'=>'h', 'ħ'=>'h',
            'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ĩ'=>'i', 'ī'=>'i', 'ĭ'=>'i', 'ı'=>'i', 'ï'=>'i', 'ỉ'=>'i', 'ǐ'=>'i', 'ị'=>'i', 'į'=>'i', 'ȉ'=>'i', 'ȋ'=>'i', 'ḭ'=>'i',  'ɨ'=>'i', 'ḯ'=>'i',
            'ij'=>'ij',
            'ĵ'=>'j', 'ǰ'=>'j',
            'ḱ'=>'k', 'ǩ'=>'k', 'ḵ'=>'k', 'ƙ'=>'k', 'ḳ'=>'k', 'ķ'=>'k',
            'ĺ'=>'l', 'ḻ'=>'l', 'ḷ'=>'l', 'ļ'=>'l', 'ḽ'=>'l', 'ľ'=>'l', 'ŀ'=>'l', 'ł'=>'l', 'ƚ'=>'l', 'ḹ'=>'l', 'ȴ'=>'l',
            'ḿ'=>'m', 'ṁ'=>'m', 'ṃ'=>'m', 'ɯ'=>'m',
            'ǹ'=>'n', 'ń'=>'n', 'ñ'=>'n', 'ṅ'=>'n', 'ň'=>'n', 'ŋ'=>'n', 'ɲ'=>'n', 'ṇ'=>'n', 'ņ'=>'n', 'ṋ'=>'n', 'ṉ'=>'n', 'ʼn'=>'n', 'ƞ'=>'n', 'ȵ'=>'n',
            'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o', 'ō'=>'o', 'ŏ'=>'o', 'ȯ'=>'o', 'ö'=>'o', 'ỏ'=>'o', 'ő'=>'o', 'ǒ'=>'o', 'ȍ'=>'o', 'ȏ'=>'o', 'ơ'=>'o', 'ǫ'=>'o', 'ọ'=>'o', 'ɵ'=>'o', 'ø'=>'o', 'ồ'=>'o', 'ố'=>'o', 'ỗ'=>'o', 'ổ'=>'o', 'ȱ'=>'o', 'ȫ'=>'o', 'ȭ'=>'o', 'ṍ'=>'o', 'ṏ'=>'o', 'ṑ'=>'o', 'ṓ'=>'o', 'ờ'=>'o', 'ớ'=>'o', 'ỡ'=>'o', 'ở'=>'o', 'ợ'=>'o', 'ǭ'=>'o', 'ộ'=>'o', 'ǿ'=>'o', 'ɔ'=>'o',
            'Å“'=>'oe',
            'ṕ'=>'p', 'ṗ'=>'p', 'ƥ'=>'p',
            'ŕ'=>'r', 'ṙ'=>'r', 'ř'=>'r', 'ȑ'=>'r', 'ȓ'=>'r', 'ṛ'=>'r', 'ŗ'=>'r', 'ṟ'=>'r', 'ṝ'=>'r',
            'ś'=>'s', 'ŝ'=>'s', 'ṡ'=>'s', 'š'=>'s', 'ṣ'=>'s', 'ș'=>'s', 'ş'=>'s', 'ṥ'=>'s', 'ṧ'=>'s', 'ṩ'=>'s', 'ſ'=>'s', 'ẛ'=>'s',
            'ß'=>'Ss',
            'ṫ'=>'t', 'ẗ'=>'t', 'ť'=>'t', 'ƭ'=>'t', 'ʈ'=>'t', 'ƫ'=>'t', 'ṭ'=>'t', 'ț'=>'t', 'ţ'=>'t', 'ṱ'=>'t', 'ṯ'=>'t', 'ŧ'=>'t', 'ȶ'=>'t',
            'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ũ'=>'u', 'ū'=>'u', 'ŭ'=>'u', 'ü'=>'u', 'ủ'=>'u', 'ů'=>'u', 'ű'=>'u', 'ǔ'=>'u', 'ȕ'=>'u', 'ȗ'=>'u', 'ư'=>'u', 'ụ'=>'u', 'ṳ'=>'u', 'ų'=>'u', 'ṷ'=>'u', 'ṵ'=>'u', 'ṹ'=>'u', 'ṻ'=>'u', 'ǜ'=>'u', 'ǘ'=>'u', 'ǖ'=>'u', 'ǚ'=>'u', 'ừ'=>'u', 'ứ'=>'u', 'ữ'=>'u', 'ử'=>'u', 'ự'=>'u',
            'ṽ'=>'v', 'ṿ'=>'v',
            'ẁ'=>'w', 'ẃ'=>'w', 'ŵ'=>'w', 'ẇ'=>'w', 'ẅ'=>'w', 'ẘ'=>'w', 'ẉ'=>'w',
            'ẋ'=>'x', 'ẍ'=>'x',
            'ý'=>'y', 'ý'=>'y', 'ỳ'=>'y', 'ý'=>'y', 'ŷ'=>'y', 'ȳ'=>'y', 'ẏ'=>'y', 'ÿ'=>'y', 'ÿ'=>'y', 'ỷ'=>'y', 'ẙ'=>'y', 'ƴ'=>'y', 'ỵ'=>'y',
            'ź'=>'z', 'ẑ'=>'z', 'ż'=>'z', 'ž'=>'z', 'ȥ'=>'z', 'ẓ'=>'z', 'ẕ'=>'z', 'ƶ'=>'z',
            'â„–'=>'No',
            'º'=>'o',
            'ª'=>'a',
            '€'=>'E',
            '©'=>'C',
            'â„—'=>'P',
            'â„¢'=>'tm',
            'â„ '=>'sm'
        );

        //Make the magic
        $sanitized_filename = str_replace(array_keys($invalid), array_values($invalid), $filename);
        $sanitized_filename = remove_accents($sanitized_filename);
        $sanitized_filename = preg_replace('/[^a-zA-Z0-9-_\.]/', '', strtolower($sanitized_filename));

        //Return the new name
        return $sanitized_filename;
    }

    /**
     * Update rewrite rules options.
     *
     * @param array $args Define if the library has to make a redirect
     *
     * @since 4.0.0
     */
    static function wp_enqueue_media_olz($args = array())
    {
        //Admin panel
        if (!OLZ_ISADMIN) {
            return;
        }

        //Enqueue me just once per page, please.
        if (did_action('wp_enqueue_media_olz') || did_action('wp_enqueue_media')) {
            return;
        }

        global $content_width, $wpdb, $wp_locale;

        $defaults = array(
            'post' => null,
        );
        $args = wp_parse_args($args, $defaults);

        //We're going to pass the old thickbox media tabs to `media_upload_tabs`
        //to ensure plugins will work. We will then unset those tabs.
        $tabs = array(
            //handler action suffix => tab label
            'type'     => '',
            'type_url' => '',
            'gallery'  => '',
            'library'  => '',
        );

        /** This filter is documented in wp-admin/includes/media.php */
        $tabs = apply_filters('media_upload_tabs', $tabs);
        unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);

        $props = array(
            'link'  => get_option('image_default_link_type'), //db default is 'file'
            'align' => get_option('image_default_align'), //empty default
            'size'  => get_option('image_default_size'),  //empty default
        );

        $exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
        $mimes = get_allowed_mime_types();
        $ext_mimes = array();

        foreach ($exts as $ext) {
            foreach ($mimes as $ext_preg => $mime_match) {
                if (preg_match('#' . $ext . '#i', $ext_preg)) {
                    $ext_mimes[ $ext ] = $mime_match;
                    break;
                }
            }
        }

        if (false === ($has_audio = get_transient('has_audio'))) {
                $has_audio = (bool) $wpdb->get_var("
                    SELECT ID
                    FROM $wpdb->posts
                    WHERE post_type = 'attachment'
                    AND post_mime_type LIKE 'audio%'
                    LIMIT 1
                ");
                set_transient('has_audio', $has_audio);
        }

        if (false === ($has_video = get_transient('has_video'))) {
                $has_video = (bool) $wpdb->get_var("
                    SELECT ID
                    FROM $wpdb->posts
                    WHERE post_type = 'attachment'
                    AND post_mime_type LIKE 'video%'
                    LIMIT 1
                ");
                set_transient('has_video', $has_video);
        }

        $months = $wpdb->get_results($wpdb->prepare("
            SELECT DISTINCT YEAR(post_date) AS year, MONTH(post_date) AS month
            FROM $wpdb->posts
            WHERE post_type = %s
            ORDER BY post_date DESC
        ", 'attachment'));

        foreach ($months as $month_year) {
            $month_year->text = sprintf(
                OlympusZeus::translate('%1$s %2$d'),
                $wp_locale->get_month($month_year->month),
                $month_year->year
            );
        }

        $settings = array(
            'tabs'      => $tabs,
            'tabUrl'    => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
            'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
            /** This filter is documented in wp-admin/includes/media.php */
            'captions'  => ! apply_filters('disable_captions', ''),
            'nonce'     => array(
                'sendToEditor' => wp_create_nonce('media-send-to-editor'),
           ),
            'post'    => array(
                'id' => 0,
           ),
            'defaultProps' => $props,
            'attachmentCounts' => array(
                'audio' => ($has_audio) ? 1 : 0,
                'video' => ($has_video) ? 1 : 0
           ),
            'embedExts'    => $exts,
            'embedMimes'   => $ext_mimes,
            'contentWidth' => $content_width,
            'months'       => $months,
            'mediaTrash'   => MEDIA_TRASH ? 1 : 0
        );

        $post = null;
        if (isset($args['post'])) {
            $post = get_post($args['post']);
            $settings['post'] = array(
                'id' => $post->ID,
                'nonce' => wp_create_nonce('update-post_' . $post->ID),
           );

            $thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) 
                && post_type_supports($post->post_type, 'thumbnail');

            if (! $thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
                if (wp_attachment_is('audio', $post)) {
                    $thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') 
                        || current_theme_supports('post-thumbnails', 'attachment:audio');
                } elseif (wp_attachment_is('video', $post)) {
                    $thumbnail_support = post_type_supports('attachment:video', 'thumbnail') 
                        || current_theme_supports('post-thumbnails', 'attachment:video');
                }
            }

            if ($thumbnail_support) {
                $featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
                $settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
            }
        }

        $hier = $post && is_post_type_hierarchical($post->post_type);

        $strings = array(
            //Generic
            'url'         => OlympusZeus::translate('URL'),
            'addMedia'    => OlympusZeus::translate('Add Media'),
            'search'      => OlympusZeus::translate('Search'),
            'select'      => OlympusZeus::translate('Select'),
            'cancel'      => OlympusZeus::translate('Cancel'),
            'update'      => OlympusZeus::translate('Update'),
            'replace'     => OlympusZeus::translate('Replace'),
            'remove'      => OlympusZeus::translate('Remove'),
            'back'        => OlympusZeus::translate('Back'),
            /* translators: This is a would-be plural string used in the media manager.
               If there is not a word you can use in your language to avoid issues with the
               lack of plural support here, turn it into "selected: %d" then translate it.
             */
            'selected'    => OlympusZeus::translate('%d selected'),
            'dragInfo'    => OlympusZeus::translate('Drag and drop to reorder media files.'),

            //Upload
            'uploadFilesTitle'  => OlympusZeus::translate('Upload Files'),
            'uploadImagesTitle' => OlympusZeus::translate('Upload Images'),

            //Library
            'mediaLibraryTitle'      => OlympusZeus::translate('Media Library'),
            'insertMediaTitle'       => OlympusZeus::translate('Insert Media'),
            'createNewGallery'       => OlympusZeus::translate('Create a new gallery'),
            'createNewPlaylist'      => OlympusZeus::translate('Create a new playlist'),
            'createNewVideoPlaylist' => OlympusZeus::translate('Create a new video playlist'),
            'returnToLibrary'        => OlympusZeus::translate('&#8592; Return to library'),
            'allMediaItems'          => OlympusZeus::translate('All media items'),
            'allDates'               => OlympusZeus::translate('All dates'),
            'noItemsFound'           => OlympusZeus::translate('No items found.'),
            'insertIntoPost'         => $hier 
                ? OlympusZeus::translate('Insert into page') 
                : OlympusZeus::translate('Insert into post'),
            'unattached'             => OlympusZeus::translate('Unattached'),
            'trash'                  => _x('Trash', 'noun'),
            'uploadedToThisPost'     => $hier 
                ? OlympusZeus::translate('Uploaded to this page') 
                : OlympusZeus::translate('Uploaded to this post'),
            'warnDelete'             => OlympusZeus::translate("You are about to permanently delete this item.
                \n  'Cancel' to stop, 'OK' to delete."),
            'warnBulkDelete'         => OlympusZeus::translate("You are about to permanently delete these items.
                \n  'Cancel' to stop, 'OK' to delete."),
            'warnBulkTrash'          => OlympusZeus::translate("You are about to trash these items.
                \n  'Cancel' to stop, 'OK' to delete."),
            'bulkSelect'             => OlympusZeus::translate('Bulk Select'),
            'cancelSelection'        => OlympusZeus::translate('Cancel Selection'),
            'trashSelected'          => OlympusZeus::translate('Trash Selected'),
            'untrashSelected'        => OlympusZeus::translate('Untrash Selected'),
            'deleteSelected'         => OlympusZeus::translate('Delete Selected'),
            'deletePermanently'      => OlympusZeus::translate('Delete Permanently'),
            'apply'                  => OlympusZeus::translate('Apply'),
            'filterByDate'           => OlympusZeus::translate('Filter by date'),
            'filterByType'           => OlympusZeus::translate('Filter by type'),
            'searchMediaLabel'       => OlympusZeus::translate('Search Media'),
            'noMedia'                => OlympusZeus::translate('No media attachments found.'),

            //Library Details
            'attachmentDetails'  => OlympusZeus::translate('Attachment Details'),

            //From URL
            'insertFromUrlTitle' => OlympusZeus::translate('Insert from URL'),

            //Featured Images
            'setFeaturedImageTitle' => OlympusZeus::translate('Set Featured Image'),
            'setFeaturedImage'    => OlympusZeus::translate('Set featured image'),

            //Gallery
            'createGalleryTitle' => OlympusZeus::translate('Create Gallery'),
            'editGalleryTitle'   => OlympusZeus::translate('Edit Gallery'),
            'cancelGalleryTitle' => OlympusZeus::translate('&#8592; Cancel Gallery'),
            'insertGallery'      => OlympusZeus::translate('Insert gallery'),
            'updateGallery'      => OlympusZeus::translate('Update gallery'),
            'addToGallery'       => OlympusZeus::translate('Add to gallery'),
            'addToGalleryTitle'  => OlympusZeus::translate('Add to Gallery'),
            'reverseOrder'       => OlympusZeus::translate('Reverse order'),

            //Edit Image
            'imageDetailsTitle'     => OlympusZeus::translate('Image Details'),
            'imageReplaceTitle'     => OlympusZeus::translate('Replace Image'),
            'imageDetailsCancel'    => OlympusZeus::translate('Cancel Edit'),
            'editImage'             => OlympusZeus::translate('Edit Image'),

            //Crop Image
            'chooseImage' => OlympusZeus::translate('Choose Image'),
            'selectAndCrop' => OlympusZeus::translate('Select and Crop'),
            'skipCropping' => OlympusZeus::translate('Skip Cropping'),
            'cropImage' => OlympusZeus::translate('Crop Image'),
            'cropYourImage' => OlympusZeus::translate('Crop your image'),
            'cropping' => OlympusZeus::translate('Cropping&hellip;'),
            'suggestedDimensions' => OlympusZeus::translate('Suggested image dimensions:'),
            'cropError' => OlympusZeus::translate('There has been an error cropping your image.'),

            //Edit Audio
            'audioDetailsTitle'     => OlympusZeus::translate('Audio Details'),
            'audioReplaceTitle'     => OlympusZeus::translate('Replace Audio'),
            'audioAddSourceTitle'   => OlympusZeus::translate('Add Audio Source'),
            'audioDetailsCancel'    => OlympusZeus::translate('Cancel Edit'),

            //Edit Video
            'videoDetailsTitle'     => OlympusZeus::translate('Video Details'),
            'videoReplaceTitle'     => OlympusZeus::translate('Replace Video'),
            'videoAddSourceTitle'   => OlympusZeus::translate('Add Video Source'),
            'videoDetailsCancel'    => OlympusZeus::translate('Cancel Edit'),
            'videoSelectPosterImageTitle' => OlympusZeus::translate('Select Poster Image'),
            'videoAddTrackTitle'    => OlympusZeus::translate('Add Subtitles'),

            //Playlist
            'playlistDragInfo'    => OlympusZeus::translate('Drag and drop to reorder tracks.'),
            'createPlaylistTitle' => OlympusZeus::translate('Create Audio Playlist'),
            'editPlaylistTitle'   => OlympusZeus::translate('Edit Audio Playlist'),
            'cancelPlaylistTitle' => OlympusZeus::translate('&#8592; Cancel Audio Playlist'),
            'insertPlaylist'      => OlympusZeus::translate('Insert audio playlist'),
            'updatePlaylist'      => OlympusZeus::translate('Update audio playlist'),
            'addToPlaylist'       => OlympusZeus::translate('Add to audio playlist'),
            'addToPlaylistTitle'  => OlympusZeus::translate('Add to Audio Playlist'),

            //Video Playlist
            'videoPlaylistDragInfo'    => OlympusZeus::translate('Drag and drop to reorder videos.'),
            'createVideoPlaylistTitle' => OlympusZeus::translate('Create Video Playlist'),
            'editVideoPlaylistTitle'   => OlympusZeus::translate('Edit Video Playlist'),
            'cancelVideoPlaylistTitle' => OlympusZeus::translate('&#8592; Cancel Video Playlist'),
            'insertVideoPlaylist'      => OlympusZeus::translate('Insert video playlist'),
            'updateVideoPlaylist'      => OlympusZeus::translate('Update video playlist'),
            'addToVideoPlaylist'       => OlympusZeus::translate('Add to video playlist'),
            'addToVideoPlaylistTitle'  => OlympusZeus::translate('Add to Video Playlist'),
        );

        /**
         * Filter the media view settings.
         *
         * @since WordPress 3.5.0
         *
         * @param array   $settings List of media view settings.
         * @param WP_Post $post     Post object.
         */
        $settings = apply_filters('media_view_settings', $settings, $post);

        /**
         * Filter the media view strings.
         *
         * @since WordPress 3.5.0
         *
         * @param array   $strings List of media view strings.
         * @param WP_Post $post    Post object.
         */
        $strings = apply_filters('media_view_strings', $strings,  $post);

        $strings['settings'] = $settings;

        //Ensure we enqueue media-editor first, that way media-views is
        //registered internally before we try to localize it. see #24724.
        wp_enqueue_script('media-editor');
        wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);

        wp_enqueue_script('media-audiovideo');
        wp_enqueue_style('media-views');

        if (OLZ_ISADMIN) {
            wp_enqueue_script('mce-view');
            wp_enqueue_script('image-edit');
        }

        wp_enqueue_style('imgareaselect');
        wp_plupload_default_settings();

        require_once ABSPATH . WPINC . '/media-template.php';
        add_action('admin_footer', 'wp_print_media_templates');
        add_action('wp_footer', 'wp_print_media_templates');
        add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');

        /**
         * Fires at the conclusion of wp_enqueue_media_olz().
         *
         * @since WordPress 3.5.0
         */
        do_action('wp_enqueue_media_olz');
    }
}