<?php
require_once realpath(dirname(__FILE__)).'/constantes.php';

/**
 * Retourne le résultat du webservice infogreffe.
 * @param string $req
 *		La demande à infogreffe en xml
 * @return string
 * 		Retourne le xml renvoyé par le webservice.
 */
function getInfogreffeXML($req){
	global $firephp, $fichier;

	$fp=@fopen( PATH_DATA.'/infogreffe/xml/' . $fichier.'.query' , 'w');
	@fwrite($fp, $req);
	@fclose($fp);
	$url = INFOGREFFE_WS_URL;
	$req = utf8_encode($req);
	$post = '<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://webservices.infogreffe.fr/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:getProduitsWebServicesXML><param0 xsi:type="xsd:string">'.$req.'</param0></ns1:getProduitsWebServicesXML></SOAP-ENV:Body></SOAP-ENV:Envelope>';
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
	curl_setopt($ch, CURLOPT_COOKIEFILE,TRUE);
	curl_setopt($ch, CURLOPT_POST, TRUE);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
	$output = curl_exec($ch);
	$xml = str_replace("<?xml version='1.0' encoding='UTF-8'?><SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'><SOAP-ENV:Body><ns0:getProduitsWebServicesXMLResponse xmlns:ns0='urn:local' SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'><return xsi:type='xsd:string'>", '', $output);
	$xml = str_replace('</return></ns0:getProduitsWebServicesXMLResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>','', $xml);
	$firephp->log($xml,'XML');

	/*	Erreur violation encoding
	$client2 = new SoapClient(null, array(  'location'      => INFOGREFFE_WS_URL,
    										'uri'           => INFOGREFFE_WS_URI,
                                    	    'soap_version'  => SOAP_1_1,
                                   	     	'trace'         => 1,
                                  		    'style'         => SOAP_RPC,
                                        	'use'           => SOAP_ENCODED,
								));

	try {
		if (!file_exists( PATH_DATA.'/pdf/acte-'.$siren.'-'.$option.'.pdf'))
		{
			$fp=@fopen( PATH_DATA.'/infogreffe/xml/' . $fichier.'.query' , 'w');
			@fwrite($fp, $req);
			@fclose($fp);
			$req=utf8_encode($req);
			$firephp->log($req, 'XML');
			$O=$client2->getProduitsWebServicesXML($req);
			$xml=implode('', (array)$O);
			$firephp->log($xml,'XML');
		}
	}catch (SoapFault $soapFault) {
		$success=false;
		$firephp->log($soapFault,'Fault');
		$firephp->log($client2->__getLastRequest(),'Infogreffe Request');
		$firephp->log($client2->__getLastResponse(),'Infogreffe Response');
		$response=$client2->__getLastResponse();
		$response=str_replace("<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'><SOAP-ENV:Body><ns0:getProduitsWebServicesXMLResponse xmlns:ns0='urn:local' SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'><return xsi:type='xsd:string'>",'', $response);
		$xml=str_replace('</return></ns0:getProduitsWebServicesXMLResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>','', $response);
	}
*/
	return $xml;
}

/**
 * Générer le xml pour la requete infogreffe.
 * @param string $siren
 *		Le SIREN à
 * @param string $idCommande
 * 		L'identifiant pour la commande
 * @param string $type
 * 		Le type de document demandé
 * @param string $vecteur
 * 		Le vecteur de diffusion
 * @param string $option
 *
 * @return string
 * 		Retourne la chaine xml de requete.
 */
