/** * media_browser function. * * @access public * @return void */ public function media_browser() { // Enqueue scripts and styles for panel wp_enqueue_style('download_monitor_admin_css', WP_DLM::get_plugin_url() . '/assets/css/admin.css', array('dashicons')); wp_enqueue_script('common'); wp_enqueue_style('global'); wp_enqueue_style('wp-admin'); wp_enqueue_style('colors'); wp_enqueue_script('plupload-all'); echo '<!DOCTYPE html><html lang="en"><head><title>' . __('Insert Download', 'download-monitor') . '</title><meta charset="utf-8" />'; do_action('admin_print_styles'); do_action('admin_print_scripts'); do_action('admin_head'); echo '<body id="insert-download" class="wp-core-ui">'; ?> <h2 class="nav-tab-wrapper"> <a href="#insert-shortcode" class="nav-tab nav-tab-active"><?php _e('Insert Shortcode', 'download-monitor'); ?> </a><a href="#quick-add" class="nav-tab"><?php _e('Quick-add download', 'download-monitor'); ?> </a> </h2> <?php // Handle quick-add form if (!empty($_POST['download_url']) && !empty($_POST['download_title']) && wp_verify_nonce($_POST['quick-add-nonce'], 'quick-add')) { $url = stripslashes($_POST['download_url']); $title = sanitize_text_field(stripslashes($_POST['download_title'])); $version = sanitize_text_field(stripslashes($_POST['download_version'])); try { $download = array('post_title' => $title, 'post_content' => '', 'post_status' => 'publish', 'post_author' => get_current_user_id(), 'post_type' => 'dlm_download'); $download_id = wp_insert_post($download); if ($download_id) { // Meta update_post_meta($download_id, '_featured', 'no'); update_post_meta($download_id, '_members_only', 'no'); update_post_meta($download_id, '_redirect_only', 'no'); update_post_meta($download_id, '_download_count', 0); // File $file = array('post_title' => 'Download #' . $download_id . ' File Version', 'post_content' => '', 'post_status' => 'publish', 'post_author' => get_current_user_id(), 'post_parent' => $download_id, 'post_type' => 'dlm_download_version'); $file_id = wp_insert_post($file); if (!$file_id) { throw new Exception(__('Error: File was not created.', 'download-monitor')); } // File Manager $file_manager = new DLM_File_Manager(); // Meta update_post_meta($file_id, '_version', $version); update_post_meta($file_id, '_filesize', $file_manager->get_file_size($url)); update_post_meta($file_id, '_files', $file_manager->json_encode_files(array($url))); // Hashes $hashes = $file_manager->get_file_hashes($url); // Set hashes update_post_meta($file_id, '_md5', $hashes['md5']); update_post_meta($file_id, '_sha1', $hashes['sha1']); update_post_meta($file_id, '_crc32', $hashes['crc32']); // Success message echo '<div class="updated"><p>' . __('Download successfully created.', 'download-monitor') . '</p></div>'; } else { throw new Exception(__('Error: Download was not created.', 'download-monitor')); } } catch (Exception $e) { echo '<div class="error"><p>' . $e->getMessage() . "</p></div>"; } } // Get all downloads $downloads = get_posts(array('post_status' => 'publish', 'post_type' => 'dlm_download', 'orderby' => 'ID', 'posts_per_page' => -1)); ?> <form id="insert-shortcode"> <fieldset> <legend><?php _e('Choose a download', 'download-monitor'); ?> :</legend> <?php $limit = 10; $page = isset($_GET['paged']) ? absint($_GET['paged']) : 1; $dlm_query = new WP_Query(array('post_status' => 'publish', 'post_type' => 'dlm_download', 'posts_per_page' => $limit, 'offset' => ($page - 1) * $limit)); while ($dlm_query->have_posts()) { $dlm_query->the_post(); $download = new DLM_Download($dlm_query->post->ID); echo '<label><input name="download_id" class="radio" type="radio" value="' . absint($download->id) . '" /> #' . $download->id . ' – ' . $download->get_the_title() . ' – ' . $download->get_the_filename() . '</label>'; } if ($dlm_query->max_num_pages > 1) { echo paginate_links(apply_filters('download_monitor_pagination_args', array('base' => str_replace(999999999, '%#%', get_pagenum_link(999999999, false)), 'format' => '', 'current' => $page, 'total' => $dlm_query->max_num_pages, 'prev_text' => '←', 'next_text' => '→', 'type' => 'list', 'end_size' => 3, 'mid_size' => 3))); } ?> </fieldset> <p> <label for="template_name"><?php _e('Template', 'download-monitor'); ?> :</label> <input type="text" id="template_name" value="" class="input" placeholder="<?php _e('Template Name', 'download-monitor'); ?> "/> <span class="description"> <?php _e('Leaving this blank will use the default <code>content-download.php</code> template file. If you enter, for example, <code>image</code>, the <code>content-download-image.php</code> template will be used instead.', 'download-monitor'); ?> </span> </p> <p> <input type="button" class="button insert_download button-primary button-large" value="<?php _e('Insert Shortcode', 'download-monitor'); ?> "/> </p> </form> <form id="quick-add" action="" method="post"> <!-- Uploader section --> <div id="plupload-upload-ui" class="hide-if-no-js"> <div id="drag-drop-area" style="height:240px"> <div class="drag-drop-inside"> <p class="drag-drop-info"><?php _e('Drop file here', 'download-monitor'); ?> </p> <p><?php echo _x('or', 'Drop file here *or* select file', 'download-monitor'); ?> </p> <p class="drag-drop-buttons"><input id="plupload-browse-button" type="button" value="<?php esc_attr_e('Select File', 'download-monitor'); ?> " class="button"/></p> </div> </div> <p><a href="#" class="add_manually"><?php _e('Enter URL manually', 'download-monitor'); ?> →</a> </p> </div> <div id="quick-add-details" style="display:none"> <p> <label for="download_url"><?php _e('Download URL', 'download-monitor'); ?> :</label> <input type="text" name="download_url" id="download_url" value="" class="download_url input" placeholder="<?php _e('Required URL', 'download-monitor'); ?> "/> </p> <p> <label for="download_title"><?php _e('Download Title', 'download-monitor'); ?> :</label> <input type="text" name="download_title" id="download_title" value="" class="download_title input" placeholder="<?php _e('Required title', 'download-monitor'); ?> "/> </p> <p> <label for="download_version"><?php _e('Version', 'download-monitor'); ?> :</label> <input type="text" name="download_version" id="download_version" value="" class="input" placeholder="<?php _e('Optional version number', 'download-monitor'); ?> "/> </p> <p> <input type="submit" class="button button-primary button-large" value="<?php _e('Save Download', 'download-monitor'); ?> "/> <?php wp_nonce_field('quick-add', 'quick-add-nonce'); ?> </p> </div> </form> <script type="text/javascript"> jQuery( function () { jQuery( '.nav-tab-wrapper a' ).click( function () { jQuery( '#insert-shortcode, #quick-add' ).hide(); jQuery( jQuery( this ).attr( 'href' ) ).show(); jQuery( 'a.nav-tab-active' ).removeClass( 'nav-tab-active' ); jQuery( this ).addClass( 'nav-tab-active' ); return false; } ); jQuery( '#quick-add' ).hide(); jQuery( 'body' ).on( 'click', '.insert_download', function () { var win = window.dialogArguments || opener || parent || top; var download_id = jQuery( 'input[name="download_id"]:checked' ).val(); var template = jQuery( '#template_name' ).val(); var shortcode = '[download id="' + download_id + '"'; if ( template ) shortcode = shortcode + ' template="' + template + '"'; shortcode = shortcode + ']'; win.send_to_editor( shortcode ); return false; } ); jQuery( '.add_manually' ).click( function () { jQuery( '#plupload-upload-ui' ).slideUp(); jQuery( '#quick-add-details' ).slideDown(); return false; } ); <?php $plupload_init = array('runtimes' => 'html5,silverlight,flash,html4', 'browse_button' => 'plupload-browse-button', 'container' => 'plupload-upload-ui', 'drop_element' => 'drag-drop-area', 'file_data_name' => 'async-upload', 'multiple_queues' => false, 'max_file_size' => wp_max_upload_size() . 'b', 'url' => admin_url('admin-ajax.php'), 'flash_swf_url' => includes_url('js/plupload/plupload.flash.swf'), 'silverlight_xap_url' => includes_url('js/plupload/plupload.silverlight.xap'), 'filters' => array(array('title' => __('Allowed Files'), 'extensions' => '*')), 'multipart' => true, 'urlstream_upload' => true, 'multipart_params' => array('_ajax_nonce' => wp_create_nonce('file-upload'), 'action' => 'download_monitor_insert_panel_upload', 'type' => 'dlm_download')); // we should probably not apply this filter, plugins may expect wp's media uploader... $plupload_init = apply_filters('plupload_init', $plupload_init); ?> // create the uploader and pass the config from above var uploader = new plupload.Uploader( <?php echo json_encode($plupload_init); ?> ); // checks if browser supports drag and drop upload, makes some css adjustments if necessary uploader.bind( 'Init', function ( up ) { var uploaddiv = jQuery( '#plupload-upload-ui' ); if ( up.features.dragdrop ) { uploaddiv.addClass( 'drag-drop' ); jQuery( '#drag-drop-area' ) .bind( 'dragover.wp-uploader', function () { uploaddiv.addClass( 'drag-over' ); } ) .bind( 'dragleave.wp-uploader, drop.wp-uploader', function () { uploaddiv.removeClass( 'drag-over' ); } ); } else { uploaddiv.removeClass( 'drag-drop' ); jQuery( '#drag-drop-area' ).unbind( '.wp-uploader' ); } } ); uploader.init(); // a file was added in the queue uploader.bind( 'FilesAdded', function ( up, files ) { var hundredmb = 100 * 1024 * 1024, max = parseInt( up.settings.max_file_size, 10 ); plupload.each( files, function ( file ) { if ( max > hundredmb && file.size > hundredmb && up.runtime != 'html5' ) { // file size error? } else { jQuery( '.drag-drop-inside' ).html( '<p><?php _e('Please wait...', 'download-monitor'); ?> </p>' ); } } ); up.refresh(); up.start(); } ); // a file was uploaded uploader.bind( 'FileUploaded', function ( up, file, response ) { jQuery( '#quick-add-details' ).find( 'input.download_url' ).val( response.response ); jQuery( '#quick-add-details' ).find( 'input.download_title' ).val( basename( response.response ) ); jQuery( '#plupload-upload-ui' ).slideUp(); jQuery( '#quick-add-details' ).slideDown(); } ); function basename( path ) { return path.split( '/' ).reverse()[ 0 ]; } } ); </script> <?php echo '</body></html>'; }
/** * Encode files for storage * * @deprecated 1.6.0 * * @param array $files * * @return string */ public function json_encode_files($files) { // Deprecated DLM_Debug_Logger::deprecated(__METHOD__); // File Manger $file_manager = new DLM_File_Manager(); // Return files return $file_manager->json_encode_files($files); }
/** * save function. * * @access public * * @param int $post_id * @param WP_Post $post * * @return void */ public function save_meta_boxes($post_id, $post) { global $wpdb; // Update options $_featured = isset($_POST['_featured']) ? 'yes' : 'no'; $_members_only = isset($_POST['_members_only']) ? 'yes' : 'no'; $_redirect_only = isset($_POST['_redirect_only']) ? 'yes' : 'no'; update_post_meta($post_id, '_featured', $_featured); update_post_meta($post_id, '_members_only', $_members_only); update_post_meta($post_id, '_redirect_only', $_redirect_only); $total_download_count = 0; // Process files if (isset($_POST['downloadable_file_id'])) { $downloadable_file_id = $_POST['downloadable_file_id']; $downloadable_file_menu_order = $_POST['downloadable_file_menu_order']; $downloadable_file_version = $_POST['downloadable_file_version']; $downloadable_file_urls = $_POST['downloadable_file_urls']; $downloadable_file_date = $_POST['downloadable_file_date']; $downloadable_file_date_hour = $_POST['downloadable_file_date_hour']; $downloadable_file_date_minute = $_POST['downloadable_file_date_minute']; $downloadable_file_download_count = $_POST['downloadable_file_download_count']; for ($i = 0; $i <= max(array_keys($downloadable_file_id)); $i++) { if (!isset($downloadable_file_id[$i])) { continue; } $file_id = absint($downloadable_file_id[$i]); $file_menu_order = absint($downloadable_file_menu_order[$i]); $file_version = strtolower(sanitize_text_field($downloadable_file_version[$i])); $file_date_hour = absint($downloadable_file_date_hour[$i]); $file_date_minute = absint($downloadable_file_date_minute[$i]); $file_date = sanitize_text_field($downloadable_file_date[$i]); $file_download_count = sanitize_text_field($downloadable_file_download_count[$i]); $files = array_filter(array_map('trim', explode("\n", $downloadable_file_urls[$i]))); if (!$file_id) { continue; } // Generate a useful post title $file_post_title = 'Download #' . $post_id . ' File Version'; // Generate date if (empty($file_date)) { $date = current_time('timestamp'); } else { $date = strtotime($file_date . ' ' . $file_date_hour . ':' . $file_date_minute . ':00'); } // Update $wpdb->update($wpdb->posts, array('post_status' => 'publish', 'post_title' => $file_post_title, 'menu_order' => $file_menu_order, 'post_date' => date('Y-m-d H:i:s', $date), 'post_date_gmt' => date('Y-m-d H:i:s', $date)), array('ID' => $file_id)); // File Manager $file_manager = new DLM_File_Manager(); // Update post meta update_post_meta($file_id, '_version', $file_version); update_post_meta($file_id, '_files', $file_manager->json_encode_files($files)); $filesize = -1; $main_file_path = current($files); if ($main_file_path) { $filesize = $file_manager->get_file_size($main_file_path); $hashes = $file_manager->get_file_hashes($main_file_path); update_post_meta($file_id, '_filesize', $filesize); update_post_meta($file_id, '_md5', $hashes['md5']); update_post_meta($file_id, '_sha1', $hashes['sha1']); update_post_meta($file_id, '_crc32', $hashes['crc32']); } else { update_post_meta($file_id, '_filesize', $filesize); update_post_meta($file_id, '_md5', ''); update_post_meta($file_id, '_sha1', ''); update_post_meta($file_id, '_crc32', ''); } if ($file_download_count !== '') { update_post_meta($file_id, '_download_count', absint($file_download_count)); $total_download_count += absint($file_download_count); } else { $total_download_count += absint(get_post_meta($file_id, '_download_count', true)); } do_action('dlm_save_downloadable_file', $file_id, $i); } } // Sync download_count update_post_meta($post_id, '_download_count', $total_download_count); // Delete transients delete_transient('dlm_file_version_ids_' . $post_id); do_action('dlm_save_metabox', $post_id, $post); }