<?php

//===================================================wizedesign==
//  MEDIA UPLOADER
//===============================================================

if (is_admin()) {
    
    // Load additional css and js for image uploads on the Options Framework page
    $of_page = 'toplevel_page_options-framework';
    add_action("admin_print_styles-$of_page", 'optionsframework_mlu_css', 0);
    add_action("admin_print_scripts-$of_page", 'optionsframework_mlu_js', 0);
}

/**
 * Sets up a custom post type to attach image to.  This allows us to have
 * individual galleries for different uploaders.
 */

if (!function_exists('optionsframework_mlu_init')) {
    function optionsframework_mlu_init() {
        register_post_type('optionsframework', array(
            'labels' => array(
                'name' => 'Options Framework Internal Container'
            ),
            'public' => true,
            'show_ui' => false,
            'capability_type' => 'post',
            'hierarchical' => false,
            'rewrite' => false,
            'supports' => array(
                'title',
                'editor'
            ),
            'query_var' => false,
            'can_export' => true,
            'show_in_nav_menus' => false
        ));
    }
}

/**
 * Adds the Thickbox CSS file and specific loading and button images to the header
 * on the pages where this function is called.
 */

if (!function_exists('optionsframework_mlu_css')) {
    
    function optionsframework_mlu_css() {
        
        $_html = '';
        $_html .= '<link rel="stylesheet" href="' . esc_url(get_option('siteurl')) . '/' . WPINC . '/js/thickbox/thickbox.css" type="text/css" media="screen" />' . "\n";
        $_html .= '<script type="text/javascript">
                var tb_pathToImage = "' . get_option('siteurl') . '/' . WPINC . '/js/thickbox/loadingAnimation.gif";
            var tb_closeImage = "' . get_option('siteurl') . '/' . WPINC . '/js/thickbox/tb-close.png";
            </script>' . "\n";
        
        echo $_html;
        
    }
}

/**
 * Registers and enqueues (loads) the necessary JavaScript file for working with the
 * Media Library-driven AJAX File Uploader Module.
 */

if (!function_exists('optionsframework_mlu_js')) {
    
    function optionsframework_mlu_js() {
        
        // Registers custom scripts for the Media Library AJAX uploader.
        wp_register_script('of-medialibrary-uploader', get_template_directory_uri() . '/includes/admin/js/of-medialibrary-uploader.js', array(
            'jquery',
            'thickbox'
        ));
        wp_enqueue_script('of-medialibrary-uploader');
        wp_enqueue_script('media-upload');
    }
    
}

/**
 * Media Uploader Using the WordPress Media Library.
 *
 * Parameters:
 * - string $_id - A token to identify this field (the name).
 * - string $_value - The value of the field, if present.
 * - string $_mode - The display mode of the field.
 * - string $_desc - An optional description of the field.
 * - int $_postid - An optional post id (used in the meta boxes).
 *
 * Dependencies:
 * - optionsframework_mlu_get_silentpost()
 */

if (!function_exists('optionsframework_medialibrary_uploader')) {
    
    function optionsframework_medialibrary_uploader($_id, $_value, $_mode = 'full', $_desc = '', $_postid = 0, $_name = '') {
        
        $optionsframework_settings = get_option('optionsframework');
        
        // Gets the unique option id
        $option_name = $optionsframework_settings['id'];
        
        $output = '';
        $id     = '';
        $class  = '';
        $int    = '';
        $value  = '';
        $name   = '';
        
        $id  = strip_tags(strtolower($_id));
        // Change for each field, using a "silent" post. If no post is present, one will be created.
        $int = optionsframework_mlu_get_silentpost($id);
        
        // If a value is passed and we don't have a stored value, use the value that's passed through.
        if ($_value != '' && $value == '') {
            $value = $_value;
        }
        
        if ($_name != '') {
            $name = $option_name . '[' . $id . '][' . $_name . ']';
        } else {
            $name = $option_name . '[' . $id . ']';
        }
        
        if ($value) {
            $class = ' has-file';
        }
        $output .= '<input id="' . esc_attr($id) . '" class="upload' . $class . '" type="text" name="' . esc_attr($name) . '" value="' . esc_attr($value) . '" />' . "\n";
        $output .= '<input id="upload_' . esc_attr($id) . '" class="upload_button button" type="button" value="' . esc_attr('Upload', 'sowe') . '" rel="' . $int . '" />' . "\n";
        
        if ($_desc != '') {
            $output .= '<span class="of_metabox_desc">' . $_desc . '</span>' . "\n";
        }
        
        $output .= '<div class="screenshot" id="' . esc_attr($id) . '_image">' . "\n";
        
        if ($value != '') {
            $remove = '<a href="javascript:(void);" class="mlu_remove button">Remove</a>';
            $image  = preg_match('/(^.*\.jpg|jpeg|png|gif|ico*)/i', $value);
            if ($image) {
                $output .= '<img src="' . esc_url($value) . '" alt="" />' . $remove . '';
            } else {
                $parts = explode("/", $value);
                for ($i = 0; $i < sizeof($parts); ++$i) {
                    $title = $parts[$i];
                }
                
                // No output preview if it's not an image.
                $output .= '';
                
                // Standard generic output if it's not an image.
                $title = __('View File', 'optionsframework');
                $output .= '<div class="no_image"><span class="file_link"><a href="' . esc_url($value) . '" target="_blank" rel="external">' . $title . '</a></span>' . $remove . '</div>';
            }
        }
        $output .= '</div>' . "\n";
        return $output;
    }
}

