diff --git a/htdocs/webservices/demo_wsclient_productorservice.php b/htdocs/webservices/demo_wsclient_productorservice.php index db6401d9ce2..0bbd0f00393 100755 --- a/htdocs/webservices/demo_wsclient_productorservice.php +++ b/htdocs/webservices/demo_wsclient_productorservice.php @@ -28,8 +28,9 @@ require_once(NUSOAP_PATH.'/nusoap.php'); // Include SOAP $WS_DOL_URL = DOL_MAIN_URL_ROOT.'/webservices/server_productorservice.php'; //$WS_DOL_URL = 'http://localhost:8080/'; // To test with Soapui mock. If not a page, should end with / -$WS_METHOD1 = 'createProductOrService'; -$WS_METHOD2 = 'getProductOrService'; +$WS_METHOD1 = 'createProductOrService'; +$WS_METHOD2 = 'getProductOrService'; +$WS_METHOD3 = 'getListOfProductsOrServices'; $ns='http://www.dolibarr.org/ns/'; @@ -47,6 +48,13 @@ if ($soapclient2) $soapclient2->soap_defencoding='UTF-8'; $soapclient2->decodeUTF8(false); } +$soapclient3 = new nusoap_client($WS_DOL_URL); +if ($soapclient3) +{ + $soapclient3->soap_defencoding='UTF-8'; + $soapclient3->decodeUTF8(false); +} + // Call the WebService method and store its result in $result. $authentication=array( @@ -79,14 +87,31 @@ if ($WS_METHOD2) { $parameters = array('authentication'=>$authentication,'id'=>1,'ref'=>''); dol_syslog("Call method ".$WS_METHOD2); - $result2 = $soapclient1->call($WS_METHOD2,$parameters,$ns,''); + $result2 = $soapclient2->call($WS_METHOD2,$parameters,$ns,''); if (! $result2) { - print $soapclient1->error_str; + print $soapclient2->error_str; print "
\n\n"; - print $soapclient1->request; + print $soapclient2->request; print "
\n\n"; - print $soapclient1->response; + print $soapclient2->response; + exit; + } +} + +// Test url 3 +if ($WS_METHOD3) +{ + $parameters = array('authentication'=>$authentication,'filterproduct'=>array('type'=>-1)); + dol_syslog("Call method ".$WS_METHOD3); + $result3 = $soapclient3->call($WS_METHOD3,$parameters,$ns,''); + if (! $result3) + { + print $soapclient3->error_str; + print "
\n\n"; + print $soapclient3->request; + print "
\n\n"; + print $soapclient3->response; exit; } } @@ -111,7 +136,7 @@ echo '

Function

'; echo $WS_METHOD1; echo '

SOAP Message

'; echo '
' . htmlspecialchars($soapclient1->request, ENT_QUOTES) . '
'; -echo '
'; +//echo '
'; echo "

Response:

"; echo '

Result

'; echo '
';
@@ -127,7 +152,7 @@ echo '

Function

'; echo $WS_METHOD2; echo '

SOAP Message

'; echo '
' . htmlspecialchars($soapclient2->request, ENT_QUOTES) . '
'; -echo '
'; +//echo '
'; echo "

Response:

"; echo '

Result

'; echo '
';
@@ -136,6 +161,22 @@ echo '
'; echo '

SOAP Message

'; echo '
' . htmlspecialchars($soapclient2->response, ENT_QUOTES) . '
'; +print '
'; + +echo "

Request:

"; +echo '

Function

'; +echo $WS_METHOD3; +echo '

SOAP Message

'; +echo '
' . htmlspecialchars($soapclient3->request, ENT_QUOTES) . '
'; +//echo '
'; +echo "

Response:

"; +echo '

Result

'; +echo '
';
+print_r($result3);
+echo '
'; +echo '

SOAP Message

