_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $request = $this->getRequest(); //Get the service name, make sure the string is in lower case $serviceName = strtolower($request->getParam('service', 'Entreprise')); //ClassName and Directory with first letter capitalized $serviceClassName = ucfirst($serviceName); //Customize service for customers if ('clients' == $serviceName ) { $client = strtolower($request->getParam('client', '')); $clientClassName = ucfirst($client); //Get list of customers $clients = array(); $listeClients = include APPLICATION_PATH . '/../library/WsScore/Clients/ClientsConfig.php'; foreach ( $listeClients as $section => $params ){ if ($params['actif']) { $clients[$section] = $params; } } if (!array_key_exists($client, $clients)){ echo 'Service clients introuvable !'; exit; } $configServiceVersions = $clients[$client]['versions']; } else { //Service versions $services = include APPLICATION_PATH . '/../library/WsScore/ServicesConfig.php'; $configServiceVersions = $services[$serviceName]['versions']; } // Check versions foreach( $configServiceVersions as $section => $params ) { $serviceVersions[$section] = $params; if ($params['defaut']) { $defautVersion = $section; } } $version = $request->getParam('version', 'v'.$defautVersion); $version = substr($version, 1); // Version inexistante if ( !array_key_exists($version, $serviceVersions) ) { echo "Version inexistante."; exit; } // Version désactivé if ( !$serviceVersions[$version]['actif'] ) { echo "Version désactivée."; exit; } // Charger les classes et les types pour le service suivant la version if ('clients' == $serviceName) { $pathServiceClassIni = 'WsScore/Clients/'.$clientClassName.'/v'.$version.'/Config.php'; $pathServiceClassPhp = 'WsScore/Clients/'.$clientClassName.'/v'.$version.'/Entreprise.php'; //Gestion du mode de génération du wsdl if ( APPLICATION_ENV == 'development' || array_key_exists('mode', $serviceVersions[$version]) && $serviceVersions[$version]['mode']=='auto') { $pathServiceUrl = 'clients/'.$client.'/v'.$version.'?wsdl-auto'; } else { $pathServiceUrl = 'clients/'.$client.'/v'.$version.'?wsdl'; } //On redéfini le nom du service $serviceClassName = 'Entreprise'; $fichierWsdl = $clientClassName.'-'.$serviceClassName.'-'.$version.'.wsdl'; } else { $pathServiceClassIni = 'WsScore/'.$serviceClassName.'/v'.$version.'/Config.php'; $pathServiceClassPhp = 'WsScore/'.$serviceClassName.'/v'.$version.'/'.$serviceClassName.'.php'; //Gestion du mode de génération du wsdl if ( APPLICATION_ENV == 'development' || array_key_exists('mode', $serviceVersions[$version]) && $serviceVersions[$version]['mode']=='auto') { $pathServiceUrl = $serviceName.'/v'.$version.'?wsdl-auto'; } else { $pathServiceUrl = $serviceName.'/v'.$version.'?wsdl'; } $fichierWsdl = $serviceClassName.'-'.$version.'.wsdl'; } //Get map of WSDL type to PHP Classes $classmap = include $pathServiceClassIni; //Inclusion des classes de données require_once $pathServiceClassPhp; // Fourniture du wsdl if ( isset($_GET['wsdl']) && file_exists($fichierWsdl) ) { if (!headers_sent()) { header('Content-Type: text/xml'); } echo file_get_contents($fichierWsdl); } elseif ( isset($_GET['wsdl']) && !file_exists($fichierWsdl) || 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($serviceClassName); // Enregistrement du WSDL dans un fichier if ( isset($_GET['wsdl-generate']) ) { if (file_exists($fichierWsdl)) { unlink($fichierWsdl); } $wsdl->dump($fichierWsdl); echo "Le fichier $fichierWsdl a été généré"; //Génération/Fourniture du wsdl } elseif (isset($_GET['wsdl']) && !file_exists($fichierWsdl)) { $wsdl->dump($fichierWsdl); if (!headers_sent()) { header('Content-Type: text/xml'); } echo file_get_contents($fichierWsdl); // Envoi sur la sortie standard le wsdl sans enregistrement dans un fichier } elseif ( isset($_GET['wsdl-auto']) ){ $wsdl->handle(); } // Fourniture du service } else { // Traitement if (APPLICATION_ENV == 'production' && file_exists($fichierWsdl)) { $server = new Zend_Soap_Server($fichierWsdl); } else { $hostName = $this->getRequest()->getHttpHost(); $server = new Zend_Soap_Server('http://'.$hostName.'/'.$pathServiceUrl); } $server->setSoapFeatures(SOAP_USE_XSI_ARRAY_TYPE + SOAP_SINGLE_ELEMENT_ARRAYS); $server->setClassmap($classmap); $server->setEncoding('UTF-8'); $server->registerFaultException(array('WsScores_Exception')); $server->setWsiCompliant(true); $server->setObject(new $serviceClassName()); $server->handle(); //Pour débuggage ultime $debug = false; if ($debug){ $request = $server->getLastRequest(); file_put_contents(APPLICATION_PATH . '/../request.log', $request); $response = $server->getLastResponse(); file_put_contents(APPLICATION_PATH . '/../response.log', $response); } } } }