Your IP : 216.73.216.224


Current Path : /var/www/html/administrator/components/com_jdownloads/src/Helper/
Upload File :
Current File : /var/www/html/administrator/components/com_jdownloads/src/Helper/pluploadscript.php

<?php
/**
 * @package jDownloads
 * @version 4.0  
 * @copyright (C) 2007 - 2022 - Arno Betz - www.jdownloads.com
 * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.txt
 * 
 * jDownloads is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

/*
# This script is original from the component com_mediamu and is only modified to use it with jDownloads 
# ------------------------------------------------------------------------
@author Ljubisa - ljufisha.blogspot.com
@copyright Copyright (C) 2012 ljufisha.blogspot.com. All Rights Reserved.
@license - http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL
Technical Support: http://ljufisha.blogspot.com
*/

namespace JDownloads\Component\JDownloads\Administrator\Helper;

\defined("_JEXEC") or die();

use Joomla\CMS\Language\Text;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Session\Session;

class PLUploadScript
{

	public  $mediaRoot;
	public  $runtime;
    public  $runtimeScript;
        
	private $_maxFileSize;
	private $_chunkSize;
    private $_chunkUnit;
	private $_rename; //bool
	private $_uniqueNames; //bool
	private $_imageFilter;
	private $_otherFilesFilter;
	private $_resize; //bool
	private $_resizeWidth;
	private $_resizeHeight;
	private $_resizeQuality;
        
	private $_SCRIPT;

    /**
     *
     * @param string $PLdataDir Root folder for the script
     *
     */
	public function __construct( $PLdataDir )
	{
		$this->mediaRoot = $PLdataDir;
		$this->_setParams();
		$this->_buildScript();
	}
        
    /**
     * 
     * Properly set parameters for JavaScript usage
     * 
     */
	private function _setParams()
	{
        $params = ComponentHelper::getParams('com_jdownloads');
        
        //runtimes
        $allRuntimes                    = 'html5,flash,gears,silverlight,browserplus,html4';
        $this->runtimeScript            = $params->get('plupload_runtime');
        $this->runtime                  = $this->runtimeScript == 'full' ? $allRuntimes : $this->runtimeScript;
        //default 1MB
        $this->_maxFileSize             = $params->get('plupload_max_file_size');
        //chunk upload
		$this->_chunkSize 		        = $params->get('plupload_chunk_size');
        $this->_chunkUnit               = $params->get('plupload_chunk_unit');
        $this->_chunkUnit               = strtolower($this->_chunkUnit);
        //file rename
		$this->_rename 			        = ($params->get('plupload_rename') == 1) ? 'true' : 'false';
        //file filters
		$imageFilter                    = $params->get('plupload_image_file_extensions');
        $this->_imageFilter             = $this->_cleanOption($imageFilter);
		$otherFilesFilter               = $params->get('plupload_other_file_extensions');
        $this->_otherFilesFilter        = $this->_cleanOption($otherFilesFilter);
        //generate unique file names
		$this->_uniqueNames		        = $params->get('plupload_unique_names') == 1 ? 'true' : 'false';
        //image resizing
        $this->_resize 			        = $params->get('plupload_enable_image_resizing') == 0 ? false : true;
        $this->_resizeWidth 		    = $params->get('plupload_resize_width');  // '640' default);
		$this->_resizeHeight		    = $params->get('plupload_resize_height'); // '480' default;
		$this->_resizeQuality		    = $params->get('plupload_resize_quality'); // '90' default;
	}
        
