<?php
$api_url 
'http://api.iwise.com/rest/';
$api_params = array();


function 
getApiUrl($params) {
    global 
$api_url;
    global 
$api_params;
    
    
$params array_merge($params$api_params);
    
$rparams = array();
    foreach(
$params as $key => $value) {
        if (
is_array($value)) {
            foreach(
$value as $kk => $vv) {
                
$rparams[] = urlencode($key).'['.$kk.']='.urlencode($vv);
            }
        } else
            
$rparams[] = urlencode($key).'='.urlencode($value);
    }

    
$timestamp time();
    
$rparams[] = 'timestamp='.$timestamp;        
    
$signature base64_encode(mhash(MHASH_SHA1"{$params['public_key']}{$params['method']}{$timestamp}"$params['private_key']));
    
$rparams[] = 'signature='.urlencode($signature);
    
    
//private key is just for hashing, not send!!
    
unset($params['private_key']);    
    
    
    return 
$api_url.'?'.implode('&'$rparams);
}

function 
callServer($params$options=array()) {
    
$url getApiUrl($params);
    
$method $params['method'];
    
    
$ch curl_init($url);
    
curl_setopt($chCURLOPT_RETURNTRANSFER1);
    
$content curl_exec($ch);
    
curl_close($ch);
    
    try {
        
$xml = @simplexml_load_string($content);
        return 
$xml;
    } catch(
Exception $e) {
        print 
"Error parsing: ";
        
print_r($e);
    }
        
    return 
$content;
}

function 
getParam($key$default=null) {
    if (isset(
$_POST[$key]))
        return 
$_POST[$key];
        
    return 
$default;
}

$error '';
$public_key getParam('public_key');
$private_key getParam('private_key');
$search '';
$author_id 0;
$op getParam('op');
$params null;
$xml null;

if (
$op == 'related_author') {
    
$search getParam('search');
    
$params = array(
        
'public_key' => $public_key,
        
'private_key' => $private_key,
        
'method' => 'getRelatedAuthors'
        
'query' => $search,
        
'limit' => getParam('limit'10),
    );
}

if (
$op == 'author_lookup') {
    
$search getParam('search');
    
$params = array(
        
'public_key' => $public_key,
        
'private_key' => $private_key,
        
'method' => 'authorLookup'
        
'query' => $search,
        
'limit' => getParam('limit'10),
    );
}



if (
$op == 'related_tags') {
    
$search getParam('search');
    
$params = array(
        
'public_key' => $public_key,
        
'private_key' => $private_key,
        
'method' => 'getRelatedTags',
        
'query' => $search
    
);
}

if (
$op == 'search') {
    
$search getParam('search');
    
$params = array(
        
'public_key' => $public_key,
        
'private_key' => $private_key,
        
'method' => 'basicSearch',
        
'query' => $search,
        
'page' => getParam('page'1),
        
'items_page' => getParam('items_page'10),
    );
}

if (
$op == 'wisdom_search') {
    
$search getParam('search');
    
$params = array(
        
'public_key' => $public_key,
        
'private_key' => $private_key,
        
'method' => 'wisdomSearch',
        
'query' => $search,
        
'page' => getParam('page'1),
        
'items_page' => getParam('items_page'10),
    );
}

