220 lines
5.6 KiB
PHP
Executable File
220 lines
5.6 KiB
PHP
Executable File
<?php
|
|
die('disabled in s9y');
|
|
/** Write the appropriate xinha_config directives to pass data to a PHP (Plugin) backend file.
|
|
*
|
|
* ImageManager Example:
|
|
* The following would be placed in step 3 of your configuration (see the NewbieGuide
|
|
* (http://xinha.python-hosting.com/wiki/NewbieGuide)
|
|
*
|
|
* <script language="javascript">
|
|
* with (xinha_config.ImageManager)
|
|
* {
|
|
* <?php
|
|
* xinha_pass_to_php_backend
|
|
* (
|
|
* array
|
|
* (
|
|
* 'images_dir' => '/home/your/directory',
|
|
* 'images_url' => '/directory'
|
|
* )
|
|
* )
|
|
* ?>
|
|
* }
|
|
* </script>
|
|
*
|
|
*/
|
|
|
|
// temporary
|
|
unset($_REQUEST['backend_config']);
|
|
unset($_REQUEST['backend_data']);
|
|
function xinha_read_passed_data() {
|
|
return array("msg"=>"dynamic configuration disabled for security reason");
|
|
}
|
|
function xinha_passed_data_querystring() {
|
|
return '';
|
|
}
|
|
|
|
function xinha_pass_to_php_backend($Data, $KeyLocation = 'Xinha:BackendKey', $ReturnPHP = FALSE)
|
|
{
|
|
|
|
$bk = array();
|
|
$bk['data'] = serialize($Data);
|
|
|
|
@session_start();
|
|
if(!isset($_SESSION[$KeyLocation]))
|
|
{
|
|
$_SESSION[$KeyLocation] = uniqid('Key_');
|
|
}
|
|
|
|
$bk['session_name'] = session_name();
|
|
$bk['key_location'] = $KeyLocation;
|
|
$bk['hash'] =
|
|
function_exists('sha1') ?
|
|
sha1($_SESSION[$KeyLocation] . $bk['data'])
|
|
: md5($_SESSION[$KeyLocation] . $bk['data']);
|
|
|
|
|
|
// The data will be passed via a postback to the
|
|
// backend, we want to make sure these are going to come
|
|
// out from the PHP as an array like $bk above, so
|
|
// we need to adjust the keys.
|
|
$backend_data = array();
|
|
foreach($bk as $k => $v)
|
|
{
|
|
$backend_data["backend_data[$k]"] = $v;
|
|
}
|
|
|
|
// The session_start() above may have been after data was sent, so cookies
|
|
// wouldn't have worked.
|
|
$backend_data[session_name()] = session_id();
|
|
|
|
if($ReturnPHP)
|
|
{
|
|
return array('backend_data' => $backend_data);
|
|
}
|
|
else
|
|
{
|
|
echo 'backend_data = ' . xinha_to_js($backend_data) . "; \n";
|
|
}
|
|
}
|
|
|
|
/** Convert PHP data structure to Javascript */
|
|
|
|
function xinha_to_js($var, $tabs = 0)
|
|
{
|
|
if(is_numeric($var))
|
|
{
|
|
return $var;
|
|
}
|
|
|
|
if(is_string($var))
|
|
{
|
|
return "'" . xinha_js_encode($var) . "'";
|
|
}
|
|
|
|
if(is_array($var))
|
|
{
|
|
$useObject = false;
|
|
foreach(array_keys($var) as $k) {
|
|
if(!is_numeric($k)) $useObject = true;
|
|
}
|
|
$js = array();
|
|
foreach($var as $k => $v)
|
|
{
|
|
$i = "";
|
|
if($useObject) {
|
|
if(preg_match('#^[a-zA-Z]+[a-zA-Z0-9]*$#', $k)) {
|
|
$i .= "$k: ";
|
|
} else {
|
|
$i .= "'$k': ";
|
|
}
|
|
}
|
|
$i .= xinha_to_js($v, $tabs + 1);
|
|
$js[] = $i;
|
|
}
|
|
if($useObject) {
|
|
$ret = "{\n" . xinha_tabify(implode(",\n", $js), $tabs) . "\n}";
|
|
} else {
|
|
$ret = "[\n" . xinha_tabify(implode(",\n", $js), $tabs) . "\n]";
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
return 'null';
|
|
}
|
|
|
|
/** Like htmlspecialchars() except for javascript strings. */
|
|
|
|
function xinha_js_encode($string)
|
|
{
|
|
static $strings = "\\,\",',%,&,<,>,{,},@,\n,\r";
|
|
|
|
if(!is_array($strings))
|
|
{
|
|
$tr = array();
|
|
foreach(explode(',', $strings) as $chr)
|
|
{
|
|
$tr[$chr] = sprintf('\x%02X', ord($chr));
|
|
}
|
|
$strings = $tr;
|
|
}
|
|
|
|
return strtr($string, $strings);
|
|
}
|
|
|
|
|
|
/** Used by plugins to get the config passed via
|
|
* xinha_pass_to_backend()
|
|
* returns either the structure given, or NULL
|
|
* if none was passed or a security error was encountered.
|
|
*/
|
|
|
|
function oldxinha_read_passed_data()
|
|
{
|
|
if(isset($_REQUEST['backend_data']) && is_array($_REQUEST['backend_data']))
|
|
{
|
|
$bk = $_REQUEST['backend_data'];
|
|
session_name($bk['session_name']);
|
|
@session_start();
|
|
if(!isset($_SESSION[$bk['key_location']])) return NULL;
|
|
|
|
if($bk['hash'] ===
|
|
function_exists('sha1') ?
|
|
sha1($_SESSION[$bk['key_location']] . $bk['data'])
|
|
: md5($_SESSION[$bk['key_location']] . $bk['data']))
|
|
{
|
|
return unserialize(ini_get('magic_quotes_gpc') ? stripslashes($bk['data']) : $bk['data']);
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
/** Used by plugins to get a query string that can be sent to the backend
|
|
* (or another part of the backend) to send the same data.
|
|
*/
|
|
|
|
function oldxinha_passed_data_querystring()
|
|
{
|
|
$qs = array();
|
|
if(isset($_REQUEST['backend_data']) && is_array($_REQUEST['backend_data']))
|
|
{
|
|
foreach($_REQUEST['backend_data'] as $k => $v)
|
|
{
|
|
$v = ini_get('magic_quotes_gpc') ? stripslashes($v) : $v;
|
|
$qs[] = "backend_data[" . rawurlencode($k) . "]=" . rawurlencode($v);
|
|
}
|
|
}
|
|
|
|
$qs[] = session_name() . '=' . session_id();
|
|
return implode('&', $qs);
|
|
}
|
|
|
|
|
|
/** Just space-tab indent some text */
|
|
function xinha_tabify($text, $tabs)
|
|
{
|
|
if($text)
|
|
{
|
|
return str_repeat(" ", $tabs) . preg_replace('/\n(.)/', "\n" . str_repeat(" ", $tabs) . "\$1", $text);
|
|
}
|
|
}
|
|
|
|
/** Return upload_max_filesize value from php.ini in kilobytes (function adapted from php.net)**/
|
|
function upload_max_filesize_kb()
|
|
{
|
|
$val = ini_get('upload_max_filesize');
|
|
$val = trim($val);
|
|
$last = strtolower($val{strlen($val)-1});
|
|
switch($last)
|
|
{
|
|
// The 'G' modifier is available since PHP 5.1.0
|
|
case 'g':
|
|
$val *= 1024;
|
|
case 'm':
|
|
$val *= 1024;
|
|
}
|
|
return $val;
|
|
}
|
|
?>
|