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());
?>