All pastes #812419 Raw Edit

Meins

public text v1 · immutable
·published 2007-12-11 19:27 UTC
rendered paste body
<?php
/*
+--------------------------------------------------------------------------
|   =============================================
|   by Oliver Trebes
|   (c) 2006 - 2007 amplified webservices
|   =============================================
|   http://www.angelmedia.de
+--------------------------------------------------------------------------
|   > $Date$
|   > $Revision$
|   > $Author$
+--------------------------------------------------------------------------
|   > Filename:     xajaxUpload.inc.php
|   > Date started: Tue Nov 27 13:51:18 CET 2007
+--------------------------------------------------------------------------
*/



if (false == class_exists('xajaxPlugin') || false == class_exists('xajaxPluginManager'))
{

	if (false == class_exists('xajaxPlugin') )
	{
		//require_once( 'xajaxPlugin.inc.php' );
	}
		
	if (false == class_exists('xajaxPluginManager') )
	{
		require_once( $core. '\xajaxPluginManager.inc.php' );
	}
}
#

	//
/*	require_once( 'xajaxPlugin.inc.php' );
	require_once( 'xajaxPluginManager.inc.php' );
*/
class xajaxResponseUpload extends xajaxResponsePlugin 
{
	public 	$bInlineScript		= false;
	private $iframeId			= null;
	
	public function __construct()
	{
		$this->bInlineScript = true;
		
		//parent::__construct();
		$base = dirname(dirname(__FILE__));
		$core = $base . '\xajax_core';
		
		require_once( $core . '/xajaxControl.inc.php' );
		require_once( $base . '/xajax_controls/structure.inc.php' );
		require_once( $base . '/xajax_controls/document.inc.php' );
		require_once( $base . '/xajax_controls/content.inc.php' );
		require_once( $base . '/xajax_controls/form.inc.php' );
		
	}
    