function requeteInfogreffe($siren, $idCommande, $type, $vecteur, $option){
	global $firephp;
	$firephp->log($siren, 'siren' );
	$firephp->log($idCommande, 'idCommande');
	$firephp->log($type, 'type');
	$firephp->log($vecteur, 'vecteur');
	$firephp->log($option, 'option');
	
	$req =	'<demande>'.
			'<emetteur>'.
			'<code_abonne>'.INFOGREFFE_WS_USER.'</code_abonne>'.//85009006
			'<mot_passe>'.INFOGREFFE_WS_PASS.'</mot_passe>'.//
			'<reference_client>G'.$idCommande.'</reference_client>'.
			'<code_requete>'.
			'<type_profil>A</type_profil>'.
			'<origine_emetteur>IC</origine_emetteur>'.
			'<nature_requete>C</nature_requete>'.
			'<type_document>'.$type.'</type_document>'.// KB=Kbis, HQ=Histo, ST=Statut, AC=Acte, LE=Liste étab
			'<type_requete>S</type_requete>'.
			'<media>WS</media>'.
			'<mode_diffusion>';

	if ($type=='AC' && $option=='' && $vecteur=='XL')
		$req.=	'<mode type="T"/>'.
				'<mode type="C"/>';

	$req.=	'<mode type="'.$vecteur.'"/>'.
			'</mode_diffusion>'.
			'</code_requete>'.
			'</emetteur>'.
			'<commande>'.
			'<num_siren>'.$siren.'</num_siren>';

	if ( ($type=='BS' || $type=='BI') && $option<>'' ) {
		$tabRefActe = explode('-', $option);
		$tabMil = explode('_', $tabRefActe[0]);
		$req.=	'<greffe>'.$tabRefActe[2].'</greffe>'.
				'<dossier_millesime>'.$tabRefActe[3].'</dossier_millesime>'.
				'<dossier_statut>'.$tabRefActe[4].'</dossier_statut>'.
				'<dossier_chrono>'.$tabRefActe[5].'</dossier_chrono>'.
				'<num_depot>'.$tabRefActe[6].'</num_depot>'.
				'<date_cloture>'.WDate::dateT('Ymd','d/m/Y', $tabRefActe[1]).'</date_cloture>';
	}elseif ( $type=='AC' && $option<>'' ) {
		$tabRefActe = explode('-', $option);
		$req.=	'<greffe>'.$tabRefActe[2].'</greffe>'.
				'<dossier_millesime>'.$tabRefActe[3].'</dossier_millesime>'.
				'<dossier_statut>'.$tabRefActe[4].'</dossier_statut>'.
				'<dossier_chrono>'.$tabRefActe[5].'</dossier_chrono>'.
				'<num_depot>'.$tabRefActe[6].'</num_depot>'.
				'<liste_actes>'.
				'<acte num="'.$tabRefActe[7].'"/>'.
				'</liste_actes>';
				/*  $optionUrl=$bilan['millesime'].'_'.$bilan['type_comptes'].'-'.$dateRef.'-'.$bilan['num_gest_greffe'].'-'.$bilan['num_gest_millesime'].'-'.$bilan['num_gest_statut'].'-'.$bilan['num_gest_chrono'].'-'.$bilan['num_depot'];*/
	}
	$req.='</commande></demande>';
	return $req;
}

/**
 * Parcours le document xml renvoyé par infogreffe .
 * @param string $file
 *		Le chemin complet vers le fichier à analyser.
 * @return array
 * 		Retourne un tableau structuré des actes, etc,...
 */