    /**
     * Sets up the JavaScript code with component parameters 
     * 
     * @return void
     */
	private function _buildScript()
	{
		$l_resize           = ""; //script resize line
		$l_chunk		    = ""; //script chuk_size line
		$l_flash_swf_url 	= "flash_swf_url : '" . $this->mediaRoot . "js/Moxie.swf',"; //script flash swf url line
		$l_silverlight_xap	= "silverlight_xap_url: '" . $this->mediaRoot . "js/Moxie.xap',"; //script silverlight xap line
                
		if($this->_resize)
                {
                    $l_resize = "resize : {width : " . $this->_resizeWidth . ", height : " . $this->_resizeHeight . ", quality : " . $this->_resizeQuality . "},";
		}

		if($this->_chunkSize !== 0 || $this->_chunkSize !== "") 
                {
                    $l_chunk = "chunk_size : '" . $this->_chunkSize . $this->_chunkUnit . "',";
		}
                
                ob_start();
                
        ?>


        $(function() {

                $('a#dismiss').click(function () {
                    $('#system-message-container').html('');
                });
                
                function handleUpStatus(up, file, info, chunk) {
                    // Called when a file or chunk has finished uploading
                    var rspObj = $.parseJSON(info.response);
                    var statusMsg = '';
                    var fileString = '';
                    var spanClass = '';

                    if(rspObj.error == 1) {
                        $('#' + file.id).attr('class', 'plupload_failed');
                        file.hint = rspObj.msg;
                        file.status = plupload.FAILED;
                        file.percent = 0;

                        up.total.size-= file.size;
                        up.total.percent-=100;
                        up.total.uploaded-=1;
                        spanClass = 'failed_uploading';
                    } else {
                        $('#' + file.id).attr('class', 'plupload_done');
                        file.status = plupload.DONE;
                        spanClass = 'success_uploading';
                    }
                    
                    statusMsg+= '<span class="' + spanClass + '">';
                    statusMsg+= ' Status: ';
                    statusMsg+= (file.status == plupload.DONE) ? 'DONE' : 'FAILED ';
                    statusMsg+= ' Code: ' + rspObj.code + ' : '+ rspObj.msg;
                    statusMsg+= '</span>';

                    fileString+= ' Id: ' + file.id + ' Name: ' + file.name + ' Size: ' + file.size + ' Loaded: ' + file.percent + '% ';
                    fileString+= statusMsg;
                    if(!chunk){
                        log('<b>[FileUploaded]</b> ' + fileString);
                    } else {
                        log('<b>[ChunkUploaded]</b> File:' + fileString);
                    }
                    
                }

	        function ajaxReq(dataString, action) {

		        var msgCont = $('#system-message-container');
		        msgCont.html('<span class="loading"></span>');

		        $.ajax({
			        type: 'POST',  
			        url: action, 
			        data: dataString,
			        dataType : 'json',
			        success: function(response) {

                                        msgCont.html(' ');
                                        var msgHTML = '';
                                                
				        if(response.error == 1) {
					        msgHTML+= '<dl id="system-message">';
					        msgHTML+= '<dt class="error">Error</dt>';
					        msgHTML+= '<dd class="error message">';
					        msgHTML+= '<ul><li>' + response.msg + '</li></ul>';
					        msgHTML+= '</dd>';
					        msgHTML+= '</dl>';
				        } else {
					        msgHTML+= '<dl id="system-message">';
					        msgHTML+= '<dt class="message">Error</dt>';
					        msgHTML+= '<dd class="message message">';
					        msgHTML+= '<ul><li>' + response.msg + '</li></ul>';
					        msgHTML+= '</dd>';
					        msgHTML+= '</dl>';
				        }
                                        window.frames[0].location.reload();
				        msgCont.html(msgHTML);
			        }  
		        });
	        }
	        //init uploader
	        function initUploader() {
		        $("#uploader").pluploadQueue({
			        // General settings
			        runtimes : '<?php echo $this->runtime ?>',
			        url : 'index.php?option=com_jdownloads&no_html=1&task=uploads.upload&<?php echo Session::getFormToken()  ?>=1',
			        <?php echo $l_chunk ?>
					
			        rename : <?php echo $this->_rename ?>,
			        unique_names : <?php echo $this->_uniqueNames ?>,
					dragdrop: true,
					filters : {
						// Maximum file size
						max_file_size : '<?php echo $this->_maxFileSize  ?>mb',
						// Specify what files to browse for
						mime_types: [
							{title : "Image files", extensions : "<?php echo $this->_imageFilter ?>"},
							{title : "Other files", extensions : "<?php echo $this->_otherFilesFilter ?>"}
						]
					},
					<?php echo $l_resize ?>
					// Flash settings
			        <?php echo $l_flash_swf_url ?>
			        // Silverlight settings
			        <?php echo $l_silverlight_xap  ?>

					preinit : {
							Init: function(up, info) {
								log('[Init]', 'Info:', info, 'Features:', up.features);
							},
				 
							UploadFile: function(up, file) {
								log('[UploadFile]', file);
				 
								// You can override settings before the file is uploaded
								// up.setOption('url', 'upload.php?id=' + file.id);
								// up.setOption('multipart_params', {param1 : 'value1', param2 : 'value2'});
							}
						},

					// Post init events, bound after the internal events
					init : {
						PostInit: function() {
							// Called after initialization is finished and internal event handlers bound
							log('[PostInit]');
							 },
			 
						Browse: function(up) {
							// Called when file picker is clicked
							log('[Browse]');
						},
			 
						Refresh: function(up) {
							// Called when the position or dimensions of the picker change
							log('[Refresh]');
						},
			  
                        StateChanged: function(up) {
                            // Called when the state of the queue is changed
                            if(up.state == plupload.STARTED) {
                                //disable navigation
                                $('#dirbroswer').hide();
                                                        
                                $('div#upload_in_progress').addClass('upload_in_progress');
                                $('div#upload_in_progress').html('<h5>Upload in progress...</h5>');
                                // Add stop button
                                var stopBtn = document.createElement('a');
                                stopBtn.className = 'plupload_button plupload_stop';
                                stopBtn.id = 'plupload_stop';
                                stopBtn.innerHTML = '<?php echo addslashes(Text::_('COM_JDOWNLOADS_UPLOADER_STOP_UPLOAD'))  ?>';
                                stopBtn.href = '#',
                                stopBtn.onclick = function (up) {
                                    up.stop();
                                }
                                
                                $('.plupload_filelist_footer').prepend(stopBtn);
                                
                             }

                            if(up.state == plupload.STOPPED) {
                                //enable navigation and reload iframe
                                $('div#upload_in_progress').removeClass('upload_in_progress');
                                $('div#upload_in_progress').html('');
                                $('#dirbroswer').show();
                                                        
                                //window.frames[0].location.reload();

                                //add refresh uploader button
                                var refreshBtn = document.createElement('a');
                                refreshBtn.className = 'plupload_button plupload_refresh';
                                refreshBtn.id = 'plupload_refresh';
                                refreshBtn.innerHTML = '<?php echo addslashes(Text::_('COM_JDOWNLOADS_UPLOADER_REFRESH_UPLOADER'))  ?>';
                                refreshBtn.href = '#',
                                refreshBtn.onclick = function (up) {
                                    initUploader();
                                }
                                
                                $('.plupload_filelist_footer').prepend(refreshBtn);
                                
                            }
                                                log('<b>[StateChanged]</b>', up.state == plupload.STARTED ? "STARTED" : "STOPPED");  
                        },						
                        
						QueueChanged: function(up) {
							// Called when queue is changed by adding or removing files
							log('[QueueChanged]');
						},
			 
						OptionChanged: function(up, name, value, oldValue) {
							// Called when one of the configuration options is changed
							log('[OptionChanged]', 'Option Name: ', name, 'Value: ', value, 'Old Value: ', oldValue);
						},
			 
						BeforeUpload: function(up, file) {
							// Called right before the upload for a given file starts, can be used to cancel it if required
							log('[BeforeUpload]', 'File: ', file);
						},
			  
						UploadProgress: function(up, file) {
							// Called while file is being uploaded
							log('[UploadProgress]', 'File:', file, "Total:", up.total);
						},
			 
						FileFiltered: function(up, file) {
							// Called when file successfully files all the filters
							log('[FileFiltered]', 'File:', file);
						},
			  
						FilesAdded: function(up, files) {
							// Called when files are added to queue
							log('[FilesAdded]');
			  
							plupload.each(files, function(file) {
								log('  File:', file);
							});
						},
			  
						FilesRemoved: function(up, files) {
							// Called when files are removed from queue
							log('[FilesRemoved]');
			  
							plupload.each(files, function(file) {
								log('  File:', file);
							});
						},
			  
						FileUploaded: function(up, file, info) {
							// Called when file has finished uploading
							log('[FileUploaded] File:', file, "Info:", info);
						},
			  
						ChunkUploaded: function(up, file, info) {
							// Called when file chunk has finished uploading
							log('[ChunkUploaded] File:', file, "Info:", info);
						},
			 
						UploadComplete: function(up, files) {
							// Called when all files are either uploaded or failed
							log('[UploadComplete]');
						},
			 
						Destroy: function(up) {
							// Called when uploader is destroyed
							log('[Destroy] ');
						},
			  
						Error: function(up, args) {
							// Called when error occurs
							log('[Error] ', args);
						}
					}
				});
	        }
	        //log events
			function log() {
					var str = "";
			 
					plupload.each(arguments, function(arg) {
						var row = "";
			 
						if (typeof(arg) != "string") {
							plupload.each(arg, function(value, key) {
								// Convert items in File objects to human readable form
								if (arg instanceof plupload.File) {
									// Convert status to human readable
									switch (value) {
										case plupload.QUEUED:
											value = 'QUEUED';
											break;
			 
										case plupload.UPLOADING:
											value = 'UPLOADING';
											break;
			 
										case plupload.FAILED:
											value = 'FAILED';
											break;
			 
										case plupload.DONE:
											value = 'DONE';
											break;
									}
								}
			 
								if (typeof(value) != "function") {
									row += (row ? ', ' : '') + key + '=' + value;
								}
							});
			 
							str += row + " ";
						} else {
							str += arg + " ";
						}
					});

                        $('#log').prepend(str + '<span class="log_sep"></span>');
	        }	



	        // show/hide uploader log
	        $("#log_btn").click(function () {
		        $("#log").slideToggle('slow');
	        });

	        //add language support and initialize uploader
	        initUploader();
        });
        <?php
            $script = ob_get_contents();
            ob_clean();
            $this->_SCRIPT = $script;
	}
        
    /**
     * 
     * Get the dependency Script
     * 
     * @return string JavaScript code
     */
	public function getScript()
	{
		return $this->_SCRIPT;
	}
        
    /**
     * Clean Comma Separated Option
     * @param string $string Option to be cleaned
     * @return string
     */
	private function _cleanOption( $string )
	{
            return trim($string);
	}

}

?>