This SOAP server can handle following functions : - WebService
- getLastNews
- getClass
- searchScript
- getClassList
- getArticle
- getArticleList
<?php
error_reporting(E_ALL);
ini_set('soap.wsdl_cache_enabled', 0);
// to build the elapsedTime parameter
function get_microtime(){
$T = explode(' ', microtime());
$time = $T[1].substr($T[0], 1);
return (float)$time;
}
define('START_TIME', get_microtime());
class WebService {
private $wiki;
private $User = '';
private $Password = '';
private $MysqlHost = '';
private $Base = '';
// SoapServer::setclass() does not take care of the unified constructor __construct() :
// http://bugs.php.net/bug.php?id=27838
/*
function __construct() {
}
*/
/**
* @return
* @desc Constructor
* @comment Database connection & more
* @comment Rename __construct() when bug 27838 is fixed
*/
function WebService() {
include_once './include/db.conf.php';
$this->MysqlHost = $HOST;
$this->User = $USER;
$this->Password = $PASSWORD;
$this->Base = $BASE;
if(!@mysql_connect($this->Host, $this->User, $this->Password)) {
return new SoapFault('DB', 'Unable to connect to database server');
}
if(!@mysql_select_db($this->Base)) {
return new SoapFault('DB', 'Unable to select the database');
}
include_once './include/class.wiki2xhtml.php';
$this->wiki = new wiki2xhtml();
}
/**
* @return void
* @param int $start Start Index
* @param int $limit Number Results
* @desc get the last news
*/
function getLastNews($start, $limit) {
if(!is_int($limit) || $limit == 0) {
return new SoapFault('Parameter' , 'Wrong data type for limit : Integer >= 0 expected');
}
$Query = 'SELECT
title,
content,
datetime ,
DATE_FORMAT(datetime, "%Y.%m.%d.%H.%i.%s") D,
auteur
FROM classes_blog
WHERE hidden = "non"
ORDER BY datetime DESC
LIMIT '.(int)$start.','.$limit.'';
if(!$Result = @mysql_query($Query)) {
return new SoapFault('DB', 'SQL error : ' . mysql_error());
}
$Q = 'SELECT COUNT(*) C FROM classes_blog';
$R = mysql_query($Q);
$C = mysql_fetch_object($R);
while($O = @mysql_fetch_object($Result)) {
$T[] = array(
'title' => utf8_encode($O->title),
'summary' => '',
'pubDate' => $O->datetime,
'URL' => 'http://classes.scriptsphp.net/blog.'.$O->D,
'content' => utf8_encode($this->wiki->transform($O->content)));
}
return array(
'title' => '--CSP --WS Last News',
'description' => 'Last News from Classes.ScriptsPHP.net ',
'totalResultsCount' => $C->C,
'resultElements' => $T,
'startIndex' => $start,
'endIndex' => $start+$limit,
'elapsedTime' => 0.0
);
}
/**
* @return void
* @param sting $name Class name
* @desc Get a specific class
* @comment $name is case insensitive
*/
function getClass($name) {
$Query = 'SELECT
title,
LOWER(title) as Ltitle
FROM classes_classes';
if(!$Result = @mysql_query($Query)) {
return new SoapFault('DB', 'SQL error : ' . @mysql_error());
}
while($O = mysql_fetch_object($Result)) {
$T[$O->Ltitle] = $O->title;
}
if(!isset($T[strtolower($name)])) {
return new SoapFault('Class', 'Class '.$name.' doesn\'t exist !');
} else {
$class = $T[strtolower($name)];
}
if(!$OO = @simplexml_load_file('http://classes.scriptsphp.net/source/'.$class.'/'.$class.'.xml')) {
return new SoapFault('XML', 'Failed to load XML file');
}
$Arr = array();
foreach($OO->Methods as $v) {
$ArrCode = array();
foreach($v->Code as $vc) {
$ArrCode[] = array('value'=> utf8_encode((string)$vc));
}
$ArrParameters = array();
$i=0;
foreach($v->Params as $vp) {
// to update ::
$ArrParameters[] = array('value'=> utf8_encode($v->Params[$i]['name']. ' :: ' .(string)$vp));
$i++;
}
$Arr[] = array(
'title' => (string)utf8_encode($v->Func_name),
'description' => (string)utf8_encode($this->wiki->transform($v->Desc)),
'URL' => 'http://classes.scriptsphp.net/doc.'.$class.'',
'code' => $ArrCode,
'parameters' => $ArrParameters
);
}
return array(
'title' => 'Classe '.$class,
'URL' => '',
'description' => $OO->Short_desc.' :: '.$this->wiki->transform($OO->Long_desc),
'version' => $OO->Class_version,
'author' => $OO->Class_auteur,
'lastModified' => $OO->Class_last_modified,
'methods' => $Arr,
'elapsedTime' => get_microtime() - START_TIME
);
}
function searchScript($search) {
/*
$Query = 'SELECT title,
summary,
longdesc,
MATCH (title,summary,longdesc) AGAINST ("'.mysql_escape_string($search).'") as pertinence
FROM classes_classes WHERE
MATCH (title,summary,longdesc) AGAINST ("'.mysql_escape_string($search).'") ';
//$Query = 'SELECT title,summary,longdesc FROM classes_classes WHERE title LIKE "%'.$search.'%" ';
*/
// **************************************************************************
require_once ('./include/class.cspsearch.php');
$S = new CspSearch;
if(!$R = $S->ClassSearch($search)) {
return new SoapFault('SEARCH', 'Search error');
}
foreach($R as $result) {
$T[] = array (
'title' => $result['title'],
'url' => 'http://classes.scriptsphp.net/doc.'.$result['title'],
'summary' => utf8_encode($result['summary'])
);
}
//print_r($T);
// ***************************************************************************
/*
if(!$Result = @mysql_query($Query)) {
return new SoapFault('DB', 'SQL error : ' . @mysql_error());
}
$T = array();
while($O = mysql_fetch_object($Result)) {
$T[] = array (
'title' => $O->title,
'url' => 'http://classes.scriptsphp.net/doc.'.$O->title,
'summary' => utf8_encode($O->summary)
);
}
*/
return array(
'results' => $T
);
}
function getClassList($sort) {
}
function getArticle($name) {
}
function getArticleList($sort) {
}
} // End class
// -----------------------------------------------------------------------------------------------------------
$server = new SoapServer('ws/csp.wsdl', array('trace' => 1, 'soap_version' => SOAP_1_1));
$server->setclass('WebService');
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$server->handle();
} else {
echo '<strong>This SOAP server can handle following functions : </strong>';
echo '<ul>';
foreach($server->getFunctions() as $func) {
echo '<li>',$func,'</li>';
}
echo '</ul>';
}
if(strstr($_SERVER['QUERY_STRING'], 'source')) {
echo '<hr/>';
show_source('ws/soapserver.php');
}
?>