Пример #1
0
    /**
     * Toma una imagen y un texto y los une y retorna
     * @param string $texto Texto a insertar en la imagen
     * (maps to the xs:string XML schema type )
     */
    function op__upload(toba_servicio_web_mensaje $mensaje)
    {
        //--1- Controlar entrada
        if (count($mensaje->wsf()->attachments) == 0) {
            throw new WSFault("Sender", "No se encontro la imagen adjunta");
        }
        if (count($mensaje->wsf()->attachments) > 1) {
            throw new WSFault("Sender", "Sólo se acepta una única imagen como parámetro de entrada");
        }
        $xml = new SimpleXMLElement($mensaje->get_payload());
        $texto = (string) $xml->texto;
        //--2- Hacer un procesamiento a la imagen
        $imagen = imagecreatefromstring(current($mensaje->wsf()->attachments));
        $textcolor = imagecolorallocate($imagen, 0, 0, 0);
        imagestring($imagen, 5, 2, 2, $texto, $textcolor);
        ob_start();
        imagepng($imagen);
        $salida = ob_get_contents();
        ob_end_clean();
        //--3- Retorna la imagen
        $payload = <<<XML
<ns1:upload xmlns:ns1="http://siu.edu.ar/toba_referencia/pruebas">
    <ns1:fileName>salida.png</ns1:fileName>
    <ns1:image xmlmime:contentType="image/png" xmlns:xmlmime="http://www.w3.org/2004/06/xmlmime">
    \t<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:imagen"></xop:Include>
    </ns1:image>
</ns1:upload>
XML;
        $opciones = array('attachments' => array('imagen' => $salida));
        return new toba_servicio_web_mensaje($payload, $opciones);
    }
 function send(toba_servicio_web_mensaje $mensaje)
 {
     try {
         $this->wsf->send($mensaje->wsf());
     } catch (WSFault $fault) {
         self::get_modelo_proyecto($this->proyecto);
         toba::logger()->debug("Request: " . $this->wsf->getLastRequest());
         toba::logger()->debug("Response: " . $this->wsf->getLastResponse());
         $detalle = isset($fault->Detail) ? $fault->Detail : '';
         throw new toba_error_servicio_web($fault->Reason, $fault->Code, $detalle);
     } catch (Exception $e) {
         throw new toba_error_comunicacion($e->getMessage(), $this->opciones, $this->wsf->getLastResponseHeaders());
     }
 }