function xmlArrayActes($file)
{
	global $firephp;
	$vecteurTinit = false;
	$dom_object = new DomDocument2();
	//TODO : Vérfier que le fichier existe
	$dom_object->load($file);
	$tabActes=array();

	// create DOMXPath object with our DOMObject
	$xpath = new Domxpath($dom_object);
	$result = $xpath->query("//liste_depot_acte/depot_acte/.");

	foreach ($result as $annonce) {
		// N° Gestion
		$title = $xpath->query ("num_gest/greffe", $annonce);
		$num_gest_greffe=$title->item(0)->nodeValue;
		$title = $xpath->query ("num_gest/dossier_millesime", $annonce);
		$num_gest_millesime=$title->item(0)->nodeValue;
		$title = $xpath->query ("num_gest/dossier_statut", $annonce);
		$num_gest_statut=$title->item(0)->nodeValue;
		$title = $xpath->query ("num_gest/dossier_chrono", $annonce);
		$num_gest_chrono=$title->item(0)->nodeValue;
		// Siren
		$title = $xpath->query ("num_siren", $annonce);
		$num_siren = $title->item(0)->nodeValue;
		// N° Dépôt
		$title = $xpath->query ("num_depot", $annonce);
		$num_depot = $title->item(0)->nodeValue;
		// Date Dépôt
		$title = $xpath->query ("date_depot", $annonce);
		$date_depot = $title->item(0)->nodeValue;

		// Actes
		$actes = $xpath->query("acte/.", $annonce);
		$nbVecteurT = $nbActes = 0;

		foreach ($actes as $acte) {
			$nbActes++;
			// Date
			$title = $xpath->query ("date_acte", $acte);
			$date_acte=$title->item(0)->nodeValue;
			// N°
			$title = $xpath->query ("num_acte", $acte);
			$num_acte=$title->item(0)->nodeValue;
			// Type
			$title = $xpath->query ("type_acte", $acte);
			$type_acte=$title->item(0)->nodeValue;
			// Type lib
			$title = $xpath->query ("type_acte_libelle", $acte);
			$type_acte_libelle=$title->item(0)->nodeValue;
			// Nb Pages
			$title = $xpath->query ("nbpages_acte", $acte);
			$nbpages_acte=$title->item(0)->nodeValue;
			// decision/nature
			$title = $xpath->query ("decision/nature", $acte);
			$decision_nature=$title->item(0)->nodeValue;
			// decision/libelle
			$title = $xpath->query ("decision/libelle", $acte);
			$decision_libelle=$title->item(0)->nodeValue;
			// mode_diffusion
			$vecteurT = $vecteurC = false;
			$vecteurs = $xpath->query("mode_diffusion/.", $acte);
			foreach ($vecteurs as $vecteur) {
				$title = $xpath->query ("mode[@type='T']", $vecteur);
				if ($title->length==1)	{
					$vecteurT = true;
					$vecteurTinit = true;
					$nbVecteurT++;
				}
				$title = $xpath->query ("mode[@type='C']", $vecteur);
				if ($title->length==1)	$vecteurC = true;
			}

			if ($date_acte=='') $date=$date_depot; else $date=$date_acte;
			//	$index=0;
			//	while (isset($tabActes[$date.'.'.$index]))	$index++;

			$tabActes[''.$date.'-'.$num_depot.'-'.$num_acte.'-'.$type_acte] = array(
				'type'=>$type_acte_libelle,
				'decisions'=>$decision_libelle,
				'depot_num'=>$num_depot,
				'depot_date'=>$date_depot,
				'num_gest_greffe'=>$num_gest_greffe,
				'num_gest_millesime'=>$num_gest_millesime,
				'num_gest_statut'=>$num_gest_statut,
				'num_gest_chrono'=>$num_gest_chrono,
				'num_depot'=>$num_depot,
				'num_acte'=>$num_acte,
				'type_acte'=>$type_acte,
				'vecteurT'=>$vecteurT,
				'vecteurC'=>$vecteurC,
			);
		}
	}
	$firephp->log($tabActes, 'tabActes');
	$return = array( 'Actes' => $tabActes, 'vecteurTinit' => $vecteurTinit, 'nbVecteurT' => $nbVecteurT, 'nbActes' => $nbActes );
	return $return;
}

/**
 * Parcours le document xml renvoyé par infogreffe .
 * @param string $file
 *		Le chemin complet vers le fichier à analyser.
 * @param string $query
 * 		La requete xpath de départ pour analyser le document
 * @return array
 * 		Retourne un tableau structuré des bilans, etc,...
 */