 	public function generateClientScript()
	{
// tmp
$newQueryPart .= html_entity_decode(ini_get('arg_separator.output'));
echo <<<EOF
<script type='text/javascript' charset='UTF-8'>

function xajax_upload()
{
	var age = navigator.userAgent;
	
	if(age.search("MSIE 6.0")!= -1)
	{
		alert('You can´t use xAJAX fileuploads, please update your Internet Explorer to a version 7.0 or above.');
	} 

    xajax.newSessionID = function()
    {
        var sessionID;
        sessionID = new String(new Date().getTime());
        var random = new String(Math.random( )).substr(2);
        sessionID = sessionID + random;
        return sessionID;
    }

	xajax.upload = function (rpcFunc, iframeID )
	{
		var is_ie6 = false;
		
        if (document.body && xajax.config.waitCursor)
        {
        	document.body.style.cursor = 'wait';
        }
	
	 	var form = xajax.$('form' + iframeID);
	    
	 	if(!form)
	    {
	       return false;
	    }
		
	    var url = "";
	    
	    if(!url)
	    {
	        url = xajax.config.requestURI;
	    }    
	    
	    // check url 
	    
	    var separator = '{$newQueryPart}';
	    
	    if(url.indexOf('?') != -1 )
	    {
	    	var last = url.charAt(url.length - 1);
	    
	    	if ( last.charCodeAt(0) != separator.charCodeAt(0) )
	    	{
	    		url += separator;
	    	}
	    }
	    else
	    {
	      url += '?';
	    }
	    
	    url += 'xjxfun='+encodeURIComponent(rpcFunc);
	    url += "&xjxr=" + new Date().getTime();    
	     
	     
	    for(var i=0; i<form.getElementsByTagName('input').length; i++)
	    {
	        formItem = form.elements[i];
	        nodeName = new String(formItem.nodeName).toLowerCase();
	        if(formItem.name == '' || nodeName == 'button')
	        {
	            continue;
	        }
	        if(formItem.type == 'file')
	        {
	            url += '&'+formItem.name+'='+encodeURIComponent(formItem.value);
	        }
	    }    
   
	    iframe = xajax.$(iframeID);
	        
        form.action = url;
        form.target = iframeID;
    	
        var xmlDoc;
        var responseXML;
        var responseOBJ;
        
        if(typeof iframe.onreadystatechange == 'object') // for IE
        {
            iframe.onreadystatechange = function()
            {
                if(iframe.readyState == 'complete' && !iframe.loaded)
                {
                    // IE load twice (bug or feature?)
                    iframe.loaded = true;
                    
                    xmlDoc = document.frames(iframe.id);
                    
                    if(xmlDoc.window.document.location != iframe.src)
                    {
                    	responseOBJ = xajax.tools.getRequestObject();
                    	
                        responseXML = xmlDoc.window;
                        //xajax.uploadResponse(responseXML,iframe, xmlDoc,responseOBJ);
						
                        //var object = xmlDoc.document.body  ; // ie7
                        responseXML = xmlDoc.window.document.XMLDocument;
                        
                        xajax.uploadResponse(responseXML, iframe);

                    }
                }
            }
        }
        else // for FF
        {
            iframe.onload = function()
            {
 				xmlDoc = iframe.contentWindow;
                if(xmlDoc.window.document.location != iframe.src)
                {
                	responseOBJ = xajax.tools.getRequestObject();
                	
                    responseXML = xmlDoc.document;
                    
                    xajax.uploadResponse(responseXML, iframe);
                }
            }
        }
	};
	
	
    xajax.uploadResponse = function( responseXML )
    {
    	xml = responseXML.documentElement;
		
    	if (xml == null)
		{
			return;        
		}
		
		for (var i=0; i<xml.childNodes.length; i++)
		{
			if (xml.childNodes[i].nodeName == "cmd")
			{
				var callargs = new Object();
				
				for (var j=0; j<xml.childNodes[i].attributes.length; j++)
				{
					if (xml.childNodes[i].attributes[j].name == "n")
					{
						callargs.cmd = xml.childNodes[i].attributes[j].value;
					}
					else if (xml.childNodes[i].attributes[j].name == "t")
					{
						callargs.id = xml.childNodes[i].attributes[j].value;
					}
					else if (xml.childNodes[i].attributes[j].name == "p")
					{
						callargs.property = xml.childNodes[i].attributes[j].value;
					}
					else if (xml.childNodes[i].attributes[j].name == "c")
					{
						callargs.type = xml.childNodes[i].attributes[j].value;
					}
				} 
				
				if (xml.childNodes[i].childNodes.length > 1 && xml.childNodes[i].firstChild.nodeName == "#cdata-section")
				{
					callargs.data = "";
					for (var j=0; j<xml.childNodes[i].childNodes.length; j++)
					{
						callargs.data += xml.childNodes[i].childNodes[j].data;
					}
				}
				else if (xml.childNodes[i].firstChild && xml.childNodes[i].firstChild.nodeName == 'xjxobj') {
					callargs.data = xajax._nodeToObject(xml.childNodes[i].firstChild);
					callargs.objElement = "XJX_SKIP";
				}
				else if (xml.childNodes[i].childNodes.length > 1)
				{
					for (var j=0; j<xml.childNodes[i].childNodes.length; j++)
					{
						if (xml.childNodes[i].childNodes[j].childNodes.length > 1 && xml.childNodes[i].childNodes[j].firstChild.nodeName == "#cdata-section")
						{
							var internalData = "";
							for (var k=0; k<xml.childNodes[i].childNodes[j].childNodes.length;k++)
							{
								internalData+=xml.childNodes[i].childNodes[j].childNodes[k].nodeValue;
							}
						} else {
							var internalData = xml.childNodes[i].childNodes[j].firstChild.nodeValue;
						}
					
						if (xml.childNodes[i].childNodes[j].nodeName == "s")
						{
							callargs.search = internalData;
						}
						if (xml.childNodes[i].childNodes[j].nodeName == "r")
						{
							callargs.data = internalData;
						}
					}
				}
				else if (xml.childNodes[i].firstChild)
				{
					callargs.data = xml.childNodes[i].firstChild.nodeValue;
				}
				else
				{
					callargs.data = "";				
				}
				if (callargs.objElement != "XJX_SKIP") callargs.objElement = xajax.$(callargs.id);
				
				xajax.commands[callargs.cmd](callargs);
			}
		}
		
		document.body.style.cursor = 'default';
		iframe = null;
 	}
}
xajax_upload();
</script>
EOF;
	}
	
