corrade-http-templates – Rev 77

Subversion Repositories:
Rev:
<?php

###########################################################################
##  Copyright (C) Wizardry and Steamworks 2015 - License: GNU GPLv3      ##
###########################################################################
## This is a script that uses Corrade to get the avatar positions and    ##
## then aggregates that data to a JSON object that will be read by AJAX. ##
##                                                                       ##
## The output JSON object that will be read via AJAX is of the form:     ##
## {                                                                     ##
##    header: ["x", "y", "z"],                                           ##
##    positions: [[x1, y1, z1], [x2, y2, z2], ...],                      ##
##    names: ["First Resident", "Second Resident", ...],                 ##
##    colors: [[0.5, 1, 0.75], [0.3, 0.55, 0.34], ...]                   ##
## }                                                                     ##
###########################################################################

###########################################################################
##                            CONFIGURATION                              ##
###########################################################################

# The configuration file for this script containing the settings.
require_once('config.php');
require_once('vendor/was/utilities/src/formats/kvp/kvp.php');
require_once('vendor/was/utilities/src/formats/csv/csv.php');
require_once('vendor/was/utilities/src/collections/arrays/arrays.php');
require_once('vendor/was/utilities/src/mathematics/algebra.php');
require_once('functions.php');

###########################################################################
##                               INTERNALS                               ##
###########################################################################

####
# I. Get the avatar positions.
$params = array(
    'command' => 'getavatarpositions',
    'group' => $GROUP,
    'entity' => 'region',
    'password' => $PASSWORD
);

# We now escape each key and value: this is very important, because the 
# data we send to Corrade may contain the '&' or '=' characters (we don't 
# in this example though but this will not hurt anyone).
array_walk($params,
    function(&$value, $key) {
        $value = urlencode($key)."=".urlencode($value);
    }
);
$postvars = implode('&', $params);

# Set the options, send the request and then display the outcome
if (!($curl = curl_init())) {
    print 0;
    return;
}

curl_setopt($curl, CURLOPT_URL, $URL);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postvars);
$result = curl_exec($curl);
curl_close($curl);

$success = urldecode(
    wasKeyValueGet(
        "success", 
        $result
    )
);

// Unable to get avatar positions?
if($success == 'False') return -1;

$data = wasCSVToArray(
    urldecode(
        wasKeyValueGet(
            "data", 
            $result
        )
    )
);

####
# II. Construct and echo the JSON object.
echo json_encode(
    array(
        'header' => array('x', 'y', 'z'),
        'positions' => array_values(
            array_map(
                function($e) {
                    $e = preg_replace('/</', '', $e);
                    $e = preg_replace('/>/', '', $e);
                    $e = explode(',', $e);
                    return array($e[0], $e[1], $e[2]);
                },
                wasArrayStride(
                    array_slice($data, 2), 
                    3
                )
            )
        ),
        'names' => array_values(
            wasArrayStride(
                $data, 
                3
            )
        ),
        'colors' => array_values(
            array_map(
                function($e) {
                    $e = hex2RGB(wasColorHash($e));
                    return array(
                        round (
                            mapValueToRange($e['red'], 0, 255, 0, 1), 2
                        ), 
                        round(
                            mapValueToRange($e['green'], 0, 255, 0, 1), 2
                        ), 
                        round(
                            mapValueToRange($e['blue'], 0, 255, 0, 1), 2
                        )
                    );
                },
                wasArrayStride(
                    $data, 
                    3
                )
            )
        )
    ),
    JSON_NUMERIC_CHECK
);

return 0;

?>