'; +echo '
' . htmlspecialchars($soapclient3->response, ENT_QUOTES) . '
'; + echo ''."\n";; echo ''."\n";; ?> diff --git a/htdocs/webservices/server_productorservice.php b/htdocs/webservices/server_productorservice.php index c16a33be3ae..26c5fcf4970 100755 --- a/htdocs/webservices/server_productorservice.php +++ b/htdocs/webservices/server_productorservice.php @@ -117,6 +117,34 @@ $server->wsdl->addComplexType( ) ); +// Define other specific objects +$server->wsdl->addComplexType( + 'filterproduct', + 'complexType', + 'struct', + 'all', + '', + array( +// 'limit' => array('name'=>'limit','type'=>'xsd:string'), + 'type' => array('name'=>'type','type'=>'xsd:string'), + 'status_tobuy' => array('name'=>'status_tobuy','type'=>'xsd:string'), + 'status_tosell' => array('name'=>'status_tosell','type'=>'xsd:string'), + ) +); + +// Define other specific objects +$server->wsdl->addComplexType( + 'arrayproducts', + 'complexType', + 'struct', + 'all', + '', + array( + 'id' => array('name'=>'id','type'=>'xsd:string'), + 'ref' => array('name'=>'ref','type'=>'xsd:string'), + 'ref_ext' => array('name'=>'ref_ext','type'=>'xsd:string'), + ) +); // 5 styles: RPC/encoded, RPC/literal, Document/encoded (not WS-I compliant), Document/literal, Document/literal wrapped @@ -155,6 +183,20 @@ $server->register( 'WS to create a product or service' ); +// Register WSDL +$server->register( + 'getListOfProductsOrServices', + // Entry values + array('authentication'=>'tns:authentication','filterproduct'=>'tns:filterproduct'), + // Exit values + array('result'=>'tns:result','arrayproducts'=>'tns:arrayproducts'), + $ns, + $ns.'#getListOfProductsOrServices', + $styledoc, + $styleuse, + 'WS to get list of all products or services id and ref' +); + /** * Get produt or service @@ -358,6 +400,84 @@ function createProductOrService($authentication,$product) } +/** + * getListOfProductsOrServices + * + * @param array $authentication Array of authentication information + * @param array $filterproduct Filter fields + * @return array Array result + */ +function getListOfProductsOrServices($authentication,$filterproduct) +{ + global $db,$conf,$langs; + + $now=dol_now(); + + dol_syslog("Function: getListOfProductsOrServices login=".$authentication['login']); + + if ($authentication['entity']) $conf->entity=$authentication['entity']; + + // Init and check authentication + $objectresp=array(); + $arrayproducts=array(); + $errorcode='';$errorlabel=''; + $error=0; + $fuser=check_authentication($authentication,$error,$errorcode,$errorlabel); + // Check parameters + + if (! $error) + { + $sql ="SELECT rowid, ref, ref_ext"; + $sql.=" FROM ".MAIN_DB_PREFIX."product"; + $sql.=" WHERE entity=".$conf->entity; + foreach($filterproduct as $key => $val) + { + if ($key == 'type' && $val >= 0) $sql.=" AND fk_product_type = ".$db->escape($val); + if ($key == 'tosell') $sql.=" AND to_sell = ".$db->escape($val); + if ($key == 'tobuy') $sql.=" AND to_buy = ".$db->escape($val); + } + $resql=$db->query($sql); + if ($resql) + { + $num=$db->num_rows($resql); + + $i=0; + while ($i < $num) + { + $obj=$db->fetch_object($resql); + $arrayproducts[$obj->rowid]=array('id'=>$obj->rowid,'ref'=>$obj->ref,'ref_ext'=>$obj->ref_ext); + $i++; + } + } + else + { + $error++; + $errorcode=$db->lasterrno(); + $errorlabel=$db->lasterror(); + } + } + + if ($error) + { + $objectresp = array( + 'result'=>array('result_code' => $errorcode, 'result_label' => $errorlabel), + 'arrayproducts'=>$arrayproducts + ); + } + else + { + $objectresp = array( + 'result'=>array('result_code' => 'OK', 'result_label' => ''), + 'arrayproducts'=>$arrayproducts + ); + } +var_dump($objectresp);exit; + return $objectresp; +} + + + + // Return the results. $server->service($HTTP_RAW_POST_DATA);