<?php

/**
 * Classe permettant d'envoyer des donnes vers un connecteur ispi RIA en
 * mode POST par default et sous la forme d'un formulaire
 *
 * @author Administrateur
 *
 */
class SendHttpRIA
{

    /**
     * Nom de l'appname RIA
     * 
     * @var unknown_type
     */
    var $appname = '';

    /**
     * Nom du programme public RIA
     * 
     * @var unknown_type
     */
    var $prgname = '';

    /**
     * Nom du l'argment qui sera utilisé coté magic via la commande getParam
     * 
     * @var unknown_type
     */
    var $argument = '';

    /**
     * Method par defaut POST
     * 
     * @var unknown_type
     */
    var $method = 'POST';

    /**
     * Definition du content type
     * 
     * @var unknown_type
     */
    var $header = 'Content-type: application/x-www-form-urlencoded';

    /**
     * Par default le module ISPI à utiliser
     * 
     * @var unknown_type
     */
    var $ispi = '/uniscripts/mgrqispi.dll';

    /**
     * Par default protocol HTTP
     * 
     * @var unknown_type
     */
    var $protocol = 'http';

    /**
     * Nom du host pour l'url
     * 
     * @var unknown_type
     */
    var $host = '';

    var $port = '80';

    /**
     * Document de retour XmlDocument
     * 
     * @var unknown_type
     */
    var $xmlRetour = null;

    var $diag = false;

    private $useNameSpace = true;

    /**
     * Constructeur de la class
     *
     * @param $appname Nom
     *            de l'appname RIA
     * @param $prgname Nom
     *            du programme public RIA
     * @param $content Nom
     *            du l'argment qui sera utilisé coté magic via la commande getParam
     */
    function __construct($appname, $prgname, $content = 'content')
    {
        $this->appname = & $appname;
        $this->prgname = & $prgname;
        $this->argument = & $content;
    }

    public function setUseNameSpace($value)
    {
        $this->useNameSpace = $value;
    }

    /**
     * Permet d'indiquer le protocol : http / https /ftp ....
     * 
     * @param
     *            $protocol
     */
    function setProtocol($protocol = 'http')
    {
        $this->protocol = & $protocol;
    }

    /**
     * Determine le debug pour la page de diagnostique
     * 
     * @param
     *            $diagFlag
     */
    function setDiag($diagFlag)
    {
        $this->diag = & $diagFlag;
    }

    /**
     * indiquer le nom de la machine host ciblé
     * 
     * @param
     *            $host
     */
    function setHost($host = '127.0.0.1')
    {
        $this->host = & $host;
    }

    function setPort($port = '80')
    {
        $this->port = & $port;
    }

    function setIspi($ispi = '/uniscripts/mgrqispi.dll')
    {
        $this->ispi = & $ispi;
    }

    /**
     * indiquer la methode à utiliser POST par defaut
     * 
     * @param
     *            $method
     */
    function setMethod($method = 'POST')
    {
        $this->method = & $method;
    }

    /**
     * Envoy un flux au connecteur
     * 
     * @param $object <b>$object</b>
     *            peut etre une classe de type XmlDocument sinon un string
     *            <b>Si le traitement est ok le contenu de retour devant etre un xml est utilisable via </b><h1>getXmlFromRia</h1>
     *            
     *            NE JAMAIS OPTIMISE AVEC D'AUTRE REFERENCE que celui qui est sur le paramètre 1 ($nomMetod) en effet, existe l'appel WebService SSO LEON GROSSE impossible à tester en nos locaux car pas de client
     */
    function &send(& $nomMetod, $object, $headerSpecifique = null, $modeASynchrone = null)
    {
        if (is_null($headerSpecifique)) {
        
            if ($object instanceof XmlDocument)
                $data = "appname={$this->appname}&prgname={$this->prgname}&{$this->argument}=" . urlencode(base64_encode($object->SaveXml()));
            else
                $data = "appname={$this->appname}&prgname={$this->prgname}&{$this->argument}=" . urlencode(base64_encode($object));
        
            
            $header = $this->header;
            $data .= '&METHOD_OXAPROC=' . $nomMetod;
            if (! is_null($modeASynchrone)) {
                $data .= '&MODE=' . ($modeASynchrone ? 'A' : 'S'); // Spec 3582
                if ($modeASynchrone)
                    $data .= '&CODUSR=' . urlencode($_SESSION['Session_Login']); // Spec 3582
            }
        } else {
            if ($object instanceof XmlDocument)
                $data = $object->SaveXml();
            else
                $data = & $object;
        }
       
       $ok= true;


        $URL =$this->protocol.'://'.$this->host.':'.$this->port.$this->ispi;

        $ch = curl_init($URL);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        //curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, "$data");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        
        $httpcode = curl_getinfo($ch);
        curl_close($ch);
        
        
        if($httpcode['http_code']!= 200)
        {
            $ok= false;
            return $ok;
        }
        
        echo stream_get_contents($output);
        
        $this->xmlRetour = new XmlDocument();
        $this->xmlRetour->loadXmlString($output);
        return $ok;

    }

    function &getXmlFromRia()
    {
        return $this->xmlRetour;
    }
}