function xmlArrayBilans($file, $query)
{
	global $firephp;
	$dom_object = new DomDocument2();
	$dom_object->load($file);
	$tabActes=array();
	$xpath = new Domxpath($dom_object);
	$result = $xpath->query($query);

	foreach ($result as $annonce) {
		// N° Gestion
		$title = $xpath->query ("num_gest/greffe", $annonce);
		$num_gest_greffe=$title->item(0)->nodeValue;
		$title = $xpath->query ("num_gest/dossier_millesime", $annonce);
		$num_gest_millesime=$title->item(0)->nodeValue;
		$title = $xpath->query ("num_gest/dossier_statut", $annonce);
		$num_gest_statut=$title->item(0)->nodeValue;
		$title = $xpath->query ("num_gest/dossier_chrono", $annonce);
		$num_gest_chrono=$title->item(0)->nodeValue;
		// Siren
		$title = $xpath->query ("num_siren", $annonce);
		$num_siren=$title->item(0)->nodeValue;
		// N° Dépôt
		$title = $xpath->query ("num_depot", $annonce);
		$num_depot=$title->item(0)->nodeValue;
		// Date clôture
		$title = $xpath->query ('date_cloture', $annonce);	// 2005-12-31
		$date_cloture=$title->item(0)->nodeValue;
	 	// liasse
		$title = $xpath->query ('liasse', $annonce);		// 2033
		$liasse=$title->item(0)->nodeValue;
		// type de comptes
	 	$title = $xpath->query ('type_comptes', $annonce);	// sociaux
		$type_comptes=$title->item(0)->nodeValue;
	 	// millesime
	 	$title = $xpath->query ('millesime', $annonce);		// 2005
		$millesime=$title->item(0)->nodeValue;
		// url_acces
	 	$title = $xpath->query ('url_acces', $annonce);
		$url_acces=$title->item(0)->nodeValue;
		if (substr($url_acces,0,5)=='null/')	$url_acces='http://webservices.infogreffe.fr/'.substr($url_acces,5,strlen($url_acces)-5);

		// mode_diffusion
		$vecteurT = $vecteurC = false;
		$vecteurs = $xpath->query("mode_diffusion/.", $annonce);
		foreach ($vecteurs as $vecteur) {
			$title = $xpath->query ("mode[@type='T']", $vecteur);
			if ($title->length==1)	$vecteurT=true;
			$title = $xpath->query ("mode[@type='C']", $vecteur);
			if ($title->length==1)	$vecteurC=true;
		}

		$tabActes[$millesime.'-'.$date_cloture.'-'.$type_comptes]=array(
			'num_gest_greffe'=>$num_gest_greffe,
			'num_gest_millesime'=>$num_gest_millesime,
			'num_gest_statut'=>$num_gest_statut,
			'num_gest_chrono'=>$num_gest_chrono,
			'num_depot'=>$num_depot,
			'liasse'=>$liasse,
			'millesime'=>$millesime,
			'type_comptes'=>$type_comptes,
			'date_cloture'=>$date_cloture,
			'url_acces'=>$url_acces,
			'vecteurT'=>$vecteurT,
			'vecteurC'=>$vecteurC,
		);
	}
	$firephp->log($tabActes, 'tabActes');
	$return = array( 'Actes' => $tabActes );
	return $return;
}

/**
 * Envoi un mail informant de la commande de pièce.
 * @param string $email
 *		L'adresse email qui doit recevoir la pièce.
 * @param string $siren
 * 		Le siren de l'entité
 * @param string $type
 * 		Le type de demande (asso, greffe)
 * @return array
 * 		Retourne un tableau structuré des bilans, etc,...
 */
function mailCommande($email, $siren, $type){
	//On vérifie l'email
	if (preg_match('#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#',$email)) {
		//Suivant le type de commande
		switch($type){
			case 'asso':
				$subject = "Commande de statuts associations pour $siren à ".$email;
				break;
			case 'greffe':
				$subject = "Commande de pièces pour $siren à ".$email;
				break;
		}
		require_once 'mail/mail.php';
		sendMail(	
			$subject, 
			'REQUEST='.EOL.print_r($_REQUEST,true).'EOL'.
			'SERVER='.EOL.print_r($_SERVER,true).'EOL'.
			'SESSION='.EOL.print_r($_SESSION,true).'EOL'.
			'ENV='.EOL.print_r($_ENV,true).'EOL'.
			'tabInfo='.print_r($tabInfo,true), 
			//From
			array(	
				'email' => 'contact@scores-decisions.com',
				'name' => 'Contact',
			), 
			//TO
			array(
				0 => array(
					'email'=> 'contact@scores-decisions.com', 
					'name' => 'Contact'
				)
			)
		);
		return true;
	}else{
		return false;
	}
}

class DomDocument2 extends DOMDocument {
	function getValueFromTag($tagName) {
		$items=$this->getElementsByTagName($tagName);
		foreach ($items as $item) {

    		return utf8_decode($item->nodeValue);
		}
	}
}

?>