	public function addUpload($sTarget,$sAttribute,$iName)
	{	
		
		
		
        $sData = new clsDiv(
        						array(
        								'attributes' => array(
            													'id'	=> 'div_' . $iName,
            							)
        						)
        		);
        $input = new clsInput(
        						array(
        								'attributes' => array(
            													'type'		=> 'file',
            													'name'		=> $iName,
            							),
        						)
        		);
        
		$sData->addChild($input);        		
		
		return $this->addCommand(
			array(
				'n'=>'as',
				't'=>$sTarget,
				'p'=>$sAttribute
				),
			$sData->getHTML()
			);
	}
	
	public function addTargetIframe( $sTarget,$sAttribute )
	{
		$this->iframeId = md5( microtime( ) );
		
        $sData = new clsIframe(
        						array(
        								'attributes' => array(
            													'id'	=> $this->iframeId,
            													'name'	=> $this->iframeId,
            													'style'	=> "width:300px;height:300px;"
            							)
        						)
        		);	
        		
		return $this->addCommand(
									array(
											'n'=>'ap',
											't'=>$sTarget,
											'p'=>$sAttribute
										),
									$sData->getHTML()
			);        			
	}
	
	public function getIframeName()
	{
		// change to return if the plugin-layer allows that
		
		echo $this->iframeId; 
	}
	
	public function addAPC($sTarget,$sAttribute)
	{	
		
		$APCId = md5( microtime( ) );
		
        $sData = new clsInput(
        						array(
        								'attributes' => array(
            													'type'		=> 'hidden',
            													'name'		=> 'APC_UPLOAD_PROGRESS',
            													'value'		=> $APCId
            							),
        						)
        		);
		
		return $this->addCommand(
			array(
				'n'=>'ap',
				't'=>$sTarget,
				'p'=>$sAttribute
				),
			$sData->getHTML()
			);
	}
}


class xajaxRequestUpload extends xajaxRequestPlugin
{
	function canProcessRequest()
	{
		if ( $_GET['xjxfun'] )
		{
			return true;
		}
		return false;
	}
	
	
    function processRequest()
    {
        if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_GET['xjxfun']))
        {
            $this->initProcessRequests();
       	}
            return true;
     }
    
    function initProcessRequests()
    {
        $xajaxRequest = array();
        $xajaxRequest['xjxr'] = @$_GET['xjxr'];
        $xajaxRequest['xjxfun'] = @$_GET['xjxfun'];
        // reset RequestMode
        if(isset($_GET['xjxfun']))
        {
            $_GET['xjxfun'] = null;
            unset($_GET['xjxfun']);
        }
        // get the upload file local path
        foreach(array_keys($_FILES) as $name)
        {
            if(isset($_GET[$name]) && !isset($_POST[$name]))
            {
               $_POST[$name] = $_GET[$name];
            }
        }
        #$xajaxargs = array($_POST);
        #$xajaxRequest['xjxargs'] = $xajaxargs;
        #$_POST = $xajaxRequest;
    }	
}

$objPluginManager =& xajaxPluginManager::getInstance();
$objPluginManager->registerPlugin(new xajaxResponseUpload());
$objPluginManager->registerPlugin(new xajaxRequestUpload());


?>