CURLOPT_FOLLOWLOCATION curl workaround (for safe_mode/open_basedir) (#138)

This commit is contained in:
RainLoop Team 2014-04-27 03:12:09 +04:00
parent 0fcd7cf122
commit 5fff5afd16
8 changed files with 186 additions and 273 deletions

View file

@ -263,6 +263,8 @@ AbstractApp.prototype.pub = function (sName, aArgs)
AbstractApp.prototype.bootstart = function ()
{
var self = this;
Utils.initOnStartOrLangChange(function () {
Utils.initNotificationLanguage();
}, null);
@ -276,9 +278,11 @@ AbstractApp.prototype.bootstart = function ()
'maxWidth': 767,
'onEnter': function() {
$html.addClass('ssm-state-mobile');
self.pub('ssm.mobile-enter');
},
'onLeave': function() {
$html.removeClass('ssm-state-mobile');
self.pub('ssm.mobile-leave');
}
});

View file

@ -1077,7 +1077,35 @@ Utils.initLayoutResizer = function (sLeft, sRight, sClientSideKeyName)
var
oLeft = $(sLeft),
oRight = $(sRight),
mLeftWidth = RL.local().get(sClientSideKeyName) || null,
fSetWidth = function (iWidth) {
if (iWidth)
{
oLeft.css({
'width': '' + iWidth + 'px'
});
oRight.css({
'left': '' + iWidth + 'px'
});
}
},
// fDisable = function (bDisable) {
// if (bDisable)
// {
// oLeft.resizable('disable');
// fSetWidth(5);
// }
// else
// {
// oLeft.resizable('enable');
// fSetWidth(RL.local().get(sClientSideKeyName) || 150);
// }
// },
fResizeFunction = function (oEvent, oObject) {
if (oObject && oObject.size && oObject.size.width)
{
@ -1092,13 +1120,7 @@ Utils.initLayoutResizer = function (sLeft, sRight, sClientSideKeyName)
if (null !== mLeftWidth)
{
oLeft.css({
'width': '' + mLeftWidth + 'px'
});
oRight.css({
'left': '' + mLeftWidth + 'px'
});
fSetWidth(mLeftWidth);
}
oLeft.resizable({
@ -1108,90 +1130,15 @@ Utils.initLayoutResizer = function (sLeft, sRight, sClientSideKeyName)
'handles': 'e',
'stop': fResizeFunction
});
};
//Utils.initLayoutResizer1 = function (sLeft, sRight, sParent/*, koSwither*/,
// iLimitL, iMaxL, iDefL, iLimitR, sClientSideKeyName)
//{
// iLimitL = iLimitL || 300;
// iMaxL = iMaxL || 500;
// iDefL = iDefL || (iMaxL - iLimitL / 2);
// iLimitR = iLimitR || 300;
//
// var
// iTemp = 0,
// oLeft = $(sLeft),
// oRight = $(sRight),
// oParent = $(sParent),
// iLeftWidth = RL.local().get(sClientSideKeyName) || iDefL,
// fFunction = function (oEvent, oObject, bForce) {
//
// if (oObject || bForce)
// {
// var
// iWidth = oParent.width(),
// iProc = oObject ? oObject.size.width / iWidth * 100 : null
// ;
//
// if (null === iProc && bForce)
// {
// iProc = oLeft.width() / iWidth * 100;
// }
//
// if (null !== iProc)
// {
// oLeft.css({
// 'width': '',
// 'height': '',
// 'right': '' + (100 - iProc) + '%'
// });
//
// oRight.css({
// 'width': '',
// 'height': '',
// 'left': '' + iProc + '%'
// });
// }
// }
// },
// fResiseFunction = function (oEvent, oObject)
// {
// if (/*koSwither && koSwither() && */oObject && oObject.element &&
// oObject.element[0]['id'] && '#' + oObject.element[0]['id'] === '' + sLeft)
// {
// var iWidth = oParent.width();
// iTemp = iWidth - iLimitR;
// iTemp = iMaxL > iTemp ? iTemp : iMaxL;
// oLeft.resizable('option', 'maxWidth', iTemp);
// if (oObject.size && oObject.size.width)
// {
// RL.local().set(sClientSideKeyName, oObject.size.width);
// }
//
// fFunction(null, null, true);
// }
// }
// ;
//
// if (iLeftWidth)
// {
// oLeft.width(iLeftWidth);
// }
//
// iTemp = oParent.width() - iLimitR;
// iTemp = iMaxL > iTemp ? iTemp : iMaxL;
//
// oLeft.resizable({
// 'minWidth': iLimitL,
// 'maxWidth': iTemp,
// 'handles': 'e',
// 'resize': fFunction,
// 'stop': fFunction
// RL.sub('ssm.mobile-enter', function () {
// fDisable(true);
// });
//
// fFunction(null, null, true);
// $window.resize(_.throttle(fResiseFunction, 400));
//};
// RL.sub('ssm.mobile-leave', function () {
// fDisable(false);
// });
};
/**
* @param {Object} oMessageTextBody

View file

@ -208,7 +208,7 @@ function MailBoxMessageListViewModel()
return oMessage ? oMessage.generateUid() : '';
});
oData.messageListEndHash.subscribe(function (mValue) {
oData.messageListEndHash.subscribe(function () {
this.selector.scrollToTop();
}, this);

View file

@ -460,10 +460,70 @@ class Client {
protected function curlRequest($url, $settings) {
$curl = curl_init($url);
curl_setopt_array($curl, $settings);
if (ini_get('open_basedir') === '' && ini_get('safe_mode' === 'Off'))
{
curl_setopt_array($curl, $settings);
$data = curl_exec($curl);
}
else
{
$settings[CURLOPT_FOLLOWLOCATION] = false;
curl_setopt_array($curl, $settings);
$max_redirects = isset($settings[CURLOPT_MAXREDIRS]) ? $settings[CURLOPT_MAXREDIRS] : 5;
$mr = $max_redirects;
if ($mr > 0)
{
$newurl = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL);
$rcurl = curl_copy_handle($curl);
curl_setopt($rcurl, CURLOPT_HEADER, true);
curl_setopt($rcurl, CURLOPT_NOBODY, true);
curl_setopt($rcurl, CURLOPT_FORBID_REUSE, false);
curl_setopt($rcurl, CURLOPT_RETURNTRANSFER, true);
do
{
curl_setopt($rcurl, CURLOPT_URL, $newurl);
$header = curl_exec($rcurl);
if (curl_errno($rcurl))
{
$code = 0;
}
else
{
$code = curl_getinfo($rcurl, CURLINFO_HTTP_CODE);
if ($code == 301 || $code == 302)
{
$matches = array();
preg_match('/Location:(.*?)\n/', $header, $matches);
$newurl = trim(array_pop($matches));
}
else
{
$code = 0;
}
}
} while ($code && --$mr);
curl_close($rcurl);
if ($mr > 0)
{
curl_setopt($curl, CURLOPT_URL, $newurl);
}
}
if ($mr == 0 && $max_redirects > 0)
{
$data = false;
}
else
{
$data = curl_exec($curl);
}
}
return array(
curl_exec($curl),
$data,
curl_getinfo($curl),
curl_errno($curl),
curl_error($curl)

View file

@ -1799,7 +1799,35 @@ Utils.initLayoutResizer = function (sLeft, sRight, sClientSideKeyName)
var
oLeft = $(sLeft),
oRight = $(sRight),
mLeftWidth = RL.local().get(sClientSideKeyName) || null,
fSetWidth = function (iWidth) {
if (iWidth)
{
oLeft.css({
'width': '' + iWidth + 'px'
});
oRight.css({
'left': '' + iWidth + 'px'
});
}
},
// fDisable = function (bDisable) {
// if (bDisable)
// {
// oLeft.resizable('disable');
// fSetWidth(5);
// }
// else
// {
// oLeft.resizable('enable');
// fSetWidth(RL.local().get(sClientSideKeyName) || 150);
// }
// },
fResizeFunction = function (oEvent, oObject) {
if (oObject && oObject.size && oObject.size.width)
{
@ -1814,13 +1842,7 @@ Utils.initLayoutResizer = function (sLeft, sRight, sClientSideKeyName)
if (null !== mLeftWidth)
{
oLeft.css({
'width': '' + mLeftWidth + 'px'
});
oRight.css({
'left': '' + mLeftWidth + 'px'
});
fSetWidth(mLeftWidth);
}
oLeft.resizable({
@ -1830,90 +1852,15 @@ Utils.initLayoutResizer = function (sLeft, sRight, sClientSideKeyName)
'handles': 'e',
'stop': fResizeFunction
});
};
//Utils.initLayoutResizer1 = function (sLeft, sRight, sParent/*, koSwither*/,
// iLimitL, iMaxL, iDefL, iLimitR, sClientSideKeyName)
//{
// iLimitL = iLimitL || 300;
// iMaxL = iMaxL || 500;
// iDefL = iDefL || (iMaxL - iLimitL / 2);
// iLimitR = iLimitR || 300;
//
// var
// iTemp = 0,
// oLeft = $(sLeft),
// oRight = $(sRight),
// oParent = $(sParent),
// iLeftWidth = RL.local().get(sClientSideKeyName) || iDefL,
// fFunction = function (oEvent, oObject, bForce) {
//
// if (oObject || bForce)
// {
// var
// iWidth = oParent.width(),
// iProc = oObject ? oObject.size.width / iWidth * 100 : null
// ;
//
// if (null === iProc && bForce)
// {
// iProc = oLeft.width() / iWidth * 100;
// }
//
// if (null !== iProc)
// {
// oLeft.css({
// 'width': '',
// 'height': '',
// 'right': '' + (100 - iProc) + '%'
// });
//
// oRight.css({
// 'width': '',
// 'height': '',
// 'left': '' + iProc + '%'
// });
// }
// }
// },
// fResiseFunction = function (oEvent, oObject)
// {
// if (/*koSwither && koSwither() && */oObject && oObject.element &&
// oObject.element[0]['id'] && '#' + oObject.element[0]['id'] === '' + sLeft)
// {
// var iWidth = oParent.width();
// iTemp = iWidth - iLimitR;
// iTemp = iMaxL > iTemp ? iTemp : iMaxL;
// oLeft.resizable('option', 'maxWidth', iTemp);
// if (oObject.size && oObject.size.width)
// {
// RL.local().set(sClientSideKeyName, oObject.size.width);
// }
//
// fFunction(null, null, true);
// }
// }
// ;
//
// if (iLeftWidth)
// {
// oLeft.width(iLeftWidth);
// }
//
// iTemp = oParent.width() - iLimitR;
// iTemp = iMaxL > iTemp ? iTemp : iMaxL;
//
// oLeft.resizable({
// 'minWidth': iLimitL,
// 'maxWidth': iTemp,
// 'handles': 'e',
// 'resize': fFunction,
// 'stop': fFunction
// RL.sub('ssm.mobile-enter', function () {
// fDisable(true);
// });
//
// fFunction(null, null, true);
// $window.resize(_.throttle(fResiseFunction, 400));
//};
// RL.sub('ssm.mobile-leave', function () {
// fDisable(false);
// });
};
/**
* @param {Object} oMessageTextBody
@ -7952,6 +7899,8 @@ AbstractApp.prototype.pub = function (sName, aArgs)
AbstractApp.prototype.bootstart = function ()
{
var self = this;
Utils.initOnStartOrLangChange(function () {
Utils.initNotificationLanguage();
}, null);
@ -7965,9 +7914,11 @@ AbstractApp.prototype.bootstart = function ()
'maxWidth': 767,
'onEnter': function() {
$html.addClass('ssm-state-mobile');
self.pub('ssm.mobile-enter');
},
'onLeave': function() {
$html.removeClass('ssm-state-mobile');
self.pub('ssm.mobile-leave');
}
});

File diff suppressed because one or more lines are too long

View file

@ -1803,7 +1803,35 @@ Utils.initLayoutResizer = function (sLeft, sRight, sClientSideKeyName)
var
oLeft = $(sLeft),
oRight = $(sRight),
mLeftWidth = RL.local().get(sClientSideKeyName) || null,
fSetWidth = function (iWidth) {
if (iWidth)
{
oLeft.css({
'width': '' + iWidth + 'px'
});
oRight.css({
'left': '' + iWidth + 'px'
});
}
},
// fDisable = function (bDisable) {
// if (bDisable)
// {
// oLeft.resizable('disable');
// fSetWidth(5);
// }
// else
// {
// oLeft.resizable('enable');
// fSetWidth(RL.local().get(sClientSideKeyName) || 150);
// }
// },
fResizeFunction = function (oEvent, oObject) {
if (oObject && oObject.size && oObject.size.width)
{
@ -1818,13 +1846,7 @@ Utils.initLayoutResizer = function (sLeft, sRight, sClientSideKeyName)
if (null !== mLeftWidth)
{
oLeft.css({
'width': '' + mLeftWidth + 'px'
});
oRight.css({
'left': '' + mLeftWidth + 'px'
});
fSetWidth(mLeftWidth);
}
oLeft.resizable({
@ -1834,90 +1856,15 @@ Utils.initLayoutResizer = function (sLeft, sRight, sClientSideKeyName)
'handles': 'e',
'stop': fResizeFunction
});
};
//Utils.initLayoutResizer1 = function (sLeft, sRight, sParent/*, koSwither*/,
// iLimitL, iMaxL, iDefL, iLimitR, sClientSideKeyName)
//{
// iLimitL = iLimitL || 300;
// iMaxL = iMaxL || 500;
// iDefL = iDefL || (iMaxL - iLimitL / 2);
// iLimitR = iLimitR || 300;
//
// var
// iTemp = 0,
// oLeft = $(sLeft),
// oRight = $(sRight),
// oParent = $(sParent),
// iLeftWidth = RL.local().get(sClientSideKeyName) || iDefL,
// fFunction = function (oEvent, oObject, bForce) {
//
// if (oObject || bForce)
// {
// var
// iWidth = oParent.width(),
// iProc = oObject ? oObject.size.width / iWidth * 100 : null
// ;
//
// if (null === iProc && bForce)
// {
// iProc = oLeft.width() / iWidth * 100;
// }
//
// if (null !== iProc)
// {
// oLeft.css({
// 'width': '',
// 'height': '',
// 'right': '' + (100 - iProc) + '%'
// });
//
// oRight.css({
// 'width': '',
// 'height': '',
// 'left': '' + iProc + '%'
// });
// }
// }
// },
// fResiseFunction = function (oEvent, oObject)
// {
// if (/*koSwither && koSwither() && */oObject && oObject.element &&
// oObject.element[0]['id'] && '#' + oObject.element[0]['id'] === '' + sLeft)
// {
// var iWidth = oParent.width();
// iTemp = iWidth - iLimitR;
// iTemp = iMaxL > iTemp ? iTemp : iMaxL;
// oLeft.resizable('option', 'maxWidth', iTemp);
// if (oObject.size && oObject.size.width)
// {
// RL.local().set(sClientSideKeyName, oObject.size.width);
// }
//
// fFunction(null, null, true);
// }
// }
// ;
//
// if (iLeftWidth)
// {
// oLeft.width(iLeftWidth);
// }
//
// iTemp = oParent.width() - iLimitR;
// iTemp = iMaxL > iTemp ? iTemp : iMaxL;
//
// oLeft.resizable({
// 'minWidth': iLimitL,
// 'maxWidth': iTemp,
// 'handles': 'e',
// 'resize': fFunction,
// 'stop': fFunction
// RL.sub('ssm.mobile-enter', function () {
// fDisable(true);
// });
//
// fFunction(null, null, true);
// $window.resize(_.throttle(fResiseFunction, 400));
//};
// RL.sub('ssm.mobile-leave', function () {
// fDisable(false);
// });
};
/**
* @param {Object} oMessageTextBody
@ -12224,7 +12171,7 @@ function MailBoxMessageListViewModel()
return oMessage ? oMessage.generateUid() : '';
});
oData.messageListEndHash.subscribe(function (mValue) {
oData.messageListEndHash.subscribe(function () {
this.selector.scrollToTop();
}, this);
@ -18463,6 +18410,8 @@ AbstractApp.prototype.pub = function (sName, aArgs)
AbstractApp.prototype.bootstart = function ()
{
var self = this;
Utils.initOnStartOrLangChange(function () {
Utils.initNotificationLanguage();
}, null);
@ -18476,9 +18425,11 @@ AbstractApp.prototype.bootstart = function ()
'maxWidth': 767,
'onEnter': function() {
$html.addClass('ssm-state-mobile');
self.pub('ssm.mobile-enter');
},
'onLeave': function() {
$html.removeClass('ssm-state-mobile');
self.pub('ssm.mobile-leave');
}
});

File diff suppressed because one or more lines are too long