Files
opensim-helpers/landtool.php
T
2024-12-23 11:10:54 -04:00

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