450 lines
23 KiB
PHP
450 lines
23 KiB
PHP
<?php
|
|
/**
|
|
* This file contains all functions for the document manager
|
|
* @package teachpress\core
|
|
* @license http://www.gnu.org/licenses/gpl-2.0.html GPLv2 or later
|
|
* @since 5.0.0
|
|
*/
|
|
|
|
/**
|
|
* This class contains all functions for the document manager
|
|
* @package teachpress\core\ajax
|
|
* @since 5.0.0
|
|
*/
|
|
class TP_Document_Manager {
|
|
|
|
/**
|
|
* Inits the document manager
|
|
* @param int $course_id The course ID
|
|
* @param string $mode course or tinyMCE
|
|
* @since 5.0.0
|
|
*/
|
|
public static function init($course_id, $mode = 'course') {
|
|
self::get_interface($course_id, $mode);
|
|
self::print_scripts($course_id, $mode);
|
|
}
|
|
|
|
/**
|
|
* Returns the init values for plupload
|
|
* @param int $course_id The course ID
|
|
* @return array
|
|
* @since 5.0.0
|
|
* @access private
|
|
*/
|
|
private static function get_plupload_init_values ($course_id) {
|
|
return 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' => true,
|
|
'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('document-upload'),
|
|
'action' => 'tp_document_upload',
|
|
'course_id' => $course_id
|
|
),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Gets the interface of the document manager
|
|
* @param int $course_id The course ID
|
|
* @param string $mode course or tinyMCE
|
|
* @since 5.0.0
|
|
* @access private
|
|
*/
|
|
private static function get_interface ($course_id, $mode) {
|
|
?>
|
|
<div id="plupload-upload-ui" class="hide-if-no-js">
|
|
<div id="drag-drop-area">
|
|
<div class="drag-drop-inside">
|
|
<p class="drag-drop-info"><?php _e('Drop files here'); ?></p>
|
|
<p><?php _ex('or', 'Uploader: Drop files here - or - Select Files'); ?></p>
|
|
<p class="drag-drop-buttons"><input id="plupload-browse-button" type="button" value="<?php esc_attr_e('Select Files'); ?>" class="button" /></p>
|
|
</div>
|
|
</div>
|
|
<h3 id="document_headline"><?php _e('Documents','teachpress') ?></h3>
|
|
<div id="tp_add_headline">
|
|
<?php _e('Add headline','teachpress'); ?>
|
|
<input id="tp_add_headline_name" name="tp_add_headline_name" type="text" value="" style="width: 400px;"/>
|
|
<a id="tp_add_headline_button" class="button-secondary"><?php _e('Add','teachpress'); ?></a>
|
|
</div>
|
|
<ul class="tp_filelist" id="tp_sortable">
|
|
<?php
|
|
$documents = TP_Documents::get_documents($course_id);
|
|
$upload_dir = wp_upload_dir();
|
|
foreach ($documents as $row) {
|
|
$class = 'tp_file tp_file_headline';
|
|
$size = '';
|
|
$checkbox = '';
|
|
$name = '<span class="tp_file_name">' . stripslashes($row['name']) . '</span>';
|
|
if ( $row['path'] !== '' ) {
|
|
$class = 'tp_file';
|
|
$name = '<span class="tp_file_name"><i class="' . TP_Icons::get_class( $row['path'] ) . '"></i>' . stripslashes($row['name']) . '</span>';
|
|
$size = '<span class="tp_file_size">' . tp_convert_file_size($row['size']) . '</span>';
|
|
}
|
|
if ( $mode === 'tinyMCE' && $row['path'] !== '' ) {
|
|
$checkbox = '<input type="checkbox" name="tp_file_checkbox[]" id="tp_file_checkbox_' . $row['doc_id'] . '" class="tp_file_checkbox" data_1="' . esc_js($row['name']) . '" data_2="' . esc_url($upload_dir['baseurl'] . $row['path']) . '" value="' . $row['doc_id'] . '" />';
|
|
$name = '<label class="tp_file_label" for="tp_file_checkbox_' . $row['doc_id'] . '"><span class="tp_file_name">' . stripslashes($row['name']) . '</span></label>';
|
|
}
|
|
echo '<li class="' . $class . '" id="tp_file_' . $row['doc_id'] . '">' . $checkbox . $name . ' ' . $size . ' <span class="tp_file_actions"><a class="tp_file_view" href="' . $upload_dir['baseurl'] . $row['path'] . '" target="_blank">' . __('Show','teachpress') . '</a> | <a class="tp_file_edit" style="cursor:pointer;" document_id="' . $row['doc_id'] . '" >' . __('Edit','teachpress') . '</a> | <a class="tp_file_delete" style="cursor:pointer;" document_id="' . $row['doc_id'] . '" >' . __('Delete','teachpress') . '</a></span></li>';
|
|
}
|
|
?>
|
|
</ul>
|
|
</div>
|
|
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Gets the javascripts
|
|
* @param int $course_id The course ID
|
|
* @param string $mode course or tinyMCE
|
|
* @since 5.0.0
|
|
* @access private
|
|
*/
|
|
private static function print_scripts ($course_id, $mode) {
|
|
// we should probably not apply this filter, plugins may expect wp's media uploader...
|
|
$plupload_init = apply_filters('plupload_init', self::get_plupload_init_values ($course_id) ); ?>
|
|
|
|
<script type="text/javascript" charset="utf-8">
|
|
jQuery(document).ready(function($){
|
|
|
|
// 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 = $('#plupload-upload-ui');
|
|
|
|
if(up.features.dragdrop){
|
|
uploaddiv.addClass('drag-drop');
|
|
$('#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');
|
|
$('#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 {
|
|
$.get("<?php echo admin_url( 'admin-ajax.php' ) ;?>?action=teachpress&mimetype_input=" + file.name,
|
|
function(text){
|
|
<?php if ( $mode === 'tinyMCE' ) { ?>
|
|
$('.tp_filelist').append('<li class="tp_file" id="' + file.id + '"><input type="checkbox" name="tp_file_checkbox[]" id="tp_file_checkbox_' + file.id + '" disabled="disabled" class="tp_file_checkbox" data_1="' + file.name + '" data_2="" value=""/><label class="tp_file_label" for="tp_file_checkbox_' + file.id + '"><span class="tp_file_name"><i class="' + text + '"></i>' +
|
|
file.name + '</span></label> (<span class="tp_file_size">' + plupload.formatSize(0) + '/</span>' + plupload.formatSize(file.size) + ') ' + '<div class="tp_fileprogress"></div></li>');
|
|
<?php } else { ?>
|
|
$('.tp_filelist').append('<li class="tp_file" id="' + file.id + '"><span class="tp_file_name"><i class="' + text + '"></i>' +
|
|
file.name + '</span> (<span class="tp_file_size">' + plupload.formatSize(0) + '/</span>' + plupload.formatSize(file.size) + ') ' + '<div class="tp_fileprogress"></div></li>');
|
|
<?php } ?>
|
|
console.log(file);
|
|
});
|
|
|
|
}
|
|
});
|
|
|
|
up.refresh();
|
|
up.start();
|
|
});
|
|
|
|
// while a file is uploaded
|
|
uploader.bind('UploadProgress', function(up, file) {
|
|
$('#' + file.id + " .tp_fileprogress").width(file.percent + "%");
|
|
$('#' + file.id + " .tp_file_size").html(plupload.formatSize(parseInt(file.size * file.percent / 100)));
|
|
});
|
|
|
|
// a file was uploaded
|
|
uploader.bind('FileUploaded', function(up, file, response) {
|
|
|
|
// Check uploaded file info
|
|
console.log(response.response);
|
|
var response_splitted = response.response.split(" | ");
|
|
response_splitted[0] = parseInt(response_splitted[0]);
|
|
if ( isNaN( response_splitted[0] ) === true ) {
|
|
$('<div class="teachpress_message teachpress_message_red"><strong>' + response.response + '</strong></div>').prependTo(".wrap");
|
|
$('#' + file.id + " .tp_fileprogress").css( "background-color", "red" );
|
|
$('.teachpress_message').delay( 2400 ).fadeOut('slow');
|
|
return;
|
|
}
|
|
|
|
// Change DOM and update values
|
|
$('#' + file.id + " .tp_fileprogress").width("0%");
|
|
$('<span class="tp_file_actions"><a class="tp_file_view" href="' + response_splitted[2] + '" target="_blank"><?php _e('Show','teachpress'); ?></a> | <a class="tp_file_edit" style="cursor:pointer;" document_id="' + response_splitted[0] + '" ><?php _e('Edit','teachpress'); ?></a> | <a class="tp_file_delete" style="cursor:pointer;" document_id="' + response_splitted[0] + '" ><?php _e('Delete','teachpress'); ?></a></span>').appendTo('#' + file.id);
|
|
$('#' + file.id).attr("id","tp_file_" + response_splitted[0]);
|
|
$('#tp_file_checkbox_' + file.id).attr("value",response_splitted[0]);
|
|
$('#tp_file_checkbox_' + file.id).attr("data_2",response_splitted[2]);
|
|
$('#tp_file_checkbox_' + file.id).attr('disabled', false);
|
|
$('#tp_file_checkbox_' + file.id).attr("id","tp_file_checkbox_" + response_splitted[0]);
|
|
|
|
// Save new sort order
|
|
var data = $(this).sortable('serialize')+ '&action=teachpress';
|
|
$.post( "<?php echo admin_url( 'admin-ajax.php' ) ;?>", data );
|
|
|
|
});
|
|
|
|
});
|
|
|
|
</script>
|
|
|
|
<script type="text/javascript" charset="utf-8">
|
|
jQuery(document).ready(function($){
|
|
// Drag & Drop sorting
|
|
$( '#tp_sortable' ).sortable({
|
|
placeholder: "ui-state-highlight",
|
|
opacity:.5,
|
|
update: function (event, ui) {
|
|
var data = $(this).sortable('serialize')+ '&action=teachpress';
|
|
$.post( "<?php echo admin_url( 'admin-ajax.php' ) ;?>", data );
|
|
}
|
|
});
|
|
$( "#tp_sortable" ).disableSelection();
|
|
|
|
// Add headlines
|
|
$("body").on("click", "#tp_add_headline_button", function() {
|
|
var value = $("#tp_add_headline_name").val();
|
|
if ( value !== '' ) {
|
|
$.get("<?php echo admin_url( 'admin-ajax.php' ); ?>?action=teachpress&add_document=" + value + "&course_id=<?php echo $course_id; ?>",
|
|
function(new_doc_id){
|
|
new_doc_id = parseInt(new_doc_id);
|
|
$('.tp_filelist').append('<li class="tp_file tp_file_headline" id="tp_file_' + new_doc_id + '" document_id="' + new_doc_id + '"><span class="tp_file_name">' + value + '</span> ' + '</li>');
|
|
$('<span class="tp_file_actions"><a class="tp_file_edit" style="cursor:pointer;" document_id="' + new_doc_id + '" ><?php _e('Edit','teachpress'); ?></a> | <a class="tp_file_delete" style="cursor:pointer;" document_id="' + new_doc_id + '" ><?php _e('Delete','teachpress'); ?></a></span>').appendTo('#tp_file_' + new_doc_id);
|
|
$("#tp_add_headline_name").val('');
|
|
|
|
// Save new sort order
|
|
var data = $(this).sortable('serialize')+ '&action=teachpress';
|
|
$.post( "<?php echo admin_url( 'admin-ajax.php' ) ;?>", data );
|
|
});
|
|
}
|
|
});
|
|
|
|
// Sets a cookie
|
|
function setCookie(cname, cvalue, exdays) {
|
|
var d = new Date();
|
|
d.setTime(d.getTime() + (exdays*24*60*60*1000));
|
|
var expires = "expires="+d.toUTCString();
|
|
document.cookie = cname + "=" + cvalue + "; " + expires + "; path=<?php echo SITECOOKIEPATH; ?>";
|
|
}
|
|
|
|
// Gets a cookie
|
|
function getCookie(cname) {
|
|
var name = cname + "=";
|
|
var ca = document.cookie.split(';');
|
|
for(var i=0; i<ca.length; i++) {
|
|
var c = ca[i];
|
|
while (c.charAt(0)===' ') c = c.substring(1);
|
|
if (c.indexOf(name) !== -1) return c.substring(name.length, c.length);
|
|
}
|
|
return "";
|
|
}
|
|
|
|
// Checkboxes for file inserts (tinyMCE Document Manager only)
|
|
$("body").on( "click", ".tp_file_checkbox", function() {
|
|
var value = '';
|
|
// var tp_saved_cookie = getCookie("teachpress_data_store");
|
|
$(".tp_file_checkbox").each(function( index ) {
|
|
if ( $(this).prop('checked') ) {
|
|
value = value + '[name = {"' + $(this).attr("data_1") + '"}, url = {"' + $(this).attr("data_2") + '"}]:::';
|
|
}
|
|
});
|
|
setCookie("teachpress_data_store", value, 1);
|
|
});
|
|
|
|
// Edit documents: add menu
|
|
$("body").on( "click", ".tp_file_edit", function() {
|
|
var document_id = $(this).attr("document_id");
|
|
|
|
$.get("<?php echo admin_url( 'admin-ajax.php' ); ?>?action=teachpress&get_document_name=" + document_id,
|
|
function(text){
|
|
$("#tp_file_" + document_id).append('<div id="tp_file_edit_' + document_id + '"><input id="tp_file_edit_text_' + document_id + '" type="text" value="' + text + '" style="width:75%;" /><p><a class="button-primary tp_file_edit_save" document_id="' + document_id + '"><?php _e('Save'); ?></a> <a class="button-secondary tp_file_edit_cancel" document_id="' + document_id + '"><?php _e('Cancel'); ?></a></p></div>');
|
|
});
|
|
});
|
|
|
|
// Edit documents: cancel
|
|
$("body").on( "click", ".tp_file_edit_cancel", function() {
|
|
var document_id = $(this).attr("document_id");
|
|
$("#tp_file_edit_" + document_id).remove();
|
|
});
|
|
|
|
// Edit documents: save
|
|
$("body").on( "click", ".tp_file_edit_save", function() {
|
|
var document_id = $(this).attr("document_id");
|
|
var value = $("#tp_file_edit_text_" + document_id).val();
|
|
|
|
$.post( "<?php echo admin_url( 'admin-ajax.php' ) ;?>", { change_document: document_id, new_document_name: value, action: 'teachpress' });
|
|
$("#tp_file_" + document_id + " .tp_file_name").text(value);
|
|
$('#tp_file_checkbox_' + document_id).attr("data_1",value);
|
|
$("#tp_file_edit_" + document_id).remove();
|
|
|
|
});
|
|
|
|
// Delete documents
|
|
$("body").on( "click", ".tp_file_delete", function() {
|
|
var document_id = $(this).attr("document_id");
|
|
$("#tp_file_" + document_id).remove().hide();
|
|
$.get("<?php echo admin_url( 'admin-ajax.php' ) ;?>?action=teachpress&del_document=" + document_id,
|
|
function(text){
|
|
if ( text.search('true') !== -1 ) {
|
|
$('<div class="teachpress_message teachpress_message_green"><strong><?php _e('Removing successful','teachpress'); ?></strong></div>').prependTo(".wrap");
|
|
}
|
|
else {
|
|
$('<div class="teachpress_message teachpress_message_red"><strong><?php _e('Removing failed','teachpress'); ?></strong></div>').prependTo(".wrap");
|
|
}
|
|
$('.teachpress_message').delay( 2400 ).fadeOut('slow');
|
|
});
|
|
});
|
|
});
|
|
|
|
</script>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Returns the html header for the document manager window (tinyMCE)
|
|
* @since 6.0.0
|
|
* @access private
|
|
*/
|
|
private static function get_window_header() {
|
|
?>
|
|
<!DOCTYPE html>
|
|
<!--[if IE 8]>
|
|
<html xmlns="http://www.w3.org/1999/xhtml" class="ie8 wp-toolbar" lang="de-DE">
|
|
<![endif]-->
|
|
<!--[if !(IE 8) ]><!-->
|
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="de-DE" style="overflow: hidden;">
|
|
<!--<![endif]-->
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
|
<title>teachPress Document Manager</title>
|
|
<script type="text/javascript">
|
|
addLoadEvent = function(func){if(typeof jQuery!="undefined")jQuery(document).ready(func);else if(typeof wpOnload!='function'){wpOnload=func;}else{var oldonload=wpOnload;wpOnload=function(){oldonload();func();}}};
|
|
var pagenow = 'toplevel_page_teachpress/teachpress',
|
|
typenow = '',
|
|
adminpage = 'toplevel_page_teachpress-teachpress',
|
|
thousandsSeparator = '.',
|
|
decimalPoint = ',',
|
|
isRtl = 0;
|
|
</script>
|
|
<link rel="stylesheet" id="teachpress-document-manager-css" href="<?php echo plugins_url( 'styles/teachpress_document_manager.css', dirname( __FILE__ ) ) . '?ver=' . get_tp_version(); ?>" type="text/css" media="all" />
|
|
</head>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Returns the course selector for the document manager window (tinyMCE)
|
|
* @param int $course_id
|
|
* @since 6.0.0
|
|
* @access private
|
|
*/
|
|
private static function get_course_selector ($course_id) {
|
|
echo '<div id="tp_select_course">';
|
|
echo '<select name="sel_course_id">';
|
|
echo '<option value="">- ' . __('Select Course','teachpress') . ' -</option>';
|
|
|
|
// List of courses
|
|
$semester = get_tp_options('semester', '`setting_id` DESC');
|
|
foreach ( $semester as $row ) {
|
|
$courses = TP_Courses::get_courses( array('parent' => 0, 'semester' => $row->value) );
|
|
if ( count($courses) !== 0 ) {
|
|
echo '<optgroup label="' . $row->value . '">';
|
|
}
|
|
foreach ($courses as $course) {
|
|
$selected = ( $course_id == $course->course_id ) ? 'selected="selected"' : '';
|
|
echo '<option value="' . $course->course_id . '" ' . $selected . '>' . $course->name . ' (' . $course->semester . ')</option>/r/n';
|
|
}
|
|
if ( count($courses) > 0 ) {
|
|
echo '</optgroup>';
|
|
}
|
|
}
|
|
echo '</select>';
|
|
echo '<input type="submit" name="sel_course_submit" class="button-secondary" value="' . __('Select','teachpress') . '"/>';
|
|
echo '</div>';
|
|
}
|
|
|
|
/**
|
|
* Returns the window content of the document manager for the tinyMCE plugin
|
|
* @global type $current_user
|
|
* @since 6.0.0
|
|
* @access public
|
|
*/
|
|
public static function get_window () {
|
|
|
|
if ( is_user_logged_in() && current_user_can('use_teachpress') ) {
|
|
self::get_window_header();
|
|
|
|
// Load scripts and styles
|
|
wp_enqueue_script(array('jquery-ui-core', 'jquery-ui-datepicker', 'jquery-ui-resizable', 'jquery-ui-autocomplete', 'jquery-ui-sortable', 'jquery-ui-dialog', 'plupload'));
|
|
wp_enqueue_script('media-upload');
|
|
add_thickbox();
|
|
|
|
wp_enqueue_script('teachpress-standard', plugins_url( 'js/backend.js', dirname( __FILE__ ) ) );
|
|
|
|
wp_enqueue_style('teachpress.css', plugins_url( 'styles/teachpress.css', dirname( __FILE__ ) ) );
|
|
wp_enqueue_style('teachpress-jquery-ui.css', plugins_url( 'styles/jquery.ui.css', dirname( __FILE__ ) ) );
|
|
wp_enqueue_style('teachpress-jquery-ui-dialog.css', includes_url() . '/css/jquery-ui-dialog.min.css');
|
|
|
|
do_action( 'admin_print_scripts' );
|
|
do_action( 'admin_print_styles' );
|
|
|
|
global $current_user;
|
|
|
|
// Define post_id and course_id
|
|
$post_id = ( isset($_GET['post_id']) ) ? intval($_GET['post_id']) : 0;
|
|
$course_id = ( isset($_POST['sel_course_id']) ) ? intval($_POST['sel_course_id']) : 0;
|
|
|
|
// default
|
|
if ( $post_id !== 0 && $course_id === 0 ) {
|
|
$course_id = intval (TP_Courses::is_used_as_related_content($post_id) );
|
|
}
|
|
// For user's selection
|
|
else if ( $course_id !== 0 ) {
|
|
$post_id = TP_Courses::get_course_data($course_id, 'rel_page');
|
|
}
|
|
|
|
echo '<body>';
|
|
echo '<div class="wrap">';
|
|
echo '<form method="post">';
|
|
// course selector
|
|
self::get_course_selector($course_id);
|
|
|
|
if ( $course_id !== 0 ) {
|
|
$capability = TP_Courses::get_capability($course_id, $current_user->ID);
|
|
// check capabilities
|
|
if ( $capability !== 'owner' && $capability !== 'approved' ) {
|
|
get_tp_message(__('You have no capabilities to use this course','teachpress'), 'red');
|
|
}
|
|
else {
|
|
TP_Document_Manager::init($course_id, 'tinyMCE');
|
|
}
|
|
}
|
|
|
|
echo '</form>';
|
|
echo '</div>';
|
|
wp_footer();
|
|
}
|
|
echo '</body>';
|
|
echo '</html>';
|
|
}
|
|
|
|
}
|