if (
$params) {
    
$xml callServer($params);        
    
    if (!
is_object($xml)) {
        
$error 'Not valid xml';
        
$xml null;
    } else if (
$xml->status == 'failed') {    
        
$error $xml->response->message;
        
$xml null;
    } else {
        
//convert into html
        
$doc = new DOMDocument();
        
$doc->loadXML($xml->asXML());
        
$doc->formatOutput true;
        
        
$xml htmlentities($doc->saveXML());
    }    
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Test of api</title>
    <style>
        body {
            font-family: Arial;
            font-size: 12px;
            color: #333;
        }
        
        .panel-xml {
            border: 1px solid #999;
            padding: 5px;
        }    
    </style>
</head>
<body>

<form method="post">    
    <h1>Wisdom search</h1>
    
    Public key: <input type="text" name="public_key" value="<?=$public_key?>" /><br />    
    Private key: <input type="text" name="private_key" value="<?=$private_key?>" /><br />    
    Query: <input type="text" name="search" value="<?=$search?>" /><br />    
    Page: <input type="text" name="page" value="<?=getParam('page'1)?>" /><br />    
    Items in Page: <input type="text" name="items_page" value="<?=getParam('items_page'10)?>" /><br />    
    <br />
    <input type="hidden" name="op" value="wisdom_search" />
    <input type="submit" value="Search" />
</form>

<form method="post">    
    <h1>Related authors</h1>
    
    Public key: <input type="text" name="public_key" value="<?=$public_key?>" /><br />    
    Private key: <input type="text" name="private_key" value="<?=$private_key?>" /><br />    
    Query: <input type="text" name="search" value="<?=$search?>" /><br />    
    Limit: <select name="limit">
        <option value="5">5</option>
        <option value="10">10</option>
        <option value="15">15</option>
        <option value="20">20</option>
    </select>
    <br />
    <input type="hidden" name="op" value="related_author" />
    <input type="submit" value="Search" />
</form>

<form method="post">    
    <h1>Author Lookup</h1>
    
    Public key: <input type="text" name="public_key" value="<?=$public_key?>" /><br />    
    Private key: <input type="text" name="private_key" value="<?=$private_key?>" /><br />    
    Query: <input type="text" name="search" value="<?=$search?>" /><br />    
    Limit: <select name="limit">
        <option value="5">5</option>
        <option value="10">10</option>
        <option value="15">15</option>
        <option value="20">20</option>
    </select>
    <br />
    <input type="hidden" name="op" value="author_lookup" />
    <input type="submit" value="Search" />
</form>


<form method="post">    
    <h1>Related tags</h1>
    
    Public key: <input type="text" name="public_key" value="<?=$public_key?>" /><br />    
    Private key: <input type="text" name="private_key" value="<?=$private_key?>" /><br />    
    Query: <input type="text" name="search" value="<?=$search?>" /><br />    
    <br />
    <input type="hidden" name="op" value="related_tags" />
    <input type="submit" value="Search" />
</form>

<form method="post">    
    <h1>Basic Search</h1>
    
    Public key: <input type="text" name="public_key" value="<?=$public_key?>" /><br />    
    Private key: <input type="text" name="private_key" value="<?=$private_key?>" /><br />    
    Query: <input type="text" name="search" value="<?=$search?>" /><br />    
    Page: <input type="text" name="page" value="<?=getParam('page'1)?>" /><br />    
    Items in Page: <input type="text" name="items_page" value="<?=getParam('items_page'10)?>" /><br />    
    <br />
    <input type="hidden" name="op" value="search" />
    <input type="submit" value="Search" />
</form>


<form method="post">    
    <h1>getAuthorRelatedTags</h1>
    
    Public key: <input type="text" name="public_key" value="<?=$public_key?>" /><br />    
    Private key: <input type="text" name="private_key" value="<?=$private_key?>" /><br />    
    Author ID: <input type="text" name="author_id" value="<?=$author_id?>" /><br />    
    Limit: <select name="limit">
        <option value="5">5</option>
        <option value="10">10</option>
        <option value="15">15</option>
        <option value="20">20</option>
    </select>
    <br />
    <input type="hidden" name="op" value="getAuthorRelatedTags" />
    <input type="submit" value="Search" />
</form>


<?php if ($xml) { ?>
<div class="panel-xml">
    <h3>Output of call</h3>
    <pre><?=$xml?></pre>
</div>
<?php ?>

<?php if (!empty($error)) { ?>
<div class="error">
    <?=$error?>
</div>
<?php ?>

    
</body>
</html>