/**
 * Uses "silent" posts in the database to store relationships for images.
 * This also creates the facility to collect galleries of, for example, logo images.
 *
 * Return: $_postid.
 *
 * If no "silent" post is present, one will be created with the type "optionsframework"
 * and the post_name of "of-$_token".
 *
 * Example Usage:
 * optionsframework_mlu_get_silentpost ( 'of_logo' );
 */

if (!function_exists('optionsframework_mlu_get_silentpost')) {
    
    function optionsframework_mlu_get_silentpost($_token) {
        
        global $wpdb;
        $_id = 0;
        
        // Check if the token is valid against a whitelist.
        // $_whitelist = array( 'of_logo', 'of_custom_favicon', 'of_ad_top_image' );
        // Sanitise the token.
        
        $_token = strtolower(str_replace(' ', '_', $_token));
        
        // if ( in_array( $_token, $_whitelist ) ) {
        if ($_token) {
            
            // Tell the function what to look for in a post.
            
            $_args = array(
                'post_type' => 'optionsframework',
                'post_name' => 'of-' . $_token,
                'post_status' => 'draft',
                'comment_status' => 'closed',
                'ping_status' => 'closed'
            );
            
            // Look in the database for a "silent" post that meets our criteria.
            $query = 'SELECT ID FROM ' . $wpdb->posts . ' WHERE post_parent = 0';
            foreach ($_args as $k => $v) {
                $query .= ' AND ' . $k . ' = "' . $v . '"';
            } // End FOREACH Loop
            
            $query .= ' LIMIT 1';
            $_posts = $wpdb->get_row($query);
            
            // If we've got a post, loop through and get it's ID.
            if (count($_posts)) {
                $_id = $_posts->ID;
            } else {
                
                // If no post is present, insert one.
                // Prepare some additional data to go with the post insertion.
                $_words     = explode('_', $_token);
                $_title     = join(' ', $_words);
                $_title     = ucwords($_title);
                $_post_data = array(
                    'post_title' => $_title
                );
                $_post_data = array_merge($_post_data, $_args);
                $_id        = wp_insert_post($_post_data);
            }
        }
        return $_id;
    }
}

/**
 * Trigger code inside the Media Library popup.
 */

if (!function_exists('optionsframework_mlu_insidepopup')) {
    
    function optionsframework_mlu_insidepopup() {
        
        if (isset($_REQUEST['is_optionsframework']) && $_REQUEST['is_optionsframework'] == 'yes') {
            
            add_action('admin_head', 'optionsframework_mlu_js_popup');
            add_filter('media_upload_tabs', 'optionsframework_mlu_modify_tabs');
        }
    }
}

if (!function_exists('optionsframework_mlu_js_popup')) {
    
    function optionsframework_mlu_js_popup() {
        
        $_of_title = $_REQUEST['of_title'];
        if (!$_of_title) {
            $_of_title = 'file';
        } // End IF Statement
?>
        <script type="text/javascript">
        <!--
        jQuery(function($) {

                jQuery.noConflict();

                // Change the title of each tab to use the custom title text instead of "Media File".
                $( 'h3.media-title' ).each ( function () {
                        var current_title = $( this ).html();
                        var new_title = current_title.replace( 'media file', '<?php
        echo $_of_title;
?>' );
                        $( this ).html( new_title );

                } );

                // Change the text of the "Insert into Post" buttons to read "Use this File".
                $( '.savesend input.button[value*="Insert into Post"], .media-item #go_button' ).attr( 'value', 'Use this File' );

                // Hide the "Insert Gallery" settings box on the "Gallery" tab.
                $( 'div#gallery-settings' ).hide();

                // Preserve the "is_optionsframework" parameter on the "delete" confirmation button.
                $( '.savesend a.del-link' ).click ( function () {

                        var continueButton = $( this ).next( '.del-attachment' ).children( 'a.button[id*="del"]' );
                        var continueHref = continueButton.attr( 'href' );
                        continueHref = continueHref + '&is_optionsframework=yes';
                        continueButton.attr( 'href', continueHref );

                } );

        });
        -->
        </script>
<?php
    }
}

/**
 * Triggered inside the Media Library popup to modify the title of the "Gallery" tab.
 */

if (!function_exists('optionsframework_mlu_modify_tabs')) {
    
    function optionsframework_mlu_modify_tabs($tabs) {
        $tabs['gallery'] = str_replace('Gallery', 'Previously Uploaded', $tabs['gallery']);
        return $tabs;
    }
}