mirror of
https://github.com/GuduleLapointe/opensim-helpers.git
synced 2026-08-14 08:52:11 +00:00
192 lines
5.0 KiB
PHP
192 lines
5.0 KiB
PHP
<?php
|
|
/**
|
|
* landtool.php
|
|
*
|
|
* Provides web tools for land sales operations
|
|
*
|
|
* Requires an OpenSimulator Money Server
|
|
* [DTL/NSL Money Server for OpenSim](http://www.nsl.tuis.ac.jp/xoops/modules/xpwiki/?OpenSim%2FMoneyServer)
|
|
* or [Gloebit module](http://dev.gloebit.com/opensim/configuration-instructions/)
|
|
*
|
|
* @package magicoli/opensim-helpers
|
|
* @author Gudule Lapointe <gudule@speculoos.world>
|
|
* @link https://github.com/magicoli/opensim-helpers
|
|
* @license AGPLv3
|
|
*
|
|
* Includes portions of code from
|
|
* Melanie Thielker and Teravus Ovares (http://opensimulator.org/)
|
|
* Fumi.Iseki for CMS/LMS '09 5/31
|
|
*/
|
|
|
|
require_once 'includes/config.php';
|
|
require_once 'includes/economy.php';
|
|
|
|
// No user serviceable parts below #####################
|
|
//
|
|
// The XMLRPC server object
|
|
//
|
|
|
|
$xmlrpc_server = xmlrpc_server_create();
|
|
|
|
//
|
|
// Land purchase sections
|
|
//
|
|
// Functions are called by the viewer directly.
|
|
//
|
|
|
|
//
|
|
// Land buying functions
|
|
//
|
|
|
|
xmlrpc_server_register_method( $xmlrpc_server, 'preflightBuyLandPrep', 'buy_land_prep' );
|
|
|
|
function buy_land_prep( $method_name, $params, $app_data ) {
|
|
$req = $params[0];
|
|
$agentid = $req['agentId'];
|
|
$sessionid = $req['secureSessionId'];
|
|
$amount = $req['currencyBuy'];
|
|
$billableArea = $req['billableArea'];
|
|
$ipAddress = $_SERVER['REMOTE_ADDR'];
|
|
|
|
$ret = opensim_check_secure_session( $agentid, null, $sessionid );
|
|
|
|
if ( $ret ) {
|
|
$confirmvalue = currency_get_confirm_value( $ipAddress );
|
|
$membership_levels = array(
|
|
'levels' => array(
|
|
'id' => '00000000-0000-0000-0000-000000000000',
|
|
'description' => 'some level',
|
|
),
|
|
);
|
|
$landUse = array(
|
|
'upgrade' => false,
|
|
'action' => '' . CURRENCY_HELPER_URL . '',
|
|
);
|
|
$currency = array( 'estimatedCost' => currency_virtual_to_real( $amount ) );
|
|
$membership = array(
|
|
'upgrade' => false,
|
|
'action' => '' . CURRENCY_HELPER_URL . '',
|
|
'levels' => $membership_levels,
|
|
);
|
|
$response_xml = xmlrpc_encode(
|
|
array(
|
|
'success' => true,
|
|
'currency' => $currency,
|
|
'membership' => $membership,
|
|
'landUse' => $landUse,
|
|
'currency' => $currency,
|
|
'confirm' => $confirmvalue,
|
|
)
|
|
);
|
|
} else {
|
|
$response_xml = xmlrpc_encode(
|
|
array(
|
|
'success' => false,
|
|
'errorMessage' => "Unable to Authenticate\n\nClick URL for more info.",
|
|
'errorURI' => '' . CURRENCY_HELPER_URL . '',
|
|
)
|
|
);
|
|
}
|
|
|
|
header( 'Content-type: text/xml' );
|
|
echo $response_xml;
|
|
|
|
return '';
|
|
}
|
|
|
|
|
|
//
|
|
// Perform the buy (所持金が足りないとき)
|
|
//
|
|
|
|
xmlrpc_server_register_method( $xmlrpc_server, 'buyLandPrep', 'buy_land' );
|
|
|
|
function buy_land( $method_name, $params, $app_data ) {
|
|
$req = $params[0];
|
|
$agentid = $req['agentId'];
|
|
$sessionid = $req['secureSessionId'];
|
|
$amount = $req['currencyBuy'];
|
|
$cost = $req['estimatedCost'];
|
|
$billableArea = $req['billableArea'];
|
|
$confim = $req['confirm'];
|
|
$ipAddress = $_SERVER['REMOTE_ADDR'];
|
|
|
|
if ( $confim != currency_get_confirm_value( $ipAddress ) ) {
|
|
$response_xml = xmlrpc_encode(
|
|
array(
|
|
'success' => false,
|
|
'errorMessage' => "\n\nMissmatch Confirm Value!!",
|
|
'errorURI' => '' . CURRENCY_HELPER_URL . '',
|
|
)
|
|
);
|
|
header( 'Content-type: text/xml' );
|
|
echo $response_xml;
|
|
return '';
|
|
}
|
|
|
|
$ret = opensim_check_secure_session( $agentid, null, $sessionid );
|
|
|
|
if ( $ret ) {
|
|
if ( $amount >= 0 ) {
|
|
if ( ! $cost ) {
|
|
$cost = currency_virtual_to_real( $amount );
|
|
}
|
|
if ( ! currency_process_transaction( $agentid, $cost, $ipAddress ) ) {
|
|
$response_xml = xmlrpc_encode(
|
|
array(
|
|
'success' => false,
|
|
'errorMessage' => "\n\nThe gateway has declined your transaction. Please update your payment method AND try again later.",
|
|
'errorURI' => '' . CURRENCY_HELPER_URL . '',
|
|
)
|
|
);
|
|
}
|
|
$enough_money = false;
|
|
$res = currency_add_money( $agentid, $amount, $sessionid );
|
|
if ( $res['success'] ) {
|
|
$enough_money = true;
|
|
}
|
|
|
|
if ( $enough_money ) {
|
|
$amount += currency_get_balance( $agentid );
|
|
currency_move_money( $agentid, null, $amount, 5002, 0, 'Land Purchase', 0, 0, $ipAddress );
|
|
currency_update_simulator_balance( $agentid, -1, $sessionid );
|
|
$response_xml = xmlrpc_encode( array( 'success' => true ) );
|
|
} else {
|
|
$response_xml = xmlrpc_encode(
|
|
array(
|
|
'success' => false,
|
|
'errorMessage' => "\n\nYou do not have sufficient funds for this purchase",
|
|
'errorURI' => '' . CURRENCY_HELPER_URL . '',
|
|
)
|
|
);
|
|
}
|
|
}
|
|
} else {
|
|
$response_xml = xmlrpc_encode(
|
|
array(
|
|
'success' => false,
|
|
'errorMessage' => "\n\nUnable to Authenticate\n\nClick URL for more info.",
|
|
'errorURI' => '' . CURRENCY_HELPER_URL . '',
|
|
)
|
|
);
|
|
}
|
|
|
|
header( 'Content-type: text/xml' );
|
|
echo $response_xml;
|
|
|
|
return '';
|
|
}
|
|
|
|
|
|
|
|
|
|
//
|
|
// Process XMLRPC request
|
|
//
|
|
|
|
$request_xml = file_get_contents( 'php://input' );
|
|
// error_log("landtool.php: ".$request_xml);
|
|
|
|
xmlrpc_server_call_method( $xmlrpc_server, $request_xml, '' );
|
|
xmlrpc_server_destroy( $xmlrpc_server );
|