summaryrefslogtreecommitdiff
path: root/ng_selfservice/freeside.class.php
blob: ee77ce0167f43b75624eea0671d40ea56da7d9eb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php

#pre-php 5.4 compatible version?
function flatten($hash) {
  if ( !is_array($hash) ) return $hash;
  $flat = array();

  array_walk($hash, function($value, $key, &$to) { 
    array_push($to, $key, $value);
  }, $flat);

  if ( PHP_VERSION_ID >= 50400 ) {

    #php 5.4+ (deb 7+)
    foreach ($hash as $key => $value) {
      $flat[] = $key;
      $flat[] = $value;
    }

  }

  return($flat);
}

#php 5.4+?
#function flatten($hash) {
#  if ( !is_array($hash) ) return $hash;
#
#  $flat = array();
#
#  foreach ($hash as $key => $value) {
#    $flat[] = $key;
#    $flat[] = $value;
#  }
#
#  return($flat);
#}

class FreesideSelfService  {

    //Change this to match the location of your selfservice xmlrpc.cgi or daemon
    #var $URL = 'https://localhost/selfservice/xmlrpc.cgi';
    #var $URL = 'http://localhost/selfservice/xmlrpc.cgi';
    var $URL = 'http://localhost:8080/';

    function FreesideSelfService() {
      $this;
    }

    public function __call($name, $arguments) {

        error_log("[FreesideSelfService] $name called, sending to ". $this->URL);

        $request = xmlrpc_encode_request("FS.ClientAPI_XMLRPC.$name", flatten($arguments[0]));
        $context = stream_context_create( array( 'http' => array(
            'method' => "POST",
            'header' => "Content-Type: text/xml",
            'content' => $request
        )));
        $file = file_get_contents($this->URL, false, $context);
        $response = xmlrpc_decode($file);
        // uncomment to trace everything
        //error_log(print_r($response, true));
        if (xmlrpc_is_fault($response)) {
            trigger_error("[FreesideSelfService] XML-RPC communication error: $response[faultString] ($response[faultCode])");
        } else {
            //error_log("[FreesideSelfService] $response");
            return $response;
        }
    }

}

?>