webservice/application/controllers/ServiceController.php

116 lines
3.1 KiB
PHP

<?php
ini_set("soap.wsdl_cache_enabled", "0");
class ServiceController extends Zend_Controller_Action
{
protected $wsdlName = 'WsEntreprise';
protected $wsdlVersion = '0.1';
protected $classmap = array();
public function init()
{
$this->_helper->viewRenderer->setNoRender();
}
public function preDispatch()
{
$wsConfig = new Zend_Config_Ini(APPLICATION_PATH .
'/configs/WsEntreprise.ini');
foreach ($wsConfig->Type as $type){
$this->classmap[$type] = $type;
}
}
public function indexAction()
{
// action body
require_once 'Zend/Exception.php';
require_once 'Zend/Soap/AutoDiscover.php';
require_once 'Zend/Soap/Server.php';
require_once 'WsScore/WsEntreprise.php';
require_once 'WsScore/WrappedServiceProxy.php';
$fichierWsdl = $this->wsdlName.'-'.$this->wsdlVersion.'.wsdl';
// Fourniture du wsdl
if (isset($_GET['wsdl']))
{
if (file_exists($fichierWsdl))
{
if (!headers_sent()) {
header('Content-Type: text/xml');
}
echo file_get_contents($fichierWsdl);
}
else
{
echo "Erreur WSDL inexistant !";
}
}
// Génération du wsdl
elseif ( isset($_GET['wsdl-generate']) || isset($_GET['wsdl-auto']) )
{
// Définition du webservice
$wsdl = new Zend_Soap_AutoDiscover();
$wsdl->setComplexTypeStrategy(Zend_Soap_Wsdl_Strategy_ArrayOfTypeSequence);
$wsdl->setOperationBodyStyle( array('use' => 'literal') );
$wsdl->setBindingStyle( array('style' => 'document') );
$wsdl->setClass('WsEntreprise');
// Enregistrement du WSDL dans un fichier
if ( isset($_GET['wsdl-generate']) )
{
if (!file_exists($fichierWsdl))
{
$wsdl->dump($fichierWsdl);
echo "Le fichier $fichierWsdl a été généré";
}
else
{
// @todo envové un mail en mode production
echo "ERREUR : Le fichier $fichierWsdl est déjà présent !";
}
}
// Envoi sur la sortie standard le wsdl
elseif ( isset($_GET['wsdl-auto']) )
{
$wsdl->handle();
}
// Fourniture du service
} else {
// Données de configuration placé dans le registre
$webservicesConfig = new Zend_Config_Ini(APPLICATION_PATH .
'/configs/webservices.ini', APPLICATION_ENV);
Zend_Registry::set('webservicesConfig',$webservicesConfig);
// traitement
try
{
if (APPLICATION_ENV == 'production') {
// @todo Vérifier la présence du fichier sinon envoyer erreur
$server = new Zend_Soap_Server($fichierWsdl);
} else {
$hostName = $this->getRequest()->getHttpHost();
$server = new Zend_Soap_Server('http://'.$hostName.'/service?wsdl-auto');
}
$proxy = new WrappedService_Proxy('WsEntreprise', array(), array('wrappedParts' => true));
$server->setObject($proxy);
$server->setClassmap($this->classmap);
//@todo Vérifier l'utilisateur, sinon renvoyé erreur soap
//$server->fault();
$server->handle();
} catch (Zend_Exception $e) {
Zend_Registry::get('log')->err("Service - ".$e->getMessage());
}
}
exit;
}
}